Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <psteinhardt@gitlab.com>2021-05-19 20:10:08 +0300
committerPatrick Steinhardt <psteinhardt@gitlab.com>2021-05-19 20:10:08 +0300
commit066494f2d1cff8a9764af0d583370cc2b3ffebac (patch)
tree99b75c4d55655399f88b4fd8451a86b9f8c1f022
parent0f640a20ff16076ac7ea830bdafa38022cc9540f (diff)
parente7eeed02436d96b4a314cb260f46b9c35960a64d (diff)
Merge branch 'pks-config-voting-replication' into 'master'
repository: Enable replication of and voting on gitconfig See merge request gitlab-org/gitaly!3511
-rw-r--r--internal/git/gittest/command.go2
-rw-r--r--internal/gitaly/service/repository/config.go116
-rw-r--r--internal/gitaly/service/repository/config_test.go151
-rw-r--r--internal/gitaly/service/repository/replicate.go67
-rw-r--r--internal/gitaly/service/repository/replicate_test.go9
-rw-r--r--internal/gitaly/service/repository/testhelper_test.go5
-rw-r--r--internal/metadata/featureflag/feature_flags.go3
-rw-r--r--internal/praefect/coordinator.go11
-rw-r--r--proto/go/gitalypb/repository-service.pb.go650
-rw-r--r--proto/repository-service.proto24
-rw-r--r--ruby/proto/gitaly/repository-service_pb.rb8
-rw-r--r--ruby/proto/gitaly/repository-service_services_pb.rb3
12 files changed, 787 insertions, 262 deletions
diff --git a/internal/git/gittest/command.go b/internal/git/gittest/command.go
index f658b90cd..e3d98bfcc 100644
--- a/internal/git/gittest/command.go
+++ b/internal/git/gittest/command.go
@@ -12,6 +12,8 @@ import (
// Exec runs a git command and returns the standard output, or fails.
func Exec(t testing.TB, cfg config.Cfg, args ...string) []byte {
+ t.Helper()
+
return run(t, nil, cfg, args...)
}
diff --git a/internal/gitaly/service/repository/config.go b/internal/gitaly/service/repository/config.go
index 98f31a154..f757f5e04 100644
--- a/internal/gitaly/service/repository/config.go
+++ b/internal/gitaly/service/repository/config.go
@@ -2,16 +2,75 @@ package repository
import (
"context"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
"gitlab.com/gitlab-org/gitaly/internal/command"
"gitlab.com/gitlab-org/gitaly/internal/git"
"gitlab.com/gitlab-org/gitaly/internal/gitaly/rubyserver"
+ "gitlab.com/gitlab-org/gitaly/internal/gitaly/transaction"
+ "gitlab.com/gitlab-org/gitaly/internal/helper"
+ "gitlab.com/gitlab-org/gitaly/internal/metadata/featureflag"
+ "gitlab.com/gitlab-org/gitaly/internal/transaction/txinfo"
+ "gitlab.com/gitlab-org/gitaly/internal/transaction/voting"
"gitlab.com/gitlab-org/gitaly/proto/go/gitalypb"
+ "gitlab.com/gitlab-org/gitaly/streamio"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
+// GetConfig reads the repository's gitconfig file and returns its contents.
+func (s *server) GetConfig(
+ request *gitalypb.GetConfigRequest,
+ stream gitalypb.RepositoryService_GetConfigServer,
+) error {
+ repoPath, err := s.locator.GetPath(request.GetRepository())
+ if err != nil {
+ return err
+ }
+
+ configPath := filepath.Join(repoPath, "config")
+
+ gitconfig, err := os.Open(configPath)
+ if err != nil {
+ if os.IsNotExist(err) {
+ return status.Errorf(codes.NotFound, "opening gitconfig: %v", err)
+ }
+ return helper.ErrInternalf("opening gitconfig: %v", err)
+ }
+
+ writer := streamio.NewWriter(func(p []byte) error {
+ return stream.Send(&gitalypb.GetConfigResponse{
+ Data: p,
+ })
+ })
+
+ if _, err := io.Copy(writer, gitconfig); err != nil {
+ return helper.ErrInternalf("sending config: %v", err)
+ }
+
+ return nil
+}
+
func (s *server) DeleteConfig(ctx context.Context, req *gitalypb.DeleteConfigRequest) (*gitalypb.DeleteConfigResponse, error) {
+ /*
+ * We need to vote both before and after the change because we don't have proper commit
+ * semantics: it's not easily feasible to lock the config manually, vote on it and only
+ * commit the change if the vote was successful. Git automatically does this for us for ref
+ * updates via the reference-transaction hook, but here we'll need to use an approximation.
+ *
+ * As an approximation, we thus vote both before and after the change. Praefect requires the
+ * vote up front because if an RPC failed and no vote exists, it assumes no change was
+ * performed, and that's bad for us if we fail _after_ the modification but _before_ the
+ * vote on changed data. And the second vote is required such that we can assert that all
+ * Gitaly nodes actually did perform the same change.
+ */
+ if err := s.voteOnConfig(ctx, req.GetRepository()); err != nil {
+ return nil, helper.ErrInternal(fmt.Errorf("preimage vote on config: %w", err))
+ }
+
for _, k := range req.Keys {
// We assume k does not contain any secrets; it is leaked via 'ps'.
cmd, err := s.gitCmdFactory.New(ctx, req.Repository, git.SubCmd{
@@ -32,6 +91,10 @@ func (s *server) DeleteConfig(ctx context.Context, req *gitalypb.DeleteConfigReq
}
}
+ if err := s.voteOnConfig(ctx, req.GetRepository()); err != nil {
+ return nil, helper.ErrInternal(fmt.Errorf("postimage vote on config: %w", err))
+ }
+
return &gitalypb.DeleteConfigResponse{}, nil
}
@@ -49,5 +112,56 @@ func (s *server) SetConfig(ctx context.Context, req *gitalypb.SetConfigRequest)
return nil, err
}
- return client.SetConfig(clientCtx, req)
+ /*
+ * We're voting twice, once on the preimage and once on the postimage. Please refer to the
+ * comment in DeleteConfig() for the reason.
+ */
+ if err := s.voteOnConfig(ctx, req.GetRepository()); err != nil {
+ return nil, helper.ErrInternalf("preimage vote on config: %v", err)
+ }
+
+ response, err := client.SetConfig(clientCtx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ if err := s.voteOnConfig(ctx, req.GetRepository()); err != nil {
+ return nil, helper.ErrInternalf("postimage vote on config: %v", err)
+ }
+
+ return response, nil
+}
+
+func (s *server) voteOnConfig(ctx context.Context, repo *gitalypb.Repository) error {
+ if featureflag.IsDisabled(ctx, featureflag.TxConfig) {
+ return nil
+ }
+
+ return transaction.RunOnContext(ctx, func(tx txinfo.Transaction, praefect txinfo.PraefectServer) error {
+ repoPath, err := s.locator.GetPath(repo)
+ if err != nil {
+ return fmt.Errorf("get repo path: %w", err)
+ }
+
+ config, err := os.Open(filepath.Join(repoPath, "config"))
+ if err != nil {
+ return fmt.Errorf("open repo config: %w", err)
+ }
+
+ hash := voting.NewVoteHash()
+ if _, err := io.Copy(hash, config); err != nil {
+ return fmt.Errorf("seeding vote: %w", err)
+ }
+
+ vote, err := hash.Vote()
+ if err != nil {
+ return fmt.Errorf("computing vote: %w", err)
+ }
+
+ if err := s.txManager.Vote(ctx, tx, praefect, vote); err != nil {
+ return fmt.Errorf("casting vote: %w", err)
+ }
+
+ return nil
+ })
}
diff --git a/internal/gitaly/service/repository/config_test.go b/internal/gitaly/service/repository/config_test.go
index 284af9504..00a365b7f 100644
--- a/internal/gitaly/service/repository/config_test.go
+++ b/internal/gitaly/service/repository/config_test.go
@@ -3,6 +3,10 @@ package repository
import (
"bufio"
"bytes"
+ "context"
+ "io/ioutil"
+ "os"
+ "path/filepath"
"strings"
"testing"
@@ -10,12 +14,70 @@ import (
"gitlab.com/gitlab-org/gitaly/internal/git/gittest"
"gitlab.com/gitlab-org/gitaly/internal/gitaly/config"
"gitlab.com/gitlab-org/gitaly/internal/gitaly/rubyserver"
+ "gitlab.com/gitlab-org/gitaly/internal/gitaly/transaction"
+ "gitlab.com/gitlab-org/gitaly/internal/helper"
+ "gitlab.com/gitlab-org/gitaly/internal/metadata/featureflag"
"gitlab.com/gitlab-org/gitaly/internal/testhelper"
+ "gitlab.com/gitlab-org/gitaly/internal/testhelper/testserver"
+ "gitlab.com/gitlab-org/gitaly/internal/transaction/txinfo"
+ "gitlab.com/gitlab-org/gitaly/internal/transaction/voting"
"gitlab.com/gitlab-org/gitaly/proto/go/gitalypb"
+ "gitlab.com/gitlab-org/gitaly/streamio"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
+func TestGetConfig(t *testing.T) {
+ cfg, client := setupRepositoryServiceWithoutRepo(t)
+
+ getConfig := func(
+ t *testing.T,
+ client gitalypb.RepositoryServiceClient,
+ repo *gitalypb.Repository,
+ ) (string, error) {
+ ctx, cleanup := testhelper.Context()
+ defer cleanup()
+
+ stream, err := client.GetConfig(ctx, &gitalypb.GetConfigRequest{
+ Repository: repo,
+ })
+ require.NoError(t, err)
+
+ reader := streamio.NewReader(func() ([]byte, error) {
+ response, err := stream.Recv()
+ var bytes []byte
+ if response != nil {
+ bytes = response.Data
+ }
+ return bytes, err
+ })
+
+ contents, err := ioutil.ReadAll(reader)
+ return string(contents), err
+ }
+
+ t.Run("normal repo", func(t *testing.T) {
+ repo, _, cleanup := gittest.InitBareRepoAt(t, cfg, cfg.Storages[0])
+ defer cleanup()
+
+ config, err := getConfig(t, client, repo)
+ require.NoError(t, err)
+ require.Equal(t, "[core]\n\trepositoryformatversion = 0\n\tfilemode = true\n\tbare = true\n", config)
+ })
+
+ t.Run("missing config", func(t *testing.T) {
+ repo, repoPath, cleanup := gittest.InitBareRepoAt(t, cfg, cfg.Storages[0])
+ defer cleanup()
+
+ configPath := filepath.Join(repoPath, "config")
+ require.NoError(t, os.Remove(configPath))
+
+ config, err := getConfig(t, client, repo)
+ require.Equal(t, status.Errorf(codes.NotFound, "opening gitconfig: open %s: no such file or directory", configPath), err)
+ require.Equal(t, "", config)
+ })
+}
+
func TestDeleteConfig(t *testing.T) {
cfg, client := setupRepositoryServiceWithoutRepo(t)
@@ -72,6 +134,47 @@ func TestDeleteConfig(t *testing.T) {
}
}
+func TestDeleteConfigTransactional(t *testing.T) {
+ testhelper.NewFeatureSets([]featureflag.FeatureFlag{
+ featureflag.TxConfig,
+ }).Run(t, func(t *testing.T, ctx context.Context) {
+ var votes []voting.Vote
+ txManager := transaction.MockManager{
+ VoteFn: func(_ context.Context, _ txinfo.Transaction, _ txinfo.PraefectServer, vote voting.Vote) error {
+ votes = append(votes, vote)
+ return nil
+ },
+ }
+
+ cfg, repo, repoPath, client := setupRepositoryService(t, testserver.WithTransactionManager(&txManager))
+
+ ctx, err := (&txinfo.PraefectServer{SocketPath: "i-dont-care"}).Inject(ctx)
+ require.NoError(t, err)
+ ctx, err = txinfo.InjectTransaction(ctx, 1, "node", true)
+ require.NoError(t, err)
+ ctx = helper.IncomingToOutgoing(ctx)
+
+ unmodifiedContents := testhelper.MustReadFile(t, filepath.Join(repoPath, "config"))
+ gittest.Exec(t, cfg, "-C", repoPath, "config", "delete.me", "now")
+ modifiedContents := testhelper.MustReadFile(t, filepath.Join(repoPath, "config"))
+
+ _, err = client.DeleteConfig(ctx, &gitalypb.DeleteConfigRequest{
+ Repository: repo,
+ Keys: []string{"delete.me"},
+ })
+ require.NoError(t, err)
+
+ if featureflag.IsEnabled(ctx, featureflag.TxConfig) {
+ require.Equal(t, []voting.Vote{
+ voting.VoteFromData(modifiedContents),
+ voting.VoteFromData(unmodifiedContents),
+ }, votes)
+ } else {
+ require.Len(t, votes, 0)
+ }
+ })
+}
+
func testSetConfig(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server) {
cfg, _, _, client := setupRepositoryServiceWithRuby(t, cfg, rubySrv)
@@ -130,3 +233,51 @@ func testSetConfig(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server) {
})
}
}
+
+func testSetConfigTransactional(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server) {
+ testhelper.NewFeatureSets([]featureflag.FeatureFlag{
+ featureflag.TxConfig,
+ }).Run(t, func(t *testing.T, ctx context.Context) {
+ var votes []voting.Vote
+
+ txManager := transaction.MockManager{
+ VoteFn: func(_ context.Context, _ txinfo.Transaction, _ txinfo.PraefectServer, vote voting.Vote) error {
+ votes = append(votes, vote)
+ return nil
+ },
+ }
+
+ _, repo, repoPath, client := setupRepositoryServiceWithRuby(t, cfg, rubySrv, testserver.WithTransactionManager(&txManager))
+
+ ctx, err := (&txinfo.PraefectServer{SocketPath: "i-dont-care"}).Inject(ctx)
+ require.NoError(t, err)
+ ctx, err = txinfo.InjectTransaction(ctx, 1, "node", true)
+ require.NoError(t, err)
+ ctx = helper.IncomingToOutgoing(ctx)
+
+ unmodifiedContents := testhelper.MustReadFile(t, filepath.Join(repoPath, "config"))
+
+ _, err = client.SetConfig(ctx, &gitalypb.SetConfigRequest{
+ Repository: repo,
+ Entries: []*gitalypb.SetConfigRequest_Entry{
+ &gitalypb.SetConfigRequest_Entry{
+ Key: "set.me",
+ Value: &gitalypb.SetConfigRequest_Entry_ValueStr{
+ "something",
+ },
+ },
+ },
+ })
+ require.NoError(t, err)
+
+ if featureflag.IsEnabled(ctx, featureflag.TxConfig) {
+ modifiedContents := string(unmodifiedContents) + "[set]\n\tme = something\n"
+ require.Equal(t, []voting.Vote{
+ voting.VoteFromData(unmodifiedContents),
+ voting.VoteFromData([]byte(modifiedContents)),
+ }, votes)
+ } else {
+ require.Len(t, votes, 0)
+ }
+ })
+}
diff --git a/internal/gitaly/service/repository/replicate.go b/internal/gitaly/service/repository/replicate.go
index 69b00de09..6d7354c5a 100644
--- a/internal/gitaly/service/repository/replicate.go
+++ b/internal/gitaly/service/repository/replicate.go
@@ -57,6 +57,7 @@ func (s *server) ReplicateRepository(ctx context.Context, in *gitalypb.Replicate
outgoingCtx := helper.IncomingToOutgoing(ctx)
syncFuncs := []func(context.Context, *gitalypb.ReplicateRepositoryRequest) error{
+ s.syncGitconfig,
s.syncInfoAttributes,
s.syncRepository,
}
@@ -209,7 +210,7 @@ func (s *server) syncRepository(ctx context.Context, in *gitalypb.ReplicateRepos
return nil
}
-func (s *server) syncInfoAttributes(ctx context.Context, in *gitalypb.ReplicateRepositoryRequest) error {
+func (s *server) syncGitconfig(ctx context.Context, in *gitalypb.ReplicateRepositoryRequest) error {
repoClient, err := s.newRepoClient(ctx, in.GetSource().GetStorageName())
if err != nil {
return err
@@ -220,18 +221,46 @@ func (s *server) syncInfoAttributes(ctx context.Context, in *gitalypb.ReplicateR
return err
}
- infoPath := filepath.Join(repoPath, "info")
- attributesPath := filepath.Join(infoPath, "attributes")
+ // At the point of implementing this, the `GetConfig` RPC hasn't been deployed yet and is
+ // thus not available for general use. In theory, we'd have to wait for this release cycle
+ // to finish, and only afterwards would we be able to implement replication of the
+ // gitconfig. In order to allow us to iterate fast, we just try to call `GetConfig()`, but
+ // ignore any errors for the case where the target Gitaly node doesn't support the RPC yet.
+ // TODO: Remove this hack and properly return the error in the next release cycle.
+ if err := func() error {
+ stream, err := repoClient.GetConfig(ctx, &gitalypb.GetConfigRequest{
+ Repository: in.GetSource(),
+ })
+ if err != nil {
+ return err
+ }
+
+ configPath := filepath.Join(repoPath, "config")
+ if err := writeFile(configPath, 0644, streamio.NewReader(func() ([]byte, error) {
+ resp, err := stream.Recv()
+ return resp.GetData(), err
+ })); err != nil {
+ return err
+ }
- if err := os.MkdirAll(infoPath, 0755); err != nil {
+ return nil
+ }(); err != nil {
+ ctxlogrus.Extract(ctx).WithError(err).Warn("synchronizing gitconfig failed")
+ }
+
+ return nil
+}
+
+func (s *server) syncInfoAttributes(ctx context.Context, in *gitalypb.ReplicateRepositoryRequest) error {
+ repoClient, err := s.newRepoClient(ctx, in.GetSource().GetStorageName())
+ if err != nil {
return err
}
- fw, err := safe.CreateFileWriter(attributesPath)
+ repoPath, err := s.locator.GetRepoPath(in.GetRepository())
if err != nil {
return err
}
- defer fw.Close()
stream, err := repoClient.GetInfoAttributes(ctx, &gitalypb.GetInfoAttributesRequest{
Repository: in.GetSource(),
@@ -240,22 +269,42 @@ func (s *server) syncInfoAttributes(ctx context.Context, in *gitalypb.ReplicateR
return err
}
- if _, err := io.Copy(fw, streamio.NewReader(func() ([]byte, error) {
+ attributesPath := filepath.Join(repoPath, "info", "attributes")
+ if err := writeFile(attributesPath, attributesFileMode, streamio.NewReader(func() ([]byte, error) {
resp, err := stream.Recv()
return resp.GetAttributes(), err
})); err != nil {
return err
}
+ return nil
+}
+
+func writeFile(path string, mode os.FileMode, reader io.Reader) error {
+ parentDir := filepath.Dir(path)
+ if err := os.MkdirAll(parentDir, 0755); err != nil {
+ return err
+ }
+
+ fw, err := safe.CreateFileWriter(path)
+ if err != nil {
+ return err
+ }
+ defer fw.Close()
+
+ if _, err := io.Copy(fw, reader); err != nil {
+ return err
+ }
+
if err = fw.Commit(); err != nil {
return err
}
- if err := os.Chmod(attributesPath, attributesFileMode); err != nil {
+ if err := os.Chmod(path, mode); err != nil {
return err
}
- return os.Rename(attributesPath, attributesPath)
+ return nil
}
// newRemoteClient creates a new RemoteClient that talks to the same gitaly server
diff --git a/internal/gitaly/service/repository/replicate_test.go b/internal/gitaly/service/repository/replicate_test.go
index 84a61240e..131392911 100644
--- a/internal/gitaly/service/repository/replicate_test.go
+++ b/internal/gitaly/service/repository/replicate_test.go
@@ -47,6 +47,11 @@ func TestReplicateRepository(t *testing.T) {
attrData := []byte("*.pbxproj binary\n")
require.NoError(t, ioutil.WriteFile(attrFilePath, attrData, 0644))
+ // Write a modified gitconfig
+ gittest.Exec(t, cfg, "-C", repoPath, "config", "please.replicate", "me")
+ configData := testhelper.MustReadFile(t, filepath.Join(repoPath, "config"))
+ require.Contains(t, string(configData), "[please]\n\treplicate = me\n")
+
targetRepo := *repo
targetRepo.StorageName = cfg.Storages[1].Name
@@ -68,6 +73,10 @@ func TestReplicateRepository(t *testing.T) {
replicatedAttrData := testhelper.MustReadFile(t, replicatedAttrFilePath)
require.Equal(t, string(attrData), string(replicatedAttrData), "info/attributes files must match")
+ replicatedConfigPath := filepath.Join(targetRepoPath, "config")
+ replicatedConfigData := testhelper.MustReadFile(t, replicatedConfigPath)
+ require.Equal(t, string(configData), string(replicatedConfigData), "config files must match")
+
// create another branch
gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("branch"))
_, err = client.ReplicateRepository(injectedCtx, &gitalypb.ReplicateRepositoryRequest{
diff --git a/internal/gitaly/service/repository/testhelper_test.go b/internal/gitaly/service/repository/testhelper_test.go
index 6600f4ebc..693f0b083 100644
--- a/internal/gitaly/service/repository/testhelper_test.go
+++ b/internal/gitaly/service/repository/testhelper_test.go
@@ -59,6 +59,7 @@ func TestWithRubySidecar(t *testing.T) {
fs := []func(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server){
testCloneFromPoolHTTP,
testSetConfig,
+ testSetConfigTransactional,
testFetchRemoteFailure,
testFetchRemoteOverHTTP,
testSuccessfulFindLicenseRequest,
@@ -92,8 +93,8 @@ func newMuxedRepositoryClient(t *testing.T, ctx context.Context, cfg config.Cfg,
return gitalypb.NewRepositoryServiceClient(conn)
}
-func setupRepositoryServiceWithRuby(t testing.TB, cfg config.Cfg, rubySrv *rubyserver.Server) (config.Cfg, *gitalypb.Repository, string, gitalypb.RepositoryServiceClient) {
- client, serverSocketPath := runRepositoryService(t, cfg, rubySrv)
+func setupRepositoryServiceWithRuby(t testing.TB, cfg config.Cfg, rubySrv *rubyserver.Server, opts ...testserver.GitalyServerOpt) (config.Cfg, *gitalypb.Repository, string, gitalypb.RepositoryServiceClient) {
+ client, serverSocketPath := runRepositoryService(t, cfg, rubySrv, opts...)
cfg.SocketPath = serverSocketPath
repo, repoPath, cleanup := gittest.CloneRepoAtStorage(t, cfg, cfg.Storages[0], t.Name())
diff --git a/internal/metadata/featureflag/feature_flags.go b/internal/metadata/featureflag/feature_flags.go
index 1be6d74a8..4fd6495b8 100644
--- a/internal/metadata/featureflag/feature_flags.go
+++ b/internal/metadata/featureflag/feature_flags.go
@@ -25,6 +25,8 @@ var (
GrpcTreeEntryNotFound = FeatureFlag{Name: "grpc_tree_entry_not_found", OnByDefault: false}
// FetchInternalRemoteErrors makes FetchInternalRemote return actual errors instead of a boolean
FetchInternalRemoteErrors = FeatureFlag{Name: "fetch_internal_remote_errors", OnByDefault: false}
+ // TxConfig enables transactional voting for SetConfig and DeleteConfig RPCs.
+ TxConfig = FeatureFlag{Name: "tx_config", OnByDefault: false}
)
// All includes all feature flags.
@@ -37,4 +39,5 @@ var All = []FeatureFlag{
GrpcTreeEntryNotFound,
GoUpdateRemoteMirror,
FetchInternalRemoteErrors,
+ TxConfig,
}
diff --git a/internal/praefect/coordinator.go b/internal/praefect/coordinator.go
index 107b61f1a..ea53a5fd4 100644
--- a/internal/praefect/coordinator.go
+++ b/internal/praefect/coordinator.go
@@ -38,6 +38,12 @@ type transactionsCondition func(context.Context) bool
func transactionsEnabled(context.Context) bool { return true }
func transactionsDisabled(context.Context) bool { return false }
+func transactionsFlag(flag featureflag.FeatureFlag) transactionsCondition {
+ return func(ctx context.Context) bool {
+ return featureflag.IsEnabled(ctx, flag)
+ }
+}
+
// transactionRPCs contains the list of repository-scoped mutating calls which may take part in
// transactions. An optional feature flag can be added to conditionally enable transactional
// behaviour. If none is given, it's always enabled.
@@ -82,6 +88,9 @@ var transactionRPCs = map[string]transactionsCondition{
"/gitaly.WikiService/WikiUpdatePage": transactionsEnabled,
"/gitaly.WikiService/WikiWritePage": transactionsEnabled,
+ "/gitaly.RepositoryService/SetConfig": transactionsFlag(featureflag.TxConfig),
+ "/gitaly.RepositoryService/DeleteConfig": transactionsFlag(featureflag.TxConfig),
+
// The following RPCs don't perform any reference updates and thus
// shouldn't use transactions.
"/gitaly.ObjectPoolService/CreateObjectPool": transactionsDisabled,
@@ -92,7 +101,6 @@ var transactionRPCs = map[string]transactionsCondition{
"/gitaly.ObjectPoolService/UnlinkRepositoryFromObjectPool": transactionsDisabled,
"/gitaly.RefService/PackRefs": transactionsDisabled,
"/gitaly.RepositoryService/Cleanup": transactionsDisabled,
- "/gitaly.RepositoryService/DeleteConfig": transactionsDisabled,
"/gitaly.RepositoryService/GarbageCollect": transactionsDisabled,
"/gitaly.RepositoryService/MidxRepack": transactionsDisabled,
"/gitaly.RepositoryService/OptimizeRepository": transactionsDisabled,
@@ -101,7 +109,6 @@ var transactionRPCs = map[string]transactionsCondition{
"/gitaly.RepositoryService/RepackFull": transactionsDisabled,
"/gitaly.RepositoryService/RepackIncremental": transactionsDisabled,
"/gitaly.RepositoryService/RestoreCustomHooks": transactionsDisabled,
- "/gitaly.RepositoryService/SetConfig": transactionsDisabled,
"/gitaly.RepositoryService/WriteCommitGraph": transactionsDisabled,
// These shouldn't ever use transactions for the sake of not creating
diff --git a/proto/go/gitalypb/repository-service.pb.go b/proto/go/gitalypb/repository-service.pb.go
index 75c15ecf3..5f93de8f2 100644
--- a/proto/go/gitalypb/repository-service.pb.go
+++ b/proto/go/gitalypb/repository-service.pb.go
@@ -117,7 +117,7 @@ func (x GetRawChangesResponse_RawChange_Operation) String() string {
}
func (GetRawChangesResponse_RawChange_Operation) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{65, 0, 0}
+ return fileDescriptor_e9b1768cf174c79b, []int{67, 0, 0}
}
type RepositoryExistsRequest struct {
@@ -2054,6 +2054,89 @@ func (m *CreateBundleResponse) GetData() []byte {
return nil
}
+// GetConfigRequest is a request for the GetConfig RPC.
+type GetConfigRequest struct {
+ // Repository is the repository from which the configuration should be read
+ // from.
+ Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetConfigRequest) Reset() { *m = GetConfigRequest{} }
+func (m *GetConfigRequest) String() string { return proto.CompactTextString(m) }
+func (*GetConfigRequest) ProtoMessage() {}
+func (*GetConfigRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_e9b1768cf174c79b, []int{44}
+}
+
+func (m *GetConfigRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetConfigRequest.Unmarshal(m, b)
+}
+func (m *GetConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetConfigRequest.Marshal(b, m, deterministic)
+}
+func (m *GetConfigRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetConfigRequest.Merge(m, src)
+}
+func (m *GetConfigRequest) XXX_Size() int {
+ return xxx_messageInfo_GetConfigRequest.Size(m)
+}
+func (m *GetConfigRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetConfigRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetConfigRequest proto.InternalMessageInfo
+
+func (m *GetConfigRequest) GetRepository() *Repository {
+ if m != nil {
+ return m.Repository
+ }
+ return nil
+}
+
+// GetConfigResponse is a response for the GetConfig RPC.
+type GetConfigResponse struct {
+ // Data contains contents of the gitconfig.
+ Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *GetConfigResponse) Reset() { *m = GetConfigResponse{} }
+func (m *GetConfigResponse) String() string { return proto.CompactTextString(m) }
+func (*GetConfigResponse) ProtoMessage() {}
+func (*GetConfigResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_e9b1768cf174c79b, []int{45}
+}
+
+func (m *GetConfigResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GetConfigResponse.Unmarshal(m, b)
+}
+func (m *GetConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GetConfigResponse.Marshal(b, m, deterministic)
+}
+func (m *GetConfigResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GetConfigResponse.Merge(m, src)
+}
+func (m *GetConfigResponse) XXX_Size() int {
+ return xxx_messageInfo_GetConfigResponse.Size(m)
+}
+func (m *GetConfigResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_GetConfigResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetConfigResponse proto.InternalMessageInfo
+
+func (m *GetConfigResponse) GetData() []byte {
+ if m != nil {
+ return m.Data
+ }
+ return nil
+}
+
type SetConfigRequest struct {
Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
Entries []*SetConfigRequest_Entry `protobuf:"bytes,2,rep,name=entries,proto3" json:"entries,omitempty"`
@@ -2066,7 +2149,7 @@ func (m *SetConfigRequest) Reset() { *m = SetConfigRequest{} }
func (m *SetConfigRequest) String() string { return proto.CompactTextString(m) }
func (*SetConfigRequest) ProtoMessage() {}
func (*SetConfigRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{44}
+ return fileDescriptor_e9b1768cf174c79b, []int{46}
}
func (m *SetConfigRequest) XXX_Unmarshal(b []byte) error {
@@ -2117,7 +2200,7 @@ func (m *SetConfigRequest_Entry) Reset() { *m = SetConfigRequest_Entry{}
func (m *SetConfigRequest_Entry) String() string { return proto.CompactTextString(m) }
func (*SetConfigRequest_Entry) ProtoMessage() {}
func (*SetConfigRequest_Entry) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{44, 0}
+ return fileDescriptor_e9b1768cf174c79b, []int{46, 0}
}
func (m *SetConfigRequest_Entry) XXX_Unmarshal(b []byte) error {
@@ -2214,7 +2297,7 @@ func (m *SetConfigResponse) Reset() { *m = SetConfigResponse{} }
func (m *SetConfigResponse) String() string { return proto.CompactTextString(m) }
func (*SetConfigResponse) ProtoMessage() {}
func (*SetConfigResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{45}
+ return fileDescriptor_e9b1768cf174c79b, []int{47}
}
func (m *SetConfigResponse) XXX_Unmarshal(b []byte) error {
@@ -2247,7 +2330,7 @@ func (m *DeleteConfigRequest) Reset() { *m = DeleteConfigRequest{} }
func (m *DeleteConfigRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteConfigRequest) ProtoMessage() {}
func (*DeleteConfigRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{46}
+ return fileDescriptor_e9b1768cf174c79b, []int{48}
}
func (m *DeleteConfigRequest) XXX_Unmarshal(b []byte) error {
@@ -2292,7 +2375,7 @@ func (m *DeleteConfigResponse) Reset() { *m = DeleteConfigResponse{} }
func (m *DeleteConfigResponse) String() string { return proto.CompactTextString(m) }
func (*DeleteConfigResponse) ProtoMessage() {}
func (*DeleteConfigResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{47}
+ return fileDescriptor_e9b1768cf174c79b, []int{49}
}
func (m *DeleteConfigResponse) XXX_Unmarshal(b []byte) error {
@@ -2325,7 +2408,7 @@ func (m *RestoreCustomHooksRequest) Reset() { *m = RestoreCustomHooksReq
func (m *RestoreCustomHooksRequest) String() string { return proto.CompactTextString(m) }
func (*RestoreCustomHooksRequest) ProtoMessage() {}
func (*RestoreCustomHooksRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{48}
+ return fileDescriptor_e9b1768cf174c79b, []int{50}
}
func (m *RestoreCustomHooksRequest) XXX_Unmarshal(b []byte) error {
@@ -2370,7 +2453,7 @@ func (m *RestoreCustomHooksResponse) Reset() { *m = RestoreCustomHooksRe
func (m *RestoreCustomHooksResponse) String() string { return proto.CompactTextString(m) }
func (*RestoreCustomHooksResponse) ProtoMessage() {}
func (*RestoreCustomHooksResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{49}
+ return fileDescriptor_e9b1768cf174c79b, []int{51}
}
func (m *RestoreCustomHooksResponse) XXX_Unmarshal(b []byte) error {
@@ -2402,7 +2485,7 @@ func (m *BackupCustomHooksRequest) Reset() { *m = BackupCustomHooksReque
func (m *BackupCustomHooksRequest) String() string { return proto.CompactTextString(m) }
func (*BackupCustomHooksRequest) ProtoMessage() {}
func (*BackupCustomHooksRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{50}
+ return fileDescriptor_e9b1768cf174c79b, []int{52}
}
func (m *BackupCustomHooksRequest) XXX_Unmarshal(b []byte) error {
@@ -2441,7 +2524,7 @@ func (m *BackupCustomHooksResponse) Reset() { *m = BackupCustomHooksResp
func (m *BackupCustomHooksResponse) String() string { return proto.CompactTextString(m) }
func (*BackupCustomHooksResponse) ProtoMessage() {}
func (*BackupCustomHooksResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{51}
+ return fileDescriptor_e9b1768cf174c79b, []int{53}
}
func (m *BackupCustomHooksResponse) XXX_Unmarshal(b []byte) error {
@@ -2482,7 +2565,7 @@ func (m *CreateRepositoryFromBundleRequest) Reset() { *m = CreateReposit
func (m *CreateRepositoryFromBundleRequest) String() string { return proto.CompactTextString(m) }
func (*CreateRepositoryFromBundleRequest) ProtoMessage() {}
func (*CreateRepositoryFromBundleRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{52}
+ return fileDescriptor_e9b1768cf174c79b, []int{54}
}
func (m *CreateRepositoryFromBundleRequest) XXX_Unmarshal(b []byte) error {
@@ -2527,7 +2610,7 @@ func (m *CreateRepositoryFromBundleResponse) Reset() { *m = CreateReposi
func (m *CreateRepositoryFromBundleResponse) String() string { return proto.CompactTextString(m) }
func (*CreateRepositoryFromBundleResponse) ProtoMessage() {}
func (*CreateRepositoryFromBundleResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{53}
+ return fileDescriptor_e9b1768cf174c79b, []int{55}
}
func (m *CreateRepositoryFromBundleResponse) XXX_Unmarshal(b []byte) error {
@@ -2559,7 +2642,7 @@ func (m *FindLicenseRequest) Reset() { *m = FindLicenseRequest{} }
func (m *FindLicenseRequest) String() string { return proto.CompactTextString(m) }
func (*FindLicenseRequest) ProtoMessage() {}
func (*FindLicenseRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{54}
+ return fileDescriptor_e9b1768cf174c79b, []int{56}
}
func (m *FindLicenseRequest) XXX_Unmarshal(b []byte) error {
@@ -2598,7 +2681,7 @@ func (m *FindLicenseResponse) Reset() { *m = FindLicenseResponse{} }
func (m *FindLicenseResponse) String() string { return proto.CompactTextString(m) }
func (*FindLicenseResponse) ProtoMessage() {}
func (*FindLicenseResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{55}
+ return fileDescriptor_e9b1768cf174c79b, []int{57}
}
func (m *FindLicenseResponse) XXX_Unmarshal(b []byte) error {
@@ -2637,7 +2720,7 @@ func (m *GetInfoAttributesRequest) Reset() { *m = GetInfoAttributesReque
func (m *GetInfoAttributesRequest) String() string { return proto.CompactTextString(m) }
func (*GetInfoAttributesRequest) ProtoMessage() {}
func (*GetInfoAttributesRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{56}
+ return fileDescriptor_e9b1768cf174c79b, []int{58}
}
func (m *GetInfoAttributesRequest) XXX_Unmarshal(b []byte) error {
@@ -2676,7 +2759,7 @@ func (m *GetInfoAttributesResponse) Reset() { *m = GetInfoAttributesResp
func (m *GetInfoAttributesResponse) String() string { return proto.CompactTextString(m) }
func (*GetInfoAttributesResponse) ProtoMessage() {}
func (*GetInfoAttributesResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{57}
+ return fileDescriptor_e9b1768cf174c79b, []int{59}
}
func (m *GetInfoAttributesResponse) XXX_Unmarshal(b []byte) error {
@@ -2715,7 +2798,7 @@ func (m *CalculateChecksumRequest) Reset() { *m = CalculateChecksumReque
func (m *CalculateChecksumRequest) String() string { return proto.CompactTextString(m) }
func (*CalculateChecksumRequest) ProtoMessage() {}
func (*CalculateChecksumRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{58}
+ return fileDescriptor_e9b1768cf174c79b, []int{60}
}
func (m *CalculateChecksumRequest) XXX_Unmarshal(b []byte) error {
@@ -2754,7 +2837,7 @@ func (m *CalculateChecksumResponse) Reset() { *m = CalculateChecksumResp
func (m *CalculateChecksumResponse) String() string { return proto.CompactTextString(m) }
func (*CalculateChecksumResponse) ProtoMessage() {}
func (*CalculateChecksumResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{59}
+ return fileDescriptor_e9b1768cf174c79b, []int{61}
}
func (m *CalculateChecksumResponse) XXX_Unmarshal(b []byte) error {
@@ -2793,7 +2876,7 @@ func (m *GetSnapshotRequest) Reset() { *m = GetSnapshotRequest{} }
func (m *GetSnapshotRequest) String() string { return proto.CompactTextString(m) }
func (*GetSnapshotRequest) ProtoMessage() {}
func (*GetSnapshotRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{60}
+ return fileDescriptor_e9b1768cf174c79b, []int{62}
}
func (m *GetSnapshotRequest) XXX_Unmarshal(b []byte) error {
@@ -2832,7 +2915,7 @@ func (m *GetSnapshotResponse) Reset() { *m = GetSnapshotResponse{} }
func (m *GetSnapshotResponse) String() string { return proto.CompactTextString(m) }
func (*GetSnapshotResponse) ProtoMessage() {}
func (*GetSnapshotResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{61}
+ return fileDescriptor_e9b1768cf174c79b, []int{63}
}
func (m *GetSnapshotResponse) XXX_Unmarshal(b []byte) error {
@@ -2873,7 +2956,7 @@ func (m *CreateRepositoryFromSnapshotRequest) Reset() { *m = CreateRepos
func (m *CreateRepositoryFromSnapshotRequest) String() string { return proto.CompactTextString(m) }
func (*CreateRepositoryFromSnapshotRequest) ProtoMessage() {}
func (*CreateRepositoryFromSnapshotRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{62}
+ return fileDescriptor_e9b1768cf174c79b, []int{64}
}
func (m *CreateRepositoryFromSnapshotRequest) XXX_Unmarshal(b []byte) error {
@@ -2925,7 +3008,7 @@ func (m *CreateRepositoryFromSnapshotResponse) Reset() { *m = CreateRepo
func (m *CreateRepositoryFromSnapshotResponse) String() string { return proto.CompactTextString(m) }
func (*CreateRepositoryFromSnapshotResponse) ProtoMessage() {}
func (*CreateRepositoryFromSnapshotResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{63}
+ return fileDescriptor_e9b1768cf174c79b, []int{65}
}
func (m *CreateRepositoryFromSnapshotResponse) XXX_Unmarshal(b []byte) error {
@@ -2959,7 +3042,7 @@ func (m *GetRawChangesRequest) Reset() { *m = GetRawChangesRequest{} }
func (m *GetRawChangesRequest) String() string { return proto.CompactTextString(m) }
func (*GetRawChangesRequest) ProtoMessage() {}
func (*GetRawChangesRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{64}
+ return fileDescriptor_e9b1768cf174c79b, []int{66}
}
func (m *GetRawChangesRequest) XXX_Unmarshal(b []byte) error {
@@ -3012,7 +3095,7 @@ func (m *GetRawChangesResponse) Reset() { *m = GetRawChangesResponse{} }
func (m *GetRawChangesResponse) String() string { return proto.CompactTextString(m) }
func (*GetRawChangesResponse) ProtoMessage() {}
func (*GetRawChangesResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{65}
+ return fileDescriptor_e9b1768cf174c79b, []int{67}
}
func (m *GetRawChangesResponse) XXX_Unmarshal(b []byte) error {
@@ -3062,7 +3145,7 @@ func (m *GetRawChangesResponse_RawChange) Reset() { *m = GetRawChangesRe
func (m *GetRawChangesResponse_RawChange) String() string { return proto.CompactTextString(m) }
func (*GetRawChangesResponse_RawChange) ProtoMessage() {}
func (*GetRawChangesResponse_RawChange) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{65, 0}
+ return fileDescriptor_e9b1768cf174c79b, []int{67, 0}
}
func (m *GetRawChangesResponse_RawChange) XXX_Unmarshal(b []byte) error {
@@ -3174,7 +3257,7 @@ func (m *SearchFilesByNameRequest) Reset() { *m = SearchFilesByNameReque
func (m *SearchFilesByNameRequest) String() string { return proto.CompactTextString(m) }
func (*SearchFilesByNameRequest) ProtoMessage() {}
func (*SearchFilesByNameRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{66}
+ return fileDescriptor_e9b1768cf174c79b, []int{68}
}
func (m *SearchFilesByNameRequest) XXX_Unmarshal(b []byte) error {
@@ -3234,7 +3317,7 @@ func (m *SearchFilesByNameResponse) Reset() { *m = SearchFilesByNameResp
func (m *SearchFilesByNameResponse) String() string { return proto.CompactTextString(m) }
func (*SearchFilesByNameResponse) ProtoMessage() {}
func (*SearchFilesByNameResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{67}
+ return fileDescriptor_e9b1768cf174c79b, []int{69}
}
func (m *SearchFilesByNameResponse) XXX_Unmarshal(b []byte) error {
@@ -3276,7 +3359,7 @@ func (m *SearchFilesByContentRequest) Reset() { *m = SearchFilesByConten
func (m *SearchFilesByContentRequest) String() string { return proto.CompactTextString(m) }
func (*SearchFilesByContentRequest) ProtoMessage() {}
func (*SearchFilesByContentRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{68}
+ return fileDescriptor_e9b1768cf174c79b, []int{70}
}
func (m *SearchFilesByContentRequest) XXX_Unmarshal(b []byte) error {
@@ -3338,7 +3421,7 @@ func (m *SearchFilesByContentResponse) Reset() { *m = SearchFilesByConte
func (m *SearchFilesByContentResponse) String() string { return proto.CompactTextString(m) }
func (*SearchFilesByContentResponse) ProtoMessage() {}
func (*SearchFilesByContentResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{69}
+ return fileDescriptor_e9b1768cf174c79b, []int{71}
}
func (m *SearchFilesByContentResponse) XXX_Unmarshal(b []byte) error {
@@ -3408,7 +3491,7 @@ func (m *Remote) Reset() { *m = Remote{} }
func (m *Remote) String() string { return proto.CompactTextString(m) }
func (*Remote) ProtoMessage() {}
func (*Remote) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{70}
+ return fileDescriptor_e9b1768cf174c79b, []int{72}
}
func (m *Remote) XXX_Unmarshal(b []byte) error {
@@ -3461,7 +3544,7 @@ func (m *GetObjectDirectorySizeRequest) Reset() { *m = GetObjectDirector
func (m *GetObjectDirectorySizeRequest) String() string { return proto.CompactTextString(m) }
func (*GetObjectDirectorySizeRequest) ProtoMessage() {}
func (*GetObjectDirectorySizeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{71}
+ return fileDescriptor_e9b1768cf174c79b, []int{73}
}
func (m *GetObjectDirectorySizeRequest) XXX_Unmarshal(b []byte) error {
@@ -3501,7 +3584,7 @@ func (m *GetObjectDirectorySizeResponse) Reset() { *m = GetObjectDirecto
func (m *GetObjectDirectorySizeResponse) String() string { return proto.CompactTextString(m) }
func (*GetObjectDirectorySizeResponse) ProtoMessage() {}
func (*GetObjectDirectorySizeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{72}
+ return fileDescriptor_e9b1768cf174c79b, []int{74}
}
func (m *GetObjectDirectorySizeResponse) XXX_Unmarshal(b []byte) error {
@@ -3542,7 +3625,7 @@ func (m *CloneFromPoolRequest) Reset() { *m = CloneFromPoolRequest{} }
func (m *CloneFromPoolRequest) String() string { return proto.CompactTextString(m) }
func (*CloneFromPoolRequest) ProtoMessage() {}
func (*CloneFromPoolRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{73}
+ return fileDescriptor_e9b1768cf174c79b, []int{75}
}
func (m *CloneFromPoolRequest) XXX_Unmarshal(b []byte) error {
@@ -3594,7 +3677,7 @@ func (m *CloneFromPoolResponse) Reset() { *m = CloneFromPoolResponse{} }
func (m *CloneFromPoolResponse) String() string { return proto.CompactTextString(m) }
func (*CloneFromPoolResponse) ProtoMessage() {}
func (*CloneFromPoolResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{74}
+ return fileDescriptor_e9b1768cf174c79b, []int{76}
}
func (m *CloneFromPoolResponse) XXX_Unmarshal(b []byte) error {
@@ -3628,7 +3711,7 @@ func (m *CloneFromPoolInternalRequest) Reset() { *m = CloneFromPoolInter
func (m *CloneFromPoolInternalRequest) String() string { return proto.CompactTextString(m) }
func (*CloneFromPoolInternalRequest) ProtoMessage() {}
func (*CloneFromPoolInternalRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{75}
+ return fileDescriptor_e9b1768cf174c79b, []int{77}
}
func (m *CloneFromPoolInternalRequest) XXX_Unmarshal(b []byte) error {
@@ -3680,7 +3763,7 @@ func (m *CloneFromPoolInternalResponse) Reset() { *m = CloneFromPoolInte
func (m *CloneFromPoolInternalResponse) String() string { return proto.CompactTextString(m) }
func (*CloneFromPoolInternalResponse) ProtoMessage() {}
func (*CloneFromPoolInternalResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{76}
+ return fileDescriptor_e9b1768cf174c79b, []int{78}
}
func (m *CloneFromPoolInternalResponse) XXX_Unmarshal(b []byte) error {
@@ -3712,7 +3795,7 @@ func (m *RemoveRepositoryRequest) Reset() { *m = RemoveRepositoryRequest
func (m *RemoveRepositoryRequest) String() string { return proto.CompactTextString(m) }
func (*RemoveRepositoryRequest) ProtoMessage() {}
func (*RemoveRepositoryRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{77}
+ return fileDescriptor_e9b1768cf174c79b, []int{79}
}
func (m *RemoveRepositoryRequest) XXX_Unmarshal(b []byte) error {
@@ -3750,7 +3833,7 @@ func (m *RemoveRepositoryResponse) Reset() { *m = RemoveRepositoryRespon
func (m *RemoveRepositoryResponse) String() string { return proto.CompactTextString(m) }
func (*RemoveRepositoryResponse) ProtoMessage() {}
func (*RemoveRepositoryResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{78}
+ return fileDescriptor_e9b1768cf174c79b, []int{80}
}
func (m *RemoveRepositoryResponse) XXX_Unmarshal(b []byte) error {
@@ -3783,7 +3866,7 @@ func (m *RenameRepositoryRequest) Reset() { *m = RenameRepositoryRequest
func (m *RenameRepositoryRequest) String() string { return proto.CompactTextString(m) }
func (*RenameRepositoryRequest) ProtoMessage() {}
func (*RenameRepositoryRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{79}
+ return fileDescriptor_e9b1768cf174c79b, []int{81}
}
func (m *RenameRepositoryRequest) XXX_Unmarshal(b []byte) error {
@@ -3828,7 +3911,7 @@ func (m *RenameRepositoryResponse) Reset() { *m = RenameRepositoryRespon
func (m *RenameRepositoryResponse) String() string { return proto.CompactTextString(m) }
func (*RenameRepositoryResponse) ProtoMessage() {}
func (*RenameRepositoryResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{80}
+ return fileDescriptor_e9b1768cf174c79b, []int{82}
}
func (m *RenameRepositoryResponse) XXX_Unmarshal(b []byte) error {
@@ -3861,7 +3944,7 @@ func (m *ReplicateRepositoryRequest) Reset() { *m = ReplicateRepositoryR
func (m *ReplicateRepositoryRequest) String() string { return proto.CompactTextString(m) }
func (*ReplicateRepositoryRequest) ProtoMessage() {}
func (*ReplicateRepositoryRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{81}
+ return fileDescriptor_e9b1768cf174c79b, []int{83}
}
func (m *ReplicateRepositoryRequest) XXX_Unmarshal(b []byte) error {
@@ -3906,7 +3989,7 @@ func (m *ReplicateRepositoryResponse) Reset() { *m = ReplicateRepository
func (m *ReplicateRepositoryResponse) String() string { return proto.CompactTextString(m) }
func (*ReplicateRepositoryResponse) ProtoMessage() {}
func (*ReplicateRepositoryResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{82}
+ return fileDescriptor_e9b1768cf174c79b, []int{84}
}
func (m *ReplicateRepositoryResponse) XXX_Unmarshal(b []byte) error {
@@ -3938,7 +4021,7 @@ func (m *OptimizeRepositoryRequest) Reset() { *m = OptimizeRepositoryReq
func (m *OptimizeRepositoryRequest) String() string { return proto.CompactTextString(m) }
func (*OptimizeRepositoryRequest) ProtoMessage() {}
func (*OptimizeRepositoryRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{83}
+ return fileDescriptor_e9b1768cf174c79b, []int{85}
}
func (m *OptimizeRepositoryRequest) XXX_Unmarshal(b []byte) error {
@@ -3976,7 +4059,7 @@ func (m *OptimizeRepositoryResponse) Reset() { *m = OptimizeRepositoryRe
func (m *OptimizeRepositoryResponse) String() string { return proto.CompactTextString(m) }
func (*OptimizeRepositoryResponse) ProtoMessage() {}
func (*OptimizeRepositoryResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e9b1768cf174c79b, []int{84}
+ return fileDescriptor_e9b1768cf174c79b, []int{86}
}
func (m *OptimizeRepositoryResponse) XXX_Unmarshal(b []byte) error {
@@ -4045,6 +4128,8 @@ func init() {
proto.RegisterType((*CreateRepositoryFromURLResponse)(nil), "gitaly.CreateRepositoryFromURLResponse")
proto.RegisterType((*CreateBundleRequest)(nil), "gitaly.CreateBundleRequest")
proto.RegisterType((*CreateBundleResponse)(nil), "gitaly.CreateBundleResponse")
+ proto.RegisterType((*GetConfigRequest)(nil), "gitaly.GetConfigRequest")
+ proto.RegisterType((*GetConfigResponse)(nil), "gitaly.GetConfigResponse")
proto.RegisterType((*SetConfigRequest)(nil), "gitaly.SetConfigRequest")
proto.RegisterType((*SetConfigRequest_Entry)(nil), "gitaly.SetConfigRequest.Entry")
proto.RegisterType((*SetConfigResponse)(nil), "gitaly.SetConfigResponse")
@@ -4093,204 +4178,206 @@ func init() {
func init() { proto.RegisterFile("repository-service.proto", fileDescriptor_e9b1768cf174c79b) }
var fileDescriptor_e9b1768cf174c79b = []byte{
- // 3146 bytes of a gzipped FileDescriptorProto
+ // 3177 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4b, 0x6f, 0x1b, 0xc9,
- 0x11, 0x36, 0x25, 0x8a, 0x8f, 0x22, 0x65, 0x53, 0x2d, 0xd9, 0xa2, 0xc6, 0x92, 0x65, 0x8f, 0xbd,
- 0x5e, 0xaf, 0xd7, 0x2b, 0xef, 0xca, 0x01, 0xe2, 0x24, 0x08, 0x02, 0x51, 0x6f, 0xdb, 0x7a, 0xec,
- 0x48, 0xce, 0x62, 0x0d, 0x2c, 0xb8, 0xc3, 0x61, 0x53, 0x9c, 0x68, 0x38, 0x43, 0xf7, 0x34, 0x2d,
- 0x6b, 0x81, 0x1c, 0x12, 0x20, 0x87, 0x00, 0xc1, 0x9e, 0x82, 0x6c, 0x8e, 0x39, 0xe7, 0x17, 0xe4,
- 0x92, 0x43, 0x2e, 0xb9, 0xe4, 0x17, 0x2c, 0xf2, 0x0f, 0x02, 0xe4, 0x0f, 0xe4, 0x14, 0xf4, 0x63,
- 0xa6, 0x67, 0x38, 0x33, 0x5c, 0x07, 0x24, 0x36, 0xb7, 0xe9, 0xaa, 0xee, 0xaa, 0xea, 0xea, 0xea,
- 0x47, 0x7d, 0x35, 0x50, 0x27, 0xb8, 0xef, 0xf9, 0x36, 0xf5, 0xc8, 0xe5, 0x47, 0x3e, 0x26, 0x6f,
- 0x6c, 0x0b, 0xaf, 0xf5, 0x89, 0x47, 0x3d, 0x54, 0x38, 0xb3, 0xa9, 0xe9, 0x5c, 0x6a, 0xe0, 0xd8,
- 0x2e, 0x15, 0x34, 0xad, 0xea, 0x77, 0x4d, 0x82, 0xdb, 0xa2, 0xa5, 0x9f, 0xc0, 0xa2, 0x11, 0x8e,
- 0xde, 0x7e, 0x6b, 0xfb, 0xd4, 0x37, 0xf0, 0xeb, 0x01, 0xf6, 0x29, 0x7a, 0x0a, 0xa0, 0x04, 0xd7,
- 0x73, 0xb7, 0x73, 0x0f, 0x2a, 0xeb, 0x68, 0x4d, 0x48, 0x5c, 0x53, 0x83, 0x1a, 0xf9, 0x3f, 0xfe,
- 0xfd, 0x51, 0xce, 0x88, 0xf4, 0xd5, 0xd7, 0xa1, 0x9e, 0x14, 0xea, 0xf7, 0x3d, 0xd7, 0xc7, 0xe8,
- 0x06, 0x14, 0x30, 0xa7, 0x70, 0x89, 0x25, 0x43, 0xb6, 0xf4, 0x53, 0x3e, 0xc6, 0xb4, 0xce, 0xf7,
- 0x5d, 0x8b, 0xe0, 0x1e, 0x76, 0xa9, 0xe9, 0x8c, 0x6f, 0xc9, 0x4d, 0x58, 0x4a, 0x91, 0x2a, 0x4c,
- 0xd1, 0x09, 0xcc, 0x09, 0xe6, 0xce, 0xc0, 0x19, 0x5f, 0x17, 0xba, 0x0b, 0xb3, 0x16, 0xc1, 0x26,
- 0xc5, 0xcd, 0x96, 0x4d, 0x7b, 0x66, 0xbf, 0x3e, 0xc5, 0x27, 0x58, 0x15, 0xc4, 0x06, 0xa7, 0xe9,
- 0x0b, 0x80, 0xa2, 0x3a, 0xa5, 0x25, 0x07, 0x30, 0x77, 0x60, 0xb7, 0xdf, 0x0a, 0xce, 0xf8, 0xb3,
- 0x5e, 0x00, 0x14, 0x15, 0x27, 0x95, 0xfc, 0x2e, 0x07, 0xd7, 0x77, 0x4d, 0xd2, 0x32, 0xcf, 0xf0,
- 0xa6, 0xe7, 0x38, 0xd8, 0xa2, 0xdf, 0xcf, 0x9c, 0xd1, 0x02, 0xcc, 0xf4, 0xc9, 0xc0, 0xc5, 0xf5,
- 0x69, 0xce, 0x14, 0x0d, 0xbd, 0x0e, 0x37, 0x86, 0xad, 0x91, 0x86, 0xfe, 0x23, 0x07, 0x8b, 0x9f,
- 0x11, 0x9b, 0xe2, 0x4d, 0xaf, 0xd7, 0xb3, 0xe9, 0x2e, 0x31, 0xfb, 0xdd, 0xf1, 0x4d, 0x3d, 0x81,
- 0x59, 0xbf, 0xef, 0xd8, 0xf4, 0x84, 0x12, 0x93, 0xe2, 0xb3, 0x4b, 0x6e, 0xea, 0xd5, 0xf5, 0x8f,
- 0x82, 0xc1, 0x19, 0x1a, 0xd7, 0x4e, 0xa2, 0x83, 0x8c, 0xb8, 0x0c, 0xfd, 0x0e, 0xcc, 0xc6, 0xf8,
- 0xa8, 0x06, 0xd5, 0x13, 0xfb, 0x2b, 0x7c, 0x30, 0x70, 0xa8, 0xdd, 0x77, 0x70, 0xed, 0x8a, 0xae,
- 0x41, 0x3d, 0x29, 0x5a, 0xce, 0xf4, 0x19, 0x5c, 0xdd, 0x74, 0xb0, 0xe9, 0x0e, 0xfa, 0xe3, 0x2f,
- 0xfa, 0x1c, 0x5c, 0x0b, 0x65, 0x49, 0xf1, 0x9f, 0xc2, 0x75, 0x35, 0x84, 0x99, 0x35, 0xbe, 0x96,
- 0x47, 0x70, 0x63, 0x58, 0xa4, 0xdc, 0xd8, 0x08, 0xf2, 0xbe, 0xfd, 0x15, 0xe6, 0xd2, 0xa6, 0x0d,
- 0xfe, 0xad, 0xbf, 0x86, 0xa5, 0x8d, 0x7e, 0xdf, 0xb9, 0xdc, 0xb5, 0xa9, 0x49, 0x29, 0xb1, 0x5b,
- 0x03, 0x8a, 0xc7, 0x3f, 0x5f, 0x90, 0x06, 0x25, 0x82, 0xdf, 0xd8, 0xbe, 0xed, 0xb9, 0x7c, 0x15,
- 0xab, 0x46, 0xd8, 0xd6, 0x97, 0x41, 0x4b, 0x53, 0x29, 0x3d, 0xf2, 0xef, 0x29, 0x40, 0x3b, 0x98,
- 0x5a, 0x5d, 0x03, 0xf7, 0x3c, 0x3a, 0xbe, 0x3f, 0xd8, 0x71, 0x46, 0xb8, 0x28, 0x6e, 0x48, 0xd9,
- 0x90, 0x2d, 0x16, 0xf3, 0x1d, 0x8f, 0x58, 0x61, 0xcc, 0xf3, 0x06, 0x5a, 0x84, 0xa2, 0xeb, 0x35,
- 0xa9, 0x79, 0xe6, 0xd7, 0xf3, 0xe2, 0xf4, 0x73, 0xbd, 0x53, 0xf3, 0xcc, 0x47, 0x75, 0x28, 0x52,
- 0xbb, 0x87, 0xbd, 0x01, 0xad, 0xcf, 0xdc, 0xce, 0x3d, 0x98, 0x31, 0x82, 0x26, 0x1b, 0xe2, 0xfb,
- 0xdd, 0xe6, 0x39, 0xbe, 0xac, 0x17, 0x84, 0x06, 0xdf, 0xef, 0x3e, 0xc7, 0x97, 0x68, 0x15, 0x2a,
- 0xe7, 0xae, 0x77, 0xe1, 0x36, 0xbb, 0x1e, 0x3b, 0x4d, 0x8b, 0x9c, 0x09, 0x9c, 0xb4, 0xc7, 0x28,
- 0x68, 0x09, 0x4a, 0xae, 0xd7, 0x14, 0x3b, 0xaf, 0xcc, 0xb5, 0x15, 0x5d, 0xef, 0x98, 0x35, 0xd1,
- 0x13, 0x98, 0x15, 0x76, 0x36, 0xfb, 0x26, 0x31, 0x7b, 0x7e, 0x1d, 0xf8, 0x94, 0xaf, 0xaa, 0x29,
- 0x73, 0xef, 0x54, 0x45, 0xa7, 0x63, 0xde, 0x07, 0x3d, 0x02, 0x64, 0x75, 0xb1, 0x75, 0xce, 0xed,
- 0x6f, 0x5a, 0x5d, 0xd3, 0x3d, 0xc3, 0xed, 0x7a, 0x85, 0x4b, 0xae, 0x71, 0x0e, 0x9b, 0xca, 0xa6,
- 0xa0, 0x3f, 0xcb, 0x97, 0x4a, 0xb5, 0xb2, 0xfe, 0x14, 0xe6, 0x63, 0xee, 0x96, 0xb1, 0x72, 0x07,
- 0xaa, 0x31, 0x21, 0xe2, 0x2a, 0xa8, 0x50, 0x35, 0x9e, 0x5d, 0x4c, 0x9b, 0xfc, 0x10, 0x51, 0xee,
- 0x1f, 0x3f, 0x7a, 0x35, 0xa8, 0x27, 0x85, 0xca, 0xd0, 0xf8, 0xd7, 0x14, 0xcc, 0xed, 0x62, 0xba,
- 0x41, 0xac, 0xae, 0xfd, 0x66, 0x02, 0x91, 0x71, 0x13, 0xca, 0x16, 0xdf, 0xf2, 0x4d, 0xbb, 0x2d,
- 0x83, 0xa3, 0x24, 0x08, 0xfb, 0x6d, 0x16, 0x36, 0x7d, 0x82, 0x3b, 0xf6, 0x5b, 0x1e, 0x1f, 0x65,
- 0x43, 0xb6, 0xd0, 0x53, 0x28, 0x74, 0x3c, 0xd2, 0x33, 0x29, 0x8f, 0x8f, 0xab, 0xeb, 0xb7, 0x03,
- 0x55, 0x09, 0xcb, 0xd6, 0x76, 0x78, 0x3f, 0x43, 0xf6, 0x67, 0xdb, 0xaf, 0x6f, 0xd2, 0x2e, 0x0f,
- 0x9f, 0xaa, 0xc1, 0xbf, 0x59, 0x54, 0xe1, 0xb7, 0x96, 0x33, 0x68, 0xe3, 0x7a, 0xe1, 0xf6, 0xf4,
- 0x83, 0xaa, 0x11, 0x34, 0xd1, 0x0a, 0x00, 0x76, 0xec, 0x36, 0x5b, 0x7f, 0xda, 0xe5, 0xb1, 0x53,
- 0x32, 0xca, 0x9c, 0x72, 0xcc, 0x06, 0x3e, 0x84, 0x39, 0xdb, 0xe5, 0x3d, 0x9b, 0x4e, 0xc7, 0x6f,
- 0xb6, 0x1c, 0xaf, 0xe5, 0xd7, 0x4b, 0xbc, 0xd7, 0x35, 0xc9, 0x78, 0xd1, 0xf1, 0x1b, 0x8c, 0xac,
- 0x3f, 0x81, 0x82, 0x30, 0x05, 0x15, 0x61, 0xfa, 0xd5, 0xfe, 0x71, 0xed, 0x0a, 0xfb, 0x38, 0xdd,
- 0x30, 0x6a, 0x39, 0x04, 0x50, 0x38, 0xdd, 0x30, 0x9a, 0xbb, 0xaf, 0x6a, 0x53, 0xa8, 0x02, 0x45,
- 0xf6, 0xdd, 0x78, 0xb5, 0x5e, 0x9b, 0xd6, 0x1f, 0x00, 0x8a, 0xce, 0x48, 0x1d, 0x21, 0x6d, 0x93,
- 0x9a, 0xdc, 0xcd, 0x55, 0x83, 0x7f, 0xb3, 0x38, 0xd8, 0x33, 0xfd, 0x17, 0x9e, 0x65, 0x3a, 0x0d,
- 0x62, 0xba, 0x56, 0x77, 0x02, 0x07, 0x88, 0xfe, 0x31, 0xd4, 0x93, 0x42, 0xa5, 0x11, 0x0b, 0x30,
- 0xf3, 0xc6, 0x74, 0x06, 0x58, 0x06, 0xa5, 0x68, 0xe8, 0xdf, 0xe6, 0xa0, 0xce, 0x23, 0xf9, 0xc4,
- 0x1b, 0x10, 0x0b, 0x8b, 0x51, 0xe3, 0x07, 0xc9, 0xcf, 0x60, 0xce, 0xe7, 0x02, 0x9b, 0x11, 0x01,
- 0x53, 0x59, 0x02, 0x8c, 0x9a, 0xe8, 0x6c, 0xc4, 0x2e, 0x60, 0x29, 0xa0, 0xc5, 0x4d, 0xe2, 0xf1,
- 0x54, 0x35, 0xaa, 0x7e, 0xc4, 0x4c, 0xb6, 0xda, 0xd4, 0x24, 0x67, 0x98, 0x36, 0x09, 0xee, 0xf0,
- 0xc8, 0xaa, 0x1a, 0x65, 0x41, 0x31, 0x70, 0x47, 0x7f, 0x02, 0x4b, 0x29, 0x53, 0x53, 0xef, 0x35,
- 0x82, 0xfd, 0x81, 0x43, 0x83, 0xf7, 0x9a, 0x68, 0xe9, 0xbb, 0x50, 0xd9, 0xf1, 0x27, 0xf1, 0x58,
- 0xb9, 0x07, 0x55, 0x21, 0x48, 0xf9, 0x1f, 0x13, 0xe2, 0x11, 0x19, 0x05, 0xa2, 0xa1, 0xff, 0x25,
- 0x07, 0xd7, 0xf8, 0x35, 0x6a, 0xe0, 0xce, 0xf8, 0x6e, 0xaf, 0xc1, 0x34, 0xf3, 0x84, 0xb8, 0x3b,
- 0xd8, 0x67, 0xec, 0x4a, 0x99, 0x8e, 0x5f, 0x29, 0xec, 0xb4, 0xf2, 0x9c, 0x76, 0x33, 0xe4, 0x0b,
- 0x07, 0x56, 0x3c, 0xa7, 0x6d, 0x04, 0x5d, 0xc2, 0xe3, 0x7e, 0x26, 0x72, 0xdc, 0x3f, 0xcb, 0x97,
- 0x0a, 0xb5, 0xa2, 0x5e, 0x87, 0x9a, 0xb2, 0x5c, 0x4c, 0xf2, 0x59, 0xbe, 0x94, 0xab, 0x4d, 0xe9,
- 0x2e, 0x2c, 0xec, 0xd8, 0x6e, 0xfb, 0x00, 0x93, 0x33, 0xdc, 0x30, 0xfd, 0x09, 0x1c, 0x3a, 0xcb,
- 0x50, 0x0e, 0xcc, 0xf4, 0xeb, 0x53, 0x7c, 0xcf, 0x2b, 0x82, 0xfe, 0x21, 0x5c, 0x1f, 0xd2, 0xa7,
- 0x36, 0x5e, 0xcb, 0xf4, 0x45, 0xc8, 0x97, 0x0d, 0xfe, 0xad, 0x7f, 0x9d, 0x83, 0x39, 0x71, 0x58,
- 0xee, 0x78, 0xe4, 0xfc, 0xff, 0x1f, 0xea, 0xec, 0x55, 0x1b, 0xb5, 0x27, 0x7c, 0xc4, 0x2f, 0xed,
- 0xfb, 0x06, 0x66, 0x26, 0xef, 0xbb, 0xc7, 0xc4, 0x3b, 0x23, 0xd8, 0xf7, 0x27, 0x72, 0x7a, 0x13,
- 0x2e, 0x34, 0x72, 0x7a, 0x0b, 0xc2, 0x7e, 0x5b, 0xff, 0x29, 0x68, 0x69, 0x3a, 0xa5, 0x33, 0x57,
- 0xa1, 0x62, 0xbb, 0xcd, 0xbe, 0x24, 0xcb, 0x6d, 0x03, 0x76, 0xd8, 0x51, 0x98, 0x7c, 0xf2, 0x7a,
- 0x60, 0xfa, 0xdd, 0x09, 0x9b, 0xec, 0x73, 0xa1, 0x11, 0x93, 0x05, 0x21, 0x30, 0x39, 0xa9, 0xf3,
- 0x5d, 0x4d, 0x76, 0xe0, 0xd6, 0xf0, 0xc5, 0xb9, 0x43, 0xbc, 0xde, 0x4b, 0xe3, 0xc5, 0x44, 0x36,
- 0xe3, 0x80, 0x38, 0xd2, 0x62, 0xf6, 0xa9, 0xdf, 0x81, 0xd5, 0x4c, 0x6d, 0x72, 0xd9, 0x8f, 0x60,
- 0x5e, 0x74, 0x69, 0x0c, 0xdc, 0xb6, 0x33, 0x81, 0x87, 0xed, 0x43, 0x58, 0x88, 0x0b, 0x1c, 0x71,
- 0x27, 0x7d, 0x3d, 0x05, 0xb5, 0x13, 0x4c, 0x37, 0x3d, 0xb7, 0x63, 0x9f, 0x8d, 0xef, 0x80, 0xa7,
- 0x50, 0xc4, 0x2e, 0x25, 0x36, 0x16, 0x5b, 0xb6, 0xb2, 0x7e, 0x2b, 0x18, 0x36, 0xac, 0x64, 0x6d,
- 0xdb, 0xa5, 0xe4, 0xd2, 0x08, 0xba, 0x6b, 0xbf, 0xc9, 0xc1, 0x0c, 0x27, 0x31, 0x27, 0xb2, 0x27,
- 0xa2, 0xd8, 0xc0, 0xec, 0x13, 0xad, 0x40, 0x99, 0x5f, 0x5d, 0x4d, 0x9f, 0x12, 0xe1, 0xdc, 0xbd,
- 0x2b, 0x46, 0x89, 0x93, 0x4e, 0x28, 0x41, 0x77, 0xa0, 0x22, 0xd8, 0xb6, 0x4b, 0x9f, 0xac, 0xf3,
- 0x33, 0x6f, 0x66, 0xef, 0x8a, 0x01, 0x9c, 0xb8, 0xcf, 0x68, 0x68, 0x15, 0x44, 0xab, 0xd9, 0xf2,
- 0x3c, 0x47, 0x3c, 0x58, 0xf7, 0xae, 0x18, 0x42, 0x6a, 0xc3, 0xf3, 0x9c, 0x46, 0x51, 0x5e, 0x95,
- 0xfa, 0x3c, 0xcc, 0x45, 0x4c, 0x95, 0x4b, 0x64, 0xc1, 0xfc, 0x16, 0x76, 0x30, 0xcb, 0x7c, 0x26,
- 0xe3, 0x27, 0x04, 0xf9, 0x73, 0x7c, 0x29, 0x9c, 0x54, 0x36, 0xf8, 0xb7, 0x7e, 0x03, 0x16, 0xe2,
- 0x4a, 0xa4, 0x72, 0x9b, 0x25, 0xfe, 0x3e, 0xf5, 0x08, 0xde, 0x1c, 0xf8, 0xd4, 0xeb, 0xed, 0x79,
- 0xde, 0xb9, 0x3f, 0x11, 0x13, 0x78, 0x34, 0x4c, 0x45, 0xa2, 0x61, 0x19, 0xb4, 0x34, 0x55, 0xd2,
- 0x90, 0x53, 0xa8, 0x37, 0x4c, 0xeb, 0x7c, 0xd0, 0x9f, 0xa4, 0x1d, 0xfa, 0x63, 0x58, 0x4a, 0x91,
- 0x3a, 0x22, 0x64, 0x5f, 0xc3, 0x9d, 0xb4, 0x2d, 0x35, 0xa1, 0xdd, 0x93, 0xea, 0x97, 0x7b, 0xa0,
- 0x8f, 0x52, 0x29, 0xfd, 0x73, 0x08, 0x88, 0xdd, 0x49, 0x2f, 0x6c, 0x0b, 0xbb, 0x13, 0xb8, 0x01,
- 0xf5, 0x4d, 0x98, 0x8f, 0xc9, 0x93, 0x3e, 0x79, 0x04, 0xc8, 0x11, 0xa4, 0xa6, 0xdf, 0xf5, 0x08,
- 0x6d, 0xba, 0x66, 0x2f, 0xb8, 0xef, 0x6a, 0x92, 0x73, 0xc2, 0x18, 0x87, 0x66, 0x8f, 0x2f, 0xda,
- 0x2e, 0xa6, 0xfb, 0x6e, 0xc7, 0xdb, 0x98, 0x5c, 0xda, 0xaa, 0xff, 0x04, 0x96, 0x52, 0xa4, 0x4a,
- 0x03, 0x6f, 0x01, 0xa8, 0x7c, 0x55, 0x2e, 0x5d, 0x84, 0xc2, 0x4c, 0xda, 0x34, 0x1d, 0x6b, 0xe0,
- 0x98, 0x14, 0x6f, 0xb2, 0x64, 0xcb, 0x1f, 0xf4, 0xc6, 0x37, 0xe9, 0x87, 0xb0, 0x94, 0x22, 0x55,
- 0x9a, 0xa4, 0x41, 0xc9, 0x92, 0x34, 0xe9, 0xa9, 0xb0, 0xcd, 0x96, 0x6d, 0x17, 0xd3, 0x13, 0xd7,
- 0xec, 0xfb, 0x5d, 0x6f, 0x7c, 0x20, 0x49, 0xff, 0x00, 0xe6, 0x63, 0xf2, 0x46, 0x84, 0xf2, 0x37,
- 0x39, 0xb8, 0x9b, 0x16, 0x58, 0x13, 0x33, 0x86, 0x65, 0xce, 0x5d, 0x4a, 0xfb, 0x4d, 0x75, 0x2d,
- 0x15, 0x59, 0xfb, 0x25, 0x71, 0xd8, 0x25, 0xcb, 0x59, 0xe6, 0x80, 0x76, 0x65, 0xee, 0xc6, 0xfb,
- 0x6e, 0x0c, 0x68, 0x57, 0xbf, 0x0f, 0xf7, 0x46, 0x1b, 0x26, 0x63, 0xfe, 0x0f, 0x39, 0x58, 0xd8,
- 0xc5, 0xd4, 0x30, 0x2f, 0x44, 0xb6, 0xeb, 0x4f, 0x04, 0x88, 0xeb, 0x10, 0xaf, 0xd7, 0x8c, 0xe1,
- 0x22, 0x65, 0xa3, 0xca, 0x88, 0xe1, 0x2b, 0x75, 0x15, 0x2a, 0xd4, 0x6b, 0xc6, 0xde, 0xb9, 0x65,
- 0x03, 0xa8, 0x17, 0x74, 0xd0, 0xff, 0x9a, 0x87, 0xeb, 0x43, 0x86, 0xc9, 0x85, 0xd8, 0x83, 0x0a,
- 0x31, 0x2f, 0x64, 0xc2, 0xce, 0xe2, 0x93, 0xdd, 0x53, 0xef, 0x47, 0xb2, 0xd3, 0xe4, 0x98, 0xb5,
- 0x90, 0x64, 0x00, 0x09, 0xb9, 0xda, 0xb7, 0xd3, 0x50, 0x0e, 0x39, 0x68, 0x11, 0x8a, 0x2c, 0xbb,
- 0x64, 0x4f, 0x16, 0x11, 0x62, 0x05, 0xd6, 0xdc, 0x6f, 0x87, 0x70, 0xd2, 0x94, 0x82, 0x93, 0xd0,
- 0x0a, 0x94, 0x5c, 0x7c, 0x21, 0x72, 0x56, 0x6e, 0x7c, 0x63, 0xaa, 0x9e, 0x33, 0x8a, 0x2e, 0xbe,
- 0xe0, 0x59, 0xeb, 0x0a, 0x94, 0xd8, 0x3b, 0x9d, 0xb3, 0xf3, 0x8a, 0xed, 0x39, 0x6d, 0xce, 0x3e,
- 0x82, 0xb2, 0xd7, 0xc7, 0xc4, 0xa4, 0x6c, 0xee, 0x33, 0x3c, 0xbd, 0xfe, 0xe4, 0x1d, 0x27, 0xb0,
- 0x76, 0x14, 0x0c, 0x34, 0x94, 0x0c, 0xe6, 0x73, 0xe6, 0x13, 0x25, 0x54, 0x00, 0x34, 0x55, 0x62,
- 0x5e, 0x84, 0xfd, 0x59, 0x2c, 0x31, 0xa3, 0x7a, 0x5e, 0x1b, 0xf3, 0x3c, 0x7b, 0x86, 0x1b, 0x74,
- 0xe0, 0xb5, 0x31, 0x07, 0x68, 0xf0, 0x85, 0x60, 0x95, 0x04, 0xcb, 0xc5, 0x17, 0x9c, 0x75, 0x0f,
- 0xae, 0x06, 0x33, 0x6d, 0xb6, 0x2e, 0xd9, 0x89, 0x50, 0x16, 0x79, 0x9d, 0x9c, 0x6b, 0x83, 0xd1,
- 0x58, 0xaf, 0x60, 0xc2, 0xb2, 0x17, 0x88, 0x5e, 0x72, 0xca, 0xbc, 0x97, 0x6e, 0x43, 0x59, 0x99,
- 0x53, 0x81, 0xe2, 0xcb, 0xc3, 0xe7, 0x87, 0x47, 0x9f, 0x1d, 0xd6, 0xae, 0xa0, 0x32, 0xcc, 0x6c,
- 0x6c, 0x6d, 0x6d, 0x6f, 0x89, 0x4c, 0x7d, 0xf3, 0xe8, 0x78, 0x7f, 0x7b, 0x4b, 0x64, 0xea, 0x5b,
- 0xdb, 0x2f, 0xb6, 0x4f, 0xb7, 0xb7, 0x6a, 0xd3, 0xa8, 0x0a, 0xa5, 0x83, 0xa3, 0xad, 0xfd, 0x1d,
- 0xc6, 0xca, 0x33, 0x96, 0xb1, 0x7d, 0xb8, 0x71, 0xb0, 0xbd, 0x55, 0x9b, 0x41, 0x35, 0xa8, 0x9e,
- 0x7e, 0x7e, 0xbc, 0xdd, 0xdc, 0xdc, 0xdb, 0x38, 0xdc, 0xdd, 0xde, 0xaa, 0x15, 0xf4, 0xdf, 0xe7,
- 0xa0, 0x7e, 0x82, 0x4d, 0x62, 0x75, 0x77, 0x6c, 0x07, 0xfb, 0x8d, 0x4b, 0x76, 0x9a, 0x8e, 0x1f,
- 0xdc, 0x0b, 0x30, 0xf3, 0x7a, 0x80, 0x65, 0xba, 0x50, 0x36, 0x44, 0x23, 0x48, 0xe2, 0xa6, 0x55,
- 0x12, 0x77, 0x03, 0x0a, 0x1d, 0xdb, 0xa1, 0x98, 0x88, 0xe5, 0x37, 0x64, 0x4b, 0xff, 0x04, 0x96,
- 0x52, 0xac, 0x52, 0xf9, 0x66, 0x87, 0x91, 0x79, 0x4c, 0x57, 0x0d, 0xd1, 0xd0, 0xff, 0x9c, 0x83,
- 0x9b, 0xb1, 0x31, 0x9b, 0x9e, 0x4b, 0xb1, 0x4b, 0xbf, 0xbf, 0xc9, 0x7c, 0x00, 0x35, 0xab, 0x3b,
- 0x70, 0xcf, 0x31, 0xcb, 0x3c, 0x85, 0xad, 0x12, 0x34, 0xbc, 0x26, 0xe9, 0xe1, 0x79, 0x72, 0x09,
- 0xcb, 0xe9, 0xb6, 0xca, 0x29, 0xd6, 0xa1, 0xd8, 0x33, 0xa9, 0xd5, 0x0d, 0x27, 0x19, 0x34, 0xd1,
- 0x0a, 0x00, 0xff, 0x6c, 0x46, 0x6e, 0xef, 0x32, 0xa7, 0x6c, 0x99, 0xd4, 0x44, 0xb7, 0xa1, 0x8a,
- 0xdd, 0x76, 0xd3, 0xeb, 0x34, 0x39, 0x4d, 0x82, 0x99, 0x80, 0xdd, 0xf6, 0x51, 0xe7, 0x80, 0x51,
- 0xf4, 0xdf, 0xe6, 0xa0, 0x20, 0xc0, 0xbd, 0xe0, 0x1d, 0x9f, 0x0b, 0xdf, 0xf1, 0xe8, 0xc7, 0xb0,
- 0x14, 0x1e, 0x96, 0x1e, 0xb1, 0xbf, 0xe2, 0x21, 0xd8, 0xec, 0x62, 0xb3, 0x8d, 0x89, 0x3c, 0x7d,
- 0x16, 0x83, 0xc3, 0x33, 0xe4, 0xef, 0x71, 0x36, 0x7a, 0x0f, 0xae, 0xf6, 0x6c, 0x96, 0xfa, 0x37,
- 0x09, 0xee, 0xf4, 0xcc, 0xbe, 0x5f, 0xcf, 0xf3, 0x67, 0xdf, 0xac, 0xa0, 0x1a, 0x82, 0xf8, 0x2c,
- 0x5f, 0x9a, 0xaa, 0x4d, 0x1b, 0x79, 0x76, 0x9b, 0xeb, 0x9f, 0xc3, 0xca, 0x2e, 0xa6, 0x47, 0xad,
- 0x5f, 0x60, 0x8b, 0x6e, 0xd9, 0x04, 0x5b, 0x93, 0x83, 0xbd, 0x7f, 0x00, 0xb7, 0xb2, 0x44, 0x8f,
- 0x80, 0xbf, 0xff, 0x94, 0x83, 0x85, 0x4d, 0xc7, 0x73, 0x31, 0xbb, 0x05, 0x8e, 0x3d, 0x6f, 0x02,
- 0x45, 0xa6, 0xfb, 0x90, 0xef, 0xb3, 0xd7, 0xf8, 0x50, 0xe2, 0x2c, 0x2c, 0xe3, 0x2a, 0x38, 0x1f,
- 0xdd, 0x0f, 0x71, 0xe9, 0xe9, 0x54, 0x68, 0x57, 0x72, 0xf5, 0x45, 0xb8, 0x3e, 0x64, 0xa1, 0x8c,
- 0xa9, 0xbf, 0xe5, 0x60, 0x39, 0xc6, 0xd9, 0x77, 0x29, 0x26, 0xae, 0xf9, 0x3d, 0xce, 0x21, 0x15,
- 0x31, 0x98, 0xfe, 0x1f, 0x10, 0x83, 0x55, 0x58, 0xc9, 0x98, 0x82, 0x9c, 0x24, 0xaf, 0x7e, 0xf6,
- 0xbc, 0x37, 0x93, 0x06, 0x99, 0x93, 0x42, 0xa5, 0xc2, 0xb7, 0x4c, 0xa1, 0xcb, 0x8f, 0x9f, 0x89,
- 0x29, 0xe4, 0xf7, 0x10, 0x76, 0x4c, 0x6a, 0xbf, 0x91, 0x78, 0xae, 0xbc, 0xfb, 0x03, 0x22, 0xbb,
- 0x0a, 0x84, 0x55, 0xc3, 0x9a, 0xa5, 0x55, 0xbf, 0xce, 0xb1, 0x14, 0xa6, 0xef, 0xd8, 0xd6, 0x64,
- 0xf1, 0x76, 0xf4, 0x10, 0x0a, 0x62, 0x51, 0x46, 0x00, 0x3d, 0xb2, 0x87, 0xbe, 0x02, 0x37, 0x53,
- 0x6d, 0x90, 0x36, 0xbe, 0x84, 0xa5, 0xa3, 0x3e, 0xb5, 0x7b, 0x7c, 0xcf, 0x4d, 0x6e, 0xb1, 0x96,
- 0x41, 0x4b, 0x13, 0x2b, 0x94, 0xae, 0xff, 0xf3, 0x16, 0x2f, 0x11, 0x07, 0xe5, 0x2e, 0x51, 0x5b,
- 0x47, 0x5f, 0x40, 0x6d, 0xb8, 0xbc, 0x8d, 0x56, 0x93, 0xda, 0x62, 0xd5, 0x74, 0xed, 0x76, 0x76,
- 0x07, 0x39, 0xc3, 0xc2, 0x7f, 0xbe, 0x79, 0x30, 0x55, 0x9a, 0x42, 0x5f, 0x06, 0x65, 0xe9, 0x48,
- 0xcd, 0x1a, 0x45, 0x87, 0xa7, 0x16, 0xc9, 0xb5, 0x3b, 0x23, 0x7a, 0xc4, 0x34, 0xe4, 0xd0, 0x73,
- 0x00, 0x55, 0x84, 0x46, 0x4b, 0xf1, 0x81, 0x91, 0x62, 0xb8, 0xa6, 0xa5, 0xb1, 0x92, 0xc2, 0x54,
- 0xb1, 0x59, 0x09, 0x4b, 0xd4, 0xb3, 0x95, 0xb0, 0x94, 0xda, 0x74, 0x20, 0xec, 0x33, 0xb8, 0x1a,
- 0x2f, 0x0a, 0xa3, 0x95, 0xf0, 0x89, 0x96, 0x56, 0xba, 0xd6, 0x6e, 0x65, 0xb1, 0x87, 0x04, 0x7f,
- 0x21, 0x41, 0xd8, 0x48, 0x15, 0x56, 0xad, 0x59, 0x46, 0xe9, 0x57, 0xad, 0x59, 0x66, 0x01, 0x37,
- 0x62, 0x77, 0xbc, 0x2c, 0xaa, 0xec, 0x4e, 0xad, 0xc0, 0x2a, 0xbb, 0xd3, 0xab, 0xa9, 0x61, 0x30,
- 0x58, 0x80, 0x92, 0xe5, 0x4c, 0x14, 0xae, 0x75, 0x66, 0x75, 0x55, 0xd3, 0x47, 0x75, 0x19, 0xb2,
- 0xfe, 0x10, 0x2a, 0x91, 0x2a, 0x1d, 0x0a, 0x17, 0x2a, 0x59, 0x29, 0xd5, 0x6e, 0xa6, 0xf2, 0x92,
- 0xce, 0x1e, 0xce, 0x83, 0x94, 0xb3, 0x33, 0xaa, 0x7a, 0xca, 0xd9, 0x99, 0x15, 0xba, 0x40, 0xfc,
- 0x01, 0x80, 0x2a, 0x1e, 0xa9, 0x88, 0x4b, 0x94, 0xc8, 0x54, 0xc4, 0x25, 0x6b, 0x4d, 0x81, 0x83,
- 0x3f, 0xe6, 0xd6, 0x0e, 0x17, 0x83, 0x94, 0xb5, 0x19, 0xb5, 0x27, 0x65, 0x6d, 0x56, 0x1d, 0x29,
- 0xba, 0x9d, 0x13, 0xd5, 0x15, 0xb5, 0x9d, 0xb3, 0x6a, 0x4a, 0x6a, 0x3b, 0x67, 0x96, 0x66, 0x42,
- 0x7f, 0xfc, 0x08, 0xf2, 0x3b, 0xbe, 0x75, 0x8e, 0xe6, 0xc3, 0x21, 0xaa, 0x30, 0xa3, 0x2d, 0xc4,
- 0x89, 0x43, 0xc6, 0x6d, 0x43, 0x29, 0xa8, 0x4d, 0xa0, 0xc5, 0x58, 0xb4, 0xab, 0x3a, 0x8b, 0x56,
- 0x4f, 0x32, 0x86, 0x2c, 0x38, 0x85, 0xd9, 0x58, 0x61, 0x01, 0x2d, 0x87, 0x5a, 0x53, 0xea, 0x1b,
- 0xda, 0x4a, 0x06, 0x77, 0xc8, 0xb8, 0xe7, 0x00, 0x0a, 0xf0, 0x57, 0xeb, 0x9c, 0x28, 0x4a, 0xa8,
- 0x75, 0x4e, 0xa9, 0x0f, 0x04, 0x26, 0x5a, 0x80, 0x92, 0x98, 0xbd, 0xda, 0x48, 0x99, 0x35, 0x04,
- 0xb5, 0x91, 0xb2, 0x21, 0xff, 0xe8, 0x6e, 0x4d, 0xa2, 0xec, 0x51, 0x25, 0x19, 0xa8, 0x7f, 0x54,
- 0x49, 0x16, 0x48, 0x1f, 0x2a, 0x21, 0xc9, 0xca, 0xb8, 0x44, 0xc7, 0xd1, 0xfd, 0xac, 0x3d, 0x14,
- 0x07, 0xeb, 0xb5, 0xf7, 0xbf, 0xb3, 0xdf, 0x90, 0xf7, 0x4e, 0xa0, 0x1a, 0x45, 0xc7, 0xd1, 0xcd,
- 0xb8, 0x80, 0x18, 0x8c, 0xa8, 0x2d, 0xa7, 0x33, 0x13, 0x1b, 0xef, 0x97, 0xa0, 0x65, 0x03, 0x84,
- 0xe8, 0x83, 0x51, 0x36, 0xc6, 0x15, 0x3e, 0x7c, 0x97, 0xae, 0xf1, 0x19, 0x3d, 0xc8, 0xa1, 0x3d,
- 0x28, 0x87, 0xa0, 0x35, 0xaa, 0x67, 0x41, 0xee, 0xda, 0x52, 0x0a, 0x67, 0xc8, 0x3b, 0x9f, 0x42,
- 0x35, 0x0a, 0x42, 0x2b, 0xef, 0xa4, 0xe0, 0xdf, 0xca, 0x3b, 0xa9, 0xb8, 0x75, 0xf4, 0x48, 0x56,
- 0x30, 0x66, 0xe4, 0x48, 0x4e, 0x60, 0xa5, 0x91, 0x23, 0x39, 0x89, 0x7b, 0x86, 0x41, 0xd3, 0xe2,
- 0x3f, 0x37, 0xc4, 0xb1, 0x47, 0x14, 0xfd, 0xbb, 0x20, 0x15, 0xec, 0x54, 0xa7, 0x50, 0x26, 0x70,
- 0x19, 0x59, 0xcf, 0x2f, 0x61, 0x2e, 0x01, 0x26, 0x2a, 0x1d, 0x59, 0xe8, 0xa5, 0xd2, 0x91, 0x89,
- 0x44, 0x86, 0xb3, 0x68, 0x40, 0x51, 0xfe, 0xe3, 0x84, 0x6e, 0x84, 0xa3, 0x62, 0x3f, 0x50, 0x69,
- 0x8b, 0x09, 0xfa, 0x90, 0x67, 0x8f, 0xa1, 0x12, 0x41, 0x1a, 0x51, 0xf4, 0x8e, 0x18, 0x42, 0x10,
- 0x95, 0x67, 0x53, 0xa0, 0xc9, 0xc8, 0xbc, 0x7f, 0xc5, 0x52, 0xa5, 0x11, 0xb8, 0x1f, 0xfa, 0x70,
- 0x54, 0x7c, 0x0e, 0x2b, 0x7d, 0xf4, 0x6e, 0x9d, 0x87, 0x66, 0xf5, 0x73, 0x98, 0x8d, 0x61, 0x58,
- 0xea, 0x04, 0x4e, 0x03, 0x1a, 0xd5, 0x09, 0x9c, 0x0a, 0x7c, 0x45, 0xe6, 0x76, 0x0e, 0x0b, 0x69,
- 0xd0, 0x02, 0xba, 0xab, 0x76, 0x45, 0x26, 0x48, 0xa2, 0xdd, 0x1b, 0xdd, 0x29, 0xa1, 0xac, 0x05,
- 0x73, 0x09, 0x9c, 0x46, 0x05, 0x50, 0x16, 0xb0, 0xa4, 0x02, 0x28, 0x13, 0xe4, 0x89, 0xe8, 0xc0,
- 0x80, 0x92, 0xd5, 0x1a, 0x14, 0x79, 0x3c, 0x67, 0x14, 0x8d, 0xd4, 0x11, 0x3d, 0xa2, 0xd8, 0xa3,
- 0x0e, 0x97, 0x16, 0xcc, 0x25, 0x0a, 0x34, 0x6a, 0x2a, 0x59, 0x15, 0x21, 0x35, 0x95, 0xcc, 0xea,
- 0x4e, 0x64, 0x2a, 0x1e, 0xdc, 0x48, 0x07, 0x25, 0xd0, 0x7b, 0x91, 0xe5, 0xcd, 0xc6, 0x43, 0xb4,
- 0xfb, 0xdf, 0xd5, 0x6d, 0x68, 0xfb, 0x9d, 0xc2, 0x6c, 0x2c, 0x9f, 0x56, 0x41, 0x96, 0x86, 0x72,
- 0xa8, 0x20, 0x4b, 0x47, 0x18, 0x82, 0xd0, 0x75, 0x86, 0x20, 0x88, 0x20, 0x4b, 0x47, 0xf7, 0x52,
- 0xc7, 0x0f, 0xe1, 0x10, 0xda, 0x7b, 0xdf, 0xd1, 0x2b, 0xf9, 0x36, 0x1d, 0xce, 0xce, 0xa3, 0xc9,
- 0x5b, 0x2a, 0x18, 0x10, 0x4d, 0xde, 0x32, 0x12, 0xfb, 0x98, 0xf8, 0x78, 0x9a, 0x1d, 0x15, 0x9f,
- 0x9a, 0xfa, 0x47, 0xc5, 0x67, 0x64, 0xe8, 0x81, 0xf8, 0x0e, 0xcc, 0xa7, 0x24, 0xc9, 0x28, 0x12,
- 0x9b, 0x59, 0x59, 0xbc, 0x76, 0x77, 0x64, 0x9f, 0xe4, 0x6b, 0x29, 0x99, 0x16, 0xab, 0x5d, 0x92,
- 0x99, 0x89, 0xab, 0x5d, 0x92, 0x9d, 0x55, 0x07, 0x4a, 0x1a, 0x1f, 0xbf, 0x62, 0x9d, 0x1d, 0xb3,
- 0xb5, 0x66, 0x79, 0xbd, 0xc7, 0xe2, 0xf3, 0x23, 0x8f, 0x9c, 0x3d, 0x16, 0x22, 0x1e, 0xf3, 0x3f,
- 0xd4, 0x1f, 0x9f, 0x79, 0xb2, 0xdd, 0x6f, 0xb5, 0x0a, 0x9c, 0xf4, 0xe4, 0xbf, 0x01, 0x00, 0x00,
- 0xff, 0xff, 0xd4, 0x82, 0x1d, 0xea, 0xf2, 0x2e, 0x00, 0x00,
+ 0x11, 0x36, 0xf5, 0xe0, 0xa3, 0x48, 0xd9, 0x54, 0x4b, 0xb6, 0xa8, 0xb1, 0x64, 0xd9, 0x63, 0xaf,
+ 0xd7, 0xeb, 0xf5, 0xca, 0xbb, 0x72, 0x80, 0x38, 0x09, 0x82, 0x40, 0xd4, 0xdb, 0xb6, 0x1e, 0x3b,
+ 0x94, 0xb3, 0x58, 0x03, 0x0b, 0xee, 0x70, 0xd8, 0x14, 0x27, 0x1a, 0xce, 0xd0, 0x3d, 0x4d, 0xcb,
+ 0x5a, 0x20, 0x87, 0x04, 0xc8, 0x21, 0x40, 0xb0, 0xa7, 0x20, 0x9b, 0x63, 0x6e, 0x01, 0xf2, 0x0b,
+ 0x72, 0xc9, 0x21, 0x97, 0x5c, 0xf2, 0x0b, 0xf6, 0x2f, 0x04, 0xc8, 0x1f, 0xc8, 0x29, 0xe8, 0xc7,
+ 0x4c, 0xcf, 0x70, 0x66, 0xb8, 0x0e, 0x48, 0x6c, 0x6e, 0xd3, 0x55, 0xdd, 0x55, 0xd5, 0xdd, 0xd5,
+ 0xd5, 0x5d, 0x5f, 0x0d, 0xd4, 0x08, 0xee, 0x7b, 0xbe, 0x4d, 0x3d, 0x72, 0xf9, 0x91, 0x8f, 0xc9,
+ 0x1b, 0xdb, 0xc2, 0xeb, 0x7d, 0xe2, 0x51, 0x0f, 0xe5, 0xcf, 0x6c, 0x6a, 0x3a, 0x97, 0x1a, 0x38,
+ 0xb6, 0x4b, 0x05, 0x4d, 0xab, 0xf8, 0x5d, 0x93, 0xe0, 0xb6, 0x68, 0xe9, 0x0d, 0x58, 0x32, 0xc2,
+ 0xd1, 0x3b, 0x6f, 0x6d, 0x9f, 0xfa, 0x06, 0x7e, 0x3d, 0xc0, 0x3e, 0x45, 0x4f, 0x01, 0x94, 0xe0,
+ 0x5a, 0xee, 0x76, 0xee, 0x41, 0x79, 0x03, 0xad, 0x0b, 0x89, 0xeb, 0x6a, 0x50, 0x7d, 0xe6, 0x8f,
+ 0xff, 0x78, 0x94, 0x33, 0x22, 0x7d, 0xf5, 0x0d, 0xa8, 0x25, 0x85, 0xfa, 0x7d, 0xcf, 0xf5, 0x31,
+ 0xba, 0x01, 0x79, 0xcc, 0x29, 0x5c, 0x62, 0xd1, 0x90, 0x2d, 0xfd, 0x94, 0x8f, 0x31, 0xad, 0xf3,
+ 0x03, 0xd7, 0x22, 0xb8, 0x87, 0x5d, 0x6a, 0x3a, 0xe3, 0x5b, 0x72, 0x13, 0x96, 0x53, 0xa4, 0x0a,
+ 0x53, 0x74, 0x02, 0xf3, 0x82, 0xb9, 0x3b, 0x70, 0xc6, 0xd7, 0x85, 0xee, 0xc2, 0x9c, 0x45, 0xb0,
+ 0x49, 0x71, 0xb3, 0x65, 0xd3, 0x9e, 0xd9, 0xaf, 0x4d, 0xf1, 0x09, 0x56, 0x04, 0xb1, 0xce, 0x69,
+ 0xfa, 0x22, 0xa0, 0xa8, 0x4e, 0x69, 0xc9, 0x21, 0xcc, 0x1f, 0xda, 0xed, 0xb7, 0x82, 0x33, 0xfe,
+ 0xac, 0x17, 0x01, 0x45, 0xc5, 0x49, 0x25, 0xbf, 0xcb, 0xc1, 0xf5, 0x3d, 0x93, 0xb4, 0xcc, 0x33,
+ 0xbc, 0xe5, 0x39, 0x0e, 0xb6, 0xe8, 0xf7, 0x33, 0x67, 0xb4, 0x08, 0xb3, 0x7d, 0x32, 0x70, 0x71,
+ 0x6d, 0x9a, 0x33, 0x45, 0x43, 0xaf, 0xc1, 0x8d, 0x61, 0x6b, 0xa4, 0xa1, 0xff, 0xcc, 0xc1, 0xd2,
+ 0x67, 0xc4, 0xa6, 0x78, 0xcb, 0xeb, 0xf5, 0x6c, 0xba, 0x47, 0xcc, 0x7e, 0x77, 0x7c, 0x53, 0x1b,
+ 0x30, 0xe7, 0xf7, 0x1d, 0x9b, 0x36, 0x28, 0x31, 0x29, 0x3e, 0xbb, 0xe4, 0xa6, 0x5e, 0xdd, 0xf8,
+ 0x28, 0x18, 0x9c, 0xa1, 0x71, 0xbd, 0x11, 0x1d, 0x64, 0xc4, 0x65, 0xe8, 0x77, 0x60, 0x2e, 0xc6,
+ 0x47, 0x55, 0xa8, 0x34, 0xec, 0xaf, 0xf0, 0xe1, 0xc0, 0xa1, 0x76, 0xdf, 0xc1, 0xd5, 0x2b, 0xba,
+ 0x06, 0xb5, 0xa4, 0x68, 0x39, 0xd3, 0x67, 0x70, 0x75, 0xcb, 0xc1, 0xa6, 0x3b, 0xe8, 0x8f, 0xbf,
+ 0xe9, 0xf3, 0x70, 0x2d, 0x94, 0x25, 0xc5, 0x7f, 0x0a, 0xd7, 0xd5, 0x10, 0x66, 0xd6, 0xf8, 0x5a,
+ 0x1e, 0xc1, 0x8d, 0x61, 0x91, 0xf2, 0x60, 0x23, 0x98, 0xf1, 0xed, 0xaf, 0x30, 0x97, 0x36, 0x6d,
+ 0xf0, 0x6f, 0xfd, 0x35, 0x2c, 0x6f, 0xf6, 0xfb, 0xce, 0xe5, 0x9e, 0x4d, 0x4d, 0x4a, 0x89, 0xdd,
+ 0x1a, 0x50, 0x3c, 0x7e, 0x7c, 0x41, 0x1a, 0x14, 0x09, 0x7e, 0x63, 0xfb, 0xb6, 0xe7, 0xf2, 0x5d,
+ 0xac, 0x18, 0x61, 0x5b, 0x5f, 0x01, 0x2d, 0x4d, 0xa5, 0x5c, 0x91, 0x7f, 0x4f, 0x01, 0xda, 0xc5,
+ 0xd4, 0xea, 0x1a, 0xb8, 0xe7, 0xd1, 0xf1, 0xd7, 0x83, 0x85, 0x33, 0xc2, 0x45, 0x71, 0x43, 0x4a,
+ 0x86, 0x6c, 0x31, 0x9f, 0xef, 0x78, 0xc4, 0x0a, 0x7d, 0x9e, 0x37, 0xd0, 0x12, 0x14, 0x5c, 0xaf,
+ 0x49, 0xcd, 0x33, 0xbf, 0x36, 0x23, 0xa2, 0x9f, 0xeb, 0x9d, 0x9a, 0x67, 0x3e, 0xaa, 0x41, 0x81,
+ 0xda, 0x3d, 0xec, 0x0d, 0x68, 0x6d, 0xf6, 0x76, 0xee, 0xc1, 0xac, 0x11, 0x34, 0xd9, 0x10, 0xdf,
+ 0xef, 0x36, 0xcf, 0xf1, 0x65, 0x2d, 0x2f, 0x34, 0xf8, 0x7e, 0xf7, 0x39, 0xbe, 0x44, 0x6b, 0x50,
+ 0x3e, 0x77, 0xbd, 0x0b, 0xb7, 0xd9, 0xf5, 0x58, 0x34, 0x2d, 0x70, 0x26, 0x70, 0xd2, 0x3e, 0xa3,
+ 0xa0, 0x65, 0x28, 0xba, 0x5e, 0x53, 0x9c, 0xbc, 0x12, 0xd7, 0x56, 0x70, 0xbd, 0x13, 0xd6, 0x44,
+ 0x4f, 0x60, 0x4e, 0xd8, 0xd9, 0xec, 0x9b, 0xc4, 0xec, 0xf9, 0x35, 0xe0, 0x53, 0xbe, 0xaa, 0xa6,
+ 0xcc, 0x57, 0xa7, 0x22, 0x3a, 0x9d, 0xf0, 0x3e, 0xe8, 0x11, 0x20, 0xab, 0x8b, 0xad, 0x73, 0x6e,
+ 0x7f, 0xd3, 0xea, 0x9a, 0xee, 0x19, 0x6e, 0xd7, 0xca, 0x5c, 0x72, 0x95, 0x73, 0xd8, 0x54, 0xb6,
+ 0x04, 0xfd, 0xd9, 0x4c, 0xb1, 0x58, 0x2d, 0xe9, 0x4f, 0x61, 0x21, 0xb6, 0xdc, 0xd2, 0x57, 0xee,
+ 0x40, 0x25, 0x26, 0x44, 0x5c, 0x05, 0x65, 0xaa, 0xc6, 0xb3, 0x8b, 0x69, 0x8b, 0x07, 0x11, 0xb5,
+ 0xfc, 0xe3, 0x7b, 0xaf, 0x06, 0xb5, 0xa4, 0x50, 0xe9, 0x1a, 0xff, 0x9a, 0x82, 0xf9, 0x3d, 0x4c,
+ 0x37, 0x89, 0xd5, 0xb5, 0xdf, 0x4c, 0xc0, 0x33, 0x6e, 0x42, 0xc9, 0xe2, 0x47, 0xbe, 0x69, 0xb7,
+ 0xa5, 0x73, 0x14, 0x05, 0xe1, 0xa0, 0xcd, 0xdc, 0xa6, 0x4f, 0x70, 0xc7, 0x7e, 0xcb, 0xfd, 0xa3,
+ 0x64, 0xc8, 0x16, 0x7a, 0x0a, 0xf9, 0x8e, 0x47, 0x7a, 0x26, 0xe5, 0xfe, 0x71, 0x75, 0xe3, 0x76,
+ 0xa0, 0x2a, 0x61, 0xd9, 0xfa, 0x2e, 0xef, 0x67, 0xc8, 0xfe, 0xec, 0xf8, 0xf5, 0x4d, 0xda, 0xe5,
+ 0xee, 0x53, 0x31, 0xf8, 0x37, 0xf3, 0x2a, 0xfc, 0xd6, 0x72, 0x06, 0x6d, 0x5c, 0xcb, 0xdf, 0x9e,
+ 0x7e, 0x50, 0x31, 0x82, 0x26, 0x5a, 0x05, 0xc0, 0x8e, 0xdd, 0x66, 0xfb, 0x4f, 0xbb, 0xdc, 0x77,
+ 0x8a, 0x46, 0x89, 0x53, 0x4e, 0xd8, 0xc0, 0x87, 0x30, 0x6f, 0xbb, 0xbc, 0x67, 0xd3, 0xe9, 0xf8,
+ 0xcd, 0x96, 0xe3, 0xb5, 0xfc, 0x5a, 0x91, 0xf7, 0xba, 0x26, 0x19, 0x2f, 0x3a, 0x7e, 0x9d, 0x91,
+ 0xf5, 0x27, 0x90, 0x17, 0xa6, 0xa0, 0x02, 0x4c, 0xbf, 0x3a, 0x38, 0xa9, 0x5e, 0x61, 0x1f, 0xa7,
+ 0x9b, 0x46, 0x35, 0x87, 0x00, 0xf2, 0xa7, 0x9b, 0x46, 0x73, 0xef, 0x55, 0x75, 0x0a, 0x95, 0xa1,
+ 0xc0, 0xbe, 0xeb, 0xaf, 0x36, 0xaa, 0xd3, 0xfa, 0x03, 0x40, 0xd1, 0x19, 0xa9, 0x10, 0xd2, 0x36,
+ 0xa9, 0xc9, 0x97, 0xb9, 0x62, 0xf0, 0x6f, 0xe6, 0x07, 0xfb, 0xa6, 0xff, 0xc2, 0xb3, 0x4c, 0xa7,
+ 0x4e, 0x4c, 0xd7, 0xea, 0x4e, 0x20, 0x80, 0xe8, 0x1f, 0x43, 0x2d, 0x29, 0x54, 0x1a, 0xb1, 0x08,
+ 0xb3, 0x6f, 0x4c, 0x67, 0x80, 0xa5, 0x53, 0x8a, 0x86, 0xfe, 0x6d, 0x0e, 0x6a, 0xdc, 0x93, 0x1b,
+ 0xde, 0x80, 0x58, 0x58, 0x8c, 0x1a, 0xdf, 0x49, 0x7e, 0x06, 0xf3, 0x3e, 0x17, 0xd8, 0x8c, 0x08,
+ 0x98, 0xca, 0x12, 0x60, 0x54, 0x45, 0x67, 0x23, 0x76, 0x01, 0x4b, 0x01, 0x2d, 0x6e, 0x12, 0xf7,
+ 0xa7, 0x8a, 0x51, 0xf1, 0x23, 0x66, 0xb2, 0xdd, 0xa6, 0x26, 0x39, 0xc3, 0xb4, 0x49, 0x70, 0x87,
+ 0x7b, 0x56, 0xc5, 0x28, 0x09, 0x8a, 0x81, 0x3b, 0xfa, 0x13, 0x58, 0x4e, 0x99, 0x9a, 0x7a, 0xaf,
+ 0x11, 0xec, 0x0f, 0x1c, 0x1a, 0xbc, 0xd7, 0x44, 0x4b, 0xdf, 0x83, 0xf2, 0xae, 0x3f, 0x89, 0xc7,
+ 0xca, 0x3d, 0xa8, 0x08, 0x41, 0x6a, 0xfd, 0x31, 0x21, 0x1e, 0x91, 0x5e, 0x20, 0x1a, 0xfa, 0x5f,
+ 0x73, 0x70, 0x8d, 0x5f, 0xa3, 0x06, 0xee, 0x8c, 0xbf, 0xec, 0x55, 0x98, 0x66, 0x2b, 0x21, 0xee,
+ 0x0e, 0xf6, 0x19, 0xbb, 0x52, 0xa6, 0xe3, 0x57, 0x0a, 0x8b, 0x56, 0x9e, 0xd3, 0x6e, 0x86, 0x7c,
+ 0xb1, 0x80, 0x65, 0xcf, 0x69, 0x1b, 0x41, 0x97, 0x30, 0xdc, 0xcf, 0x46, 0xc2, 0xfd, 0xb3, 0x99,
+ 0x62, 0xbe, 0x5a, 0xd0, 0x6b, 0x50, 0x55, 0x96, 0x8b, 0x49, 0x3e, 0x9b, 0x29, 0xe6, 0xaa, 0x53,
+ 0xba, 0x0b, 0x8b, 0xbb, 0xb6, 0xdb, 0x3e, 0xc4, 0xe4, 0x0c, 0xd7, 0x4d, 0x7f, 0x02, 0x41, 0x67,
+ 0x05, 0x4a, 0x81, 0x99, 0x7e, 0x6d, 0x8a, 0x9f, 0x79, 0x45, 0xd0, 0x3f, 0x84, 0xeb, 0x43, 0xfa,
+ 0xd4, 0xc1, 0x6b, 0x99, 0xbe, 0x70, 0xf9, 0x92, 0xc1, 0xbf, 0xf5, 0xaf, 0x73, 0x30, 0x2f, 0x82,
+ 0xe5, 0xae, 0x47, 0xce, 0xff, 0xff, 0xae, 0xce, 0x5e, 0xb5, 0x51, 0x7b, 0xc2, 0x47, 0xfc, 0xf2,
+ 0x81, 0x6f, 0x60, 0x66, 0xf2, 0x81, 0x7b, 0x42, 0xbc, 0x33, 0x82, 0x7d, 0x7f, 0x22, 0xd1, 0x9b,
+ 0x70, 0xa1, 0x91, 0xe8, 0x2d, 0x08, 0x07, 0x6d, 0xfd, 0xa7, 0xa0, 0xa5, 0xe9, 0x94, 0x8b, 0xb9,
+ 0x06, 0x65, 0xdb, 0x6d, 0xf6, 0x25, 0x59, 0x1e, 0x1b, 0xb0, 0xc3, 0x8e, 0xc2, 0xe4, 0xc6, 0xeb,
+ 0x81, 0xe9, 0x77, 0x27, 0x6c, 0xb2, 0xcf, 0x85, 0x46, 0x4c, 0x16, 0x84, 0xc0, 0xe4, 0xa4, 0xce,
+ 0x77, 0x35, 0xd9, 0x81, 0x5b, 0xc3, 0x17, 0xe7, 0x2e, 0xf1, 0x7a, 0x2f, 0x8d, 0x17, 0x13, 0x39,
+ 0x8c, 0x03, 0xe2, 0x48, 0x8b, 0xd9, 0xa7, 0x7e, 0x07, 0xd6, 0x32, 0xb5, 0xc9, 0x6d, 0x3f, 0x86,
+ 0x05, 0xd1, 0xa5, 0x3e, 0x70, 0xdb, 0xce, 0x04, 0x1e, 0xb6, 0x0f, 0x61, 0x31, 0x2e, 0x70, 0xc4,
+ 0x9d, 0xf4, 0x02, 0xaa, 0x7b, 0x98, 0x6e, 0x79, 0x6e, 0xc7, 0x3e, 0x1b, 0x5f, 0xf3, 0xfb, 0xfc,
+ 0xdd, 0x11, 0x48, 0x1b, 0xa1, 0xf6, 0xeb, 0x29, 0xa8, 0x36, 0x26, 0xa6, 0x17, 0x3d, 0x85, 0x02,
+ 0x76, 0x29, 0xb1, 0xb1, 0x88, 0x14, 0xe5, 0x8d, 0x5b, 0xc1, 0xb0, 0x61, 0x25, 0xeb, 0x3b, 0x2e,
+ 0x25, 0x97, 0x46, 0xd0, 0x5d, 0xfb, 0x4d, 0x0e, 0x66, 0x39, 0x89, 0xed, 0x1d, 0x7b, 0x99, 0x8a,
+ 0xb8, 0xc1, 0x3e, 0xd1, 0x2a, 0x94, 0xf8, 0x8d, 0xd9, 0xf4, 0x29, 0x11, 0x7b, 0xba, 0x7f, 0xc5,
+ 0x28, 0x72, 0x52, 0x83, 0x12, 0x74, 0x07, 0xca, 0x82, 0x6d, 0xbb, 0xf4, 0xc9, 0x06, 0x0f, 0xb5,
+ 0xb3, 0xfb, 0x57, 0x0c, 0xe0, 0xc4, 0x03, 0x46, 0x43, 0x6b, 0x20, 0x5a, 0xcd, 0x96, 0xe7, 0x39,
+ 0xe2, 0x9d, 0xbc, 0x7f, 0xc5, 0x10, 0x52, 0xeb, 0x9e, 0xe7, 0xd4, 0x0b, 0xf2, 0x86, 0xd6, 0x17,
+ 0x60, 0xbe, 0x31, 0xbc, 0x72, 0xba, 0x05, 0x0b, 0xdb, 0xd8, 0xc1, 0x2c, 0xe1, 0x9a, 0xcc, 0x3a,
+ 0x21, 0x98, 0x39, 0xc7, 0x97, 0x62, 0x91, 0x4a, 0x06, 0xff, 0xd6, 0x6f, 0xc0, 0x62, 0x5c, 0x89,
+ 0x54, 0x6e, 0xc3, 0xb2, 0x81, 0x7d, 0xea, 0x11, 0xbc, 0x35, 0xf0, 0xa9, 0xd7, 0xdb, 0xf7, 0xbc,
+ 0x73, 0x7f, 0x22, 0x26, 0x70, 0x6f, 0x98, 0x8a, 0x78, 0xc3, 0x0a, 0x68, 0x69, 0xaa, 0xa4, 0x21,
+ 0xa7, 0x50, 0xab, 0x9b, 0xd6, 0xf9, 0xa0, 0x3f, 0x49, 0x3b, 0xf4, 0xc7, 0xb0, 0x9c, 0x22, 0x75,
+ 0x84, 0xcb, 0xbe, 0x86, 0x3b, 0x69, 0x27, 0x79, 0x42, 0x87, 0x36, 0x75, 0x5d, 0xee, 0x81, 0x3e,
+ 0x4a, 0xa5, 0x5c, 0x9f, 0x23, 0x40, 0xec, 0x2a, 0x7c, 0x61, 0x5b, 0xd8, 0x9d, 0xc0, 0xc5, 0xab,
+ 0x6f, 0xc1, 0x42, 0x4c, 0x9e, 0x5c, 0x93, 0x47, 0x80, 0x1c, 0x41, 0x6a, 0xfa, 0x5d, 0x8f, 0xd0,
+ 0xa6, 0x6b, 0xf6, 0x82, 0x6b, 0xb6, 0x2a, 0x39, 0x0d, 0xc6, 0x38, 0x32, 0x7b, 0x7c, 0xd3, 0xf6,
+ 0x30, 0x3d, 0x70, 0x3b, 0xde, 0xe6, 0xe4, 0xb2, 0x65, 0xfd, 0x27, 0xb0, 0x9c, 0x22, 0x55, 0x1a,
+ 0x78, 0x0b, 0x40, 0xa5, 0xc9, 0x72, 0xeb, 0x22, 0x14, 0x66, 0xd2, 0x96, 0xe9, 0x58, 0x03, 0xc7,
+ 0xa4, 0x78, 0x8b, 0xe5, 0x78, 0xfe, 0xa0, 0x37, 0xbe, 0x49, 0x3f, 0x84, 0xe5, 0x14, 0xa9, 0xd2,
+ 0x24, 0x0d, 0x8a, 0x96, 0xa4, 0xc9, 0x95, 0x0a, 0xdb, 0x6c, 0xdb, 0xf6, 0x30, 0x6d, 0xb8, 0x66,
+ 0xdf, 0xef, 0x7a, 0xe3, 0xe3, 0x57, 0xfa, 0x07, 0xb0, 0x10, 0x93, 0x37, 0xc2, 0x95, 0xbf, 0xc9,
+ 0xc1, 0xdd, 0x34, 0xc7, 0x9a, 0x98, 0x31, 0x2c, 0x61, 0xef, 0x52, 0xda, 0x6f, 0xaa, 0xdb, 0xb0,
+ 0xc0, 0xda, 0x2f, 0x89, 0xc3, 0xee, 0x76, 0xce, 0x32, 0x07, 0xb4, 0x2b, 0x53, 0x46, 0xde, 0x77,
+ 0x73, 0x40, 0xbb, 0xfa, 0x7d, 0xb8, 0x37, 0xda, 0x30, 0xe9, 0xf3, 0x7f, 0xc8, 0xc1, 0xe2, 0x1e,
+ 0xa6, 0x86, 0x79, 0x21, 0x92, 0x6c, 0x7f, 0x22, 0xf8, 0x5f, 0x87, 0x78, 0xbd, 0x66, 0x0c, 0x8e,
+ 0x29, 0x19, 0x15, 0x46, 0x0c, 0x1f, 0xc7, 0x6b, 0x50, 0xa6, 0x5e, 0x33, 0xf6, 0xbc, 0x2e, 0x19,
+ 0x40, 0xbd, 0xa0, 0x83, 0xfe, 0xb7, 0x19, 0xb8, 0x3e, 0x64, 0x98, 0xdc, 0x88, 0x7d, 0x28, 0x13,
+ 0xf3, 0x42, 0xe2, 0x04, 0xcc, 0x3f, 0xd9, 0x3d, 0xf5, 0x7e, 0x24, 0x29, 0x4e, 0x8e, 0x59, 0x0f,
+ 0x49, 0x06, 0x90, 0x90, 0xab, 0x7d, 0x3b, 0x0d, 0xa5, 0x90, 0x83, 0x96, 0xa0, 0xc0, 0x92, 0x5a,
+ 0xf6, 0x52, 0x12, 0x2e, 0x96, 0x67, 0xcd, 0x83, 0x76, 0x88, 0x62, 0x4d, 0x29, 0x14, 0x0b, 0xad,
+ 0x42, 0xd1, 0xc5, 0x17, 0x22, 0x55, 0xe6, 0xc6, 0xd7, 0xa7, 0x6a, 0x39, 0xa3, 0xe0, 0xe2, 0x0b,
+ 0x9e, 0x2c, 0xaf, 0x42, 0x91, 0xa5, 0x07, 0x9c, 0x3d, 0xa3, 0xd8, 0x9e, 0xd3, 0xe6, 0xec, 0x63,
+ 0x28, 0x79, 0x7d, 0x4c, 0x4c, 0xca, 0xe6, 0x3e, 0xcb, 0xb3, 0xfa, 0x4f, 0xde, 0x71, 0x02, 0xeb,
+ 0xc7, 0xc1, 0x40, 0x43, 0xc9, 0x60, 0x6b, 0xce, 0xd6, 0x44, 0x09, 0x15, 0xb8, 0x50, 0x85, 0x98,
+ 0x17, 0x61, 0x7f, 0xe6, 0x4b, 0xcc, 0xa8, 0x9e, 0xd7, 0xc6, 0x3c, 0xbd, 0x9f, 0xe5, 0x06, 0x1d,
+ 0x7a, 0x6d, 0xcc, 0x71, 0x21, 0x7c, 0x21, 0x58, 0x45, 0xc1, 0x72, 0xf1, 0x05, 0x67, 0xdd, 0x83,
+ 0xab, 0xc1, 0x4c, 0x9b, 0xad, 0x4b, 0x16, 0x11, 0x4a, 0x22, 0x9d, 0x94, 0x73, 0xad, 0x33, 0x1a,
+ 0xeb, 0x15, 0x4c, 0x58, 0xf6, 0x02, 0xd1, 0x4b, 0x4e, 0x99, 0xf7, 0xd2, 0x6d, 0x28, 0x29, 0x73,
+ 0xca, 0x50, 0x78, 0x79, 0xf4, 0xfc, 0xe8, 0xf8, 0xb3, 0xa3, 0xea, 0x15, 0x54, 0x82, 0xd9, 0xcd,
+ 0xed, 0xed, 0x9d, 0x6d, 0x01, 0x10, 0x6c, 0x1d, 0x9f, 0x1c, 0xec, 0x6c, 0x0b, 0x80, 0x60, 0x7b,
+ 0xe7, 0xc5, 0xce, 0xe9, 0xce, 0x76, 0x75, 0x1a, 0x55, 0xa0, 0x78, 0x78, 0xbc, 0x7d, 0xb0, 0xcb,
+ 0x58, 0x33, 0x8c, 0x65, 0xec, 0x1c, 0x6d, 0x1e, 0xee, 0x6c, 0x57, 0x67, 0x51, 0x15, 0x2a, 0xa7,
+ 0x9f, 0x9f, 0xec, 0x34, 0xb7, 0xf6, 0x37, 0x8f, 0xf6, 0x76, 0xb6, 0xab, 0x79, 0xfd, 0xf7, 0x39,
+ 0xa8, 0x35, 0xb0, 0x49, 0xac, 0xee, 0xae, 0xed, 0x60, 0xbf, 0x7e, 0xc9, 0xa2, 0xe9, 0xf8, 0xce,
+ 0xbd, 0x08, 0xb3, 0xaf, 0x07, 0x58, 0x66, 0x29, 0x25, 0x43, 0x34, 0x82, 0xdc, 0x71, 0x5a, 0xe5,
+ 0x8e, 0x37, 0x20, 0xdf, 0xb1, 0x1d, 0x8a, 0x89, 0xd8, 0x7e, 0x43, 0xb6, 0xf4, 0x4f, 0x60, 0x39,
+ 0xc5, 0x2a, 0x95, 0xe6, 0x76, 0x18, 0x99, 0xfb, 0x74, 0xc5, 0x10, 0x0d, 0xfd, 0x2f, 0x39, 0xb8,
+ 0x19, 0x1b, 0xb3, 0xe5, 0xb9, 0x14, 0xbb, 0xf4, 0xfb, 0x9b, 0xcc, 0x07, 0x50, 0xb5, 0xba, 0x03,
+ 0xf7, 0x1c, 0xb3, 0x84, 0x57, 0xd8, 0x2a, 0xb1, 0xca, 0x6b, 0x92, 0x1e, 0xc6, 0x93, 0x4b, 0x58,
+ 0x49, 0xb7, 0x55, 0x4e, 0xb1, 0x06, 0x85, 0x9e, 0x49, 0xad, 0x6e, 0x38, 0xc9, 0xa0, 0x89, 0x56,
+ 0x01, 0xf8, 0x67, 0x33, 0x72, 0x7b, 0x97, 0x38, 0x65, 0xdb, 0xa4, 0x26, 0xba, 0x0d, 0x15, 0xec,
+ 0xb6, 0x9b, 0x5e, 0xa7, 0xc9, 0x69, 0x12, 0x43, 0x05, 0xec, 0xb6, 0x8f, 0x3b, 0x87, 0x8c, 0xa2,
+ 0xff, 0x36, 0x07, 0x79, 0x81, 0x29, 0x06, 0xe9, 0x43, 0x2e, 0x4c, 0x1f, 0xd0, 0x8f, 0x61, 0x39,
+ 0x0c, 0x96, 0x1e, 0xb1, 0xbf, 0xe2, 0x2e, 0xd8, 0xec, 0x62, 0xb3, 0x8d, 0x89, 0x8c, 0x3e, 0x4b,
+ 0x41, 0xf0, 0x0c, 0xf9, 0xfb, 0x9c, 0x8d, 0xde, 0x83, 0xab, 0x3d, 0x9b, 0x10, 0x8f, 0x34, 0x09,
+ 0xee, 0xf4, 0xcc, 0xbe, 0x5f, 0x9b, 0xe1, 0xcf, 0xbe, 0x39, 0x41, 0x35, 0x04, 0xf1, 0xd9, 0x4c,
+ 0x71, 0xaa, 0x3a, 0x6d, 0xcc, 0xb0, 0xdb, 0x5c, 0xff, 0x1c, 0x56, 0xf7, 0x30, 0x3d, 0x6e, 0xfd,
+ 0x02, 0x5b, 0x74, 0xdb, 0x26, 0xd8, 0x9a, 0x1c, 0xda, 0xfe, 0x03, 0xb8, 0x95, 0x25, 0x7a, 0x04,
+ 0xea, 0xfe, 0xa7, 0x1c, 0x2c, 0x6e, 0x39, 0x9e, 0x8b, 0xd9, 0x2d, 0x70, 0xe2, 0x79, 0x13, 0xa8,
+ 0x6d, 0xdd, 0x87, 0x99, 0x3e, 0x7b, 0x8d, 0x0f, 0xe5, 0xeb, 0xc2, 0x32, 0xae, 0x82, 0xf3, 0xd1,
+ 0xfd, 0x10, 0x0e, 0x9f, 0x4e, 0x45, 0x94, 0x25, 0x57, 0x5f, 0x82, 0xeb, 0x43, 0x16, 0x4a, 0x9f,
+ 0xfa, 0x7b, 0x0e, 0x56, 0x62, 0x9c, 0x03, 0x97, 0x62, 0xe2, 0x9a, 0xdf, 0xe3, 0x1c, 0x52, 0x81,
+ 0x8a, 0xe9, 0xff, 0x01, 0xa8, 0x58, 0x83, 0xd5, 0x8c, 0x29, 0xc8, 0x49, 0xf2, 0xa2, 0x6b, 0xcf,
+ 0x7b, 0x33, 0x69, 0x6c, 0x3b, 0x29, 0x54, 0x2a, 0x7c, 0xcb, 0x14, 0xba, 0x3c, 0xfc, 0x4c, 0x4c,
+ 0x21, 0xbf, 0x87, 0xb0, 0x63, 0x52, 0xfb, 0x8d, 0x84, 0x91, 0xe5, 0xdd, 0x1f, 0x10, 0xd9, 0x55,
+ 0x20, 0xac, 0x1a, 0xd6, 0x2c, 0xad, 0xfa, 0x75, 0x8e, 0xa5, 0x30, 0x7d, 0xc7, 0xb6, 0x26, 0x0b,
+ 0xf3, 0xa3, 0x87, 0x90, 0x17, 0x9b, 0x32, 0x02, 0x5f, 0x92, 0x3d, 0xf4, 0x55, 0xb8, 0x99, 0x6a,
+ 0x83, 0xb4, 0xf1, 0x25, 0x2c, 0x1f, 0xf7, 0xa9, 0xdd, 0xe3, 0x67, 0x6e, 0x72, 0x9b, 0xb5, 0x02,
+ 0x5a, 0x9a, 0x58, 0xa1, 0x74, 0xe3, 0xcf, 0x6b, 0xbc, 0x32, 0x1d, 0x54, 0xd9, 0x44, 0x49, 0x1f,
+ 0x7d, 0x01, 0xd5, 0xe1, 0xaa, 0x3a, 0x5a, 0x4b, 0x6a, 0x8b, 0x15, 0xf1, 0xb5, 0xdb, 0xd9, 0x1d,
+ 0xe4, 0x0c, 0xf3, 0xff, 0xf9, 0xe6, 0xc1, 0x54, 0x71, 0x0a, 0x7d, 0x19, 0x54, 0xc3, 0x23, 0xa5,
+ 0x72, 0x14, 0x1d, 0x9e, 0x5a, 0x9b, 0xd7, 0xee, 0x8c, 0xe8, 0x11, 0xd3, 0x90, 0x43, 0xcf, 0x01,
+ 0x54, 0xed, 0x1b, 0x2d, 0xc7, 0x07, 0x46, 0x6a, 0xf0, 0x9a, 0x96, 0xc6, 0x4a, 0x0a, 0x53, 0x35,
+ 0x6e, 0x25, 0x2c, 0x51, 0x46, 0x57, 0xc2, 0x52, 0x4a, 0xe2, 0x81, 0xb0, 0xcf, 0xe0, 0x6a, 0xbc,
+ 0x16, 0x8d, 0x56, 0xc3, 0x27, 0x5a, 0x5a, 0xc5, 0x5c, 0xbb, 0x95, 0xc5, 0x1e, 0x12, 0xfc, 0x85,
+ 0xc4, 0x7e, 0x23, 0xc5, 0x5f, 0xb5, 0x67, 0x19, 0x15, 0x67, 0xb5, 0x67, 0x99, 0x75, 0xe3, 0x88,
+ 0xdd, 0xf1, 0x6a, 0xac, 0xb2, 0x3b, 0xb5, 0xf0, 0xab, 0xec, 0x4e, 0x2f, 0xe2, 0x86, 0xce, 0x60,
+ 0x01, 0x4a, 0x56, 0x51, 0x51, 0xb8, 0xd7, 0x99, 0x45, 0x5d, 0x4d, 0x1f, 0xd5, 0x65, 0xc8, 0xfa,
+ 0x23, 0x28, 0x47, 0x8a, 0x83, 0x28, 0xdc, 0xa8, 0x64, 0x81, 0x56, 0xbb, 0x99, 0xca, 0x4b, 0x2e,
+ 0xf6, 0x70, 0x1e, 0xa4, 0x16, 0x3b, 0xa3, 0x98, 0xa8, 0x16, 0x3b, 0xb3, 0x30, 0x18, 0x88, 0x3f,
+ 0x04, 0x50, 0x35, 0x2b, 0xe5, 0x71, 0x89, 0xca, 0x9c, 0xf2, 0xb8, 0x64, 0x89, 0x2b, 0x58, 0xe0,
+ 0x8f, 0xb9, 0xb5, 0xc3, 0x35, 0x28, 0x65, 0x6d, 0x46, 0xc9, 0x4b, 0x59, 0x9b, 0x55, 0xbe, 0x8a,
+ 0x1e, 0xe7, 0x44, 0x51, 0x47, 0x1d, 0xe7, 0xac, 0x52, 0x96, 0x3a, 0xce, 0x99, 0x15, 0xa1, 0x70,
+ 0x3d, 0x7e, 0x04, 0x33, 0xbb, 0xbe, 0x75, 0x8e, 0x16, 0xc2, 0x21, 0xaa, 0x1e, 0xa4, 0x2d, 0xc6,
+ 0x89, 0x43, 0xc6, 0xed, 0x40, 0x31, 0x28, 0x89, 0xa0, 0xa5, 0x98, 0xb7, 0xab, 0xf2, 0x8e, 0x56,
+ 0x4b, 0x32, 0x86, 0x2c, 0x38, 0x85, 0xb9, 0x58, 0x3d, 0x03, 0xad, 0x84, 0x5a, 0x53, 0xca, 0x2a,
+ 0xda, 0x6a, 0x06, 0x77, 0xc8, 0xb8, 0xe7, 0x00, 0xaa, 0xce, 0xa0, 0xf6, 0x39, 0x51, 0x0b, 0x51,
+ 0xfb, 0x9c, 0x52, 0x96, 0x08, 0x4c, 0xb4, 0x00, 0x25, 0x4b, 0x05, 0xea, 0x20, 0x65, 0x96, 0x2e,
+ 0xd4, 0x41, 0xca, 0xae, 0x34, 0x44, 0x4f, 0x6b, 0x12, 0xdc, 0x8f, 0x2a, 0xc9, 0x28, 0x36, 0x44,
+ 0x95, 0x64, 0xd5, 0x06, 0x42, 0x25, 0x24, 0x59, 0x90, 0x97, 0xa0, 0x3c, 0xba, 0x9f, 0x75, 0x86,
+ 0xe2, 0x35, 0x02, 0xed, 0xfd, 0xef, 0xec, 0x37, 0xb4, 0x7a, 0x0d, 0xa8, 0x44, 0x41, 0x79, 0x74,
+ 0x33, 0x2e, 0x20, 0x06, 0x23, 0x6a, 0x2b, 0xe9, 0xcc, 0xc4, 0xc1, 0xfb, 0x25, 0x68, 0xd9, 0x00,
+ 0x21, 0xfa, 0x60, 0x94, 0x8d, 0x71, 0x85, 0x0f, 0xdf, 0xa5, 0x6b, 0x7c, 0x46, 0x0f, 0x72, 0xe8,
+ 0x19, 0x94, 0x42, 0xb8, 0x1f, 0xd5, 0x22, 0xa1, 0x22, 0x86, 0x57, 0x6b, 0xcb, 0x29, 0x9c, 0xc4,
+ 0x54, 0xf6, 0xa1, 0xd4, 0x48, 0xca, 0x6a, 0x64, 0xca, 0x6a, 0x64, 0xc8, 0xca, 0xa1, 0x4f, 0xa1,
+ 0x12, 0x05, 0xb4, 0xd5, 0x4a, 0xa7, 0x60, 0xe9, 0x6a, 0xa5, 0x53, 0x31, 0xf0, 0x68, 0x78, 0x57,
+ 0x90, 0x68, 0x24, 0xbc, 0x27, 0x70, 0xd7, 0x48, 0x78, 0x4f, 0x62, 0xa8, 0xa1, 0x03, 0xb6, 0x78,
+ 0x9d, 0x24, 0x8e, 0x63, 0xa2, 0xe8, 0x0f, 0x12, 0xa9, 0xc0, 0xa9, 0x8a, 0x68, 0x99, 0x20, 0x68,
+ 0x64, 0x41, 0xbf, 0x84, 0xf9, 0x04, 0x30, 0xa9, 0x74, 0x64, 0x21, 0xa1, 0x4a, 0x47, 0x26, 0xaa,
+ 0x19, 0xce, 0xa2, 0x0e, 0x05, 0xf9, 0x9b, 0x16, 0xba, 0x11, 0x8e, 0x8a, 0xfd, 0x03, 0xa6, 0x2d,
+ 0x25, 0xe8, 0x43, 0x2b, 0x7b, 0x02, 0xe5, 0x08, 0x6a, 0x89, 0xa2, 0xf7, 0xcd, 0x10, 0x1a, 0xa9,
+ 0x56, 0x36, 0x05, 0xe6, 0x8c, 0xcc, 0xfb, 0x57, 0x2c, 0xed, 0x1a, 0x81, 0x21, 0xa2, 0x0f, 0x47,
+ 0xf9, 0xfa, 0xb0, 0xd2, 0x47, 0xef, 0xd6, 0x79, 0x68, 0x56, 0x3f, 0x87, 0xb9, 0x18, 0x1e, 0xa6,
+ 0xa2, 0x79, 0x1a, 0x68, 0xa9, 0xa2, 0x79, 0x2a, 0x88, 0x16, 0x99, 0xdb, 0x39, 0x2c, 0xa6, 0xc1,
+ 0x14, 0xe8, 0xae, 0x3a, 0x15, 0x99, 0x80, 0x8b, 0x76, 0x6f, 0x74, 0xa7, 0x84, 0xb2, 0x16, 0xcc,
+ 0x27, 0x30, 0x1f, 0xe5, 0x40, 0x59, 0x20, 0x95, 0x72, 0xa0, 0x4c, 0xc0, 0x28, 0xa2, 0x03, 0x03,
+ 0x4a, 0x56, 0x7e, 0x50, 0xe4, 0x21, 0x9e, 0x51, 0x80, 0x52, 0xe1, 0x7e, 0x44, 0xe1, 0x48, 0x05,
+ 0xaa, 0x16, 0xcc, 0x27, 0x8a, 0x3d, 0x6a, 0x2a, 0x59, 0xd5, 0x25, 0x35, 0x95, 0xcc, 0x4a, 0x51,
+ 0x64, 0x2a, 0x1e, 0xdc, 0x48, 0x07, 0x38, 0xd0, 0x7b, 0x91, 0xed, 0xcd, 0xc6, 0x56, 0xb4, 0xfb,
+ 0xdf, 0xd5, 0x6d, 0xe8, 0xf8, 0x9d, 0xc2, 0x5c, 0x2c, 0x37, 0x57, 0x4e, 0x96, 0x86, 0x98, 0x28,
+ 0x27, 0x4b, 0x47, 0x2b, 0x02, 0xd7, 0x75, 0x86, 0xe0, 0x8c, 0x20, 0xe3, 0x47, 0xf7, 0x52, 0xc7,
+ 0x0f, 0x61, 0x1a, 0xda, 0x7b, 0xdf, 0xd1, 0x2b, 0xf9, 0xce, 0x1d, 0xce, 0xf4, 0xa3, 0x89, 0x60,
+ 0x2a, 0xb0, 0x10, 0x4d, 0x04, 0x33, 0x40, 0x82, 0x98, 0xf8, 0x78, 0xca, 0x1e, 0x15, 0x9f, 0x0a,
+ 0x23, 0x44, 0xc5, 0x67, 0x64, 0xfb, 0x81, 0xf8, 0x0e, 0x2c, 0xa4, 0x24, 0xdc, 0x28, 0xe2, 0x9b,
+ 0x59, 0x88, 0x80, 0x76, 0x77, 0x64, 0x9f, 0xe4, 0xcb, 0x2b, 0x99, 0x62, 0xab, 0x53, 0x92, 0x99,
+ 0xd5, 0xab, 0x53, 0x92, 0x9d, 0xa1, 0x07, 0x4a, 0xea, 0x1f, 0xbf, 0x62, 0x9d, 0x1d, 0xb3, 0xb5,
+ 0x6e, 0x79, 0xbd, 0xc7, 0xe2, 0xf3, 0x23, 0x8f, 0x9c, 0x3d, 0x16, 0x22, 0x1e, 0xf3, 0x9f, 0xec,
+ 0x1f, 0x9f, 0x79, 0xb2, 0xdd, 0x6f, 0xb5, 0xf2, 0x9c, 0xf4, 0xe4, 0xbf, 0x01, 0x00, 0x00, 0xff,
+ 0xff, 0x99, 0x62, 0x61, 0x2b, 0xb5, 0x2f, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -4331,6 +4418,9 @@ type RepositoryServiceClient interface {
CreateRepositoryFromURL(ctx context.Context, in *CreateRepositoryFromURLRequest, opts ...grpc.CallOption) (*CreateRepositoryFromURLResponse, error)
CreateBundle(ctx context.Context, in *CreateBundleRequest, opts ...grpc.CallOption) (RepositoryService_CreateBundleClient, error)
CreateRepositoryFromBundle(ctx context.Context, opts ...grpc.CallOption) (RepositoryService_CreateRepositoryFromBundleClient, error)
+ // GetConfig reads the target repository's gitconfig and streams its contents
+ // back. Returns a NotFound error in case no gitconfig was found.
+ GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (RepositoryService_GetConfigClient, error)
SetConfig(ctx context.Context, in *SetConfigRequest, opts ...grpc.CallOption) (*SetConfigResponse, error)
DeleteConfig(ctx context.Context, in *DeleteConfigRequest, opts ...grpc.CallOption) (*DeleteConfigResponse, error)
FindLicense(ctx context.Context, in *FindLicenseRequest, opts ...grpc.CallOption) (*FindLicenseResponse, error)
@@ -4633,6 +4723,38 @@ func (x *repositoryServiceCreateRepositoryFromBundleClient) CloseAndRecv() (*Cre
return m, nil
}
+func (c *repositoryServiceClient) GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (RepositoryService_GetConfigClient, error) {
+ stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[3], "/gitaly.RepositoryService/GetConfig", opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &repositoryServiceGetConfigClient{stream}
+ if err := x.ClientStream.SendMsg(in); err != nil {
+ return nil, err
+ }
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ return x, nil
+}
+
+type RepositoryService_GetConfigClient interface {
+ Recv() (*GetConfigResponse, error)
+ grpc.ClientStream
+}
+
+type repositoryServiceGetConfigClient struct {
+ grpc.ClientStream
+}
+
+func (x *repositoryServiceGetConfigClient) Recv() (*GetConfigResponse, error) {
+ m := new(GetConfigResponse)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
func (c *repositoryServiceClient) SetConfig(ctx context.Context, in *SetConfigRequest, opts ...grpc.CallOption) (*SetConfigResponse, error) {
out := new(SetConfigResponse)
err := c.cc.Invoke(ctx, "/gitaly.RepositoryService/SetConfig", in, out, opts...)
@@ -4661,7 +4783,7 @@ func (c *repositoryServiceClient) FindLicense(ctx context.Context, in *FindLicen
}
func (c *repositoryServiceClient) GetInfoAttributes(ctx context.Context, in *GetInfoAttributesRequest, opts ...grpc.CallOption) (RepositoryService_GetInfoAttributesClient, error) {
- stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[3], "/gitaly.RepositoryService/GetInfoAttributes", opts...)
+ stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[4], "/gitaly.RepositoryService/GetInfoAttributes", opts...)
if err != nil {
return nil, err
}
@@ -4711,7 +4833,7 @@ func (c *repositoryServiceClient) Cleanup(ctx context.Context, in *CleanupReques
}
func (c *repositoryServiceClient) GetSnapshot(ctx context.Context, in *GetSnapshotRequest, opts ...grpc.CallOption) (RepositoryService_GetSnapshotClient, error) {
- stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[4], "/gitaly.RepositoryService/GetSnapshot", opts...)
+ stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[5], "/gitaly.RepositoryService/GetSnapshot", opts...)
if err != nil {
return nil, err
}
@@ -4752,7 +4874,7 @@ func (c *repositoryServiceClient) CreateRepositoryFromSnapshot(ctx context.Conte
}
func (c *repositoryServiceClient) GetRawChanges(ctx context.Context, in *GetRawChangesRequest, opts ...grpc.CallOption) (RepositoryService_GetRawChangesClient, error) {
- stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[5], "/gitaly.RepositoryService/GetRawChanges", opts...)
+ stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[6], "/gitaly.RepositoryService/GetRawChanges", opts...)
if err != nil {
return nil, err
}
@@ -4784,7 +4906,7 @@ func (x *repositoryServiceGetRawChangesClient) Recv() (*GetRawChangesResponse, e
}
func (c *repositoryServiceClient) SearchFilesByContent(ctx context.Context, in *SearchFilesByContentRequest, opts ...grpc.CallOption) (RepositoryService_SearchFilesByContentClient, error) {
- stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[6], "/gitaly.RepositoryService/SearchFilesByContent", opts...)
+ stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[7], "/gitaly.RepositoryService/SearchFilesByContent", opts...)
if err != nil {
return nil, err
}
@@ -4816,7 +4938,7 @@ func (x *repositoryServiceSearchFilesByContentClient) Recv() (*SearchFilesByCont
}
func (c *repositoryServiceClient) SearchFilesByName(ctx context.Context, in *SearchFilesByNameRequest, opts ...grpc.CallOption) (RepositoryService_SearchFilesByNameClient, error) {
- stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[7], "/gitaly.RepositoryService/SearchFilesByName", opts...)
+ stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[8], "/gitaly.RepositoryService/SearchFilesByName", opts...)
if err != nil {
return nil, err
}
@@ -4848,7 +4970,7 @@ func (x *repositoryServiceSearchFilesByNameClient) Recv() (*SearchFilesByNameRes
}
func (c *repositoryServiceClient) RestoreCustomHooks(ctx context.Context, opts ...grpc.CallOption) (RepositoryService_RestoreCustomHooksClient, error) {
- stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[8], "/gitaly.RepositoryService/RestoreCustomHooks", opts...)
+ stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[9], "/gitaly.RepositoryService/RestoreCustomHooks", opts...)
if err != nil {
return nil, err
}
@@ -4882,7 +5004,7 @@ func (x *repositoryServiceRestoreCustomHooksClient) CloseAndRecv() (*RestoreCust
}
func (c *repositoryServiceClient) BackupCustomHooks(ctx context.Context, in *BackupCustomHooksRequest, opts ...grpc.CallOption) (RepositoryService_BackupCustomHooksClient, error) {
- stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[9], "/gitaly.RepositoryService/BackupCustomHooks", opts...)
+ stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[10], "/gitaly.RepositoryService/BackupCustomHooks", opts...)
if err != nil {
return nil, err
}
@@ -5004,6 +5126,9 @@ type RepositoryServiceServer interface {
CreateRepositoryFromURL(context.Context, *CreateRepositoryFromURLRequest) (*CreateRepositoryFromURLResponse, error)
CreateBundle(*CreateBundleRequest, RepositoryService_CreateBundleServer) error
CreateRepositoryFromBundle(RepositoryService_CreateRepositoryFromBundleServer) error
+ // GetConfig reads the target repository's gitconfig and streams its contents
+ // back. Returns a NotFound error in case no gitconfig was found.
+ GetConfig(*GetConfigRequest, RepositoryService_GetConfigServer) error
SetConfig(context.Context, *SetConfigRequest) (*SetConfigResponse, error)
DeleteConfig(context.Context, *DeleteConfigRequest) (*DeleteConfigResponse, error)
FindLicense(context.Context, *FindLicenseRequest) (*FindLicenseResponse, error)
@@ -5099,6 +5224,9 @@ func (*UnimplementedRepositoryServiceServer) CreateBundle(req *CreateBundleReque
func (*UnimplementedRepositoryServiceServer) CreateRepositoryFromBundle(srv RepositoryService_CreateRepositoryFromBundleServer) error {
return status.Errorf(codes.Unimplemented, "method CreateRepositoryFromBundle not implemented")
}
+func (*UnimplementedRepositoryServiceServer) GetConfig(req *GetConfigRequest, srv RepositoryService_GetConfigServer) error {
+ return status.Errorf(codes.Unimplemented, "method GetConfig not implemented")
+}
func (*UnimplementedRepositoryServiceServer) SetConfig(ctx context.Context, req *SetConfigRequest) (*SetConfigResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetConfig not implemented")
}
@@ -5574,6 +5702,27 @@ func (x *repositoryServiceCreateRepositoryFromBundleServer) Recv() (*CreateRepos
return m, nil
}
+func _RepositoryService_GetConfig_Handler(srv interface{}, stream grpc.ServerStream) error {
+ m := new(GetConfigRequest)
+ if err := stream.RecvMsg(m); err != nil {
+ return err
+ }
+ return srv.(RepositoryServiceServer).GetConfig(m, &repositoryServiceGetConfigServer{stream})
+}
+
+type RepositoryService_GetConfigServer interface {
+ Send(*GetConfigResponse) error
+ grpc.ServerStream
+}
+
+type repositoryServiceGetConfigServer struct {
+ grpc.ServerStream
+}
+
+func (x *repositoryServiceGetConfigServer) Send(m *GetConfigResponse) error {
+ return x.ServerStream.SendMsg(m)
+}
+
func _RepositoryService_SetConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SetConfigRequest)
if err := dec(in); err != nil {
@@ -6110,6 +6259,11 @@ var _RepositoryService_serviceDesc = grpc.ServiceDesc{
ClientStreams: true,
},
{
+ StreamName: "GetConfig",
+ Handler: _RepositoryService_GetConfig_Handler,
+ ServerStreams: true,
+ },
+ {
StreamName: "GetInfoAttributes",
Handler: _RepositoryService_GetInfoAttributes_Handler,
ServerStreams: true,
diff --git a/proto/repository-service.proto b/proto/repository-service.proto
index 6ca36ca03..6d6d580df 100644
--- a/proto/repository-service.proto
+++ b/proto/repository-service.proto
@@ -125,16 +125,27 @@ service RepositoryService {
op: MUTATOR
};
}
+
+ // GetConfig reads the target repository's gitconfig and streams its contents
+ // back. Returns a NotFound error in case no gitconfig was found.
+ rpc GetConfig(GetConfigRequest) returns (stream GetConfigResponse) {
+ option (op_type) = {
+ op: ACCESSOR
+ };
+ }
+
rpc SetConfig(SetConfigRequest) returns (SetConfigResponse) {
option (op_type) = {
op: MUTATOR
};
}
+
rpc DeleteConfig(DeleteConfigRequest) returns (DeleteConfigResponse) {
option (op_type) = {
op: MUTATOR
};
}
+
rpc FindLicense(FindLicenseRequest) returns (FindLicenseResponse) {
option (op_type) = {
op: ACCESSOR
@@ -480,6 +491,19 @@ message CreateBundleResponse {
bytes data = 1;
}
+// GetConfigRequest is a request for the GetConfig RPC.
+message GetConfigRequest {
+ // Repository is the repository from which the configuration should be read
+ // from.
+ Repository repository = 1 [(target_repository)=true];
+}
+
+// GetConfigResponse is a response for the GetConfig RPC.
+message GetConfigResponse {
+ // Data contains contents of the gitconfig.
+ bytes data = 1;
+}
+
message SetConfigRequest {
Repository repository = 1 [(target_repository)=true];
message Entry {
diff --git a/ruby/proto/gitaly/repository-service_pb.rb b/ruby/proto/gitaly/repository-service_pb.rb
index 053b8ca82..09e3de5c6 100644
--- a/ruby/proto/gitaly/repository-service_pb.rb
+++ b/ruby/proto/gitaly/repository-service_pb.rb
@@ -170,6 +170,12 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
add_message "gitaly.CreateBundleResponse" do
optional :data, :bytes, 1
end
+ add_message "gitaly.GetConfigRequest" do
+ optional :repository, :message, 1, "gitaly.Repository"
+ end
+ add_message "gitaly.GetConfigResponse" do
+ optional :data, :bytes, 1
+ end
add_message "gitaly.SetConfigRequest" do
optional :repository, :message, 1, "gitaly.Repository"
repeated :entries, :message, 2, "gitaly.SetConfigRequest.Entry"
@@ -385,6 +391,8 @@ module Gitaly
CreateRepositoryFromURLResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.CreateRepositoryFromURLResponse").msgclass
CreateBundleRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.CreateBundleRequest").msgclass
CreateBundleResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.CreateBundleResponse").msgclass
+ GetConfigRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.GetConfigRequest").msgclass
+ GetConfigResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.GetConfigResponse").msgclass
SetConfigRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.SetConfigRequest").msgclass
SetConfigRequest::Entry = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.SetConfigRequest.Entry").msgclass
SetConfigResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.SetConfigResponse").msgclass
diff --git a/ruby/proto/gitaly/repository-service_services_pb.rb b/ruby/proto/gitaly/repository-service_services_pb.rb
index 47d1b49a7..71120a29d 100644
--- a/ruby/proto/gitaly/repository-service_services_pb.rb
+++ b/ruby/proto/gitaly/repository-service_services_pb.rb
@@ -40,6 +40,9 @@ module Gitaly
rpc :CreateRepositoryFromURL, Gitaly::CreateRepositoryFromURLRequest, Gitaly::CreateRepositoryFromURLResponse
rpc :CreateBundle, Gitaly::CreateBundleRequest, stream(Gitaly::CreateBundleResponse)
rpc :CreateRepositoryFromBundle, stream(Gitaly::CreateRepositoryFromBundleRequest), Gitaly::CreateRepositoryFromBundleResponse
+ # GetConfig reads the target repository's gitconfig and streams its contents
+ # back. Returns a NotFound error in case no gitconfig was found.
+ rpc :GetConfig, Gitaly::GetConfigRequest, stream(Gitaly::GetConfigResponse)
rpc :SetConfig, Gitaly::SetConfigRequest, Gitaly::SetConfigResponse
rpc :DeleteConfig, Gitaly::DeleteConfigRequest, Gitaly::DeleteConfigResponse
rpc :FindLicense, Gitaly::FindLicenseRequest, Gitaly::FindLicenseResponse