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:
authorToon Claes <toon@gitlab.com>2021-01-12 20:02:05 +0300
committerToon Claes <toon@gitlab.com>2021-01-12 20:02:05 +0300
commitd39cd436212fb79e54ef7ce728c5041c213cc5e2 (patch)
treed75884c5cedfadf08cf4b0f5a2b969d9813dd179
parent01ba5b2c1c0719d27aced511bd9497b56cd9384a (diff)
parent1e73f8a4f44345cae6bb91a5f31bdd30891572cc (diff)
Merge branch 'add-tags-updated-to-fetch-remote' into 'master'
Add information about whether tags were updated to the FetchRemote RPC See merge request gitlab-org/gitaly!2901
-rw-r--r--changelogs/unreleased/add-tags-updated-to-fetch-remote.yml5
-rw-r--r--internal/git/fetch_scanner.go193
-rw-r--r--internal/git/fetch_scanner_test.go133
-rw-r--r--internal/git/repository.go11
-rw-r--r--internal/gitaly/service/repository/fetch_remote.go27
-rw-r--r--internal/gitaly/service/repository/fetch_remote_test.go41
-rw-r--r--proto/go/gitalypb/repository-service.pb.go434
-rw-r--r--proto/repository-service.proto11
-rw-r--r--ruby/lib/gitaly_server/repository_service.rb7
-rw-r--r--ruby/proto/gitaly/repository-service_pb.rb2
10 files changed, 640 insertions, 224 deletions
diff --git a/changelogs/unreleased/add-tags-updated-to-fetch-remote.yml b/changelogs/unreleased/add-tags-updated-to-fetch-remote.yml
new file mode 100644
index 000000000..e9d49641b
--- /dev/null
+++ b/changelogs/unreleased/add-tags-updated-to-fetch-remote.yml
@@ -0,0 +1,5 @@
+---
+title: Add information about whether tags were updated to the FetchRemote RPC
+merge_request: 2901
+author:
+type: added
diff --git a/internal/git/fetch_scanner.go b/internal/git/fetch_scanner.go
new file mode 100644
index 000000000..eb05df0eb
--- /dev/null
+++ b/internal/git/fetch_scanner.go
@@ -0,0 +1,193 @@
+package git
+
+import (
+ "bufio"
+ "bytes"
+ "io"
+ "strings"
+)
+
+// RefUpdateType represents the type of update a FetchStatusLine is. The
+// valid types are documented here: https://git-scm.com/docs/git-fetch/2.30.0#Documentation/git-fetch.txt-flag
+type RefUpdateType byte
+
+// Valid checks whether the RefUpdateType is one of the seven valid types of update
+func (t RefUpdateType) Valid() bool {
+ _, ok := validRefUpdateTypes[t]
+
+ return ok
+}
+
+// FetchStatusLine represents a line of status output from `git fetch`, as
+// documented here: https://git-scm.com/docs/git-fetch/2.30.0#_output. Each
+// line is a change to a git reference in the local repository that was caused
+// by the fetch
+type FetchStatusLine struct {
+ // Type encodes the kind of change that git fetch has made
+ Type RefUpdateType
+ // Summary is a brief description of the change. This may be text such as
+ // [new tag], or a compact-form SHA range showing the old and new values of
+ // the updated reference, depending on the type of update
+ Summary string
+ // From is usually the name of the remote ref being fetched from, missing
+ // the refs/<type>/ prefix. If a ref is being deleted, this will be "(none)"
+ From string
+ // To is the name of the local ref being updated, missing the refs/<type>/
+ // prefix.
+ To string
+ // Reason optionally contains human-readable information about the change. It
+ // is typically used to explain why making a given change failed (e.g., the
+ // type will be RefUpdateTypeUpdateFailed). It may be empty.
+ Reason string
+}
+
+const (
+ // RefUpdateTypeFastForwardUpdate represents a 'fast forward update' fetch status line
+ RefUpdateTypeFastForwardUpdate RefUpdateType = ' '
+ // RefUpdateTypeForcedUpdate represents a 'forced update' fetch status line
+ RefUpdateTypeForcedUpdate RefUpdateType = '+'
+ // RefUpdateTypePruned represents a 'pruned' fetch status line
+ RefUpdateTypePruned RefUpdateType = '-'
+ // RefUpdateTypeTagUpdate represents a 'tag update' fetch status line
+ RefUpdateTypeTagUpdate RefUpdateType = 't'
+ // RefUpdateTypeFetched represents a 'fetched' fetch status line. This
+ // indicates that a new reference has been created in the local repository
+ RefUpdateTypeFetched RefUpdateType = '*'
+ // RefUpdateTypeUpdateFailed represents an 'update failed' fetch status line
+ RefUpdateTypeUpdateFailed RefUpdateType = '!'
+ // RefUpdateTypeUnchanged represents an 'unchanged' fetch status line
+ RefUpdateTypeUnchanged RefUpdateType = '='
+)
+
+var (
+ validRefUpdateTypes = map[RefUpdateType]struct{}{
+ RefUpdateTypeFastForwardUpdate: {},
+ RefUpdateTypeForcedUpdate: {},
+ RefUpdateTypePruned: {},
+ RefUpdateTypeTagUpdate: {},
+ RefUpdateTypeFetched: {},
+ RefUpdateTypeUpdateFailed: {},
+ RefUpdateTypeUnchanged: {},
+ }
+)
+
+// IsTagAdded returns true if this status line indicates a new tag was added
+func (f FetchStatusLine) IsTagAdded() bool {
+ return f.Type == RefUpdateTypeFetched && f.Summary == "[new tag]"
+}
+
+// IsTagUpdated returns true if this status line indicates a tag was changed
+func (f FetchStatusLine) IsTagUpdated() bool {
+ return f.Type == RefUpdateTypeTagUpdate
+}
+
+// FetchScanner scans the output of `git fetch`, allowing information about
+// the updated refs to be gathered
+type FetchScanner struct {
+ scanner *bufio.Scanner
+ lastLine FetchStatusLine
+}
+
+// NewFetchScanner returns a new FetchScanner
+func NewFetchScanner(r io.Reader) *FetchScanner {
+ return &FetchScanner{scanner: bufio.NewScanner(r)}
+}
+
+// Scan looks for the next fetch status line in the reader supplied to
+// NewFetchScanner(). Any lines that are not valid status lines are discarded
+// without error. It returns true if you should call Scan() again, and false if
+// scanning has come to an end.
+func (f *FetchScanner) Scan() bool {
+ for f.scanner.Scan() {
+ // Silently ignore non-matching lines
+ line, ok := parseFetchStatusLine(f.scanner.Bytes())
+ if !ok {
+ continue
+ }
+
+ f.lastLine = line
+ return true
+ }
+
+ return false
+}
+
+// Err returns any error encountered while scanning the reader supplied to
+// NewFetchScanner(). Note that lines not matching the expected format are not
+// an error.
+func (f *FetchScanner) Err() error {
+ return f.scanner.Err()
+}
+
+// StatusLine returns the most recent fetch status line encountered by the
+// FetchScanner. It changes after each call to Scan(), unless there is an error.
+func (f *FetchScanner) StatusLine() FetchStatusLine {
+ return f.lastLine
+}
+
+// parseFetchStatusLine parses lines outputted by git-fetch(1), which are expected
+// to be in the format " <flag> <summary> <from> -> <to> [<reason>]"
+func parseFetchStatusLine(line []byte) (FetchStatusLine, bool) {
+ var blank FetchStatusLine
+ var out FetchStatusLine
+
+ // Handle the flag very strictly, since status and non-status text mingle
+ if len(line) < 4 || line[0] != ' ' || line[2] != ' ' {
+ return blank, false
+ }
+
+ out.Type, line = RefUpdateType(line[1]), line[3:]
+ if !out.Type.Valid() {
+ return blank, false
+ }
+
+ // Get the summary, which may be composed of multiple words
+ if line[0] == '[' {
+ end := bytes.IndexByte(line, ']')
+ if end < 0 || len(line) <= end+2 {
+ return blank, false
+ }
+
+ out.Summary, line = string(line[0:end+1]), line[end+1:]
+ } else {
+ end := bytes.IndexByte(line, ' ')
+ if end < 0 || len(line) <= end+1 {
+ return blank, false
+ }
+
+ out.Summary, line = string(line[0:end]), line[end:]
+ }
+
+ // We're now scanning the "<from> -> <to>" part, where "<from>" is the remote branch name
+ // while "<to>" is the local branch name transformed by the refspec. As branches cannot
+ // contain whitespace, it's fine to scan by word now.
+ scanner := bufio.NewScanner(bytes.NewReader(line))
+ scanner.Split(bufio.ScanWords)
+
+ // From field
+ if !scanner.Scan() {
+ return blank, false
+ }
+ out.From = scanner.Text()
+
+ // Hardcoded -> delimiter
+ if !scanner.Scan() || !bytes.Equal(scanner.Bytes(), []byte("->")) {
+ return blank, false
+ }
+
+ // To field
+ if !scanner.Scan() {
+ return blank, false
+ }
+ out.To = scanner.Text()
+
+ // Reason field - optional, the rest of the line. This implementation will
+ // squeeze multiple spaces into one, but that shouldn't be a big problem
+ var reason []string
+ for scanner.Scan() {
+ reason = append(reason, scanner.Text())
+ }
+ out.Reason = strings.Join(reason, " ")
+
+ return out, true
+}
diff --git a/internal/git/fetch_scanner_test.go b/internal/git/fetch_scanner_test.go
new file mode 100644
index 000000000..d49feda93
--- /dev/null
+++ b/internal/git/fetch_scanner_test.go
@@ -0,0 +1,133 @@
+package git
+
+import (
+ "strings"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestFetchScannerScan(t *testing.T) {
+ blank := FetchStatusLine{}
+
+ for _, tc := range []struct {
+ desc string
+ data string
+ expected FetchStatusLine
+ success bool
+ isTagAdded bool
+ isTagUpdated bool
+ }{
+ {
+ desc: "empty line",
+ data: "",
+ expected: blank,
+ },
+ {
+ desc: "blank line",
+ data: " ",
+ expected: blank,
+ },
+ {
+ desc: "line with a false-positive type",
+ data: "****",
+ expected: blank,
+ },
+ {
+ desc: "line missing initial whitespace",
+ data: "* [new branch] foo -> upstream/foo",
+ expected: blank,
+ },
+ {
+ desc: "summary field with spaces missing closing square bracket",
+ data: " * [new branch foo -> upstream/foo",
+ expected: blank,
+ },
+ {
+ desc: "missing delimiter between from and to fields (no reason field)",
+ data: "* [new branch] foo upstream/foo",
+ expected: blank,
+ },
+ {
+ desc: "missing delimiter between from and to fields (with reason field)",
+ data: " * [new branch] foo upstream/foo (some reason)",
+ expected: blank,
+ },
+ {
+ desc: "invalid type with otherwise OK line",
+ data: " ~ [new branch] foo -> upstream/foo",
+ expected: blank,
+ },
+
+ {
+ desc: "valid fetch line (ASCII reference)",
+ data: " * [new branch] foo -> upstream/foo",
+ expected: FetchStatusLine{RefUpdateTypeFetched, "[new branch]", "foo", "upstream/foo", ""},
+ success: true,
+ },
+ {
+ desc: "valid fetch line (UTF-8 reference)",
+ data: " * [new branch] 面 -> upstream/面",
+ expected: FetchStatusLine{RefUpdateTypeFetched, "[new branch]", "面", "upstream/面", ""},
+ success: true,
+ },
+ {
+ desc: "valid fetch line (new tag)",
+ data: " * [new tag] v13.7.0-rc1 -> v13.7.0-rc1",
+ expected: FetchStatusLine{RefUpdateTypeFetched, "[new tag]", "v13.7.0-rc1", "v13.7.0-rc1", ""},
+ success: true,
+ isTagAdded: true,
+ },
+ {
+ desc: "valid forced-update line",
+ data: " + d8b96a36c...d2a598d09 cgroups-impl -> upstream/cgroups-impl (forced update)",
+ expected: FetchStatusLine{RefUpdateTypeForcedUpdate, "d8b96a36c...d2a598d09", "cgroups-impl", "upstream/cgroups-impl", "(forced update)"},
+ success: true,
+ },
+ {
+ desc: "valid fast-forward update line",
+ data: " 87daf9d2e..1504b30e1 master -> upstream/master",
+ expected: FetchStatusLine{RefUpdateTypeFastForwardUpdate, "87daf9d2e..1504b30e1", "master", "upstream/master", ""},
+ success: true,
+ },
+ {
+ desc: "valid prune line (branch reference)",
+ data: " - [deleted] (none) -> upstream/foo",
+ expected: FetchStatusLine{RefUpdateTypePruned, "[deleted]", "(none)", "upstream/foo", ""},
+ success: true,
+ },
+ {
+ desc: "valid prune line (tag reference)",
+ data: " - [deleted] (none) -> v1.2.3",
+ expected: FetchStatusLine{RefUpdateTypePruned, "[deleted]", "(none)", "v1.2.3", ""},
+ success: true,
+ },
+ {
+ desc: "valid tag update line",
+ data: " t [tag update] v1.2.3 -> v1.2.3",
+ expected: FetchStatusLine{RefUpdateTypeTagUpdate, "[tag update]", "v1.2.3", "v1.2.3", ""},
+ success: true,
+ isTagUpdated: true,
+ },
+ {
+ desc: "valid update failed line",
+ data: " ! d8b96a36c...d2a598d09 foo -> upstream/foo (update hook failed)",
+ expected: FetchStatusLine{RefUpdateTypeUpdateFailed, "d8b96a36c...d2a598d09", "foo", "upstream/foo", "(update hook failed)"},
+ success: true,
+ },
+ {
+ desc: "valid unchanged line",
+ data: " = [up to date] foo -> upstream/foo",
+ expected: FetchStatusLine{RefUpdateTypeUnchanged, "[up to date]", "foo", "upstream/foo", ""},
+ success: true,
+ },
+ } {
+ t.Run(tc.desc, func(t *testing.T) {
+ scanner := NewFetchScanner(strings.NewReader(tc.data))
+ require.Equal(t, tc.success, scanner.Scan())
+ require.Equal(t, tc.expected, scanner.StatusLine())
+ require.Equal(t, tc.isTagAdded, scanner.StatusLine().IsTagAdded())
+ require.Equal(t, tc.isTagUpdated, scanner.StatusLine().IsTagUpdated())
+ })
+ }
+}
diff --git a/internal/git/repository.go b/internal/git/repository.go
index 558831e09..6c9d08eb3 100644
--- a/internal/git/repository.go
+++ b/internal/git/repository.go
@@ -65,6 +65,11 @@ type FetchOpts struct {
// doesn't have the previous commit as an ancestor.
// https://git-scm.com/docs/git-fetch#Documentation/git-fetch.txt---force
Force bool
+ // Verbose controls how much information is written to stderr. The list of
+ // refs updated by the fetch will only be listed if verbose is true.
+ // https://git-scm.com/docs/git-fetch#Documentation/git-fetch.txt---quiet
+ // https://git-scm.com/docs/git-fetch#Documentation/git-fetch.txt---verbose
+ Verbose bool
// Tags controls whether tags will be fetched as part of the remote or not.
// https://git-scm.com/docs/git-fetch#Documentation/git-fetch.txt---tags
// https://git-scm.com/docs/git-fetch#Documentation/git-fetch.txt---no-tags
@@ -74,7 +79,11 @@ type FetchOpts struct {
}
func (opts FetchOpts) buildFlags() []Option {
- flags := []Option{Flag{Name: "--quiet"}}
+ flags := []Option{}
+
+ if !opts.Verbose {
+ flags = append(flags, Flag{Name: "--quiet"})
+ }
if opts.Prune {
flags = append(flags, Flag{Name: "--prune"})
diff --git a/internal/gitaly/service/repository/fetch_remote.go b/internal/gitaly/service/repository/fetch_remote.go
index f443bffee..486feb106 100644
--- a/internal/gitaly/service/repository/fetch_remote.go
+++ b/internal/gitaly/service/repository/fetch_remote.go
@@ -4,6 +4,7 @@ import (
"bytes"
"context"
"fmt"
+ "io"
"io/ioutil"
"net/url"
"os"
@@ -62,7 +63,7 @@ func (s *server) FetchRemote(ctx context.Context, req *gitalypb.FetchRemoteReque
}
var stderr bytes.Buffer
- opts := git.FetchOpts{Stderr: &stderr, Force: req.Force, Prune: true, Tags: git.FetchOptsTagsAll}
+ opts := git.FetchOpts{Stderr: &stderr, Force: req.Force, Prune: true, Tags: git.FetchOptsTagsAll, Verbose: req.GetCheckTagsChanged()}
if req.GetNoTags() {
opts.Tags = git.FetchOptsTagsNone
@@ -177,7 +178,29 @@ func (s *server) FetchRemote(ctx context.Context, req *gitalypb.FetchRemoteReque
return nil, fmt.Errorf("fetch remote: %w", err)
}
- return &gitalypb.FetchRemoteResponse{}, nil
+ out := &gitalypb.FetchRemoteResponse{TagsChanged: true}
+ if req.GetCheckTagsChanged() {
+ out.TagsChanged = didTagsChange(&stderr)
+ }
+
+ return out, nil
+}
+
+func didTagsChange(r io.Reader) bool {
+ scanner := git.NewFetchScanner(r)
+ for scanner.Scan() {
+ status := scanner.StatusLine()
+
+ // We can't detect if tags have been deleted, but we never call fetch
+ // with --prune-tags at the moment, so it should never happen.
+ if status.IsTagAdded() || status.IsTagUpdated() {
+ return true
+ }
+ }
+
+ // If the scanner fails for some reason, we don't know if tags changed, so
+ // assume they did for safety reasons.
+ return scanner.Err() != nil
}
func (s *server) validateFetchRemoteRequest(req *gitalypb.FetchRemoteRequest) error {
diff --git a/internal/gitaly/service/repository/fetch_remote_test.go b/internal/gitaly/service/repository/fetch_remote_test.go
index 586bd6e72..1006fd59c 100644
--- a/internal/gitaly/service/repository/fetch_remote_test.go
+++ b/internal/gitaly/service/repository/fetch_remote_test.go
@@ -24,7 +24,7 @@ import (
"google.golang.org/grpc/metadata"
)
-func copyRepoWithNewRemote(t *testing.T, repo *gitalypb.Repository, locator storage.Locator, remote string) *gitalypb.Repository {
+func copyRepoWithNewRemote(t *testing.T, repo *gitalypb.Repository, locator storage.Locator, remote string) (*gitalypb.Repository, string) {
repoPath, err := locator.GetRepoPath(repo)
require.NoError(t, err)
@@ -37,7 +37,7 @@ func copyRepoWithNewRemote(t *testing.T, repo *gitalypb.Repository, locator stor
testhelper.MustRunCommand(t, nil, "git", "-C", clonePath, "remote", "add", remote, repoPath)
- return cloneRepo
+ return cloneRepo, clonePath
}
func TestFetchRemoteSuccess(t *testing.T) {
@@ -51,23 +51,36 @@ func TestFetchRemoteSuccess(t *testing.T) {
testhelper.NewFeatureSets([]featureflag.FeatureFlag{
featureflag.GoFetchRemote,
}).Run(t, func(t *testing.T, ctx context.Context) {
- testRepo, _, cleanupFn := testhelper.NewTestRepo(t)
+ testRepo, testRepoPath, cleanupFn := testhelper.NewTestRepo(t)
defer cleanupFn()
- cloneRepo := copyRepoWithNewRemote(t, testRepo, locator, "my-remote")
+ cloneRepo, cloneRepoPath := copyRepoWithNewRemote(t, testRepo, locator, "my-remote")
defer func() {
- path, err := locator.GetRepoPath(cloneRepo)
- require.NoError(t, err)
- require.NoError(t, os.RemoveAll(path))
+ require.NoError(t, os.RemoveAll(cloneRepoPath))
}()
- resp, err := client.FetchRemote(ctx, &gitalypb.FetchRemoteRequest{
- Repository: cloneRepo,
- Remote: "my-remote",
- Timeout: 120,
- })
- assert.NoError(t, err)
- assert.NotNil(t, resp)
+ // Ensure there's a new tag to fetch
+ testhelper.CreateTag(t, testRepoPath, "testtag", "master", nil)
+
+ // On the first run, TagsChanged will be true for both implementations
+ req := &gitalypb.FetchRemoteRequest{Repository: cloneRepo, Remote: "my-remote", Timeout: 120, CheckTagsChanged: true}
+ resp, err := client.FetchRemote(ctx, req)
+ require.NoError(t, err)
+ require.NotNil(t, resp)
+ require.Equal(t, resp.TagsChanged, true)
+
+ // On the second run, TagsChanged will be false for the Go implementation only
+ resp, err = client.FetchRemote(ctx, req)
+ require.NoError(t, err)
+ require.NotNil(t, resp)
+ require.Equal(t, resp.TagsChanged, !isFeatureEnabled(ctx, featureflag.GoFetchRemote))
+
+ // Finally, ensure that it returns true if we're asked not to check
+ req.CheckTagsChanged = false
+ resp, err = client.FetchRemote(ctx, req)
+ require.NoError(t, err)
+ require.NotNil(t, resp)
+ require.Equal(t, resp.TagsChanged, true)
})
}
diff --git a/proto/go/gitalypb/repository-service.pb.go b/proto/go/gitalypb/repository-service.pb.go
index 95f052f63..b2834ab21 100644
--- a/proto/go/gitalypb/repository-service.pb.go
+++ b/proto/go/gitalypb/repository-service.pb.go
@@ -780,18 +780,22 @@ func (m *ApplyGitattributesResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_ApplyGitattributesResponse proto.InternalMessageInfo
type FetchRemoteRequest struct {
- Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
- Remote string `protobuf:"bytes,2,opt,name=remote,proto3" json:"remote,omitempty"`
- Force bool `protobuf:"varint,3,opt,name=force,proto3" json:"force,omitempty"`
- NoTags bool `protobuf:"varint,4,opt,name=no_tags,json=noTags,proto3" json:"no_tags,omitempty"`
- Timeout int32 `protobuf:"varint,5,opt,name=timeout,proto3" json:"timeout,omitempty"`
- SshKey string `protobuf:"bytes,6,opt,name=ssh_key,json=sshKey,proto3" json:"ssh_key,omitempty"`
- KnownHosts string `protobuf:"bytes,7,opt,name=known_hosts,json=knownHosts,proto3" json:"known_hosts,omitempty"`
- NoPrune bool `protobuf:"varint,9,opt,name=no_prune,json=noPrune,proto3" json:"no_prune,omitempty"`
- RemoteParams *Remote `protobuf:"bytes,10,opt,name=remote_params,json=remoteParams,proto3" json:"remote_params,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
+ Remote string `protobuf:"bytes,2,opt,name=remote,proto3" json:"remote,omitempty"`
+ Force bool `protobuf:"varint,3,opt,name=force,proto3" json:"force,omitempty"`
+ NoTags bool `protobuf:"varint,4,opt,name=no_tags,json=noTags,proto3" json:"no_tags,omitempty"`
+ Timeout int32 `protobuf:"varint,5,opt,name=timeout,proto3" json:"timeout,omitempty"`
+ SshKey string `protobuf:"bytes,6,opt,name=ssh_key,json=sshKey,proto3" json:"ssh_key,omitempty"`
+ KnownHosts string `protobuf:"bytes,7,opt,name=known_hosts,json=knownHosts,proto3" json:"known_hosts,omitempty"`
+ NoPrune bool `protobuf:"varint,9,opt,name=no_prune,json=noPrune,proto3" json:"no_prune,omitempty"`
+ RemoteParams *Remote `protobuf:"bytes,10,opt,name=remote_params,json=remoteParams,proto3" json:"remote_params,omitempty"`
+ // If check_tags_changed is true, the FetchRemote RPC will check whether any
+ // tags were modified, returning the result in the tags_changed field of
+ // FetchRemoteResponse
+ CheckTagsChanged bool `protobuf:"varint,11,opt,name=check_tags_changed,json=checkTagsChanged,proto3" json:"check_tags_changed,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *FetchRemoteRequest) Reset() { *m = FetchRemoteRequest{} }
@@ -882,7 +886,18 @@ func (m *FetchRemoteRequest) GetRemoteParams() *Remote {
return nil
}
+func (m *FetchRemoteRequest) GetCheckTagsChanged() bool {
+ if m != nil {
+ return m.CheckTagsChanged
+ }
+ return false
+}
+
type FetchRemoteResponse struct {
+ // If check_tags_changed was set in the FetchRemoteRequest, the FetchRemote
+ // RPC will return false when no tags were changed, and true if tags were
+ // changed or answer cannot be determined.
+ TagsChanged bool `protobuf:"varint,1,opt,name=tags_changed,json=tagsChanged,proto3" json:"tags_changed,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -913,6 +928,13 @@ func (m *FetchRemoteResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_FetchRemoteResponse proto.InternalMessageInfo
+func (m *FetchRemoteResponse) GetTagsChanged() bool {
+ if m != nil {
+ return m.TagsChanged
+ }
+ return false
+}
+
type CreateRepositoryRequest struct {
Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
@@ -4018,199 +4040,201 @@ func init() {
func init() { proto.RegisterFile("repository-service.proto", fileDescriptor_e9b1768cf174c79b) }
var fileDescriptor_e9b1768cf174c79b = []byte{
- // 3057 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5b, 0x6f, 0xdc, 0xc6,
- 0xf5, 0xf7, 0xea, 0xb6, 0xbb, 0x47, 0x6b, 0x7b, 0x35, 0x92, 0xad, 0x15, 0x2d, 0xf9, 0x42, 0x3b,
- 0x8e, 0xe3, 0x38, 0x72, 0x62, 0xff, 0x81, 0x7f, 0xda, 0xa2, 0x28, 0xb4, 0xba, 0xdb, 0xd6, 0x25,
- 0x94, 0xdc, 0x20, 0x06, 0x02, 0x86, 0xcb, 0x9d, 0xd5, 0xb2, 0xe2, 0x72, 0xd6, 0xc3, 0x59, 0xcb,
- 0x0a, 0xd0, 0x87, 0x16, 0xe8, 0x5b, 0x11, 0xa0, 0x40, 0xd1, 0xf4, 0xb1, 0xcf, 0xfd, 0x04, 0x7d,
- 0x29, 0x8a, 0xbe, 0xf4, 0x3b, 0x04, 0xfd, 0x06, 0xfd, 0x08, 0x7d, 0x2a, 0xe6, 0x42, 0x0e, 0xb9,
- 0x24, 0x37, 0x2e, 0xb4, 0x48, 0xdf, 0x38, 0x67, 0x66, 0xce, 0x39, 0x73, 0xe6, 0x9c, 0x99, 0x39,
- 0xbf, 0x43, 0x68, 0x50, 0xdc, 0x27, 0xa1, 0xc7, 0x08, 0x3d, 0xff, 0x28, 0xc4, 0xf4, 0x8d, 0xe7,
- 0xe2, 0xd5, 0x3e, 0x25, 0x8c, 0xa0, 0x99, 0x13, 0x8f, 0x39, 0xfe, 0xb9, 0x01, 0xbe, 0x17, 0x30,
- 0x49, 0x33, 0x6a, 0x61, 0xd7, 0xa1, 0xb8, 0x2d, 0x5b, 0xe6, 0x11, 0x2c, 0x5a, 0xf1, 0xec, 0xcd,
- 0xb7, 0x5e, 0xc8, 0x42, 0x0b, 0xbf, 0x1e, 0xe0, 0x90, 0xa1, 0x4f, 0x01, 0x34, 0xe3, 0x46, 0xe9,
- 0x76, 0xe9, 0xc1, 0xec, 0x13, 0xb4, 0x2a, 0x39, 0xae, 0xea, 0x49, 0xcd, 0xa9, 0x3f, 0xfe, 0xe3,
- 0x51, 0xc9, 0x4a, 0x8c, 0x35, 0x9f, 0x40, 0x23, 0xcb, 0x34, 0xec, 0x93, 0x20, 0xc4, 0xe8, 0x3a,
- 0xcc, 0x60, 0x41, 0x11, 0x1c, 0x2b, 0x96, 0x6a, 0x99, 0xc7, 0x62, 0x8e, 0xe3, 0x9e, 0xee, 0x06,
- 0x2e, 0xc5, 0x3d, 0x1c, 0x30, 0xc7, 0xbf, 0xb8, 0x26, 0x37, 0x60, 0x29, 0x87, 0xab, 0x54, 0xc5,
- 0xa4, 0x30, 0x27, 0x3b, 0xb7, 0x06, 0xfe, 0xc5, 0x65, 0xa1, 0xbb, 0x70, 0xd9, 0xa5, 0xd8, 0x61,
- 0xd8, 0x6e, 0x79, 0xac, 0xe7, 0xf4, 0x1b, 0x13, 0x62, 0x81, 0x35, 0x49, 0x6c, 0x0a, 0x9a, 0xb9,
- 0x00, 0x28, 0x29, 0x53, 0x69, 0xb2, 0x07, 0x73, 0x7b, 0x5e, 0xfb, 0xad, 0xec, 0xb9, 0xf8, 0xaa,
- 0x17, 0x00, 0x25, 0xd9, 0x29, 0x21, 0xbf, 0x2d, 0xc1, 0xb5, 0x6d, 0x87, 0xb6, 0x9c, 0x13, 0xbc,
- 0x4e, 0x7c, 0x1f, 0xbb, 0xec, 0x87, 0x59, 0x33, 0x5a, 0x80, 0xe9, 0x3e, 0x1d, 0x04, 0xb8, 0x31,
- 0x29, 0x3a, 0x65, 0xc3, 0x6c, 0xc0, 0xf5, 0x61, 0x6d, 0x94, 0xa2, 0x47, 0xb0, 0xf8, 0x39, 0xf5,
- 0x18, 0x5e, 0x27, 0xbd, 0x9e, 0xc7, 0xb6, 0xa9, 0xd3, 0xef, 0x5e, 0xdc, 0x26, 0x06, 0x34, 0xb2,
- 0x4c, 0x95, 0xc0, 0x67, 0x70, 0x65, 0xdd, 0xc7, 0x4e, 0x30, 0xe8, 0x5f, 0x5c, 0xce, 0x1c, 0x5c,
- 0x8d, 0x79, 0x29, 0xf6, 0x9f, 0xc1, 0x35, 0x3d, 0xe5, 0xc8, 0xfb, 0x1a, 0x5f, 0x5c, 0xca, 0x23,
- 0xb8, 0x3e, 0xcc, 0x52, 0xc5, 0x17, 0x82, 0xa9, 0xd0, 0xfb, 0x1a, 0x0b, 0x6e, 0x93, 0x96, 0xf8,
- 0x36, 0x5f, 0xc3, 0xd2, 0x5a, 0xbf, 0xef, 0x9f, 0x6f, 0x7b, 0xcc, 0x61, 0x8c, 0x7a, 0xad, 0x01,
- 0xc3, 0x17, 0x0f, 0x73, 0x64, 0x40, 0x85, 0xe2, 0x37, 0x5e, 0xe8, 0x91, 0x40, 0xec, 0x7b, 0xcd,
- 0x8a, 0xdb, 0xe6, 0x32, 0x18, 0x79, 0x22, 0x95, 0x45, 0xfe, 0x36, 0x01, 0x68, 0x0b, 0x33, 0xb7,
- 0x6b, 0xe1, 0x1e, 0x61, 0x17, 0xb7, 0x07, 0x3f, 0x55, 0xa8, 0x60, 0x25, 0x14, 0xa9, 0x5a, 0xaa,
- 0xc5, 0x5d, 0xaf, 0x43, 0xa8, 0x1b, 0xbb, 0x9e, 0x68, 0xa0, 0x45, 0x28, 0x07, 0xc4, 0x66, 0xce,
- 0x49, 0xd8, 0x98, 0x92, 0x87, 0x50, 0x40, 0x8e, 0x9d, 0x93, 0x10, 0x35, 0xa0, 0xcc, 0xbc, 0x1e,
- 0x26, 0x03, 0xd6, 0x98, 0xbe, 0x5d, 0x7a, 0x30, 0x6d, 0x45, 0x4d, 0x3e, 0x25, 0x0c, 0xbb, 0xf6,
- 0x29, 0x3e, 0x6f, 0xcc, 0x48, 0x09, 0x61, 0xd8, 0x7d, 0x8e, 0xcf, 0xd1, 0x2d, 0x98, 0x3d, 0x0d,
- 0xc8, 0x59, 0x60, 0x77, 0x09, 0x3f, 0xd4, 0xca, 0xa2, 0x13, 0x04, 0x69, 0x87, 0x53, 0xd0, 0x12,
- 0x54, 0x02, 0x62, 0xcb, 0x00, 0xa8, 0x0a, 0x69, 0xe5, 0x80, 0x1c, 0xf2, 0x26, 0x7a, 0x0a, 0x97,
- 0xa5, 0x9e, 0x76, 0xdf, 0xa1, 0x4e, 0x2f, 0x6c, 0x80, 0x58, 0xf2, 0x15, 0xbd, 0x64, 0x61, 0x9d,
- 0x9a, 0x1c, 0x74, 0x28, 0xc6, 0x3c, 0x9b, 0xaa, 0x54, 0xea, 0x55, 0xf3, 0x1a, 0xcc, 0xa7, 0x0c,
- 0xa8, 0x43, 0x67, 0x5d, 0x84, 0x9e, 0xb6, 0xd6, 0x58, 0x42, 0x27, 0xcb, 0x54, 0x09, 0xfc, 0xd7,
- 0x04, 0xcc, 0x6d, 0x63, 0xb6, 0x46, 0xdd, 0xae, 0xf7, 0x66, 0x0c, 0x1b, 0x79, 0x03, 0xaa, 0xae,
- 0x88, 0x50, 0xdb, 0x6b, 0xab, 0xbd, 0xac, 0x48, 0xc2, 0x6e, 0x9b, 0xef, 0x72, 0x9f, 0xe2, 0x8e,
- 0xf7, 0x56, 0x6c, 0x67, 0xd5, 0x52, 0x2d, 0xf4, 0x29, 0xcc, 0x74, 0x08, 0xed, 0x39, 0x4c, 0x6c,
- 0xe7, 0x95, 0x27, 0xb7, 0x23, 0x51, 0x19, 0xcd, 0x56, 0xb7, 0xc4, 0x38, 0x4b, 0x8d, 0xe7, 0xd1,
- 0xd2, 0x77, 0x58, 0x57, 0xec, 0x76, 0xcd, 0x12, 0xdf, 0xdc, 0x09, 0xf0, 0x5b, 0xd7, 0x1f, 0xb4,
- 0x71, 0x63, 0xe6, 0xf6, 0xe4, 0x83, 0x9a, 0x15, 0x35, 0xd1, 0x0a, 0x00, 0xf6, 0xbd, 0x36, 0xdf,
- 0x2e, 0xd6, 0x15, 0x5b, 0x5d, 0xb1, 0xaa, 0x82, 0x72, 0xc8, 0x27, 0x3e, 0x84, 0x39, 0x2f, 0x10,
- 0x23, 0x6d, 0xbf, 0x13, 0xda, 0x2d, 0x9f, 0xb4, 0xc2, 0x46, 0x45, 0x8c, 0xba, 0xaa, 0x3a, 0x5e,
- 0x74, 0xc2, 0x26, 0x27, 0x9b, 0x4f, 0x61, 0x46, 0xaa, 0x82, 0xca, 0x30, 0xf9, 0x6a, 0xf7, 0xb0,
- 0x7e, 0x89, 0x7f, 0x1c, 0xaf, 0x59, 0xf5, 0x12, 0x02, 0x98, 0x39, 0x5e, 0xb3, 0xec, 0xed, 0x57,
- 0xf5, 0x09, 0x34, 0x0b, 0x65, 0xfe, 0xdd, 0x7c, 0xf5, 0xa4, 0x3e, 0x69, 0x3e, 0x00, 0x94, 0x5c,
- 0x91, 0x8e, 0xf8, 0xb6, 0xc3, 0x1c, 0x61, 0xe6, 0x9a, 0x25, 0xbe, 0xb9, 0x1f, 0xec, 0x38, 0xe1,
- 0x0b, 0xe2, 0x3a, 0x7e, 0x93, 0x3a, 0x81, 0xdb, 0x1d, 0x43, 0xbc, 0x9b, 0x1f, 0x43, 0x23, 0xcb,
- 0x54, 0x29, 0xb1, 0x00, 0xd3, 0x6f, 0x1c, 0x7f, 0x80, 0xd5, 0xad, 0x2e, 0x1b, 0xe6, 0x77, 0x25,
- 0x68, 0x08, 0x37, 0x3d, 0x22, 0x03, 0xea, 0x62, 0x39, 0xeb, 0xe2, 0x4e, 0xf2, 0x33, 0x98, 0x0b,
- 0x05, 0x43, 0x3b, 0xc1, 0x60, 0xa2, 0x88, 0x81, 0x55, 0x97, 0x83, 0xad, 0xd4, 0xb5, 0xa5, 0x18,
- 0xb4, 0x84, 0x4a, 0xc2, 0x9f, 0x6a, 0x56, 0x2d, 0x4c, 0xa8, 0xc9, 0x77, 0x9b, 0x39, 0xf4, 0x04,
- 0x33, 0x9b, 0xe2, 0x8e, 0xf0, 0xac, 0x9a, 0x55, 0x95, 0x14, 0x0b, 0x77, 0xcc, 0xa7, 0xb0, 0x94,
- 0xb3, 0x34, 0xfd, 0xca, 0xa1, 0x38, 0x1c, 0xf8, 0x2c, 0x7a, 0xe5, 0xc8, 0x96, 0xb9, 0x0d, 0xb3,
- 0x5b, 0xe1, 0x38, 0xae, 0xf8, 0x7b, 0x50, 0x93, 0x8c, 0xb4, 0xfd, 0x31, 0xa5, 0x84, 0x2a, 0x2f,
- 0x90, 0x0d, 0xf3, 0x2f, 0x25, 0xb8, 0x2a, 0x6e, 0x3d, 0x0b, 0x77, 0x2e, 0x6e, 0xf6, 0x3a, 0x4c,
- 0x72, 0x4b, 0xc8, 0xa3, 0x9e, 0x7f, 0xa6, 0x6e, 0x80, 0xc9, 0xf4, 0x0d, 0x80, 0xee, 0x40, 0x8d,
- 0xf8, 0x6d, 0x3b, 0xee, 0x97, 0x06, 0x9c, 0x25, 0x7e, 0xdb, 0x8a, 0x86, 0xc4, 0xa7, 0xf3, 0x74,
- 0xe2, 0x74, 0x7e, 0x36, 0x55, 0x99, 0xa9, 0x97, 0xcd, 0x06, 0xd4, 0xb5, 0xe6, 0x72, 0x91, 0xcf,
- 0xa6, 0x2a, 0xa5, 0xfa, 0x84, 0x19, 0xc0, 0xc2, 0x96, 0x17, 0xb4, 0xf7, 0x30, 0x3d, 0xc1, 0x4d,
- 0x27, 0x1c, 0xc3, 0xa1, 0xb3, 0x0c, 0xd5, 0x48, 0xcd, 0xb0, 0x31, 0x21, 0x62, 0x5e, 0x13, 0xcc,
- 0x0f, 0xe1, 0xda, 0x90, 0x3c, 0x1d, 0x78, 0x2d, 0x27, 0x94, 0x2e, 0x5f, 0xb5, 0xc4, 0xb7, 0xf9,
- 0x4d, 0x09, 0xe6, 0xe4, 0x61, 0xb9, 0x45, 0xe8, 0xe9, 0xff, 0xde, 0xd5, 0xf9, 0x5b, 0x30, 0xa9,
- 0x4f, 0xfc, 0xf4, 0x5d, 0xda, 0x0d, 0x2d, 0xcc, 0x55, 0xde, 0x0d, 0x0e, 0x29, 0x39, 0xa1, 0x38,
- 0x0c, 0xc7, 0x72, 0x7a, 0x53, 0xc1, 0x34, 0x71, 0x7a, 0x4b, 0xc2, 0x6e, 0xdb, 0xfc, 0x29, 0x18,
- 0x79, 0x32, 0x95, 0x31, 0x6f, 0xc1, 0xac, 0x17, 0xd8, 0x7d, 0x45, 0x56, 0x61, 0x03, 0x5e, 0x3c,
- 0x50, 0xaa, 0x7c, 0xf4, 0x7a, 0xe0, 0x84, 0xdd, 0x31, 0xab, 0x1c, 0x0a, 0xa6, 0x09, 0x95, 0x25,
- 0x21, 0x52, 0x39, 0x2b, 0xf3, 0x5d, 0x55, 0xf6, 0xe1, 0xe6, 0xf0, 0xc5, 0xb9, 0x45, 0x49, 0xef,
- 0xa5, 0xf5, 0x62, 0x2c, 0xc1, 0x38, 0xa0, 0xbe, 0xd2, 0x98, 0x7f, 0x9a, 0x77, 0xe0, 0x56, 0xa1,
- 0x34, 0xb5, 0xed, 0x07, 0x30, 0x2f, 0x87, 0x34, 0x07, 0x41, 0xdb, 0x1f, 0xc3, 0x3b, 0xf4, 0x21,
- 0x2c, 0xa4, 0x19, 0x8e, 0xb8, 0x93, 0xbe, 0x99, 0x80, 0xfa, 0x11, 0x66, 0xeb, 0x24, 0xe8, 0x78,
- 0x27, 0x17, 0x37, 0xc0, 0xa7, 0x50, 0xc6, 0x01, 0xa3, 0x1e, 0x96, 0x21, 0x3b, 0xfb, 0xe4, 0x66,
- 0x34, 0x6d, 0x58, 0xc8, 0xea, 0x66, 0xc0, 0xe8, 0xb9, 0x15, 0x0d, 0x37, 0x7e, 0x53, 0x82, 0x69,
- 0x41, 0xe2, 0x46, 0xe4, 0x2f, 0x3a, 0x19, 0xc0, 0xfc, 0x13, 0xad, 0x40, 0x55, 0x5c, 0x5d, 0x76,
- 0xc8, 0xa8, 0x34, 0xee, 0xce, 0x25, 0xab, 0x22, 0x48, 0x47, 0x8c, 0xa2, 0x3b, 0x30, 0x2b, 0xbb,
- 0xbd, 0x80, 0x3d, 0x7d, 0x22, 0xce, 0xbc, 0xe9, 0x9d, 0x4b, 0x16, 0x08, 0xe2, 0x2e, 0xa7, 0xa1,
- 0x5b, 0x20, 0x5b, 0x76, 0x8b, 0x10, 0x5f, 0xbe, 0x2f, 0x77, 0x2e, 0x59, 0x92, 0x6b, 0x93, 0x10,
- 0xbf, 0x59, 0x56, 0x57, 0xa5, 0x39, 0x0f, 0x73, 0x09, 0x55, 0xd5, 0x16, 0xb9, 0x30, 0xbf, 0x81,
- 0x7d, 0xcc, 0x13, 0x95, 0xf1, 0xd8, 0x09, 0xc1, 0xd4, 0x29, 0x3e, 0x97, 0x46, 0xaa, 0x5a, 0xe2,
- 0xdb, 0xbc, 0x0e, 0x0b, 0x69, 0x21, 0x4a, 0xb8, 0xc7, 0xd3, 0xe5, 0x90, 0x11, 0x8a, 0xd7, 0x07,
- 0x21, 0x23, 0xbd, 0x1d, 0x42, 0x4e, 0xc3, 0xb1, 0xa8, 0x20, 0xbc, 0x61, 0x22, 0xe1, 0x0d, 0xcb,
- 0x60, 0xe4, 0x89, 0x52, 0x8a, 0x1c, 0x43, 0xa3, 0xe9, 0xb8, 0xa7, 0x83, 0xfe, 0x38, 0xf5, 0x30,
- 0x1f, 0xc3, 0x52, 0x0e, 0xd7, 0x11, 0x2e, 0xfb, 0x1a, 0xee, 0xe4, 0x85, 0xd4, 0x98, 0xa2, 0x27,
- 0xd7, 0x2e, 0xf7, 0xc0, 0x1c, 0x25, 0x52, 0xd9, 0x67, 0x1f, 0x10, 0xbf, 0x93, 0x5e, 0x78, 0x2e,
- 0x0e, 0xc6, 0x70, 0x03, 0x9a, 0xeb, 0x30, 0x9f, 0xe2, 0xa7, 0x6c, 0xf2, 0x08, 0x90, 0x2f, 0x49,
- 0x76, 0xd8, 0x25, 0x94, 0xd9, 0x81, 0xd3, 0x8b, 0xee, 0xbb, 0xba, 0xea, 0x39, 0xe2, 0x1d, 0xfb,
- 0x4e, 0x4f, 0x6c, 0xda, 0x36, 0x66, 0xbb, 0x41, 0x87, 0xac, 0x8d, 0x2f, 0xcb, 0x34, 0x7f, 0x02,
- 0x4b, 0x39, 0x5c, 0x95, 0x82, 0x37, 0x01, 0x74, 0x7a, 0xa9, 0xb6, 0x2e, 0x41, 0xe1, 0x2a, 0xad,
- 0x3b, 0xbe, 0x3b, 0xf0, 0x1d, 0x86, 0xd7, 0xbb, 0xd8, 0x3d, 0x0d, 0x07, 0xbd, 0x8b, 0xab, 0xf4,
- 0xff, 0xb0, 0x94, 0xc3, 0x55, 0xa9, 0x64, 0x40, 0xc5, 0x55, 0x34, 0x65, 0xa9, 0xb8, 0xcd, 0xb7,
- 0x6d, 0x1b, 0xb3, 0xa3, 0xc0, 0xe9, 0x87, 0x5d, 0x72, 0x71, 0xf8, 0xc5, 0xfc, 0x00, 0xe6, 0x53,
- 0xfc, 0x46, 0xb8, 0xf2, 0xb7, 0x25, 0xb8, 0x9b, 0xe7, 0x58, 0x63, 0x53, 0x86, 0x27, 0xba, 0x5d,
- 0xc6, 0xfa, 0xb6, 0xbe, 0x96, 0xca, 0xbc, 0xfd, 0x92, 0xfa, 0xfc, 0x92, 0x15, 0x5d, 0xce, 0x80,
- 0x75, 0x55, 0xee, 0x26, 0xc6, 0xae, 0x0d, 0x58, 0xd7, 0xbc, 0x0f, 0xf7, 0x46, 0x2b, 0xa6, 0x7c,
- 0xfe, 0x0f, 0x25, 0x58, 0xd8, 0xc6, 0xcc, 0x72, 0xce, 0xd6, 0xbb, 0x4e, 0x70, 0x32, 0x0e, 0x04,
- 0xe3, 0x2e, 0x5c, 0xee, 0x50, 0xd2, 0xb3, 0x53, 0x30, 0x46, 0xd5, 0xaa, 0x71, 0x62, 0xfc, 0x4a,
- 0xbd, 0x05, 0xb3, 0x8c, 0xd8, 0xa9, 0x77, 0x6e, 0xd5, 0x02, 0x46, 0xa2, 0x01, 0xe6, 0x5f, 0xa7,
- 0xe0, 0xda, 0x90, 0x62, 0x6a, 0x23, 0x76, 0x60, 0x96, 0x3a, 0x67, 0xb6, 0x2b, 0xc9, 0x8d, 0x92,
- 0xb8, 0xa7, 0xde, 0x4f, 0x64, 0xa7, 0xd9, 0x39, 0xab, 0x31, 0xc9, 0x02, 0x1a, 0xf7, 0x1a, 0xdf,
- 0x4d, 0x42, 0x35, 0xee, 0x41, 0x8b, 0x50, 0xe6, 0xd9, 0x25, 0x7f, 0xb2, 0x48, 0x17, 0x9b, 0xe1,
- 0xcd, 0xdd, 0x76, 0x8c, 0xfe, 0x4c, 0x68, 0xf4, 0x07, 0xad, 0x40, 0x25, 0xc0, 0x67, 0x32, 0x67,
- 0x15, 0xca, 0x37, 0x27, 0x1a, 0x25, 0xab, 0x1c, 0xe0, 0x33, 0x91, 0xb5, 0xae, 0x40, 0x85, 0xbf,
- 0xd3, 0x45, 0xf7, 0x94, 0xee, 0x26, 0x7e, 0x5b, 0x74, 0x1f, 0x40, 0x95, 0xf4, 0x31, 0x75, 0x18,
- 0x5f, 0xfb, 0xb4, 0x48, 0xaf, 0x3f, 0x79, 0xc7, 0x05, 0xac, 0x1e, 0x44, 0x13, 0x2d, 0xcd, 0x83,
- 0xdb, 0x9c, 0xdb, 0x44, 0x33, 0x95, 0x78, 0x4a, 0x8d, 0x3a, 0x67, 0xf1, 0x78, 0xee, 0x4b, 0x5c,
- 0xa9, 0x1e, 0x69, 0x63, 0x91, 0x67, 0x4f, 0x0b, 0x85, 0xf6, 0x48, 0x1b, 0x0b, 0x3c, 0x05, 0x9f,
- 0xc9, 0xae, 0x8a, 0xec, 0x0a, 0xf0, 0x99, 0xe8, 0xba, 0x07, 0x57, 0xa2, 0x95, 0xda, 0xad, 0x73,
- 0x7e, 0x22, 0x54, 0x65, 0x5e, 0xa7, 0xd6, 0xda, 0xe4, 0x34, 0x3e, 0x2a, 0x5a, 0xb0, 0x1a, 0x05,
- 0x72, 0x94, 0x5a, 0xb2, 0x18, 0x65, 0x7a, 0x50, 0xd5, 0xea, 0xcc, 0x42, 0xf9, 0xe5, 0xfe, 0xf3,
- 0xfd, 0x83, 0xcf, 0xf7, 0xeb, 0x97, 0x50, 0x15, 0xa6, 0xd7, 0x36, 0x36, 0x36, 0x37, 0x64, 0xa6,
- 0xbe, 0x7e, 0x70, 0xb8, 0xbb, 0xb9, 0x21, 0x33, 0xf5, 0x8d, 0xcd, 0x17, 0x9b, 0xc7, 0x9b, 0x1b,
- 0xf5, 0x49, 0x54, 0x83, 0xca, 0xde, 0xc1, 0xc6, 0xee, 0x16, 0xef, 0x9a, 0xe2, 0x5d, 0xd6, 0xe6,
- 0xfe, 0xda, 0xde, 0xe6, 0x46, 0x7d, 0x1a, 0xd5, 0xa1, 0x76, 0xfc, 0xc5, 0xe1, 0xa6, 0xbd, 0xbe,
- 0xb3, 0xb6, 0xbf, 0xbd, 0xb9, 0x51, 0x9f, 0x31, 0x7f, 0x5f, 0x82, 0xc6, 0x11, 0x76, 0xa8, 0xdb,
- 0xdd, 0xf2, 0x7c, 0x1c, 0x36, 0xcf, 0xf9, 0x69, 0x7a, 0x71, 0xe7, 0x5e, 0x80, 0xe9, 0xd7, 0x03,
- 0xac, 0xd2, 0x85, 0xaa, 0x25, 0x1b, 0x51, 0x12, 0x37, 0xa9, 0x93, 0xb8, 0xeb, 0x30, 0xd3, 0xf1,
- 0x7c, 0x86, 0xa9, 0xdc, 0x7e, 0x4b, 0xb5, 0xcc, 0x4f, 0x60, 0x29, 0x47, 0x2b, 0x9d, 0x6f, 0x76,
- 0x38, 0x59, 0xf8, 0x74, 0xcd, 0x92, 0x0d, 0xf3, 0xcf, 0x25, 0xb8, 0x91, 0x9a, 0xb3, 0x4e, 0x02,
- 0x86, 0x03, 0xf6, 0xc3, 0x2d, 0xe6, 0x03, 0xa8, 0xbb, 0xdd, 0x41, 0x70, 0x8a, 0x79, 0xe6, 0x29,
- 0x75, 0x55, 0x18, 0xdf, 0x55, 0x45, 0x8f, 0xcf, 0x93, 0x73, 0x58, 0xce, 0xd7, 0x55, 0x2d, 0xb1,
- 0x01, 0xe5, 0x9e, 0xc3, 0xdc, 0x6e, 0xbc, 0xc8, 0xa8, 0x89, 0x56, 0x00, 0xc4, 0xa7, 0x9d, 0xb8,
- 0xbd, 0xab, 0x82, 0xb2, 0xe1, 0x30, 0x07, 0xdd, 0x86, 0x1a, 0x0e, 0xda, 0x36, 0xe9, 0xd8, 0x82,
- 0xa6, 0xb0, 0x47, 0xc0, 0x41, 0xfb, 0xa0, 0xb3, 0xc7, 0x29, 0xe6, 0xef, 0x4a, 0x30, 0x23, 0x91,
- 0xbb, 0xe8, 0x1d, 0x5f, 0x8a, 0xdf, 0xf1, 0x3c, 0x86, 0xc5, 0x35, 0x2b, 0x57, 0x2a, 0xbe, 0xd1,
- 0x8f, 0x61, 0x29, 0x3e, 0x40, 0x09, 0xf5, 0xbe, 0x16, 0x6e, 0x69, 0x77, 0xb1, 0xd3, 0xc6, 0x54,
- 0x9d, 0x48, 0x8b, 0xd1, 0x81, 0x1a, 0xf7, 0xef, 0x88, 0x6e, 0xf4, 0x1e, 0x5c, 0xe9, 0x79, 0x94,
- 0x12, 0x6a, 0x53, 0xdc, 0xe9, 0x39, 0xfd, 0xb0, 0x31, 0x25, 0x9e, 0x82, 0x97, 0x25, 0xd5, 0x92,
- 0x44, 0xf3, 0x0b, 0x58, 0xd9, 0xc6, 0xec, 0xa0, 0xf5, 0x0b, 0xec, 0xb2, 0x0d, 0x8f, 0x62, 0x77,
- 0x7c, 0x68, 0xf5, 0xff, 0xc1, 0xcd, 0x22, 0xd6, 0x23, 0x50, 0xeb, 0x3f, 0x95, 0x60, 0x61, 0xdd,
- 0x27, 0x01, 0xe6, 0xb7, 0xc1, 0x21, 0x21, 0x63, 0x28, 0xd1, 0xdc, 0x87, 0xa9, 0x3e, 0x7f, 0x95,
- 0x0f, 0x25, 0xd0, 0x52, 0x33, 0x21, 0x42, 0xf4, 0xa3, 0xfb, 0x31, 0x9c, 0x3c, 0x99, 0x8b, 0xc8,
- 0xaa, 0x5e, 0x73, 0x11, 0xae, 0x0d, 0x69, 0xa8, 0x7c, 0xeb, 0xef, 0x25, 0x58, 0x4e, 0xf5, 0xec,
- 0x06, 0x0c, 0xd3, 0xc0, 0xf9, 0x01, 0xd7, 0x90, 0x8b, 0x1c, 0x4c, 0xfe, 0x17, 0xc8, 0xc1, 0x2d,
- 0x58, 0x29, 0x58, 0x82, 0x06, 0x9b, 0xb9, 0x3d, 0xde, 0x8c, 0x1b, 0x6c, 0xce, 0x32, 0x55, 0x02,
- 0xdf, 0x72, 0x81, 0x81, 0x38, 0x86, 0xc6, 0x26, 0x50, 0xdc, 0x47, 0xd8, 0x77, 0x98, 0xf7, 0x46,
- 0xe1, 0xba, 0xea, 0x0d, 0x10, 0x11, 0xf9, 0x95, 0x20, 0xb5, 0x1a, 0x96, 0xac, 0xb4, 0xfa, 0x75,
- 0x89, 0xa7, 0x32, 0x7d, 0xdf, 0x73, 0xc7, 0x8b, 0xbb, 0xa3, 0x87, 0x30, 0x23, 0x37, 0x65, 0x04,
- 0xe0, 0xa3, 0x46, 0x98, 0x2b, 0x70, 0x23, 0x57, 0x07, 0xa5, 0xe3, 0x4b, 0x58, 0x3a, 0xe8, 0x33,
- 0xaf, 0x27, 0x62, 0x6e, 0x7c, 0x9b, 0xb5, 0x0c, 0x46, 0x1e, 0x5b, 0x29, 0xf4, 0xc9, 0x3f, 0x6f,
- 0x8a, 0x02, 0x6b, 0x54, 0xa5, 0x92, 0x95, 0x69, 0xf4, 0x25, 0xd4, 0x87, 0x8b, 0xc3, 0xe8, 0x56,
- 0x56, 0x5a, 0xaa, 0x16, 0x6d, 0xdc, 0x2e, 0x1e, 0xa0, 0x56, 0x38, 0xf3, 0xef, 0x6f, 0x1f, 0x4c,
- 0x54, 0x26, 0xd0, 0x57, 0x51, 0x51, 0x37, 0x51, 0xf1, 0x45, 0xc9, 0xe9, 0xb9, 0x25, 0x66, 0xe3,
- 0xce, 0x88, 0x11, 0x29, 0x09, 0x25, 0xf4, 0x1c, 0x40, 0x97, 0x70, 0xd1, 0x52, 0x7a, 0x62, 0xa2,
- 0x94, 0x6c, 0x18, 0x79, 0x5d, 0x59, 0x66, 0xba, 0x54, 0xab, 0x99, 0x65, 0xaa, 0xc1, 0x9a, 0x59,
- 0x4e, 0x65, 0x37, 0x62, 0xf6, 0x39, 0x5c, 0x49, 0x97, 0x54, 0xd1, 0x4a, 0xfc, 0x54, 0xcb, 0x2b,
- 0xfc, 0x1a, 0x37, 0x8b, 0xba, 0x87, 0x18, 0x7f, 0xa9, 0xc0, 0xd8, 0x44, 0xf1, 0x54, 0xef, 0x59,
- 0x41, 0xad, 0x56, 0xef, 0x59, 0x61, 0xdd, 0x35, 0xa1, 0x77, 0xba, 0x9a, 0xa9, 0xf5, 0xce, 0x2d,
- 0x9c, 0x6a, 0xbd, 0xf3, 0x8b, 0xa0, 0xb1, 0x33, 0xb8, 0x80, 0xb2, 0x55, 0x48, 0x14, 0xef, 0x75,
- 0x61, 0x51, 0xd4, 0x30, 0x47, 0x0d, 0x19, 0xd2, 0x7e, 0x1f, 0x66, 0x13, 0xa5, 0x38, 0x14, 0x6f,
- 0x54, 0xb6, 0xc0, 0x69, 0xdc, 0xc8, 0xed, 0xcb, 0x1a, 0x7b, 0x38, 0x1f, 0xd2, 0xc6, 0x2e, 0xa8,
- 0xee, 0x69, 0x63, 0x17, 0x56, 0xea, 0x22, 0xf6, 0x7b, 0x00, 0xba, 0x88, 0xa4, 0x3d, 0x2e, 0x53,
- 0x2a, 0xd3, 0x1e, 0x97, 0xad, 0x39, 0x45, 0x06, 0xfe, 0x58, 0x68, 0x3b, 0x5c, 0x14, 0xd2, 0xda,
- 0x16, 0xd4, 0xa0, 0xb4, 0xb6, 0x45, 0xf5, 0xa4, 0x64, 0x38, 0x67, 0xaa, 0x2c, 0x3a, 0x9c, 0x8b,
- 0x6a, 0x4b, 0x3a, 0x9c, 0x0b, 0x4b, 0x34, 0xb1, 0x3d, 0x7e, 0x04, 0x53, 0x5b, 0xa1, 0x7b, 0x8a,
- 0xe6, 0xe3, 0x29, 0xba, 0x40, 0x63, 0x2c, 0xa4, 0x89, 0x43, 0x53, 0x37, 0xa1, 0x12, 0xd5, 0x28,
- 0xd0, 0x62, 0xca, 0xdb, 0x75, 0xbd, 0xc5, 0x68, 0x64, 0x3b, 0x86, 0xd8, 0x1c, 0xc3, 0xe5, 0x54,
- 0x81, 0x01, 0x2d, 0xc7, 0x52, 0x73, 0xea, 0x1c, 0xc6, 0x4a, 0x41, 0xef, 0x90, 0xe5, 0x9e, 0x03,
- 0x68, 0xe0, 0x5f, 0xef, 0x73, 0xa6, 0x38, 0xa1, 0xf7, 0x39, 0xa7, 0x4e, 0x10, 0xa9, 0xe8, 0x02,
- 0xca, 0x62, 0xf7, 0x3a, 0x90, 0x0a, 0x6b, 0x09, 0x3a, 0x90, 0x8a, 0xa1, 0xff, 0x64, 0xb4, 0x66,
- 0xd1, 0xf6, 0xa4, 0x90, 0x02, 0xf4, 0x3f, 0x29, 0xa4, 0x08, 0xac, 0x8f, 0x85, 0xd0, 0x6c, 0x85,
- 0x5c, 0xa1, 0xe4, 0xe8, 0x7e, 0x51, 0x0c, 0xa5, 0x41, 0x7b, 0xe3, 0xfd, 0xef, 0x1d, 0x37, 0x64,
- 0xbd, 0x23, 0xa8, 0x25, 0x51, 0x72, 0x74, 0x23, 0xcd, 0x20, 0x05, 0x27, 0x1a, 0xcb, 0xf9, 0x9d,
- 0x99, 0xc0, 0xfb, 0x25, 0x18, 0xc5, 0x40, 0x21, 0xfa, 0x60, 0x94, 0x8e, 0x69, 0x81, 0x0f, 0xdf,
- 0x65, 0x68, 0x7a, 0x45, 0x0f, 0x4a, 0x68, 0x07, 0xaa, 0x31, 0x78, 0x8d, 0x1a, 0x45, 0xd0, 0xbb,
- 0xb1, 0x94, 0xd3, 0x33, 0x64, 0x9d, 0xcf, 0xa0, 0x96, 0x04, 0xa3, 0xb5, 0x75, 0x72, 0x70, 0x70,
- 0x6d, 0x9d, 0x5c, 0xfc, 0x3a, 0x79, 0x24, 0x6b, 0x38, 0x33, 0x71, 0x24, 0x67, 0x30, 0xd3, 0xc4,
- 0x91, 0x9c, 0xc5, 0x3f, 0x63, 0xa7, 0x69, 0x89, 0x9f, 0x1c, 0xd2, 0x18, 0x24, 0x4a, 0xfe, 0x65,
- 0x90, 0x0b, 0x7a, 0xea, 0x53, 0xa8, 0x10, 0xc0, 0x4c, 0xec, 0xe7, 0x57, 0x30, 0x97, 0x01, 0x15,
- 0xb5, 0x8c, 0x22, 0x14, 0x53, 0xcb, 0x28, 0x44, 0x24, 0xe3, 0x55, 0x34, 0xa1, 0xac, 0x7e, 0x4d,
- 0x42, 0xd7, 0xe3, 0x59, 0xa9, 0xff, 0x9e, 0x8c, 0xc5, 0x0c, 0x7d, 0xc8, 0xb2, 0x87, 0x30, 0x9b,
- 0x40, 0x1c, 0x51, 0xf2, 0x8e, 0x18, 0x42, 0x12, 0xb5, 0x65, 0x73, 0x20, 0xca, 0xc4, 0xba, 0x7f,
- 0xc5, 0x53, 0xa5, 0x11, 0xf8, 0x1f, 0xfa, 0x70, 0x94, 0x7f, 0x0e, 0x0b, 0x7d, 0xf4, 0x6e, 0x83,
- 0x87, 0x56, 0xf5, 0x73, 0xb8, 0x9c, 0xc2, 0xb2, 0xf4, 0x09, 0x9c, 0x07, 0x38, 0xea, 0x13, 0x38,
- 0x17, 0x00, 0x4b, 0xac, 0xed, 0x14, 0x16, 0xf2, 0x20, 0x06, 0x74, 0x57, 0x47, 0x45, 0x21, 0x58,
- 0x62, 0xdc, 0x1b, 0x3d, 0x28, 0x23, 0xac, 0x05, 0x73, 0x19, 0xbc, 0x46, 0x3b, 0x50, 0x11, 0xc0,
- 0xa4, 0x1d, 0xa8, 0x10, 0xec, 0x49, 0xc8, 0xc0, 0x80, 0xb2, 0x55, 0x1b, 0x94, 0x78, 0x3c, 0x17,
- 0x14, 0x8f, 0xf4, 0x11, 0x3d, 0xa2, 0xe8, 0xa3, 0x0f, 0x97, 0x16, 0xcc, 0x65, 0x0a, 0x35, 0x7a,
- 0x29, 0x45, 0x95, 0x21, 0xbd, 0x94, 0xc2, 0x2a, 0x4f, 0x62, 0x29, 0x04, 0xae, 0xe7, 0x83, 0x12,
- 0xe8, 0xbd, 0xc4, 0xf6, 0x16, 0xe3, 0x21, 0xc6, 0xfd, 0xef, 0x1b, 0x36, 0x14, 0x7e, 0xc7, 0x70,
- 0x39, 0x95, 0x4f, 0x6b, 0x27, 0xcb, 0x43, 0x39, 0xb4, 0x93, 0xe5, 0x23, 0x0c, 0x91, 0xeb, 0xfa,
- 0x43, 0x10, 0x44, 0x94, 0xa5, 0xa3, 0x7b, 0xb9, 0xf3, 0x87, 0x70, 0x08, 0xe3, 0xbd, 0xef, 0x19,
- 0x95, 0x7d, 0x9b, 0x0e, 0x67, 0xe7, 0xc9, 0xe4, 0x2d, 0x17, 0x0c, 0x48, 0x26, 0x6f, 0x05, 0x89,
- 0x7d, 0x8a, 0x7d, 0x3a, 0xcd, 0x4e, 0xb2, 0xcf, 0x4d, 0xfd, 0x93, 0xec, 0x0b, 0x32, 0xf4, 0x88,
- 0x7d, 0x07, 0xe6, 0x73, 0x92, 0x64, 0x94, 0xf0, 0xcd, 0xa2, 0x2c, 0xde, 0xb8, 0x3b, 0x72, 0x4c,
- 0xf6, 0xb5, 0x94, 0x4d, 0x8b, 0x75, 0x94, 0x14, 0x66, 0xe2, 0x3a, 0x4a, 0x8a, 0xb3, 0xea, 0x48,
- 0x48, 0xf3, 0xe3, 0x57, 0x7c, 0xb0, 0xef, 0xb4, 0x56, 0x5d, 0xd2, 0x7b, 0x2c, 0x3f, 0x3f, 0x22,
- 0xf4, 0xe4, 0xb1, 0x64, 0xf1, 0x58, 0xfc, 0xdf, 0xfd, 0xf8, 0x84, 0xa8, 0x76, 0xbf, 0xd5, 0x9a,
- 0x11, 0xa4, 0xa7, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x4f, 0xb9, 0xf5, 0x30, 0x2e, 0x00,
- 0x00,
+ // 3092 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5b, 0x6f, 0x1c, 0xc7,
+ 0xb1, 0xd6, 0xf2, 0xb2, 0x97, 0xda, 0x95, 0xb4, 0x6c, 0x52, 0xe2, 0x72, 0x44, 0xea, 0x32, 0x92,
+ 0x65, 0x59, 0x96, 0x29, 0x5b, 0x3a, 0xc0, 0xd1, 0x39, 0x07, 0x07, 0x01, 0x97, 0x77, 0x49, 0xbc,
+ 0x78, 0x48, 0xc5, 0xb0, 0x00, 0x63, 0x3d, 0x3b, 0xdb, 0xcb, 0x9d, 0x70, 0x76, 0x7a, 0xd5, 0xd3,
+ 0x2b, 0x8a, 0x06, 0xf2, 0x90, 0x00, 0x79, 0x0b, 0x0c, 0x04, 0x08, 0xe2, 0x3c, 0xe6, 0x39, 0xbf,
+ 0x20, 0x2f, 0x79, 0xc8, 0x4b, 0xfe, 0x83, 0x91, 0x7f, 0x10, 0x20, 0x7f, 0x20, 0x4f, 0x41, 0x5f,
+ 0x66, 0x7a, 0x66, 0x67, 0x66, 0xad, 0x80, 0x0b, 0xe7, 0x6d, 0xba, 0xaa, 0xbb, 0xaa, 0xba, 0xba,
+ 0xfa, 0x52, 0x5f, 0x0d, 0x34, 0x28, 0x1e, 0x90, 0xc0, 0x65, 0x84, 0x9e, 0x7f, 0x12, 0x60, 0xfa,
+ 0xd6, 0x75, 0xf0, 0xea, 0x80, 0x12, 0x46, 0x50, 0xf1, 0xc4, 0x65, 0xb6, 0x77, 0x6e, 0x80, 0xe7,
+ 0xfa, 0x4c, 0xd2, 0x8c, 0x5a, 0xd0, 0xb3, 0x29, 0xee, 0xc8, 0x96, 0x79, 0x04, 0x8b, 0x56, 0x34,
+ 0x7a, 0xf3, 0x9d, 0x1b, 0xb0, 0xc0, 0xc2, 0x6f, 0x86, 0x38, 0x60, 0xe8, 0x19, 0x80, 0x16, 0xdc,
+ 0x28, 0xdc, 0x2e, 0x3c, 0xa8, 0x3e, 0x41, 0xab, 0x52, 0xe2, 0xaa, 0x1e, 0xd4, 0x9c, 0xf9, 0xfd,
+ 0x5f, 0x1f, 0x15, 0xac, 0x58, 0x5f, 0xf3, 0x09, 0x34, 0xd2, 0x42, 0x83, 0x01, 0xf1, 0x03, 0x8c,
+ 0xae, 0x43, 0x11, 0x0b, 0x8a, 0x90, 0x58, 0xb6, 0x54, 0xcb, 0x3c, 0x16, 0x63, 0x6c, 0xe7, 0x74,
+ 0xd7, 0x77, 0x28, 0xee, 0x63, 0x9f, 0xd9, 0xde, 0xc5, 0x2d, 0xb9, 0x01, 0x4b, 0x19, 0x52, 0xa5,
+ 0x29, 0x26, 0x85, 0x39, 0xc9, 0xdc, 0x1a, 0x7a, 0x17, 0xd7, 0x85, 0xee, 0xc2, 0x65, 0x87, 0x62,
+ 0x9b, 0xe1, 0x56, 0xdb, 0x65, 0x7d, 0x7b, 0xd0, 0x98, 0x12, 0x13, 0xac, 0x49, 0x62, 0x53, 0xd0,
+ 0xcc, 0x05, 0x40, 0x71, 0x9d, 0xca, 0x92, 0x3d, 0x98, 0xdb, 0x73, 0x3b, 0xef, 0x24, 0xe7, 0xe2,
+ 0xb3, 0x5e, 0x00, 0x14, 0x17, 0xa7, 0x94, 0xfc, 0xba, 0x00, 0xd7, 0xb6, 0x6d, 0xda, 0xb6, 0x4f,
+ 0xf0, 0x3a, 0xf1, 0x3c, 0xec, 0xb0, 0x1f, 0x67, 0xce, 0x68, 0x01, 0x66, 0x07, 0x74, 0xe8, 0xe3,
+ 0xc6, 0xb4, 0x60, 0xca, 0x86, 0xd9, 0x80, 0xeb, 0xa3, 0xd6, 0x28, 0x43, 0x8f, 0x60, 0xf1, 0x0b,
+ 0xea, 0x32, 0xbc, 0x4e, 0xfa, 0x7d, 0x97, 0x6d, 0x53, 0x7b, 0xd0, 0xbb, 0xb8, 0x4f, 0x0c, 0x68,
+ 0xa4, 0x85, 0x2a, 0x85, 0xcf, 0xe1, 0xca, 0xba, 0x87, 0x6d, 0x7f, 0x38, 0xb8, 0xb8, 0x9e, 0x39,
+ 0xb8, 0x1a, 0xc9, 0x52, 0xe2, 0x3f, 0x87, 0x6b, 0x7a, 0xc8, 0x91, 0xfb, 0x0d, 0xbe, 0xb8, 0x96,
+ 0x47, 0x70, 0x7d, 0x54, 0xa4, 0xda, 0x5f, 0x08, 0x66, 0x02, 0xf7, 0x1b, 0x2c, 0xa4, 0x4d, 0x5b,
+ 0xe2, 0xdb, 0x7c, 0x03, 0x4b, 0x6b, 0x83, 0x81, 0x77, 0xbe, 0xed, 0x32, 0x9b, 0x31, 0xea, 0xb6,
+ 0x87, 0x0c, 0x5f, 0x7c, 0x9b, 0x23, 0x03, 0xca, 0x14, 0xbf, 0x75, 0x03, 0x97, 0xf8, 0x62, 0xdd,
+ 0x6b, 0x56, 0xd4, 0x36, 0x97, 0xc1, 0xc8, 0x52, 0xa9, 0x3c, 0xf2, 0x8f, 0x29, 0x40, 0x5b, 0x98,
+ 0x39, 0x3d, 0x0b, 0xf7, 0x09, 0xbb, 0xb8, 0x3f, 0xf8, 0xa9, 0x42, 0x85, 0x28, 0x61, 0x48, 0xc5,
+ 0x52, 0x2d, 0x1e, 0x7a, 0x5d, 0x42, 0x9d, 0x28, 0xf4, 0x44, 0x03, 0x2d, 0x42, 0xc9, 0x27, 0x2d,
+ 0x66, 0x9f, 0x04, 0x8d, 0x19, 0x79, 0x08, 0xf9, 0xe4, 0xd8, 0x3e, 0x09, 0x50, 0x03, 0x4a, 0xcc,
+ 0xed, 0x63, 0x32, 0x64, 0x8d, 0xd9, 0xdb, 0x85, 0x07, 0xb3, 0x56, 0xd8, 0xe4, 0x43, 0x82, 0xa0,
+ 0xd7, 0x3a, 0xc5, 0xe7, 0x8d, 0xa2, 0xd4, 0x10, 0x04, 0xbd, 0x17, 0xf8, 0x1c, 0xdd, 0x82, 0xea,
+ 0xa9, 0x4f, 0xce, 0xfc, 0x56, 0x8f, 0xf0, 0x43, 0xad, 0x24, 0x98, 0x20, 0x48, 0x3b, 0x9c, 0x82,
+ 0x96, 0xa0, 0xec, 0x93, 0x96, 0xdc, 0x00, 0x15, 0xa1, 0xad, 0xe4, 0x93, 0x43, 0xde, 0x44, 0x4f,
+ 0xe1, 0xb2, 0xb4, 0xb3, 0x35, 0xb0, 0xa9, 0xdd, 0x0f, 0x1a, 0x20, 0xa6, 0x7c, 0x45, 0x4f, 0x59,
+ 0x78, 0xa7, 0x26, 0x3b, 0x1d, 0x8a, 0x3e, 0xe8, 0x11, 0x20, 0xa7, 0x87, 0x9d, 0x53, 0x61, 0x7f,
+ 0xcb, 0xe9, 0xd9, 0xfe, 0x09, 0xee, 0x34, 0xaa, 0x42, 0x72, 0x5d, 0x70, 0xf8, 0x54, 0xd6, 0x25,
+ 0xfd, 0xf9, 0x4c, 0xb9, 0x5c, 0xaf, 0x98, 0xcf, 0x60, 0x3e, 0xe1, 0x6e, 0x15, 0x2b, 0x77, 0xa0,
+ 0x96, 0x10, 0x22, 0x4f, 0xe4, 0x2a, 0xd3, 0xe3, 0xf9, 0x5e, 0x5c, 0x17, 0x7b, 0x59, 0xbb, 0x7f,
+ 0x22, 0x7b, 0x31, 0x2d, 0x54, 0x85, 0xc6, 0xdf, 0xa7, 0x60, 0x6e, 0x1b, 0xb3, 0x35, 0xea, 0xf4,
+ 0xdc, 0xb7, 0x13, 0x88, 0x8c, 0x1b, 0x50, 0x71, 0xc4, 0x96, 0x6f, 0xb9, 0x1d, 0x15, 0x1c, 0x65,
+ 0x49, 0xd8, 0xed, 0xf0, 0xb0, 0x19, 0x50, 0xdc, 0x75, 0xdf, 0x89, 0xf8, 0xa8, 0x58, 0xaa, 0x85,
+ 0x9e, 0x41, 0xb1, 0x4b, 0x68, 0xdf, 0x66, 0x22, 0x3e, 0xae, 0x3c, 0xb9, 0x1d, 0xaa, 0x4a, 0x59,
+ 0xb6, 0xba, 0x25, 0xfa, 0x59, 0xaa, 0x3f, 0xdf, 0x7e, 0x03, 0x9b, 0xf5, 0x44, 0xf8, 0xd4, 0x2c,
+ 0xf1, 0xcd, 0xa3, 0x0a, 0xbf, 0x73, 0xbc, 0x61, 0x07, 0x37, 0x8a, 0xb7, 0xa7, 0x1f, 0xd4, 0xac,
+ 0xb0, 0x89, 0x56, 0x00, 0xb0, 0xe7, 0x76, 0xf8, 0xfa, 0xb3, 0x9e, 0x88, 0x9d, 0xb2, 0x55, 0x11,
+ 0x94, 0x43, 0x3e, 0xf0, 0x21, 0xcc, 0xb9, 0xbe, 0xe8, 0xd9, 0xf2, 0xba, 0x41, 0xab, 0xed, 0x91,
+ 0x76, 0xd0, 0x28, 0x8b, 0x5e, 0x57, 0x15, 0xe3, 0x65, 0x37, 0x68, 0x72, 0xb2, 0xf9, 0x14, 0x8a,
+ 0xd2, 0x14, 0x54, 0x82, 0xe9, 0xd7, 0xbb, 0x87, 0xf5, 0x4b, 0xfc, 0xe3, 0x78, 0xcd, 0xaa, 0x17,
+ 0x10, 0x40, 0xf1, 0x78, 0xcd, 0x6a, 0x6d, 0xbf, 0xae, 0x4f, 0xa1, 0x2a, 0x94, 0xf8, 0x77, 0xf3,
+ 0xf5, 0x93, 0xfa, 0xb4, 0xf9, 0x00, 0x50, 0x7c, 0x46, 0xfa, 0x08, 0xe9, 0xd8, 0xcc, 0x16, 0x6e,
+ 0xae, 0x59, 0xe2, 0x9b, 0xc7, 0xc1, 0x8e, 0x1d, 0xbc, 0x24, 0x8e, 0xed, 0x35, 0xa9, 0xed, 0x3b,
+ 0xbd, 0x09, 0x1c, 0x20, 0xe6, 0xa7, 0xd0, 0x48, 0x0b, 0x55, 0x46, 0x2c, 0xc0, 0xec, 0x5b, 0xdb,
+ 0x1b, 0x62, 0x15, 0x94, 0xb2, 0x61, 0x7e, 0x5f, 0x80, 0x86, 0x88, 0xe4, 0x23, 0x32, 0xa4, 0x0e,
+ 0x96, 0xa3, 0x2e, 0x1e, 0x24, 0x3f, 0x81, 0xb9, 0x40, 0x08, 0x6c, 0xc5, 0x04, 0x4c, 0xe5, 0x09,
+ 0xb0, 0xea, 0xb2, 0xb3, 0x95, 0xb8, 0x07, 0x95, 0x80, 0xb6, 0x30, 0x49, 0xc4, 0x53, 0xcd, 0xaa,
+ 0x05, 0x31, 0x33, 0xf9, 0x6a, 0x33, 0x9b, 0x9e, 0x60, 0xd6, 0xa2, 0xb8, 0x2b, 0x22, 0xab, 0x66,
+ 0x55, 0x24, 0xc5, 0xc2, 0x5d, 0xf3, 0x29, 0x2c, 0x65, 0x4c, 0x4d, 0x3f, 0x9b, 0x28, 0x0e, 0x86,
+ 0x1e, 0x0b, 0x9f, 0x4d, 0xb2, 0x65, 0x6e, 0x43, 0x75, 0x2b, 0x98, 0xc4, 0x9b, 0xe1, 0x1e, 0xd4,
+ 0xa4, 0x20, 0xed, 0x7f, 0x4c, 0x29, 0xa1, 0x2a, 0x0a, 0x64, 0xc3, 0xfc, 0x53, 0x01, 0xae, 0x8a,
+ 0x6b, 0xd4, 0xc2, 0xdd, 0x8b, 0xbb, 0xbd, 0x0e, 0xd3, 0xdc, 0x13, 0xf2, 0xee, 0xe0, 0x9f, 0x89,
+ 0x2b, 0x65, 0x3a, 0x79, 0xa5, 0xf0, 0xd3, 0x8a, 0x78, 0x9d, 0x56, 0xc4, 0x97, 0x0e, 0xac, 0x12,
+ 0xaf, 0x63, 0x85, 0x5d, 0xa2, 0xe3, 0x7e, 0x36, 0x76, 0xdc, 0x3f, 0x9f, 0x29, 0x17, 0xeb, 0x25,
+ 0xb3, 0x01, 0x75, 0x6d, 0xb9, 0x9c, 0xe4, 0xf3, 0x99, 0x72, 0xa1, 0x3e, 0x65, 0xfa, 0xb0, 0xb0,
+ 0xe5, 0xfa, 0x9d, 0x3d, 0x4c, 0x4f, 0x70, 0xd3, 0x0e, 0x26, 0x70, 0xe8, 0x2c, 0x43, 0x25, 0x34,
+ 0x33, 0x68, 0x4c, 0x89, 0x3d, 0xaf, 0x09, 0xe6, 0xc7, 0x70, 0x6d, 0x44, 0x9f, 0xde, 0x78, 0x6d,
+ 0x3b, 0x90, 0x21, 0x5f, 0xb1, 0xc4, 0xb7, 0xf9, 0x6d, 0x01, 0xe6, 0xe4, 0x61, 0xb9, 0x45, 0xe8,
+ 0xe9, 0x7f, 0x3e, 0xd4, 0xf9, 0xe3, 0x32, 0x6e, 0x4f, 0xf4, 0x96, 0x5e, 0xda, 0x0d, 0x2c, 0xcc,
+ 0x4d, 0xde, 0xf5, 0x0f, 0x29, 0x39, 0xa1, 0x38, 0x08, 0x26, 0x72, 0x7a, 0x53, 0x21, 0x34, 0x76,
+ 0x7a, 0x4b, 0xc2, 0x6e, 0xc7, 0xfc, 0x7f, 0x30, 0xb2, 0x74, 0x2a, 0x67, 0xde, 0x82, 0xaa, 0xeb,
+ 0xb7, 0x06, 0x8a, 0xac, 0xb6, 0x0d, 0xb8, 0x51, 0x47, 0x69, 0xf2, 0xd1, 0x9b, 0xa1, 0x1d, 0xf4,
+ 0x26, 0x6c, 0x72, 0x20, 0x84, 0xc6, 0x4c, 0x96, 0x84, 0xd0, 0xe4, 0xb4, 0xce, 0xf7, 0x35, 0xd9,
+ 0x83, 0x9b, 0xa3, 0x17, 0xe7, 0x16, 0x25, 0xfd, 0x57, 0xd6, 0xcb, 0x89, 0x6c, 0xc6, 0x21, 0xf5,
+ 0x94, 0xc5, 0xfc, 0xd3, 0xbc, 0x03, 0xb7, 0x72, 0xb5, 0xa9, 0x65, 0x3f, 0x80, 0x79, 0xd9, 0xa5,
+ 0x39, 0xf4, 0x3b, 0xde, 0x04, 0x1e, 0xb6, 0x0f, 0x61, 0x21, 0x29, 0x70, 0xcc, 0x9d, 0xf4, 0xed,
+ 0x14, 0xd4, 0x8f, 0x30, 0x5b, 0x27, 0x7e, 0xd7, 0x3d, 0xb9, 0xb8, 0x03, 0x9e, 0x41, 0x09, 0xfb,
+ 0x8c, 0xba, 0x58, 0x6e, 0xd9, 0xea, 0x93, 0x9b, 0xe1, 0xb0, 0x51, 0x25, 0xab, 0x9b, 0x3e, 0xa3,
+ 0xe7, 0x56, 0xd8, 0xdd, 0xf8, 0x55, 0x01, 0x66, 0x05, 0x89, 0x3b, 0x91, 0x3f, 0x11, 0xe5, 0x06,
+ 0xe6, 0x9f, 0x68, 0x05, 0x2a, 0xe2, 0xea, 0x6a, 0x05, 0x8c, 0x4a, 0xe7, 0xee, 0x5c, 0xb2, 0xca,
+ 0x82, 0x74, 0xc4, 0x28, 0xba, 0x03, 0x55, 0xc9, 0x76, 0x7d, 0xf6, 0xf4, 0x89, 0x38, 0xf3, 0x66,
+ 0x77, 0x2e, 0x59, 0x20, 0x88, 0xbb, 0x9c, 0x86, 0x6e, 0x81, 0x6c, 0xb5, 0xda, 0x84, 0x78, 0xf2,
+ 0xc1, 0xba, 0x73, 0xc9, 0x92, 0x52, 0x9b, 0x84, 0x78, 0xcd, 0x92, 0xba, 0x2a, 0xcd, 0x79, 0x98,
+ 0x8b, 0x99, 0xaa, 0x96, 0xc8, 0x81, 0xf9, 0x0d, 0xec, 0x61, 0x9e, 0xf9, 0x4c, 0xc6, 0x4f, 0x08,
+ 0x66, 0x4e, 0xf1, 0xb9, 0x74, 0x52, 0xc5, 0x12, 0xdf, 0xe6, 0x75, 0x58, 0x48, 0x2a, 0x51, 0xca,
+ 0x5d, 0x9e, 0x7f, 0x07, 0x8c, 0x50, 0xbc, 0x3e, 0x0c, 0x18, 0xe9, 0xef, 0x10, 0x72, 0x1a, 0x4c,
+ 0xc4, 0x04, 0x11, 0x0d, 0x53, 0xb1, 0x68, 0x58, 0x06, 0x23, 0x4b, 0x95, 0x32, 0xe4, 0x18, 0x1a,
+ 0x4d, 0xdb, 0x39, 0x1d, 0x0e, 0x26, 0x69, 0x87, 0xf9, 0x18, 0x96, 0x32, 0xa4, 0x8e, 0x09, 0xd9,
+ 0x37, 0x70, 0x27, 0x6b, 0x4b, 0x4d, 0x68, 0xf7, 0x64, 0xfa, 0xe5, 0x1e, 0x98, 0xe3, 0x54, 0x2a,
+ 0xff, 0xec, 0x03, 0xe2, 0x77, 0xd2, 0x4b, 0xd7, 0xc1, 0xfe, 0x04, 0x6e, 0x40, 0x73, 0x1d, 0xe6,
+ 0x13, 0xf2, 0x94, 0x4f, 0x1e, 0x01, 0xf2, 0x24, 0xa9, 0x15, 0xf4, 0x08, 0x65, 0x2d, 0xdf, 0xee,
+ 0x87, 0xf7, 0x5d, 0x5d, 0x71, 0x8e, 0x38, 0x63, 0xdf, 0xee, 0x8b, 0x45, 0xdb, 0xc6, 0x6c, 0xd7,
+ 0xef, 0x92, 0xb5, 0xc9, 0xa5, 0xad, 0xe6, 0xff, 0xc1, 0x52, 0x86, 0x54, 0x65, 0xe0, 0x4d, 0x00,
+ 0x9d, 0xaf, 0xaa, 0xa5, 0x8b, 0x51, 0xb8, 0x49, 0xeb, 0xb6, 0xe7, 0x0c, 0x3d, 0x9b, 0xe1, 0x75,
+ 0x9e, 0x6c, 0x05, 0xc3, 0xfe, 0xc5, 0x4d, 0xfa, 0x6f, 0x58, 0xca, 0x90, 0xaa, 0x4c, 0x32, 0xa0,
+ 0xec, 0x28, 0x9a, 0xf2, 0x54, 0xd4, 0xe6, 0xcb, 0xb6, 0x8d, 0xd9, 0x91, 0x6f, 0x0f, 0x82, 0x1e,
+ 0xb9, 0x38, 0x9e, 0x63, 0x7e, 0x04, 0xf3, 0x09, 0x79, 0x63, 0x42, 0xf9, 0xbb, 0x02, 0xdc, 0xcd,
+ 0x0a, 0xac, 0x89, 0x19, 0xc3, 0x33, 0xe7, 0x1e, 0x63, 0x83, 0x96, 0xbe, 0x96, 0x4a, 0xbc, 0xfd,
+ 0x8a, 0x7a, 0xfc, 0x92, 0x15, 0x2c, 0x7b, 0xc8, 0x7a, 0x2a, 0x77, 0x13, 0x7d, 0xd7, 0x86, 0xac,
+ 0x67, 0xde, 0x87, 0x7b, 0xe3, 0x0d, 0x53, 0x31, 0xff, 0xbb, 0x02, 0x2c, 0x6c, 0x63, 0x66, 0xd9,
+ 0x67, 0x32, 0xdb, 0x0d, 0x26, 0x82, 0x87, 0x75, 0x29, 0xe9, 0xb7, 0x12, 0xb8, 0x48, 0xc5, 0xaa,
+ 0x71, 0x62, 0xf4, 0x4a, 0xbd, 0x05, 0x55, 0x46, 0x5a, 0x89, 0x77, 0x6e, 0xc5, 0x02, 0x46, 0xc2,
+ 0x0e, 0xe6, 0x9f, 0x67, 0xe0, 0xda, 0x88, 0x61, 0x6a, 0x21, 0x76, 0xa0, 0x4a, 0xed, 0x33, 0x95,
+ 0xb0, 0xf3, 0xf8, 0xe4, 0xf7, 0xd4, 0x87, 0xb1, 0xec, 0x34, 0x3d, 0x66, 0x35, 0x22, 0x59, 0x40,
+ 0x23, 0xae, 0xf1, 0xfd, 0x34, 0x54, 0x22, 0x0e, 0x5a, 0x84, 0x12, 0xcf, 0x2e, 0xf9, 0x93, 0x45,
+ 0x86, 0x58, 0x91, 0x37, 0x77, 0x3b, 0x11, 0x9c, 0x34, 0xa5, 0xe1, 0x24, 0xb4, 0x02, 0x65, 0x1f,
+ 0x9f, 0xc9, 0x9c, 0x55, 0x18, 0xdf, 0x9c, 0x6a, 0x14, 0xac, 0x92, 0x8f, 0xcf, 0x44, 0xd6, 0xba,
+ 0x02, 0x65, 0xfe, 0x4e, 0x17, 0xec, 0x19, 0xcd, 0x26, 0x5e, 0x47, 0xb0, 0x0f, 0xa0, 0x42, 0x06,
+ 0x98, 0xda, 0x8c, 0xcf, 0x7d, 0x56, 0xa4, 0xd7, 0x9f, 0xbd, 0xe7, 0x04, 0x56, 0x0f, 0xc2, 0x81,
+ 0x96, 0x96, 0xc1, 0x7d, 0xce, 0x7d, 0xa2, 0x85, 0x4a, 0x80, 0xa6, 0x46, 0xed, 0xb3, 0xa8, 0x3f,
+ 0x8f, 0x25, 0x6e, 0x54, 0x9f, 0x74, 0xb0, 0xc8, 0xb3, 0x67, 0x85, 0x41, 0x7b, 0xa4, 0x83, 0x05,
+ 0x40, 0x83, 0xcf, 0x24, 0xab, 0x2c, 0x59, 0x3e, 0x3e, 0x13, 0xac, 0x7b, 0x70, 0x25, 0x9c, 0x69,
+ 0xab, 0x7d, 0xce, 0x4f, 0x84, 0x8a, 0xcc, 0xeb, 0xd4, 0x5c, 0x9b, 0x9c, 0xc6, 0x7b, 0x85, 0x13,
+ 0x56, 0xbd, 0x40, 0xf6, 0x52, 0x53, 0x16, 0xbd, 0x4c, 0x17, 0x2a, 0xda, 0x9c, 0x2a, 0x94, 0x5e,
+ 0xed, 0xbf, 0xd8, 0x3f, 0xf8, 0x62, 0xbf, 0x7e, 0x09, 0x55, 0x60, 0x76, 0x6d, 0x63, 0x63, 0x73,
+ 0x43, 0x66, 0xea, 0xeb, 0x07, 0x87, 0xbb, 0x9b, 0x1b, 0x32, 0x53, 0xdf, 0xd8, 0x7c, 0xb9, 0x79,
+ 0xbc, 0xb9, 0x51, 0x9f, 0x46, 0x35, 0x28, 0xef, 0x1d, 0x6c, 0xec, 0x6e, 0x71, 0xd6, 0x0c, 0x67,
+ 0x59, 0x9b, 0xfb, 0x6b, 0x7b, 0x9b, 0x1b, 0xf5, 0x59, 0x54, 0x87, 0xda, 0xf1, 0x97, 0x87, 0x9b,
+ 0xad, 0xf5, 0x9d, 0xb5, 0xfd, 0xed, 0xcd, 0x8d, 0x7a, 0xd1, 0xfc, 0x6d, 0x01, 0x1a, 0x47, 0xd8,
+ 0xa6, 0x4e, 0x6f, 0xcb, 0xf5, 0x70, 0xd0, 0x3c, 0xe7, 0xa7, 0xe9, 0xc5, 0x83, 0x7b, 0x01, 0x66,
+ 0xdf, 0x0c, 0xb1, 0x4a, 0x17, 0x2a, 0x96, 0x6c, 0x84, 0x49, 0xdc, 0xb4, 0x4e, 0xe2, 0xae, 0x43,
+ 0xb1, 0xeb, 0x7a, 0x0c, 0x53, 0xb9, 0xfc, 0x96, 0x6a, 0x99, 0x9f, 0xc1, 0x52, 0x86, 0x55, 0x3a,
+ 0xdf, 0xec, 0x72, 0xb2, 0x88, 0xe9, 0x9a, 0x25, 0x1b, 0xe6, 0x1f, 0x0b, 0x70, 0x23, 0x31, 0x66,
+ 0x9d, 0xf8, 0x0c, 0xfb, 0xec, 0xc7, 0x9b, 0xcc, 0x47, 0x50, 0x77, 0x7a, 0x43, 0xff, 0x14, 0xf3,
+ 0xcc, 0x53, 0xda, 0xaa, 0x40, 0xc3, 0xab, 0x8a, 0x1e, 0x9d, 0x27, 0xe7, 0xb0, 0x9c, 0x6d, 0xab,
+ 0x9a, 0x62, 0x03, 0x4a, 0x7d, 0x9b, 0x39, 0xbd, 0x68, 0x92, 0x61, 0x13, 0xad, 0x00, 0x88, 0xcf,
+ 0x56, 0xec, 0xf6, 0xae, 0x08, 0xca, 0x86, 0xcd, 0x6c, 0x74, 0x1b, 0x6a, 0xd8, 0xef, 0xb4, 0x48,
+ 0xb7, 0x25, 0x68, 0x0a, 0xcc, 0x04, 0xec, 0x77, 0x0e, 0xba, 0x7b, 0x9c, 0x62, 0xfe, 0xa6, 0x00,
+ 0x45, 0x09, 0xee, 0x85, 0xef, 0xf8, 0x42, 0xf4, 0x8e, 0xe7, 0x7b, 0x58, 0x5c, 0xb3, 0x72, 0xa6,
+ 0xe2, 0x1b, 0xfd, 0x2f, 0x2c, 0x45, 0x07, 0x28, 0xa1, 0xee, 0x37, 0x22, 0x2c, 0x5b, 0x3d, 0x6c,
+ 0x77, 0x30, 0x55, 0x27, 0xd2, 0x62, 0x78, 0xa0, 0x46, 0xfc, 0x1d, 0xc1, 0x46, 0x1f, 0xc0, 0x95,
+ 0xbe, 0x4b, 0x29, 0xa1, 0x2d, 0x8a, 0xbb, 0x7d, 0x7b, 0x10, 0x34, 0x66, 0xc4, 0x53, 0xf0, 0xb2,
+ 0xa4, 0x5a, 0x92, 0x68, 0x7e, 0x09, 0x2b, 0xdb, 0x98, 0x1d, 0xb4, 0x7f, 0x86, 0x1d, 0xb6, 0xe1,
+ 0x52, 0xec, 0x4c, 0x0e, 0xfe, 0xfe, 0x2f, 0xb8, 0x99, 0x27, 0x7a, 0x0c, 0x0c, 0xfe, 0x87, 0x02,
+ 0x2c, 0xac, 0x7b, 0xc4, 0xc7, 0xfc, 0x36, 0x38, 0x24, 0x64, 0x02, 0x35, 0x9f, 0xfb, 0x30, 0x33,
+ 0xe0, 0xaf, 0xf2, 0x91, 0x04, 0x5a, 0x5a, 0x26, 0x54, 0x08, 0x3e, 0xba, 0x1f, 0xe1, 0xd3, 0xd3,
+ 0x99, 0x10, 0xaf, 0xe2, 0x9a, 0x8b, 0x70, 0x6d, 0xc4, 0x42, 0x15, 0x5b, 0x7f, 0x29, 0xc0, 0x72,
+ 0x82, 0xb3, 0xeb, 0x33, 0x4c, 0x7d, 0xfb, 0x47, 0x9c, 0x43, 0x26, 0x72, 0x30, 0xfd, 0x6f, 0x20,
+ 0x07, 0xb7, 0x60, 0x25, 0x67, 0x0a, 0xba, 0xf0, 0xc3, 0xfd, 0xf1, 0x76, 0xd2, 0x60, 0x73, 0x5a,
+ 0xa8, 0x52, 0xf8, 0x8e, 0x2b, 0xf4, 0xc5, 0x31, 0x34, 0x31, 0x85, 0xe2, 0x3e, 0xc2, 0x9e, 0xcd,
+ 0xdc, 0xb7, 0x0a, 0xd7, 0x55, 0x6f, 0x80, 0x90, 0xc8, 0xaf, 0x04, 0x69, 0xd5, 0xa8, 0x66, 0x65,
+ 0xd5, 0x2f, 0x0b, 0x3c, 0x95, 0x19, 0x78, 0xae, 0x33, 0x59, 0xdc, 0x1d, 0x3d, 0x84, 0xa2, 0x5c,
+ 0x94, 0x31, 0x80, 0x8f, 0xea, 0x61, 0xae, 0xc0, 0x8d, 0x4c, 0x1b, 0x94, 0x8d, 0xaf, 0x60, 0xe9,
+ 0x60, 0xc0, 0xdc, 0xbe, 0xd8, 0x73, 0x93, 0x5b, 0xac, 0x65, 0x30, 0xb2, 0xc4, 0x4a, 0xa5, 0x4f,
+ 0xfe, 0x76, 0x53, 0x54, 0x6c, 0xc3, 0xb2, 0x97, 0x2c, 0x75, 0xa3, 0xaf, 0xa0, 0x3e, 0x5a, 0x6d,
+ 0x46, 0xb7, 0xd2, 0xda, 0x12, 0xc5, 0x6d, 0xe3, 0x76, 0x7e, 0x07, 0x35, 0xc3, 0xe2, 0x3f, 0xbf,
+ 0x7b, 0x30, 0x55, 0x9e, 0x42, 0x5f, 0x87, 0x55, 0xe2, 0x58, 0x09, 0x19, 0xc5, 0x87, 0x67, 0xd6,
+ 0xac, 0x8d, 0x3b, 0x63, 0x7a, 0x24, 0x34, 0x14, 0xd0, 0x0b, 0x00, 0x5d, 0x13, 0x46, 0x4b, 0xc9,
+ 0x81, 0xb1, 0xda, 0xb4, 0x61, 0x64, 0xb1, 0xd2, 0xc2, 0x74, 0xed, 0x57, 0x0b, 0x4b, 0x95, 0x97,
+ 0xb5, 0xb0, 0x8c, 0x52, 0x71, 0x28, 0xec, 0x0b, 0xb8, 0x92, 0xac, 0xd1, 0xa2, 0x95, 0xe8, 0xa9,
+ 0x96, 0x55, 0x49, 0x36, 0x6e, 0xe6, 0xb1, 0x47, 0x04, 0x7f, 0xa5, 0xc0, 0xd8, 0x58, 0x35, 0x56,
+ 0xaf, 0x59, 0x4e, 0xf1, 0x57, 0xaf, 0x59, 0x6e, 0x21, 0x37, 0x66, 0x77, 0xb2, 0x3c, 0xaa, 0xed,
+ 0xce, 0xac, 0xc4, 0x6a, 0xbb, 0xb3, 0xab, 0xaa, 0x51, 0x30, 0x38, 0x80, 0xd2, 0x65, 0x4d, 0x14,
+ 0xad, 0x75, 0x6e, 0x95, 0xd5, 0x30, 0xc7, 0x75, 0x19, 0xb1, 0x7e, 0x1f, 0xaa, 0xb1, 0x6a, 0x1d,
+ 0x8a, 0x16, 0x2a, 0x5d, 0x31, 0x35, 0x6e, 0x64, 0xf2, 0xd2, 0xce, 0x1e, 0xcd, 0x87, 0xb4, 0xb3,
+ 0x73, 0xaa, 0x7b, 0xda, 0xd9, 0xb9, 0x95, 0xba, 0x50, 0xfc, 0x1e, 0x80, 0x2e, 0x22, 0xe9, 0x88,
+ 0x4b, 0x95, 0xca, 0x74, 0xc4, 0xa5, 0x6b, 0x4e, 0xa1, 0x83, 0x3f, 0x15, 0xd6, 0x8e, 0x16, 0x85,
+ 0xb4, 0xb5, 0x39, 0x35, 0x28, 0x6d, 0x6d, 0x5e, 0x3d, 0x29, 0xbe, 0x9d, 0x53, 0x55, 0x16, 0xbd,
+ 0x9d, 0xf3, 0x6a, 0x4b, 0x7a, 0x3b, 0xe7, 0x96, 0x68, 0x22, 0x7f, 0xfc, 0x0f, 0xcc, 0x6c, 0x05,
+ 0xce, 0x29, 0x9a, 0x8f, 0x86, 0xe8, 0x02, 0x8d, 0xb1, 0x90, 0x24, 0x8e, 0x0c, 0xdd, 0x84, 0x72,
+ 0x58, 0xa3, 0x40, 0x8b, 0x89, 0x68, 0xd7, 0xf5, 0x16, 0xa3, 0x91, 0x66, 0x8c, 0x88, 0x39, 0x86,
+ 0xcb, 0x89, 0x02, 0x03, 0x5a, 0x8e, 0xb4, 0x66, 0xd4, 0x39, 0x8c, 0x95, 0x1c, 0xee, 0x88, 0xe7,
+ 0x5e, 0x00, 0x68, 0xe0, 0x5f, 0xaf, 0x73, 0xaa, 0x38, 0xa1, 0xd7, 0x39, 0xa3, 0x4e, 0x10, 0x9a,
+ 0xe8, 0x00, 0x4a, 0x63, 0xf7, 0x7a, 0x23, 0xe5, 0xd6, 0x12, 0xf4, 0x46, 0xca, 0x87, 0xfe, 0xe3,
+ 0xbb, 0x35, 0x8d, 0xb6, 0xc7, 0x95, 0xe4, 0xa0, 0xff, 0x71, 0x25, 0x79, 0x60, 0x7d, 0xa4, 0x84,
+ 0xa6, 0x2b, 0xe4, 0x0a, 0x25, 0x47, 0xf7, 0xf3, 0xf6, 0x50, 0x12, 0xb4, 0x37, 0x3e, 0xfc, 0xc1,
+ 0x7e, 0x23, 0xde, 0x3b, 0x82, 0x5a, 0x1c, 0x25, 0x47, 0x37, 0x92, 0x02, 0x12, 0x70, 0xa2, 0xb1,
+ 0x9c, 0xcd, 0x4c, 0x6d, 0xbc, 0x9f, 0x83, 0x91, 0x0f, 0x14, 0xa2, 0x8f, 0xc6, 0xd9, 0x98, 0x54,
+ 0xf8, 0xf0, 0x7d, 0xba, 0x26, 0x67, 0xf4, 0xa0, 0x80, 0x76, 0xa0, 0x12, 0x81, 0xd7, 0xa8, 0x91,
+ 0x07, 0xbd, 0x1b, 0x4b, 0x19, 0x9c, 0x11, 0xef, 0x7c, 0x0e, 0xb5, 0x38, 0x18, 0xad, 0xbd, 0x93,
+ 0x81, 0x83, 0x6b, 0xef, 0x64, 0xe2, 0xd7, 0xf1, 0x23, 0x59, 0xc3, 0x99, 0xb1, 0x23, 0x39, 0x85,
+ 0x99, 0xc6, 0x8e, 0xe4, 0x34, 0xfe, 0x19, 0x05, 0x4d, 0x5b, 0xfc, 0xe4, 0x90, 0xc4, 0x20, 0x51,
+ 0xfc, 0x2f, 0x83, 0x4c, 0xd0, 0x53, 0x9f, 0x42, 0xb9, 0x00, 0x66, 0x6c, 0x3d, 0xbf, 0x86, 0xb9,
+ 0x14, 0xa8, 0xa8, 0x75, 0xe4, 0xa1, 0x98, 0x5a, 0x47, 0x2e, 0x22, 0x19, 0xcd, 0xa2, 0x09, 0x25,
+ 0xf5, 0xaf, 0x13, 0xba, 0x1e, 0x8d, 0x4a, 0xfc, 0x48, 0x65, 0x2c, 0xa6, 0xe8, 0x23, 0x9e, 0x3d,
+ 0x84, 0x6a, 0x0c, 0x71, 0x44, 0xf1, 0x3b, 0x62, 0x04, 0x49, 0xd4, 0x9e, 0xcd, 0x80, 0x28, 0x63,
+ 0xf3, 0xfe, 0x05, 0x4f, 0x95, 0xc6, 0xe0, 0x7f, 0xe8, 0xe3, 0x71, 0xf1, 0x39, 0xaa, 0xf4, 0xd1,
+ 0xfb, 0x75, 0x1e, 0x99, 0xd5, 0x4f, 0xe1, 0x72, 0x02, 0xcb, 0xd2, 0x27, 0x70, 0x16, 0xe0, 0xa8,
+ 0x4f, 0xe0, 0x4c, 0x00, 0x2c, 0x36, 0xb7, 0x53, 0x58, 0xc8, 0x82, 0x18, 0xd0, 0x5d, 0xbd, 0x2b,
+ 0x72, 0xc1, 0x12, 0xe3, 0xde, 0xf8, 0x4e, 0x29, 0x65, 0x6d, 0x98, 0x4b, 0xe1, 0x35, 0x3a, 0x80,
+ 0xf2, 0x00, 0x26, 0x1d, 0x40, 0xb9, 0x60, 0x4f, 0x4c, 0x07, 0x06, 0x94, 0xae, 0xda, 0xa0, 0xd8,
+ 0xe3, 0x39, 0xa7, 0x78, 0xa4, 0x8f, 0xe8, 0x31, 0x45, 0x1f, 0x7d, 0xb8, 0xb4, 0x61, 0x2e, 0x55,
+ 0xa8, 0xd1, 0x53, 0xc9, 0xab, 0x0c, 0xe9, 0xa9, 0xe4, 0x56, 0x79, 0x62, 0x53, 0x21, 0x70, 0x3d,
+ 0x1b, 0x94, 0x40, 0x1f, 0xc4, 0x96, 0x37, 0x1f, 0x0f, 0x31, 0xee, 0xff, 0x50, 0xb7, 0x91, 0xed,
+ 0x77, 0x0c, 0x97, 0x13, 0xf9, 0xb4, 0x0e, 0xb2, 0x2c, 0x94, 0x43, 0x07, 0x59, 0x36, 0xc2, 0x10,
+ 0x86, 0xae, 0x37, 0x02, 0x41, 0x84, 0x59, 0x3a, 0xba, 0x97, 0x39, 0x7e, 0x04, 0x87, 0x30, 0x3e,
+ 0xf8, 0x81, 0x5e, 0xe9, 0xb7, 0xe9, 0x68, 0x76, 0x1e, 0x4f, 0xde, 0x32, 0xc1, 0x80, 0x78, 0xf2,
+ 0x96, 0x93, 0xd8, 0x27, 0xc4, 0x27, 0xd3, 0xec, 0xb8, 0xf8, 0xcc, 0xd4, 0x3f, 0x2e, 0x3e, 0x27,
+ 0x43, 0x0f, 0xc5, 0x77, 0x61, 0x3e, 0x23, 0x49, 0x46, 0xb1, 0xd8, 0xcc, 0xcb, 0xe2, 0x8d, 0xbb,
+ 0x63, 0xfb, 0xa4, 0x5f, 0x4b, 0xe9, 0xb4, 0x58, 0xef, 0x92, 0xdc, 0x4c, 0x5c, 0xef, 0x92, 0xfc,
+ 0xac, 0x3a, 0x54, 0xd2, 0xfc, 0xf4, 0x35, 0xef, 0xec, 0xd9, 0xed, 0x55, 0x87, 0xf4, 0x1f, 0xcb,
+ 0xcf, 0x4f, 0x08, 0x3d, 0x79, 0x2c, 0x45, 0x3c, 0x16, 0x3f, 0x8c, 0x3f, 0x3e, 0x21, 0xaa, 0x3d,
+ 0x68, 0xb7, 0x8b, 0x82, 0xf4, 0xf4, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xec, 0x1f, 0xbe, 0xb4,
+ 0x81, 0x2e, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
diff --git a/proto/repository-service.proto b/proto/repository-service.proto
index 1753363af..ed32e64f5 100644
--- a/proto/repository-service.proto
+++ b/proto/repository-service.proto
@@ -303,9 +303,18 @@ message FetchRemoteRequest {
reserved 8;
bool no_prune = 9;
Remote remote_params = 10;
+ // If check_tags_changed is true, the FetchRemote RPC will check whether any
+ // tags were modified, returning the result in the tags_changed field of
+ // FetchRemoteResponse
+ bool check_tags_changed = 11;
}
-message FetchRemoteResponse {}
+message FetchRemoteResponse {
+ // If check_tags_changed was set in the FetchRemoteRequest, the FetchRemote
+ // RPC will return false when no tags were changed, and true if tags were
+ // changed or answer cannot be determined.
+ bool tags_changed = 1;
+}
message CreateRepositoryRequest {
Repository repository = 1 [(target_repository)=true];
diff --git a/ruby/lib/gitaly_server/repository_service.rb b/ruby/lib/gitaly_server/repository_service.rb
index f2b718946..80f9098d1 100644
--- a/ruby/lib/gitaly_server/repository_service.rb
+++ b/ruby/lib/gitaly_server/repository_service.rb
@@ -43,7 +43,12 @@ module GitalyServer
raise GRPC::Unknown.new("Fetching remote #{request.remote} failed: #{gitlab_projects.output}") unless success
- Gitaly::FetchRemoteResponse.new
+ # This implementation is being replaced with a Go implementation, which
+ # correctly implements the tags_changed parameter. Pretending the tags
+ # have always changed here retains the semantics of this implementation,
+ # which will be removed once the rollout is complete:
+ # https://gitlab.com/gitlab-org/gitaly/-/issues/3307
+ Gitaly::FetchRemoteResponse.new(tags_changed: true)
ensure
repository&.remove_remote(remote_name)
end
diff --git a/ruby/proto/gitaly/repository-service_pb.rb b/ruby/proto/gitaly/repository-service_pb.rb
index c73dd9516..4eeed111d 100644
--- a/ruby/proto/gitaly/repository-service_pb.rb
+++ b/ruby/proto/gitaly/repository-service_pb.rb
@@ -68,8 +68,10 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
optional :known_hosts, :string, 7
optional :no_prune, :bool, 9
optional :remote_params, :message, 10, "gitaly.Remote"
+ optional :check_tags_changed, :bool, 11
end
add_message "gitaly.FetchRemoteResponse" do
+ optional :tags_changed, :bool, 1
end
add_message "gitaly.CreateRepositoryRequest" do
optional :repository, :message, 1, "gitaly.Repository"