Merge pull request #9298 from hexfusion/v3

*: replace grpc-gateway endpoint with /v3
This commit is contained in:
Sam Batschelet 2018-02-13 17:17:57 -05:00 committed by GitHub
commit fcd71b47d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 534 additions and 556 deletions

View File

@ -10,7 +10,7 @@ The gateway accepts a [JSON mapping][json-mapping] for etcd's [protocol buffer][
### Put and get keys
Use the `/v3beta/kv/range` and `/v3beta/kv/put` services to read and write keys:
Use the `/v3/kv/range` and `/v3/kv/put` services to read and write keys:
```bash
<<COMMENT
@ -19,40 +19,40 @@ foo is 'Zm9v' in Base64
bar is 'YmFy'
COMMENT
curl -L http://localhost:2379/v3beta/kv/put \
curl -L http://localhost:2379/v3/kv/put \
-X POST -d '{"key": "Zm9v", "value": "YmFy"}'
# {"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"2","raft_term":"3"}}
curl -L http://localhost:2379/v3beta/kv/range \
curl -L http://localhost:2379/v3/kv/range \
-X POST -d '{"key": "Zm9v"}'
# {"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"2","raft_term":"3"},"kvs":[{"key":"Zm9v","create_revision":"2","mod_revision":"2","version":"1","value":"YmFy"}],"count":"1"}
# get all keys prefixed with "foo"
curl -L http://localhost:2379/v3beta/kv/range \
curl -L http://localhost:2379/v3/kv/range \
-X POST -d '{"key": "Zm9v", "range_end": "Zm9w"}'
# {"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"2","raft_term":"3"},"kvs":[{"key":"Zm9v","create_revision":"2","mod_revision":"2","version":"1","value":"YmFy"}],"count":"1"}
```
### Watch keys
Use the `/v3beta/watch` service to watch keys:
Use the `/v3/watch` service to watch keys:
```bash
curl http://localhost:2379/v3beta/watch \
curl http://localhost:2379/v3/watch \
-X POST -d '{"create_request": {"key":"Zm9v"} }' &
# {"result":{"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"1","raft_term":"2"},"created":true}}
curl -L http://localhost:2379/v3beta/kv/put \
curl -L http://localhost:2379/v3/kv/put \
-X POST -d '{"key": "Zm9v", "value": "YmFy"}' >/dev/null 2>&1
# {"result":{"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"2","raft_term":"2"},"events":[{"kv":{"key":"Zm9v","create_revision":"2","mod_revision":"2","version":"1","value":"YmFy"}}]}}
```
### Transactions
Issue a transaction with `/v3beta/kv/txn`:
Issue a transaction with `/v3/kv/txn`:
```bash
curl -L http://localhost:2379/v3beta/kv/txn \
curl -L http://localhost:2379/v3/kv/txn \
-X POST \
-d '{"compare":[{"target":"CREATE","key":"Zm9v","createRevision":"2"}],"success":[{"requestPut":{"key":"Zm9v","value":"YmFy"}}]}'
# {"header":{"cluster_id":"12585971608760269493","member_id":"13847567121247652255","revision":"3","raft_term":"2"},"succeeded":true,"responses":[{"response_put":{"header":{"revision":"3"}}}]}
@ -60,34 +60,34 @@ curl -L http://localhost:2379/v3beta/kv/txn \
### Authentication
Set up authentication with the `/v3beta/auth` service:
Set up authentication with the `/v3/auth` service:
```bash
# create root user
curl -L http://localhost:2379/v3beta/auth/user/add \
curl -L http://localhost:2379/v3/auth/user/add \
-X POST -d '{"name": "root", "password": "pass"}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}
# create root role
curl -L http://localhost:2379/v3beta/auth/role/add \
curl -L http://localhost:2379/v3/auth/role/add \
-X POST -d '{"name": "root"}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}
# grant root role
curl -L http://localhost:2379/v3beta/auth/user/grant \
curl -L http://localhost:2379/v3/auth/user/grant \
-X POST -d '{"user": "root", "role": "root"}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}
# enable auth
curl -L http://localhost:2379/v3beta/auth/enable -X POST -d '{}'
curl -L http://localhost:2379/v3/auth/enable -X POST -d '{}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"}}
```
Authenticate with etcd for an authentication token using `/v3beta/auth/authenticate`:
Authenticate with etcd for an authentication token using `/v3/auth/authenticate`:
```bash
# get the auth token for the root user
curl -L http://localhost:2379/v3beta/auth/authenticate \
curl -L http://localhost:2379/v3/auth/authenticate \
-X POST -d '{"name": "root", "password": "pass"}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"1","raft_term":"2"},"token":"sssvIpwfnLAcWAQH.9"}
```
@ -95,7 +95,7 @@ curl -L http://localhost:2379/v3beta/auth/authenticate \
Set the `Authorization` header to the authentication token to fetch a key using authentication credentials:
```bash
curl -L http://localhost:2379/v3beta/kv/put \
curl -L http://localhost:2379/v3/kv/put \
-H 'Authorization : sssvIpwfnLAcWAQH.9' \
-X POST -d '{"key": "Zm9v", "value": "YmFy"}'
# {"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"2","raft_term":"2"}}

View File

@ -15,7 +15,7 @@
"version": "version not set"
},
"paths": {
"/v3beta/auth/authenticate": {
"/v3/auth/authenticate": {
"post": {
"tags": [
"Auth"
@ -42,7 +42,7 @@
}
}
},
"/v3beta/auth/disable": {
"/v3/auth/disable": {
"post": {
"tags": [
"Auth"
@ -69,7 +69,7 @@
}
}
},
"/v3beta/auth/enable": {
"/v3/auth/enable": {
"post": {
"tags": [
"Auth"
@ -96,7 +96,7 @@
}
}
},
"/v3beta/auth/role/add": {
"/v3/auth/role/add": {
"post": {
"tags": [
"Auth"
@ -123,7 +123,7 @@
}
}
},
"/v3beta/auth/role/delete": {
"/v3/auth/role/delete": {
"post": {
"tags": [
"Auth"
@ -150,7 +150,7 @@
}
}
},
"/v3beta/auth/role/get": {
"/v3/auth/role/get": {
"post": {
"tags": [
"Auth"
@ -177,7 +177,7 @@
}
}
},
"/v3beta/auth/role/grant": {
"/v3/auth/role/grant": {
"post": {
"tags": [
"Auth"
@ -204,7 +204,7 @@
}
}
},
"/v3beta/auth/role/list": {
"/v3/auth/role/list": {
"post": {
"tags": [
"Auth"
@ -231,7 +231,7 @@
}
}
},
"/v3beta/auth/role/revoke": {
"/v3/auth/role/revoke": {
"post": {
"tags": [
"Auth"
@ -258,7 +258,7 @@
}
}
},
"/v3beta/auth/user/add": {
"/v3/auth/user/add": {
"post": {
"tags": [
"Auth"
@ -285,7 +285,7 @@
}
}
},
"/v3beta/auth/user/changepw": {
"/v3/auth/user/changepw": {
"post": {
"tags": [
"Auth"
@ -312,7 +312,7 @@
}
}
},
"/v3beta/auth/user/delete": {
"/v3/auth/user/delete": {
"post": {
"tags": [
"Auth"
@ -339,7 +339,7 @@
}
}
},
"/v3beta/auth/user/get": {
"/v3/auth/user/get": {
"post": {
"tags": [
"Auth"
@ -366,7 +366,7 @@
}
}
},
"/v3beta/auth/user/grant": {
"/v3/auth/user/grant": {
"post": {
"tags": [
"Auth"
@ -393,7 +393,7 @@
}
}
},
"/v3beta/auth/user/list": {
"/v3/auth/user/list": {
"post": {
"tags": [
"Auth"
@ -420,7 +420,7 @@
}
}
},
"/v3beta/auth/user/revoke": {
"/v3/auth/user/revoke": {
"post": {
"tags": [
"Auth"
@ -447,7 +447,7 @@
}
}
},
"/v3beta/cluster/member/add": {
"/v3/cluster/member/add": {
"post": {
"tags": [
"Cluster"
@ -474,7 +474,7 @@
}
}
},
"/v3beta/cluster/member/list": {
"/v3/cluster/member/list": {
"post": {
"tags": [
"Cluster"
@ -501,7 +501,7 @@
}
}
},
"/v3beta/cluster/member/remove": {
"/v3/cluster/member/remove": {
"post": {
"tags": [
"Cluster"
@ -528,7 +528,7 @@
}
}
},
"/v3beta/cluster/member/update": {
"/v3/cluster/member/update": {
"post": {
"tags": [
"Cluster"
@ -555,7 +555,7 @@
}
}
},
"/v3beta/kv/compaction": {
"/v3/kv/compaction": {
"post": {
"tags": [
"KV"
@ -582,7 +582,7 @@
}
}
},
"/v3beta/kv/deleterange": {
"/v3/kv/deleterange": {
"post": {
"tags": [
"KV"
@ -609,7 +609,7 @@
}
}
},
"/v3beta/kv/lease/leases": {
"/v3/kv/lease/leases": {
"post": {
"tags": [
"Lease"
@ -636,7 +636,7 @@
}
}
},
"/v3beta/kv/lease/revoke": {
"/v3/kv/lease/revoke": {
"post": {
"tags": [
"Lease"
@ -663,7 +663,7 @@
}
}
},
"/v3beta/kv/lease/timetolive": {
"/v3/kv/lease/timetolive": {
"post": {
"tags": [
"Lease"
@ -690,7 +690,7 @@
}
}
},
"/v3beta/kv/put": {
"/v3/kv/put": {
"post": {
"tags": [
"KV"
@ -717,7 +717,7 @@
}
}
},
"/v3beta/kv/range": {
"/v3/kv/range": {
"post": {
"tags": [
"KV"
@ -744,7 +744,7 @@
}
}
},
"/v3beta/kv/txn": {
"/v3/kv/txn": {
"post": {
"tags": [
"KV"
@ -771,7 +771,7 @@
}
}
},
"/v3beta/lease/grant": {
"/v3/lease/grant": {
"post": {
"tags": [
"Lease"
@ -798,7 +798,7 @@
}
}
},
"/v3beta/lease/keepalive": {
"/v3/lease/keepalive": {
"post": {
"tags": [
"Lease"
@ -826,7 +826,7 @@
}
}
},
"/v3beta/maintenance/alarm": {
"/v3/maintenance/alarm": {
"post": {
"tags": [
"Maintenance"
@ -853,7 +853,7 @@
}
}
},
"/v3beta/maintenance/defragment": {
"/v3/maintenance/defragment": {
"post": {
"tags": [
"Maintenance"
@ -880,7 +880,7 @@
}
}
},
"/v3beta/maintenance/hash": {
"/v3/maintenance/hash": {
"post": {
"tags": [
"Maintenance"
@ -907,7 +907,7 @@
}
}
},
"/v3beta/maintenance/snapshot": {
"/v3/maintenance/snapshot": {
"post": {
"tags": [
"Maintenance"
@ -934,7 +934,7 @@
}
}
},
"/v3beta/maintenance/status": {
"/v3/maintenance/status": {
"post": {
"tags": [
"Maintenance"
@ -961,7 +961,7 @@
}
}
},
"/v3beta/maintenance/transfer-leadership": {
"/v3/maintenance/transfer-leadership": {
"post": {
"tags": [
"Maintenance"
@ -988,7 +988,7 @@
}
}
},
"/v3beta/watch": {
"/v3/watch": {
"post": {
"tags": [
"Watch"

View File

@ -15,7 +15,7 @@
"application/json"
],
"paths": {
"/v3beta/election/campaign": {
"/v3/election/campaign": {
"post": {
"summary": "Campaign waits to acquire leadership in an election, returning a LeaderKey\nrepresenting the leadership if successful. The LeaderKey can then be used\nto issue new values on the election, transactionally guard API requests on\nleadership still being held, and resign from the election.",
"operationId": "Campaign",
@ -42,7 +42,7 @@
]
}
},
"/v3beta/election/leader": {
"/v3/election/leader": {
"post": {
"summary": "Leader returns the current election proclamation, if any.",
"operationId": "Leader",
@ -69,7 +69,7 @@
]
}
},
"/v3beta/election/observe": {
"/v3/election/observe": {
"post": {
"summary": "Observe streams election proclamations in-order as made by the election's\nelected leaders.",
"operationId": "Observe",
@ -96,7 +96,7 @@
]
}
},
"/v3beta/election/proclaim": {
"/v3/election/proclaim": {
"post": {
"summary": "Proclaim updates the leader's posted value with a new value.",
"operationId": "Proclaim",
@ -123,7 +123,7 @@
]
}
},
"/v3beta/election/resign": {
"/v3/election/resign": {
"post": {
"summary": "Resign releases election leadership so other campaigners may acquire\nleadership on the election.",
"operationId": "Resign",

View File

@ -15,7 +15,7 @@
"application/json"
],
"paths": {
"/v3beta/lock/lock": {
"/v3/lock/lock": {
"post": {
"summary": "Lock acquires a distributed shared lock on a given named lock.\nOn success, it will return a unique key that exists so long as the\nlock is held by the caller. This key can be used in conjunction with\ntransactions to safely ensure updates to etcd only occur while holding\nlock ownership. The lock is held until Unlock is called on the key or the\nlease associate with the owner expires.",
"operationId": "Lock",
@ -42,7 +42,7 @@
]
}
},
"/v3beta/lock/unlock": {
"/v3/lock/unlock": {
"post": {
"summary": "Unlock takes a key returned by Lock and releases the hold on lock. The\nnext Lock caller waiting for the lock will then be woken up and given\nownership of the lock.",
"operationId": "Unlock",

View File

@ -53,6 +53,7 @@ func dialWithSchemeTest(cx ctlCtx) {
type ctlCtx struct {
t *testing.T
apiPrefix string
cfg etcdProcessClusterConfig
quotaBackendBytes int64
corruptFunc func(string) error
@ -121,6 +122,10 @@ func withNoStrictReconfig() ctlOption {
return func(cx *ctlCtx) { cx.noStrictReconfig = true }
}
func withApiPrefix(p string) ctlOption {
return func(cx *ctlCtx) { cx.apiPrefix = p }
}
func withFlagByEnv() ctlOption {
return func(cx *ctlCtx) { cx.envMap = make(map[string]struct{}) }
}

View File

@ -25,43 +25,51 @@ import (
"github.com/grpc-ecosystem/grpc-gateway/runtime"
)
// TODO: remove /v3alpha tests in 3.4 release
// TODO: remove /v3beta tests in 3.5 release
var apiPrefix = []string{"/v3", "/v3beta"}
func TestV3CurlPutGetNoTLSAlpha(t *testing.T) { testCurlPutGetGRPCGateway(t, &configNoTLS, "/v3alpha") }
func TestV3CurlPutGetNoTLSBeta(t *testing.T) { testCurlPutGetGRPCGateway(t, &configNoTLS, "/v3beta") }
func TestV3CurlPutGetAutoTLSAlpha(t *testing.T) {
testCurlPutGetGRPCGateway(t, &configAutoTLS, "/v3alpha")
}
func TestV3CurlPutGetAutoTLSBeta(t *testing.T) {
testCurlPutGetGRPCGateway(t, &configAutoTLS, "/v3beta")
}
func TestV3CurlPutGetAllTLSAlpha(t *testing.T) { testCurlPutGetGRPCGateway(t, &configTLS, "/v3alpha") }
func TestV3CurlPutGetAllTLSBeta(t *testing.T) { testCurlPutGetGRPCGateway(t, &configTLS, "/v3beta") }
func TestV3CurlPutGetPeerTLSAlpha(t *testing.T) {
testCurlPutGetGRPCGateway(t, &configPeerTLS, "/v3alpha")
}
func TestV3CurlPutGetPeerTLSBeta(t *testing.T) {
testCurlPutGetGRPCGateway(t, &configPeerTLS, "/v3beta")
}
func TestV3CurlPutGetClientTLSAlpha(t *testing.T) {
testCurlPutGetGRPCGateway(t, &configClientTLS, "/v3alpha")
}
func TestV3CurlPutGetClientTLSBeta(t *testing.T) {
testCurlPutGetGRPCGateway(t, &configClientTLS, "/v3beta")
}
func testCurlPutGetGRPCGateway(t *testing.T, cfg *etcdProcessClusterConfig, pathPrefix string) {
defer testutil.AfterTest(t)
epc, err := newEtcdProcessCluster(cfg)
if err != nil {
t.Fatalf("could not start etcd process cluster (%v)", err)
func TestV3CurlPutGetNoTLS(t *testing.T) {
for _, p := range apiPrefix {
testCtl(t, testV3CurlPutGet, withApiPrefix(p), withCfg(configNoTLS))
}
defer func() {
if cerr := epc.Close(); err != nil {
t.Fatalf("error closing etcd processes (%v)", cerr)
}
}()
}
func TestV3CurlPutGetAutoTLS(t *testing.T) {
for _, p := range apiPrefix {
testCtl(t, testV3CurlPutGet, withApiPrefix(p), withCfg(configAutoTLS))
}
}
func TestV3CurlPutGetAllTLS(t *testing.T) {
for _, p := range apiPrefix {
testCtl(t, testV3CurlPutGet, withApiPrefix(p), withCfg(configTLS))
}
}
func TestV3CurlPutGetPeerTLS(t *testing.T) {
for _, p := range apiPrefix {
testCtl(t, testV3CurlPutGet, withApiPrefix(p), withCfg(configPeerTLS))
}
}
func TestV3CurlPutGetClientTLS(t *testing.T) {
for _, p := range apiPrefix {
testCtl(t, testV3CurlPutGet, withApiPrefix(p), withCfg(configClientTLS))
}
}
func TestV3CurlWatch(t *testing.T) {
for _, p := range apiPrefix {
testCtl(t, testV3CurlWatch, withApiPrefix(p))
}
}
func TestV3CurlTxn(t *testing.T) {
for _, p := range apiPrefix {
testCtl(t, testV3CurlTxn, withApiPrefix(p))
}
}
func TestV3CurlAuth(t *testing.T) {
for _, p := range apiPrefix {
testCtl(t, testV3CurlAuth, withApiPrefix(p))
}
}
func testV3CurlPutGet(cx ctlCtx) {
var (
key = []byte("foo")
value = []byte("bar") // this will be automatically base64-encoded by Go
@ -74,82 +82,58 @@ func testCurlPutGetGRPCGateway(t *testing.T, cfg *etcdProcessClusterConfig, path
Value: value,
})
if err != nil {
t.Fatal(err)
cx.t.Fatal(err)
}
rangeData, err := json.Marshal(&pb.RangeRequest{
Key: key,
})
if err != nil {
t.Fatal(err)
cx.t.Fatal(err)
}
if err := cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/kv/put"), value: string(putData), expected: expectPut}); err != nil {
t.Fatalf("failed put with curl (%v)", err)
}
if err := cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/kv/range"), value: string(rangeData), expected: expectGet}); err != nil {
t.Fatalf("failed get with curl (%v)", err)
}
p := cx.apiPrefix
if cfg.clientTLS == clientTLSAndNonTLS {
if err := cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/kv/range"), value: string(rangeData), expected: expectGet, isTLS: true}); err != nil {
t.Fatalf("failed get with curl (%v)", err)
if err := cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/kv/put"), value: string(putData), expected: expectPut}); err != nil {
cx.t.Fatalf("failed testV3CurlPutGet put with curl using prefix (%s) (%v)", p, err)
}
if err := cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/kv/range"), value: string(rangeData), expected: expectGet}); err != nil {
cx.t.Fatalf("failed testV3CurlPutGet get with curl using prefix (%s) (%v)", p, err)
}
if cx.cfg.clientTLS == clientTLSAndNonTLS {
if err := cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/kv/range"), value: string(rangeData), expected: expectGet, isTLS: true}); err != nil {
cx.t.Fatalf("failed testV3CurlPutGet get with curl using prefix (%s) (%v)", p, err)
}
}
}
func TestV3CurlWatchAlpha(t *testing.T) { testV3CurlWatch(t, "/v3alpha") }
func TestV3CurlWatchBeta(t *testing.T) { testV3CurlWatch(t, "/v3beta") }
func testV3CurlWatch(t *testing.T, pathPrefix string) {
defer testutil.AfterTest(t)
epc, err := newEtcdProcessCluster(&configNoTLS)
if err != nil {
t.Fatalf("could not start etcd process cluster (%v)", err)
}
defer func() {
if cerr := epc.Close(); err != nil {
t.Fatalf("error closing etcd processes (%v)", cerr)
}
}()
func testV3CurlWatch(cx ctlCtx) {
// store "bar" into "foo"
putreq, err := json.Marshal(&pb.PutRequest{Key: []byte("foo"), Value: []byte("bar")})
if err != nil {
t.Fatal(err)
}
if err = cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/kv/put"), value: string(putreq), expected: "revision"}); err != nil {
t.Fatalf("failed put with curl (%v)", err)
cx.t.Fatal(err)
}
// watch for first update to "foo"
wcr := &pb.WatchCreateRequest{Key: []byte("foo"), StartRevision: 1}
wreq, err := json.Marshal(wcr)
if err != nil {
t.Fatal(err)
cx.t.Fatal(err)
}
// marshaling the grpc to json gives:
// "{"RequestUnion":{"CreateRequest":{"key":"Zm9v","start_revision":1}}}"
// but the gprc-gateway expects a different format..
wstr := `{"create_request" : ` + string(wreq) + "}"
p := cx.apiPrefix
if err = cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/kv/put"), value: string(putreq), expected: "revision"}); err != nil {
cx.t.Fatalf("failed testV3CurlWatch put with curl using prefix (%s) (%v)", p, err)
}
// expects "bar", timeout after 2 seconds since stream waits forever
if err = cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/watch"), value: wstr, expected: `"YmFy"`, timeout: 2}); err != nil {
t.Fatal(err)
if err = cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/watch"), value: wstr, expected: `"YmFy"`, timeout: 2}); err != nil {
cx.t.Fatalf("failed testV3CurlWatch watch with curl using prefix (%s) (%v)", p, err)
}
}
func TestV3CurlTxnAlpha(t *testing.T) { testV3CurlTxn(t, "/v3alpha") }
func TestV3CurlTxnBeta(t *testing.T) { testV3CurlTxn(t, "/v3beta") }
func testV3CurlTxn(t *testing.T, pathPrefix string) {
defer testutil.AfterTest(t)
epc, err := newEtcdProcessCluster(&configNoTLS)
if err != nil {
t.Fatalf("could not start etcd process cluster (%v)", err)
}
defer func() {
if cerr := epc.Close(); err != nil {
t.Fatalf("error closing etcd processes (%v)", cerr)
}
}()
func testV3CurlTxn(cx ctlCtx) {
txn := &pb.TxnRequest{
Compare: []*pb.Compare{
{
@ -173,75 +157,65 @@ func testV3CurlTxn(t *testing.T, pathPrefix string) {
m := &runtime.JSONPb{}
jsonDat, jerr := m.Marshal(txn)
if jerr != nil {
t.Fatal(jerr)
cx.t.Fatal(jerr)
}
expected := `"succeeded":true,"responses":[{"response_put":{"header":{"revision":"2"}}}]`
if err = cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/kv/txn"), value: string(jsonDat), expected: expected}); err != nil {
t.Fatalf("failed txn with curl (%v)", err)
p := cx.apiPrefix
if err := cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/kv/txn"), value: string(jsonDat), expected: expected}); err != nil {
cx.t.Fatalf("failed testV3CurlTxn txn with curl using prefix (%s) (%v)", p, err)
}
// was crashing etcd server
malformed := `{"compare":[{"result":0,"target":1,"key":"Zm9v","TargetUnion":null}],"success":[{"Request":{"RequestPut":{"key":"Zm9v","value":"YmFy"}}}]}`
if err = cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/kv/txn"), value: malformed, expected: "error"}); err != nil {
t.Fatalf("failed put with curl (%v)", err)
if err := cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/kv/txn"), value: malformed, expected: "error"}); err != nil {
cx.t.Fatalf("failed testV3CurlTxn put with curl using prefix (%s) (%v)", p, err)
}
}
func TestV3CurlAuthAlpha(t *testing.T) { testV3CurlAuth(t, "/v3alpha") }
func TestV3CurlAuthBeta(t *testing.T) { testV3CurlAuth(t, "/v3beta") }
func testV3CurlAuth(t *testing.T, pathPrefix string) {
defer testutil.AfterTest(t)
epc, err := newEtcdProcessCluster(&configNoTLS)
if err != nil {
t.Fatalf("could not start etcd process cluster (%v)", err)
}
defer func() {
if cerr := epc.Close(); err != nil {
t.Fatalf("error closing etcd processes (%v)", cerr)
}
}()
func testV3CurlAuth(cx ctlCtx) {
// create root user
userreq, err := json.Marshal(&pb.AuthUserAddRequest{Name: string("root"), Password: string("toor")})
testutil.AssertNil(t, err)
testutil.AssertNil(cx.t, err)
if err = cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/auth/user/add"), value: string(userreq), expected: "revision"}); err != nil {
t.Fatalf("failed add user with curl (%v)", err)
p := cx.apiPrefix
if err = cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/auth/user/add"), value: string(userreq), expected: "revision"}); err != nil {
cx.t.Fatalf("failed testV3CurlAuth add user with curl (%v)", err)
}
// create root role
rolereq, err := json.Marshal(&pb.AuthRoleAddRequest{Name: string("root")})
testutil.AssertNil(t, err)
testutil.AssertNil(cx.t, err)
if err = cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/auth/role/add"), value: string(rolereq), expected: "revision"}); err != nil {
t.Fatalf("failed create role with curl (%v)", err)
if err = cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/auth/role/add"), value: string(rolereq), expected: "revision"}); err != nil {
cx.t.Fatalf("failed testV3CurlAuth create role with curl using prefix (%s) (%v)", p, err)
}
// grant root role
grantrolereq, err := json.Marshal(&pb.AuthUserGrantRoleRequest{User: string("root"), Role: string("root")})
testutil.AssertNil(t, err)
testutil.AssertNil(cx.t, err)
if err = cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/auth/user/grant"), value: string(grantrolereq), expected: "revision"}); err != nil {
t.Fatalf("failed grant role with curl (%v)", err)
if err = cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/auth/user/grant"), value: string(grantrolereq), expected: "revision"}); err != nil {
cx.t.Fatalf("failed testV3CurlAuth grant role with curl using prefix (%s) (%v)", p, err)
}
// enable auth
if err = cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/auth/enable"), value: string("{}"), expected: "revision"}); err != nil {
t.Fatalf("failed enable auth with curl (%v)", err)
if err = cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/auth/enable"), value: string("{}"), expected: "revision"}); err != nil {
cx.t.Fatalf("failed testV3CurlAuth enable auth with curl using prefix (%s) (%v)", p, err)
}
// put "bar" into "foo"
putreq, err := json.Marshal(&pb.PutRequest{Key: []byte("foo"), Value: []byte("bar")})
testutil.AssertNil(t, err)
testutil.AssertNil(cx.t, err)
// fail put no auth
if err = cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/kv/put"), value: string(putreq), expected: "error"}); err != nil {
t.Fatalf("failed no auth put with curl (%v)", err)
if err = cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/kv/put"), value: string(putreq), expected: "error"}); err != nil {
cx.t.Fatalf("failed testV3CurlAuth no auth put with curl using prefix (%s) (%v)", p, err)
}
// auth request
authreq, err := json.Marshal(&pb.AuthenticateRequest{Name: string("root"), Password: string("toor")})
testutil.AssertNil(t, err)
testutil.AssertNil(cx.t, err)
var (
authHeader string
@ -249,25 +223,25 @@ func testV3CurlAuth(t *testing.T, pathPrefix string) {
lineFunc = func(txt string) bool { return true }
)
cmdArgs = cURLPrefixArgs(epc, "POST", cURLReq{endpoint: path.Join(pathPrefix, "/auth/authenticate"), value: string(authreq)})
cmdArgs = cURLPrefixArgs(cx.epc, "POST", cURLReq{endpoint: path.Join(p, "/auth/authenticate"), value: string(authreq)})
proc, err := spawnCmd(cmdArgs)
testutil.AssertNil(t, err)
testutil.AssertNil(cx.t, err)
cURLRes, err := proc.ExpectFunc(lineFunc)
testutil.AssertNil(t, err)
testutil.AssertNil(cx.t, err)
authRes := make(map[string]interface{})
testutil.AssertNil(t, json.Unmarshal([]byte(cURLRes), &authRes))
testutil.AssertNil(cx.t, json.Unmarshal([]byte(cURLRes), &authRes))
token, ok := authRes["token"].(string)
if !ok {
t.Fatalf("failed invalid token in authenticate response with curl")
cx.t.Fatalf("failed invalid token in authenticate response with curl")
}
authHeader = "Authorization : " + token
// put with auth
if err = cURLPost(epc, cURLReq{endpoint: path.Join(pathPrefix, "/kv/put"), value: string(putreq), header: authHeader, expected: "revision"}); err != nil {
t.Fatalf("failed auth put with curl (%v)", err)
if err = cURLPost(cx.epc, cURLReq{endpoint: path.Join(p, "/kv/put"), value: string(putreq), header: authHeader, expected: "revision"}); err != nil {
cx.t.Fatalf("failed testV3CurlAuth auth put with curl using prefix (%s) (%v)", p, err)
}
}

View File

@ -230,7 +230,7 @@ func (sctx *serveCtx) createMux(gwmux *gw.ServeMux, handler http.Handler) *http.
}
httpmux.Handle(
"/v3beta/",
"/v3/",
wsproxy.WebsocketProxy(
gwmux,
wsproxy.WithRequestMutator(
@ -248,8 +248,8 @@ func (sctx *serveCtx) createMux(gwmux *gw.ServeMux, handler http.Handler) *http.
return httpmux
}
// wraps HTTP multiplexer to mute requests to /v3alpha
// TODO: deprecate this in 3.4 release
// wraps HTTP multiplexer to mute requests to /v3beta
// TODO: deprecate this in 3.5 release
func wrapMux(mux *http.ServeMux) http.Handler { return &v3alphaMutator{mux: mux} }
type v3alphaMutator struct {
@ -257,8 +257,8 @@ type v3alphaMutator struct {
}
func (m *v3alphaMutator) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
if req != nil && req.URL != nil && strings.HasPrefix(req.URL.Path, "/v3alpha/") {
req.URL.Path = strings.Replace(req.URL.Path, "/v3alpha/", "/v3beta/", 1)
if req != nil && req.URL != nil && strings.HasPrefix(req.URL.Path, "/v3beta/") {
req.URL.Path = strings.Replace(req.URL.Path, "/v3beta/", "/v3/", 1)
}
m.mux.ServeHTTP(rw, req)
}

View File

@ -289,15 +289,15 @@ func RegisterElectionHandlerClient(ctx context.Context, mux *runtime.ServeMux, c
}
var (
pattern_Election_Campaign_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "election", "campaign"}, ""))
pattern_Election_Campaign_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "election", "campaign"}, ""))
pattern_Election_Proclaim_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "election", "proclaim"}, ""))
pattern_Election_Proclaim_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "election", "proclaim"}, ""))
pattern_Election_Leader_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "election", "leader"}, ""))
pattern_Election_Leader_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "election", "leader"}, ""))
pattern_Election_Observe_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "election", "observe"}, ""))
pattern_Election_Observe_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "election", "observe"}, ""))
pattern_Election_Resign_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "election", "resign"}, ""))
pattern_Election_Resign_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "election", "resign"}, ""))
)
var (

View File

@ -2041,39 +2041,39 @@ var (
func init() { proto.RegisterFile("v3election.proto", fileDescriptorV3Election) }
var fileDescriptorV3Election = []byte{
// 544 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xc1, 0x6e, 0xd3, 0x40,
0x10, 0x65, 0x9d, 0x10, 0xca, 0x90, 0xb6, 0x96, 0x55, 0xa9, 0x21, 0xa4, 0x56, 0xb4, 0x45, 0xa8,
0xca, 0xc1, 0x8b, 0x1a, 0x4e, 0x39, 0x21, 0x10, 0xa8, 0x52, 0x91, 0x00, 0x1f, 0x10, 0x1c, 0xd7,
0xee, 0xc8, 0x8d, 0xe2, 0x78, 0x8d, 0xed, 0x5a, 0xca, 0x95, 0x5f, 0xe0, 0xc2, 0x3f, 0xf0, 0x23,
0x1c, 0x91, 0xf8, 0x01, 0x14, 0xf8, 0x10, 0xb4, 0xbb, 0x36, 0x76, 0xdc, 0x10, 0xa1, 0xe6, 0x62,
0x8d, 0x67, 0x9e, 0xe7, 0xcd, 0x7b, 0x3b, 0x6b, 0x30, 0xf3, 0x31, 0x86, 0xe8, 0x67, 0x53, 0x11,
0x39, 0x71, 0x22, 0x32, 0x61, 0x75, 0xab, 0x4c, 0xec, 0xf5, 0x0f, 0x02, 0x11, 0x08, 0x55, 0x60,
0x32, 0xd2, 0x98, 0xfe, 0x23, 0xcc, 0xfc, 0x0b, 0x26, 0x1f, 0x29, 0x26, 0x39, 0x26, 0xb5, 0x30,
0xf6, 0x58, 0x12, 0xfb, 0x05, 0x8e, 0x2a, 0xdc, 0x34, 0xca, 0x30, 0x89, 0x78, 0xc8, 0xe6, 0xb9,
0xef, 0xab, 0x47, 0xec, 0xb1, 0x59, 0x5e, 0x60, 0x06, 0x81, 0x10, 0x41, 0x88, 0x8c, 0xc7, 0x53,
0xc6, 0xa3, 0x48, 0x64, 0x5c, 0x52, 0xa7, 0xba, 0x4a, 0xdf, 0xc2, 0xfe, 0x73, 0x3e, 0x8f, 0xf9,
0x34, 0x88, 0x5c, 0xfc, 0x78, 0x85, 0x69, 0x66, 0x59, 0xd0, 0x8e, 0xf8, 0x1c, 0x7b, 0x64, 0x48,
0x4e, 0xba, 0xae, 0x8a, 0xad, 0x03, 0xb8, 0x1d, 0x22, 0x4f, 0xb1, 0x67, 0x0c, 0xc9, 0x49, 0xcb,
0xd5, 0x2f, 0x32, 0x9b, 0xf3, 0xf0, 0x0a, 0x7b, 0x2d, 0x05, 0xd5, 0x2f, 0x74, 0x01, 0x66, 0xd5,
0x32, 0x8d, 0x45, 0x94, 0xa2, 0xf5, 0x04, 0x3a, 0x97, 0xc8, 0x2f, 0x30, 0x51, 0x5d, 0xef, 0x9d,
0x0e, 0x9c, 0xba, 0x22, 0xa7, 0xc4, 0x9d, 0x29, 0x8c, 0x5b, 0x60, 0x2d, 0x06, 0x9d, 0x50, 0x7f,
0x65, 0xa8, 0xaf, 0x0e, 0x9d, 0xba, 0x77, 0xce, 0x2b, 0x55, 0x3b, 0xc7, 0x85, 0x5b, 0xc0, 0xe8,
0x07, 0xb8, 0xfb, 0x37, 0xb9, 0x56, 0x87, 0x09, 0xad, 0x19, 0x2e, 0x54, 0xbb, 0xae, 0x2b, 0x43,
0x99, 0x49, 0x30, 0x57, 0x0a, 0x5a, 0xae, 0x0c, 0x2b, 0xad, 0xed, 0x9a, 0x56, 0x7a, 0x0c, 0xbb,
0xba, 0xf5, 0x06, 0x9b, 0xe8, 0x25, 0xec, 0x95, 0xa0, 0xad, 0x84, 0x0f, 0xc1, 0x98, 0xe5, 0x85,
0x68, 0xd3, 0xd1, 0x27, 0xea, 0x9c, 0xe3, 0xe2, 0x9d, 0x34, 0xd8, 0x35, 0x66, 0x39, 0x7d, 0x0a,
0xbb, 0x2e, 0xa6, 0xb5, 0x53, 0xab, 0xbc, 0x22, 0xff, 0xe7, 0xd5, 0x4b, 0xd8, 0x2b, 0x3b, 0x6c,
0x33, 0x2b, 0x7d, 0x0f, 0xfb, 0x6f, 0x12, 0xe1, 0x87, 0x7c, 0x3a, 0xbf, 0xe9, 0x2c, 0xd5, 0x22,
0x19, 0xf5, 0x45, 0x3a, 0x03, 0xb3, 0xea, 0xbc, 0xcd, 0x8c, 0xa7, 0x5f, 0xdb, 0xb0, 0xf3, 0xa2,
0x18, 0xc0, 0x12, 0xb0, 0x53, 0xee, 0xa7, 0x75, 0xb4, 0x3a, 0x59, 0xe3, 0x2a, 0xf4, 0xed, 0x7f,
0x95, 0x35, 0x0b, 0x7d, 0xf8, 0xe9, 0xc7, 0xef, 0xcf, 0x86, 0x4d, 0xef, 0xb3, 0x7c, 0xec, 0x61,
0xc6, 0x59, 0x09, 0x66, 0x7e, 0x01, 0x9d, 0x90, 0x91, 0x24, 0x2c, 0x75, 0x34, 0x09, 0x1b, 0xce,
0x35, 0x09, 0x9b, 0xf2, 0x37, 0x10, 0xc6, 0x05, 0x54, 0x12, 0x06, 0xd0, 0xd1, 0x1e, 0x5b, 0x0f,
0xd6, 0x39, 0x5f, 0x92, 0x0d, 0xd6, 0x17, 0x0b, 0x2a, 0xaa, 0xa8, 0x06, 0xf4, 0xf0, 0x1a, 0x95,
0x3e, 0x34, 0x49, 0x34, 0x83, 0x3b, 0xaf, 0x3d, 0x65, 0xfe, 0x36, 0x4c, 0xc7, 0x8a, 0xe9, 0x88,
0xf6, 0xae, 0x31, 0x09, 0xdd, 0x7c, 0x42, 0x46, 0x8f, 0x89, 0x54, 0xa5, 0x17, 0xb6, 0xc9, 0xb5,
0x72, 0x11, 0x9a, 0x5c, 0xab, 0x3b, 0xbe, 0x41, 0x55, 0xa2, 0x80, 0x13, 0x32, 0x7a, 0x66, 0x7e,
0x5b, 0xda, 0xe4, 0xfb, 0xd2, 0x26, 0x3f, 0x97, 0x36, 0xf9, 0xf2, 0xcb, 0xbe, 0xe5, 0x75, 0xd4,
0xcf, 0x72, 0xfc, 0x27, 0x00, 0x00, 0xff, 0xff, 0x10, 0xc5, 0xc8, 0x9a, 0xce, 0x05, 0x00, 0x00,
// 541 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0xcf, 0x6e, 0xd3, 0x40,
0x10, 0xc6, 0x59, 0xa7, 0x84, 0x32, 0xa4, 0xad, 0x65, 0x82, 0x08, 0x21, 0x98, 0x68, 0x91, 0x50,
0x95, 0x83, 0x17, 0x35, 0x9c, 0x72, 0x42, 0x20, 0x50, 0xa5, 0x22, 0x01, 0x3e, 0x20, 0x38, 0x6e,
0xdc, 0x91, 0x1b, 0xd9, 0xf1, 0x1a, 0xdb, 0xb5, 0x94, 0x2b, 0xaf, 0xc0, 0x01, 0x1e, 0x89, 0x23,
0x12, 0x2f, 0x80, 0x02, 0x0f, 0x82, 0x76, 0xd7, 0xc6, 0x7f, 0x94, 0x20, 0x44, 0x2e, 0xd6, 0x78,
0xe7, 0xf3, 0xfc, 0xe6, 0x9b, 0x9d, 0x04, 0xcc, 0x7c, 0x8a, 0x21, 0x7a, 0xd9, 0x42, 0x44, 0x4e,
0x9c, 0x88, 0x4c, 0x58, 0xbd, 0xea, 0x24, 0x9e, 0x0f, 0xfb, 0xbe, 0xf0, 0x85, 0x4a, 0x30, 0x19,
0x69, 0xcd, 0xf0, 0x21, 0x66, 0xde, 0x39, 0x93, 0x8f, 0x14, 0x93, 0x1c, 0x93, 0x5a, 0x18, 0xcf,
0x59, 0x12, 0x7b, 0x85, 0x8e, 0x2a, 0xdd, 0x22, 0xca, 0x30, 0x89, 0x78, 0xc8, 0x96, 0xb9, 0xe7,
0xa9, 0x47, 0x3c, 0x67, 0x41, 0x5e, 0x68, 0x46, 0xbe, 0x10, 0x7e, 0x88, 0x8c, 0xc7, 0x0b, 0xc6,
0xa3, 0x48, 0x64, 0x5c, 0xa2, 0x53, 0x9d, 0xa5, 0x6f, 0xe0, 0xe8, 0x19, 0x5f, 0xc6, 0x7c, 0xe1,
0x47, 0x2e, 0x7e, 0xb8, 0xc4, 0x34, 0xb3, 0x2c, 0xd8, 0x8b, 0xf8, 0x12, 0x07, 0x64, 0x4c, 0x8e,
0x7b, 0xae, 0x8a, 0xad, 0x3e, 0x5c, 0x0d, 0x91, 0xa7, 0x38, 0x30, 0xc6, 0xe4, 0xb8, 0xe3, 0xea,
0x17, 0x79, 0x9a, 0xf3, 0xf0, 0x12, 0x07, 0x1d, 0x25, 0xd5, 0x2f, 0x74, 0x05, 0x66, 0x55, 0x32,
0x8d, 0x45, 0x94, 0xa2, 0xf5, 0x18, 0xba, 0x17, 0xc8, 0xcf, 0x31, 0x51, 0x55, 0x6f, 0x9c, 0x8c,
0x9c, 0xba, 0x23, 0xa7, 0xd4, 0x9d, 0x2a, 0x8d, 0x5b, 0x68, 0x2d, 0x06, 0xdd, 0x50, 0x7f, 0x65,
0xa8, 0xaf, 0x6e, 0x3b, 0xf5, 0xd9, 0x39, 0x2f, 0x55, 0xee, 0x0c, 0x57, 0x6e, 0x21, 0xa3, 0xef,
0xe1, 0xfa, 0x9f, 0xc3, 0x8d, 0x3e, 0x4c, 0xe8, 0x04, 0xb8, 0x52, 0xe5, 0x7a, 0xae, 0x0c, 0xe5,
0x49, 0x82, 0xb9, 0x72, 0xd0, 0x71, 0x65, 0x58, 0x79, 0xdd, 0xab, 0x79, 0xa5, 0x0f, 0xe0, 0x40,
0x97, 0xfe, 0xcb, 0x98, 0xe8, 0x05, 0x1c, 0x96, 0xa2, 0x9d, 0x8c, 0x8f, 0xc1, 0x08, 0xf2, 0xc2,
0xb4, 0xe9, 0xe8, 0x1b, 0x75, 0xce, 0x70, 0xf5, 0x56, 0x0e, 0xd8, 0x35, 0x82, 0x9c, 0x3e, 0x81,
0x03, 0x17, 0xd3, 0xda, 0xad, 0x55, 0xb3, 0x22, 0xff, 0x36, 0xab, 0x17, 0x70, 0x58, 0x56, 0xd8,
0xa5, 0x57, 0xfa, 0x0e, 0x8e, 0x5e, 0x27, 0xc2, 0x0b, 0xf9, 0x62, 0xf9, 0xbf, 0xbd, 0x54, 0x8b,
0x64, 0xd4, 0x17, 0xe9, 0x14, 0xcc, 0xaa, 0xf2, 0x2e, 0x3d, 0x9e, 0x7c, 0xde, 0x83, 0xfd, 0xe7,
0x45, 0x03, 0x56, 0x00, 0xfb, 0xe5, 0x7e, 0x5a, 0xf7, 0x9a, 0x9d, 0xb5, 0x7e, 0x0a, 0x43, 0x7b,
0x5b, 0x5a, 0x53, 0xe8, 0xf8, 0xe3, 0xf7, 0x5f, 0x9f, 0x8c, 0x21, 0xbd, 0xc5, 0xf2, 0x29, 0x2b,
0x85, 0xcc, 0x2b, 0x64, 0x33, 0x32, 0x91, 0xb0, 0xd2, 0x43, 0x1b, 0xd6, 0x9a, 0x5a, 0x1b, 0xd6,
0xb6, 0xbe, 0x05, 0x16, 0x17, 0x32, 0x09, 0xf3, 0xa0, 0xab, 0x67, 0x6b, 0xdd, 0xdd, 0x34, 0xf1,
0x12, 0x34, 0xda, 0x9c, 0x2c, 0x30, 0xb6, 0xc2, 0x0c, 0xe8, 0xcd, 0x06, 0x46, 0x5f, 0x94, 0x84,
0xf8, 0x70, 0xed, 0xd5, 0x5c, 0x0d, 0x7c, 0x17, 0xca, 0x7d, 0x45, 0xb9, 0x43, 0xfb, 0x0d, 0x8a,
0xd0, 0x85, 0x67, 0x64, 0xf2, 0x88, 0x48, 0x37, 0x7a, 0x41, 0xdb, 0x9c, 0xc6, 0xe2, 0xb7, 0x39,
0xcd, 0x9d, 0xde, 0xe2, 0x26, 0x51, 0xa2, 0x19, 0x99, 0x3c, 0x35, 0xbf, 0xae, 0x6d, 0xf2, 0x6d,
0x6d, 0x93, 0x1f, 0x6b, 0x9b, 0x7c, 0xf9, 0x69, 0x5f, 0x99, 0x77, 0xd5, 0x1f, 0xe3, 0xf4, 0x77,
0x00, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x60, 0xb0, 0x9f, 0xba, 0x05, 0x00, 0x00,
}

View File

@ -19,21 +19,21 @@ service Election {
// leadership still being held, and resign from the election.
rpc Campaign(CampaignRequest) returns (CampaignResponse) {
option (google.api.http) = {
post: "/v3beta/election/campaign"
post: "/v3/election/campaign"
body: "*"
};
}
// Proclaim updates the leader's posted value with a new value.
rpc Proclaim(ProclaimRequest) returns (ProclaimResponse) {
option (google.api.http) = {
post: "/v3beta/election/proclaim"
post: "/v3/election/proclaim"
body: "*"
};
}
// Leader returns the current election proclamation, if any.
rpc Leader(LeaderRequest) returns (LeaderResponse) {
option (google.api.http) = {
post: "/v3beta/election/leader"
post: "/v3/election/leader"
body: "*"
};
}
@ -41,7 +41,7 @@ service Election {
// elected leaders.
rpc Observe(LeaderRequest) returns (stream LeaderResponse) {
option (google.api.http) = {
post: "/v3beta/election/observe"
post: "/v3/election/observe"
body: "*"
};
}
@ -49,7 +49,7 @@ service Election {
// leadership on the election.
rpc Resign(ResignRequest) returns (ResignResponse) {
option (google.api.http) = {
post: "/v3beta/election/resign"
post: "/v3/election/resign"
body: "*"
};
}

View File

@ -155,9 +155,9 @@ func RegisterLockHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien
}
var (
pattern_Lock_Lock_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 1}, []string{"v3beta", "lock"}, ""))
pattern_Lock_Lock_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 1}, []string{"v3", "lock"}, ""))
pattern_Lock_Unlock_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "lock", "unlock"}, ""))
pattern_Lock_Unlock_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "lock", "unlock"}, ""))
)
var (

View File

@ -934,7 +934,7 @@ var (
func init() { proto.RegisterFile("v3lock.proto", fileDescriptorV3Lock) }
var fileDescriptorV3Lock = []byte{
// 335 bytes of a gzipped FileDescriptorProto
// 331 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0x33, 0xce, 0xc9,
0x4f, 0xce, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x80, 0xf0, 0x0a, 0x92, 0xa4, 0x44,
0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x82, 0xfa, 0x20, 0x16, 0x44, 0x5e, 0x4a, 0x2d, 0xb5, 0x24, 0x39,
@ -948,12 +948,12 @@ var fileDescriptorV3Lock = []byte{
0x98, 0x92, 0x5a, 0x04, 0xd6, 0xcb, 0x6d, 0x24, 0xa3, 0x87, 0xec, 0x1e, 0x3d, 0x98, 0x3a, 0x0f,
0xb0, 0x9a, 0x20, 0xa8, 0x5a, 0x21, 0x01, 0x2e, 0xe6, 0xec, 0xd4, 0x4a, 0xb0, 0xc9, 0x3c, 0x41,
0x20, 0xa6, 0x92, 0x22, 0x17, 0x6f, 0x68, 0x5e, 0x0e, 0x92, 0x93, 0xa0, 0x4a, 0x18, 0x11, 0x4a,
0xdc, 0xb8, 0xf8, 0x60, 0x4a, 0x28, 0xb1, 0xdc, 0x68, 0x07, 0x23, 0x17, 0x0b, 0xc8, 0x0f, 0x42,
0xc1, 0x50, 0x5a, 0x54, 0x0f, 0x16, 0xe6, 0x7a, 0x48, 0x81, 0x22, 0x25, 0x86, 0x2e, 0x0c, 0x31,
0x4d, 0x49, 0xa6, 0xe9, 0xf2, 0x93, 0xc9, 0x4c, 0x62, 0x4a, 0x82, 0xfa, 0x65, 0xc6, 0x49, 0xa9,
0x25, 0x89, 0xfa, 0x20, 0x45, 0x60, 0xc2, 0x8a, 0x51, 0x4b, 0x28, 0x9a, 0x8b, 0x0d, 0xe2, 0x4a,
0x21, 0x71, 0x84, 0x7e, 0x14, 0xaf, 0x49, 0x49, 0x60, 0x4a, 0x40, 0x8d, 0x96, 0x03, 0x1b, 0x2d,
0xa1, 0x24, 0x8c, 0x62, 0x74, 0x69, 0x1e, 0xd4, 0x70, 0x27, 0x81, 0x13, 0x8f, 0xe4, 0x18, 0x2f,
0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc6, 0x63, 0x39, 0x86, 0x24, 0x36, 0x70, 0x7c,
0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x10, 0x82, 0x89, 0xf0, 0x45, 0x02, 0x00, 0x00,
0xdc, 0xb8, 0xf8, 0x60, 0x4a, 0x28, 0xb1, 0xdc, 0x68, 0x03, 0x23, 0x17, 0x0b, 0xc8, 0x0f, 0x42,
0xfe, 0x50, 0x5a, 0x54, 0x0f, 0x16, 0xe6, 0x7a, 0x48, 0x81, 0x22, 0x25, 0x86, 0x2e, 0x0c, 0x31,
0x4d, 0x49, 0xa2, 0xe9, 0xf2, 0x93, 0xc9, 0x4c, 0x42, 0x4a, 0xbc, 0xfa, 0x65, 0xc6, 0xfa, 0x20,
0x05, 0x60, 0xc2, 0x8a, 0x51, 0x4b, 0x28, 0x9c, 0x8b, 0x0d, 0xe2, 0x42, 0x21, 0x71, 0x84, 0x5e,
0x14, 0x6f, 0x49, 0x49, 0x60, 0x4a, 0x40, 0x8d, 0x95, 0x02, 0x1b, 0x2b, 0xa2, 0xc4, 0x0f, 0x37,
0xb6, 0x34, 0x0f, 0x6a, 0xb0, 0x93, 0xc0, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e,
0x78, 0x24, 0xc7, 0x38, 0xe3, 0xb1, 0x1c, 0x43, 0x12, 0x1b, 0x38, 0x1e, 0x8d, 0x01, 0x01, 0x00,
0x00, 0xff, 0xff, 0x65, 0xa8, 0x61, 0xb1, 0x3d, 0x02, 0x00, 0x00,
}

View File

@ -20,7 +20,7 @@ service Lock {
// lease associate with the owner expires.
rpc Lock(LockRequest) returns (LockResponse) {
option (google.api.http) = {
post: "/v3beta/lock/lock"
post: "/v3/lock/lock"
body: "*"
};
}
@ -30,7 +30,7 @@ service Lock {
// ownership of the lock.
rpc Unlock(UnlockRequest) returns (UnlockResponse) {
option (google.api.http) = {
post: "/v3beta/lock/unlock"
post: "/v3/lock/unlock"
body: "*"
};
}

View File

@ -796,15 +796,15 @@ func RegisterKVHandlerClient(ctx context.Context, mux *runtime.ServeMux, client
}
var (
pattern_KV_Range_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "kv", "range"}, ""))
pattern_KV_Range_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "kv", "range"}, ""))
pattern_KV_Put_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "kv", "put"}, ""))
pattern_KV_Put_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "kv", "put"}, ""))
pattern_KV_DeleteRange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "kv", "deleterange"}, ""))
pattern_KV_DeleteRange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "kv", "deleterange"}, ""))
pattern_KV_Txn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "kv", "txn"}, ""))
pattern_KV_Txn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "kv", "txn"}, ""))
pattern_KV_Compact_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "kv", "compaction"}, ""))
pattern_KV_Compact_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "kv", "compaction"}, ""))
)
var (
@ -890,7 +890,7 @@ func RegisterWatchHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
}
var (
pattern_Watch_Watch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v3beta", "watch"}, ""))
pattern_Watch_Watch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v3", "watch"}, ""))
)
var (
@ -1084,15 +1084,15 @@ func RegisterLeaseHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
}
var (
pattern_Lease_LeaseGrant_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "lease", "grant"}, ""))
pattern_Lease_LeaseGrant_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "lease", "grant"}, ""))
pattern_Lease_LeaseRevoke_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "kv", "lease", "revoke"}, ""))
pattern_Lease_LeaseRevoke_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "kv", "lease", "revoke"}, ""))
pattern_Lease_LeaseKeepAlive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "lease", "keepalive"}, ""))
pattern_Lease_LeaseKeepAlive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "lease", "keepalive"}, ""))
pattern_Lease_LeaseTimeToLive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "kv", "lease", "timetolive"}, ""))
pattern_Lease_LeaseTimeToLive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "kv", "lease", "timetolive"}, ""))
pattern_Lease_LeaseLeases_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "kv", "lease", "leases"}, ""))
pattern_Lease_LeaseLeases_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "kv", "lease", "leases"}, ""))
)
var (
@ -1265,13 +1265,13 @@ func RegisterClusterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl
}
var (
pattern_Cluster_MemberAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "cluster", "member", "add"}, ""))
pattern_Cluster_MemberAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "cluster", "member", "add"}, ""))
pattern_Cluster_MemberRemove_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "cluster", "member", "remove"}, ""))
pattern_Cluster_MemberRemove_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "cluster", "member", "remove"}, ""))
pattern_Cluster_MemberUpdate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "cluster", "member", "update"}, ""))
pattern_Cluster_MemberUpdate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "cluster", "member", "update"}, ""))
pattern_Cluster_MemberList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "cluster", "member", "list"}, ""))
pattern_Cluster_MemberList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "cluster", "member", "list"}, ""))
)
var (
@ -1529,19 +1529,19 @@ func RegisterMaintenanceHandlerClient(ctx context.Context, mux *runtime.ServeMux
}
var (
pattern_Maintenance_Alarm_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "maintenance", "alarm"}, ""))
pattern_Maintenance_Alarm_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "alarm"}, ""))
pattern_Maintenance_Status_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "maintenance", "status"}, ""))
pattern_Maintenance_Status_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "status"}, ""))
pattern_Maintenance_Defragment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "maintenance", "defragment"}, ""))
pattern_Maintenance_Defragment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "defragment"}, ""))
pattern_Maintenance_Hash_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "maintenance", "hash"}, ""))
pattern_Maintenance_Hash_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "hash"}, ""))
pattern_Maintenance_HashKV_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "maintenance", "hash"}, ""))
pattern_Maintenance_HashKV_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "hash"}, ""))
pattern_Maintenance_Snapshot_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "maintenance", "snapshot"}, ""))
pattern_Maintenance_Snapshot_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "snapshot"}, ""))
pattern_Maintenance_MoveLeader_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "maintenance", "transfer-leadership"}, ""))
pattern_Maintenance_MoveLeader_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "maintenance", "transfer-leadership"}, ""))
)
var (
@ -2066,37 +2066,37 @@ func RegisterAuthHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien
}
var (
pattern_Auth_AuthEnable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "auth", "enable"}, ""))
pattern_Auth_AuthEnable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "auth", "enable"}, ""))
pattern_Auth_AuthDisable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "auth", "disable"}, ""))
pattern_Auth_AuthDisable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "auth", "disable"}, ""))
pattern_Auth_Authenticate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3beta", "auth", "authenticate"}, ""))
pattern_Auth_Authenticate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3", "auth", "authenticate"}, ""))
pattern_Auth_UserAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "user", "add"}, ""))
pattern_Auth_UserAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "add"}, ""))
pattern_Auth_UserGet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "user", "get"}, ""))
pattern_Auth_UserGet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "get"}, ""))
pattern_Auth_UserList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "user", "list"}, ""))
pattern_Auth_UserList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "list"}, ""))
pattern_Auth_UserDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "user", "delete"}, ""))
pattern_Auth_UserDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "delete"}, ""))
pattern_Auth_UserChangePassword_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "user", "changepw"}, ""))
pattern_Auth_UserChangePassword_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "changepw"}, ""))
pattern_Auth_UserGrantRole_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "user", "grant"}, ""))
pattern_Auth_UserGrantRole_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "grant"}, ""))
pattern_Auth_UserRevokeRole_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "user", "revoke"}, ""))
pattern_Auth_UserRevokeRole_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "user", "revoke"}, ""))
pattern_Auth_RoleAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "role", "add"}, ""))
pattern_Auth_RoleAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "add"}, ""))
pattern_Auth_RoleGet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "role", "get"}, ""))
pattern_Auth_RoleGet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "get"}, ""))
pattern_Auth_RoleList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "role", "list"}, ""))
pattern_Auth_RoleList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "list"}, ""))
pattern_Auth_RoleDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "role", "delete"}, ""))
pattern_Auth_RoleDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "delete"}, ""))
pattern_Auth_RoleGrantPermission_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "role", "grant"}, ""))
pattern_Auth_RoleGrantPermission_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "grant"}, ""))
pattern_Auth_RoleRevokePermission_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3beta", "auth", "role", "revoke"}, ""))
pattern_Auth_RoleRevokePermission_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3", "auth", "role", "revoke"}, ""))
)
var (

View File

@ -18602,238 +18602,237 @@ var (
func init() { proto.RegisterFile("rpc.proto", fileDescriptorRpc) }
var fileDescriptorRpc = []byte{
// 3724 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5b, 0x4b, 0x6f, 0x1b, 0x4b,
0x76, 0x56, 0x93, 0xe2, 0xeb, 0xf0, 0x21, 0xba, 0x24, 0xdb, 0x34, 0x6d, 0xcb, 0x72, 0xf9, 0x25,
0x3f, 0xae, 0x38, 0xa3, 0x99, 0x64, 0xe1, 0x04, 0x83, 0x91, 0x25, 0x8e, 0xa5, 0x91, 0x2c, 0x69,
0x5a, 0x94, 0xef, 0x0d, 0x30, 0x89, 0xd0, 0x22, 0x4b, 0x52, 0x47, 0x64, 0x37, 0xd3, 0xdd, 0xa4,
0x25, 0x67, 0x90, 0x00, 0x93, 0x49, 0x90, 0x4d, 0x36, 0x19, 0x20, 0x48, 0xb2, 0x0d, 0x82, 0xc1,
0xec, 0xb2, 0xb9, 0xc8, 0x5f, 0xc8, 0x2e, 0x01, 0xf2, 0x07, 0x82, 0x9b, 0x6c, 0xf2, 0x0b, 0xf2,
0x58, 0x0d, 0xea, 0xd5, 0x5d, 0xfd, 0xa2, 0x74, 0x2f, 0xef, 0xbd, 0x1b, 0xb9, 0xeb, 0xd4, 0xa9,
0x73, 0x4e, 0x9d, 0xaa, 0x73, 0x4e, 0xd5, 0x57, 0x34, 0x94, 0x9c, 0x61, 0x77, 0x65, 0xe8, 0xd8,
0x9e, 0x8d, 0x2a, 0xc4, 0xeb, 0xf6, 0x5c, 0xe2, 0x8c, 0x89, 0x33, 0x3c, 0x6e, 0x2e, 0x9c, 0xda,
0xa7, 0x36, 0xeb, 0x68, 0xd1, 0x2f, 0xce, 0xd3, 0xc4, 0x94, 0xa7, 0x65, 0x5a, 0x1e, 0x71, 0x2c,
0xa3, 0xdf, 0x1a, 0x8c, 0xbb, 0x5d, 0xf6, 0x67, 0x78, 0xdc, 0x3a, 0x1f, 0x0b, 0x9e, 0xc7, 0x61,
0x1e, 0x63, 0xe4, 0x9d, 0xb1, 0x3f, 0xc3, 0x63, 0xf6, 0x8f, 0xe0, 0xba, 0x77, 0x6a, 0xdb, 0xa7,
0x7d, 0xd2, 0x32, 0x86, 0x66, 0xcb, 0xb0, 0x2c, 0xdb, 0x33, 0x3c, 0xd3, 0xb6, 0x5c, 0xde, 0x8b,
0xff, 0x5c, 0x83, 0x9a, 0x4e, 0xdc, 0xa1, 0x6d, 0xb9, 0x64, 0x93, 0x18, 0x3d, 0xe2, 0xa0, 0xfb,
0x00, 0xdd, 0xfe, 0xc8, 0xf5, 0x88, 0x73, 0x64, 0xf6, 0x1a, 0xda, 0x92, 0xb6, 0x3c, 0xab, 0x97,
0x04, 0x65, 0xab, 0x87, 0xee, 0x42, 0x69, 0x40, 0x06, 0xc7, 0xbc, 0x37, 0xc3, 0x7a, 0x8b, 0x9c,
0xb0, 0xd5, 0x43, 0x4d, 0x28, 0x3a, 0x64, 0x6c, 0xba, 0xa6, 0x6d, 0x35, 0xb2, 0x4b, 0xda, 0x72,
0x56, 0xf7, 0xdb, 0x74, 0xa0, 0x63, 0x9c, 0x78, 0x47, 0x1e, 0x71, 0x06, 0x8d, 0x59, 0x3e, 0x90,
0x12, 0x3a, 0xc4, 0x19, 0xe0, 0x5f, 0xe4, 0xa0, 0xa2, 0x1b, 0xd6, 0x29, 0xd1, 0xc9, 0x1f, 0x8d,
0x88, 0xeb, 0xa1, 0x3a, 0x64, 0xcf, 0xc9, 0x25, 0x53, 0x5f, 0xd1, 0xe9, 0x27, 0x1f, 0x6f, 0x9d,
0x92, 0x23, 0x62, 0x71, 0xc5, 0x15, 0x3a, 0xde, 0x3a, 0x25, 0x6d, 0xab, 0x87, 0x16, 0x20, 0xd7,
0x37, 0x07, 0xa6, 0x27, 0xb4, 0xf2, 0x46, 0xc8, 0x9c, 0xd9, 0x88, 0x39, 0xeb, 0x00, 0xae, 0xed,
0x78, 0x47, 0xb6, 0xd3, 0x23, 0x4e, 0x23, 0xb7, 0xa4, 0x2d, 0xd7, 0x56, 0x1f, 0xaf, 0xa8, 0x4b,
0xb3, 0xa2, 0x1a, 0xb4, 0x72, 0x60, 0x3b, 0xde, 0x1e, 0xe5, 0xd5, 0x4b, 0xae, 0xfc, 0x44, 0x3f,
0x82, 0x32, 0x13, 0xe2, 0x19, 0xce, 0x29, 0xf1, 0x1a, 0x79, 0x26, 0xe5, 0xc9, 0x15, 0x52, 0x3a,
0x8c, 0x59, 0x67, 0xea, 0xf9, 0x37, 0xc2, 0x50, 0x71, 0x89, 0x63, 0x1a, 0x7d, 0xf3, 0xa3, 0x71,
0xdc, 0x27, 0x8d, 0xc2, 0x92, 0xb6, 0x5c, 0xd4, 0x43, 0x34, 0x3a, 0xff, 0x73, 0x72, 0xe9, 0x1e,
0xd9, 0x56, 0xff, 0xb2, 0x51, 0x64, 0x0c, 0x45, 0x4a, 0xd8, 0xb3, 0xfa, 0x97, 0x6c, 0xd1, 0xec,
0x91, 0xe5, 0xf1, 0xde, 0x12, 0xeb, 0x2d, 0x31, 0x0a, 0xeb, 0x5e, 0x86, 0xfa, 0xc0, 0xb4, 0x8e,
0x06, 0x76, 0xef, 0xc8, 0x77, 0x08, 0x30, 0x87, 0xd4, 0x06, 0xa6, 0xf5, 0xce, 0xee, 0xe9, 0xd2,
0x2d, 0x94, 0xd3, 0xb8, 0x08, 0x73, 0x96, 0x05, 0xa7, 0x71, 0xa1, 0x72, 0xae, 0xc0, 0x3c, 0x95,
0xd9, 0x75, 0x88, 0xe1, 0x91, 0x80, 0xb9, 0xc2, 0x98, 0x6f, 0x0c, 0x4c, 0x6b, 0x9d, 0xf5, 0x84,
0xf8, 0x8d, 0x8b, 0x18, 0x7f, 0x55, 0xf0, 0x1b, 0x17, 0x61, 0x7e, 0xbc, 0x02, 0x25, 0xdf, 0xe7,
0xa8, 0x08, 0xb3, 0xbb, 0x7b, 0xbb, 0xed, 0xfa, 0x0c, 0x02, 0xc8, 0xaf, 0x1d, 0xac, 0xb7, 0x77,
0x37, 0xea, 0x1a, 0x2a, 0x43, 0x61, 0xa3, 0xcd, 0x1b, 0x19, 0xfc, 0x06, 0x20, 0xf0, 0x2e, 0x2a,
0x40, 0x76, 0xbb, 0xfd, 0x7b, 0xf5, 0x19, 0xca, 0xf3, 0xbe, 0xad, 0x1f, 0x6c, 0xed, 0xed, 0xd6,
0x35, 0x3a, 0x78, 0x5d, 0x6f, 0xaf, 0x75, 0xda, 0xf5, 0x0c, 0xe5, 0x78, 0xb7, 0xb7, 0x51, 0xcf,
0xa2, 0x12, 0xe4, 0xde, 0xaf, 0xed, 0x1c, 0xb6, 0xeb, 0xb3, 0xf8, 0x97, 0x1a, 0x54, 0xc5, 0x7a,
0xf1, 0x98, 0x40, 0xdf, 0x87, 0xfc, 0x19, 0x8b, 0x0b, 0xb6, 0x15, 0xcb, 0xab, 0xf7, 0x22, 0x8b,
0x1b, 0x8a, 0x1d, 0x5d, 0xf0, 0x22, 0x0c, 0xd9, 0xf3, 0xb1, 0xdb, 0xc8, 0x2c, 0x65, 0x97, 0xcb,
0xab, 0xf5, 0x15, 0x1e, 0xb9, 0x2b, 0xdb, 0xe4, 0xf2, 0xbd, 0xd1, 0x1f, 0x11, 0x9d, 0x76, 0x22,
0x04, 0xb3, 0x03, 0xdb, 0x21, 0x6c, 0xc7, 0x16, 0x75, 0xf6, 0x4d, 0xb7, 0x31, 0x5b, 0x34, 0xb1,
0x5b, 0x79, 0x03, 0xff, 0x5a, 0x03, 0xd8, 0x1f, 0x79, 0xe9, 0xa1, 0xb1, 0x00, 0xb9, 0x31, 0x15,
0x2c, 0xc2, 0x82, 0x37, 0x58, 0x4c, 0x10, 0xc3, 0x25, 0x7e, 0x4c, 0xd0, 0x06, 0xba, 0x0d, 0x85,
0xa1, 0x43, 0xc6, 0x47, 0xe7, 0x63, 0xa6, 0xa4, 0xa8, 0xe7, 0x69, 0x73, 0x7b, 0x8c, 0x1e, 0x42,
0xc5, 0x3c, 0xb5, 0x6c, 0x87, 0x1c, 0x71, 0x59, 0x39, 0xd6, 0x5b, 0xe6, 0x34, 0x66, 0xb7, 0xc2,
0xc2, 0x05, 0xe7, 0x55, 0x96, 0x1d, 0x4a, 0xc2, 0x16, 0x94, 0x99, 0xa9, 0x53, 0xb9, 0xef, 0x79,
0x60, 0x63, 0x86, 0x0d, 0x8b, 0xbb, 0x50, 0x58, 0x8d, 0x7f, 0x0a, 0x68, 0x83, 0xf4, 0x89, 0x47,
0xa6, 0xc9, 0x1e, 0x8a, 0x4f, 0xb2, 0xaa, 0x4f, 0xf0, 0x5f, 0x6b, 0x30, 0x1f, 0x12, 0x3f, 0xd5,
0xb4, 0x1a, 0x50, 0xe8, 0x31, 0x61, 0xdc, 0x82, 0xac, 0x2e, 0x9b, 0xe8, 0x25, 0x14, 0x85, 0x01,
0x6e, 0x23, 0x9b, 0xb2, 0x69, 0x0a, 0xdc, 0x26, 0x17, 0xff, 0x3a, 0x03, 0x25, 0x31, 0xd1, 0xbd,
0x21, 0x5a, 0x83, 0xaa, 0xc3, 0x1b, 0x47, 0x6c, 0x3e, 0xc2, 0xa2, 0x66, 0x7a, 0x12, 0xda, 0x9c,
0xd1, 0x2b, 0x62, 0x08, 0x23, 0xa3, 0xdf, 0x81, 0xb2, 0x14, 0x31, 0x1c, 0x79, 0xc2, 0xe5, 0x8d,
0xb0, 0x80, 0x60, 0xff, 0x6d, 0xce, 0xe8, 0x20, 0xd8, 0xf7, 0x47, 0x1e, 0xea, 0xc0, 0x82, 0x1c,
0xcc, 0x67, 0x23, 0xcc, 0xc8, 0x32, 0x29, 0x4b, 0x61, 0x29, 0xf1, 0xa5, 0xda, 0x9c, 0xd1, 0x91,
0x18, 0xaf, 0x74, 0xaa, 0x26, 0x79, 0x17, 0x3c, 0x79, 0xc7, 0x4c, 0xea, 0x5c, 0x58, 0x71, 0x93,
0x3a, 0x17, 0xd6, 0x9b, 0x12, 0x14, 0x44, 0x0b, 0xff, 0x73, 0x06, 0x40, 0xae, 0xc6, 0xde, 0x10,
0x6d, 0x40, 0xcd, 0x11, 0xad, 0x90, 0xb7, 0xee, 0x26, 0x7a, 0x4b, 0x2c, 0xe2, 0x8c, 0x5e, 0x95,
0x83, 0xb8, 0x71, 0x3f, 0x80, 0x8a, 0x2f, 0x25, 0x70, 0xd8, 0x9d, 0x04, 0x87, 0xf9, 0x12, 0xca,
0x72, 0x00, 0x75, 0xd9, 0xa7, 0x70, 0xd3, 0x1f, 0x9f, 0xe0, 0xb3, 0x87, 0x13, 0x7c, 0xe6, 0x0b,
0x9c, 0x97, 0x12, 0x54, 0xaf, 0xa9, 0x86, 0x05, 0x6e, 0xbb, 0x93, 0xe0, 0xb6, 0xb8, 0x61, 0xd4,
0x71, 0x40, 0xeb, 0x25, 0x6f, 0xe2, 0xff, 0xce, 0x42, 0x61, 0xdd, 0x1e, 0x0c, 0x0d, 0x87, 0xae,
0x46, 0xde, 0x21, 0xee, 0xa8, 0xef, 0x31, 0x77, 0xd5, 0x56, 0x1f, 0x85, 0x25, 0x0a, 0x36, 0xf9,
0xaf, 0xce, 0x58, 0x75, 0x31, 0x84, 0x0e, 0x16, 0xe5, 0x31, 0x73, 0x8d, 0xc1, 0xa2, 0x38, 0x8a,
0x21, 0x32, 0x90, 0xb3, 0x41, 0x20, 0x37, 0xa1, 0x30, 0x26, 0x4e, 0x50, 0xd2, 0x37, 0x67, 0x74,
0x49, 0x40, 0xcf, 0x61, 0x2e, 0x5a, 0x5e, 0x72, 0x82, 0xa7, 0xd6, 0x0d, 0x57, 0xa3, 0x47, 0x50,
0x09, 0xd5, 0xb8, 0xbc, 0xe0, 0x2b, 0x0f, 0x94, 0x12, 0x77, 0x4b, 0xe6, 0x55, 0x5a, 0x8f, 0x2b,
0x9b, 0x33, 0x32, 0xb3, 0xde, 0x92, 0x99, 0xb5, 0x28, 0x46, 0x89, 0xdc, 0x1a, 0x4a, 0x32, 0x3f,
0x0c, 0x27, 0x19, 0xfc, 0x43, 0xa8, 0x86, 0x1c, 0x44, 0xeb, 0x4e, 0xfb, 0x27, 0x87, 0x6b, 0x3b,
0xbc, 0x48, 0xbd, 0x65, 0x75, 0x49, 0xaf, 0x6b, 0xb4, 0xd6, 0xed, 0xb4, 0x0f, 0x0e, 0xea, 0x19,
0x54, 0x85, 0xd2, 0xee, 0x5e, 0xe7, 0x88, 0x73, 0x65, 0xf1, 0x5b, 0x5f, 0x82, 0x28, 0x72, 0x4a,
0x6d, 0x9b, 0x51, 0x6a, 0x9b, 0x26, 0x6b, 0x5b, 0x26, 0xa8, 0x6d, 0xac, 0xcc, 0xed, 0xb4, 0xd7,
0x0e, 0xda, 0xf5, 0xd9, 0x37, 0x35, 0xa8, 0x70, 0xff, 0x1e, 0x8d, 0x2c, 0x5a, 0x6a, 0xff, 0x41,
0x03, 0x08, 0xa2, 0x09, 0xb5, 0xa0, 0xd0, 0xe5, 0x7a, 0x1a, 0x1a, 0x4b, 0x46, 0x37, 0x13, 0x97,
0x4c, 0x97, 0x5c, 0xe8, 0xbb, 0x50, 0x70, 0x47, 0xdd, 0x2e, 0x71, 0x65, 0xc9, 0xbb, 0x1d, 0xcd,
0x87, 0x22, 0x5b, 0xe9, 0x92, 0x8f, 0x0e, 0x39, 0x31, 0xcc, 0xfe, 0x88, 0x15, 0xc0, 0xc9, 0x43,
0x04, 0x1f, 0xfe, 0x3b, 0x0d, 0xca, 0xca, 0xe6, 0xfd, 0x8a, 0x49, 0xf8, 0x1e, 0x94, 0x98, 0x0d,
0xa4, 0x27, 0xd2, 0x70, 0x51, 0x0f, 0x08, 0xe8, 0xb7, 0xa1, 0x24, 0x23, 0x40, 0x66, 0xe2, 0x46,
0xb2, 0xd8, 0xbd, 0xa1, 0x1e, 0xb0, 0xe2, 0x6d, 0xb8, 0xc1, 0xbc, 0xd2, 0xa5, 0x87, 0x6b, 0xe9,
0x47, 0xf5, 0xf8, 0xa9, 0x45, 0x8e, 0x9f, 0x4d, 0x28, 0x0e, 0xcf, 0x2e, 0x5d, 0xb3, 0x6b, 0xf4,
0x85, 0x15, 0x7e, 0x1b, 0xff, 0x18, 0x90, 0x2a, 0x6c, 0x9a, 0xe9, 0xe2, 0x2a, 0x94, 0x37, 0x0d,
0xf7, 0x4c, 0x98, 0x84, 0x5f, 0x42, 0x95, 0x36, 0xb7, 0xdf, 0x5f, 0xc3, 0x46, 0x76, 0x39, 0x90,
0xdc, 0x53, 0xf9, 0x1c, 0xc1, 0xec, 0x99, 0xe1, 0x9e, 0xb1, 0x89, 0x56, 0x75, 0xf6, 0x8d, 0x9e,
0x43, 0xbd, 0xcb, 0x27, 0x79, 0x14, 0xb9, 0x32, 0xcc, 0x09, 0xba, 0x7f, 0x12, 0xfc, 0x0c, 0x2a,
0x7c, 0x0e, 0x5f, 0xb7, 0x11, 0xf8, 0x06, 0xcc, 0x1d, 0x58, 0xc6, 0xd0, 0x3d, 0xb3, 0x65, 0x75,
0xa3, 0x93, 0xae, 0x07, 0xb4, 0xa9, 0x34, 0x3e, 0x83, 0x39, 0x87, 0x0c, 0x0c, 0xd3, 0x32, 0xad,
0xd3, 0xa3, 0xe3, 0x4b, 0x8f, 0xb8, 0xe2, 0xc2, 0x54, 0xf3, 0xc9, 0x6f, 0x28, 0x95, 0x9a, 0x76,
0xdc, 0xb7, 0x8f, 0x45, 0x9a, 0x63, 0xdf, 0xf8, 0x73, 0x0d, 0x2a, 0x9f, 0x1a, 0x5e, 0x57, 0x2e,
0x1d, 0xda, 0x82, 0x9a, 0x9f, 0xdc, 0x18, 0x45, 0xd8, 0x12, 0x29, 0xb1, 0x6c, 0x8c, 0x3c, 0x4a,
0xcb, 0xea, 0x58, 0xed, 0xaa, 0x04, 0x26, 0xca, 0xb0, 0xba, 0xa4, 0xef, 0x8b, 0xca, 0xa4, 0x8b,
0x62, 0x8c, 0xaa, 0x28, 0x95, 0xf0, 0x66, 0x2e, 0x38, 0x7e, 0xf0, 0x5c, 0xf2, 0x79, 0x06, 0x50,
0xdc, 0x86, 0x2f, 0x7b, 0x22, 0x7b, 0x02, 0x35, 0xd7, 0x33, 0x9c, 0xd8, 0xde, 0xa8, 0x32, 0xaa,
0x9f, 0xa0, 0x9f, 0xc1, 0xdc, 0xd0, 0xb1, 0x4f, 0x1d, 0xe2, 0xba, 0x47, 0x96, 0xed, 0x99, 0x27,
0x97, 0xe2, 0x50, 0x5b, 0x93, 0xe4, 0x5d, 0x46, 0x45, 0x6d, 0x28, 0x9c, 0x98, 0x7d, 0x8f, 0x38,
0x6e, 0x23, 0xb7, 0x94, 0x5d, 0xae, 0xad, 0xbe, 0xbc, 0xca, 0x6b, 0x2b, 0x3f, 0x62, 0xfc, 0x9d,
0xcb, 0x21, 0xd1, 0xe5, 0x58, 0xf5, 0xa0, 0x98, 0x0f, 0x1d, 0x9e, 0xef, 0x40, 0xf1, 0x03, 0x15,
0x41, 0x2f, 0xc5, 0x05, 0x7e, 0xb6, 0x63, 0xed, 0xad, 0x1e, 0x7e, 0x02, 0x10, 0x88, 0xa2, 0x59,
0x78, 0x77, 0x6f, 0xff, 0xb0, 0x53, 0x9f, 0x41, 0x15, 0x28, 0xee, 0xee, 0x6d, 0xb4, 0x77, 0xda,
0x34, 0x65, 0xe3, 0x96, 0x74, 0x9b, 0xea, 0xde, 0x90, 0x5c, 0x2d, 0x2c, 0xf7, 0xaf, 0x32, 0x50,
0x15, 0x1b, 0x64, 0xaa, 0x5d, 0xaa, 0xaa, 0xc8, 0x84, 0x54, 0xd0, 0x03, 0x2b, 0xdf, 0x38, 0x3d,
0x71, 0x2e, 0x96, 0x4d, 0x9a, 0x36, 0xf8, 0x3e, 0x20, 0x3d, 0xe1, 0x71, 0xbf, 0x9d, 0x18, 0xd9,
0xb9, 0xc4, 0xc8, 0x46, 0x8f, 0xa0, 0xea, 0x6f, 0x44, 0xc3, 0x15, 0x65, 0xb8, 0xa4, 0x57, 0xe4,
0x1e, 0xa3, 0x34, 0xf4, 0x04, 0xf2, 0x64, 0x4c, 0x2c, 0xcf, 0x6d, 0x94, 0x59, 0x42, 0xae, 0xca,
0xa3, 0x71, 0x9b, 0x52, 0x75, 0xd1, 0x89, 0x7f, 0x0b, 0x6e, 0xb0, 0x2b, 0xc8, 0x5b, 0xc7, 0xb0,
0xd4, 0xbb, 0x52, 0xa7, 0xb3, 0x23, 0x5c, 0x47, 0x3f, 0x51, 0x0d, 0x32, 0x5b, 0x1b, 0x62, 0xa2,
0x99, 0xad, 0x0d, 0xfc, 0x73, 0x0d, 0x90, 0x3a, 0x6e, 0x2a, 0x5f, 0x46, 0x84, 0x4b, 0xf5, 0xd9,
0x40, 0xfd, 0x02, 0xe4, 0x88, 0xe3, 0xd8, 0x0e, 0xf3, 0x5a, 0x49, 0xe7, 0x0d, 0xfc, 0x58, 0xd8,
0xa0, 0x93, 0xb1, 0x7d, 0xee, 0xc7, 0x0c, 0x97, 0xa6, 0xf9, 0xa6, 0x6e, 0xc3, 0x7c, 0x88, 0x6b,
0xaa, 0xc2, 0xf0, 0x0c, 0x6e, 0x32, 0x61, 0xdb, 0x84, 0x0c, 0xd7, 0xfa, 0xe6, 0x38, 0x55, 0xeb,
0x10, 0x6e, 0x45, 0x19, 0xbf, 0x59, 0x1f, 0xe1, 0xdf, 0x15, 0x1a, 0x3b, 0xe6, 0x80, 0x74, 0xec,
0x9d, 0x74, 0xdb, 0x68, 0xe2, 0x3c, 0x27, 0x97, 0xae, 0xa8, 0xa0, 0xec, 0x1b, 0xff, 0xa3, 0x06,
0xb7, 0x63, 0xc3, 0xbf, 0xe1, 0x55, 0x5d, 0x04, 0x38, 0xa5, 0xdb, 0x87, 0xf4, 0x68, 0x07, 0xbf,
0xbc, 0x2b, 0x14, 0xdf, 0x4e, 0x9a, 0x7b, 0x2a, 0xc2, 0xce, 0x05, 0xb1, 0xe6, 0xec, 0x8f, 0x2b,
0xcb, 0xcf, 0x7d, 0x28, 0x33, 0xc2, 0x81, 0x67, 0x78, 0x23, 0x37, 0xb6, 0x18, 0x7f, 0x22, 0xb6,
0x80, 0x1c, 0x34, 0xd5, 0xbc, 0xbe, 0x0b, 0x79, 0x76, 0x6e, 0x95, 0xa7, 0xb6, 0xc8, 0x45, 0x41,
0xb1, 0x43, 0x17, 0x8c, 0xf8, 0x0c, 0xf2, 0xef, 0x18, 0xd8, 0xa7, 0x58, 0x36, 0x2b, 0x97, 0xc2,
0x32, 0x06, 0x1c, 0x82, 0x28, 0xe9, 0xec, 0x9b, 0x1d, 0x72, 0x08, 0x71, 0x0e, 0xf5, 0x1d, 0x7e,
0x98, 0x2a, 0xe9, 0x7e, 0x9b, 0xba, 0xac, 0xdb, 0x37, 0x89, 0xe5, 0xb1, 0xde, 0x59, 0xd6, 0xab,
0x50, 0xf0, 0x0a, 0xd4, 0xb9, 0xa6, 0xb5, 0x5e, 0x4f, 0x39, 0xac, 0xf8, 0xf2, 0xb4, 0xb0, 0x3c,
0xfc, 0x2b, 0x0d, 0x6e, 0x28, 0x03, 0xa6, 0x72, 0xcc, 0x2b, 0xc8, 0x73, 0x48, 0x53, 0xd4, 0xc5,
0x85, 0xf0, 0x28, 0xae, 0x46, 0x17, 0x3c, 0x68, 0x05, 0x0a, 0xfc, 0x4b, 0x9e, 0x18, 0x93, 0xd9,
0x25, 0x13, 0x7e, 0x02, 0xf3, 0x82, 0x44, 0x06, 0x76, 0xd2, 0xde, 0x66, 0x0e, 0xc5, 0x3f, 0x83,
0x85, 0x30, 0xdb, 0x54, 0x53, 0x52, 0x8c, 0xcc, 0x5c, 0xc7, 0xc8, 0x35, 0x69, 0xe4, 0xe1, 0xb0,
0xa7, 0x94, 0xf1, 0xe8, 0xaa, 0xab, 0x2b, 0x92, 0x89, 0xac, 0x88, 0x3f, 0x01, 0x29, 0xe2, 0x5b,
0x9d, 0xc0, 0xbc, 0xdc, 0x0e, 0x3b, 0xa6, 0xeb, 0x1f, 0xee, 0x3e, 0x02, 0x52, 0x89, 0xdf, 0xb6,
0x41, 0x1b, 0xe4, 0xc4, 0x31, 0x4e, 0x07, 0xc4, 0xaf, 0x4f, 0xf4, 0xa8, 0xaf, 0x12, 0xa7, 0xca,
0xe8, 0x2d, 0xb8, 0xf1, 0xce, 0x1e, 0xd3, 0xd4, 0x40, 0xa9, 0x41, 0xc8, 0xf0, 0xab, 0x9e, 0xbf,
0x6c, 0x7e, 0x9b, 0x2a, 0x57, 0x07, 0x4c, 0xa5, 0xfc, 0x5f, 0x35, 0xa8, 0xac, 0xf5, 0x0d, 0x67,
0x20, 0x15, 0xff, 0x00, 0xf2, 0xfc, 0x02, 0x23, 0x30, 0x83, 0xa7, 0x61, 0x31, 0x2a, 0x2f, 0x6f,
0xac, 0xf1, 0xeb, 0x8e, 0x18, 0x45, 0x0d, 0x17, 0xcf, 0x0a, 0x1b, 0x91, 0x67, 0x86, 0x0d, 0xf4,
0x09, 0xe4, 0x0c, 0x3a, 0x84, 0xa5, 0xe0, 0x5a, 0xf4, 0xea, 0xc8, 0xa4, 0xb1, 0x73, 0x1b, 0xe7,
0xc2, 0xdf, 0x87, 0xb2, 0xa2, 0x81, 0x5e, 0x8e, 0xdf, 0xb6, 0xc5, 0x01, 0x6c, 0x6d, 0xbd, 0xb3,
0xf5, 0x9e, 0xdf, 0x99, 0x6b, 0x00, 0x1b, 0x6d, 0xbf, 0x9d, 0xc1, 0x9f, 0x89, 0x51, 0x22, 0xdf,
0xa9, 0xf6, 0x68, 0x69, 0xf6, 0x64, 0xae, 0x65, 0xcf, 0x05, 0x54, 0xc5, 0xf4, 0xa7, 0x4d, 0xdf,
0x4c, 0x5e, 0x4a, 0xfa, 0x56, 0x8c, 0xd7, 0x05, 0x23, 0x9e, 0x83, 0xaa, 0x48, 0xe8, 0x62, 0xff,
0xfd, 0x53, 0x06, 0x6a, 0x92, 0x32, 0x2d, 0xb6, 0x29, 0x61, 0x19, 0x5e, 0x01, 0x7c, 0x50, 0xe6,
0x16, 0xe4, 0x7b, 0xc7, 0x07, 0xe6, 0x47, 0x89, 0x43, 0x8b, 0x16, 0xa5, 0xf7, 0xb9, 0x1e, 0xfe,
0x18, 0x24, 0x5a, 0xf4, 0x82, 0xee, 0x18, 0x27, 0xde, 0x96, 0xd5, 0x23, 0x17, 0xec, 0xdc, 0x38,
0xab, 0x07, 0x04, 0x76, 0x5f, 0x15, 0x8f, 0x46, 0xec, 0xb0, 0xa8, 0x3c, 0x22, 0xa1, 0x17, 0x50,
0xa7, 0xdf, 0x6b, 0xc3, 0x61, 0xdf, 0x24, 0x3d, 0x2e, 0xa0, 0xc0, 0x78, 0x62, 0x74, 0xaa, 0x9d,
0x1d, 0xbd, 0xdc, 0x46, 0x91, 0xa5, 0x2d, 0xd1, 0x42, 0x4b, 0x50, 0xe6, 0xf6, 0x6d, 0x59, 0x87,
0x2e, 0x61, 0x2f, 0x29, 0x59, 0x5d, 0x25, 0xd1, 0x38, 0x5e, 0x1b, 0x79, 0x67, 0x6d, 0xcb, 0x38,
0xee, 0xcb, 0xbc, 0x48, 0x8b, 0x39, 0x25, 0x6e, 0x98, 0xae, 0x4a, 0x6d, 0xc3, 0x3c, 0xa5, 0x12,
0xcb, 0x33, 0xbb, 0x4a, 0x12, 0x95, 0xa5, 0x52, 0x8b, 0x94, 0x4a, 0xc3, 0x75, 0x3f, 0xd8, 0x4e,
0x4f, 0x38, 0xd0, 0x6f, 0xe3, 0x0d, 0x2e, 0xfc, 0xd0, 0x0d, 0x15, 0xc3, 0x2f, 0x2b, 0x65, 0x39,
0x90, 0xf2, 0x96, 0x78, 0x13, 0xa4, 0xe0, 0x97, 0x70, 0x53, 0x72, 0x0a, 0x74, 0x71, 0x02, 0xf3,
0x1e, 0xdc, 0x97, 0xcc, 0xeb, 0x67, 0xf4, 0xfa, 0xb6, 0x2f, 0x14, 0x7e, 0x55, 0x3b, 0xdf, 0x40,
0xc3, 0xb7, 0x93, 0x1d, 0xc9, 0xed, 0xbe, 0x6a, 0xc0, 0xc8, 0x15, 0x3b, 0xb3, 0xa4, 0xb3, 0x6f,
0x4a, 0x73, 0xec, 0xbe, 0x7f, 0xf0, 0xa0, 0xdf, 0x78, 0x1d, 0xee, 0x48, 0x19, 0xe2, 0xb0, 0x1c,
0x16, 0x12, 0x33, 0x28, 0x49, 0x88, 0x70, 0x18, 0x1d, 0x3a, 0xd9, 0xed, 0x2a, 0x67, 0xd8, 0xb5,
0x4c, 0xa6, 0xa6, 0xc8, 0xbc, 0xc9, 0x77, 0x04, 0x35, 0x4c, 0xad, 0x4b, 0x82, 0x4c, 0x05, 0xa8,
0x64, 0xb1, 0x10, 0x94, 0x1c, 0x5b, 0x88, 0x98, 0xe8, 0x9f, 0xc2, 0xa2, 0x6f, 0x04, 0xf5, 0xdb,
0x3e, 0x71, 0x06, 0xa6, 0xeb, 0x2a, 0x78, 0x54, 0xd2, 0xc4, 0x9f, 0xc2, 0xec, 0x90, 0x88, 0xcc,
0x55, 0x5e, 0x45, 0x2b, 0xfc, 0x01, 0x79, 0x45, 0x19, 0xcc, 0xfa, 0x71, 0x0f, 0x1e, 0x48, 0xe9,
0xdc, 0xa3, 0x89, 0xe2, 0xa3, 0x46, 0xc9, 0x6b, 0x3f, 0x77, 0x6b, 0xfc, 0xda, 0x9f, 0xe5, 0x6b,
0xef, 0x63, 0xa4, 0x3f, 0xe6, 0x8e, 0x94, 0xb1, 0x35, 0x55, 0x45, 0xda, 0xe6, 0x3e, 0xf5, 0x43,
0x72, 0x2a, 0x61, 0xc7, 0xb0, 0x10, 0x8e, 0xe4, 0xa9, 0x92, 0xe5, 0x02, 0xe4, 0x3c, 0xfb, 0x9c,
0xc8, 0x54, 0xc9, 0x1b, 0xd2, 0x60, 0x3f, 0xcc, 0xa7, 0x32, 0xd8, 0x08, 0x84, 0xb1, 0x2d, 0x39,
0xad, 0xbd, 0x74, 0x35, 0xe5, 0x11, 0x8f, 0x37, 0xf0, 0x2e, 0xdc, 0x8a, 0xa6, 0x89, 0xa9, 0x4c,
0x7e, 0xcf, 0x37, 0x70, 0x52, 0x26, 0x99, 0x4a, 0xee, 0x4f, 0x82, 0x64, 0xa0, 0x24, 0x94, 0xa9,
0x44, 0xea, 0xd0, 0x4c, 0xca, 0x2f, 0x5f, 0xc7, 0x7e, 0xf5, 0xd3, 0xcd, 0x54, 0xc2, 0xdc, 0x40,
0xd8, 0xf4, 0xcb, 0x1f, 0xe4, 0x88, 0xec, 0xc4, 0x1c, 0x21, 0x82, 0x24, 0xc8, 0x62, 0xdf, 0xc0,
0xa6, 0x13, 0x3a, 0x82, 0x04, 0x3a, 0xad, 0x0e, 0x5a, 0x43, 0x7c, 0x1d, 0xac, 0x21, 0x37, 0xb6,
0x9a, 0x76, 0xa7, 0x5a, 0x8c, 0x4f, 0x83, 0xdc, 0x19, 0xcb, 0xcc, 0x53, 0x09, 0xfe, 0x0c, 0x96,
0xd2, 0x93, 0xf2, 0x34, 0x92, 0x5f, 0xb4, 0xa0, 0xe4, 0x1f, 0x5b, 0x95, 0x1f, 0x5f, 0x94, 0xa1,
0xb0, 0xbb, 0x77, 0xb0, 0xbf, 0xb6, 0xde, 0xe6, 0xbf, 0xbe, 0x58, 0xdf, 0xd3, 0xf5, 0xc3, 0xfd,
0x4e, 0x3d, 0xb3, 0xfa, 0xbf, 0x59, 0xc8, 0x6c, 0xbf, 0x47, 0xbf, 0x0f, 0x39, 0xfe, 0x14, 0x39,
0xe1, 0xfd, 0xb9, 0x39, 0xe9, 0xb5, 0x15, 0xdf, 0xfd, 0xf9, 0xbf, 0xff, 0xd7, 0x2f, 0x33, 0x37,
0x71, 0xbd, 0x35, 0xfe, 0xde, 0x31, 0xf1, 0x8c, 0xd6, 0xf9, 0xb8, 0xc5, 0xea, 0xc3, 0x6b, 0xed,
0x05, 0x3a, 0x84, 0xec, 0xfe, 0xc8, 0x43, 0xa9, 0x6f, 0xd3, 0xcd, 0xf4, 0x47, 0x58, 0x7c, 0x87,
0x09, 0x9e, 0xc7, 0x35, 0x45, 0xf0, 0x70, 0xe4, 0x51, 0xb1, 0x23, 0x28, 0xab, 0xcf, 0xa8, 0x57,
0x3e, 0x5a, 0x37, 0xaf, 0x7e, 0xa2, 0xc5, 0x0f, 0x99, 0xba, 0xbb, 0xf8, 0x96, 0xa2, 0x8e, 0x3f,
0xf6, 0xaa, 0xb3, 0xe9, 0x5c, 0x58, 0x28, 0xf5, 0x59, 0xbb, 0x99, 0xfe, 0x72, 0x9b, 0x38, 0x1b,
0xef, 0xc2, 0xa2, 0x62, 0x2d, 0xf1, 0x70, 0xdb, 0xf5, 0xd0, 0x83, 0x84, 0x87, 0x3b, 0xf5, 0x89,
0xaa, 0xb9, 0x94, 0xce, 0x20, 0x14, 0x2d, 0x31, 0x45, 0x4d, 0x7c, 0x53, 0x51, 0xd4, 0xf5, 0xd9,
0x5e, 0x6b, 0x2f, 0x56, 0x4f, 0x21, 0xc7, 0x70, 0x68, 0xf4, 0x07, 0xf2, 0xa3, 0x99, 0x00, 0xae,
0xa7, 0x2c, 0x7e, 0x08, 0xc1, 0xc6, 0x0d, 0xa6, 0x0c, 0xe1, 0xaa, 0x54, 0xc6, 0x90, 0xe8, 0xd7,
0xda, 0x8b, 0x65, 0xed, 0x3b, 0xda, 0xea, 0xff, 0xcc, 0x42, 0x8e, 0x81, 0x52, 0xc8, 0x06, 0x08,
0x30, 0xdb, 0xe8, 0x2c, 0x63, 0x28, 0x70, 0x74, 0x96, 0x71, 0xb8, 0x17, 0x2f, 0x32, 0xc5, 0x0d,
0x3c, 0x2f, 0x15, 0x33, 0xbc, 0xab, 0xc5, 0x20, 0x3c, 0xea, 0xd3, 0xb1, 0x80, 0xe5, 0x78, 0x98,
0xa1, 0x24, 0x81, 0x21, 0xec, 0x36, 0xba, 0x43, 0x12, 0x70, 0x5b, 0x8c, 0x99, 0xce, 0x7b, 0xf8,
0xb6, 0xe2, 0x59, 0xae, 0xd6, 0x61, 0x8c, 0x54, 0xef, 0x9f, 0x69, 0x50, 0x0b, 0xa3, 0xaf, 0xe8,
0x51, 0x82, 0xe4, 0x28, 0x88, 0xdb, 0x7c, 0x3c, 0x99, 0x29, 0xcd, 0x02, 0xae, 0xfe, 0x9c, 0x90,
0xa1, 0x41, 0x19, 0x85, 0xe3, 0xd1, 0x5f, 0x68, 0x30, 0x17, 0x81, 0x54, 0x51, 0x92, 0x86, 0x18,
0x60, 0xdb, 0x7c, 0x72, 0x05, 0x97, 0x30, 0xe4, 0x29, 0x33, 0x64, 0x09, 0xdf, 0x8d, 0xb9, 0xc2,
0x33, 0x07, 0xc4, 0xb3, 0x85, 0x31, 0xfe, 0x32, 0x70, 0xf8, 0x33, 0x71, 0x19, 0x42, 0x70, 0x6a,
0xe2, 0x32, 0x84, 0xb1, 0xd3, 0x09, 0xcb, 0xc0, 0x31, 0x4f, 0xba, 0xc5, 0xff, 0x2f, 0x0b, 0x85,
0x75, 0xfe, 0x13, 0x48, 0xe4, 0x42, 0xc9, 0xc7, 0x19, 0xd1, 0x62, 0x12, 0xe6, 0x13, 0xdc, 0x16,
0x9a, 0x0f, 0x52, 0xfb, 0x85, 0xf6, 0x27, 0x4c, 0xfb, 0x03, 0xdc, 0x94, 0xda, 0xc5, 0x2f, 0x2d,
0x5b, 0x1c, 0x5c, 0x68, 0x19, 0xbd, 0x1e, 0x9d, 0xf8, 0x9f, 0x42, 0x45, 0x05, 0x03, 0xd1, 0xc3,
0x44, 0xac, 0x49, 0xc5, 0x13, 0x9b, 0x78, 0x12, 0x8b, 0xd0, 0xbe, 0xcc, 0xb4, 0x63, 0x7c, 0x3f,
0x45, 0xbb, 0xc3, 0xd8, 0x43, 0x06, 0x70, 0x30, 0x2f, 0xd9, 0x80, 0x10, 0x56, 0x98, 0x6c, 0x40,
0x18, 0x0b, 0xbc, 0xd2, 0x80, 0x11, 0x63, 0xa7, 0x06, 0x7c, 0x00, 0x08, 0xa0, 0x3b, 0x94, 0xe8,
0x57, 0xe5, 0xea, 0x14, 0x0d, 0xf9, 0x38, 0xea, 0x17, 0xdf, 0x73, 0x11, 0xd5, 0x7d, 0xd3, 0xa5,
0xa1, 0xbf, 0xfa, 0xab, 0x3c, 0x94, 0xdf, 0x19, 0xa6, 0xe5, 0x11, 0xcb, 0xb0, 0xba, 0x04, 0x9d,
0x40, 0x8e, 0x95, 0xc6, 0x68, 0x96, 0x53, 0x11, 0xad, 0x68, 0x96, 0x0b, 0xc1, 0x3d, 0xf8, 0x31,
0xd3, 0xbc, 0x88, 0xef, 0x48, 0xcd, 0x83, 0x40, 0x7c, 0x8b, 0x21, 0x35, 0x74, 0xc2, 0x7f, 0x08,
0x79, 0xf1, 0x08, 0x10, 0x11, 0x16, 0x42, 0x70, 0x9a, 0xf7, 0x92, 0x3b, 0xd3, 0xb6, 0x97, 0xaa,
0xca, 0x65, 0xbc, 0x54, 0xd7, 0x47, 0x80, 0x00, 0x86, 0x8c, 0x3a, 0x37, 0x86, 0x5a, 0x36, 0x97,
0xd2, 0x19, 0x84, 0xde, 0xe7, 0x4c, 0xef, 0x23, 0xbc, 0x98, 0xa4, 0xb7, 0xe7, 0xf3, 0x53, 0xdd,
0xc7, 0x30, 0xbb, 0x69, 0xb8, 0x67, 0x28, 0x52, 0xec, 0x94, 0x5f, 0x2d, 0x34, 0x9b, 0x49, 0x5d,
0x42, 0xd3, 0x23, 0xa6, 0xe9, 0x3e, 0x6e, 0x24, 0x69, 0x3a, 0x33, 0x5c, 0x5a, 0x3d, 0xd0, 0x19,
0xe4, 0xf9, 0x0f, 0x19, 0xa2, 0xbe, 0x0c, 0xfd, 0x18, 0x22, 0xea, 0xcb, 0xf0, 0x6f, 0x1f, 0xae,
0xa7, 0xc9, 0x83, 0xa2, 0xfc, 0xf5, 0x00, 0xba, 0x1f, 0x59, 0x9a, 0xf0, 0x2f, 0x0d, 0x9a, 0x8b,
0x69, 0xdd, 0x42, 0xdf, 0x33, 0xa6, 0xef, 0x21, 0xbe, 0x97, 0xb8, 0x76, 0x82, 0xfb, 0xb5, 0xf6,
0xe2, 0x3b, 0x1a, 0x2d, 0x13, 0x10, 0x40, 0xb9, 0xb1, 0xe8, 0x88, 0xa2, 0xc2, 0xb1, 0xe8, 0x88,
0xa1, 0xc0, 0x78, 0x95, 0x29, 0x7f, 0x85, 0x9f, 0x25, 0x29, 0xf7, 0x1c, 0xc3, 0x72, 0x4f, 0x88,
0xf3, 0x09, 0x87, 0xec, 0xdc, 0x33, 0x73, 0x48, 0x23, 0xe5, 0xff, 0xe7, 0x60, 0x96, 0x9e, 0x47,
0x69, 0x79, 0x0e, 0xae, 0xf1, 0x51, 0x6b, 0x62, 0xe0, 0x59, 0xd4, 0x9a, 0x38, 0x02, 0x10, 0x2f,
0xcf, 0xec, 0xc7, 0xee, 0x84, 0x31, 0x51, 0xaf, 0xbb, 0x50, 0x56, 0xee, 0xfa, 0x28, 0x41, 0x60,
0x18, 0x99, 0x8b, 0xd6, 0x85, 0x04, 0xa0, 0x00, 0x3f, 0x60, 0x3a, 0xef, 0xe0, 0x85, 0x90, 0xce,
0x1e, 0xe7, 0xa2, 0x4a, 0xff, 0x18, 0x2a, 0x2a, 0x26, 0x80, 0x12, 0x64, 0x46, 0x90, 0xbf, 0x68,
0x4a, 0x4c, 0x82, 0x14, 0xe2, 0xd9, 0xc1, 0xff, 0x61, 0xbf, 0x64, 0xa5, 0xca, 0x87, 0x50, 0x10,
0x40, 0x41, 0xd2, 0x6c, 0xc3, 0x50, 0x61, 0xd2, 0x6c, 0x23, 0x28, 0x43, 0xfc, 0x98, 0xc7, 0xb4,
0xd2, 0xfb, 0x90, 0x2c, 0x41, 0x42, 0xe3, 0x5b, 0xe2, 0xa5, 0x69, 0x0c, 0xb0, 0xaf, 0x34, 0x8d,
0xca, 0x5d, 0x74, 0x92, 0xc6, 0x53, 0xe2, 0x89, 0x58, 0x92, 0xf7, 0x3c, 0x94, 0x22, 0x50, 0x4d,
0xf9, 0x78, 0x12, 0x4b, 0xda, 0xa9, 0x3c, 0x50, 0x2a, 0xf2, 0x3d, 0xfa, 0x19, 0x40, 0x00, 0x69,
0x44, 0x4f, 0x5b, 0x89, 0xb8, 0x68, 0xf4, 0xb4, 0x95, 0x8c, 0x8a, 0xc4, 0xf3, 0x47, 0xa0, 0x9b,
0x5f, 0x0c, 0xa8, 0xf6, 0xbf, 0xd1, 0x00, 0xc5, 0x11, 0x10, 0xf4, 0x32, 0x59, 0x43, 0x22, 0xe2,
0xda, 0x7c, 0x75, 0x3d, 0xe6, 0xb4, 0x12, 0x11, 0x98, 0xd5, 0x65, 0x23, 0x86, 0x1f, 0xa8, 0x61,
0xbf, 0xd0, 0xa0, 0x1a, 0x82, 0x50, 0xd0, 0xd3, 0x94, 0x35, 0x8e, 0x80, 0xb6, 0xcd, 0x67, 0x57,
0xf2, 0xa5, 0x9d, 0xc4, 0x94, 0x1d, 0x21, 0x0f, 0xe2, 0x7f, 0xa9, 0x41, 0x2d, 0x0c, 0xbb, 0xa0,
0x14, 0xf9, 0x31, 0xe0, 0xb7, 0xb9, 0x7c, 0x35, 0xe3, 0xd5, 0x4b, 0x15, 0x9c, 0xcd, 0x87, 0x50,
0x10, 0x60, 0x4d, 0x52, 0x40, 0x84, 0x61, 0xe3, 0xa4, 0x80, 0x88, 0x20, 0x3d, 0x29, 0x01, 0xe1,
0xd8, 0x7d, 0xa2, 0x84, 0xa0, 0x40, 0x74, 0xd2, 0x34, 0x4e, 0x0e, 0xc1, 0x08, 0x1c, 0x34, 0x49,
0x63, 0x10, 0x82, 0x12, 0xce, 0x41, 0x29, 0x02, 0xaf, 0x08, 0xc1, 0x28, 0x1a, 0x94, 0x12, 0x82,
0x4c, 0xa9, 0x12, 0x82, 0x01, 0xf8, 0x92, 0x14, 0x82, 0x31, 0x44, 0x3c, 0x29, 0x04, 0xe3, 0xf8,
0x4d, 0xca, 0xba, 0x32, 0xdd, 0xa1, 0x10, 0x9c, 0x4f, 0xc0, 0x6a, 0xd0, 0xab, 0x14, 0x87, 0x26,
0x82, 0xed, 0xcd, 0x4f, 0xae, 0xc9, 0x3d, 0x71, 0xef, 0xf3, 0xa5, 0x90, 0x7b, 0xff, 0xef, 0x35,
0x58, 0x48, 0xc2, 0x7a, 0x50, 0x8a, 0xae, 0x14, 0xa0, 0xbe, 0xb9, 0x72, 0x5d, 0xf6, 0xab, 0xbd,
0xe6, 0x47, 0xc3, 0x9b, 0xfa, 0xbf, 0x7c, 0xb1, 0xa8, 0xfd, 0xdb, 0x17, 0x8b, 0xda, 0x7f, 0x7c,
0xb1, 0xa8, 0xfd, 0xed, 0x7f, 0x2e, 0xce, 0x1c, 0xe7, 0xd9, 0x7f, 0x31, 0xfb, 0xde, 0x6f, 0x02,
0x00, 0x00, 0xff, 0xff, 0x8e, 0x1f, 0x05, 0xf6, 0xfb, 0x36, 0x00, 0x00,
// 3712 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5b, 0xdd, 0x6f, 0x1b, 0xc7,
0x76, 0xd7, 0x92, 0xe2, 0xd7, 0xe1, 0x87, 0xa8, 0x91, 0x64, 0xd3, 0xb4, 0x2d, 0xcb, 0x63, 0x3b,
0x56, 0xec, 0x44, 0xbc, 0x57, 0xf7, 0xb6, 0x0f, 0x6e, 0x71, 0x71, 0x65, 0x89, 0xd7, 0xd2, 0x95,
0x2c, 0x29, 0x2b, 0xca, 0x49, 0x8a, 0xa0, 0xc2, 0x8a, 0x1c, 0x49, 0x5b, 0x91, 0xbb, 0xcc, 0xee,
0x92, 0x96, 0xd2, 0xa2, 0x29, 0x82, 0xf4, 0xa5, 0x40, 0x5f, 0x12, 0xa0, 0x68, 0x9f, 0x8b, 0xa2,
0xc8, 0x5b, 0x5f, 0x82, 0x02, 0xfd, 0x0b, 0xfa, 0xd6, 0x02, 0xfd, 0x07, 0x0a, 0x37, 0x2f, 0xfd,
0x2f, 0x2e, 0xe6, 0x6b, 0x77, 0xf6, 0x4b, 0x72, 0xc2, 0x24, 0x2f, 0xf2, 0xce, 0x99, 0x33, 0xe7,
0x77, 0xe6, 0xcc, 0xcc, 0x39, 0x67, 0xce, 0xd0, 0x50, 0x72, 0x86, 0xdd, 0x95, 0xa1, 0x63, 0x7b,
0x36, 0xaa, 0x10, 0xaf, 0xdb, 0x73, 0x89, 0x33, 0x26, 0xce, 0xf0, 0xb8, 0x39, 0x7f, 0x6a, 0x9f,
0xda, 0xac, 0xa3, 0x45, 0xbf, 0x38, 0x4f, 0x13, 0x53, 0x9e, 0x96, 0x69, 0x79, 0xc4, 0xb1, 0x8c,
0x7e, 0x6b, 0x30, 0xee, 0x76, 0xd9, 0x9f, 0xe1, 0x71, 0xeb, 0x7c, 0x2c, 0x78, 0x1e, 0x86, 0x79,
0x8c, 0x91, 0x77, 0xc6, 0xfe, 0x0c, 0x8f, 0xd9, 0x3f, 0x82, 0xeb, 0xce, 0xa9, 0x6d, 0x9f, 0xf6,
0x49, 0xcb, 0x18, 0x9a, 0x2d, 0xc3, 0xb2, 0x6c, 0xcf, 0xf0, 0x4c, 0xdb, 0x72, 0x79, 0x2f, 0xfe,
0x5b, 0x0d, 0x6a, 0x3a, 0x71, 0x87, 0xb6, 0xe5, 0x92, 0x4d, 0x62, 0xf4, 0x88, 0x83, 0xee, 0x02,
0x74, 0xfb, 0x23, 0xd7, 0x23, 0xce, 0x91, 0xd9, 0x6b, 0x68, 0x4b, 0xda, 0xf2, 0xb4, 0x5e, 0x12,
0x94, 0xad, 0x1e, 0xba, 0x0d, 0xa5, 0x01, 0x19, 0x1c, 0xf3, 0xde, 0x0c, 0xeb, 0x2d, 0x72, 0xc2,
0x56, 0x0f, 0x35, 0xa1, 0xe8, 0x90, 0xb1, 0xe9, 0x9a, 0xb6, 0xd5, 0xc8, 0x2e, 0x69, 0xcb, 0x59,
0xdd, 0x6f, 0xd3, 0x81, 0x8e, 0x71, 0xe2, 0x1d, 0x79, 0xc4, 0x19, 0x34, 0xa6, 0xf9, 0x40, 0x4a,
0xe8, 0x10, 0x67, 0x80, 0xbf, 0xcc, 0x41, 0x45, 0x37, 0xac, 0x53, 0xa2, 0x93, 0x4f, 0x47, 0xc4,
0xf5, 0x50, 0x1d, 0xb2, 0xe7, 0xe4, 0x92, 0xc1, 0x57, 0x74, 0xfa, 0xc9, 0xc7, 0x5b, 0xa7, 0xe4,
0x88, 0x58, 0x1c, 0xb8, 0x42, 0xc7, 0x5b, 0xa7, 0xa4, 0x6d, 0xf5, 0xd0, 0x3c, 0xe4, 0xfa, 0xe6,
0xc0, 0xf4, 0x04, 0x2a, 0x6f, 0x84, 0xd4, 0x99, 0x8e, 0xa8, 0xb3, 0x0e, 0xe0, 0xda, 0x8e, 0x77,
0x64, 0x3b, 0x3d, 0xe2, 0x34, 0x72, 0x4b, 0xda, 0x72, 0x6d, 0xf5, 0xe1, 0x8a, 0xba, 0x34, 0x2b,
0xaa, 0x42, 0x2b, 0x07, 0xb6, 0xe3, 0xed, 0x51, 0x5e, 0xbd, 0xe4, 0xca, 0x4f, 0xf4, 0x3b, 0x28,
0x33, 0x21, 0x9e, 0xe1, 0x9c, 0x12, 0xaf, 0x91, 0x67, 0x52, 0x1e, 0x5d, 0x23, 0xa5, 0xc3, 0x98,
0x75, 0x06, 0xcf, 0xbf, 0x11, 0x86, 0x8a, 0x4b, 0x1c, 0xd3, 0xe8, 0x9b, 0x9f, 0x19, 0xc7, 0x7d,
0xd2, 0x28, 0x2c, 0x69, 0xcb, 0x45, 0x3d, 0x44, 0xa3, 0xf3, 0x3f, 0x27, 0x97, 0xee, 0x91, 0x6d,
0xf5, 0x2f, 0x1b, 0x45, 0xc6, 0x50, 0xa4, 0x84, 0x3d, 0xab, 0x7f, 0xc9, 0x16, 0xcd, 0x1e, 0x59,
0x1e, 0xef, 0x2d, 0xb1, 0xde, 0x12, 0xa3, 0xb0, 0xee, 0x65, 0xa8, 0x0f, 0x4c, 0xeb, 0x68, 0x60,
0xf7, 0x8e, 0x7c, 0x83, 0x00, 0x33, 0x48, 0x6d, 0x60, 0x5a, 0x2f, 0xed, 0x9e, 0x2e, 0xcd, 0x42,
0x39, 0x8d, 0x8b, 0x30, 0x67, 0x59, 0x70, 0x1a, 0x17, 0x2a, 0xe7, 0x0a, 0xcc, 0x51, 0x99, 0x5d,
0x87, 0x18, 0x1e, 0x09, 0x98, 0x2b, 0x8c, 0x79, 0x76, 0x60, 0x5a, 0xeb, 0xac, 0x27, 0xc4, 0x6f,
0x5c, 0xc4, 0xf8, 0xab, 0x82, 0xdf, 0xb8, 0x08, 0xf3, 0xe3, 0x15, 0x28, 0xf9, 0x36, 0x47, 0x45,
0x98, 0xde, 0xdd, 0xdb, 0x6d, 0xd7, 0xa7, 0x10, 0x40, 0x7e, 0xed, 0x60, 0xbd, 0xbd, 0xbb, 0x51,
0xd7, 0x50, 0x19, 0x0a, 0x1b, 0x6d, 0xde, 0xc8, 0xe0, 0xe7, 0x00, 0x81, 0x75, 0x51, 0x01, 0xb2,
0xdb, 0xed, 0x8f, 0xeb, 0x53, 0x94, 0xe7, 0x55, 0x5b, 0x3f, 0xd8, 0xda, 0xdb, 0xad, 0x6b, 0x74,
0xf0, 0xba, 0xde, 0x5e, 0xeb, 0xb4, 0xeb, 0x19, 0xca, 0xf1, 0x72, 0x6f, 0xa3, 0x9e, 0x45, 0x25,
0xc8, 0xbd, 0x5a, 0xdb, 0x39, 0x6c, 0xd7, 0xa7, 0xf1, 0xd7, 0x1a, 0x54, 0xc5, 0x7a, 0xf1, 0x33,
0x81, 0x7e, 0x0d, 0xf9, 0x33, 0x76, 0x2e, 0xd8, 0x56, 0x2c, 0xaf, 0xde, 0x89, 0x2c, 0x6e, 0xe8,
0xec, 0xe8, 0x82, 0x17, 0x61, 0xc8, 0x9e, 0x8f, 0xdd, 0x46, 0x66, 0x29, 0xbb, 0x5c, 0x5e, 0xad,
0xaf, 0xf0, 0x93, 0xbb, 0xb2, 0x4d, 0x2e, 0x5f, 0x19, 0xfd, 0x11, 0xd1, 0x69, 0x27, 0x42, 0x30,
0x3d, 0xb0, 0x1d, 0xc2, 0x76, 0x6c, 0x51, 0x67, 0xdf, 0x74, 0x1b, 0xb3, 0x45, 0x13, 0xbb, 0x95,
0x37, 0xf0, 0x37, 0x1a, 0xc0, 0xfe, 0xc8, 0x4b, 0x3f, 0x1a, 0xf3, 0x90, 0x1b, 0x53, 0xc1, 0xe2,
0x58, 0xf0, 0x06, 0x3b, 0x13, 0xc4, 0x70, 0x89, 0x7f, 0x26, 0x68, 0x03, 0xdd, 0x84, 0xc2, 0xd0,
0x21, 0xe3, 0xa3, 0xf3, 0x31, 0x03, 0x29, 0xea, 0x79, 0xda, 0xdc, 0x1e, 0xa3, 0xfb, 0x50, 0x31,
0x4f, 0x2d, 0xdb, 0x21, 0x47, 0x5c, 0x56, 0x8e, 0xf5, 0x96, 0x39, 0x8d, 0xe9, 0xad, 0xb0, 0x70,
0xc1, 0x79, 0x95, 0x65, 0x87, 0x92, 0xb0, 0x05, 0x65, 0xa6, 0xea, 0x44, 0xe6, 0x7b, 0x37, 0xd0,
0x31, 0xc3, 0x86, 0xc5, 0x4d, 0x28, 0xb4, 0xc6, 0x9f, 0x00, 0xda, 0x20, 0x7d, 0xe2, 0x91, 0x49,
0xbc, 0x87, 0x62, 0x93, 0xac, 0x6a, 0x13, 0xfc, 0x95, 0x06, 0x73, 0x21, 0xf1, 0x13, 0x4d, 0xab,
0x01, 0x85, 0x1e, 0x13, 0xc6, 0x35, 0xc8, 0xea, 0xb2, 0x89, 0x9e, 0x42, 0x51, 0x28, 0xe0, 0x36,
0xb2, 0x29, 0x9b, 0xa6, 0xc0, 0x75, 0x72, 0xf1, 0x37, 0x19, 0x28, 0x89, 0x89, 0xee, 0x0d, 0xd1,
0x1a, 0x54, 0x1d, 0xde, 0x38, 0x62, 0xf3, 0x11, 0x1a, 0x35, 0xd3, 0x9d, 0xd0, 0xe6, 0x94, 0x5e,
0x11, 0x43, 0x18, 0x19, 0xfd, 0x09, 0x94, 0xa5, 0x88, 0xe1, 0xc8, 0x13, 0x26, 0x6f, 0x84, 0x05,
0x04, 0xfb, 0x6f, 0x73, 0x4a, 0x07, 0xc1, 0xbe, 0x3f, 0xf2, 0x50, 0x07, 0xe6, 0xe5, 0x60, 0x3e,
0x1b, 0xa1, 0x46, 0x96, 0x49, 0x59, 0x0a, 0x4b, 0x89, 0x2f, 0xd5, 0xe6, 0x94, 0x8e, 0xc4, 0x78,
0xa5, 0x53, 0x55, 0xc9, 0xbb, 0xe0, 0xce, 0x3b, 0xa6, 0x52, 0xe7, 0xc2, 0x8a, 0xab, 0xd4, 0xb9,
0xb0, 0x9e, 0x97, 0xa0, 0x20, 0x5a, 0xf8, 0xdf, 0x33, 0x00, 0x72, 0x35, 0xf6, 0x86, 0x68, 0x03,
0x6a, 0x8e, 0x68, 0x85, 0xac, 0x75, 0x3b, 0xd1, 0x5a, 0x62, 0x11, 0xa7, 0xf4, 0xaa, 0x1c, 0xc4,
0x95, 0xfb, 0x0d, 0x54, 0x7c, 0x29, 0x81, 0xc1, 0x6e, 0x25, 0x18, 0xcc, 0x97, 0x50, 0x96, 0x03,
0xa8, 0xc9, 0x3e, 0x84, 0x05, 0x7f, 0x7c, 0x82, 0xcd, 0xee, 0x5f, 0x61, 0x33, 0x5f, 0xe0, 0x9c,
0x94, 0xa0, 0x5a, 0x4d, 0x55, 0x2c, 0x30, 0xdb, 0xad, 0x04, 0xb3, 0xc5, 0x15, 0xa3, 0x86, 0x03,
0x1a, 0x2f, 0x79, 0x13, 0xff, 0x7f, 0x16, 0x0a, 0xeb, 0xf6, 0x60, 0x68, 0x38, 0x74, 0x35, 0xf2,
0x0e, 0x71, 0x47, 0x7d, 0x8f, 0x99, 0xab, 0xb6, 0xfa, 0x20, 0x2c, 0x51, 0xb0, 0xc9, 0x7f, 0x75,
0xc6, 0xaa, 0x8b, 0x21, 0x74, 0xb0, 0x08, 0x8f, 0x99, 0xb7, 0x18, 0x2c, 0x82, 0xa3, 0x18, 0x22,
0x0f, 0x72, 0x36, 0x38, 0xc8, 0x4d, 0x28, 0x8c, 0x89, 0x13, 0x84, 0xf4, 0xcd, 0x29, 0x5d, 0x12,
0xd0, 0xbb, 0x30, 0x13, 0x0d, 0x2f, 0x39, 0xc1, 0x53, 0xeb, 0x86, 0xa3, 0xd1, 0x03, 0xa8, 0x84,
0x62, 0x5c, 0x5e, 0xf0, 0x95, 0x07, 0x4a, 0x88, 0xbb, 0x21, 0xfd, 0x2a, 0x8d, 0xc7, 0x95, 0xcd,
0x29, 0xe9, 0x59, 0x6f, 0x48, 0xcf, 0x5a, 0x14, 0xa3, 0x84, 0x6f, 0x0d, 0x39, 0x99, 0xdf, 0x86,
0x9d, 0x0c, 0xfe, 0x2d, 0x54, 0x43, 0x06, 0xa2, 0x71, 0xa7, 0xfd, 0xc1, 0xe1, 0xda, 0x0e, 0x0f,
0x52, 0x2f, 0x58, 0x5c, 0xd2, 0xeb, 0x1a, 0x8d, 0x75, 0x3b, 0xed, 0x83, 0x83, 0x7a, 0x06, 0x55,
0xa1, 0xb4, 0xbb, 0xd7, 0x39, 0xe2, 0x5c, 0x59, 0xfc, 0xc2, 0x97, 0x20, 0x82, 0x9c, 0x12, 0xdb,
0xa6, 0x94, 0xd8, 0xa6, 0xc9, 0xd8, 0x96, 0x09, 0x62, 0x1b, 0x0b, 0x73, 0x3b, 0xed, 0xb5, 0x83,
0x76, 0x7d, 0xfa, 0x79, 0x0d, 0x2a, 0xdc, 0xbe, 0x47, 0x23, 0x8b, 0x86, 0xda, 0x7f, 0xd6, 0x00,
0x82, 0xd3, 0x84, 0x5a, 0x50, 0xe8, 0x72, 0x9c, 0x86, 0xc6, 0x9c, 0xd1, 0x42, 0xe2, 0x92, 0xe9,
0x92, 0x0b, 0xfd, 0x12, 0x0a, 0xee, 0xa8, 0xdb, 0x25, 0xae, 0x0c, 0x79, 0x37, 0xa3, 0xfe, 0x50,
0x78, 0x2b, 0x5d, 0xf2, 0xd1, 0x21, 0x27, 0x86, 0xd9, 0x1f, 0xb1, 0x00, 0x78, 0xf5, 0x10, 0xc1,
0x87, 0xff, 0x49, 0x83, 0xb2, 0xb2, 0x79, 0x7f, 0xa0, 0x13, 0xbe, 0x03, 0x25, 0xa6, 0x03, 0xe9,
0x09, 0x37, 0x5c, 0xd4, 0x03, 0x02, 0xfa, 0x63, 0x28, 0xc9, 0x13, 0x20, 0x3d, 0x71, 0x23, 0x59,
0xec, 0xde, 0x50, 0x0f, 0x58, 0xf1, 0x36, 0xcc, 0x32, 0xab, 0x74, 0x69, 0x72, 0x2d, 0xed, 0xa8,
0xa6, 0x9f, 0x5a, 0x24, 0xfd, 0x6c, 0x42, 0x71, 0x78, 0x76, 0xe9, 0x9a, 0x5d, 0xa3, 0x2f, 0xb4,
0xf0, 0xdb, 0xf8, 0xf7, 0x80, 0x54, 0x61, 0x93, 0x4c, 0x17, 0x57, 0xa1, 0xbc, 0x69, 0xb8, 0x67,
0x42, 0x25, 0xfc, 0x14, 0xaa, 0xb4, 0xb9, 0xfd, 0xea, 0x2d, 0x74, 0x64, 0x97, 0x03, 0xc9, 0x3d,
0x91, 0xcd, 0x11, 0x4c, 0x9f, 0x19, 0xee, 0x19, 0x9b, 0x68, 0x55, 0x67, 0xdf, 0xe8, 0x5d, 0xa8,
0x77, 0xf9, 0x24, 0x8f, 0x22, 0x57, 0x86, 0x19, 0x41, 0xf7, 0x33, 0xc1, 0x8f, 0xa0, 0xc2, 0xe7,
0xf0, 0x63, 0x2b, 0x81, 0x67, 0x61, 0xe6, 0xc0, 0x32, 0x86, 0xee, 0x99, 0x2d, 0xa3, 0x1b, 0x9d,
0x74, 0x3d, 0xa0, 0x4d, 0x84, 0xf8, 0x18, 0x66, 0x1c, 0x32, 0x30, 0x4c, 0xcb, 0xb4, 0x4e, 0x8f,
0x8e, 0x2f, 0x3d, 0xe2, 0x8a, 0x0b, 0x53, 0xcd, 0x27, 0x3f, 0xa7, 0x54, 0xaa, 0xda, 0x71, 0xdf,
0x3e, 0x16, 0x6e, 0x8e, 0x7d, 0xe3, 0x6f, 0x35, 0xa8, 0x7c, 0x68, 0x78, 0x5d, 0xb9, 0x74, 0x68,
0x0b, 0x6a, 0xbe, 0x73, 0x63, 0x14, 0xa1, 0x4b, 0x24, 0xc4, 0xb2, 0x31, 0x32, 0x95, 0x96, 0xd1,
0xb1, 0xda, 0x55, 0x09, 0x4c, 0x94, 0x61, 0x75, 0x49, 0xdf, 0x17, 0x95, 0x49, 0x17, 0xc5, 0x18,
0x55, 0x51, 0x2a, 0xe1, 0xf9, 0x4c, 0x90, 0x7e, 0x70, 0x5f, 0xf2, 0x6d, 0x06, 0x50, 0x5c, 0x87,
0xef, 0x9b, 0x91, 0x3d, 0x82, 0x9a, 0xeb, 0x19, 0x4e, 0x6c, 0x6f, 0x54, 0x19, 0xd5, 0x77, 0xd0,
0x8f, 0x61, 0x66, 0xe8, 0xd8, 0xa7, 0x0e, 0x71, 0xdd, 0x23, 0xcb, 0xf6, 0xcc, 0x93, 0x4b, 0x91,
0xd4, 0xd6, 0x24, 0x79, 0x97, 0x51, 0x51, 0x1b, 0x0a, 0x27, 0x66, 0xdf, 0x23, 0x8e, 0xdb, 0xc8,
0x2d, 0x65, 0x97, 0x6b, 0xab, 0x4f, 0xaf, 0xb3, 0xda, 0xca, 0xef, 0x18, 0x7f, 0xe7, 0x72, 0x48,
0x74, 0x39, 0x56, 0x4d, 0x14, 0xf3, 0xa1, 0xe4, 0xf9, 0x16, 0x14, 0x5f, 0x53, 0x11, 0xf4, 0x52,
0x5c, 0xe0, 0xb9, 0x1d, 0x6b, 0x6f, 0xf5, 0xf0, 0x23, 0x80, 0x40, 0x14, 0xf5, 0xc2, 0xbb, 0x7b,
0xfb, 0x87, 0x9d, 0xfa, 0x14, 0xaa, 0x40, 0x71, 0x77, 0x6f, 0xa3, 0xbd, 0xd3, 0xa6, 0x2e, 0x1b,
0xb7, 0xa4, 0xd9, 0x54, 0xf3, 0x86, 0xe4, 0x6a, 0x61, 0xb9, 0x7f, 0x9f, 0x81, 0xaa, 0xd8, 0x20,
0x13, 0xed, 0x52, 0x15, 0x22, 0x13, 0x82, 0xa0, 0x09, 0x2b, 0xdf, 0x38, 0x3d, 0x91, 0x17, 0xcb,
0x26, 0x75, 0x1b, 0x7c, 0x1f, 0x90, 0x9e, 0xb0, 0xb8, 0xdf, 0x4e, 0x3c, 0xd9, 0xb9, 0xc4, 0x93,
0x8d, 0x1e, 0x40, 0xd5, 0xdf, 0x88, 0x86, 0x2b, 0xc2, 0x70, 0x49, 0xaf, 0xc8, 0x3d, 0x46, 0x69,
0xe8, 0x11, 0xe4, 0xc9, 0x98, 0x58, 0x9e, 0xdb, 0x28, 0x33, 0x87, 0x5c, 0x95, 0xa9, 0x71, 0x9b,
0x52, 0x75, 0xd1, 0x89, 0xff, 0x08, 0x66, 0xd9, 0x15, 0xe4, 0x85, 0x63, 0x58, 0xea, 0x5d, 0xa9,
0xd3, 0xd9, 0x11, 0xa6, 0xa3, 0x9f, 0xa8, 0x06, 0x99, 0xad, 0x0d, 0x31, 0xd1, 0xcc, 0xd6, 0x06,
0xfe, 0x42, 0x03, 0xa4, 0x8e, 0x9b, 0xc8, 0x96, 0x11, 0xe1, 0x12, 0x3e, 0x1b, 0xc0, 0xcf, 0x43,
0x8e, 0x38, 0x8e, 0xed, 0x30, 0xab, 0x95, 0x74, 0xde, 0xc0, 0x0f, 0x85, 0x0e, 0x3a, 0x19, 0xdb,
0xe7, 0xfe, 0x99, 0xe1, 0xd2, 0x34, 0x5f, 0xd5, 0x6d, 0x98, 0x0b, 0x71, 0x4d, 0x14, 0x18, 0x1e,
0xc3, 0x02, 0x13, 0xb6, 0x4d, 0xc8, 0x70, 0xad, 0x6f, 0x8e, 0x53, 0x51, 0x87, 0x70, 0x23, 0xca,
0xf8, 0xd3, 0xda, 0x08, 0xff, 0xa9, 0x40, 0xec, 0x98, 0x03, 0xd2, 0xb1, 0x77, 0xd2, 0x75, 0xa3,
0x8e, 0xf3, 0x9c, 0x5c, 0xba, 0x22, 0x82, 0xb2, 0x6f, 0xfc, 0x2f, 0x1a, 0xdc, 0x8c, 0x0d, 0xff,
0x89, 0x57, 0x75, 0x11, 0xe0, 0x94, 0x6e, 0x1f, 0xd2, 0xa3, 0x1d, 0xfc, 0xf2, 0xae, 0x50, 0x7c,
0x3d, 0xa9, 0xef, 0xa9, 0x08, 0x3d, 0xe7, 0xc5, 0x9a, 0xb3, 0x3f, 0xae, 0x0c, 0x3f, 0x77, 0xa1,
0xcc, 0x08, 0x07, 0x9e, 0xe1, 0x8d, 0xdc, 0xd8, 0x62, 0xfc, 0xb5, 0xd8, 0x02, 0x72, 0xd0, 0x44,
0xf3, 0xfa, 0x25, 0xe4, 0x59, 0xde, 0x2a, 0xb3, 0xb6, 0xc8, 0x45, 0x41, 0xd1, 0x43, 0x17, 0x8c,
0xf8, 0x0c, 0xf2, 0x2f, 0x59, 0xb1, 0x4f, 0xd1, 0x6c, 0x5a, 0x2e, 0x85, 0x65, 0x0c, 0x78, 0x09,
0xa2, 0xa4, 0xb3, 0x6f, 0x96, 0xe4, 0x10, 0xe2, 0x1c, 0xea, 0x3b, 0x3c, 0x99, 0x2a, 0xe9, 0x7e,
0x9b, 0x9a, 0xac, 0xdb, 0x37, 0x89, 0xe5, 0xb1, 0xde, 0x69, 0xd6, 0xab, 0x50, 0xf0, 0x0a, 0xd4,
0x39, 0xd2, 0x5a, 0xaf, 0xa7, 0x24, 0x2b, 0xbe, 0x3c, 0x2d, 0x2c, 0x0f, 0xff, 0xab, 0x06, 0xb3,
0xca, 0x80, 0x89, 0x0c, 0xf3, 0x1e, 0xe4, 0x79, 0x49, 0x53, 0xc4, 0xc5, 0xf9, 0xf0, 0x28, 0x0e,
0xa3, 0x0b, 0x1e, 0xb4, 0x02, 0x05, 0xfe, 0x25, 0x33, 0xc6, 0x64, 0x76, 0xc9, 0x84, 0x1f, 0xc1,
0x9c, 0x20, 0x91, 0x81, 0x9d, 0xb4, 0xb7, 0x99, 0x41, 0xf1, 0x5f, 0xc1, 0x7c, 0x98, 0x6d, 0xa2,
0x29, 0x29, 0x4a, 0x66, 0xde, 0x46, 0xc9, 0x35, 0xa9, 0xe4, 0xe1, 0xb0, 0xa7, 0x84, 0xf1, 0xe8,
0xaa, 0xab, 0x2b, 0x92, 0x89, 0xac, 0x88, 0x3f, 0x01, 0x29, 0xe2, 0x67, 0x9d, 0xc0, 0x9c, 0xdc,
0x0e, 0x3b, 0xa6, 0xeb, 0x27, 0x77, 0x9f, 0x01, 0x52, 0x89, 0x3f, 0xb7, 0x42, 0x1b, 0xe4, 0xc4,
0x31, 0x4e, 0x07, 0xc4, 0x8f, 0x4f, 0x34, 0xd5, 0x57, 0x89, 0x13, 0x79, 0xf4, 0x16, 0xcc, 0xbe,
0xb4, 0xc7, 0xd4, 0x35, 0x50, 0x6a, 0x70, 0x64, 0xf8, 0x55, 0xcf, 0x5f, 0x36, 0xbf, 0x4d, 0xc1,
0xd5, 0x01, 0x13, 0x81, 0xff, 0x97, 0x06, 0x95, 0xb5, 0xbe, 0xe1, 0x0c, 0x24, 0xf0, 0x6f, 0x20,
0xcf, 0x2f, 0x30, 0xa2, 0x66, 0xf0, 0x4e, 0x58, 0x8c, 0xca, 0xcb, 0x1b, 0x6b, 0xfc, 0xba, 0x23,
0x46, 0x51, 0xc5, 0xc5, 0xb3, 0xc2, 0x46, 0xe4, 0x99, 0x61, 0x03, 0xbd, 0x0f, 0x39, 0x83, 0x0e,
0x61, 0x2e, 0xb8, 0x16, 0xbd, 0x3a, 0x32, 0x69, 0x2c, 0x6f, 0xe3, 0x5c, 0xf8, 0xd7, 0x50, 0x56,
0x10, 0xe8, 0xe5, 0xf8, 0x45, 0x5b, 0x24, 0x60, 0x6b, 0xeb, 0x9d, 0xad, 0x57, 0xfc, 0xce, 0x5c,
0x03, 0xd8, 0x68, 0xfb, 0xed, 0x0c, 0xfe, 0x48, 0x8c, 0x12, 0xfe, 0x4e, 0xd5, 0x47, 0x4b, 0xd3,
0x27, 0xf3, 0x56, 0xfa, 0x5c, 0x40, 0x55, 0x4c, 0x7f, 0x52, 0xf7, 0xcd, 0xe4, 0xa5, 0xb8, 0x6f,
0x45, 0x79, 0x5d, 0x30, 0xe2, 0x19, 0xa8, 0x0a, 0x87, 0x2e, 0xf6, 0xdf, 0xbf, 0x65, 0xa0, 0x26,
0x29, 0x93, 0xd6, 0x36, 0x65, 0x59, 0x86, 0x47, 0x00, 0xbf, 0x28, 0x73, 0x03, 0xf2, 0xbd, 0xe3,
0x03, 0xf3, 0x33, 0x59, 0x87, 0x16, 0x2d, 0x4a, 0xef, 0x73, 0x1c, 0xfe, 0x18, 0x24, 0x5a, 0xf4,
0x82, 0xee, 0x18, 0x27, 0xde, 0x96, 0xd5, 0x23, 0x17, 0x2c, 0x6f, 0x9c, 0xd6, 0x03, 0x02, 0xbb,
0xaf, 0x8a, 0x47, 0x23, 0x96, 0x2c, 0x2a, 0x8f, 0x48, 0xe8, 0x09, 0xd4, 0xe9, 0xf7, 0xda, 0x70,
0xd8, 0x37, 0x49, 0x8f, 0x0b, 0x28, 0x30, 0x9e, 0x18, 0x9d, 0xa2, 0xb3, 0xd4, 0xcb, 0x6d, 0x14,
0x99, 0xdb, 0x12, 0x2d, 0xb4, 0x04, 0x65, 0xae, 0xdf, 0x96, 0x75, 0xe8, 0x12, 0xf6, 0x92, 0x92,
0xd5, 0x55, 0x12, 0x3d, 0xc7, 0x6b, 0x23, 0xef, 0xac, 0x6d, 0x19, 0xc7, 0x7d, 0xe9, 0x17, 0x69,
0x30, 0xa7, 0xc4, 0x0d, 0xd3, 0x55, 0xa9, 0x6d, 0x98, 0xa3, 0x54, 0x62, 0x79, 0x66, 0x57, 0x71,
0xa2, 0x32, 0x54, 0x6a, 0x91, 0x50, 0x69, 0xb8, 0xee, 0x6b, 0xdb, 0xe9, 0x09, 0x03, 0xfa, 0x6d,
0xbc, 0xc1, 0x85, 0x1f, 0xba, 0xa1, 0x60, 0xf8, 0x7d, 0xa5, 0x2c, 0x07, 0x52, 0x5e, 0x10, 0xef,
0x0a, 0x29, 0xf8, 0x29, 0x2c, 0x48, 0x4e, 0x51, 0x5d, 0xbc, 0x82, 0x79, 0x0f, 0xee, 0x4a, 0xe6,
0xf5, 0x33, 0x7a, 0x7d, 0xdb, 0x17, 0x80, 0x3f, 0x54, 0xcf, 0xe7, 0xd0, 0xf0, 0xf5, 0x64, 0x29,
0xb9, 0xdd, 0x57, 0x15, 0x18, 0xb9, 0x62, 0x67, 0x96, 0x74, 0xf6, 0x4d, 0x69, 0x8e, 0xdd, 0xf7,
0x13, 0x0f, 0xfa, 0x8d, 0xd7, 0xe1, 0x96, 0x94, 0x21, 0x92, 0xe5, 0xb0, 0x90, 0x98, 0x42, 0x49,
0x42, 0x84, 0xc1, 0xe8, 0xd0, 0xab, 0xcd, 0xae, 0x72, 0x86, 0x4d, 0xcb, 0x64, 0x6a, 0x8a, 0xcc,
0x05, 0xbe, 0x23, 0xa8, 0x62, 0x6a, 0x5c, 0x12, 0x64, 0x2a, 0x40, 0x25, 0x8b, 0x85, 0xa0, 0xe4,
0xd8, 0x42, 0xc4, 0x44, 0x7f, 0x02, 0x8b, 0xbe, 0x12, 0xd4, 0x6e, 0xfb, 0xc4, 0x19, 0x98, 0xae,
0xab, 0xd4, 0xa3, 0x92, 0x26, 0xfe, 0x0e, 0x4c, 0x0f, 0x89, 0xf0, 0x5c, 0xe5, 0x55, 0xb4, 0xc2,
0x1f, 0x90, 0x57, 0x94, 0xc1, 0xac, 0x1f, 0xf7, 0xe0, 0x9e, 0x94, 0xce, 0x2d, 0x9a, 0x28, 0x3e,
0xaa, 0x94, 0xbc, 0xf6, 0x73, 0xb3, 0xc6, 0xaf, 0xfd, 0x59, 0xbe, 0xf6, 0x7e, 0x8d, 0xf4, 0xf7,
0xdc, 0x90, 0xf2, 0x6c, 0x4d, 0x14, 0x91, 0xb6, 0xb9, 0x4d, 0xfd, 0x23, 0x39, 0x91, 0xb0, 0x63,
0x98, 0x0f, 0x9f, 0xe4, 0x89, 0x9c, 0xe5, 0x3c, 0xe4, 0x3c, 0xfb, 0x9c, 0x48, 0x57, 0xc9, 0x1b,
0x52, 0x61, 0xff, 0x98, 0x4f, 0xa4, 0xb0, 0x11, 0x08, 0x63, 0x5b, 0x72, 0x52, 0x7d, 0xe9, 0x6a,
0xca, 0x14, 0x8f, 0x37, 0xf0, 0x2e, 0xdc, 0x88, 0xba, 0x89, 0x89, 0x54, 0x7e, 0xc5, 0x37, 0x70,
0x92, 0x27, 0x99, 0x48, 0xee, 0x07, 0x81, 0x33, 0x50, 0x1c, 0xca, 0x44, 0x22, 0x75, 0x68, 0x26,
0xf9, 0x97, 0x1f, 0x63, 0xbf, 0xfa, 0xee, 0x66, 0x22, 0x61, 0x6e, 0x20, 0x6c, 0xf2, 0xe5, 0x0f,
0x7c, 0x44, 0xf6, 0x4a, 0x1f, 0x21, 0x0e, 0x49, 0xe0, 0xc5, 0x7e, 0x82, 0x4d, 0x27, 0x30, 0x02,
0x07, 0x3a, 0x29, 0x06, 0x8d, 0x21, 0x3e, 0x06, 0x6b, 0xc8, 0x8d, 0xad, 0xba, 0xdd, 0x89, 0x16,
0xe3, 0xc3, 0xc0, 0x77, 0xc6, 0x3c, 0xf3, 0x44, 0x82, 0x3f, 0x82, 0xa5, 0x74, 0xa7, 0x3c, 0x89,
0xe4, 0x27, 0x2d, 0x28, 0xf9, 0x69, 0xab, 0xf2, 0xe3, 0x8b, 0x32, 0x14, 0x76, 0xf7, 0x0e, 0xf6,
0xd7, 0xd6, 0xdb, 0xfc, 0xd7, 0x17, 0xeb, 0x7b, 0xba, 0x7e, 0xb8, 0xdf, 0xa9, 0x67, 0x56, 0xbf,
0xcb, 0x42, 0x66, 0xfb, 0x15, 0xfa, 0x18, 0x72, 0xfc, 0x29, 0xf2, 0x8a, 0xf7, 0xe7, 0xe6, 0x55,
0xaf, 0xad, 0xf8, 0xe6, 0x17, 0xff, 0xf3, 0xdd, 0xd7, 0x99, 0x59, 0x5c, 0x69, 0x8d, 0x7f, 0xd5,
0x3a, 0x1f, 0xb7, 0x58, 0x6c, 0x78, 0xa6, 0x3d, 0x41, 0x1f, 0x40, 0x76, 0x7f, 0xe4, 0xa1, 0xd4,
0x77, 0xe9, 0x66, 0xfa, 0x03, 0x2c, 0x5e, 0x60, 0x42, 0x67, 0x30, 0x08, 0xa1, 0xc3, 0x91, 0x47,
0x45, 0x7e, 0x0a, 0x65, 0xf5, 0xf9, 0xf4, 0xda, 0xc7, 0xea, 0xe6, 0xf5, 0x4f, 0xb3, 0xf8, 0x2e,
0x83, 0xba, 0x89, 0x91, 0x80, 0xe2, 0x0f, 0xbc, 0xea, 0x2c, 0x3a, 0x17, 0x16, 0x4a, 0x7d, 0xca,
0x6e, 0xa6, 0xbf, 0xd6, 0xc6, 0x66, 0xe1, 0x5d, 0x58, 0x54, 0xe4, 0x5f, 0x88, 0x87, 0xda, 0xae,
0x87, 0xee, 0x25, 0x3c, 0xd4, 0xa9, 0x4f, 0x52, 0xcd, 0xa5, 0x74, 0x06, 0x01, 0x72, 0x87, 0x81,
0xdc, 0xc0, 0xb3, 0x02, 0xa4, 0xeb, 0xb3, 0x3c, 0xd3, 0x9e, 0xac, 0x76, 0x21, 0xc7, 0x6a, 0xce,
0xe8, 0xcf, 0xe4, 0x47, 0x33, 0xa1, 0x90, 0x9e, 0xb2, 0xd0, 0xa1, 0x6a, 0x35, 0x9e, 0x67, 0x40,
0x35, 0x5c, 0xa2, 0x40, 0xac, 0xe2, 0xfc, 0x4c, 0x7b, 0xb2, 0xac, 0xfd, 0x42, 0x5b, 0x7d, 0x33,
0x0d, 0x39, 0x56, 0x7c, 0x42, 0xe7, 0x00, 0x41, 0x6d, 0x36, 0x3a, 0xbb, 0x58, 0xb5, 0x37, 0x3a,
0xbb, 0x78, 0x59, 0x17, 0x37, 0x19, 0xe8, 0x3c, 0x9e, 0xa1, 0xa0, 0xac, 0xa6, 0xd5, 0x62, 0x65,
0x3a, 0x6a, 0x47, 0x47, 0x94, 0xde, 0xf8, 0x51, 0x42, 0x49, 0xc2, 0x42, 0xf5, 0xd9, 0xe8, 0x6e,
0x48, 0xa8, 0xcd, 0xe2, 0x45, 0x86, 0xd7, 0xc0, 0x73, 0xc2, 0x9a, 0x1c, 0xd2, 0x61, 0x4c, 0x14,
0xf3, 0x73, 0xa8, 0x85, 0x8b, 0xab, 0xe8, 0x41, 0x82, 0xd0, 0x68, 0x8d, 0xb6, 0xf9, 0xf0, 0x6a,
0xa6, 0x24, 0x70, 0x8e, 0x7c, 0x4e, 0xc8, 0xd0, 0xa0, 0x4c, 0xc2, 0xd6, 0xe8, 0x0b, 0x0d, 0x66,
0x22, 0xd5, 0x52, 0x94, 0x24, 0x3d, 0x56, 0x8b, 0x6d, 0x3e, 0xba, 0x86, 0x4b, 0x28, 0x81, 0x99,
0x12, 0x77, 0xf0, 0xcd, 0x90, 0x05, 0x3c, 0x73, 0x40, 0x3c, 0x5b, 0x28, 0xe2, 0x5b, 0x9e, 0x57,
0x35, 0x13, 0x2d, 0x1f, 0xaa, 0x92, 0x26, 0x5a, 0x3e, 0x5c, 0x12, 0x4d, 0xb1, 0x3c, 0x2f, 0x63,
0xd2, 0x9d, 0xcc, 0x7e, 0xdf, 0xc0, 0x7f, 0xd5, 0x88, 0x6c, 0x28, 0xf9, 0xa5, 0x43, 0xb4, 0x98,
0x54, 0xc6, 0x09, 0x2e, 0x00, 0xcd, 0x7b, 0xa9, 0xfd, 0x02, 0xf9, 0x3e, 0x43, 0xbe, 0x8d, 0x6f,
0x50, 0x64, 0xf1, 0xc3, 0xc9, 0x16, 0xaf, 0x15, 0xb4, 0x8c, 0x5e, 0x8f, 0x4e, 0xf8, 0x2f, 0xa1,
0xa2, 0xd6, 0xf6, 0xd0, 0xfd, 0xc4, 0xd2, 0x91, 0x5a, 0x1e, 0x6c, 0xe2, 0xab, 0x58, 0x04, 0xf2,
0x43, 0x86, 0xbc, 0x88, 0x6f, 0x25, 0x20, 0x3b, 0x8c, 0x35, 0x04, 0xce, 0xeb, 0x72, 0xc9, 0xe0,
0xa1, 0xb2, 0x5f, 0x32, 0x78, 0xb8, 0xac, 0x77, 0x25, 0xf8, 0x88, 0xb1, 0x52, 0x70, 0x17, 0x20,
0xa8, 0xc0, 0xa1, 0x44, 0x5b, 0x2a, 0x37, 0xa0, 0xe8, 0x89, 0x8e, 0x17, 0xef, 0xc2, 0xfb, 0x2b,
0x02, 0xdb, 0x37, 0x5d, 0x7a, 0xb2, 0x57, 0xff, 0x2e, 0x0f, 0xe5, 0x97, 0x86, 0x69, 0x79, 0xc4,
0x32, 0xac, 0x2e, 0x41, 0xc7, 0x90, 0x63, 0xd1, 0x2d, 0xea, 0xbc, 0xd4, 0xa2, 0x54, 0xd4, 0x79,
0x85, 0x2a, 0x36, 0x78, 0x89, 0xa1, 0x36, 0xf1, 0x02, 0x45, 0x1d, 0x04, 0xa2, 0x5b, 0xac, 0xd0,
0x42, 0x27, 0x7a, 0x02, 0x79, 0x51, 0xc3, 0x8f, 0x08, 0x0a, 0x15, 0x60, 0x9a, 0x77, 0x92, 0x3b,
0x93, 0xb6, 0x92, 0x0a, 0xe3, 0x32, 0x3e, 0x8a, 0x33, 0x06, 0x08, 0x2a, 0x88, 0x51, 0x83, 0xc6,
0x0a, 0x8e, 0xcd, 0xa5, 0x74, 0x06, 0x81, 0xf9, 0x88, 0x61, 0xde, 0xc3, 0xcd, 0x28, 0x66, 0xcf,
0xe7, 0xa5, 0xb8, 0x7f, 0x0e, 0xd3, 0x9b, 0x86, 0x7b, 0x86, 0x22, 0xf1, 0x4a, 0xf9, 0xb1, 0x41,
0xb3, 0x99, 0xd4, 0x25, 0x50, 0xee, 0x31, 0x94, 0x5b, 0x78, 0x3e, 0x8a, 0x72, 0x66, 0xb8, 0x34,
0x10, 0xa0, 0x1e, 0xe4, 0xf9, 0x6f, 0x0f, 0xa2, 0xf6, 0x0b, 0xfd, 0x7e, 0x21, 0x6a, 0xbf, 0xf0,
0xcf, 0x15, 0xae, 0x47, 0x19, 0x42, 0x51, 0x3e, 0xf6, 0xa3, 0xbb, 0x91, 0xa5, 0x08, 0xff, 0x30,
0xa0, 0xb9, 0x98, 0xd6, 0x2d, 0xb0, 0x1e, 0x30, 0xac, 0xbb, 0xb8, 0x11, 0x5b, 0x2b, 0xc1, 0xf9,
0x4c, 0x7b, 0xf2, 0x0b, 0x0d, 0x7d, 0x0e, 0x10, 0x14, 0x5d, 0x63, 0x07, 0x20, 0x5a, 0xbf, 0x8d,
0x1d, 0x80, 0x58, 0xbd, 0x16, 0xaf, 0x30, 0xdc, 0x65, 0xfc, 0x20, 0x8a, 0xeb, 0x39, 0x86, 0xe5,
0x9e, 0x10, 0xe7, 0x7d, 0x5e, 0x58, 0x73, 0xcf, 0xcc, 0x21, 0x3d, 0x0c, 0xff, 0x31, 0x03, 0xd3,
0x34, 0x6b, 0xa4, 0xc1, 0x35, 0xb8, 0x6c, 0x47, 0x35, 0x89, 0x95, 0xb8, 0xa2, 0x9a, 0xc4, 0xef,
0xe9, 0xe1, 0xe0, 0xca, 0x7e, 0x8e, 0x4e, 0x18, 0x03, 0x35, 0xb4, 0x0d, 0x65, 0xe5, 0x36, 0x8e,
0x12, 0x84, 0x85, 0x6b, 0x67, 0x51, 0x17, 0x9f, 0x70, 0x95, 0xc7, 0xb7, 0x19, 0xde, 0x02, 0xae,
0xfb, 0x78, 0x3d, 0xce, 0x41, 0x01, 0x5f, 0x43, 0x45, 0xbd, 0xb1, 0xa3, 0x04, 0x79, 0x91, 0xba,
0x5c, 0xd4, 0xcb, 0x25, 0x5d, 0xf8, 0xc3, 0x07, 0xdf, 0xff, 0xc9, 0xbd, 0x64, 0xa3, 0xc0, 0x7d,
0x28, 0x88, 0x2b, 0x7c, 0xd2, 0x2c, 0xc3, 0x45, 0xbc, 0xa4, 0x59, 0x46, 0xee, 0xff, 0xe1, 0x84,
0x8c, 0x21, 0xd2, 0x5b, 0x8a, 0x8c, 0x24, 0x02, 0xed, 0x05, 0xf1, 0xd2, 0xd0, 0x82, 0x8a, 0x54,
0x1a, 0x9a, 0x72, 0x43, 0x4c, 0x43, 0x3b, 0x25, 0x9e, 0x38, 0x2e, 0xf2, 0xe6, 0x85, 0x52, 0x84,
0xa9, 0xde, 0x1b, 0x5f, 0xc5, 0x92, 0x94, 0x2f, 0x07, 0x80, 0xc2, 0x75, 0xa3, 0x0b, 0x80, 0xa0,
0xc0, 0x10, 0x4d, 0x8e, 0x12, 0xab, 0x94, 0xd1, 0xe4, 0x28, 0xb9, 0x46, 0x11, 0x76, 0x0d, 0x01,
0x2e, 0x4f, 0xd7, 0x29, 0xf2, 0x57, 0x1a, 0xa0, 0x78, 0x2d, 0x02, 0x3d, 0x4d, 0x96, 0x9e, 0x58,
0xfb, 0x6c, 0xbe, 0xf7, 0x76, 0xcc, 0x49, 0xde, 0x3e, 0x50, 0xa9, 0xcb, 0xb8, 0x87, 0xaf, 0xa9,
0x52, 0x7f, 0xa3, 0x41, 0x35, 0x54, 0xc8, 0x40, 0xef, 0xa4, 0xac, 0x69, 0xa4, 0x74, 0xda, 0x7c,
0x7c, 0x2d, 0x5f, 0x52, 0xe2, 0xa4, 0xec, 0x00, 0x99, 0x26, 0x7f, 0xa9, 0x41, 0x2d, 0x5c, 0xf8,
0x40, 0x29, 0xb2, 0x63, 0xa5, 0xd7, 0xe6, 0xf2, 0xf5, 0x8c, 0x57, 0x2f, 0x4f, 0x90, 0x39, 0xf7,
0xa1, 0x20, 0x4a, 0x25, 0x49, 0x1b, 0x3f, 0x5c, 0xb4, 0x4d, 0xda, 0xf8, 0x91, 0x3a, 0x4b, 0xc2,
0xc6, 0x77, 0xec, 0x3e, 0x51, 0x8e, 0x99, 0xa8, 0xa5, 0xa4, 0xa1, 0x5d, 0x7d, 0xcc, 0x22, 0x85,
0x98, 0x34, 0xb4, 0xe0, 0x98, 0xc9, 0x22, 0x0a, 0x4a, 0x11, 0x76, 0xcd, 0x31, 0x8b, 0xd6, 0x60,
0x12, 0x8e, 0x19, 0x03, 0x54, 0x8e, 0x59, 0x50, 0xee, 0x48, 0x3a, 0x66, 0xb1, 0x1a, 0x74, 0xd2,
0x31, 0x8b, 0x57, 0x4c, 0x12, 0xd6, 0x91, 0xe1, 0x86, 0x8e, 0xd9, 0x5c, 0x42, 0x65, 0x04, 0xbd,
0x97, 0x62, 0xc4, 0xc4, 0xd2, 0x76, 0xf3, 0xfd, 0xb7, 0xe4, 0x4e, 0xdd, 0xe3, 0xdc, 0xfc, 0x72,
0x8f, 0xff, 0x83, 0x06, 0xf3, 0x49, 0x55, 0x15, 0x94, 0x82, 0x93, 0x52, 0x12, 0x6f, 0xae, 0xbc,
0x2d, 0xfb, 0xd5, 0xd6, 0xf2, 0x77, 0xfd, 0xf3, 0xfa, 0x7f, 0xbe, 0x59, 0xd4, 0xfe, 0xfb, 0xcd,
0xa2, 0xf6, 0xbf, 0x6f, 0x16, 0xb5, 0x7f, 0xfc, 0xbf, 0xc5, 0xa9, 0xe3, 0x3c, 0xfb, 0x8f, 0x5c,
0xbf, 0xfa, 0x43, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc6, 0x35, 0xa7, 0xba, 0x61, 0x36, 0x00, 0x00,
}

View File

@ -15,7 +15,7 @@ service KV {
// Range gets the keys in the range from the key-value store.
rpc Range(RangeRequest) returns (RangeResponse) {
option (google.api.http) = {
post: "/v3beta/kv/range"
post: "/v3/kv/range"
body: "*"
};
}
@ -25,7 +25,7 @@ service KV {
// and generates one event in the event history.
rpc Put(PutRequest) returns (PutResponse) {
option (google.api.http) = {
post: "/v3beta/kv/put"
post: "/v3/kv/put"
body: "*"
};
}
@ -35,7 +35,7 @@ service KV {
// and generates a delete event in the event history for every deleted key.
rpc DeleteRange(DeleteRangeRequest) returns (DeleteRangeResponse) {
option (google.api.http) = {
post: "/v3beta/kv/deleterange"
post: "/v3/kv/deleterange"
body: "*"
};
}
@ -46,7 +46,7 @@ service KV {
// It is not allowed to modify the same key several times within one txn.
rpc Txn(TxnRequest) returns (TxnResponse) {
option (google.api.http) = {
post: "/v3beta/kv/txn"
post: "/v3/kv/txn"
body: "*"
};
}
@ -56,7 +56,7 @@ service KV {
// indefinitely.
rpc Compact(CompactionRequest) returns (CompactionResponse) {
option (google.api.http) = {
post: "/v3beta/kv/compaction"
post: "/v3/kv/compaction"
body: "*"
};
}
@ -70,7 +70,7 @@ service Watch {
// last compaction revision.
rpc Watch(stream WatchRequest) returns (stream WatchResponse) {
option (google.api.http) = {
post: "/v3beta/watch"
post: "/v3/watch"
body: "*"
};
}
@ -82,7 +82,7 @@ service Lease {
// deleted if the lease expires. Each expired key generates a delete event in the event history.
rpc LeaseGrant(LeaseGrantRequest) returns (LeaseGrantResponse) {
option (google.api.http) = {
post: "/v3beta/lease/grant"
post: "/v3/lease/grant"
body: "*"
};
}
@ -90,7 +90,7 @@ service Lease {
// LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.
rpc LeaseRevoke(LeaseRevokeRequest) returns (LeaseRevokeResponse) {
option (google.api.http) = {
post: "/v3beta/kv/lease/revoke"
post: "/v3/kv/lease/revoke"
body: "*"
};
}
@ -99,7 +99,7 @@ service Lease {
// to the server and streaming keep alive responses from the server to the client.
rpc LeaseKeepAlive(stream LeaseKeepAliveRequest) returns (stream LeaseKeepAliveResponse) {
option (google.api.http) = {
post: "/v3beta/lease/keepalive"
post: "/v3/lease/keepalive"
body: "*"
};
}
@ -107,7 +107,7 @@ service Lease {
// LeaseTimeToLive retrieves lease information.
rpc LeaseTimeToLive(LeaseTimeToLiveRequest) returns (LeaseTimeToLiveResponse) {
option (google.api.http) = {
post: "/v3beta/kv/lease/timetolive"
post: "/v3/kv/lease/timetolive"
body: "*"
};
}
@ -115,7 +115,7 @@ service Lease {
// LeaseLeases lists all existing leases.
rpc LeaseLeases(LeaseLeasesRequest) returns (LeaseLeasesResponse) {
option (google.api.http) = {
post: "/v3beta/kv/lease/leases"
post: "/v3/kv/lease/leases"
body: "*"
};
}
@ -125,7 +125,7 @@ service Cluster {
// MemberAdd adds a member into the cluster.
rpc MemberAdd(MemberAddRequest) returns (MemberAddResponse) {
option (google.api.http) = {
post: "/v3beta/cluster/member/add"
post: "/v3/cluster/member/add"
body: "*"
};
}
@ -133,7 +133,7 @@ service Cluster {
// MemberRemove removes an existing member from the cluster.
rpc MemberRemove(MemberRemoveRequest) returns (MemberRemoveResponse) {
option (google.api.http) = {
post: "/v3beta/cluster/member/remove"
post: "/v3/cluster/member/remove"
body: "*"
};
}
@ -141,7 +141,7 @@ service Cluster {
// MemberUpdate updates the member configuration.
rpc MemberUpdate(MemberUpdateRequest) returns (MemberUpdateResponse) {
option (google.api.http) = {
post: "/v3beta/cluster/member/update"
post: "/v3/cluster/member/update"
body: "*"
};
}
@ -149,7 +149,7 @@ service Cluster {
// MemberList lists all the members in the cluster.
rpc MemberList(MemberListRequest) returns (MemberListResponse) {
option (google.api.http) = {
post: "/v3beta/cluster/member/list"
post: "/v3/cluster/member/list"
body: "*"
};
}
@ -159,7 +159,7 @@ service Maintenance {
// Alarm activates, deactivates, and queries alarms regarding cluster health.
rpc Alarm(AlarmRequest) returns (AlarmResponse) {
option (google.api.http) = {
post: "/v3beta/maintenance/alarm"
post: "/v3/maintenance/alarm"
body: "*"
};
}
@ -167,7 +167,7 @@ service Maintenance {
// Status gets the status of the member.
rpc Status(StatusRequest) returns (StatusResponse) {
option (google.api.http) = {
post: "/v3beta/maintenance/status"
post: "/v3/maintenance/status"
body: "*"
};
}
@ -175,7 +175,7 @@ service Maintenance {
// Defragment defragments a member's backend database to recover storage space.
rpc Defragment(DefragmentRequest) returns (DefragmentResponse) {
option (google.api.http) = {
post: "/v3beta/maintenance/defragment"
post: "/v3/maintenance/defragment"
body: "*"
};
}
@ -185,7 +185,7 @@ service Maintenance {
// are ongoing transactions.
rpc Hash(HashRequest) returns (HashResponse) {
option (google.api.http) = {
post: "/v3beta/maintenance/hash"
post: "/v3/maintenance/hash"
body: "*"
};
}
@ -193,7 +193,7 @@ service Maintenance {
// HashKV computes the hash of all MVCC keys up to a given revision.
rpc HashKV(HashKVRequest) returns (HashKVResponse) {
option (google.api.http) = {
post: "/v3beta/maintenance/hash"
post: "/v3/maintenance/hash"
body: "*"
};
}
@ -201,7 +201,7 @@ service Maintenance {
// Snapshot sends a snapshot of the entire backend from a member over a stream to a client.
rpc Snapshot(SnapshotRequest) returns (stream SnapshotResponse) {
option (google.api.http) = {
post: "/v3beta/maintenance/snapshot"
post: "/v3/maintenance/snapshot"
body: "*"
};
}
@ -209,7 +209,7 @@ service Maintenance {
// MoveLeader requests current leader node to transfer its leadership to transferee.
rpc MoveLeader(MoveLeaderRequest) returns (MoveLeaderResponse) {
option (google.api.http) = {
post: "/v3beta/maintenance/transfer-leadership"
post: "/v3/maintenance/transfer-leadership"
body: "*"
};
}
@ -219,7 +219,7 @@ service Auth {
// AuthEnable enables authentication.
rpc AuthEnable(AuthEnableRequest) returns (AuthEnableResponse) {
option (google.api.http) = {
post: "/v3beta/auth/enable"
post: "/v3/auth/enable"
body: "*"
};
}
@ -227,7 +227,7 @@ service Auth {
// AuthDisable disables authentication.
rpc AuthDisable(AuthDisableRequest) returns (AuthDisableResponse) {
option (google.api.http) = {
post: "/v3beta/auth/disable"
post: "/v3/auth/disable"
body: "*"
};
}
@ -235,7 +235,7 @@ service Auth {
// Authenticate processes an authenticate request.
rpc Authenticate(AuthenticateRequest) returns (AuthenticateResponse) {
option (google.api.http) = {
post: "/v3beta/auth/authenticate"
post: "/v3/auth/authenticate"
body: "*"
};
}
@ -243,7 +243,7 @@ service Auth {
// UserAdd adds a new user.
rpc UserAdd(AuthUserAddRequest) returns (AuthUserAddResponse) {
option (google.api.http) = {
post: "/v3beta/auth/user/add"
post: "/v3/auth/user/add"
body: "*"
};
}
@ -251,7 +251,7 @@ service Auth {
// UserGet gets detailed user information.
rpc UserGet(AuthUserGetRequest) returns (AuthUserGetResponse) {
option (google.api.http) = {
post: "/v3beta/auth/user/get"
post: "/v3/auth/user/get"
body: "*"
};
}
@ -259,7 +259,7 @@ service Auth {
// UserList gets a list of all users.
rpc UserList(AuthUserListRequest) returns (AuthUserListResponse) {
option (google.api.http) = {
post: "/v3beta/auth/user/list"
post: "/v3/auth/user/list"
body: "*"
};
}
@ -267,7 +267,7 @@ service Auth {
// UserDelete deletes a specified user.
rpc UserDelete(AuthUserDeleteRequest) returns (AuthUserDeleteResponse) {
option (google.api.http) = {
post: "/v3beta/auth/user/delete"
post: "/v3/auth/user/delete"
body: "*"
};
}
@ -275,7 +275,7 @@ service Auth {
// UserChangePassword changes the password of a specified user.
rpc UserChangePassword(AuthUserChangePasswordRequest) returns (AuthUserChangePasswordResponse) {
option (google.api.http) = {
post: "/v3beta/auth/user/changepw"
post: "/v3/auth/user/changepw"
body: "*"
};
}
@ -283,7 +283,7 @@ service Auth {
// UserGrant grants a role to a specified user.
rpc UserGrantRole(AuthUserGrantRoleRequest) returns (AuthUserGrantRoleResponse) {
option (google.api.http) = {
post: "/v3beta/auth/user/grant"
post: "/v3/auth/user/grant"
body: "*"
};
}
@ -291,7 +291,7 @@ service Auth {
// UserRevokeRole revokes a role of specified user.
rpc UserRevokeRole(AuthUserRevokeRoleRequest) returns (AuthUserRevokeRoleResponse) {
option (google.api.http) = {
post: "/v3beta/auth/user/revoke"
post: "/v3/auth/user/revoke"
body: "*"
};
}
@ -299,7 +299,7 @@ service Auth {
// RoleAdd adds a new role.
rpc RoleAdd(AuthRoleAddRequest) returns (AuthRoleAddResponse) {
option (google.api.http) = {
post: "/v3beta/auth/role/add"
post: "/v3/auth/role/add"
body: "*"
};
}
@ -307,7 +307,7 @@ service Auth {
// RoleGet gets detailed role information.
rpc RoleGet(AuthRoleGetRequest) returns (AuthRoleGetResponse) {
option (google.api.http) = {
post: "/v3beta/auth/role/get"
post: "/v3/auth/role/get"
body: "*"
};
}
@ -315,7 +315,7 @@ service Auth {
// RoleList gets lists of all roles.
rpc RoleList(AuthRoleListRequest) returns (AuthRoleListResponse) {
option (google.api.http) = {
post: "/v3beta/auth/role/list"
post: "/v3/auth/role/list"
body: "*"
};
}
@ -323,7 +323,7 @@ service Auth {
// RoleDelete deletes a specified role.
rpc RoleDelete(AuthRoleDeleteRequest) returns (AuthRoleDeleteResponse) {
option (google.api.http) = {
post: "/v3beta/auth/role/delete"
post: "/v3/auth/role/delete"
body: "*"
};
}
@ -331,7 +331,7 @@ service Auth {
// RoleGrantPermission grants a permission of a specified key or range to a specified role.
rpc RoleGrantPermission(AuthRoleGrantPermissionRequest) returns (AuthRoleGrantPermissionResponse) {
option (google.api.http) = {
post: "/v3beta/auth/role/grant"
post: "/v3/auth/role/grant"
body: "*"
};
}
@ -339,7 +339,7 @@ service Auth {
// RoleRevokePermission revokes a key or range permission of a specified role.
rpc RoleRevokePermission(AuthRoleRevokePermissionRequest) returns (AuthRoleRevokePermissionResponse) {
option (google.api.http) = {
post: "/v3beta/auth/role/revoke"
post: "/v3/auth/role/revoke"
body: "*"
};
}