From c244c8b312e1cf3c8dbbeabfab4ff900642855e3 Mon Sep 17 00:00:00 2001 From: Alexgao001 Date: Wed, 10 Jan 2024 10:54:20 +0800 Subject: [PATCH 1/6] feat: atomic object update --- app/upgrade.go | 2 + e2e/tests/storage_bill_test.go | 266 ++++ proto/greenfield/permission/common.proto | 2 + proto/greenfield/storage/events.proto | 68 + proto/greenfield/storage/query.proto | 14 + proto/greenfield/storage/tx.proto | 34 + proto/greenfield/storage/types.proto | 29 + swagger/static/swagger.yaml | 278 ++++ x/challenge/abci.go | 4 +- x/challenge/keeper/msg_server_submit.go | 2 +- x/permission/types/common.pb.go | 154 +- x/storage/keeper/grpc_query.go | 17 + x/storage/keeper/keeper.go | 316 +++- x/storage/keeper/msg_server.go | 31 + x/storage/keeper/payment.go | 41 +- x/storage/types/codec.go | 6 + x/storage/types/errors.go | 3 + x/storage/types/events.pb.go | 1848 ++++++++++++++++++++-- x/storage/types/keys.go | 17 + x/storage/types/message.go | 135 +- x/storage/types/options.go | 6 + x/storage/types/query.pb.go | 844 +++++++--- x/storage/types/query.pb.gw.go | 123 ++ x/storage/types/tx.pb.go | 1353 ++++++++++++++-- x/storage/types/types.go | 9 + x/storage/types/types.pb.go | 775 ++++++++- 26 files changed, 5624 insertions(+), 753 deletions(-) diff --git a/app/upgrade.go b/app/upgrade.go index 938022333..cc12f1a5f 100644 --- a/app/upgrade.go +++ b/app/upgrade.go @@ -203,6 +203,8 @@ func (app *App) registerPawneeUpgradeHandler() { app.UpgradeKeeper.SetUpgradeHandler(upgradetypes.Pawnee, func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { app.Logger().Info("upgrade to ", plan.Name) + app.GashubKeeper.SetMsgGasParams(ctx, *gashubtypes.NewMsgGasParamsWithFixedGas(sdk.MsgTypeURL(&storagemoduletypes.MsgUpdateObjectContent{}), 1.2e3)) + app.GashubKeeper.SetMsgGasParams(ctx, *gashubtypes.NewMsgGasParamsWithFixedGas(sdk.MsgTypeURL(&storagemoduletypes.MsgCancelUpdateObjectContent{}), 1.2e3)) return app.mm.RunMigrations(ctx, app.configurator, fromVM) }) diff --git a/e2e/tests/storage_bill_test.go b/e2e/tests/storage_bill_test.go index 056eac7b4..6ce36083b 100644 --- a/e2e/tests/storage_bill_test.go +++ b/e2e/tests/storage_bill_test.go @@ -2302,3 +2302,269 @@ func (s *PaymentTestSuite) reduceBNBBalance(user, to keys.KeyManager, leftBalanc // )) // s.SendTxBlock(from, msgSend) //} + +func (s *PaymentTestSuite) TestStorageBill_UpdateObject() { + var err error + ctx := context.Background() + sp := s.PickStorageProvider() + gvg, found := sp.GetFirstGlobalVirtualGroup() + s.Require().True(found) + queryFamilyResponse, err := s.Client.GlobalVirtualGroupFamily(ctx, &virtualgrouptypes.QueryGlobalVirtualGroupFamilyRequest{ + FamilyId: gvg.FamilyId, + }) + s.Require().NoError(err) + family := queryFamilyResponse.GlobalVirtualGroupFamily + user := s.GenAndChargeAccounts(1, 1000000)[0] + + streamAddresses := []string{ + user.GetAddr().String(), + family.VirtualPaymentAddress, + gvg.VirtualPaymentAddress, + paymenttypes.ValidatorTaxPoolAddress.String(), + } + streamRecordsBeforeCreateBucket := s.getStreamRecords(streamAddresses) + s.T().Logf("streamRecordsBeforeCreateBucket: %s", core.YamlString(streamRecordsBeforeCreateBucket)) + // create bucket + bucketName := storagetestutils.GenRandomBucketName() + bucketChargedReadQuota := uint64(1000) + msgCreateBucket := storagetypes.NewMsgCreateBucket( + user.GetAddr(), bucketName, storagetypes.VISIBILITY_TYPE_PRIVATE, sp.OperatorKey.GetAddr(), + nil, math.MaxUint, nil, 0) + msgCreateBucket.ChargedReadQuota = bucketChargedReadQuota + msgCreateBucket.PrimarySpApproval.GlobalVirtualGroupFamilyId = gvg.FamilyId + msgCreateBucket.PrimarySpApproval.Sig, err = sp.ApprovalKey.Sign(msgCreateBucket.GetApprovalBytes()) + s.Require().NoError(err) + s.SendTxBlock(user, msgCreateBucket) + + // CreateObject + objectName := storagetestutils.GenRandomObjectName() + // create test buffer + var buffer bytes.Buffer + // Create 10MiB content where each line contains 1024 characters. + for i := 0; i < 10240; i++ { + buffer.WriteString(fmt.Sprintf("[%05d] %s\n", i, line)) + } + payloadSize := uint64(buffer.Len()) + checksum := sdk.Keccak256(buffer.Bytes()) + expectChecksum := [][]byte{checksum, checksum, checksum, checksum, checksum, checksum, checksum} + contextType := "text/event-stream" + msgCreateObject := storagetypes.NewMsgCreateObject(user.GetAddr(), bucketName, objectName, payloadSize, storagetypes.VISIBILITY_TYPE_PRIVATE, expectChecksum, contextType, storagetypes.REDUNDANCY_EC_TYPE, math.MaxUint, nil) + msgCreateObject.PrimarySpApproval.Sig, err = sp.ApprovalKey.Sign(msgCreateObject.GetApprovalBytes()) + s.Require().NoError(err) + s.SendTxBlock(user, msgCreateObject) + s.T().Logf("msgCreateObject %s", msgCreateObject.String()) + + // HeadObject + queryHeadObjectRequest := storagetypes.QueryHeadObjectRequest{ + BucketName: bucketName, + ObjectName: objectName, + } + queryHeadObjectResponse, err := s.Client.HeadObject(ctx, &queryHeadObjectRequest) + s.Require().NoError(err) + + streamRecordsBeforeSealObjectTx := s.getStreamRecords(streamAddresses) + s.T().Logf("streamRecordsBeforeSealObjectTx %s", core.YamlString(streamRecordsBeforeSealObjectTx)) + + // SealObject + gvgId := gvg.Id + msgSealObject := storagetypes.NewMsgSealObject(sp.SealKey.GetAddr(), bucketName, objectName, gvg.Id, nil) + secondarySigs := make([][]byte, 0) + secondarySPBlsPubKeys := make([]bls.PublicKey, 0) + blsSignHash := storagetypes.NewSecondarySpSealObjectSignDoc(s.GetChainID(), gvgId, queryHeadObjectResponse.ObjectInfo.Id, storagetypes.GenerateHash(queryHeadObjectResponse.ObjectInfo.Checksums[:])).GetBlsSignHash() + + // every secondary sp signs the checksums + for _, spID := range gvg.SecondarySpIds { + sig, err := core.BlsSignAndVerify(s.StorageProviders[spID], blsSignHash) + s.Require().NoError(err) + secondarySigs = append(secondarySigs, sig) + pk, err := bls.PublicKeyFromBytes(s.StorageProviders[spID].BlsKey.PubKey().Bytes()) + s.Require().NoError(err) + secondarySPBlsPubKeys = append(secondarySPBlsPubKeys, pk) + } + aggBlsSig, err := core.BlsAggregateAndVerify(secondarySPBlsPubKeys, blsSignHash, secondarySigs) + s.Require().NoError(err) + msgSealObject.SecondarySpBlsAggSignatures = aggBlsSig + s.T().Logf("msg %s", msgSealObject.String()) + s.SendTxBlock(sp.SealKey, msgSealObject) + + queryHeadObjectResponse, err = s.Client.HeadObject(ctx, &queryHeadObjectRequest) + s.Require().NoError(err) + storedSizeBeforeUpdateTx := queryHeadObjectResponse.GlobalVirtualGroup.StoredSize + + queryHeadBucketRequest := storagetypes.QueryHeadBucketRequest{ + BucketName: bucketName, + } + queryHeadBucketResponseAfterCreateObj, err := s.Client.HeadBucket(ctx, &queryHeadBucketRequest) + s.T().Logf("queryHeadBucketResponseAfterCreateObj %s, err: %v", queryHeadBucketResponseAfterCreateObj, err) + s.Require().NoError(err) + queryGlobalSpStorePriceByTime, err := s.Client.QueryGlobalSpStorePriceByTime(ctx, &sptypes.QueryGlobalSpStorePriceByTimeRequest{ + Timestamp: queryHeadBucketResponseAfterCreateObj.BucketInfo.CreateAt, + }) + s.T().Logf("queryGlobalSpStorePriceByTime %s, err: %v", queryGlobalSpStorePriceByTime, err) + s.Require().NoError(err) + + params := s.queryParams() + primaryStorePrice := queryGlobalSpStorePriceByTime.GlobalSpStorePrice.PrimaryStorePrice + secondaryStorePrice := queryGlobalSpStorePriceByTime.GlobalSpStorePrice.SecondaryStorePrice + chargeSize := s.getChargeSize(queryHeadObjectResponse.ObjectInfo.PayloadSize) + orginChargeRate := primaryStorePrice.Add(secondaryStorePrice.MulInt64(6)).MulInt(sdk.NewIntFromUint64(chargeSize)).TruncateInt() + orginChargeRate = params.VersionedParams.ValidatorTaxRate.MulInt(orginChargeRate).TruncateInt().Add(orginChargeRate) + + // get stream records after first seal, before update object content tx + streamRecordsBeforeUpdateObjectTx := s.getStreamRecords(streamAddresses) + s.T().Logf("streamRecordsBeforeObjectContentTx %s", core.YamlString(streamRecordsBeforeUpdateObjectTx)) + userStreamAccountBeforeUpdateObjTx := streamRecordsBeforeUpdateObjectTx.User + + // 1. update the object, new payload size is 1 MB + var newBuffer bytes.Buffer + for i := 0; i < 1024; i++ { + newBuffer.WriteString(fmt.Sprintf("[%05d] %s\n", i, line)) + } + newPayloadSize := uint64(newBuffer.Len()) + newChecksum := sdk.Keccak256(newBuffer.Bytes()) + newExpectChecksum := [][]byte{newChecksum, newChecksum, newChecksum, newChecksum, newChecksum, newChecksum, newChecksum} + msgUpdateObject := storagetypes.NewMsgUpdateObjectContent(user.GetAddr(), bucketName, objectName, newPayloadSize, newExpectChecksum) + s.SendTxBlock(user, msgUpdateObject) + s.T().Logf("msgUpdateObject %s", msgUpdateObject.String()) + + // only the field updating is set to true. + queryHeadObjectResponse, err = s.Client.HeadObject(ctx, &queryHeadObjectRequest) + s.Require().NoError(err) + s.Require().Equal(payloadSize, queryHeadObjectResponse.ObjectInfo.PayloadSize) + s.Require().Equal(int64(0), queryHeadObjectResponse.ObjectInfo.Version) + s.Require().Equal(true, queryHeadObjectResponse.ObjectInfo.IsUpdating) + s.Require().Equal(int64(0), queryHeadObjectResponse.ObjectInfo.UpdatedAt) + s.Require().Equal(storedSizeBeforeUpdateTx, queryHeadObjectResponse.GlobalVirtualGroup.StoredSize) + + // HeadShadowObject + queryHeadShadowObjectRequest := storagetypes.QueryHeadShadowObjectRequest{ + BucketName: bucketName, + ObjectName: objectName, + } + queryHeadShadowObjectResponse, err := s.Client.HeadShadowObject(ctx, &queryHeadShadowObjectRequest) + s.Require().NoError(err) + s.Require().Equal(newPayloadSize, queryHeadShadowObjectResponse.ObjectInfo.PayloadSize) + s.Require().Equal(int64(1), queryHeadShadowObjectResponse.ObjectInfo.Version) + + // Should lock balance according to the updated object size after updateObjectContent tx + // get stream records after UpdateObjectContent Tx + streamRecordsAfterUpdateObjectTx := s.getStreamRecords(streamAddresses) + s.T().Logf("streamRecordsAfterUpdateObjectContentTx %s", core.YamlString(streamRecordsAfterUpdateObjectTx)) + userStreamAccountAfterUpdateObjTx := streamRecordsAfterUpdateObjectTx.User + + chargeSize = s.getChargeSize(queryHeadShadowObjectResponse.ObjectInfo.PayloadSize) + newChargeRate := primaryStorePrice.Add(secondaryStorePrice.MulInt64(6)).MulInt(sdk.NewIntFromUint64(chargeSize)).TruncateInt() + newChargeRate = params.VersionedParams.ValidatorTaxRate.MulInt(newChargeRate).TruncateInt().Add(newChargeRate) + newLockedBalance := newChargeRate.Mul(sdkmath.NewIntFromUint64(params.VersionedParams.ReserveTime)) + // lock balance according to the new object size + s.Require().Equal(newLockedBalance.String(), userStreamAccountAfterUpdateObjTx.LockBalance.String()) + // the net flow rate stay still, only lock the updatedObject balance + s.Require().True(userStreamAccountAfterUpdateObjTx.NetflowRate.Equal(userStreamAccountBeforeUpdateObjTx.NetflowRate)) + + // 2 Cancel the update + msgCancelUpdateObject := storagetypes.NewMsgCancelUpdateObjectContent(user.GetAddr(), bucketName, objectName) + s.Require().NoError(err) + s.SendTxBlock(user, msgCancelUpdateObject) + + queryHeadObjectResponse, err = s.Client.HeadObject(ctx, &queryHeadObjectRequest) + s.Require().NoError(err) + s.Require().Equal(payloadSize, queryHeadObjectResponse.ObjectInfo.PayloadSize) + s.Require().Equal(int64(0), queryHeadObjectResponse.ObjectInfo.Version) + s.Require().Equal(false, queryHeadObjectResponse.ObjectInfo.IsUpdating) + s.Require().Equal(int64(0), queryHeadObjectResponse.ObjectInfo.UpdatedAt) + + // HeadShadowObject not found + _, err = s.Client.HeadShadowObject(ctx, &queryHeadShadowObjectRequest) + s.Require().Error(err) + + // the stream record of user is reverted if cancel update + streamRecordsAfterCancelUpdateObjectTx := s.getStreamRecords(streamAddresses) + s.T().Logf("streamRecordsAfterCancelUpdateObjectTx %s\n", core.YamlString(streamRecordsAfterCancelUpdateObjectTx)) + userStreamAccountAfterCancelUpdateObjTx := streamRecordsAfterCancelUpdateObjectTx.User + s.Require().Equal(sdkmath.ZeroInt(), userStreamAccountAfterCancelUpdateObjTx.LockBalance) + // lock fee will be applied to static balance + s.Require().True(userStreamAccountAfterUpdateObjTx.NetflowRate.Equal(userStreamAccountAfterCancelUpdateObjTx.NetflowRate)) + deductStaticBalanceSinceLastCrudTs := sdkmath.NewInt(userStreamAccountAfterCancelUpdateObjTx.CrudTimestamp - userStreamAccountAfterUpdateObjTx.CrudTimestamp).Mul(userStreamAccountAfterCancelUpdateObjTx.NetflowRate) + s.Require().Equal(userStreamAccountAfterUpdateObjTx.StaticBalance.Add(deductStaticBalanceSinceLastCrudTs).Add(userStreamAccountAfterUpdateObjTx.LockBalance), userStreamAccountAfterCancelUpdateObjTx.StaticBalance) + + // 3. update the object again + s.SendTxBlock(user, msgUpdateObject) + + streamRecordsAfterUpdateObjectTx = s.getStreamRecords(streamAddresses) + s.T().Logf("streamRecordsAfterUpdateObjectContentTx 2 %s", core.YamlString(streamRecordsAfterUpdateObjectTx)) + userStreamAccountAfterUpdateObjTx = streamRecordsAfterUpdateObjectTx.User + + // 4 reject seal by SP + msgRejectSealObject := storagetypes.NewMsgRejectUnsealedObject(sp.SealKey.GetAddr(), bucketName, objectName) + s.SendTxBlock(sp.SealKey, msgRejectSealObject) + + // object + queryHeadObjectResponse, err = s.Client.HeadObject(ctx, &queryHeadObjectRequest) + s.Require().NoError(err) + s.Require().Equal(payloadSize, queryHeadObjectResponse.ObjectInfo.PayloadSize) + s.Require().Equal(int64(0), queryHeadObjectResponse.ObjectInfo.Version) + s.Require().Equal(false, queryHeadObjectResponse.ObjectInfo.IsUpdating) + s.Require().Equal(int64(0), queryHeadObjectResponse.ObjectInfo.UpdatedAt) + + // HeadShadowObject not found + _, err = s.Client.HeadShadowObject(ctx, &queryHeadShadowObjectRequest) + s.Require().Error(err) + + // the stream record of user is reverted if reject seal by SP + streamRecordsAfterRejectSealObjectTx := s.getStreamRecords(streamAddresses) + s.T().Logf("streamRecordsAfterRejectSealObjectTx %s", core.YamlString(streamRecordsAfterRejectSealObjectTx)) + userStreamAccountRejectSealObjTx := streamRecordsAfterRejectSealObjectTx.User + s.Require().Equal(sdkmath.ZeroInt(), userStreamAccountRejectSealObjTx.LockBalance) + + // lock fee will be applied to static balance + s.Require().True(userStreamAccountAfterUpdateObjTx.NetflowRate.Equal(userStreamAccountRejectSealObjTx.NetflowRate)) + deductStaticBalanceSinceLastCrudTs = sdkmath.NewInt(userStreamAccountRejectSealObjTx.CrudTimestamp - userStreamAccountAfterUpdateObjTx.CrudTimestamp).Mul(userStreamAccountRejectSealObjTx.NetflowRate) + s.Require().Equal(userStreamAccountAfterUpdateObjTx.StaticBalance.Add(deductStaticBalanceSinceLastCrudTs).Add(userStreamAccountAfterUpdateObjTx.LockBalance), + userStreamAccountRejectSealObjTx.StaticBalance) + + // 5 Update the object again + s.SendTxBlock(user, msgUpdateObject) + + queryHeadShadowObjectResponse, err = s.Client.HeadShadowObject(ctx, &queryHeadShadowObjectRequest) + s.Require().NoError(err) + updatedAt := queryHeadShadowObjectResponse.ObjectInfo.UpdatedAt + + // 6 SP seal the object + blsSignHash = storagetypes.NewSecondarySpSealObjectSignDoc(s.GetChainID(), gvgId, queryHeadObjectResponse.ObjectInfo.Id, storagetypes.GenerateHash(queryHeadShadowObjectResponse.ObjectInfo.Checksums[:])).GetBlsSignHash() + msgSealObject = storagetypes.NewMsgSealObject(sp.SealKey.GetAddr(), bucketName, objectName, gvg.Id, nil) + secondarySigs = make([][]byte, 0) + secondarySPBlsPubKeys = make([]bls.PublicKey, 0) + + // every secondary sp signs the checksums + for _, spID := range gvg.SecondarySpIds { + sig, err := core.BlsSignAndVerify(s.StorageProviders[spID], blsSignHash) + s.Require().NoError(err) + secondarySigs = append(secondarySigs, sig) + pk, err := bls.PublicKeyFromBytes(s.StorageProviders[spID].BlsKey.PubKey().Bytes()) + s.Require().NoError(err) + secondarySPBlsPubKeys = append(secondarySPBlsPubKeys, pk) + } + aggBlsSig, err = core.BlsAggregateAndVerify(secondarySPBlsPubKeys, blsSignHash, secondarySigs) + s.Require().NoError(err) + msgSealObject.SecondarySpBlsAggSignatures = aggBlsSig + s.T().Logf("msgSealObject %s", msgSealObject.String()) + s.SendTxBlock(sp.SealKey, msgSealObject) + + // HeadObject + queryHeadObjectResponse, err = s.Client.HeadObject(ctx, &queryHeadObjectRequest) + s.Require().NoError(err) + s.Require().Equal(newPayloadSize, queryHeadObjectResponse.ObjectInfo.PayloadSize) + s.Require().Equal(int64(1), queryHeadObjectResponse.ObjectInfo.Version) + s.Require().Equal(false, queryHeadObjectResponse.ObjectInfo.IsUpdating) + s.Require().Equal(updatedAt, queryHeadObjectResponse.ObjectInfo.UpdatedAt) + // HeadShadowObject not found + _, err = s.Client.HeadShadowObject(ctx, &queryHeadShadowObjectRequest) + s.Require().Error(err) + + // the new flow rate should be only calculated base on the updated object, and deduct the stale obejct's + streamRecordsAfterSealObjectTx := s.getStreamRecords(streamAddresses) + s.T().Logf("streamRecordsAfterSealObjectTx %s", core.YamlString(streamRecordsAfterSealObjectTx)) + userStreamAccountAfterSealObjectTx := streamRecordsAfterSealObjectTx.User + s.Require().Equal(sdkmath.ZeroInt(), userStreamAccountAfterSealObjectTx.LockBalance) + s.Require().Equal(userStreamAccountAfterUpdateObjTx.NetflowRate.Sub(orginChargeRate.Neg()).Add(newChargeRate.Neg()), userStreamAccountAfterSealObjectTx.NetflowRate) +} diff --git a/proto/greenfield/permission/common.proto b/proto/greenfield/permission/common.proto index 5251d3847..e56672fd9 100644 --- a/proto/greenfield/permission/common.proto +++ b/proto/greenfield/permission/common.proto @@ -31,6 +31,8 @@ enum ActionType { ACTION_UPDATE_GROUP_EXTRA = 12; ACTION_UPDATE_GROUP_INFO = 13; + ACTION_UPDATE_OBJECT_CONTENT = 14; + ACTION_TYPE_ALL = 99; } diff --git a/proto/greenfield/storage/events.proto b/proto/greenfield/storage/events.proto index 0f9f9f1c0..915b88451 100644 --- a/proto/greenfield/storage/events.proto +++ b/proto/greenfield/storage/events.proto @@ -178,6 +178,8 @@ message EventSealObject { uint32 global_virtual_group_id = 7; // local_virtual_group_id defines the unique id of lvg which the object stored uint32 local_virtual_group_id = 8; + // for_update indicates whether sealing on a updating object + bool for_update = 9; } // EventCopyObject is emitted on MsgCopyObject @@ -240,6 +242,8 @@ message EventRejectSealObject { (gogoproto.customtype) = "Uint", (gogoproto.nullable) = false ]; + // for_update indicates whether reject sealing on a updating object + bool for_update = 5; } // EventDiscontinueObject is emitted on MsgDiscontinueObject @@ -561,3 +565,67 @@ message EventSetTag { // tags define the tag of the source ResourceTags tags = 2; } + +// EventUpdateObjectContent is emitted on MsgUpdateObjectContent +message EventUpdateObjectContent { + // operator define the account address of msg operator + string operator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // object_id is the unique identifier of object + string object_id = 2 [ + (cosmos_proto.scalar) = "cosmos.Uint", + (gogoproto.customtype) = "Uint", + (gogoproto.nullable) = false + ]; + string bucket_name = 3; + string object_name = 4; + // payload_size define the size of payload data which you want upload + uint64 payload_size = 5; + // checksums define the total checksums of the object which generated by redundancy + repeated bytes checksums = 6; + // version define the version of object + int64 version = 7; +} + +// EventUpdateObjectContentSuccess is emitted on the MsgSealObject for updating object +message EventUpdateObjectContentSuccess { + // operator define the account address of msg operator + string operator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // object_id is the unique identifier of object + string object_id = 2 [ + (cosmos_proto.scalar) = "cosmos.Uint", + (gogoproto.customtype) = "Uint", + (gogoproto.nullable) = false + ]; + string bucket_name = 3; + string object_name = 4; + // content_type define the content type of the payload data + string content_type = 5; + // prev_payload_size define the size of payload data stored previously + uint64 prev_payload_size = 6; + // new_payload_size define the new size of payload data + uint64 new_payload_size = 7; + // prev_checksums define the total checksums of the previous object which generated by redundancy + repeated bytes prev_checksums = 8; + // new_checksums define the total checksums of the updated object which generated by redundancy + repeated bytes new_checksums = 9; + // version define the version of object + int64 version = 10; + // updated_at define the block timestamp when the object is updated + int64 updated_at = 11; +} + +// EventCancelUpdateObjectContent is emitted on MsgCancelUpdateObjectContent +message EventCancelUpdateObjectContent { + // operator define the account address of operator who cancel update object + string operator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // bucket_name define the name of the bucket + string bucket_name = 2; + // object_name define the name of the object + string object_name = 3; + // object_name define the id of the object + string object_id = 4 [ + (cosmos_proto.scalar) = "cosmos.Uint", + (gogoproto.customtype) = "Uint", + (gogoproto.nullable) = false + ]; +} diff --git a/proto/greenfield/storage/query.proto b/proto/greenfield/storage/query.proto index f78a7a582..34ecb5c48 100644 --- a/proto/greenfield/storage/query.proto +++ b/proto/greenfield/storage/query.proto @@ -51,6 +51,11 @@ service Query { option (google.api.http).get = "/greenfield/storage/head_object_by_id/{object_id}"; } + // Queries a shadow object with specify name. + rpc HeadShadowObject(QueryHeadShadowObjectRequest) returns (QueryHeadShadowObjectResponse) { + option (google.api.http).get = "/greenfield/storage/head_shadow_object/{bucket_name}/{object_name}"; + } + // Queries a object with EIP712 standard metadata info rpc HeadObjectNFT(QueryNFTRequest) returns (QueryObjectNFTResponse) { option (google.api.http).get = "/greenfield/storage/head_object_nft/{token_id}"; @@ -189,11 +194,20 @@ message QueryHeadObjectByIdRequest { string object_id = 1; } +message QueryHeadShadowObjectRequest { + string bucket_name = 1; + string object_name = 2; +} + message QueryHeadObjectResponse { ObjectInfo object_info = 1; virtualgroup.GlobalVirtualGroup global_virtual_group = 2; } +message QueryHeadShadowObjectResponse { + ShadowObjectInfo object_info = 1; +} + message QueryListBucketsRequest { cosmos.base.query.v1beta1.PageRequest pagination = 1; } diff --git a/proto/greenfield/storage/tx.proto b/proto/greenfield/storage/tx.proto index 33762f592..7d9a545bf 100644 --- a/proto/greenfield/storage/tx.proto +++ b/proto/greenfield/storage/tx.proto @@ -34,6 +34,8 @@ service Msg { rpc MirrorObject(MsgMirrorObject) returns (MsgMirrorObjectResponse); rpc DiscontinueObject(MsgDiscontinueObject) returns (MsgDiscontinueObjectResponse); rpc UpdateObjectInfo(MsgUpdateObjectInfo) returns (MsgUpdateObjectInfoResponse); + rpc UpdateObjectContent(MsgUpdateObjectContent) returns (MsgUpdateObjectContentResponse); + rpc CancelUpdateObjectContent(MsgCancelUpdateObjectContent) returns (MsgCancelUpdateObjectContentResponse); // basic operation of group rpc CreateGroup(MsgCreateGroup) returns (MsgCreateGroupResponse); @@ -645,3 +647,35 @@ message MsgSetTag { } message MsgSetTagResponse {} + +message MsgUpdateObjectContent { + option (cosmos.msg.v1.signer) = "operator"; + + // operator defines the account address of object updater + string operator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // bucket_name defines the name of the bucket where the object is stored. + string bucket_name = 2; + // object_name defines the name of object + string object_name = 3; + // payload_size defines size of the object's payload + uint64 payload_size = 4; + // content_type defines a standard MIME type describing the format of the object. + string content_type = 5; + // expect_checksums defines a list of hashes which was generate by redundancy algorithm. + repeated bytes expect_checksums = 6; +} + +message MsgUpdateObjectContentResponse {} + +message MsgCancelUpdateObjectContent { + option (cosmos.msg.v1.signer) = "operator"; + + // operator defines the account address of the operator, either the object owner or the updater + string operator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // bucket_name defines the name of the bucket + string bucket_name = 2; + // object_name defines the name of the object + string object_name = 3; +} + +message MsgCancelUpdateObjectContentResponse {} diff --git a/proto/greenfield/storage/types.proto b/proto/greenfield/storage/types.proto index ab7ae73a1..a5a9abd58 100644 --- a/proto/greenfield/storage/types.proto +++ b/proto/greenfield/storage/types.proto @@ -87,6 +87,14 @@ message ObjectInfo { repeated bytes checksums = 14 [(gogoproto.moretags) = "traits:\"omit\""]; // tags defines a list of tags the object has ResourceTags tags = 15; + // is_updating indicates whether a object is being updated. + bool is_updating = 16; + // updated_at define the block timestamp when the object is updated. Will not be visible until object is re-sealed. + int64 updated_at = 17; + // updated_by defined the account address of updater(if there is). Will not be visible until object is re-sealed. + string updated_by = 18 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // version define the version of object + int64 version = 19; } message GroupInfo { @@ -187,3 +195,24 @@ message ResourceTags { // tags defines a list of tags the resource has repeated Tag tags = 1 [(gogoproto.nullable) = false]; } + +message ShadowObjectInfo { + // operator define the account address of object updater + string operator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // id defines the object id + string id = 2 [ + (cosmos_proto.scalar) = "cosmos.Uint", + (gogoproto.customtype) = "Uint", + (gogoproto.nullable) = false + ]; + // content_type define the content type of the payload data + string content_type = 3; + // payload_size is the total size of the object payload + uint64 payload_size = 4; + // checksums define the root hash of the pieces which stored in a SP. + repeated bytes checksums = 5 [(gogoproto.moretags) = "traits:\"omit\""]; + // updated_at define the block timestamp when the object is updated + int64 updated_at = 6; + // version define the version of object + int64 version = 7; +} diff --git a/swagger/static/swagger.yaml b/swagger/static/swagger.yaml index 5915da2a7..b8c2faacd 100644 --- a/swagger/static/swagger.yaml +++ b/swagger/static/swagger.yaml @@ -3276,6 +3276,24 @@ paths: value: type: string title: tags defines a list of tags the resource has + is_updating: + type: boolean + description: is_updating indicates whether a object is being updated. + updated_at: + type: string + format: int64 + description: >- + updated_at define the block timestamp when the object is + updated. Will not be visible until object is re-sealed. + updated_by: + type: string + description: >- + updated_by defined the account address of updater(if there + is). Will not be visible until object is re-sealed. + version: + type: string + format: int64 + title: version define the version of object global_virtual_group: type: object properties: @@ -3478,6 +3496,24 @@ paths: value: type: string title: tags defines a list of tags the resource has + is_updating: + type: boolean + description: is_updating indicates whether a object is being updated. + updated_at: + type: string + format: int64 + description: >- + updated_at define the block timestamp when the object is + updated. Will not be visible until object is re-sealed. + updated_by: + type: string + description: >- + updated_by defined the account address of updater(if there + is). Will not be visible until object is re-sealed. + version: + type: string + format: int64 + title: version define the version of object global_virtual_group: type: object properties: @@ -3624,6 +3660,83 @@ paths: type: string tags: - Query + /greenfield/storage/head_shadow_object/{bucket_name}/{object_name}: + get: + summary: Queries a shadow object with specify name. + operationId: HeadShadowObject + responses: + '200': + description: A successful response. + schema: + type: object + properties: + object_info: + type: object + properties: + operator: + type: string + title: operator define the account address of object updater + id: + type: string + title: id defines the object id + content_type: + type: string + title: content_type define the content type of the payload data + payload_size: + type: string + format: uint64 + title: payload_size is the total size of the object payload + checksums: + type: array + items: + type: string + format: byte + description: >- + checksums define the root hash of the pieces which stored + in a SP. + updated_at: + type: string + format: int64 + title: >- + updated_at define the block timestamp when the object is + updated + version: + type: string + format: int64 + title: version define the version of object + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: bucket_name + in: path + required: true + type: string + - name: object_name + in: path + required: true + type: string + tags: + - Query /greenfield/storage/is_price_changed/{bucket_name}: get: summary: Queries whether read and storage prices changed for the bucket. @@ -4172,6 +4285,25 @@ paths: value: type: string title: tags defines a list of tags the resource has + is_updating: + type: boolean + description: is_updating indicates whether a object is being updated. + updated_at: + type: string + format: int64 + description: >- + updated_at define the block timestamp when the object is + updated. Will not be visible until object is re-sealed. + updated_by: + type: string + description: >- + updated_by defined the account address of updater(if + there is). Will not be visible until object is + re-sealed. + version: + type: string + format: int64 + title: version define the version of object pagination: type: object properties: @@ -4403,6 +4535,25 @@ paths: value: type: string title: tags defines a list of tags the resource has + is_updating: + type: boolean + description: is_updating indicates whether a object is being updated. + updated_at: + type: string + format: int64 + description: >- + updated_at define the block timestamp when the object is + updated. Will not be visible until object is re-sealed. + updated_by: + type: string + description: >- + updated_by defined the account address of updater(if + there is). Will not be visible until object is + re-sealed. + version: + type: string + format: int64 + title: version define the version of object pagination: type: object properties: @@ -5009,6 +5160,7 @@ paths: - ACTION_UPDATE_OBJECT_INFO - ACTION_UPDATE_GROUP_EXTRA - ACTION_UPDATE_GROUP_INFO + - ACTION_UPDATE_OBJECT_CONTENT - ACTION_TYPE_ALL default: ACTION_UNSPECIFIED title: >- @@ -5204,6 +5356,7 @@ paths: - ACTION_UPDATE_OBJECT_INFO - ACTION_UPDATE_GROUP_EXTRA - ACTION_UPDATE_GROUP_INFO + - ACTION_UPDATE_OBJECT_CONTENT - ACTION_TYPE_ALL default: ACTION_UNSPECIFIED title: >- @@ -5403,6 +5556,7 @@ paths: - ACTION_UPDATE_OBJECT_INFO - ACTION_UPDATE_GROUP_EXTRA - ACTION_UPDATE_GROUP_INFO + - ACTION_UPDATE_OBJECT_CONTENT - ACTION_TYPE_ALL default: ACTION_UNSPECIFIED title: >- @@ -5616,6 +5770,7 @@ paths: - ACTION_UPDATE_OBJECT_INFO - ACTION_UPDATE_GROUP_EXTRA - ACTION_UPDATE_GROUP_INFO + - ACTION_UPDATE_OBJECT_CONTENT - ACTION_TYPE_ALL - name: object_name in: query @@ -34235,6 +34390,7 @@ definitions: - ACTION_UPDATE_OBJECT_INFO - ACTION_UPDATE_GROUP_EXTRA - ACTION_UPDATE_GROUP_INFO + - ACTION_UPDATE_OBJECT_CONTENT - ACTION_TYPE_ALL default: ACTION_UNSPECIFIED title: >- @@ -34348,6 +34504,7 @@ definitions: - ACTION_UPDATE_OBJECT_INFO - ACTION_UPDATE_GROUP_EXTRA - ACTION_UPDATE_GROUP_INFO + - ACTION_UPDATE_OBJECT_CONTENT - ACTION_TYPE_ALL default: ACTION_UNSPECIFIED title: >- @@ -34471,6 +34628,7 @@ definitions: - ACTION_UPDATE_OBJECT_INFO - ACTION_UPDATE_GROUP_EXTRA - ACTION_UPDATE_GROUP_INFO + - ACTION_UPDATE_OBJECT_CONTENT - ACTION_TYPE_ALL default: ACTION_UNSPECIFIED title: >- @@ -34901,6 +35059,24 @@ definitions: value: type: string title: tags defines a list of tags the resource has + is_updating: + type: boolean + description: is_updating indicates whether a object is being updated. + updated_at: + type: string + format: int64 + description: >- + updated_at define the block timestamp when the object is updated. Will + not be visible until object is re-sealed. + updated_by: + type: string + description: >- + updated_by defined the account address of updater(if there is). Will + not be visible until object is re-sealed. + version: + type: string + format: int64 + title: version define the version of object greenfield.storage.ObjectMetaData: type: object properties: @@ -35450,6 +35626,24 @@ definitions: value: type: string title: tags defines a list of tags the resource has + is_updating: + type: boolean + description: is_updating indicates whether a object is being updated. + updated_at: + type: string + format: int64 + description: >- + updated_at define the block timestamp when the object is updated. + Will not be visible until object is re-sealed. + updated_by: + type: string + description: >- + updated_by defined the account address of updater(if there is). + Will not be visible until object is re-sealed. + version: + type: string + format: int64 + title: version define the version of object global_virtual_group: type: object properties: @@ -35501,6 +35695,39 @@ definitions: objects of each bucket must be stored in a GVG within a group family. + greenfield.storage.QueryHeadShadowObjectResponse: + type: object + properties: + object_info: + type: object + properties: + operator: + type: string + title: operator define the account address of object updater + id: + type: string + title: id defines the object id + content_type: + type: string + title: content_type define the content type of the payload data + payload_size: + type: string + format: uint64 + title: payload_size is the total size of the object payload + checksums: + type: array + items: + type: string + format: byte + description: checksums define the root hash of the pieces which stored in a SP. + updated_at: + type: string + format: int64 + title: updated_at define the block timestamp when the object is updated + version: + type: string + format: int64 + title: version define the version of object greenfield.storage.QueryIsPriceChangedResponse: type: object properties: @@ -35813,6 +36040,24 @@ definitions: value: type: string title: tags defines a list of tags the resource has + is_updating: + type: boolean + description: is_updating indicates whether a object is being updated. + updated_at: + type: string + format: int64 + description: >- + updated_at define the block timestamp when the object is + updated. Will not be visible until object is re-sealed. + updated_by: + type: string + description: >- + updated_by defined the account address of updater(if there is). + Will not be visible until object is re-sealed. + version: + type: string + format: int64 + title: version define the version of object pagination: type: object properties: @@ -36215,6 +36460,7 @@ definitions: - ACTION_UPDATE_OBJECT_INFO - ACTION_UPDATE_GROUP_EXTRA - ACTION_UPDATE_GROUP_INFO + - ACTION_UPDATE_OBJECT_CONTENT - ACTION_TYPE_ALL default: ACTION_UNSPECIFIED title: >- @@ -36368,6 +36614,7 @@ definitions: - ACTION_UPDATE_OBJECT_INFO - ACTION_UPDATE_GROUP_EXTRA - ACTION_UPDATE_GROUP_INFO + - ACTION_UPDATE_OBJECT_CONTENT - ACTION_TYPE_ALL default: ACTION_UNSPECIFIED title: >- @@ -36521,6 +36768,7 @@ definitions: - ACTION_UPDATE_OBJECT_INFO - ACTION_UPDATE_GROUP_EXTRA - ACTION_UPDATE_GROUP_INFO + - ACTION_UPDATE_OBJECT_CONTENT - ACTION_TYPE_ALL default: ACTION_UNSPECIFIED title: >- @@ -36633,6 +36881,36 @@ definitions: type: string value: type: string + greenfield.storage.ShadowObjectInfo: + type: object + properties: + operator: + type: string + title: operator define the account address of object updater + id: + type: string + title: id defines the object id + content_type: + type: string + title: content_type define the content type of the payload data + payload_size: + type: string + format: uint64 + title: payload_size is the total size of the object payload + checksums: + type: array + items: + type: string + format: byte + description: checksums define the root hash of the pieces which stored in a SP. + updated_at: + type: string + format: int64 + title: updated_at define the block timestamp when the object is updated + version: + type: string + format: int64 + title: version define the version of object greenfield.storage.SourceType: type: string enum: diff --git a/x/challenge/abci.go b/x/challenge/abci.go index 240234e6d..824066184 100644 --- a/x/challenge/abci.go +++ b/x/challenge/abci.go @@ -103,9 +103,9 @@ func EndBlocker(ctx sdk.Context, keeper k.Keeper) { } // random segment/piece index - segmentSize, err := keeper.StorageKeeper.MaxSegmentSize(ctx, objectInfo.CreateAt) + segmentSize, err := keeper.StorageKeeper.MaxSegmentSize(ctx, objectInfo.GetLatestUpdatedTime()) if err != nil { - ctx.Logger().Error("fail to get segment size", "timestamp", objectInfo.CreateAt, + ctx.Logger().Error("fail to get segment size", "timestamp", objectInfo.GetLatestUpdatedTime(), "err", err.Error()) continue } diff --git a/x/challenge/keeper/msg_server_submit.go b/x/challenge/keeper/msg_server_submit.go index 549794adc..22c8bf959 100644 --- a/x/challenge/keeper/msg_server_submit.go +++ b/x/challenge/keeper/msg_server_submit.go @@ -78,7 +78,7 @@ func (k msgServer) Submit(goCtx context.Context, msg *types.MsgSubmit) (*types.M } // generate segment index - segmentSize, err := k.Keeper.StorageKeeper.MaxSegmentSize(ctx, objectInfo.CreateAt) + segmentSize, err := k.Keeper.StorageKeeper.MaxSegmentSize(ctx, objectInfo.GetLatestUpdatedTime()) if err != nil { return nil, errors.Wrapf(types.ErrInvalidSegmentIndex, "cannot get segment size: %s", err.Error()) } diff --git a/x/permission/types/common.pb.go b/x/permission/types/common.pb.go index 16c97910d..ecf1c97ac 100644 --- a/x/permission/types/common.pb.go +++ b/x/permission/types/common.pb.go @@ -33,21 +33,22 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type ActionType int32 const ( - ACTION_UNSPECIFIED ActionType = 0 - ACTION_UPDATE_BUCKET_INFO ActionType = 1 - ACTION_DELETE_BUCKET ActionType = 2 - ACTION_CREATE_OBJECT ActionType = 3 - ACTION_DELETE_OBJECT ActionType = 4 - ACTION_COPY_OBJECT ActionType = 5 - ACTION_GET_OBJECT ActionType = 6 - ACTION_EXECUTE_OBJECT ActionType = 7 - ACTION_LIST_OBJECT ActionType = 8 - ACTION_UPDATE_GROUP_MEMBER ActionType = 9 - ACTION_DELETE_GROUP ActionType = 10 - ACTION_UPDATE_OBJECT_INFO ActionType = 11 - ACTION_UPDATE_GROUP_EXTRA ActionType = 12 - ACTION_UPDATE_GROUP_INFO ActionType = 13 - ACTION_TYPE_ALL ActionType = 99 + ACTION_UNSPECIFIED ActionType = 0 + ACTION_UPDATE_BUCKET_INFO ActionType = 1 + ACTION_DELETE_BUCKET ActionType = 2 + ACTION_CREATE_OBJECT ActionType = 3 + ACTION_DELETE_OBJECT ActionType = 4 + ACTION_COPY_OBJECT ActionType = 5 + ACTION_GET_OBJECT ActionType = 6 + ACTION_EXECUTE_OBJECT ActionType = 7 + ACTION_LIST_OBJECT ActionType = 8 + ACTION_UPDATE_GROUP_MEMBER ActionType = 9 + ACTION_DELETE_GROUP ActionType = 10 + ACTION_UPDATE_OBJECT_INFO ActionType = 11 + ACTION_UPDATE_GROUP_EXTRA ActionType = 12 + ACTION_UPDATE_GROUP_INFO ActionType = 13 + ACTION_UPDATE_OBJECT_CONTENT ActionType = 14 + ACTION_TYPE_ALL ActionType = 99 ) var ActionType_name = map[int32]string{ @@ -65,25 +66,27 @@ var ActionType_name = map[int32]string{ 11: "ACTION_UPDATE_OBJECT_INFO", 12: "ACTION_UPDATE_GROUP_EXTRA", 13: "ACTION_UPDATE_GROUP_INFO", + 14: "ACTION_UPDATE_OBJECT_CONTENT", 99: "ACTION_TYPE_ALL", } var ActionType_value = map[string]int32{ - "ACTION_UNSPECIFIED": 0, - "ACTION_UPDATE_BUCKET_INFO": 1, - "ACTION_DELETE_BUCKET": 2, - "ACTION_CREATE_OBJECT": 3, - "ACTION_DELETE_OBJECT": 4, - "ACTION_COPY_OBJECT": 5, - "ACTION_GET_OBJECT": 6, - "ACTION_EXECUTE_OBJECT": 7, - "ACTION_LIST_OBJECT": 8, - "ACTION_UPDATE_GROUP_MEMBER": 9, - "ACTION_DELETE_GROUP": 10, - "ACTION_UPDATE_OBJECT_INFO": 11, - "ACTION_UPDATE_GROUP_EXTRA": 12, - "ACTION_UPDATE_GROUP_INFO": 13, - "ACTION_TYPE_ALL": 99, + "ACTION_UNSPECIFIED": 0, + "ACTION_UPDATE_BUCKET_INFO": 1, + "ACTION_DELETE_BUCKET": 2, + "ACTION_CREATE_OBJECT": 3, + "ACTION_DELETE_OBJECT": 4, + "ACTION_COPY_OBJECT": 5, + "ACTION_GET_OBJECT": 6, + "ACTION_EXECUTE_OBJECT": 7, + "ACTION_LIST_OBJECT": 8, + "ACTION_UPDATE_GROUP_MEMBER": 9, + "ACTION_DELETE_GROUP": 10, + "ACTION_UPDATE_OBJECT_INFO": 11, + "ACTION_UPDATE_GROUP_EXTRA": 12, + "ACTION_UPDATE_GROUP_INFO": 13, + "ACTION_UPDATE_OBJECT_CONTENT": 14, + "ACTION_TYPE_ALL": 99, } func (x ActionType) String() string { @@ -307,51 +310,52 @@ func init() { } var fileDescriptor_33a4d646aee30990 = []byte{ - // 697 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x54, 0x4b, 0x4e, 0xdb, 0x50, - 0x14, 0x8d, 0x93, 0x10, 0xc8, 0xe5, 0xe7, 0x3e, 0xa0, 0x35, 0x29, 0x38, 0x29, 0xea, 0x20, 0x42, - 0x6a, 0x2c, 0xa5, 0x1f, 0x55, 0xea, 0xc8, 0x71, 0x5e, 0x90, 0x5b, 0x93, 0x58, 0x8e, 0xd3, 0x42, - 0x3b, 0xb0, 0x1c, 0xf7, 0x25, 0x58, 0x8a, 0x3f, 0xb2, 0x9d, 0x16, 0x58, 0x41, 0x87, 0xec, 0x81, - 0x15, 0x74, 0x17, 0x0c, 0x19, 0x76, 0xd4, 0x56, 0xb0, 0x91, 0xca, 0x9f, 0xc4, 0x49, 0x81, 0x99, - 0xdf, 0xf9, 0xdc, 0x7b, 0xcf, 0xb5, 0x9f, 0x61, 0x6f, 0xe8, 0x11, 0x62, 0x0f, 0x4c, 0x32, 0xfa, - 0xca, 0xb9, 0xc4, 0xb3, 0x4c, 0xdf, 0x37, 0x1d, 0x9b, 0x33, 0x1c, 0xcb, 0x72, 0xec, 0x9a, 0xeb, - 0x39, 0x81, 0x83, 0xb6, 0x52, 0x4d, 0x2d, 0xd5, 0x94, 0xb6, 0x0d, 0xc7, 0xb7, 0x1c, 0x5f, 0x8b, - 0x44, 0x5c, 0x7c, 0x88, 0x1d, 0xa5, 0xcd, 0xa1, 0x33, 0x74, 0x62, 0x3c, 0x7c, 0x4a, 0xd0, 0xf2, - 0xd0, 0x71, 0x86, 0x23, 0xc2, 0x45, 0xa7, 0xfe, 0x78, 0xc0, 0x05, 0xa6, 0x45, 0xfc, 0x40, 0xb7, - 0xdc, 0xa9, 0x20, 0x1d, 0x26, 0x9e, 0x80, 0xfb, 0xee, 0xe9, 0xae, 0x4b, 0xbc, 0x58, 0xb0, 0xf7, - 0x33, 0x0b, 0xc5, 0x6e, 0xa0, 0x07, 0xc4, 0x22, 0x76, 0x80, 0x5e, 0x43, 0x81, 0x0c, 0x06, 0xc4, - 0x08, 0x18, 0xaa, 0x42, 0x55, 0xd7, 0xea, 0xbb, 0xb5, 0x7b, 0x07, 0xad, 0xe1, 0x48, 0xa4, 0x24, - 0x62, 0xf4, 0x0e, 0x16, 0x75, 0x23, 0x30, 0x1d, 0xdb, 0x67, 0xb2, 0x95, 0x5c, 0x75, 0xad, 0xfe, - 0xec, 0x01, 0x1f, 0x1f, 0xa9, 0xd4, 0x33, 0x97, 0x28, 0x13, 0x07, 0xda, 0x81, 0xa2, 0x47, 0x7c, - 0x67, 0xec, 0x19, 0xc4, 0x67, 0x72, 0x95, 0x5c, 0xb5, 0xa8, 0xa4, 0x00, 0x3a, 0x84, 0x75, 0x72, - 0xea, 0x9a, 0x9e, 0x1e, 0x8a, 0xb5, 0x30, 0x1e, 0x93, 0xaf, 0x50, 0xd5, 0xe5, 0x7a, 0xa9, 0x16, - 0x67, 0xaf, 0x4d, 0xb2, 0xd7, 0xd4, 0x49, 0xf6, 0xc6, 0xd2, 0xd5, 0xef, 0x32, 0x75, 0xf1, 0xa7, - 0x4c, 0x29, 0x6b, 0xa9, 0x39, 0xa4, 0x91, 0x00, 0x30, 0x32, 0x2d, 0x33, 0xd0, 0x7c, 0xf3, 0x9c, - 0x30, 0x0b, 0x51, 0x25, 0x76, 0x76, 0xd8, 0xe4, 0x35, 0xf5, 0x44, 0x3b, 0x78, 0xf3, 0xea, 0xa3, - 0x3e, 0x1a, 0x93, 0x46, 0x3e, 0xac, 0xa6, 0x14, 0x23, 0x5f, 0xd7, 0x3c, 0x27, 0x7b, 0x5f, 0xa0, - 0x28, 0x7b, 0xa6, 0x6d, 0x98, 0xae, 0x3e, 0x42, 0x6f, 0x21, 0x1f, 0x9c, 0xb9, 0x24, 0x59, 0xd8, - 0xf3, 0x07, 0x82, 0x4f, 0xf5, 0x51, 0xf6, 0xc8, 0x81, 0x36, 0x61, 0xe1, 0x5b, 0xd8, 0x80, 0xc9, - 0x56, 0xa8, 0x6a, 0x51, 0x89, 0x0f, 0xfb, 0x97, 0x39, 0x80, 0x74, 0x4d, 0xe8, 0x31, 0x20, 0x5e, - 0x50, 0xc5, 0x4e, 0x5b, 0xeb, 0xb5, 0xbb, 0x32, 0x16, 0xc4, 0x96, 0x88, 0x9b, 0x74, 0x06, 0xed, - 0xc2, 0xf6, 0x04, 0x97, 0x9b, 0xbc, 0x8a, 0xb5, 0x46, 0x4f, 0xf8, 0x80, 0x55, 0x4d, 0x6c, 0xb7, - 0x3a, 0x34, 0x85, 0x18, 0xd8, 0x4c, 0xe8, 0x26, 0x96, 0xf0, 0x94, 0xa6, 0xb3, 0x33, 0x8c, 0xa0, - 0xe0, 0xd0, 0xd8, 0x69, 0xbc, 0xc7, 0x82, 0x4a, 0xe7, 0xee, 0x7a, 0x12, 0x26, 0x3f, 0x33, 0x84, - 0xd0, 0x91, 0x8f, 0x27, 0xf8, 0x02, 0xda, 0x82, 0x47, 0x09, 0x7e, 0x80, 0xd5, 0x09, 0x5c, 0x40, - 0xdb, 0xb0, 0x95, 0xc0, 0xf8, 0x08, 0x0b, 0xbd, 0xb4, 0xd2, 0xe2, 0x4c, 0x25, 0x49, 0xec, 0x4e, - 0x2d, 0x4b, 0x88, 0x85, 0xd2, 0x7c, 0x9c, 0x03, 0xa5, 0xd3, 0x93, 0xb5, 0x43, 0x7c, 0xd8, 0xc0, - 0x0a, 0x5d, 0x44, 0x4f, 0x60, 0x63, 0x7e, 0xb6, 0x88, 0xa7, 0xe1, 0xee, 0x1e, 0xe2, 0x92, 0xf1, - 0x1e, 0x96, 0xef, 0xd2, 0x71, 0x5d, 0x7c, 0xa4, 0x2a, 0x3c, 0xbd, 0x82, 0x76, 0x80, 0xb9, 0x8f, - 0x8e, 0xcc, 0xab, 0x68, 0x03, 0xd6, 0x13, 0x56, 0x3d, 0x96, 0xb1, 0xc6, 0x4b, 0x12, 0x6d, 0x94, - 0xf2, 0x3f, 0x2e, 0xd9, 0xcc, 0xbe, 0x08, 0x85, 0xf8, 0x0e, 0x84, 0x89, 0x70, 0xab, 0x15, 0xb6, - 0x9c, 0x7f, 0x41, 0x34, 0xac, 0x24, 0x38, 0x2f, 0x49, 0x9d, 0x4f, 0x34, 0x85, 0xd6, 0x61, 0x39, - 0x41, 0x9a, 0xb8, 0x7d, 0x4c, 0x67, 0x93, 0x52, 0x63, 0x58, 0x9d, 0xfb, 0x3a, 0xc2, 0x5d, 0xc8, - 0x8a, 0xd8, 0x16, 0x44, 0x99, 0x97, 0xe2, 0xce, 0xf3, 0x95, 0xcb, 0xf0, 0xf4, 0x3f, 0xfe, 0xa0, - 0xdd, 0x6a, 0x6a, 0xbc, 0x20, 0x74, 0x7a, 0x6d, 0x95, 0xa6, 0xc2, 0xd0, 0xf7, 0x09, 0xe2, 0x95, - 0x25, 0x6d, 0x1b, 0xd2, 0xd5, 0x0d, 0x4b, 0x5d, 0xdf, 0xb0, 0xd4, 0xdf, 0x1b, 0x96, 0xba, 0xb8, - 0x65, 0x33, 0xd7, 0xb7, 0x6c, 0xe6, 0xd7, 0x2d, 0x9b, 0xf9, 0x5c, 0x1f, 0x9a, 0xc1, 0xc9, 0xb8, - 0x1f, 0x5e, 0x05, 0xae, 0x6f, 0xf7, 0x5f, 0x18, 0x27, 0xba, 0x69, 0x73, 0x33, 0x3f, 0x92, 0xd3, - 0xd9, 0xff, 0x5a, 0xf8, 0x29, 0xfb, 0xfd, 0x42, 0x74, 0x0b, 0x5f, 0xfe, 0x0b, 0x00, 0x00, 0xff, - 0xff, 0x95, 0xd5, 0x7a, 0xdd, 0xfd, 0x04, 0x00, 0x00, + // 710 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x54, 0x4b, 0x4e, 0xdb, 0x40, + 0x18, 0x8e, 0x93, 0x10, 0xc8, 0x00, 0xc1, 0x1d, 0xa0, 0x35, 0x29, 0x38, 0x29, 0xea, 0x22, 0x42, + 0x6a, 0x2c, 0xa5, 0x0f, 0x55, 0xea, 0xca, 0x71, 0x26, 0xc8, 0xad, 0xb1, 0x2d, 0xc7, 0x69, 0xa1, + 0x5d, 0x58, 0x8e, 0x3b, 0x09, 0x23, 0xc5, 0x0f, 0xd9, 0x4e, 0x0b, 0x9c, 0xa0, 0x4b, 0xee, 0xd0, + 0x13, 0xf4, 0x10, 0x95, 0x58, 0xb2, 0xec, 0xaa, 0xad, 0xe0, 0x22, 0x95, 0x1f, 0x79, 0x95, 0xb0, + 0xf3, 0x7c, 0xaf, 0xf9, 0xff, 0xdf, 0x33, 0x03, 0xf6, 0x07, 0x3e, 0xc6, 0x4e, 0x9f, 0xe0, 0xe1, + 0x67, 0xce, 0xc3, 0xbe, 0x4d, 0x82, 0x80, 0xb8, 0x0e, 0x67, 0xb9, 0xb6, 0xed, 0x3a, 0x75, 0xcf, + 0x77, 0x43, 0x17, 0x6e, 0x4f, 0x35, 0xf5, 0xa9, 0xa6, 0xbc, 0x63, 0xb9, 0x81, 0xed, 0x06, 0x46, + 0x2c, 0xe2, 0x92, 0x45, 0xe2, 0x28, 0x6f, 0x0d, 0xdc, 0x81, 0x9b, 0xe0, 0xd1, 0x57, 0x8a, 0x56, + 0x06, 0xae, 0x3b, 0x18, 0x62, 0x2e, 0x5e, 0xf5, 0x46, 0x7d, 0x2e, 0x24, 0x36, 0x0e, 0x42, 0xd3, + 0xf6, 0x26, 0x82, 0x69, 0x31, 0x49, 0x05, 0xdc, 0x57, 0xdf, 0xf4, 0x3c, 0xec, 0x27, 0x82, 0xfd, + 0x1f, 0x59, 0x50, 0xec, 0x84, 0x66, 0x88, 0x6d, 0xec, 0x84, 0xf0, 0x25, 0x28, 0xe0, 0x7e, 0x1f, + 0x5b, 0x21, 0x43, 0x55, 0xa9, 0x5a, 0xa9, 0xb1, 0x57, 0x5f, 0x58, 0x68, 0x1d, 0xc5, 0x22, 0x2d, + 0x15, 0xc3, 0x37, 0x60, 0xd9, 0xb4, 0x42, 0xe2, 0x3a, 0x01, 0x93, 0xad, 0xe6, 0x6a, 0xa5, 0xc6, + 0x93, 0x7b, 0x7c, 0x7c, 0xac, 0xd2, 0xcf, 0x3d, 0xac, 0x8d, 0x1d, 0x70, 0x17, 0x14, 0x7d, 0x1c, + 0xb8, 0x23, 0xdf, 0xc2, 0x01, 0x93, 0xab, 0xe6, 0x6a, 0x45, 0x6d, 0x0a, 0xc0, 0x23, 0xb0, 0x81, + 0xcf, 0x3c, 0xe2, 0x9b, 0x91, 0xd8, 0x88, 0xda, 0x63, 0xf2, 0x55, 0xaa, 0xb6, 0xda, 0x28, 0xd7, + 0x93, 0xde, 0xeb, 0xe3, 0xde, 0xeb, 0xfa, 0xb8, 0xf7, 0xe6, 0xca, 0xd5, 0xef, 0x0a, 0x75, 0xf9, + 0xa7, 0x42, 0x69, 0xa5, 0xa9, 0x39, 0xa2, 0xa1, 0x00, 0xc0, 0x90, 0xd8, 0x24, 0x34, 0x02, 0x72, + 0x81, 0x99, 0xa5, 0x38, 0x89, 0x9d, 0x2d, 0x36, 0xfd, 0x4d, 0x5d, 0xd1, 0x09, 0x5f, 0xbd, 0x78, + 0x6f, 0x0e, 0x47, 0xb8, 0x99, 0x8f, 0xd2, 0xb4, 0x62, 0xec, 0xeb, 0x90, 0x0b, 0xbc, 0xff, 0x09, + 0x14, 0x55, 0x9f, 0x38, 0x16, 0xf1, 0xcc, 0x21, 0x7c, 0x0d, 0xf2, 0xe1, 0xb9, 0x87, 0xd3, 0x81, + 0x3d, 0xbd, 0xa7, 0xf1, 0x89, 0x3e, 0xee, 0x3d, 0x76, 0xc0, 0x2d, 0xb0, 0xf4, 0x25, 0xda, 0x80, + 0xc9, 0x56, 0xa9, 0x5a, 0x51, 0x4b, 0x16, 0x07, 0x3f, 0x73, 0x00, 0x4c, 0xc7, 0x04, 0x1f, 0x02, + 0xc8, 0x0b, 0xba, 0xa8, 0xc8, 0x46, 0x57, 0xee, 0xa8, 0x48, 0x10, 0xdb, 0x22, 0x6a, 0xd1, 0x19, + 0xb8, 0x07, 0x76, 0xc6, 0xb8, 0xda, 0xe2, 0x75, 0x64, 0x34, 0xbb, 0xc2, 0x3b, 0xa4, 0x1b, 0xa2, + 0xdc, 0x56, 0x68, 0x0a, 0x32, 0x60, 0x2b, 0xa5, 0x5b, 0x48, 0x42, 0x13, 0x9a, 0xce, 0xce, 0x30, + 0x82, 0x86, 0x22, 0xa3, 0xd2, 0x7c, 0x8b, 0x04, 0x9d, 0xce, 0xdd, 0xf5, 0xa4, 0x4c, 0x7e, 0xa6, + 0x08, 0x41, 0x51, 0x4f, 0xc6, 0xf8, 0x12, 0xdc, 0x06, 0x0f, 0x52, 0xfc, 0x10, 0xe9, 0x63, 0xb8, + 0x00, 0x77, 0xc0, 0x76, 0x0a, 0xa3, 0x63, 0x24, 0x74, 0xa7, 0x49, 0xcb, 0x33, 0x49, 0x92, 0xd8, + 0x99, 0x58, 0x56, 0x20, 0x0b, 0xca, 0xf3, 0xed, 0x1c, 0x6a, 0x4a, 0x57, 0x35, 0x8e, 0xd0, 0x51, + 0x13, 0x69, 0x74, 0x11, 0x3e, 0x02, 0x9b, 0xf3, 0xb5, 0xc5, 0x3c, 0x0d, 0xee, 0xce, 0x21, 0x89, + 0x4c, 0xe6, 0xb0, 0x7a, 0x97, 0x4e, 0x72, 0xd1, 0xb1, 0xae, 0xf1, 0xf4, 0x1a, 0xdc, 0x05, 0xcc, + 0x22, 0x3a, 0x36, 0xaf, 0xc3, 0x2a, 0xd8, 0x5d, 0x98, 0x2d, 0x28, 0xb2, 0x8e, 0x64, 0x9d, 0x2e, + 0xc1, 0x4d, 0xb0, 0x91, 0x2a, 0xf4, 0x13, 0x15, 0x19, 0xbc, 0x24, 0xd1, 0x56, 0x39, 0xff, 0xed, + 0x3b, 0x9b, 0x39, 0x10, 0x41, 0x21, 0xb9, 0x25, 0x51, 0xcf, 0xa8, 0xdd, 0x8e, 0x8c, 0xf3, 0xbf, + 0x90, 0x06, 0x6b, 0x29, 0xce, 0x4b, 0x92, 0xf2, 0x81, 0xa6, 0xe0, 0x06, 0x58, 0x4d, 0x91, 0x16, + 0x92, 0x4f, 0xe8, 0x6c, 0x1a, 0x35, 0x02, 0xeb, 0x73, 0xe7, 0x27, 0x9a, 0x96, 0xaa, 0x89, 0xb2, + 0x20, 0xaa, 0xbc, 0x94, 0xec, 0x3c, 0x9f, 0x5c, 0x01, 0x8f, 0xff, 0xe3, 0x0f, 0xe5, 0x76, 0xcb, + 0xe0, 0x05, 0x41, 0xe9, 0xca, 0x3a, 0x4d, 0x45, 0x63, 0x59, 0x24, 0x48, 0x86, 0x9a, 0x6e, 0xdb, + 0x94, 0xae, 0x6e, 0x58, 0xea, 0xfa, 0x86, 0xa5, 0xfe, 0xde, 0xb0, 0xd4, 0xe5, 0x2d, 0x9b, 0xb9, + 0xbe, 0x65, 0x33, 0xbf, 0x6e, 0xd9, 0xcc, 0xc7, 0xc6, 0x80, 0x84, 0xa7, 0xa3, 0x5e, 0x74, 0x59, + 0xb8, 0x9e, 0xd3, 0x7b, 0x66, 0x9d, 0x9a, 0xc4, 0xe1, 0x66, 0x9e, 0x9a, 0xb3, 0xd9, 0x97, 0x2f, + 0x3a, 0xec, 0x41, 0xaf, 0x10, 0xdf, 0xd3, 0xe7, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x40, 0x89, + 0xbf, 0xe3, 0x1f, 0x05, 0x00, 0x00, } func (m *Statement) Marshal() (dAtA []byte, err error) { diff --git a/x/storage/keeper/grpc_query.go b/x/storage/keeper/grpc_query.go index 6994932e0..ea7e7911c 100644 --- a/x/storage/keeper/grpc_query.go +++ b/x/storage/keeper/grpc_query.go @@ -152,6 +152,23 @@ func (k Keeper) HeadObjectById(goCtx context.Context, req *types.QueryHeadObject }, nil } +func (k Keeper) HeadShadowObject(goCtx context.Context, req *types.QueryHeadShadowObjectRequest) (*types.QueryHeadShadowObjectResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + objectInfo, objectFound := k.GetShadowObjectInfo(ctx, req.BucketName, req.ObjectName) + if !objectFound { + return nil, types.ErrNoSuchObject + } + + return &types.QueryHeadShadowObjectResponse{ + ObjectInfo: objectInfo, + }, nil +} + func (k Keeper) ListBuckets(goCtx context.Context, req *types.QueryListBucketsRequest) (*types.QueryListBucketsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") diff --git a/x/storage/keeper/keeper.go b/x/storage/keeper/keeper.go index f81a4ea95..25fec83b7 100644 --- a/x/storage/keeper/keeper.go +++ b/x/storage/keeper/keeper.go @@ -336,7 +336,7 @@ func (k Keeper) ForceDeleteBucket(ctx sdk.Context, bucketId sdkmath.Uint, cap ui } } else if objectStatus == types.OBJECT_STATUS_SEALED { internalBucketInfo := k.MustGetInternalBucketInfo(ctx, bucketInfo.Id) - if err = k.UnChargeObjectStoreFee(ctx, sp.Id, bucketInfo, internalBucketInfo, &objectInfo); err != nil { + if err = k.UnChargeObjectStoreFee(ctx, bucketInfo, internalBucketInfo, &objectInfo); err != nil { ctx.Logger().Error("charge delete object error", "err", err) return false, deleted, err } @@ -730,6 +730,38 @@ func (k Keeper) GetObjectInfoById(ctx sdk.Context, objectId sdkmath.Uint) (*type return &objectInfo, true } +func (k Keeper) GetShadowObjectInfo(ctx sdk.Context, bucketName, objectName string) (*types.ShadowObjectInfo, bool) { + store := ctx.KVStore(k.storeKey) + + bz := store.Get(types.GetShadowObjectKey(bucketName, objectName)) + if bz == nil { + return nil, false + } + + return k.GetShadowObjectInfoById(ctx, k.objectSeq.DecodeSequence(bz)) +} + +func (k Keeper) MustGetShadowObjectInfo(ctx sdk.Context, bucketName, objectName string) *types.ShadowObjectInfo { + shadowObjectInfo, found := k.GetShadowObjectInfo(ctx, bucketName, objectName) + if !found { + panic("Shadow Object Info not found") + } + return shadowObjectInfo +} + +func (k Keeper) GetShadowObjectInfoById(ctx sdk.Context, objectId sdkmath.Uint) (*types.ShadowObjectInfo, bool) { + store := ctx.KVStore(k.storeKey) + + bz := store.Get(types.GetShadowObjectByIDKey(objectId)) + if bz == nil { + return nil, false + } + + var objectInfo types.ShadowObjectInfo + k.cdc.MustUnmarshal(bz, &objectInfo) + return &objectInfo, true +} + type SealObjectOptions struct { GlobalVirtualGroupId uint32 SecondarySpBlsSignatures []byte @@ -759,8 +791,36 @@ func (k Keeper) SealObject( if !found { return types.ErrNoSuchObject } + store := ctx.KVStore(k.storeKey) - if objectInfo.ObjectStatus != types.OBJECT_STATUS_CREATED { + prevPayloadSize := objectInfo.PayloadSize + prevCheckSums := objectInfo.Checksums + + isUpdate := objectInfo.IsUpdating + if isUpdate { + internalBucketInfo := k.MustGetInternalBucketInfo(ctx, bucketInfo.Id) + err := k.UnChargeObjectStoreFee(ctx, bucketInfo, internalBucketInfo, objectInfo) + if err != nil { + return err + } + k.SetInternalBucketInfo(ctx, bucketInfo.Id, internalBucketInfo) + err = k.DeleteObjectFromVirtualGroup(ctx, bucketInfo, objectInfo) + if err != nil { + return err + } + + shadowObjectInfo := k.MustGetShadowObjectInfo(ctx, bucketName, objectName) + objectInfo.UpdatedAt = shadowObjectInfo.UpdatedAt // the updated_at in objetInfo will not be visible until the object is sealed. + objectInfo.Version = shadowObjectInfo.Version + objectInfo.Checksums = shadowObjectInfo.Checksums + objectInfo.PayloadSize = shadowObjectInfo.PayloadSize + objectInfo.UpdatedBy = shadowObjectInfo.Operator + objectInfo.ContentType = shadowObjectInfo.ContentType + objectInfo.IsUpdating = false + + store.Delete(types.GetShadowObjectKey(bucketInfo.BucketName, objectName)) + store.Delete(types.GetShadowObjectByIDKey(shadowObjectInfo.Id)) + } else if objectInfo.ObjectStatus != types.OBJECT_STATUS_CREATED { return types.ErrObjectAlreadySealed } @@ -772,8 +832,7 @@ func (k Keeper) SealObject( if gvg.FamilyId != bucketInfo.GlobalVirtualGroupFamilyId || gvg.PrimarySpId != spInState.Id { return types.ErrInvalidGlobalVirtualGroup.Wrapf("Global virtual group mismatch, familyID: %d, bucket family ID: %d", gvg.FamilyId, bucketInfo.GlobalVirtualGroupFamilyId) } - - expectSecondarySPNum := k.GetExpectSecondarySPNumForECObject(ctx, objectInfo.CreateAt) + expectSecondarySPNum := k.GetExpectSecondarySPNumForECObject(ctx, objectInfo.GetLatestUpdatedTime()) if int(expectSecondarySPNum) != len(gvg.SecondarySpIds) { return types.ErrInvalidGlobalVirtualGroup.Wrapf("secondary sp num mismatch, expect (%d), but (%d)", expectSecondarySPNum, len(gvg.SecondarySpIds)) @@ -792,13 +851,29 @@ func (k Keeper) SealObject( objectInfo.ObjectStatus = types.OBJECT_STATUS_SEALED - store := ctx.KVStore(k.storeKey) bbz := k.cdc.MustMarshal(bucketInfo) store.Set(types.GetBucketByIDKey(bucketInfo.Id), bbz) obz := k.cdc.MustMarshal(objectInfo) store.Set(types.GetObjectByIDKey(objectInfo.Id), obz) + if isUpdate { + if err := ctx.EventManager().EmitTypedEvents(&types.EventUpdateObjectContentSuccess{ + Operator: spSealAcc.String(), + BucketName: bucketInfo.BucketName, + ObjectName: objectInfo.ObjectName, + ObjectId: objectInfo.Id, + ContentType: objectInfo.ContentType, + PrevPayloadSize: prevPayloadSize, + NewPayloadSize: objectInfo.PayloadSize, + PrevChecksums: prevCheckSums, + NewChecksums: objectInfo.Checksums, + Version: objectInfo.Version, + UpdatedAt: objectInfo.UpdatedAt, + }); err != nil { + return err + } + } if err := ctx.EventManager().EmitTypedEvents(&types.EventSealObject{ Operator: spSealAcc.String(), BucketName: bucketInfo.BucketName, @@ -807,6 +882,7 @@ func (k Keeper) SealObject( Status: objectInfo.ObjectStatus, GlobalVirtualGroupId: opts.GlobalVirtualGroupId, LocalVirtualGroupId: objectInfo.LocalVirtualGroupId, + ForUpdate: isUpdate, }); err != nil { return err } @@ -828,7 +904,6 @@ func (k Keeper) CancelCreateObject( } spInState := k.MustGetPrimarySPForBucket(ctx, bucketInfo) - if objectInfo.ObjectStatus != types.OBJECT_STATUS_CREATED { return types.ErrObjectNotCreated.Wrapf("Object status: %s", objectInfo.ObjectStatus.String()) } @@ -892,7 +967,10 @@ func (k Keeper) DeleteObject( } return types.ErrObjectNotSealed } - + // user should cancel the update first to delete an object. + if objectInfo.IsUpdating { + return types.ErrObjectIsUpdating + } // check permission effect := k.VerifyObjectPermission(ctx, bucketInfo, objectInfo, operator, permtypes.ACTION_DELETE_OBJECT) if effect != permtypes.EFFECT_ALLOW { @@ -901,10 +979,10 @@ func (k Keeper) DeleteObject( operator.String(), bucketName, objectName) } - spInState := k.MustGetPrimarySPForBucket(ctx, bucketInfo) + _ = k.MustGetPrimarySPForBucket(ctx, bucketInfo) internalBucketInfo := k.MustGetInternalBucketInfo(ctx, bucketInfo.Id) - err := k.UnChargeObjectStoreFee(ctx, spInState.Id, bucketInfo, internalBucketInfo, objectInfo) + err := k.UnChargeObjectStoreFee(ctx, bucketInfo, internalBucketInfo, objectInfo) if err != nil { return err } @@ -975,12 +1053,21 @@ func (k Keeper) ForceDeleteObject(ctx sdk.Context, objectId sdkmath.Uint) error } } else if objectStatus == types.OBJECT_STATUS_SEALED { internalBucketInfo := k.MustGetInternalBucketInfo(ctx, bucketInfo.Id) - err := k.UnChargeObjectStoreFee(ctx, spInState.Id, bucketInfo, internalBucketInfo, objectInfo) + err := k.UnChargeObjectStoreFee(ctx, bucketInfo, internalBucketInfo, objectInfo) if err != nil { ctx.Logger().Error("charge delete object error", "err", err) return err } k.SetInternalBucketInfo(ctx, bucketInfo.Id, internalBucketInfo) + + // if an object is updating, also need to unlock the shadowObject fee + if objectInfo.IsUpdating { + shadowObjectInfo := k.MustGetShadowObjectInfo(ctx, bucketInfo.BucketName, objectInfo.ObjectName) + err = k.UnlockShadowObjectFeeAndDeleteShadowObjectInfo(ctx, bucketInfo, shadowObjectInfo, objectInfo.ObjectName) + if err != nil { + return err + } + } } err = k.doDeleteObject(ctx, sdk.MustAccAddressFromHex(spInState.OperatorAddress), bucketInfo, objectInfo) @@ -1109,8 +1196,7 @@ func (k Keeper) RejectSealObject(ctx sdk.Context, operator sdk.AccAddress, bucke return types.ErrNoSuchObject } spInState := k.MustGetPrimarySPForBucket(ctx, bucketInfo) - - if objectInfo.ObjectStatus != types.OBJECT_STATUS_CREATED { + if objectInfo.ObjectStatus != types.OBJECT_STATUS_CREATED && !objectInfo.IsUpdating { return types.ErrObjectNotCreated.Wrapf("Object status: %s", objectInfo.ObjectStatus.String()) } @@ -1122,30 +1208,37 @@ func (k Keeper) RejectSealObject(ctx sdk.Context, operator sdk.AccAddress, bucke return sptypes.ErrStorageProviderNotInService } if sp.Id != spInState.Id { - return errors.Wrapf(types.ErrAccessDenied, "Only allowed primary SP to do cancel create object") + return errors.Wrapf(types.ErrAccessDenied, "Only allowed primary SP to do reject seal object") } - - err := k.UnlockObjectStoreFee(ctx, bucketInfo, objectInfo) - if err != nil { - return err + forUpdate := objectInfo.IsUpdating + if forUpdate { + shadowObjectInfo := k.MustGetShadowObjectInfo(ctx, bucketName, objectName) + err := k.UnlockShadowObjectFeeAndDeleteShadowObjectInfo(ctx, bucketInfo, shadowObjectInfo, objectName) + if err != nil { + return err + } + // only this field need to revert + objectInfo.IsUpdating = false + obz := k.cdc.MustMarshal(objectInfo) + store.Set(types.GetObjectKey(bucketName, objectName), k.objectSeq.EncodeSequence(objectInfo.Id)) + store.Set(types.GetObjectByIDKey(objectInfo.Id), obz) + } else { + err := k.UnlockObjectStoreFee(ctx, bucketInfo, objectInfo) + if err != nil { + return err + } + bbz := k.cdc.MustMarshal(bucketInfo) + store.Set(types.GetBucketByIDKey(bucketInfo.Id), bbz) + store.Delete(types.GetObjectKey(bucketName, objectName)) + store.Delete(types.GetObjectByIDKey(objectInfo.Id)) } - - bbz := k.cdc.MustMarshal(bucketInfo) - - store.Set(types.GetBucketByIDKey(bucketInfo.Id), bbz) - - store.Delete(types.GetObjectKey(bucketName, objectName)) - store.Delete(types.GetObjectByIDKey(objectInfo.Id)) - - if err := ctx.EventManager().EmitTypedEvents(&types.EventRejectSealObject{ + return ctx.EventManager().EmitTypedEvents(&types.EventRejectSealObject{ Operator: operator.String(), BucketName: bucketInfo.BucketName, ObjectName: objectInfo.ObjectName, ObjectId: objectInfo.Id, - }); err != nil { - return err - } - return nil + ForUpdate: forUpdate, + }) } func (k Keeper) DiscontinueObject(ctx sdk.Context, operator sdk.AccAddress, bucketName string, objectIds []sdkmath.Uint, reason string) error { @@ -2323,3 +2416,166 @@ func (k Keeper) SetTag(ctx sdk.Context, operator sdk.AccAddress, grn types2.GRN, return nil } + +func (k Keeper) UpdateObjectContent( + ctx sdk.Context, operator sdk.AccAddress, bucketName, objectName string, payloadSize uint64, + opts types.UpdateObjectOptions, +) error { + store := ctx.KVStore(k.storeKey) + + bucketInfo, found := k.GetBucketInfo(ctx, bucketName) + if !found { + return types.ErrNoSuchBucket + } + err := bucketInfo.CheckBucketStatus() + if err != nil { + return err + } + objectInfo, found := k.GetObjectInfo(ctx, bucketName, objectName) + if !found { + return types.ErrNoSuchObject + } + // check object status + if objectInfo.ObjectStatus != types.OBJECT_STATUS_SEALED { + return types.ErrUpdateObjectNotAllowed.Wrapf("The object is not sealed yet") + } + if objectInfo.IsUpdating { + return types.ErrObjectIsUpdating.Wrapf("The object is already being updated") + } + if objectInfo.SourceType != opts.SourceType { + return types.ErrSourceTypeMismatch + } + // check permission + effect := k.VerifyObjectPermission(ctx, bucketInfo, objectInfo, operator, permtypes.ACTION_UPDATE_OBJECT_CONTENT) + if effect != permtypes.EFFECT_ALLOW { + return types.ErrAccessDenied.Wrapf( + "The operator(%s) has no updateObjectContent permission of the bucket(%s), object(%s)", + operator.String(), bucketName, objectName) + } + + // check payload size + if payloadSize > k.MaxPayloadSize(ctx) { + return types.ErrTooLargeObject + } + + // primary sp + sp := k.MustGetPrimarySPForBucket(ctx, bucketInfo) + // a sp is not in service, neither in maintenance + if sp.Status != sptypes.STATUS_IN_SERVICE && !k.fromSpMaintenanceAcct(sp, operator) { + return errors.Wrap(types.ErrNoSuchStorageProvider, "the storage provider is not in service") + } + + nextVersion := objectInfo.Version + 1 + + if payloadSize == 0 { + internalBucketInfo := k.MustGetInternalBucketInfo(ctx, bucketInfo.Id) + err := k.UnChargeObjectStoreFee(ctx, bucketInfo, k.MustGetInternalBucketInfo(ctx, bucketInfo.Id), objectInfo) + if err != nil { + return err + } + k.SetInternalBucketInfo(ctx, bucketInfo.Id, internalBucketInfo) + err = k.DeleteObjectFromVirtualGroup(ctx, bucketInfo, objectInfo) + if err != nil { + return err + } + + objectInfo.UpdatedAt = ctx.BlockTime().Unix() + objectInfo.Version = nextVersion + objectInfo.PayloadSize = 0 + objectInfo.Checksums = opts.Checksums + objectInfo.UpdatedBy = operator.String() + objectInfo.ContentType = opts.ContentType + + _, err = k.SealEmptyObjectOnVirtualGroup(ctx, bucketInfo, objectInfo) + if err != nil { + return err + } + } else { + objectInfo.IsUpdating = true + shadowObjectInfo := &types.ShadowObjectInfo{ + Operator: operator.String(), + Id: objectInfo.Id, + PayloadSize: payloadSize, + Checksums: opts.Checksums, + ContentType: opts.ContentType, + UpdatedAt: ctx.BlockTime().Unix(), + Version: nextVersion, + } + store.Set(types.GetShadowObjectKey(bucketName, objectName), k.objectSeq.EncodeSequence(objectInfo.Id)) + store.Set(types.GetShadowObjectByIDKey(shadowObjectInfo.Id), k.cdc.MustMarshal(shadowObjectInfo)) + + err = k.LockShadowObjectStoreFee(ctx, bucketInfo, shadowObjectInfo, objectName) + if err != nil { + return err + } + } + + bbz := k.cdc.MustMarshal(bucketInfo) + store.Set(types.GetBucketByIDKey(bucketInfo.Id), bbz) + + obz := k.cdc.MustMarshal(objectInfo) + store.Set(types.GetObjectKey(bucketName, objectName), k.objectSeq.EncodeSequence(objectInfo.Id)) + store.Set(types.GetObjectByIDKey(objectInfo.Id), obz) + + if err = ctx.EventManager().EmitTypedEvents(&types.EventUpdateObjectContent{ + Operator: operator.String(), + ObjectId: objectInfo.Id, + PayloadSize: payloadSize, + Checksums: opts.Checksums, + Version: nextVersion, + }); err != nil { + return err + } + return nil +} + +func (k Keeper) UnlockShadowObjectFeeAndDeleteShadowObjectInfo(ctx sdk.Context, bucketInfo *types.BucketInfo, shadowObjectInfo *types.ShadowObjectInfo, objectName string) (err error) { + err = k.UnlockShadowObjectStoreFee(ctx, bucketInfo, shadowObjectInfo) + if err != nil { + return err + } + store := ctx.KVStore(k.storeKey) + store.Delete(types.GetShadowObjectKey(bucketInfo.BucketName, objectName)) + store.Delete(types.GetShadowObjectByIDKey(shadowObjectInfo.Id)) + return +} + +func (k Keeper) CancelUpdateObjectContent( + ctx sdk.Context, operator sdk.AccAddress, + bucketName, objectName string, +) error { + store := ctx.KVStore(k.storeKey) + bucketInfo, found := k.GetBucketInfo(ctx, bucketName) + if !found { + return types.ErrNoSuchBucket + } + objectInfo, found := k.GetObjectInfo(ctx, bucketName, objectName) + if !found { + return types.ErrNoSuchObject + } + if !objectInfo.IsUpdating { + return types.ErrObjectIsNotUpdating + } + shadowObjectInfo := k.MustGetShadowObjectInfo(ctx, bucketName, objectName) + err := k.UnlockShadowObjectFeeAndDeleteShadowObjectInfo(ctx, bucketInfo, shadowObjectInfo, objectName) + if err != nil { + return err + } + updater := sdk.MustAccAddressFromHex(shadowObjectInfo.Operator) + owner := sdk.MustAccAddressFromHex(objectInfo.Owner) + if !operator.Equals(owner) && !operator.Equals(updater) { + return errors.Wrapf(types.ErrAccessDenied, "Only allowed owner/updater to do cancel update object") + } + + objectInfo.IsUpdating = false + obz := k.cdc.MustMarshal(objectInfo) + store.Set(types.GetObjectKey(bucketName, objectName), k.objectSeq.EncodeSequence(objectInfo.Id)) + store.Set(types.GetObjectByIDKey(objectInfo.Id), obz) + + return ctx.EventManager().EmitTypedEvents(&types.EventCancelUpdateObjectContent{ + Operator: operator.String(), + BucketName: bucketInfo.BucketName, + ObjectName: objectInfo.ObjectName, + ObjectId: objectInfo.Id, + }) +} diff --git a/x/storage/keeper/msg_server.go b/x/storage/keeper/msg_server.go index 407bd8113..d1f6bc591 100644 --- a/x/storage/keeper/msg_server.go +++ b/x/storage/keeper/msg_server.go @@ -709,6 +709,37 @@ func (k msgServer) SetTag(goCtx context.Context, msg *types.MsgSetTag) (*types.M return &types.MsgSetTagResponse{}, nil } +func (k msgServer) UpdateObjectContent(goCtx context.Context, msg *storagetypes.MsgUpdateObjectContent) (*storagetypes.MsgUpdateObjectContentResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + if len(msg.ExpectChecksums) != int(1+k.GetExpectSecondarySPNumForECObject(ctx, ctx.BlockTime().Unix())) { + return nil, gnfderrors.ErrInvalidChecksum.Wrapf("ExpectChecksums missing, expect: %d, actual: %d", + 1+k.Keeper.RedundantParityChunkNum(ctx)+k.Keeper.RedundantDataChunkNum(ctx), + len(msg.ExpectChecksums)) + } + operatorAcc := sdk.MustAccAddressFromHex(msg.Operator) + err := k.Keeper.UpdateObjectContent(ctx, operatorAcc, msg.BucketName, msg.ObjectName, msg.PayloadSize, storagetypes.UpdateObjectOptions{ + Checksums: msg.ExpectChecksums, + ContentType: msg.ContentType, + SourceType: types.SOURCE_TYPE_ORIGIN, + }) + if err != nil { + return nil, err + } + return &types.MsgUpdateObjectContentResponse{}, nil +} + +func (k msgServer) CancelUpdateObjectContent(goCtx context.Context, msg *storagetypes.MsgCancelUpdateObjectContent) (*storagetypes.MsgCancelUpdateObjectContentResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + operatorAcc := sdk.MustAccAddressFromHex(msg.Operator) + err := k.Keeper.CancelUpdateObjectContent(ctx, operatorAcc, msg.BucketName, msg.ObjectName) + if err != nil { + return nil, err + } + return &types.MsgCancelUpdateObjectContentResponse{}, nil +} + func (k Keeper) verifyGVGSignatures(ctx sdk.Context, bucketID math.Uint, dstSP *sptypes.StorageProvider, gvgMappings []*storagetypes.GVGMapping) error { // verify secondary sp signature for _, newLvg2gvg := range gvgMappings { diff --git a/x/storage/keeper/payment.go b/x/storage/keeper/payment.go index a343486bf..fe23925c4 100644 --- a/x/storage/keeper/payment.go +++ b/x/storage/keeper/payment.go @@ -108,10 +108,18 @@ func (k Keeper) UpdateBucketInfoAndCharge(ctx sdk.Context, bucketInfo *storagety } func (k Keeper) LockObjectStoreFee(ctx sdk.Context, bucketInfo *storagetypes.BucketInfo, objectInfo *storagetypes.ObjectInfo) error { + return k.lockObjectStoreFee(ctx, bucketInfo, objectInfo.GetLatestUpdatedTime(), objectInfo.PayloadSize, objectInfo.ObjectName) +} + +func (k Keeper) LockShadowObjectStoreFee(ctx sdk.Context, bucketInfo *storagetypes.BucketInfo, objectInfo *storagetypes.ShadowObjectInfo, objectName string) error { + return k.lockObjectStoreFee(ctx, bucketInfo, objectInfo.UpdatedAt, objectInfo.PayloadSize, objectName) +} + +func (k Keeper) lockObjectStoreFee(ctx sdk.Context, bucketInfo *storagetypes.BucketInfo, timestamp int64, payloadSize uint64, objectName string) error { paymentAddr := sdk.MustAccAddressFromHex(bucketInfo.PaymentAddress) - amount, err := k.GetObjectLockFee(ctx, objectInfo.CreateAt, objectInfo.PayloadSize) + amount, err := k.GetObjectLockFee(ctx, timestamp, payloadSize) if err != nil { - return fmt.Errorf("get object store fee rate failed: %s %s %w", bucketInfo.BucketName, objectInfo.ObjectName, err) + return fmt.Errorf("get object store fee rate failed: %s %s %w", bucketInfo.BucketName, objectName, err) } if ctx.IsCheckTx() { _ = ctx.EventManager().EmitTypedEvents(&types.EventFeePreview{ @@ -124,17 +132,17 @@ func (k Keeper) LockObjectStoreFee(ctx sdk.Context, bucketInfo *storagetypes.Buc change := types.NewDefaultStreamRecordChangeWithAddr(paymentAddr).WithLockBalanceChange(amount) streamRecord, err := k.paymentKeeper.UpdateStreamRecordByAddr(ctx, change) if err != nil { - return fmt.Errorf("update stream record failed: %s %s %w", bucketInfo.BucketName, objectInfo.ObjectName, err) + return fmt.Errorf("update stream record failed: %s %s %w", bucketInfo.BucketName, objectName, err) } if streamRecord.StaticBalance.IsNegative() { - return fmt.Errorf("static balance is not enough for %s %s, lacks %s", bucketInfo.BucketName, objectInfo.ObjectName, streamRecord.StaticBalance.Neg().String()) + return fmt.Errorf("static balance is not enough for %s %s, lacks %s", bucketInfo.BucketName, objectName, streamRecord.StaticBalance.Neg().String()) } return nil } // UnlockObjectStoreFee unlock store fee if the object is deleted in INIT state func (k Keeper) UnlockObjectStoreFee(ctx sdk.Context, bucketInfo *storagetypes.BucketInfo, objectInfo *storagetypes.ObjectInfo) error { - lockedBalance, err := k.GetObjectLockFee(ctx, objectInfo.CreateAt, objectInfo.PayloadSize) + lockedBalance, err := k.GetObjectLockFee(ctx, objectInfo.GetLatestUpdatedTime(), objectInfo.PayloadSize) if err != nil { return fmt.Errorf("get object store fee rate failed: %s %s %w", bucketInfo.BucketName, objectInfo.ObjectName, err) } @@ -147,6 +155,21 @@ func (k Keeper) UnlockObjectStoreFee(ctx sdk.Context, bucketInfo *storagetypes.B return nil } +// UnlockShadowObjectStoreFee unlock store fee if the object is deleted in INIT state +func (k Keeper) UnlockShadowObjectStoreFee(ctx sdk.Context, bucketInfo *storagetypes.BucketInfo, objectInfo *storagetypes.ShadowObjectInfo) error { + lockedBalance, err := k.GetObjectLockFee(ctx, objectInfo.GetUpdatedAt(), objectInfo.PayloadSize) + if err != nil { + return fmt.Errorf("get shadow object store fee rate failed, objectID: %s %w", objectInfo.Id.String(), err) + } + paymentAddr := sdk.MustAccAddressFromHex(bucketInfo.PaymentAddress) + change := types.NewDefaultStreamRecordChangeWithAddr(paymentAddr).WithLockBalanceChange(lockedBalance.Neg()) + _, err = k.paymentKeeper.UpdateStreamRecordByAddr(ctx, change) + if err != nil { + return fmt.Errorf("update stream record failed, objectID: %s %w", objectInfo.Id.String(), err) + } + return nil +} + func (k Keeper) UnlockAndChargeObjectStoreFee(ctx sdk.Context, primarySpId uint32, bucketInfo *storagetypes.BucketInfo, internalBucketInfo *storagetypes.InternalBucketInfo, objectInfo *storagetypes.ObjectInfo) error { // unlock store fee @@ -188,7 +211,7 @@ func (k Keeper) IsPriceChanged(ctx sdk.Context, primarySpId uint32, priceTime in func (k Keeper) ChargeObjectStoreFee(ctx sdk.Context, primarySpId uint32, bucketInfo *storagetypes.BucketInfo, internalBucketInfo *storagetypes.InternalBucketInfo, objectInfo *storagetypes.ObjectInfo) error { - chargeSize, err := k.GetObjectChargeSize(ctx, objectInfo.PayloadSize, objectInfo.CreateAt) + chargeSize, err := k.GetObjectChargeSize(ctx, objectInfo.PayloadSize, objectInfo.GetLatestUpdatedTime()) if err != nil { return fmt.Errorf("get charge size failed: %s %s %w", bucketInfo.BucketName, objectInfo.ObjectName, err) } @@ -218,9 +241,9 @@ func (k Keeper) ChargeObjectStoreFee(ctx sdk.Context, primarySpId uint32, bucket }) } -func (k Keeper) UnChargeObjectStoreFee(ctx sdk.Context, primarySpId uint32, bucketInfo *storagetypes.BucketInfo, +func (k Keeper) UnChargeObjectStoreFee(ctx sdk.Context, bucketInfo *storagetypes.BucketInfo, internalBucketInfo *storagetypes.InternalBucketInfo, objectInfo *storagetypes.ObjectInfo) error { - chargeSize, err := k.GetObjectChargeSize(ctx, objectInfo.PayloadSize, objectInfo.CreateAt) + chargeSize, err := k.GetObjectChargeSize(ctx, objectInfo.PayloadSize, objectInfo.GetLatestUpdatedTime()) if err != nil { return fmt.Errorf("get charge size failed: %s %s %w", bucketInfo.BucketName, objectInfo.ObjectName, err) } @@ -235,7 +258,7 @@ func (k Keeper) UnChargeObjectStoreFee(ctx sdk.Context, primarySpId uint32, buck if err != nil { return fmt.Errorf("failed to get versioned params: %w", err) } - timeToPay := objectInfo.CreateAt + int64(versionParams.ReserveTime) - blockTime + timeToPay := objectInfo.GetLatestUpdatedTime() + int64(versionParams.ReserveTime) - blockTime if timeToPay > 0 { // store less than reserve time err = k.ChargeObjectStoreFeeForEarlyDeletion(ctx, userFlows, bucketInfo, objectInfo, timeToPay) forced, _ := ctx.Value(types.ForceUpdateStreamRecordKey).(bool) // force update in end block diff --git a/x/storage/types/codec.go b/x/storage/types/codec.go index 241228f30..0e96ca58e 100644 --- a/x/storage/types/codec.go +++ b/x/storage/types/codec.go @@ -115,6 +115,12 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgRejectMigrateBucket{}, ) + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgUpdateObjectContent{}, + ) + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgCancelUpdateObjectContent{}, + ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } diff --git a/x/storage/types/errors.go b/x/storage/types/errors.go index 54ce09927..32509e1c7 100644 --- a/x/storage/types/errors.go +++ b/x/storage/types/errors.go @@ -31,6 +31,9 @@ var ( ErrInvalidGlobalVirtualGroup = errors.Register(ModuleName, 1123, "invalid global virtual group") ErrRenewGroupMemberNotAllow = errors.Register(ModuleName, 1124, "Renew group member not allow") ErrInvalidGroupMemberExpiration = errors.Register(ModuleName, 1125, "invalid group member with expiration") + ErrUpdateObjectNotAllowed = errors.Register(ModuleName, 1126, "Object is not allowed to update") + ErrObjectIsUpdating = errors.Register(ModuleName, 1127, "Object is being updated") + ErrObjectIsNotUpdating = errors.Register(ModuleName, 1128, "Object is not being updated") ErrInvalidCrossChainPackage = errors.Register(ModuleName, 3000, "invalid cross chain package") ErrAlreadyMirrored = errors.Register(ModuleName, 3001, "resource is already mirrored") diff --git a/x/storage/types/events.pb.go b/x/storage/types/events.pb.go index 2ec9417c7..f8fcabce3 100644 --- a/x/storage/types/events.pb.go +++ b/x/storage/types/events.pb.go @@ -650,6 +650,8 @@ type EventSealObject struct { GlobalVirtualGroupId uint32 `protobuf:"varint,7,opt,name=global_virtual_group_id,json=globalVirtualGroupId,proto3" json:"global_virtual_group_id,omitempty"` // local_virtual_group_id defines the unique id of lvg which the object stored LocalVirtualGroupId uint32 `protobuf:"varint,8,opt,name=local_virtual_group_id,json=localVirtualGroupId,proto3" json:"local_virtual_group_id,omitempty"` + // for_update indicates whether sealing on a updating object + ForUpdate bool `protobuf:"varint,9,opt,name=for_update,json=forUpdate,proto3" json:"for_update,omitempty"` } func (m *EventSealObject) Reset() { *m = EventSealObject{} } @@ -727,6 +729,13 @@ func (m *EventSealObject) GetLocalVirtualGroupId() uint32 { return 0 } +func (m *EventSealObject) GetForUpdate() bool { + if m != nil { + return m.ForUpdate + } + return false +} + // EventCopyObject is emitted on MsgCopyObject type EventCopyObject struct { // operator define the account address of operator who copy the object @@ -907,6 +916,8 @@ type EventRejectSealObject struct { ObjectName string `protobuf:"bytes,3,opt,name=object_name,json=objectName,proto3" json:"object_name,omitempty"` // id define an u256 id for object ObjectId Uint `protobuf:"bytes,4,opt,name=object_id,json=objectId,proto3,customtype=Uint" json:"object_id"` + // for_update indicates whether reject sealing on a updating object + ForUpdate bool `protobuf:"varint,5,opt,name=for_update,json=forUpdate,proto3" json:"for_update,omitempty"` } func (m *EventRejectSealObject) Reset() { *m = EventRejectSealObject{} } @@ -963,6 +974,13 @@ func (m *EventRejectSealObject) GetObjectName() string { return "" } +func (m *EventRejectSealObject) GetForUpdate() bool { + if m != nil { + return m.ForUpdate + } + return false +} + // EventDiscontinueObject is emitted on MsgDiscontinueObject type EventDiscontinueObject struct { // bucket_name define the name of the bucket @@ -2373,6 +2391,290 @@ func (m *EventSetTag) GetTags() *ResourceTags { return nil } +// EventUpdateObjectContent is emitted on MsgUpdateObjectContent +type EventUpdateObjectContent struct { + // operator define the account address of msg operator + Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` + // object_id is the unique identifier of object + ObjectId Uint `protobuf:"bytes,2,opt,name=object_id,json=objectId,proto3,customtype=Uint" json:"object_id"` + BucketName string `protobuf:"bytes,3,opt,name=bucket_name,json=bucketName,proto3" json:"bucket_name,omitempty"` + ObjectName string `protobuf:"bytes,4,opt,name=object_name,json=objectName,proto3" json:"object_name,omitempty"` + // payload_size define the size of payload data which you want upload + PayloadSize uint64 `protobuf:"varint,5,opt,name=payload_size,json=payloadSize,proto3" json:"payload_size,omitempty"` + // checksums define the total checksums of the object which generated by redundancy + Checksums [][]byte `protobuf:"bytes,6,rep,name=checksums,proto3" json:"checksums,omitempty"` + // version define the version of object + Version int64 `protobuf:"varint,7,opt,name=version,proto3" json:"version,omitempty"` +} + +func (m *EventUpdateObjectContent) Reset() { *m = EventUpdateObjectContent{} } +func (m *EventUpdateObjectContent) String() string { return proto.CompactTextString(m) } +func (*EventUpdateObjectContent) ProtoMessage() {} +func (*EventUpdateObjectContent) Descriptor() ([]byte, []int) { + return fileDescriptor_946dcba4f763ddc4, []int{31} +} +func (m *EventUpdateObjectContent) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventUpdateObjectContent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventUpdateObjectContent.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EventUpdateObjectContent) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventUpdateObjectContent.Merge(m, src) +} +func (m *EventUpdateObjectContent) XXX_Size() int { + return m.Size() +} +func (m *EventUpdateObjectContent) XXX_DiscardUnknown() { + xxx_messageInfo_EventUpdateObjectContent.DiscardUnknown(m) +} + +var xxx_messageInfo_EventUpdateObjectContent proto.InternalMessageInfo + +func (m *EventUpdateObjectContent) GetOperator() string { + if m != nil { + return m.Operator + } + return "" +} + +func (m *EventUpdateObjectContent) GetBucketName() string { + if m != nil { + return m.BucketName + } + return "" +} + +func (m *EventUpdateObjectContent) GetObjectName() string { + if m != nil { + return m.ObjectName + } + return "" +} + +func (m *EventUpdateObjectContent) GetPayloadSize() uint64 { + if m != nil { + return m.PayloadSize + } + return 0 +} + +func (m *EventUpdateObjectContent) GetChecksums() [][]byte { + if m != nil { + return m.Checksums + } + return nil +} + +func (m *EventUpdateObjectContent) GetVersion() int64 { + if m != nil { + return m.Version + } + return 0 +} + +// EventUpdateObjectContentSuccess is emitted on the MsgSealObject for updating object +type EventUpdateObjectContentSuccess struct { + // operator define the account address of msg operator + Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` + // object_id is the unique identifier of object + ObjectId Uint `protobuf:"bytes,2,opt,name=object_id,json=objectId,proto3,customtype=Uint" json:"object_id"` + BucketName string `protobuf:"bytes,3,opt,name=bucket_name,json=bucketName,proto3" json:"bucket_name,omitempty"` + ObjectName string `protobuf:"bytes,4,opt,name=object_name,json=objectName,proto3" json:"object_name,omitempty"` + // content_type define the content type of the payload data + ContentType string `protobuf:"bytes,5,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + // prev_payload_size define the size of payload data stored previously + PrevPayloadSize uint64 `protobuf:"varint,6,opt,name=prev_payload_size,json=prevPayloadSize,proto3" json:"prev_payload_size,omitempty"` + // new_payload_size define the new size of payload data + NewPayloadSize uint64 `protobuf:"varint,7,opt,name=new_payload_size,json=newPayloadSize,proto3" json:"new_payload_size,omitempty"` + // prev_checksums define the total checksums of the previous object which generated by redundancy + PrevChecksums [][]byte `protobuf:"bytes,8,rep,name=prev_checksums,json=prevChecksums,proto3" json:"prev_checksums,omitempty"` + // new_checksums define the total checksums of the updated object which generated by redundancy + NewChecksums [][]byte `protobuf:"bytes,9,rep,name=new_checksums,json=newChecksums,proto3" json:"new_checksums,omitempty"` + // version define the version of object + Version int64 `protobuf:"varint,10,opt,name=version,proto3" json:"version,omitempty"` + // updated_at define the block timestamp when the object is updated + UpdatedAt int64 `protobuf:"varint,11,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (m *EventUpdateObjectContentSuccess) Reset() { *m = EventUpdateObjectContentSuccess{} } +func (m *EventUpdateObjectContentSuccess) String() string { return proto.CompactTextString(m) } +func (*EventUpdateObjectContentSuccess) ProtoMessage() {} +func (*EventUpdateObjectContentSuccess) Descriptor() ([]byte, []int) { + return fileDescriptor_946dcba4f763ddc4, []int{32} +} +func (m *EventUpdateObjectContentSuccess) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventUpdateObjectContentSuccess) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventUpdateObjectContentSuccess.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EventUpdateObjectContentSuccess) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventUpdateObjectContentSuccess.Merge(m, src) +} +func (m *EventUpdateObjectContentSuccess) XXX_Size() int { + return m.Size() +} +func (m *EventUpdateObjectContentSuccess) XXX_DiscardUnknown() { + xxx_messageInfo_EventUpdateObjectContentSuccess.DiscardUnknown(m) +} + +var xxx_messageInfo_EventUpdateObjectContentSuccess proto.InternalMessageInfo + +func (m *EventUpdateObjectContentSuccess) GetOperator() string { + if m != nil { + return m.Operator + } + return "" +} + +func (m *EventUpdateObjectContentSuccess) GetBucketName() string { + if m != nil { + return m.BucketName + } + return "" +} + +func (m *EventUpdateObjectContentSuccess) GetObjectName() string { + if m != nil { + return m.ObjectName + } + return "" +} + +func (m *EventUpdateObjectContentSuccess) GetContentType() string { + if m != nil { + return m.ContentType + } + return "" +} + +func (m *EventUpdateObjectContentSuccess) GetPrevPayloadSize() uint64 { + if m != nil { + return m.PrevPayloadSize + } + return 0 +} + +func (m *EventUpdateObjectContentSuccess) GetNewPayloadSize() uint64 { + if m != nil { + return m.NewPayloadSize + } + return 0 +} + +func (m *EventUpdateObjectContentSuccess) GetPrevChecksums() [][]byte { + if m != nil { + return m.PrevChecksums + } + return nil +} + +func (m *EventUpdateObjectContentSuccess) GetNewChecksums() [][]byte { + if m != nil { + return m.NewChecksums + } + return nil +} + +func (m *EventUpdateObjectContentSuccess) GetVersion() int64 { + if m != nil { + return m.Version + } + return 0 +} + +func (m *EventUpdateObjectContentSuccess) GetUpdatedAt() int64 { + if m != nil { + return m.UpdatedAt + } + return 0 +} + +// EventCancelUpdateObjectContent is emitted on MsgCancelUpdateObjectContent +type EventCancelUpdateObjectContent struct { + // operator define the account address of operator who cancel update object + Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` + // bucket_name define the name of the bucket + BucketName string `protobuf:"bytes,2,opt,name=bucket_name,json=bucketName,proto3" json:"bucket_name,omitempty"` + // object_name define the name of the object + ObjectName string `protobuf:"bytes,3,opt,name=object_name,json=objectName,proto3" json:"object_name,omitempty"` + // object_name define the id of the object + ObjectId Uint `protobuf:"bytes,4,opt,name=object_id,json=objectId,proto3,customtype=Uint" json:"object_id"` +} + +func (m *EventCancelUpdateObjectContent) Reset() { *m = EventCancelUpdateObjectContent{} } +func (m *EventCancelUpdateObjectContent) String() string { return proto.CompactTextString(m) } +func (*EventCancelUpdateObjectContent) ProtoMessage() {} +func (*EventCancelUpdateObjectContent) Descriptor() ([]byte, []int) { + return fileDescriptor_946dcba4f763ddc4, []int{33} +} +func (m *EventCancelUpdateObjectContent) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventCancelUpdateObjectContent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventCancelUpdateObjectContent.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EventCancelUpdateObjectContent) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventCancelUpdateObjectContent.Merge(m, src) +} +func (m *EventCancelUpdateObjectContent) XXX_Size() int { + return m.Size() +} +func (m *EventCancelUpdateObjectContent) XXX_DiscardUnknown() { + xxx_messageInfo_EventCancelUpdateObjectContent.DiscardUnknown(m) +} + +var xxx_messageInfo_EventCancelUpdateObjectContent proto.InternalMessageInfo + +func (m *EventCancelUpdateObjectContent) GetOperator() string { + if m != nil { + return m.Operator + } + return "" +} + +func (m *EventCancelUpdateObjectContent) GetBucketName() string { + if m != nil { + return m.BucketName + } + return "" +} + +func (m *EventCancelUpdateObjectContent) GetObjectName() string { + if m != nil { + return m.ObjectName + } + return "" +} + func init() { proto.RegisterType((*EventCreateBucket)(nil), "greenfield.storage.EventCreateBucket") proto.RegisterType((*EventDeleteBucket)(nil), "greenfield.storage.EventDeleteBucket") @@ -2405,119 +2707,134 @@ func init() { proto.RegisterType((*EventRejectMigrateBucket)(nil), "greenfield.storage.EventRejectMigrateBucket") proto.RegisterType((*EventCompleteMigrationBucket)(nil), "greenfield.storage.EventCompleteMigrationBucket") proto.RegisterType((*EventSetTag)(nil), "greenfield.storage.EventSetTag") + proto.RegisterType((*EventUpdateObjectContent)(nil), "greenfield.storage.EventUpdateObjectContent") + proto.RegisterType((*EventUpdateObjectContentSuccess)(nil), "greenfield.storage.EventUpdateObjectContentSuccess") + proto.RegisterType((*EventCancelUpdateObjectContent)(nil), "greenfield.storage.EventCancelUpdateObjectContent") } func init() { proto.RegisterFile("greenfield/storage/events.proto", fileDescriptor_946dcba4f763ddc4) } var fileDescriptor_946dcba4f763ddc4 = []byte{ - // 1706 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0xcd, 0x6f, 0xdb, 0xc8, - 0x15, 0x37, 0x25, 0x4a, 0x96, 0x47, 0x96, 0x14, 0xb3, 0x6e, 0xa2, 0x3a, 0xa9, 0xac, 0xf0, 0x90, - 0x3a, 0x45, 0x23, 0x15, 0x4e, 0x5a, 0xe4, 0x16, 0xf8, 0x23, 0x2d, 0x84, 0x36, 0x1f, 0xa5, 0x9d, - 0x1c, 0x7a, 0x21, 0x46, 0xe4, 0x98, 0x66, 0x43, 0x72, 0x58, 0xce, 0xc8, 0x89, 0xf2, 0x0f, 0xf4, - 0x54, 0x20, 0x40, 0x51, 0xa0, 0xbd, 0xe4, 0x5c, 0xa0, 0x28, 0xd0, 0x43, 0xae, 0xbd, 0xa7, 0xb7, - 0x34, 0xbd, 0xf4, 0x03, 0xc8, 0x2e, 0x92, 0x53, 0x16, 0x58, 0xec, 0x9e, 0xf7, 0xb4, 0xe0, 0xcc, - 0x90, 0x22, 0x45, 0x39, 0x32, 0x95, 0x75, 0xec, 0xec, 0x4d, 0x1c, 0xfd, 0x66, 0xf4, 0xde, 0x9b, - 0xdf, 0xfb, 0xbd, 0x37, 0x43, 0x81, 0x55, 0x2b, 0x40, 0xc8, 0xdb, 0xb3, 0x91, 0x63, 0x76, 0x09, - 0xc5, 0x01, 0xb4, 0x50, 0x17, 0x1d, 0x20, 0x8f, 0x92, 0x8e, 0x1f, 0x60, 0x8a, 0x15, 0x65, 0x04, - 0xe8, 0x08, 0xc0, 0xca, 0xf7, 0x0c, 0x4c, 0x5c, 0x4c, 0x74, 0x86, 0xe8, 0xf2, 0x07, 0x0e, 0x5f, - 0x59, 0xb6, 0xb0, 0x85, 0xf9, 0x78, 0xf8, 0x49, 0x8c, 0xae, 0x5a, 0x18, 0x5b, 0x0e, 0xea, 0xb2, - 0xa7, 0xfe, 0x60, 0xaf, 0x4b, 0x6d, 0x17, 0x11, 0x0a, 0x5d, 0x3f, 0x06, 0x8c, 0xcc, 0x08, 0x10, - 0xc1, 0x83, 0xc0, 0x40, 0x5d, 0x3a, 0xf4, 0x11, 0x99, 0x00, 0x88, 0xec, 0x34, 0xb0, 0xeb, 0x62, - 0x4f, 0x00, 0x5a, 0x13, 0x00, 0x89, 0x05, 0xd4, 0x7f, 0xcb, 0x60, 0xe9, 0x66, 0xe8, 0xd8, 0x56, - 0x80, 0x20, 0x45, 0x9b, 0x03, 0xe3, 0x01, 0xa2, 0x4a, 0x07, 0x94, 0xf0, 0x43, 0x0f, 0x05, 0x4d, - 0xa9, 0x2d, 0xad, 0x2d, 0x6c, 0x36, 0x5f, 0x3e, 0xbb, 0xb2, 0x2c, 0xfc, 0xd9, 0x30, 0xcd, 0x00, - 0x11, 0xb2, 0x43, 0x03, 0xdb, 0xb3, 0x34, 0x0e, 0x53, 0x56, 0x41, 0xb5, 0xcf, 0x66, 0xea, 0x1e, - 0x74, 0x51, 0xb3, 0x10, 0xce, 0xd2, 0x00, 0x1f, 0xba, 0x0d, 0x5d, 0xa4, 0x6c, 0x02, 0x70, 0x60, - 0x13, 0xbb, 0x6f, 0x3b, 0x36, 0x1d, 0x36, 0x8b, 0x6d, 0x69, 0xad, 0xbe, 0xae, 0x76, 0xb2, 0x31, - 0xec, 0xdc, 0x8f, 0x51, 0xbb, 0x43, 0x1f, 0x69, 0x89, 0x59, 0xca, 0x79, 0xb0, 0x60, 0x30, 0x23, - 0x75, 0x48, 0x9b, 0x72, 0x5b, 0x5a, 0x2b, 0x6a, 0x15, 0x3e, 0xb0, 0x41, 0x95, 0xeb, 0x60, 0x41, - 0x58, 0x60, 0x9b, 0xcd, 0x12, 0xb3, 0xfa, 0xfc, 0xf3, 0x57, 0xab, 0x73, 0xff, 0x7b, 0xb5, 0x2a, - 0xdf, 0xb3, 0x3d, 0xfa, 0xf2, 0xd9, 0x95, 0xaa, 0xf0, 0x20, 0x7c, 0xd4, 0x2a, 0x1c, 0xdd, 0x33, - 0x95, 0x1b, 0xa0, 0xca, 0x03, 0xab, 0x87, 0x71, 0x69, 0x96, 0x99, 0x6d, 0xad, 0x49, 0xb6, 0xed, - 0x30, 0x18, 0xb7, 0x8b, 0xc4, 0x9f, 0x95, 0x1f, 0x01, 0xc5, 0xd8, 0x87, 0x81, 0x85, 0x4c, 0x3d, - 0x40, 0xd0, 0xd4, 0x7f, 0x3b, 0xc0, 0x14, 0x36, 0xe7, 0xdb, 0xd2, 0x9a, 0xac, 0x9d, 0x11, 0xdf, - 0x68, 0x08, 0x9a, 0xbf, 0x0a, 0xc7, 0x95, 0x0d, 0xd0, 0xf0, 0xe1, 0xd0, 0x45, 0x1e, 0xd5, 0x21, - 0x0f, 0x65, 0xb3, 0x32, 0x25, 0xc8, 0x75, 0x31, 0x41, 0x8c, 0x2a, 0x2a, 0xa8, 0xf9, 0x81, 0xed, - 0xc2, 0x60, 0xa8, 0x13, 0x3f, 0xf4, 0x77, 0xa1, 0x2d, 0xad, 0xd5, 0xb4, 0xaa, 0x18, 0xdc, 0xf1, - 0x7b, 0xa6, 0xb2, 0x09, 0x5a, 0x96, 0x83, 0xfb, 0xd0, 0xd1, 0x0f, 0xec, 0x80, 0x0e, 0xa0, 0xa3, - 0x5b, 0x01, 0x1e, 0xf8, 0xfa, 0x1e, 0x74, 0x6d, 0x67, 0x18, 0x4e, 0x02, 0x6c, 0xd2, 0x0a, 0x47, - 0xdd, 0xe7, 0xa0, 0x9f, 0x87, 0x98, 0x9f, 0x31, 0x48, 0xcf, 0x54, 0xae, 0x83, 0x32, 0xa1, 0x90, - 0x0e, 0x48, 0xb3, 0xca, 0x82, 0xd2, 0x9e, 0x14, 0x14, 0xce, 0x98, 0x1d, 0x86, 0xd3, 0x04, 0x5e, - 0xfd, 0x53, 0x41, 0xb0, 0x6a, 0x1b, 0x39, 0x28, 0x66, 0xd5, 0x35, 0x50, 0xc1, 0x3e, 0x0a, 0x20, - 0xc5, 0xd3, 0x89, 0x15, 0x23, 0x47, 0x5c, 0x2c, 0xcc, 0xc4, 0xc5, 0x62, 0x86, 0x8b, 0x29, 0xaa, - 0xc8, 0x79, 0xa8, 0x32, 0x3d, 0xa8, 0xa5, 0x69, 0x41, 0x55, 0x7f, 0x57, 0x04, 0xdf, 0x65, 0xa1, - 0xb9, 0xe7, 0x9b, 0x71, 0xc2, 0xf5, 0xbc, 0x3d, 0x3c, 0x63, 0x78, 0xa6, 0xa6, 0x5e, 0xca, 0xdd, - 0x62, 0x1e, 0x77, 0x27, 0x13, 0x5b, 0x3e, 0x84, 0xd8, 0x3f, 0xc8, 0x12, 0x9b, 0xe5, 0x61, 0x86, - 0xbe, 0x69, 0x2d, 0x28, 0xcf, 0xa4, 0x05, 0xd3, 0x77, 0x62, 0x7e, 0xea, 0x4e, 0xfc, 0x45, 0x02, - 0x67, 0x39, 0x49, 0x6d, 0x62, 0x60, 0x8f, 0xda, 0xde, 0x20, 0x62, 0x6a, 0x2a, 0x66, 0x52, 0x9e, - 0x98, 0x4d, 0xdd, 0x8e, 0xb3, 0xa0, 0x1c, 0x20, 0x48, 0xb0, 0x27, 0x98, 0x29, 0x9e, 0x42, 0x75, - 0x33, 0x59, 0xb2, 0x24, 0xd4, 0x8d, 0x0f, 0x6c, 0x50, 0xf5, 0x0f, 0xe5, 0x94, 0x4a, 0xdf, 0xe9, - 0xff, 0x06, 0x19, 0x54, 0x59, 0x07, 0xf3, 0x4c, 0xff, 0x8e, 0xc0, 0x97, 0x08, 0xf8, 0xcd, 0x67, - 0xd3, 0x2a, 0xa8, 0x62, 0x66, 0x0e, 0x07, 0xc8, 0x1c, 0xc0, 0x87, 0xb2, 0xfc, 0x2b, 0xe7, 0x89, - 0xe5, 0x75, 0xb0, 0x20, 0x96, 0x16, 0xfb, 0x39, 0x6d, 0x26, 0x47, 0xf7, 0xcc, 0xac, 0x42, 0x56, - 0xb2, 0x0a, 0x79, 0x11, 0x2c, 0xfa, 0x70, 0xe8, 0x60, 0x68, 0xea, 0xc4, 0x7e, 0x8c, 0x98, 0x88, - 0xca, 0x5a, 0x55, 0x8c, 0xed, 0xd8, 0x8f, 0xc7, 0xab, 0x16, 0x98, 0x89, 0xa9, 0x17, 0xc1, 0x62, - 0x48, 0xae, 0x30, 0x2d, 0x58, 0x7d, 0xa9, 0xb2, 0x00, 0x55, 0xc5, 0x18, 0x2b, 0x20, 0xa9, 0xc2, - 0xb6, 0x98, 0x29, 0x6c, 0x91, 0x08, 0xd7, 0x0e, 0x17, 0x61, 0x4e, 0x88, 0xb4, 0x08, 0x2b, 0xbf, - 0x00, 0x8d, 0x00, 0x99, 0x03, 0xcf, 0x84, 0x9e, 0x31, 0xe4, 0x3f, 0x5e, 0x3f, 0xdc, 0x05, 0x2d, - 0x86, 0x32, 0x17, 0xea, 0x41, 0xea, 0x79, 0xbc, 0x4a, 0x36, 0x72, 0x57, 0xc9, 0x0b, 0x60, 0xc1, - 0xd8, 0x47, 0xc6, 0x03, 0x32, 0x70, 0x49, 0xf3, 0x4c, 0xbb, 0xb8, 0xb6, 0xa8, 0x8d, 0x06, 0x94, - 0xab, 0xe0, 0xac, 0x83, 0x8d, 0x4c, 0x3a, 0xdb, 0x66, 0x73, 0x89, 0xed, 0xdc, 0x77, 0xd8, 0xb7, - 0xc9, 0x34, 0xee, 0x99, 0xea, 0x17, 0x12, 0x38, 0xc7, 0xb3, 0x02, 0x7a, 0x06, 0x72, 0x52, 0xb9, - 0x71, 0x4c, 0x62, 0x3a, 0xc6, 0xf6, 0x62, 0x86, 0xed, 0x19, 0xe6, 0xc9, 0x59, 0xe6, 0xa5, 0x78, - 0x5d, 0xce, 0xc1, 0x6b, 0xf5, 0x6d, 0x01, 0x34, 0x98, 0xc7, 0x3b, 0x08, 0x3a, 0x27, 0xec, 0x69, - 0xca, 0x8b, 0x52, 0x9e, 0xec, 0x1c, 0x51, 0xba, 0x9c, 0x93, 0xd2, 0x3f, 0x01, 0xe7, 0x26, 0xca, - 0x7e, 0xac, 0xf7, 0xcb, 0x59, 0xbd, 0xef, 0x99, 0xef, 0x60, 0x57, 0xe5, 0x70, 0x76, 0x3d, 0x2d, - 0x8a, 0x58, 0x6f, 0x61, 0x7f, 0xf8, 0x5e, 0xb1, 0xbe, 0x04, 0x1a, 0x24, 0x30, 0xf4, 0x6c, 0xbc, - 0x6b, 0x24, 0x30, 0x36, 0x47, 0x21, 0x17, 0xb8, 0x6c, 0xd8, 0x43, 0xdc, 0x9d, 0x51, 0xe4, 0x2f, - 0x81, 0x86, 0x49, 0x68, 0x6a, 0x3d, 0x2e, 0xbb, 0x35, 0x93, 0xd0, 0xf4, 0x7a, 0x21, 0x2e, 0xb9, - 0x5e, 0x29, 0xc6, 0x25, 0xd6, 0xbb, 0x01, 0x6a, 0x89, 0xdf, 0x3d, 0x1a, 0x27, 0xab, 0xb1, 0x49, - 0xac, 0x85, 0xae, 0x25, 0x7e, 0xe8, 0x68, 0x62, 0x5d, 0x8d, 0x6d, 0x98, 0x75, 0x83, 0xbe, 0x92, - 0x52, 0x4d, 0xe6, 0x69, 0x4a, 0x07, 0x39, 0x4f, 0x3a, 0x1c, 0xee, 0x7c, 0xe9, 0x70, 0xe7, 0xff, - 0x29, 0x89, 0x36, 0x52, 0x43, 0x2c, 0x4f, 0x4e, 0x99, 0x1e, 0xe4, 0x09, 0xc0, 0xc4, 0x46, 0x4c, - 0x38, 0x33, 0x66, 0x96, 0x34, 0xa9, 0xbb, 0x1d, 0xfd, 0x6a, 0x21, 0x4f, 0xd8, 0x67, 0x6a, 0xc4, - 0x7e, 0x5f, 0x48, 0x75, 0xef, 0x82, 0xc0, 0xc7, 0xd8, 0xbd, 0x1f, 0x23, 0xef, 0xd2, 0xdd, 0x4d, - 0x69, 0x96, 0xee, 0x46, 0xfd, 0x52, 0x02, 0x67, 0x12, 0x8d, 0x29, 0x63, 0x67, 0xee, 0xdb, 0x83, - 0xef, 0x03, 0xc0, 0x29, 0x9f, 0x88, 0xc1, 0x02, 0x1b, 0x61, 0x1e, 0xfe, 0x14, 0x54, 0xe2, 0x8c, - 0x38, 0xc2, 0xf9, 0x65, 0xde, 0x12, 0xaa, 0x3f, 0xd6, 0xb2, 0xc8, 0xb9, 0x5b, 0x96, 0x65, 0x50, - 0x42, 0x8f, 0x68, 0x00, 0x85, 0x6a, 0xf2, 0x07, 0xf5, 0xcf, 0x91, 0xcb, 0x5c, 0x76, 0xc6, 0x5c, - 0x2e, 0xcc, 0xe2, 0x72, 0xf1, 0x5d, 0x2e, 0xcb, 0x47, 0x77, 0x59, 0xfd, 0xaf, 0x24, 0x6a, 0xd6, - 0x2f, 0x11, 0x3c, 0x10, 0xa6, 0xdd, 0x00, 0x75, 0x17, 0xb9, 0x7d, 0x14, 0xc4, 0xc7, 0xb2, 0x69, - 0xdb, 0x52, 0xe3, 0xf8, 0xe8, 0xbc, 0x76, 0x4a, 0x7c, 0xfb, 0xbc, 0x20, 0x54, 0x82, 0xa7, 0x1e, - 0x73, 0xee, 0x16, 0x33, 0xf4, 0x03, 0x5d, 0x2c, 0x1c, 0x8f, 0x5f, 0xca, 0xdd, 0x68, 0x7f, 0x88, - 0x4e, 0x71, 0xb8, 0x47, 0xcd, 0x52, 0xbb, 0xb8, 0x56, 0x5d, 0xff, 0xe1, 0x24, 0xa6, 0xb2, 0x00, - 0x24, 0x5c, 0xdf, 0x46, 0x14, 0xda, 0x8e, 0xb6, 0x28, 0x56, 0xd8, 0xc5, 0x1b, 0xa6, 0xa9, 0x6c, - 0x83, 0xa5, 0xc4, 0x8a, 0x5c, 0xbb, 0x9a, 0xe5, 0x76, 0xf1, 0x9d, 0x4e, 0x36, 0xe2, 0x25, 0x38, - 0xaf, 0xd5, 0xff, 0x17, 0xe2, 0x0a, 0xe3, 0xa1, 0x87, 0xdf, 0x9a, 0x70, 0x8f, 0xa9, 0x42, 0x29, - 0xb7, 0x2a, 0x6c, 0x83, 0x79, 0x11, 0x2a, 0x16, 0xd3, 0x7c, 0x1b, 0x15, 0x4d, 0x55, 0xff, 0x18, - 0xd5, 0xbc, 0x0c, 0x46, 0xf9, 0x31, 0x28, 0x73, 0xd4, 0xd4, 0xe0, 0x0a, 0x9c, 0xd2, 0x03, 0x0d, - 0xf4, 0xc8, 0xb7, 0x03, 0x48, 0x6d, 0xec, 0xe9, 0xd4, 0x16, 0x2a, 0x5a, 0x5d, 0x5f, 0xe9, 0xf0, - 0x1b, 0xe6, 0x4e, 0x74, 0xc3, 0xdc, 0xd9, 0x8d, 0x6e, 0x98, 0x37, 0xe5, 0x27, 0x9f, 0xac, 0x4a, - 0x5a, 0x7d, 0x34, 0x31, 0xfc, 0x4a, 0xfd, 0x4c, 0x4a, 0x15, 0x38, 0x66, 0xdd, 0xcd, 0x50, 0xf7, - 0x3e, 0xee, 0x5d, 0x9f, 0x2c, 0xe5, 0xcf, 0xa3, 0x0e, 0xf2, 0x96, 0x1d, 0x04, 0x38, 0x78, 0xaf, - 0x6b, 0xca, 0x7c, 0xf7, 0x70, 0xb9, 0xae, 0x1d, 0x55, 0x50, 0x33, 0x11, 0xa1, 0xba, 0xb1, 0x0f, - 0x6d, 0x6f, 0xd4, 0x17, 0x56, 0xc3, 0xc1, 0xad, 0x70, 0xac, 0x67, 0xaa, 0x7f, 0x8f, 0xce, 0xc2, - 0x49, 0x57, 0x34, 0x44, 0x06, 0x0e, 0x0d, 0x3b, 0x1d, 0x71, 0xde, 0x92, 0xd8, 0xc4, 0xe8, 0x34, - 0x75, 0xc2, 0x26, 0xbf, 0x4d, 0x47, 0xff, 0xa3, 0xed, 0xdf, 0x8f, 0xe2, 0xeb, 0xbf, 0xd2, 0xdb, - 0xc3, 0x7d, 0x7d, 0xdf, 0xed, 0x39, 0x61, 0x9f, 0xfe, 0x11, 0x35, 0x42, 0xdc, 0xa7, 0x53, 0xd5, - 0xfb, 0x65, 0xec, 0x97, 0xb3, 0xf6, 0xff, 0x35, 0x92, 0xe0, 0x84, 0xfd, 0x53, 0xb6, 0xe4, 0x04, - 0xad, 0x3d, 0x10, 0x04, 0xda, 0xa1, 0xd0, 0x41, 0x77, 0xb1, 0x63, 0x1b, 0xc3, 0x2d, 0x07, 0x41, - 0x6f, 0xe0, 0x2b, 0x2b, 0xa0, 0xd2, 0x77, 0xb0, 0xf1, 0xe0, 0xf6, 0xc0, 0x65, 0xf6, 0x16, 0xb5, - 0xf8, 0x39, 0x2c, 0x77, 0xe2, 0x34, 0x63, 0x7b, 0x7b, 0x58, 0x94, 0x85, 0x89, 0xe5, 0x8e, 0x97, - 0xfd, 0xf0, 0x2c, 0xa3, 0x01, 0x33, 0xfe, 0xac, 0xbe, 0x94, 0xc0, 0xb2, 0x88, 0x92, 0xc5, 0xeb, - 0xc4, 0x07, 0x94, 0xc9, 0x5c, 0xaf, 0x2b, 0x2e, 0x83, 0x25, 0x93, 0x50, 0x7d, 0xd2, 0xf5, 0x5b, - 0xdd, 0x24, 0xf4, 0xee, 0xe8, 0x06, 0x4e, 0xfd, 0x9b, 0x04, 0x56, 0x12, 0x37, 0x87, 0xa7, 0xdd, - 0xb5, 0x90, 0xaa, 0xcd, 0xc4, 0x69, 0x9f, 0xdb, 0x8b, 0x4e, 0xab, 0xb5, 0x4f, 0x0b, 0xe0, 0x82, - 0xb8, 0x39, 0x73, 0xfd, 0x90, 0x48, 0xa7, 0x9e, 0x3a, 0xd3, 0x5f, 0x27, 0xc9, 0x53, 0xdf, 0x96, - 0x5e, 0x06, 0x4b, 0x24, 0x30, 0xc6, 0xe8, 0xc7, 0x65, 0xb3, 0x4e, 0x02, 0x23, 0x49, 0x3f, 0x1d, - 0x54, 0xc5, 0x2d, 0x2e, 0xdd, 0x85, 0x56, 0x98, 0xbf, 0xd1, 0xcb, 0x7d, 0x71, 0xc3, 0x11, 0x3f, - 0x2b, 0xd7, 0x80, 0x4c, 0xa1, 0x45, 0x44, 0xe2, 0xb6, 0x27, 0xdf, 0xdc, 0x8b, 0xee, 0x14, 0x5a, - 0x44, 0x63, 0xe8, 0xcd, 0xde, 0xf3, 0xd7, 0x2d, 0xe9, 0xc5, 0xeb, 0x96, 0xf4, 0xe9, 0xeb, 0x96, - 0xf4, 0xe4, 0x4d, 0x6b, 0xee, 0xc5, 0x9b, 0xd6, 0xdc, 0x7f, 0xde, 0xb4, 0xe6, 0x7e, 0xdd, 0xb5, - 0x6c, 0xba, 0x3f, 0xe8, 0x77, 0x0c, 0xec, 0x76, 0xfb, 0x5e, 0xff, 0x0a, 0x93, 0x9c, 0x6e, 0xe2, - 0x4f, 0x02, 0x8f, 0xd2, 0x7f, 0x13, 0xe8, 0x97, 0x59, 0xeb, 0x78, 0xf5, 0xeb, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x57, 0xb7, 0x14, 0x16, 0x12, 0x21, 0x00, 0x00, + // 1900 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0xcb, 0x8f, 0x23, 0x47, + 0x19, 0xdf, 0xf6, 0x6b, 0xec, 0xcf, 0x63, 0x7b, 0xa7, 0x19, 0x36, 0x66, 0x92, 0x78, 0x9c, 0x46, + 0x84, 0x49, 0xc4, 0xda, 0x68, 0x13, 0xd0, 0xde, 0x56, 0x33, 0xb3, 0x01, 0x59, 0x90, 0x64, 0x69, + 0x6f, 0x72, 0xe0, 0xd2, 0x2a, 0x77, 0xd7, 0x78, 0x9b, 0x6d, 0x77, 0x35, 0x55, 0xe5, 0x99, 0x75, + 0xfe, 0x01, 0xb8, 0x20, 0x45, 0x42, 0x48, 0x70, 0xc9, 0x15, 0x24, 0x84, 0xc4, 0x21, 0x57, 0xee, + 0x7b, 0x4c, 0x96, 0x0b, 0x0f, 0x29, 0xa0, 0xdd, 0x0b, 0x20, 0x21, 0x38, 0x73, 0x42, 0x5d, 0x55, + 0xdd, 0xee, 0x76, 0x7b, 0xd6, 0xd3, 0xde, 0xec, 0xce, 0x6c, 0x6e, 0xee, 0xf2, 0xaf, 0xcb, 0xdf, + 0xe3, 0xf7, 0x3d, 0xea, 0x2b, 0xc3, 0xee, 0x98, 0x62, 0xec, 0x1f, 0xb9, 0xd8, 0x73, 0xfa, 0x8c, + 0x13, 0x8a, 0xc6, 0xb8, 0x8f, 0x8f, 0xb1, 0xcf, 0x59, 0x2f, 0xa0, 0x84, 0x13, 0x5d, 0x9f, 0x03, + 0x7a, 0x0a, 0xb0, 0xf3, 0x15, 0x9b, 0xb0, 0x09, 0x61, 0x96, 0x40, 0xf4, 0xe5, 0x83, 0x84, 0xef, + 0x6c, 0x8f, 0xc9, 0x98, 0xc8, 0xf5, 0xf0, 0x93, 0x5a, 0xdd, 0x1d, 0x13, 0x32, 0xf6, 0x70, 0x5f, + 0x3c, 0x8d, 0xa6, 0x47, 0x7d, 0xee, 0x4e, 0x30, 0xe3, 0x68, 0x12, 0xc4, 0x80, 0xb9, 0x18, 0x14, + 0x33, 0x32, 0xa5, 0x36, 0xee, 0xf3, 0x59, 0x80, 0xd9, 0x12, 0x40, 0x24, 0xa7, 0x4d, 0x26, 0x13, + 0xe2, 0x2b, 0x40, 0x67, 0x09, 0x20, 0xb1, 0x81, 0xf1, 0xc7, 0x12, 0x6c, 0xbd, 0x15, 0x2a, 0x76, + 0x48, 0x31, 0xe2, 0xf8, 0x60, 0x6a, 0xdf, 0xc5, 0x5c, 0xef, 0x41, 0x99, 0x9c, 0xf8, 0x98, 0xb6, + 0xb5, 0xae, 0xb6, 0x57, 0x3b, 0x68, 0x3f, 0xf8, 0xf8, 0xea, 0xb6, 0xd2, 0x67, 0xdf, 0x71, 0x28, + 0x66, 0x6c, 0xc8, 0xa9, 0xeb, 0x8f, 0x4d, 0x09, 0xd3, 0x77, 0xa1, 0x3e, 0x12, 0x6f, 0x5a, 0x3e, + 0x9a, 0xe0, 0x76, 0x21, 0x7c, 0xcb, 0x04, 0xb9, 0xf4, 0x0e, 0x9a, 0x60, 0xfd, 0x00, 0xe0, 0xd8, + 0x65, 0xee, 0xc8, 0xf5, 0x5c, 0x3e, 0x6b, 0x17, 0xbb, 0xda, 0x5e, 0xf3, 0x9a, 0xd1, 0xcb, 0xda, + 0xb0, 0xf7, 0x7e, 0x8c, 0xba, 0x3d, 0x0b, 0xb0, 0x99, 0x78, 0x4b, 0x7f, 0x11, 0x6a, 0xb6, 0x10, + 0xd2, 0x42, 0xbc, 0x5d, 0xea, 0x6a, 0x7b, 0x45, 0xb3, 0x2a, 0x17, 0xf6, 0xb9, 0x7e, 0x1d, 0x6a, + 0x4a, 0x02, 0xd7, 0x69, 0x97, 0x85, 0xd4, 0x2f, 0xde, 0xff, 0x6c, 0xf7, 0xd2, 0x5f, 0x3e, 0xdb, + 0x2d, 0xbd, 0xe7, 0xfa, 0xfc, 0xc1, 0xc7, 0x57, 0xeb, 0x4a, 0x83, 0xf0, 0xd1, 0xac, 0x4a, 0xf4, + 0xc0, 0xd1, 0x6f, 0x40, 0x5d, 0x1a, 0xd6, 0x0a, 0xed, 0xd2, 0xae, 0x08, 0xd9, 0x3a, 0xcb, 0x64, + 0x1b, 0x0a, 0x98, 0x94, 0x8b, 0xc5, 0x9f, 0xf5, 0x6f, 0x80, 0x6e, 0xdf, 0x41, 0x74, 0x8c, 0x1d, + 0x8b, 0x62, 0xe4, 0x58, 0x3f, 0x9e, 0x12, 0x8e, 0xda, 0x1b, 0x5d, 0x6d, 0xaf, 0x64, 0x5e, 0x56, + 0xdf, 0x98, 0x18, 0x39, 0x3f, 0x08, 0xd7, 0xf5, 0x7d, 0x68, 0x05, 0x68, 0x36, 0xc1, 0x3e, 0xb7, + 0x90, 0x34, 0x65, 0xbb, 0xba, 0xc2, 0xc8, 0x4d, 0xf5, 0x82, 0x5a, 0xd5, 0x0d, 0x68, 0x04, 0xd4, + 0x9d, 0x20, 0x3a, 0xb3, 0x58, 0x10, 0xea, 0x5b, 0xeb, 0x6a, 0x7b, 0x0d, 0xb3, 0xae, 0x16, 0x87, + 0xc1, 0xc0, 0xd1, 0x0f, 0xa0, 0x33, 0xf6, 0xc8, 0x08, 0x79, 0xd6, 0xb1, 0x4b, 0xf9, 0x14, 0x79, + 0xd6, 0x98, 0x92, 0x69, 0x60, 0x1d, 0xa1, 0x89, 0xeb, 0xcd, 0xc2, 0x97, 0x40, 0xbc, 0xb4, 0x23, + 0x51, 0xef, 0x4b, 0xd0, 0x77, 0x43, 0xcc, 0x77, 0x04, 0x64, 0xe0, 0xe8, 0xd7, 0xa1, 0xc2, 0x38, + 0xe2, 0x53, 0xd6, 0xae, 0x0b, 0xa3, 0x74, 0x97, 0x19, 0x45, 0x32, 0x66, 0x28, 0x70, 0xa6, 0xc2, + 0x1b, 0xbf, 0x2c, 0x28, 0x56, 0xdd, 0xc4, 0x1e, 0x8e, 0x59, 0xf5, 0x26, 0x54, 0x49, 0x80, 0x29, + 0xe2, 0x64, 0x35, 0xb1, 0x62, 0xe4, 0x9c, 0x8b, 0x85, 0xb5, 0xb8, 0x58, 0xcc, 0x70, 0x31, 0x45, + 0x95, 0x52, 0x1e, 0xaa, 0xac, 0x36, 0x6a, 0x79, 0x95, 0x51, 0x8d, 0x9f, 0x14, 0xe1, 0xcb, 0xc2, + 0x34, 0xef, 0x05, 0x4e, 0x1c, 0x70, 0x03, 0xff, 0x88, 0xac, 0x69, 0x9e, 0x95, 0xa1, 0x97, 0x52, + 0xb7, 0x98, 0x47, 0xdd, 0xe5, 0xc4, 0x2e, 0x9d, 0x42, 0xec, 0xaf, 0x67, 0x89, 0x2d, 0xe2, 0x30, + 0x43, 0xdf, 0x74, 0x2e, 0xa8, 0xac, 0x95, 0x0b, 0x56, 0x7b, 0x62, 0x63, 0xa5, 0x27, 0x7e, 0xa3, + 0xc1, 0x15, 0x49, 0x52, 0x97, 0xd9, 0xc4, 0xe7, 0xae, 0x3f, 0x8d, 0x98, 0x9a, 0xb2, 0x99, 0x96, + 0xc7, 0x66, 0x2b, 0xdd, 0x71, 0x05, 0x2a, 0x14, 0x23, 0x46, 0x7c, 0xc5, 0x4c, 0xf5, 0x14, 0x66, + 0x37, 0x47, 0x04, 0x4b, 0x22, 0xbb, 0xc9, 0x85, 0x7d, 0x6e, 0xfc, 0xbc, 0x92, 0xca, 0xd2, 0xef, + 0x8e, 0x7e, 0x84, 0x6d, 0xae, 0x5f, 0x83, 0x0d, 0x91, 0xff, 0xce, 0xc0, 0x97, 0x08, 0xf8, 0xf9, + 0x47, 0xd3, 0x2e, 0xd4, 0x89, 0x10, 0x47, 0x02, 0x4a, 0x12, 0x20, 0x97, 0xb2, 0xfc, 0xab, 0xe4, + 0xb1, 0xe5, 0x75, 0xa8, 0xa9, 0xad, 0x95, 0x3f, 0x57, 0xbd, 0x29, 0xd1, 0x03, 0x27, 0x9b, 0x21, + 0xab, 0xd9, 0x0c, 0xf9, 0x0a, 0x6c, 0x06, 0x68, 0xe6, 0x11, 0xe4, 0x58, 0xcc, 0xfd, 0x00, 0x8b, + 0x24, 0x5a, 0x32, 0xeb, 0x6a, 0x6d, 0xe8, 0x7e, 0xb0, 0x58, 0xb5, 0x60, 0x2d, 0xa6, 0xbe, 0x02, + 0x9b, 0x21, 0xb9, 0xc2, 0xb0, 0x10, 0xf5, 0xa5, 0x2e, 0x0c, 0x54, 0x57, 0x6b, 0xa2, 0x80, 0xa4, + 0x0a, 0xdb, 0x66, 0xa6, 0xb0, 0x45, 0x49, 0xb8, 0x71, 0x7a, 0x12, 0x96, 0x84, 0x48, 0x27, 0x61, + 0xfd, 0x7b, 0xd0, 0xa2, 0xd8, 0x99, 0xfa, 0x0e, 0xf2, 0xed, 0x99, 0xfc, 0xf1, 0xe6, 0xe9, 0x2a, + 0x98, 0x31, 0x54, 0xa8, 0xd0, 0xa4, 0xa9, 0xe7, 0xc5, 0x2a, 0xd9, 0xca, 0x5d, 0x25, 0x5f, 0x82, + 0x9a, 0x7d, 0x07, 0xdb, 0x77, 0xd9, 0x74, 0xc2, 0xda, 0x97, 0xbb, 0xc5, 0xbd, 0x4d, 0x73, 0xbe, + 0xa0, 0xbf, 0x01, 0x57, 0x3c, 0x62, 0x67, 0xc2, 0xd9, 0x75, 0xda, 0x5b, 0xc2, 0x73, 0x5f, 0x12, + 0xdf, 0x26, 0xc3, 0x78, 0xe0, 0x18, 0xff, 0xd1, 0xe0, 0x05, 0x19, 0x15, 0xc8, 0xb7, 0xb1, 0x97, + 0x8a, 0x8d, 0xa7, 0x94, 0x4c, 0x17, 0xd8, 0x5e, 0xcc, 0xb0, 0x3d, 0xc3, 0xbc, 0x52, 0x96, 0x79, + 0x29, 0x5e, 0x57, 0x72, 0xf0, 0xda, 0xf8, 0x69, 0x11, 0x5a, 0x42, 0xe3, 0x21, 0x46, 0xde, 0x39, + 0x6b, 0x9a, 0xd2, 0xa2, 0x9c, 0x27, 0x3a, 0xe7, 0x94, 0xae, 0xe4, 0xa4, 0xf4, 0xb7, 0xe0, 0x85, + 0xa5, 0x69, 0x3f, 0xce, 0xf7, 0xdb, 0xd9, 0x7c, 0x3f, 0x70, 0x1e, 0xc3, 0xae, 0xea, 0xa9, 0xec, + 0xd2, 0x5f, 0x06, 0x38, 0x22, 0xd4, 0x9a, 0x8a, 0x32, 0x2d, 0xb2, 0x43, 0xd5, 0xac, 0x1d, 0x11, + 0x2a, 0xeb, 0xb6, 0xf1, 0x51, 0xe4, 0x8a, 0x43, 0x12, 0xcc, 0x9e, 0xc8, 0x15, 0xaf, 0x42, 0x8b, + 0x51, 0xdb, 0xca, 0xba, 0xa3, 0xc1, 0xa8, 0x7d, 0x30, 0xf7, 0x88, 0xc2, 0x65, 0xbd, 0x12, 0xe2, + 0xde, 0x9d, 0x3b, 0xe6, 0x55, 0x68, 0x39, 0x8c, 0xa7, 0xf6, 0x93, 0x59, 0xb9, 0xe1, 0x30, 0x9e, + 0xde, 0x2f, 0xc4, 0x25, 0xf7, 0x2b, 0xc7, 0xb8, 0xc4, 0x7e, 0x37, 0xa0, 0x91, 0xf8, 0xdd, 0xb3, + 0x51, 0xb6, 0x1e, 0x8b, 0x24, 0x3a, 0xec, 0x46, 0xe2, 0x87, 0xce, 0x96, 0xcb, 0xeb, 0xb1, 0x0c, + 0x6b, 0xfa, 0xcf, 0xf8, 0x9f, 0x96, 0xea, 0x41, 0x2f, 0x52, 0xb4, 0x94, 0xf2, 0x44, 0xcb, 0xe9, + 0xca, 0x97, 0x4f, 0x57, 0xfe, 0x1f, 0x9a, 0xea, 0x32, 0x4d, 0x2c, 0xc2, 0xe8, 0x82, 0xa5, 0x8b, + 0x5c, 0x06, 0x48, 0x07, 0x62, 0x79, 0x31, 0x10, 0x97, 0xb5, 0x71, 0x4a, 0xd7, 0x05, 0xa9, 0xb5, + 0x65, 0xbd, 0xf1, 0x5c, 0xa8, 0x42, 0x1e, 0xa1, 0xd6, 0x6a, 0xe3, 0x7e, 0x56, 0x48, 0xf5, 0xfe, + 0x8a, 0xdf, 0x4f, 0xb1, 0xf7, 0x7f, 0x8a, 0x5e, 0x49, 0xf7, 0x46, 0xe5, 0x75, 0x7a, 0x23, 0xe3, + 0xbf, 0x1a, 0x5c, 0x4e, 0xb4, 0xb5, 0x82, 0xbc, 0xb9, 0x67, 0x0f, 0x2f, 0x03, 0xc8, 0x88, 0x48, + 0xd8, 0xa0, 0x26, 0x56, 0x84, 0x86, 0xdf, 0x86, 0x6a, 0x1c, 0x30, 0x67, 0x38, 0xfd, 0x6c, 0x8c, + 0x55, 0xfa, 0x5f, 0x68, 0x78, 0x4a, 0xb9, 0x1b, 0x9e, 0x6d, 0x28, 0xe3, 0x7b, 0x9c, 0x22, 0x95, + 0x54, 0xe5, 0x83, 0xf1, 0xab, 0x48, 0x65, 0x99, 0x95, 0x16, 0x54, 0x2e, 0xac, 0xa3, 0x72, 0xf1, + 0x71, 0x2a, 0x97, 0xce, 0xae, 0xb2, 0xf1, 0x67, 0x4d, 0x95, 0xb4, 0xef, 0x63, 0x74, 0xac, 0x44, + 0xbb, 0x01, 0xcd, 0x09, 0x9e, 0x8c, 0x30, 0x8d, 0x0f, 0x75, 0xab, 0xdc, 0xd2, 0x90, 0xf8, 0xe8, + 0xb4, 0x77, 0x41, 0x74, 0xfb, 0x77, 0x41, 0x65, 0x09, 0x19, 0x7a, 0x42, 0xb9, 0xb7, 0x85, 0xa0, + 0xcf, 0x68, 0x2c, 0xf1, 0x74, 0xf4, 0xd2, 0x6f, 0x45, 0xfe, 0x61, 0x16, 0x27, 0xa1, 0x8f, 0xda, + 0xe5, 0x6e, 0x71, 0xaf, 0x7e, 0xed, 0xf5, 0x65, 0x4c, 0x15, 0x06, 0x48, 0xa8, 0x7e, 0x13, 0x73, + 0xe4, 0x7a, 0xe6, 0xa6, 0xda, 0xe1, 0x36, 0xd9, 0x77, 0x1c, 0xfd, 0x26, 0x6c, 0x25, 0x76, 0x94, + 0xb9, 0xab, 0x5d, 0xe9, 0x16, 0x1f, 0xab, 0x64, 0x2b, 0xde, 0x42, 0xf2, 0xda, 0xf8, 0x6b, 0x21, + 0x2e, 0x40, 0x3e, 0x3e, 0xf9, 0xc2, 0x98, 0x7b, 0x21, 0x2b, 0x94, 0x73, 0x67, 0x85, 0x9b, 0xb0, + 0xa1, 0x4c, 0x25, 0x6c, 0x9a, 0xcf, 0x51, 0xd1, 0xab, 0xc6, 0x2f, 0xa2, 0x9a, 0x97, 0xc1, 0xe8, + 0xdf, 0x84, 0x8a, 0x44, 0xad, 0x34, 0xae, 0xc2, 0xe9, 0x03, 0x68, 0xe1, 0x7b, 0x81, 0x4b, 0x11, + 0x77, 0x89, 0x6f, 0x71, 0x57, 0x65, 0xd1, 0xfa, 0xb5, 0x9d, 0x9e, 0x9c, 0x4f, 0xf7, 0xa2, 0xf9, + 0x74, 0xef, 0x76, 0x34, 0x9f, 0x3e, 0x28, 0x7d, 0xf8, 0xb7, 0x5d, 0xcd, 0x6c, 0xce, 0x5f, 0x0c, + 0xbf, 0x32, 0xfe, 0xa5, 0xa5, 0x0a, 0x9c, 0x90, 0xee, 0xad, 0x30, 0xef, 0x3d, 0xdf, 0x5e, 0x5f, + 0x9e, 0xca, 0xef, 0x47, 0x0d, 0xe6, 0xdb, 0x2e, 0xa5, 0x84, 0x3e, 0xd1, 0x90, 0x33, 0xdf, 0x14, + 0x2f, 0xd7, 0xd0, 0xd2, 0x80, 0x86, 0x83, 0x19, 0xb7, 0xec, 0x3b, 0xc8, 0xf5, 0xe7, 0x6d, 0x63, + 0x3d, 0x5c, 0x3c, 0x0c, 0xd7, 0x06, 0x8e, 0xf1, 0xfb, 0xe8, 0x24, 0x9d, 0x54, 0xc5, 0xc4, 0x6c, + 0xea, 0xf1, 0xb0, 0xd3, 0x51, 0xa7, 0x35, 0x4d, 0xbc, 0x18, 0x9d, 0xc5, 0xce, 0x59, 0xe4, 0x7f, + 0xa6, 0xad, 0xff, 0xdc, 0x76, 0xb7, 0x67, 0xd1, 0xf5, 0xd3, 0xb4, 0x7b, 0xa4, 0xae, 0x4f, 0xea, + 0x9e, 0x73, 0xd6, 0xe9, 0x0f, 0x51, 0x23, 0x24, 0x75, 0xba, 0x50, 0xbd, 0x5f, 0x46, 0xfe, 0x52, + 0x56, 0xfe, 0xdf, 0x46, 0x29, 0x38, 0x21, 0xff, 0x0a, 0x97, 0x9c, 0xa3, 0xb4, 0xc7, 0x8a, 0x40, + 0x43, 0x8e, 0x3c, 0x7c, 0x8b, 0x78, 0xae, 0x3d, 0x3b, 0xf4, 0x30, 0xf2, 0xa7, 0x81, 0xbe, 0x03, + 0xd5, 0x91, 0x47, 0xec, 0xbb, 0xef, 0x4c, 0x27, 0x42, 0xde, 0xa2, 0x19, 0x3f, 0x87, 0xe5, 0x4e, + 0x9d, 0x66, 0x5c, 0xff, 0x88, 0xa8, 0xb2, 0xb0, 0xb4, 0xdc, 0xc9, 0xb2, 0x1f, 0x9e, 0x65, 0x4c, + 0x70, 0xe2, 0xcf, 0xc6, 0x03, 0x0d, 0xb6, 0x95, 0x95, 0xc6, 0xb2, 0x4e, 0x3c, 0xc3, 0x34, 0x99, + 0xeb, 0xb2, 0xe3, 0x35, 0xd8, 0x72, 0x18, 0xb7, 0x96, 0x0d, 0xef, 0x9a, 0x0e, 0xe3, 0xb7, 0xe6, + 0xf3, 0x3b, 0xe3, 0x77, 0x1a, 0xec, 0x24, 0xe6, 0x8e, 0x17, 0x5d, 0xb5, 0x90, 0xaa, 0xed, 0xc4, + 0x30, 0x40, 0xca, 0x8b, 0x2f, 0xaa, 0xb4, 0x1f, 0x15, 0xe0, 0x25, 0x35, 0x58, 0x9b, 0x04, 0x21, + 0x91, 0x2e, 0x3c, 0x75, 0x56, 0x5f, 0x46, 0x95, 0x56, 0xde, 0xb5, 0xbe, 0x06, 0x5b, 0x8c, 0xda, + 0x0b, 0xf4, 0x93, 0x69, 0xb3, 0xc9, 0xa8, 0x9d, 0xa4, 0x9f, 0x05, 0x75, 0x35, 0x03, 0xe6, 0xb7, + 0xd1, 0x38, 0x8c, 0xdf, 0xe8, 0xaf, 0x01, 0x6a, 0xc2, 0x11, 0x3f, 0xeb, 0x6f, 0x42, 0x89, 0xa3, + 0x31, 0x53, 0x81, 0xdb, 0x5d, 0x3e, 0xf7, 0x57, 0xdd, 0x29, 0x1a, 0x33, 0x53, 0xa0, 0x8d, 0x5f, + 0x17, 0x14, 0x5f, 0x92, 0x63, 0x8a, 0x43, 0x79, 0x61, 0xb1, 0xa6, 0xf5, 0xd7, 0x1f, 0xb4, 0x3c, + 0xf9, 0x05, 0xd4, 0xe2, 0x45, 0x4f, 0x39, 0x7b, 0xd1, 0x93, 0xba, 0x9c, 0xa8, 0x2c, 0x5e, 0x4e, + 0xb4, 0x61, 0xe3, 0x18, 0x53, 0xe6, 0x12, 0x5f, 0x4c, 0x2e, 0x8b, 0x66, 0xf4, 0x68, 0x7c, 0x5a, + 0x84, 0xdd, 0xd3, 0x2c, 0x35, 0x9c, 0xda, 0x76, 0x78, 0x00, 0x7e, 0x2e, 0x0d, 0x96, 0xba, 0xb2, + 0x2a, 0x67, 0xaf, 0xac, 0x5e, 0x87, 0xad, 0x80, 0xe2, 0x63, 0x2b, 0x65, 0xd8, 0x8a, 0x30, 0x6c, + 0x2b, 0xfc, 0xe2, 0x56, 0xc2, 0xb8, 0x7b, 0x70, 0xd9, 0xc7, 0x27, 0x69, 0xa8, 0xfc, 0x77, 0x44, + 0xd3, 0xc7, 0x27, 0x49, 0xe4, 0xd7, 0xa0, 0x29, 0x76, 0x9d, 0xfb, 0xa2, 0x2a, 0x7c, 0xd1, 0x08, + 0x57, 0x0f, 0x63, 0x7f, 0x7c, 0x15, 0x1a, 0xe1, 0x86, 0x73, 0x54, 0x4d, 0xa0, 0x36, 0x7d, 0x7c, + 0x72, 0xb8, 0xcc, 0x69, 0x90, 0x72, 0x5a, 0x58, 0x86, 0xe5, 0x2c, 0xd1, 0xb1, 0x10, 0x17, 0xf7, + 0x71, 0x45, 0xb3, 0xa6, 0x56, 0xf6, 0x79, 0x58, 0xb2, 0x3a, 0x89, 0xec, 0xfe, 0xf9, 0xc5, 0xc0, + 0x39, 0x76, 0x64, 0x07, 0x83, 0xfb, 0x0f, 0x3b, 0xda, 0x27, 0x0f, 0x3b, 0xda, 0xdf, 0x1f, 0x76, + 0xb4, 0x0f, 0x1f, 0x75, 0x2e, 0x7d, 0xf2, 0xa8, 0x73, 0xe9, 0x4f, 0x8f, 0x3a, 0x97, 0x7e, 0xd8, + 0x1f, 0xbb, 0xfc, 0xce, 0x74, 0xd4, 0xb3, 0xc9, 0xa4, 0x3f, 0xf2, 0x47, 0x57, 0x45, 0x17, 0xd1, + 0x4f, 0xfc, 0x6b, 0xe8, 0x5e, 0xfa, 0x7f, 0x43, 0xa3, 0x8a, 0x38, 0x0d, 0xbe, 0xf1, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xd2, 0x98, 0xb8, 0xc6, 0x23, 0x25, 0x00, 0x00, } func (m *EventCreateBucket) Marshal() (dAtA []byte, err error) { @@ -2999,6 +3316,16 @@ func (m *EventSealObject) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ForUpdate { + i-- + if m.ForUpdate { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x48 + } if m.LocalVirtualGroupId != 0 { i = encodeVarintEvents(dAtA, i, uint64(m.LocalVirtualGroupId)) i-- @@ -3210,6 +3537,16 @@ func (m *EventRejectSealObject) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ForUpdate { + i-- + if m.ForUpdate { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + } { size := m.ObjectId.Size() i -= size @@ -4371,36 +4708,262 @@ func (m *EventSetTag) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func encodeVarintEvents(dAtA []byte, offset int, v uint64) int { - offset -= sovEvents(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ +func (m *EventUpdateObjectContent) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - dAtA[offset] = uint8(v) - return base + return dAtA[:n], nil } -func (m *EventCreateBucket) Size() (n int) { - if m == nil { - return 0 - } + +func (m *EventUpdateObjectContent) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventUpdateObjectContent) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Owner) - if l > 0 { - n += 1 + l + sovEvents(uint64(l)) + if m.Version != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.Version)) + i-- + dAtA[i] = 0x38 } - l = len(m.BucketName) - if l > 0 { - n += 1 + l + sovEvents(uint64(l)) + if len(m.Checksums) > 0 { + for iNdEx := len(m.Checksums) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Checksums[iNdEx]) + copy(dAtA[i:], m.Checksums[iNdEx]) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Checksums[iNdEx]))) + i-- + dAtA[i] = 0x32 + } } - if m.Visibility != 0 { - n += 1 + sovEvents(uint64(m.Visibility)) + if m.PayloadSize != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.PayloadSize)) + i-- + dAtA[i] = 0x28 } - if m.CreateAt != 0 { - n += 1 + sovEvents(uint64(m.CreateAt)) + if len(m.ObjectName) > 0 { + i -= len(m.ObjectName) + copy(dAtA[i:], m.ObjectName) + i = encodeVarintEvents(dAtA, i, uint64(len(m.ObjectName))) + i-- + dAtA[i] = 0x22 + } + if len(m.BucketName) > 0 { + i -= len(m.BucketName) + copy(dAtA[i:], m.BucketName) + i = encodeVarintEvents(dAtA, i, uint64(len(m.BucketName))) + i-- + dAtA[i] = 0x1a + } + { + size := m.ObjectId.Size() + i -= size + if _, err := m.ObjectId.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Operator) > 0 { + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Operator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *EventUpdateObjectContentSuccess) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EventUpdateObjectContentSuccess) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventUpdateObjectContentSuccess) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.UpdatedAt != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.UpdatedAt)) + i-- + dAtA[i] = 0x58 + } + if m.Version != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.Version)) + i-- + dAtA[i] = 0x50 + } + if len(m.NewChecksums) > 0 { + for iNdEx := len(m.NewChecksums) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.NewChecksums[iNdEx]) + copy(dAtA[i:], m.NewChecksums[iNdEx]) + i = encodeVarintEvents(dAtA, i, uint64(len(m.NewChecksums[iNdEx]))) + i-- + dAtA[i] = 0x4a + } + } + if len(m.PrevChecksums) > 0 { + for iNdEx := len(m.PrevChecksums) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.PrevChecksums[iNdEx]) + copy(dAtA[i:], m.PrevChecksums[iNdEx]) + i = encodeVarintEvents(dAtA, i, uint64(len(m.PrevChecksums[iNdEx]))) + i-- + dAtA[i] = 0x42 + } + } + if m.NewPayloadSize != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.NewPayloadSize)) + i-- + dAtA[i] = 0x38 + } + if m.PrevPayloadSize != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.PrevPayloadSize)) + i-- + dAtA[i] = 0x30 + } + if len(m.ContentType) > 0 { + i -= len(m.ContentType) + copy(dAtA[i:], m.ContentType) + i = encodeVarintEvents(dAtA, i, uint64(len(m.ContentType))) + i-- + dAtA[i] = 0x2a + } + if len(m.ObjectName) > 0 { + i -= len(m.ObjectName) + copy(dAtA[i:], m.ObjectName) + i = encodeVarintEvents(dAtA, i, uint64(len(m.ObjectName))) + i-- + dAtA[i] = 0x22 + } + if len(m.BucketName) > 0 { + i -= len(m.BucketName) + copy(dAtA[i:], m.BucketName) + i = encodeVarintEvents(dAtA, i, uint64(len(m.BucketName))) + i-- + dAtA[i] = 0x1a + } + { + size := m.ObjectId.Size() + i -= size + if _, err := m.ObjectId.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Operator) > 0 { + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Operator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *EventCancelUpdateObjectContent) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EventCancelUpdateObjectContent) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventCancelUpdateObjectContent) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.ObjectId.Size() + i -= size + if _, err := m.ObjectId.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.ObjectName) > 0 { + i -= len(m.ObjectName) + copy(dAtA[i:], m.ObjectName) + i = encodeVarintEvents(dAtA, i, uint64(len(m.ObjectName))) + i-- + dAtA[i] = 0x1a + } + if len(m.BucketName) > 0 { + i -= len(m.BucketName) + copy(dAtA[i:], m.BucketName) + i = encodeVarintEvents(dAtA, i, uint64(len(m.BucketName))) + i-- + dAtA[i] = 0x12 + } + if len(m.Operator) > 0 { + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Operator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintEvents(dAtA []byte, offset int, v uint64) int { + offset -= sovEvents(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *EventCreateBucket) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.BucketName) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + if m.Visibility != 0 { + n += 1 + sovEvents(uint64(m.Visibility)) + } + if m.CreateAt != 0 { + n += 1 + sovEvents(uint64(m.CreateAt)) } l = m.BucketId.Size() n += 1 + l + sovEvents(uint64(l)) @@ -4624,6 +5187,9 @@ func (m *EventSealObject) Size() (n int) { if m.LocalVirtualGroupId != 0 { n += 1 + sovEvents(uint64(m.LocalVirtualGroupId)) } + if m.ForUpdate { + n += 2 + } return n } @@ -4709,6 +5275,9 @@ func (m *EventRejectSealObject) Size() (n int) { } l = m.ObjectId.Size() n += 1 + l + sovEvents(uint64(l)) + if m.ForUpdate { + n += 2 + } return n } @@ -5194,50 +5763,159 @@ func (m *EventSetTag) Size() (n int) { return n } -func sovEvents(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozEvents(x uint64) (n int) { - return sovEvents(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *EventCreateBucket) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: EventCreateBucket: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: EventCreateBucket: illegal tag %d (wire type %d)", fieldNum, wire) +func (m *EventUpdateObjectContent) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Operator) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = m.ObjectId.Size() + n += 1 + l + sovEvents(uint64(l)) + l = len(m.BucketName) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.ObjectName) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + if m.PayloadSize != 0 { + n += 1 + sovEvents(uint64(m.PayloadSize)) + } + if len(m.Checksums) > 0 { + for _, b := range m.Checksums { + l = len(b) + n += 1 + l + sovEvents(uint64(l)) } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } + } + if m.Version != 0 { + n += 1 + sovEvents(uint64(m.Version)) + } + return n +} + +func (m *EventUpdateObjectContentSuccess) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Operator) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = m.ObjectId.Size() + n += 1 + l + sovEvents(uint64(l)) + l = len(m.BucketName) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.ObjectName) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.ContentType) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + if m.PrevPayloadSize != 0 { + n += 1 + sovEvents(uint64(m.PrevPayloadSize)) + } + if m.NewPayloadSize != 0 { + n += 1 + sovEvents(uint64(m.NewPayloadSize)) + } + if len(m.PrevChecksums) > 0 { + for _, b := range m.PrevChecksums { + l = len(b) + n += 1 + l + sovEvents(uint64(l)) + } + } + if len(m.NewChecksums) > 0 { + for _, b := range m.NewChecksums { + l = len(b) + n += 1 + l + sovEvents(uint64(l)) + } + } + if m.Version != 0 { + n += 1 + sovEvents(uint64(m.Version)) + } + if m.UpdatedAt != 0 { + n += 1 + sovEvents(uint64(m.UpdatedAt)) + } + return n +} + +func (m *EventCancelUpdateObjectContent) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Operator) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.BucketName) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.ObjectName) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = m.ObjectId.Size() + n += 1 + l + sovEvents(uint64(l)) + return n +} + +func sovEvents(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozEvents(x uint64) (n int) { + return sovEvents(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *EventCreateBucket) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EventCreateBucket: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventCreateBucket: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } if iNdEx >= l { return io.ErrUnexpectedEOF } @@ -6993,6 +7671,26 @@ func (m *EventSealObject) Unmarshal(dAtA []byte) error { break } } + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ForUpdate", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ForUpdate = bool(v != 0) default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) @@ -7669,6 +8367,26 @@ func (m *EventRejectSealObject) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ForUpdate", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ForUpdate = bool(v != 0) default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) @@ -11291,6 +12009,788 @@ func (m *EventSetTag) Unmarshal(dAtA []byte) error { } return nil } +func (m *EventUpdateObjectContent) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EventUpdateObjectContent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventUpdateObjectContent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BucketName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BucketName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ObjectName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PayloadSize", wireType) + } + m.PayloadSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PayloadSize |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Checksums", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Checksums = append(m.Checksums, make([]byte, postIndex-iNdEx)) + copy(m.Checksums[len(m.Checksums)-1], dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + m.Version = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Version |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EventUpdateObjectContentSuccess) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EventUpdateObjectContentSuccess: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventUpdateObjectContentSuccess: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BucketName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BucketName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ObjectName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContentType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContentType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PrevPayloadSize", wireType) + } + m.PrevPayloadSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PrevPayloadSize |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NewPayloadSize", wireType) + } + m.NewPayloadSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NewPayloadSize |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PrevChecksums", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PrevChecksums = append(m.PrevChecksums, make([]byte, postIndex-iNdEx)) + copy(m.PrevChecksums[len(m.PrevChecksums)-1], dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewChecksums", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NewChecksums = append(m.NewChecksums, make([]byte, postIndex-iNdEx)) + copy(m.NewChecksums[len(m.NewChecksums)-1], dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + m.Version = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Version |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdatedAt", wireType) + } + m.UpdatedAt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UpdatedAt |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EventCancelUpdateObjectContent) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EventCancelUpdateObjectContent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventCancelUpdateObjectContent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BucketName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BucketName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ObjectName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipEvents(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/storage/types/keys.go b/x/storage/types/keys.go index 0c03063cf..b8af13f31 100644 --- a/x/storage/types/keys.go +++ b/x/storage/types/keys.go @@ -38,10 +38,14 @@ var ( QuotaPrefix = []byte{0x14} InternalBucketInfoPrefix = []byte{0x15} + ShadowObjectInfoPrefix = []byte{0x16} + BucketByIDPrefix = []byte{0x21} ObjectByIDPrefix = []byte{0x22} GroupByIDPrefix = []byte{0x23} + ShadowObjectByIDPrefix = []byte{0x24} + BucketSequencePrefix = []byte{0x31} ObjectSequencePrefix = []byte{0x32} GroupSequencePrefix = []byte{0x33} @@ -78,6 +82,13 @@ func GetObjectKeyOnlyBucketPrefix(bucketName string) []byte { return append(ObjectInfoPrefix, sdk.Keccak256([]byte(bucketName))...) } +// GetShadowObjectKey return the shadow object name store key +func GetShadowObjectKey(bucketName string, objectName string) []byte { + bucketNameHash := sdk.Keccak256([]byte(bucketName)) + objectNameHash := sdk.Keccak256([]byte(objectName)) + return append(ShadowObjectInfoPrefix, append(bucketNameHash, objectNameHash...)...) +} + // GetGroupKey return the group name store key func GetGroupKey(owner sdk.AccAddress, groupName string) []byte { groupNameHash := sdk.Keccak256([]byte(groupName)) @@ -101,6 +112,12 @@ func GetObjectByIDKey(objectId math.Uint) []byte { return append(ObjectByIDPrefix, seq.EncodeSequence(objectId)...) } +// GetShadowObjectByIDKey return the shadowObjectId store key +func GetShadowObjectByIDKey(objectId math.Uint) []byte { + var seq sequence.Sequence[math.Uint] + return append(ShadowObjectByIDPrefix, seq.EncodeSequence(objectId)...) +} + // GetGroupByIDKey return the groupId store key func GetGroupByIDKey(groupId math.Uint) []byte { var seq sequence.Sequence[math.Uint] diff --git a/x/storage/types/message.go b/x/storage/types/message.go index cd3ac3a3d..ab6957e85 100644 --- a/x/storage/types/message.go +++ b/x/storage/types/message.go @@ -27,16 +27,18 @@ const ( TypeMsgMirrorBucket = "mirror_bucket" // For object - TypeMsgCopyObject = "copy_object" - TypeMsgCreateObject = "create_object" - TypeMsgDeleteObject = "delete_object" - TypeMsgSealObject = "seal_object" - TypeMsgRejectSealObject = "reject_seal_object" - TypeMsgCancelCreateObject = "cancel_create_object" - TypeMsgMirrorObject = "mirror_object" - TypeMsgDiscontinueObject = "discontinue_object" - TypeMsgDiscontinueBucket = "discontinue_bucket" - TypeMsgUpdateObjectInfo = "update_object_info" + TypeMsgCopyObject = "copy_object" + TypeMsgCreateObject = "create_object" + TypeMsgDeleteObject = "delete_object" + TypeMsgSealObject = "seal_object" + TypeMsgRejectSealObject = "reject_seal_object" + TypeMsgCancelCreateObject = "cancel_create_object" + TypeMsgMirrorObject = "mirror_object" + TypeMsgDiscontinueObject = "discontinue_object" + TypeMsgDiscontinueBucket = "discontinue_bucket" + TypeMsgUpdateObjectInfo = "update_object_info" + TypeMsgUpdateObjectContent = "update_object_content" + TypeMsgCancelUpdateObjectContent = "cancel_update_object_content" // For group TypeMsgCreateGroup = "create_group" @@ -1605,3 +1607,116 @@ func (msg *MsgSetTag) ValidateBasic() error { return nil } + +func NewMsgUpdateObjectContent( + operator sdk.AccAddress, bucketName, objectName string, payloadSize uint64, + expectChecksums [][]byte) *MsgUpdateObjectContent { + return &MsgUpdateObjectContent{ + Operator: operator.String(), + BucketName: bucketName, + ObjectName: objectName, + PayloadSize: payloadSize, + ExpectChecksums: expectChecksums, + } +} + +// Route implements the sdk.Msg interface. +func (msg *MsgUpdateObjectContent) Route() string { + return RouterKey +} + +// Type implements the sdk.Msg interface. +func (msg *MsgUpdateObjectContent) Type() string { + return TypeMsgUpdateObjectContent +} + +// GetSigners implements the sdk.Msg interface. +func (msg *MsgUpdateObjectContent) GetSigners() []sdk.AccAddress { + operator, err := sdk.AccAddressFromHexUnsafe(msg.Operator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{operator} +} + +// GetSignBytes returns the message bytes to sign over. +func (msg *MsgUpdateObjectContent) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(msg) + return sdk.MustSortJSON(bz) +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg *MsgUpdateObjectContent) ValidateBasic() error { + _, err := sdk.AccAddressFromHexUnsafe(msg.Operator) + if err != nil { + return errors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + err = s3util.CheckValidBucketName(msg.BucketName) + if err != nil { + return err + } + + err = s3util.CheckValidObjectName(msg.ObjectName) + if err != nil { + return err + } + + err = s3util.CheckValidExpectChecksums(msg.ExpectChecksums) + if err != nil { + return err + } + + return nil +} + +func NewMsgCancelUpdateObjectContent( + operator sdk.AccAddress, bucketName, objectName string) *MsgCancelUpdateObjectContent { + return &MsgCancelUpdateObjectContent{ + Operator: operator.String(), + BucketName: bucketName, + ObjectName: objectName, + } +} + +// Route implements the sdk.Msg interface. +func (msg *MsgCancelUpdateObjectContent) Route() string { + return RouterKey +} + +// Type implements the sdk.Msg interface. +func (msg *MsgCancelUpdateObjectContent) Type() string { + return TypeMsgCancelUpdateObjectContent +} + +// GetSigners implements the sdk.Msg interface. +func (msg *MsgCancelUpdateObjectContent) GetSigners() []sdk.AccAddress { + operator, err := sdk.AccAddressFromHexUnsafe(msg.Operator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{operator} +} + +// GetSignBytes returns the message bytes to sign over. +func (msg *MsgCancelUpdateObjectContent) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(msg) + return sdk.MustSortJSON(bz) +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg *MsgCancelUpdateObjectContent) ValidateBasic() error { + _, err := sdk.AccAddressFromHexUnsafe(msg.Operator) + if err != nil { + return errors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid operator address (%s)", err) + } + err = s3util.CheckValidBucketName(msg.BucketName) + if err != nil { + return err + } + + err = s3util.CheckValidObjectName(msg.ObjectName) + if err != nil { + return err + } + return nil +} diff --git a/x/storage/types/options.go b/x/storage/types/options.go index 21138d4a9..2ecb6cb5f 100644 --- a/x/storage/types/options.go +++ b/x/storage/types/options.go @@ -86,3 +86,9 @@ type CreatePolicyOptions struct { type DeletePolicyOptions struct { SourceType SourceType } + +type UpdateObjectOptions struct { + SourceType SourceType + ContentType string + Checksums [][]byte +} diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index 1ade76fc7..403655a3a 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -437,6 +437,58 @@ func (m *QueryHeadObjectByIdRequest) GetObjectId() string { return "" } +type QueryHeadShadowObjectRequest struct { + BucketName string `protobuf:"bytes,1,opt,name=bucket_name,json=bucketName,proto3" json:"bucket_name,omitempty"` + ObjectName string `protobuf:"bytes,2,opt,name=object_name,json=objectName,proto3" json:"object_name,omitempty"` +} + +func (m *QueryHeadShadowObjectRequest) Reset() { *m = QueryHeadShadowObjectRequest{} } +func (m *QueryHeadShadowObjectRequest) String() string { return proto.CompactTextString(m) } +func (*QueryHeadShadowObjectRequest) ProtoMessage() {} +func (*QueryHeadShadowObjectRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b1b80b580af04cb0, []int{9} +} +func (m *QueryHeadShadowObjectRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryHeadShadowObjectRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryHeadShadowObjectRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryHeadShadowObjectRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryHeadShadowObjectRequest.Merge(m, src) +} +func (m *QueryHeadShadowObjectRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryHeadShadowObjectRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryHeadShadowObjectRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryHeadShadowObjectRequest proto.InternalMessageInfo + +func (m *QueryHeadShadowObjectRequest) GetBucketName() string { + if m != nil { + return m.BucketName + } + return "" +} + +func (m *QueryHeadShadowObjectRequest) GetObjectName() string { + if m != nil { + return m.ObjectName + } + return "" +} + type QueryHeadObjectResponse struct { ObjectInfo *ObjectInfo `protobuf:"bytes,1,opt,name=object_info,json=objectInfo,proto3" json:"object_info,omitempty"` GlobalVirtualGroup *types.GlobalVirtualGroup `protobuf:"bytes,2,opt,name=global_virtual_group,json=globalVirtualGroup,proto3" json:"global_virtual_group,omitempty"` @@ -446,7 +498,7 @@ func (m *QueryHeadObjectResponse) Reset() { *m = QueryHeadObjectResponse func (m *QueryHeadObjectResponse) String() string { return proto.CompactTextString(m) } func (*QueryHeadObjectResponse) ProtoMessage() {} func (*QueryHeadObjectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{9} + return fileDescriptor_b1b80b580af04cb0, []int{10} } func (m *QueryHeadObjectResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -489,6 +541,50 @@ func (m *QueryHeadObjectResponse) GetGlobalVirtualGroup() *types.GlobalVirtualGr return nil } +type QueryHeadShadowObjectResponse struct { + ObjectInfo *ShadowObjectInfo `protobuf:"bytes,1,opt,name=object_info,json=objectInfo,proto3" json:"object_info,omitempty"` +} + +func (m *QueryHeadShadowObjectResponse) Reset() { *m = QueryHeadShadowObjectResponse{} } +func (m *QueryHeadShadowObjectResponse) String() string { return proto.CompactTextString(m) } +func (*QueryHeadShadowObjectResponse) ProtoMessage() {} +func (*QueryHeadShadowObjectResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b1b80b580af04cb0, []int{11} +} +func (m *QueryHeadShadowObjectResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryHeadShadowObjectResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryHeadShadowObjectResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryHeadShadowObjectResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryHeadShadowObjectResponse.Merge(m, src) +} +func (m *QueryHeadShadowObjectResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryHeadShadowObjectResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryHeadShadowObjectResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryHeadShadowObjectResponse proto.InternalMessageInfo + +func (m *QueryHeadShadowObjectResponse) GetObjectInfo() *ShadowObjectInfo { + if m != nil { + return m.ObjectInfo + } + return nil +} + type QueryListBucketsRequest struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } @@ -497,7 +593,7 @@ func (m *QueryListBucketsRequest) Reset() { *m = QueryListBucketsRequest func (m *QueryListBucketsRequest) String() string { return proto.CompactTextString(m) } func (*QueryListBucketsRequest) ProtoMessage() {} func (*QueryListBucketsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{10} + return fileDescriptor_b1b80b580af04cb0, []int{12} } func (m *QueryListBucketsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -542,7 +638,7 @@ func (m *QueryListBucketsResponse) Reset() { *m = QueryListBucketsRespon func (m *QueryListBucketsResponse) String() string { return proto.CompactTextString(m) } func (*QueryListBucketsResponse) ProtoMessage() {} func (*QueryListBucketsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{11} + return fileDescriptor_b1b80b580af04cb0, []int{13} } func (m *QueryListBucketsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -594,7 +690,7 @@ func (m *QueryListObjectsRequest) Reset() { *m = QueryListObjectsRequest func (m *QueryListObjectsRequest) String() string { return proto.CompactTextString(m) } func (*QueryListObjectsRequest) ProtoMessage() {} func (*QueryListObjectsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{12} + return fileDescriptor_b1b80b580af04cb0, []int{14} } func (m *QueryListObjectsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -646,7 +742,7 @@ func (m *QueryListObjectsByBucketIdRequest) Reset() { *m = QueryListObje func (m *QueryListObjectsByBucketIdRequest) String() string { return proto.CompactTextString(m) } func (*QueryListObjectsByBucketIdRequest) ProtoMessage() {} func (*QueryListObjectsByBucketIdRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{13} + return fileDescriptor_b1b80b580af04cb0, []int{15} } func (m *QueryListObjectsByBucketIdRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -698,7 +794,7 @@ func (m *QueryListObjectsResponse) Reset() { *m = QueryListObjectsRespon func (m *QueryListObjectsResponse) String() string { return proto.CompactTextString(m) } func (*QueryListObjectsResponse) ProtoMessage() {} func (*QueryListObjectsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{14} + return fileDescriptor_b1b80b580af04cb0, []int{16} } func (m *QueryListObjectsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -749,7 +845,7 @@ func (m *QueryNFTRequest) Reset() { *m = QueryNFTRequest{} } func (m *QueryNFTRequest) String() string { return proto.CompactTextString(m) } func (*QueryNFTRequest) ProtoMessage() {} func (*QueryNFTRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{15} + return fileDescriptor_b1b80b580af04cb0, []int{17} } func (m *QueryNFTRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -793,7 +889,7 @@ func (m *QueryBucketNFTResponse) Reset() { *m = QueryBucketNFTResponse{} func (m *QueryBucketNFTResponse) String() string { return proto.CompactTextString(m) } func (*QueryBucketNFTResponse) ProtoMessage() {} func (*QueryBucketNFTResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{16} + return fileDescriptor_b1b80b580af04cb0, []int{18} } func (m *QueryBucketNFTResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -837,7 +933,7 @@ func (m *QueryObjectNFTResponse) Reset() { *m = QueryObjectNFTResponse{} func (m *QueryObjectNFTResponse) String() string { return proto.CompactTextString(m) } func (*QueryObjectNFTResponse) ProtoMessage() {} func (*QueryObjectNFTResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{17} + return fileDescriptor_b1b80b580af04cb0, []int{19} } func (m *QueryObjectNFTResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -881,7 +977,7 @@ func (m *QueryGroupNFTResponse) Reset() { *m = QueryGroupNFTResponse{} } func (m *QueryGroupNFTResponse) String() string { return proto.CompactTextString(m) } func (*QueryGroupNFTResponse) ProtoMessage() {} func (*QueryGroupNFTResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{18} + return fileDescriptor_b1b80b580af04cb0, []int{20} } func (m *QueryGroupNFTResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -926,7 +1022,7 @@ func (m *QueryPolicyForAccountRequest) Reset() { *m = QueryPolicyForAcco func (m *QueryPolicyForAccountRequest) String() string { return proto.CompactTextString(m) } func (*QueryPolicyForAccountRequest) ProtoMessage() {} func (*QueryPolicyForAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{19} + return fileDescriptor_b1b80b580af04cb0, []int{21} } func (m *QueryPolicyForAccountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -977,7 +1073,7 @@ func (m *QueryPolicyForAccountResponse) Reset() { *m = QueryPolicyForAcc func (m *QueryPolicyForAccountResponse) String() string { return proto.CompactTextString(m) } func (*QueryPolicyForAccountResponse) ProtoMessage() {} func (*QueryPolicyForAccountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{20} + return fileDescriptor_b1b80b580af04cb0, []int{22} } func (m *QueryPolicyForAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1024,7 +1120,7 @@ func (m *QueryVerifyPermissionRequest) Reset() { *m = QueryVerifyPermiss func (m *QueryVerifyPermissionRequest) String() string { return proto.CompactTextString(m) } func (*QueryVerifyPermissionRequest) ProtoMessage() {} func (*QueryVerifyPermissionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{21} + return fileDescriptor_b1b80b580af04cb0, []int{23} } func (m *QueryVerifyPermissionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1089,7 +1185,7 @@ func (m *QueryVerifyPermissionResponse) Reset() { *m = QueryVerifyPermis func (m *QueryVerifyPermissionResponse) String() string { return proto.CompactTextString(m) } func (*QueryVerifyPermissionResponse) ProtoMessage() {} func (*QueryVerifyPermissionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{22} + return fileDescriptor_b1b80b580af04cb0, []int{24} } func (m *QueryVerifyPermissionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1134,7 +1230,7 @@ func (m *QueryHeadGroupRequest) Reset() { *m = QueryHeadGroupRequest{} } func (m *QueryHeadGroupRequest) String() string { return proto.CompactTextString(m) } func (*QueryHeadGroupRequest) ProtoMessage() {} func (*QueryHeadGroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{23} + return fileDescriptor_b1b80b580af04cb0, []int{25} } func (m *QueryHeadGroupRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1185,7 +1281,7 @@ func (m *QueryHeadGroupResponse) Reset() { *m = QueryHeadGroupResponse{} func (m *QueryHeadGroupResponse) String() string { return proto.CompactTextString(m) } func (*QueryHeadGroupResponse) ProtoMessage() {} func (*QueryHeadGroupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{24} + return fileDescriptor_b1b80b580af04cb0, []int{26} } func (m *QueryHeadGroupResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1230,7 +1326,7 @@ func (m *QueryListGroupsRequest) Reset() { *m = QueryListGroupsRequest{} func (m *QueryListGroupsRequest) String() string { return proto.CompactTextString(m) } func (*QueryListGroupsRequest) ProtoMessage() {} func (*QueryListGroupsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{25} + return fileDescriptor_b1b80b580af04cb0, []int{27} } func (m *QueryListGroupsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1282,7 +1378,7 @@ func (m *QueryListGroupsResponse) Reset() { *m = QueryListGroupsResponse func (m *QueryListGroupsResponse) String() string { return proto.CompactTextString(m) } func (*QueryListGroupsResponse) ProtoMessage() {} func (*QueryListGroupsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{26} + return fileDescriptor_b1b80b580af04cb0, []int{28} } func (m *QueryListGroupsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1335,7 +1431,7 @@ func (m *QueryHeadGroupMemberRequest) Reset() { *m = QueryHeadGroupMembe func (m *QueryHeadGroupMemberRequest) String() string { return proto.CompactTextString(m) } func (*QueryHeadGroupMemberRequest) ProtoMessage() {} func (*QueryHeadGroupMemberRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{27} + return fileDescriptor_b1b80b580af04cb0, []int{29} } func (m *QueryHeadGroupMemberRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1393,7 +1489,7 @@ func (m *QueryHeadGroupMemberResponse) Reset() { *m = QueryHeadGroupMemb func (m *QueryHeadGroupMemberResponse) String() string { return proto.CompactTextString(m) } func (*QueryHeadGroupMemberResponse) ProtoMessage() {} func (*QueryHeadGroupMemberResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{28} + return fileDescriptor_b1b80b580af04cb0, []int{30} } func (m *QueryHeadGroupMemberResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1438,7 +1534,7 @@ func (m *QueryPolicyForGroupRequest) Reset() { *m = QueryPolicyForGroupR func (m *QueryPolicyForGroupRequest) String() string { return proto.CompactTextString(m) } func (*QueryPolicyForGroupRequest) ProtoMessage() {} func (*QueryPolicyForGroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{29} + return fileDescriptor_b1b80b580af04cb0, []int{31} } func (m *QueryPolicyForGroupRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1489,7 +1585,7 @@ func (m *QueryPolicyForGroupResponse) Reset() { *m = QueryPolicyForGroup func (m *QueryPolicyForGroupResponse) String() string { return proto.CompactTextString(m) } func (*QueryPolicyForGroupResponse) ProtoMessage() {} func (*QueryPolicyForGroupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{30} + return fileDescriptor_b1b80b580af04cb0, []int{32} } func (m *QueryPolicyForGroupResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1533,7 +1629,7 @@ func (m *QueryPolicyByIdRequest) Reset() { *m = QueryPolicyByIdRequest{} func (m *QueryPolicyByIdRequest) String() string { return proto.CompactTextString(m) } func (*QueryPolicyByIdRequest) ProtoMessage() {} func (*QueryPolicyByIdRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{31} + return fileDescriptor_b1b80b580af04cb0, []int{33} } func (m *QueryPolicyByIdRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1577,7 +1673,7 @@ func (m *QueryPolicyByIdResponse) Reset() { *m = QueryPolicyByIdResponse func (m *QueryPolicyByIdResponse) String() string { return proto.CompactTextString(m) } func (*QueryPolicyByIdResponse) ProtoMessage() {} func (*QueryPolicyByIdResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{32} + return fileDescriptor_b1b80b580af04cb0, []int{34} } func (m *QueryPolicyByIdResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1626,7 +1722,7 @@ func (m *QueryLockFeeRequest) Reset() { *m = QueryLockFeeRequest{} } func (m *QueryLockFeeRequest) String() string { return proto.CompactTextString(m) } func (*QueryLockFeeRequest) ProtoMessage() {} func (*QueryLockFeeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{33} + return fileDescriptor_b1b80b580af04cb0, []int{35} } func (m *QueryLockFeeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1684,7 +1780,7 @@ func (m *QueryLockFeeResponse) Reset() { *m = QueryLockFeeResponse{} } func (m *QueryLockFeeResponse) String() string { return proto.CompactTextString(m) } func (*QueryLockFeeResponse) ProtoMessage() {} func (*QueryLockFeeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{34} + return fileDescriptor_b1b80b580af04cb0, []int{36} } func (m *QueryLockFeeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1721,7 +1817,7 @@ func (m *QueryHeadBucketExtraRequest) Reset() { *m = QueryHeadBucketExtr func (m *QueryHeadBucketExtraRequest) String() string { return proto.CompactTextString(m) } func (*QueryHeadBucketExtraRequest) ProtoMessage() {} func (*QueryHeadBucketExtraRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{35} + return fileDescriptor_b1b80b580af04cb0, []int{37} } func (m *QueryHeadBucketExtraRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1765,7 +1861,7 @@ func (m *QueryHeadBucketExtraResponse) Reset() { *m = QueryHeadBucketExt func (m *QueryHeadBucketExtraResponse) String() string { return proto.CompactTextString(m) } func (*QueryHeadBucketExtraResponse) ProtoMessage() {} func (*QueryHeadBucketExtraResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{36} + return fileDescriptor_b1b80b580af04cb0, []int{38} } func (m *QueryHeadBucketExtraResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1809,7 +1905,7 @@ func (m *QueryIsPriceChangedRequest) Reset() { *m = QueryIsPriceChangedR func (m *QueryIsPriceChangedRequest) String() string { return proto.CompactTextString(m) } func (*QueryIsPriceChangedRequest) ProtoMessage() {} func (*QueryIsPriceChangedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{37} + return fileDescriptor_b1b80b580af04cb0, []int{39} } func (m *QueryIsPriceChangedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1861,7 +1957,7 @@ func (m *QueryIsPriceChangedResponse) Reset() { *m = QueryIsPriceChanged func (m *QueryIsPriceChangedResponse) String() string { return proto.CompactTextString(m) } func (*QueryIsPriceChangedResponse) ProtoMessage() {} func (*QueryIsPriceChangedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{38} + return fileDescriptor_b1b80b580af04cb0, []int{40} } func (m *QueryIsPriceChangedResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1905,7 +2001,7 @@ func (m *QueryQuoteUpdateTimeRequest) Reset() { *m = QueryQuoteUpdateTim func (m *QueryQuoteUpdateTimeRequest) String() string { return proto.CompactTextString(m) } func (*QueryQuoteUpdateTimeRequest) ProtoMessage() {} func (*QueryQuoteUpdateTimeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{39} + return fileDescriptor_b1b80b580af04cb0, []int{41} } func (m *QueryQuoteUpdateTimeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1949,7 +2045,7 @@ func (m *QueryQuoteUpdateTimeResponse) Reset() { *m = QueryQuoteUpdateTi func (m *QueryQuoteUpdateTimeResponse) String() string { return proto.CompactTextString(m) } func (*QueryQuoteUpdateTimeResponse) ProtoMessage() {} func (*QueryQuoteUpdateTimeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{40} + return fileDescriptor_b1b80b580af04cb0, []int{42} } func (m *QueryQuoteUpdateTimeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1994,7 +2090,7 @@ func (m *QueryGroupMembersExistRequest) Reset() { *m = QueryGroupMembers func (m *QueryGroupMembersExistRequest) String() string { return proto.CompactTextString(m) } func (*QueryGroupMembersExistRequest) ProtoMessage() {} func (*QueryGroupMembersExistRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{41} + return fileDescriptor_b1b80b580af04cb0, []int{43} } func (m *QueryGroupMembersExistRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2045,7 +2141,7 @@ func (m *QueryGroupMembersExistResponse) Reset() { *m = QueryGroupMember func (m *QueryGroupMembersExistResponse) String() string { return proto.CompactTextString(m) } func (*QueryGroupMembersExistResponse) ProtoMessage() {} func (*QueryGroupMembersExistResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{42} + return fileDescriptor_b1b80b580af04cb0, []int{44} } func (m *QueryGroupMembersExistResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2090,7 +2186,7 @@ func (m *QueryGroupsExistRequest) Reset() { *m = QueryGroupsExistRequest func (m *QueryGroupsExistRequest) String() string { return proto.CompactTextString(m) } func (*QueryGroupsExistRequest) ProtoMessage() {} func (*QueryGroupsExistRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{43} + return fileDescriptor_b1b80b580af04cb0, []int{45} } func (m *QueryGroupsExistRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2141,7 +2237,7 @@ func (m *QueryGroupsExistByIdRequest) Reset() { *m = QueryGroupsExistByI func (m *QueryGroupsExistByIdRequest) String() string { return proto.CompactTextString(m) } func (*QueryGroupsExistByIdRequest) ProtoMessage() {} func (*QueryGroupsExistByIdRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{44} + return fileDescriptor_b1b80b580af04cb0, []int{46} } func (m *QueryGroupsExistByIdRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2185,7 +2281,7 @@ func (m *QueryGroupsExistResponse) Reset() { *m = QueryGroupsExistRespon func (m *QueryGroupsExistResponse) String() string { return proto.CompactTextString(m) } func (*QueryGroupsExistResponse) ProtoMessage() {} func (*QueryGroupsExistResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b1b80b580af04cb0, []int{45} + return fileDescriptor_b1b80b580af04cb0, []int{47} } func (m *QueryGroupsExistResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2231,7 +2327,9 @@ func init() { proto.RegisterType((*QueryHeadBucketResponse)(nil), "greenfield.storage.QueryHeadBucketResponse") proto.RegisterType((*QueryHeadObjectRequest)(nil), "greenfield.storage.QueryHeadObjectRequest") proto.RegisterType((*QueryHeadObjectByIdRequest)(nil), "greenfield.storage.QueryHeadObjectByIdRequest") + proto.RegisterType((*QueryHeadShadowObjectRequest)(nil), "greenfield.storage.QueryHeadShadowObjectRequest") proto.RegisterType((*QueryHeadObjectResponse)(nil), "greenfield.storage.QueryHeadObjectResponse") + proto.RegisterType((*QueryHeadShadowObjectResponse)(nil), "greenfield.storage.QueryHeadShadowObjectResponse") proto.RegisterType((*QueryListBucketsRequest)(nil), "greenfield.storage.QueryListBucketsRequest") proto.RegisterType((*QueryListBucketsResponse)(nil), "greenfield.storage.QueryListBucketsResponse") proto.RegisterType((*QueryListObjectsRequest)(nil), "greenfield.storage.QueryListObjectsRequest") @@ -2275,171 +2373,175 @@ func init() { func init() { proto.RegisterFile("greenfield/storage/query.proto", fileDescriptor_b1b80b580af04cb0) } var fileDescriptor_b1b80b580af04cb0 = []byte{ - // 2621 bytes of a gzipped FileDescriptorProto + // 2688 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5a, 0xcd, 0x6f, 0x1c, 0x49, - 0x15, 0x4f, 0xdb, 0x89, 0x63, 0x97, 0x4d, 0x12, 0x6a, 0xbd, 0x1b, 0x67, 0x92, 0x38, 0x49, 0x2f, - 0x24, 0xd9, 0x24, 0x9e, 0x4e, 0x9c, 0x04, 0xc5, 0xf9, 0x42, 0xf6, 0xc6, 0x0e, 0x23, 0xe5, 0xc3, - 0xe9, 0x18, 0x23, 0x22, 0xa1, 0x56, 0x4d, 0x77, 0x79, 0xd2, 0xeb, 0x99, 0xee, 0x49, 0x77, 0x4f, - 0x9c, 0x59, 0x6b, 0x84, 0xd8, 0x0b, 0x1c, 0x11, 0x08, 0x09, 0x09, 0x90, 0x10, 0x88, 0xcf, 0x0b, - 0x82, 0x5d, 0x21, 0x71, 0xe2, 0x02, 0xd2, 0x4a, 0x08, 0x69, 0xb5, 0x5c, 0xd0, 0x1e, 0x56, 0x90, - 0xf0, 0x2f, 0x70, 0x47, 0x5d, 0xf5, 0xaa, 0xbb, 0xfa, 0x63, 0xba, 0xc7, 0xeb, 0xe1, 0xe4, 0xe9, - 0xea, 0x7a, 0xef, 0xfd, 0xde, 0x47, 0xbd, 0xaa, 0xfa, 0xb5, 0xd1, 0x6c, 0xc3, 0xa3, 0xd4, 0xd9, - 0xb0, 0x69, 0xd3, 0xd2, 0xfc, 0xc0, 0xf5, 0x48, 0x83, 0x6a, 0xcf, 0x3a, 0xd4, 0xeb, 0x56, 0xdb, - 0x9e, 0x1b, 0xb8, 0x18, 0xc7, 0xef, 0xab, 0xf0, 0xbe, 0x72, 0xce, 0x74, 0xfd, 0x96, 0xeb, 0x6b, - 0x75, 0xe2, 0xc3, 0x64, 0xed, 0xf9, 0xa5, 0x3a, 0x0d, 0xc8, 0x25, 0xad, 0x4d, 0x1a, 0xb6, 0x43, - 0x02, 0xdb, 0x75, 0xb8, 0x7c, 0xe5, 0x08, 0x9f, 0x6b, 0xb0, 0x27, 0x8d, 0x3f, 0xc0, 0xab, 0xe9, - 0x86, 0xdb, 0x70, 0xf9, 0x78, 0xf8, 0x0b, 0x46, 0x8f, 0x35, 0x5c, 0xb7, 0xd1, 0xa4, 0x1a, 0x69, - 0xdb, 0x1a, 0x71, 0x1c, 0x37, 0x60, 0xda, 0x84, 0x8c, 0x2a, 0xc1, 0x6d, 0x53, 0xaf, 0x65, 0xfb, - 0xbe, 0xed, 0x3a, 0x9a, 0xe9, 0xb6, 0x5a, 0x91, 0xc9, 0x53, 0xf9, 0x73, 0x82, 0x6e, 0x9b, 0x0a, - 0x35, 0x27, 0x72, 0xbc, 0x6e, 0x13, 0x8f, 0xb4, 0xc4, 0x84, 0xbc, 0xb0, 0xc8, 0x0a, 0xde, 0x94, - 0xde, 0x3f, 0xb7, 0xbd, 0xa0, 0x43, 0x9a, 0x0d, 0xcf, 0xed, 0xb4, 0xe5, 0x49, 0xea, 0x34, 0xc2, - 0x8f, 0xc2, 0xe8, 0xac, 0x32, 0xcd, 0x3a, 0x7d, 0xd6, 0xa1, 0x7e, 0xa0, 0x3e, 0x44, 0xaf, 0x25, - 0x46, 0xfd, 0xb6, 0xeb, 0xf8, 0x14, 0x5f, 0x43, 0x63, 0x1c, 0xc1, 0x8c, 0x72, 0x52, 0x39, 0x3b, - 0x39, 0x5f, 0xa9, 0x66, 0x23, 0x5f, 0xe5, 0x32, 0x4b, 0x7b, 0x3f, 0xfc, 0xf4, 0xc4, 0x1e, 0x1d, - 0xe6, 0xab, 0xb7, 0xd0, 0x71, 0x49, 0xe1, 0x52, 0x77, 0xcd, 0x6e, 0x51, 0x3f, 0x20, 0xad, 0x36, - 0x58, 0xc4, 0xc7, 0xd0, 0x44, 0x20, 0xc6, 0x98, 0xf6, 0x51, 0x3d, 0x1e, 0x50, 0x9f, 0xa0, 0xd9, - 0x7e, 0xe2, 0xbb, 0x86, 0xb6, 0x80, 0xde, 0x60, 0xba, 0xbf, 0x42, 0x89, 0xb5, 0xd4, 0x31, 0x37, - 0x69, 0x20, 0x30, 0x9d, 0x40, 0x93, 0x75, 0x36, 0x60, 0x38, 0xa4, 0x45, 0x99, 0xe2, 0x09, 0x1d, - 0xf1, 0xa1, 0x07, 0xa4, 0x45, 0xd5, 0x05, 0x54, 0x49, 0x89, 0x2e, 0x75, 0x6b, 0x96, 0x10, 0x3f, - 0x8a, 0x26, 0x40, 0xdc, 0xb6, 0x40, 0x78, 0x9c, 0x0f, 0xd4, 0x2c, 0xf5, 0x09, 0x3a, 0x9c, 0xb1, - 0x0a, 0xae, 0x7c, 0x39, 0x32, 0x6b, 0x3b, 0x1b, 0x2e, 0xf8, 0x33, 0x9b, 0xe7, 0x0f, 0x17, 0xac, - 0x39, 0x1b, 0xae, 0x80, 0x15, 0xfe, 0x56, 0x9f, 0x48, 0x1e, 0x3d, 0xac, 0xbf, 0x43, 0xcd, 0x81, - 0x3d, 0x0a, 0x27, 0xb8, 0x4c, 0x82, 0x4f, 0x18, 0xe1, 0x13, 0xf8, 0x50, 0xc6, 0x65, 0xae, 0x3b, - 0xe5, 0x32, 0x88, 0xc7, 0x2e, 0xf3, 0x81, 0x9a, 0xa5, 0xfe, 0x49, 0x91, 0x7c, 0x16, 0xb8, 0x62, - 0x9f, 0x85, 0x60, 0x89, 0xcf, 0x5c, 0x90, 0xfb, 0xec, 0x46, 0xbf, 0xf1, 0x37, 0xd0, 0x74, 0xa3, - 0xe9, 0xd6, 0x49, 0xd3, 0x80, 0x52, 0x37, 0x58, 0xad, 0x33, 0x0f, 0x26, 0xe7, 0xcf, 0xcb, 0x9a, - 0xe4, 0xb5, 0x50, 0xbd, 0xcb, 0x84, 0xd6, 0xf9, 0xd0, 0xdd, 0x70, 0x48, 0xc7, 0x8d, 0xcc, 0x98, - 0x4a, 0x00, 0xfa, 0x3d, 0xdb, 0x0f, 0x78, 0xd4, 0xc5, 0x5a, 0xc1, 0x2b, 0x08, 0xc5, 0x1d, 0x05, - 0x90, 0x9f, 0xae, 0x42, 0x17, 0x09, 0xdb, 0x4f, 0x95, 0xf7, 0x2a, 0x68, 0x3f, 0xd5, 0x55, 0xd2, - 0xa0, 0x20, 0xab, 0x4b, 0x92, 0xea, 0x2f, 0x15, 0x34, 0x93, 0xb5, 0x01, 0xf1, 0x59, 0x44, 0x53, - 0x52, 0x4d, 0x84, 0x45, 0x3e, 0x3a, 0x40, 0x51, 0x4c, 0xc6, 0x45, 0xe1, 0xe3, 0xbb, 0x09, 0x9c, - 0x3c, 0x2e, 0x67, 0x4a, 0x71, 0x72, 0xfb, 0x09, 0xa0, 0xef, 0x29, 0x52, 0x30, 0x78, 0x3a, 0x86, - 0x1d, 0x8c, 0x74, 0xa1, 0x8e, 0x64, 0x96, 0xde, 0x77, 0x14, 0x74, 0x2a, 0x0d, 0x62, 0xa9, 0x0b, - 0xbe, 0x5b, 0xc3, 0x86, 0x93, 0x58, 0xca, 0x23, 0xa9, 0xa5, 0x9c, 0x48, 0x5c, 0x14, 0x8f, 0x38, - 0x71, 0x52, 0x61, 0x17, 0x26, 0x4e, 0xaa, 0xec, 0xc9, 0xb8, 0xb2, 0x87, 0x98, 0xb8, 0x0b, 0xe8, - 0x20, 0xc3, 0xf9, 0x60, 0x65, 0x4d, 0x04, 0xe8, 0x08, 0x1a, 0x0f, 0xdc, 0x4d, 0xea, 0xc4, 0xeb, - 0x75, 0x3f, 0x7b, 0xae, 0x59, 0xea, 0xd7, 0xa1, 0x8b, 0xf0, 0x98, 0x32, 0x99, 0x68, 0xb1, 0x4e, - 0xb4, 0x68, 0x40, 0x0c, 0x8b, 0x04, 0x04, 0x82, 0xaa, 0xf6, 0xaf, 0xc4, 0xfb, 0x34, 0x20, 0x77, - 0x48, 0x40, 0xf4, 0xf1, 0x16, 0xfc, 0x8a, 0x54, 0x73, 0x8f, 0x3f, 0x8b, 0x6a, 0x2e, 0x99, 0xa3, - 0xfa, 0x6b, 0xe8, 0x75, 0xa6, 0x9a, 0x2d, 0x5b, 0x59, 0xf3, 0xed, 0xac, 0xe6, 0x53, 0x79, 0x9a, - 0x99, 0x60, 0x8e, 0xe2, 0x6f, 0x29, 0xe8, 0x18, 0xdf, 0x83, 0xdc, 0xa6, 0x6d, 0x76, 0x57, 0x5c, - 0x6f, 0xd1, 0x34, 0xdd, 0x8e, 0x13, 0xf5, 0xd6, 0x0a, 0x1a, 0xf7, 0xa8, 0xef, 0x76, 0x3c, 0x53, - 0x34, 0xd6, 0xe8, 0x19, 0x2f, 0xa3, 0xcf, 0xb7, 0x3d, 0xdb, 0x31, 0xed, 0x36, 0x69, 0x1a, 0xc4, - 0xb2, 0x3c, 0xea, 0xfb, 0xbc, 0x8e, 0x96, 0x66, 0x3e, 0xfe, 0x60, 0x6e, 0x1a, 0x92, 0xb9, 0xc8, - 0xdf, 0x3c, 0x0e, 0x3c, 0xdb, 0x69, 0xe8, 0x87, 0x22, 0x11, 0x18, 0x57, 0xd7, 0xc5, 0x2e, 0x9a, - 0x81, 0x00, 0x4e, 0x5e, 0x45, 0x63, 0x6d, 0xf6, 0x0e, 0x3c, 0x3c, 0x2e, 0x7b, 0x18, 0x9f, 0x33, - 0xaa, 0x5c, 0x81, 0x0e, 0x93, 0xd5, 0x4f, 0x84, 0x6f, 0xeb, 0xd4, 0xb3, 0x37, 0xba, 0xab, 0xd1, - 0x44, 0xe1, 0xdb, 0x15, 0x34, 0xee, 0xb6, 0xa9, 0x47, 0x02, 0xd7, 0xe3, 0xbe, 0x15, 0xc0, 0x8e, - 0x66, 0x96, 0x2e, 0xe2, 0xf4, 0x6e, 0x33, 0x9a, 0xde, 0x6d, 0xf0, 0x12, 0x9a, 0x24, 0x66, 0x58, - 0xbb, 0x46, 0x78, 0x66, 0x99, 0xd9, 0x7b, 0x52, 0x39, 0x7b, 0x20, 0x99, 0x36, 0xc9, 0xa9, 0x45, - 0x36, 0x73, 0xad, 0xdb, 0xa6, 0x3a, 0x22, 0xd1, 0xef, 0x28, 0x68, 0x59, 0xdf, 0xe2, 0xa0, 0xd1, - 0x8d, 0x0d, 0x6a, 0x06, 0xcc, 0xb5, 0x03, 0x7d, 0x83, 0xb6, 0xcc, 0x26, 0xe9, 0x30, 0x59, 0x7d, - 0x06, 0x95, 0x16, 0xee, 0x66, 0x7c, 0xe3, 0x80, 0x60, 0x2d, 0xa0, 0x49, 0xb6, 0xb7, 0x18, 0xee, - 0x96, 0x43, 0xcb, 0xe3, 0x85, 0xd8, 0xe4, 0x87, 0xe1, 0x5c, 0x7c, 0x1c, 0xf1, 0x27, 0x39, 0x60, - 0x13, 0x6c, 0x84, 0x35, 0xbd, 0x75, 0x69, 0x63, 0x07, 0x93, 0xe0, 0xc3, 0x4d, 0x21, 0x28, 0x6d, - 0x9f, 0xc7, 0xfb, 0x96, 0x37, 0xeb, 0x31, 0x5c, 0x2f, 0x3b, 0x30, 0xfc, 0x48, 0x01, 0xc5, 0x61, - 0x07, 0x63, 0x33, 0x86, 0xde, 0xd0, 0x53, 0x41, 0x19, 0x19, 0x3c, 0x28, 0xea, 0xcf, 0xe4, 0xfd, - 0x46, 0xa0, 0x03, 0xbf, 0xef, 0xe6, 0xc0, 0xfb, 0x2c, 0xbd, 0x11, 0xdf, 0x16, 0xf8, 0x78, 0x9b, - 0x1e, 0x61, 0x6d, 0xba, 0x24, 0x82, 0x28, 0x8a, 0xa0, 0xaf, 0xfe, 0x46, 0x41, 0x47, 0x93, 0xb9, - 0xb9, 0x4f, 0x5b, 0x75, 0xea, 0x89, 0x38, 0x5e, 0x44, 0x63, 0x2d, 0x36, 0x50, 0x5a, 0x0f, 0x30, - 0x6f, 0x17, 0x11, 0x4b, 0x95, 0xd1, 0x68, 0xba, 0x8c, 0x28, 0xac, 0xf6, 0x0c, 0x54, 0x08, 0xea, - 0x32, 0x9a, 0xe2, 0xe2, 0x12, 0xe2, 0x54, 0x1f, 0x96, 0x96, 0x85, 0xac, 0x81, 0x23, 0xe6, 0x0f, - 0xea, 0x06, 0x1c, 0x15, 0xa3, 0x6e, 0x95, 0x58, 0x25, 0x45, 0xed, 0xf2, 0x02, 0xc2, 0x71, 0xbb, - 0x84, 0xb4, 0x88, 0x7d, 0x37, 0xee, 0x8a, 0x3c, 0x11, 0x96, 0xba, 0x06, 0x91, 0x4f, 0xdb, 0xd9, - 0x5d, 0x4f, 0xbc, 0x0a, 0x4b, 0x82, 0x0f, 0xa7, 0x0e, 0xb9, 0x7c, 0x8e, 0x74, 0xc8, 0xe5, 0x03, - 0x35, 0x4b, 0x5d, 0x85, 0x5a, 0x95, 0xc5, 0x76, 0x07, 0xe4, 0x27, 0x0a, 0x5c, 0xc6, 0xee, 0xb9, - 0xe6, 0xe6, 0x0a, 0xa5, 0xf1, 0xca, 0x0c, 0x83, 0xd4, 0x22, 0x5e, 0xd7, 0xf0, 0xdb, 0xd1, 0xa6, - 0xa2, 0x0c, 0xb0, 0xa9, 0x84, 0x32, 0x8f, 0xdb, 0x30, 0x1e, 0xba, 0x63, 0x7a, 0x94, 0x04, 0xd4, - 0x20, 0x01, 0x8b, 0xf1, 0xa8, 0x3e, 0xce, 0x07, 0x16, 0x03, 0x7c, 0x0a, 0x4d, 0xb5, 0x49, 0xb7, - 0xe9, 0x12, 0xcb, 0xf0, 0xed, 0x77, 0x79, 0x2d, 0xed, 0xd5, 0x27, 0x61, 0xec, 0xb1, 0xfd, 0x2e, - 0x55, 0x9b, 0x68, 0x3a, 0x09, 0x0f, 0xdc, 0x5d, 0x43, 0x63, 0xa4, 0x15, 0xee, 0x4e, 0x80, 0xe9, - 0x66, 0x78, 0xeb, 0xfa, 0xe4, 0xd3, 0x13, 0xa7, 0x1b, 0x76, 0xf0, 0xb4, 0x53, 0xaf, 0x9a, 0x6e, - 0x0b, 0xee, 0xda, 0xf0, 0x67, 0xce, 0xb7, 0x36, 0xe1, 0x6e, 0x5a, 0x73, 0x82, 0x8f, 0x3f, 0x98, - 0x43, 0xe0, 0x41, 0xcd, 0x09, 0x74, 0xd0, 0xa5, 0xde, 0x96, 0x96, 0x19, 0x3f, 0x5f, 0x2c, 0xbf, - 0x08, 0x3c, 0x32, 0xf0, 0x95, 0x4d, 0xae, 0xfd, 0x84, 0x7c, 0x54, 0xfb, 0x88, 0x86, 0x03, 0x72, - 0x23, 0x3d, 0x9d, 0xd7, 0x06, 0x6a, 0x4e, 0x40, 0x3d, 0x87, 0x34, 0xa5, 0xe3, 0xf6, 0x04, 0x93, - 0x64, 0x1d, 0xf5, 0x16, 0xd4, 0x7e, 0xcd, 0x5f, 0xf5, 0x6c, 0x93, 0xbe, 0xfd, 0x94, 0x38, 0x0d, - 0x6a, 0x0d, 0x8c, 0xf2, 0xdf, 0xfb, 0xc1, 0xcd, 0xb4, 0x3c, 0xa0, 0x9c, 0x41, 0xfb, 0x4d, 0x3e, - 0xc4, 0x84, 0xc7, 0x75, 0xf1, 0x88, 0xdf, 0x41, 0xd8, 0xec, 0x78, 0x1e, 0x75, 0x02, 0xc3, 0xa3, - 0xc4, 0x32, 0xda, 0xa1, 0x38, 0x34, 0x8f, 0x9d, 0x64, 0xe0, 0x0e, 0x35, 0xa5, 0x0c, 0xdc, 0xa1, - 0xa6, 0x7e, 0x08, 0xf4, 0xea, 0x94, 0x58, 0x0c, 0x14, 0xde, 0x46, 0x47, 0x85, 0xad, 0xa8, 0x12, - 0x03, 0xd7, 0xa3, 0x60, 0x74, 0x74, 0x08, 0x46, 0x67, 0xc0, 0xc0, 0x2a, 0x54, 0x6d, 0xa8, 0x9e, - 0x1b, 0xff, 0x26, 0x3a, 0x2e, 0x8c, 0xfb, 0xd4, 0x74, 0x1d, 0x2b, 0x6d, 0x7e, 0xef, 0x10, 0xcc, - 0x57, 0xc0, 0xc4, 0x63, 0x61, 0x41, 0x02, 0xd0, 0x45, 0xe2, 0xad, 0xf1, 0x9c, 0x34, 0x6d, 0x2b, - 0x3c, 0xf2, 0x18, 0x01, 0x79, 0x61, 0x78, 0x24, 0xa0, 0x33, 0xfb, 0x86, 0x60, 0xfd, 0x30, 0xe8, - 0x5f, 0x17, 0xea, 0xd7, 0xc8, 0x0b, 0x9d, 0x04, 0x14, 0xd7, 0xd1, 0x01, 0x87, 0x6e, 0xc9, 0x09, - 0x1e, 0x1b, 0x82, 0xb9, 0x29, 0x87, 0x6e, 0xc5, 0xc9, 0xf5, 0xd1, 0xe1, 0xd0, 0x46, 0x5e, 0x62, - 0xf7, 0x0f, 0xc1, 0xd8, 0xb4, 0x43, 0xb7, 0xb2, 0x49, 0xdd, 0x42, 0x47, 0x42, 0xa3, 0xf9, 0x09, - 0x1d, 0x1f, 0x82, 0xd9, 0x37, 0x1c, 0xba, 0x95, 0x97, 0xcc, 0x67, 0x28, 0x7c, 0x93, 0x97, 0xc8, - 0x89, 0x21, 0x58, 0x7d, 0xcd, 0xa1, 0x5b, 0xe9, 0x24, 0x46, 0x9d, 0xec, 0x51, 0xc7, 0x0d, 0xe8, - 0x57, 0xdb, 0x16, 0x09, 0xe8, 0x9a, 0xdd, 0xa2, 0x03, 0xf7, 0x88, 0x1b, 0xd0, 0xc9, 0x32, 0xf2, - 0xd0, 0x23, 0x8e, 0xa2, 0x89, 0x0e, 0x1b, 0x0d, 0xfb, 0xfa, 0x18, 0xef, 0xeb, 0x7c, 0x60, 0x31, - 0x50, 0x1d, 0x38, 0x14, 0x4b, 0x9b, 0xb7, 0xbf, 0xfc, 0xc2, 0xf6, 0x03, 0xe9, 0x62, 0x18, 0x6d, - 0xbc, 0x70, 0x31, 0xe4, 0xa7, 0x1d, 0x0b, 0xcf, 0xa3, 0xfd, 0xfc, 0x60, 0xc0, 0x8f, 0x49, 0x45, - 0xbb, 0x8d, 0x98, 0xa8, 0xbe, 0xaf, 0x00, 0x83, 0x97, 0x63, 0x10, 0xf0, 0xae, 0xa3, 0x31, 0x1a, - 0x0e, 0x88, 0x3b, 0xf2, 0xed, 0xbc, 0xae, 0x5b, 0xac, 0xa3, 0xca, 0x9e, 0xfc, 0x65, 0x27, 0xf0, - 0xba, 0x3a, 0x68, 0xab, 0x2c, 0xa0, 0x49, 0x69, 0x18, 0x1f, 0x42, 0xa3, 0x9b, 0xb4, 0x0b, 0x3e, - 0x85, 0x3f, 0xf1, 0x34, 0xda, 0xf7, 0x9c, 0x34, 0x3b, 0xbc, 0x4b, 0x8e, 0xeb, 0xfc, 0xe1, 0xfa, - 0xc8, 0x35, 0x45, 0xed, 0xc0, 0x66, 0xce, 0x0f, 0x9d, 0x89, 0xf8, 0xec, 0xe2, 0x90, 0x7f, 0x42, - 0x88, 0x86, 0x89, 0x85, 0x18, 0xc2, 0x84, 0x30, 0xb1, 0xbe, 0x7a, 0x1d, 0x2a, 0x43, 0x32, 0x9b, - 0x3a, 0x7f, 0x88, 0xd4, 0xf0, 0x58, 0x4d, 0xe8, 0xe3, 0x90, 0x1b, 0x5f, 0xfd, 0x95, 0x20, 0x23, - 0x12, 0x98, 0x21, 0xc4, 0xab, 0xa9, 0x10, 0x5f, 0x2b, 0x0e, 0xf1, 0xff, 0x35, 0xb8, 0xf3, 0xff, - 0x55, 0xd1, 0x3e, 0x66, 0x0b, 0xf7, 0xd0, 0x18, 0x67, 0x66, 0xf1, 0xe9, 0xbe, 0x80, 0x12, 0xfc, - 0x74, 0xe5, 0x4c, 0xe9, 0x3c, 0x8e, 0x59, 0x55, 0xdf, 0xfb, 0xc7, 0x7f, 0xbe, 0x3f, 0x72, 0x0c, - 0x57, 0xb4, 0xbe, 0x6c, 0x3a, 0xfe, 0x9d, 0xb8, 0xfd, 0x64, 0xd8, 0x65, 0x7c, 0xa9, 0xc4, 0x4e, - 0x96, 0xc8, 0xae, 0xcc, 0xef, 0x44, 0x04, 0x50, 0x56, 0x19, 0xca, 0xb3, 0xf8, 0x74, 0x7f, 0x94, - 0xda, 0x76, 0xc4, 0x86, 0xf7, 0xf0, 0x8f, 0x15, 0x84, 0xe2, 0x03, 0x0c, 0x3e, 0xd7, 0xd7, 0x64, - 0x86, 0xd3, 0xae, 0x9c, 0x1f, 0x68, 0x2e, 0xe0, 0xba, 0xca, 0x70, 0x69, 0x78, 0x2e, 0x0f, 0xd7, - 0xd3, 0x70, 0xf7, 0xe1, 0xfd, 0x48, 0xdb, 0x96, 0x5a, 0x55, 0x0f, 0xff, 0x5a, 0x41, 0x07, 0x92, - 0x94, 0x38, 0xae, 0x0e, 0x60, 0x56, 0xaa, 0xf1, 0x9d, 0xc1, 0x5c, 0x60, 0x30, 0x2f, 0xe3, 0x4b, - 0x25, 0x30, 0x8d, 0x7a, 0x78, 0x64, 0x8f, 0xc0, 0xda, 0x56, 0x0f, 0xff, 0x50, 0x41, 0x9f, 0x8b, - 0x35, 0x3e, 0x58, 0x59, 0xc3, 0x6f, 0xf6, 0xb5, 0x1c, 0xd3, 0x66, 0x95, 0xfe, 0x11, 0xcf, 0xb0, - 0x65, 0xea, 0x97, 0x18, 0xba, 0x8b, 0xb8, 0x5a, 0x86, 0xce, 0xd9, 0x08, 0xb4, 0x6d, 0xc1, 0xc6, - 0xf5, 0xf0, 0x6f, 0x21, 0xc9, 0x9c, 0xea, 0x2a, 0x49, 0x72, 0x82, 0xe6, 0x2f, 0x89, 0x5e, 0x92, - 0x7a, 0x57, 0xdf, 0x66, 0xf8, 0x6e, 0xe1, 0x1b, 0x7d, 0xf1, 0x71, 0x42, 0x26, 0x99, 0x64, 0x6d, - 0x5b, 0x62, 0x6e, 0xe2, 0x94, 0xc7, 0x9f, 0x04, 0x4a, 0x52, 0x9e, 0xf9, 0x76, 0xb0, 0x33, 0xd0, - 0xe5, 0x29, 0x07, 0x78, 0x90, 0xf2, 0xe8, 0xab, 0x44, 0x9c, 0xf2, 0x88, 0x7c, 0xdc, 0x6d, 0xca, - 0x33, 0x2c, 0xe6, 0x00, 0x29, 0x17, 0xc1, 0x4b, 0xa6, 0xfc, 0x7b, 0x0a, 0x9a, 0x94, 0xd8, 0x7f, - 0xdc, 0x3f, 0x24, 0xd9, 0xef, 0x10, 0x95, 0x0b, 0x83, 0x4d, 0x06, 0x88, 0x67, 0x19, 0x44, 0x15, - 0x9f, 0xcc, 0x83, 0xd8, 0xb4, 0xfd, 0x00, 0xaa, 0xd2, 0xc7, 0x3f, 0x05, 0x50, 0xc0, 0x6c, 0x97, - 0x80, 0x4a, 0x7e, 0x0f, 0x28, 0x01, 0x95, 0x22, 0xcb, 0x8b, 0xe3, 0xc6, 0x40, 0xf1, 0xb8, 0xf9, - 0xa9, 0x86, 0xf3, 0x67, 0x05, 0xbd, 0x9e, 0xfb, 0x1d, 0x00, 0x5f, 0x1d, 0xc4, 0x7e, 0xe6, 0xbb, - 0xc1, 0x0e, 0x61, 0x2f, 0x32, 0xd8, 0x37, 0xf0, 0x42, 0x19, 0xec, 0xb0, 0x1a, 0xa3, 0xe6, 0x93, - 0xe8, 0x43, 0x3f, 0x50, 0xd0, 0x54, 0x44, 0xc7, 0x0c, 0x5c, 0x93, 0x6f, 0x15, 0xef, 0xdf, 0x72, - 0x49, 0x96, 0xb7, 0x72, 0x38, 0x93, 0x24, 0x2b, 0xf2, 0x6f, 0x0a, 0xb0, 0x9c, 0x69, 0xca, 0x19, - 0x5f, 0xec, 0xbf, 0xcf, 0xe5, 0x13, 0xe4, 0x95, 0x4b, 0x3b, 0x90, 0x00, 0xd4, 0xf7, 0x19, 0xea, - 0xbb, 0x78, 0x39, 0x77, 0x63, 0xe4, 0x24, 0xcc, 0x86, 0xeb, 0x19, 0x84, 0xcb, 0x69, 0xdb, 0x82, - 0x42, 0xea, 0x69, 0xdb, 0x19, 0xc2, 0xbd, 0x87, 0xff, 0xae, 0xa0, 0x43, 0x69, 0x1a, 0xb8, 0xc0, - 0x91, 0x3e, 0x6c, 0x78, 0x81, 0x23, 0xfd, 0x38, 0x66, 0x75, 0x8d, 0x39, 0xf2, 0x00, 0xdf, 0xcb, - 0x73, 0xe4, 0x39, 0x93, 0x32, 0xa4, 0xff, 0x03, 0xd8, 0x16, 0x1c, 0x7a, 0x2f, 0xdd, 0x75, 0x25, - 0x3a, 0xbc, 0x87, 0x7f, 0xa1, 0xa0, 0x89, 0xa8, 0x6a, 0xf0, 0x5b, 0x85, 0x0d, 0x54, 0x26, 0xdf, - 0x2a, 0xe7, 0x06, 0x99, 0x3a, 0x48, 0x75, 0xc7, 0x95, 0xa3, 0x6d, 0x4b, 0xe7, 0xe1, 0x9e, 0x78, - 0xe2, 0xeb, 0x33, 0x3c, 0xaf, 0xc4, 0xe4, 0x6d, 0xc1, 0x56, 0x96, 0xe1, 0x9f, 0x2b, 0xe7, 0x07, - 0x9a, 0x3b, 0x48, 0x91, 0xb3, 0x85, 0xc8, 0x50, 0xf9, 0x49, 0xac, 0xf8, 0xe7, 0x0a, 0x3a, 0x98, - 0xe2, 0x42, 0xb1, 0x56, 0x1e, 0xa1, 0x04, 0xc1, 0x5b, 0xb9, 0x38, 0xb8, 0x00, 0xa0, 0x9d, 0x63, - 0x68, 0xcf, 0xe0, 0x2f, 0x96, 0x2c, 0x49, 0xe0, 0x83, 0xff, 0x22, 0x78, 0xc0, 0x24, 0xcf, 0x59, - 0xb0, 0xcf, 0xe6, 0x12, 0xaf, 0x15, 0x6d, 0xe0, 0xf9, 0x80, 0xf3, 0x1e, 0xc3, 0xb9, 0x82, 0xef, - 0x94, 0x2c, 0x42, 0x28, 0x83, 0xdc, 0x25, 0x28, 0x2e, 0x2c, 0xbd, 0x70, 0x3b, 0x39, 0x98, 0x62, - 0x48, 0x0b, 0x0a, 0x22, 0xc3, 0xbe, 0x16, 0x14, 0x44, 0x96, 0x72, 0x55, 0xaf, 0x30, 0xe8, 0x55, - 0x7c, 0xa1, 0x00, 0x3a, 0x9c, 0x10, 0x22, 0x4a, 0xb7, 0x87, 0xbf, 0xad, 0xa0, 0x29, 0x99, 0xd2, - 0xc4, 0xfd, 0xaf, 0x1b, 0x49, 0x4e, 0xb6, 0x72, 0xb6, 0x7c, 0x22, 0x20, 0xfb, 0x02, 0x43, 0x36, - 0x8b, 0x8f, 0xe5, 0x96, 0xaa, 0x6b, 0x6e, 0x1a, 0x1b, 0x94, 0xe2, 0xdf, 0x43, 0x65, 0x4a, 0x4c, - 0x65, 0x49, 0x65, 0x66, 0x39, 0xd1, 0x92, 0xca, 0xcc, 0x21, 0x41, 0xd5, 0x1b, 0x0c, 0xdc, 0x55, - 0x7c, 0xb9, 0xec, 0xc8, 0xca, 0x08, 0xcf, 0xd4, 0x66, 0xfc, 0x07, 0x51, 0xa7, 0x49, 0xee, 0xb2, - 0xa0, 0x4e, 0x73, 0x49, 0xd2, 0x82, 0x3a, 0xcd, 0x27, 0x45, 0xd5, 0xeb, 0x0c, 0xf5, 0x15, 0x3c, - 0x9f, 0x87, 0xda, 0xf6, 0x39, 0x8b, 0x64, 0x00, 0x51, 0x9a, 0x02, 0xfd, 0x47, 0x05, 0x58, 0xec, - 0x47, 0x1d, 0x37, 0x20, 0x31, 0x9b, 0x52, 0x10, 0xed, 0x7c, 0xde, 0xa6, 0x20, 0xda, 0x7d, 0x88, - 0x9a, 0xe2, 0x68, 0x3f, 0x0b, 0xf1, 0x18, 0x40, 0xe4, 0x84, 0x57, 0xc0, 0x14, 0xf0, 0xbf, 0x8a, - 0xcb, 0x6b, 0x86, 0x14, 0x29, 0xb8, 0xbc, 0xf6, 0x63, 0x7d, 0x0a, 0x2e, 0xaf, 0x7d, 0x39, 0x17, - 0xf5, 0x0e, 0x83, 0x7f, 0x1b, 0xdf, 0xcc, 0x83, 0x2f, 0x77, 0x30, 0xdf, 0x60, 0xa4, 0x81, 0x68, - 0xbe, 0xb6, 0xd5, 0xd3, 0xb6, 0xe1, 0x4d, 0x0f, 0xbf, 0xaf, 0xa0, 0x43, 0x69, 0xe6, 0xa1, 0xe0, - 0xa8, 0x99, 0x65, 0x64, 0x0a, 0xce, 0x6c, 0x39, 0x64, 0xc6, 0x00, 0xa8, 0x53, 0x70, 0xb3, 0xfb, - 0x9a, 0xdf, 0x0b, 0xd7, 0xe7, 0x74, 0x1e, 0x55, 0x53, 0x50, 0x36, 0xf9, 0xa4, 0xce, 0x0e, 0xd1, - 0x17, 0x96, 0xba, 0x8c, 0x5e, 0x74, 0xb7, 0x88, 0x30, 0xea, 0x2d, 0xd5, 0x3e, 0x7c, 0x39, 0xab, - 0x7c, 0xf4, 0x72, 0x56, 0xf9, 0xd7, 0xcb, 0x59, 0xe5, 0xbb, 0xaf, 0x66, 0xf7, 0x7c, 0xf4, 0x6a, - 0x76, 0xcf, 0x3f, 0x5f, 0xcd, 0xee, 0x79, 0xa2, 0x49, 0xe4, 0x66, 0xdd, 0xa9, 0xcf, 0x99, 0x4f, - 0x89, 0xed, 0xc8, 0x16, 0x5e, 0x24, 0xff, 0xcf, 0xb0, 0x3e, 0xc6, 0xfe, 0x87, 0xf0, 0xf2, 0xff, - 0x02, 0x00, 0x00, 0xff, 0xff, 0x17, 0x56, 0x66, 0x4d, 0xa1, 0x29, 0x00, 0x00, + 0x15, 0x4f, 0xdb, 0x59, 0xc7, 0x2e, 0x9b, 0xac, 0xa9, 0xf5, 0xee, 0x3a, 0x93, 0xc4, 0x49, 0x7a, + 0x43, 0x92, 0x4d, 0xe2, 0xe9, 0xc4, 0x49, 0x50, 0x9c, 0x2f, 0x64, 0xaf, 0xed, 0x30, 0x28, 0x1f, + 0xce, 0xc4, 0x18, 0x11, 0x09, 0x35, 0x35, 0xdd, 0x35, 0x93, 0x5e, 0xcf, 0x74, 0x4f, 0xba, 0x7b, + 0xe2, 0xcc, 0x5a, 0x23, 0xc4, 0x5e, 0xe0, 0x88, 0x40, 0x48, 0x48, 0x80, 0x84, 0x40, 0x7c, 0x5e, + 0x10, 0xec, 0x0a, 0x09, 0x71, 0xe0, 0x00, 0x48, 0x2b, 0x21, 0xa4, 0xd5, 0x72, 0x41, 0x7b, 0x58, + 0x41, 0xc2, 0x1f, 0x82, 0xba, 0xea, 0x55, 0x77, 0xf5, 0xc7, 0x74, 0x8f, 0xd7, 0xc3, 0xc9, 0xd3, + 0xd5, 0xf5, 0xde, 0xfb, 0xbd, 0x8f, 0x7a, 0x55, 0xfd, 0x2b, 0xa3, 0xb9, 0x86, 0x4b, 0xa9, 0x5d, + 0xb7, 0x68, 0xd3, 0xd4, 0x3c, 0xdf, 0x71, 0x49, 0x83, 0x6a, 0x4f, 0x3a, 0xd4, 0xed, 0x96, 0xdb, + 0xae, 0xe3, 0x3b, 0x18, 0x47, 0xef, 0xcb, 0xf0, 0xbe, 0x74, 0xd6, 0x70, 0xbc, 0x96, 0xe3, 0x69, + 0x35, 0xe2, 0xc1, 0x64, 0xed, 0xe9, 0xc5, 0x1a, 0xf5, 0xc9, 0x45, 0xad, 0x4d, 0x1a, 0x96, 0x4d, + 0x7c, 0xcb, 0xb1, 0xb9, 0x7c, 0xe9, 0x10, 0x9f, 0xab, 0xb3, 0x27, 0x8d, 0x3f, 0xc0, 0xab, 0x99, + 0x86, 0xd3, 0x70, 0xf8, 0x78, 0xf0, 0x0b, 0x46, 0x8f, 0x34, 0x1c, 0xa7, 0xd1, 0xa4, 0x1a, 0x69, + 0x5b, 0x1a, 0xb1, 0x6d, 0xc7, 0x67, 0xda, 0x84, 0x8c, 0x2a, 0xc1, 0x6d, 0x53, 0xb7, 0x65, 0x79, + 0x9e, 0xe5, 0xd8, 0x9a, 0xe1, 0xb4, 0x5a, 0xa1, 0xc9, 0x13, 0xd9, 0x73, 0xfc, 0x6e, 0x9b, 0x0a, + 0x35, 0xc7, 0x32, 0xbc, 0x6e, 0x13, 0x97, 0xb4, 0xc4, 0x84, 0xac, 0xb0, 0xc8, 0x0a, 0xde, 0x90, + 0xde, 0x3f, 0xb5, 0x5c, 0xbf, 0x43, 0x9a, 0x0d, 0xd7, 0xe9, 0xb4, 0xe5, 0x49, 0xea, 0x0c, 0xc2, + 0x0f, 0x82, 0xe8, 0xac, 0x33, 0xcd, 0x55, 0xfa, 0xa4, 0x43, 0x3d, 0x5f, 0xbd, 0x8f, 0x5e, 0x89, + 0x8d, 0x7a, 0x6d, 0xc7, 0xf6, 0x28, 0xbe, 0x8a, 0xc6, 0x38, 0x82, 0x59, 0xe5, 0xb8, 0x72, 0x66, + 0x72, 0xa1, 0x54, 0x4e, 0x47, 0xbe, 0xcc, 0x65, 0x96, 0xf7, 0x7f, 0xf0, 0xc9, 0xb1, 0x7d, 0x55, + 0x98, 0xaf, 0xde, 0x44, 0x47, 0x25, 0x85, 0xcb, 0xdd, 0x0d, 0xab, 0x45, 0x3d, 0x9f, 0xb4, 0xda, + 0x60, 0x11, 0x1f, 0x41, 0x13, 0xbe, 0x18, 0x63, 0xda, 0x47, 0xab, 0xd1, 0x80, 0xfa, 0x08, 0xcd, + 0xf5, 0x13, 0xdf, 0x33, 0xb4, 0x45, 0xf4, 0x1a, 0xd3, 0xfd, 0x45, 0x4a, 0xcc, 0xe5, 0x8e, 0xb1, + 0x45, 0x7d, 0x81, 0xe9, 0x18, 0x9a, 0xac, 0xb1, 0x01, 0xdd, 0x26, 0x2d, 0xca, 0x14, 0x4f, 0x54, + 0x11, 0x1f, 0xba, 0x47, 0x5a, 0x54, 0x5d, 0x44, 0xa5, 0x84, 0xe8, 0x72, 0xb7, 0x62, 0x0a, 0xf1, + 0xc3, 0x68, 0x02, 0xc4, 0x2d, 0x13, 0x84, 0xc7, 0xf9, 0x40, 0xc5, 0x54, 0x1f, 0xa1, 0xd7, 0x53, + 0x56, 0xc1, 0x95, 0x2f, 0x84, 0x66, 0x2d, 0xbb, 0xee, 0x80, 0x3f, 0x73, 0x59, 0xfe, 0x70, 0xc1, + 0x8a, 0x5d, 0x77, 0x04, 0xac, 0xe0, 0xb7, 0xfa, 0x48, 0xf2, 0xe8, 0x7e, 0xed, 0x6d, 0x6a, 0x0c, + 0xec, 0x51, 0x30, 0xc1, 0x61, 0x12, 0x7c, 0xc2, 0x08, 0x9f, 0xc0, 0x87, 0x52, 0x2e, 0x73, 0xdd, + 0x09, 0x97, 0x41, 0x3c, 0x72, 0x99, 0x0f, 0x54, 0x4c, 0xf5, 0xeb, 0xe8, 0x48, 0x28, 0xfa, 0xf0, + 0x31, 0x31, 0x9d, 0xed, 0x61, 0x83, 0xfb, 0xa3, 0x22, 0x45, 0x55, 0x28, 0x8f, 0xa2, 0x2a, 0xa0, + 0x15, 0x44, 0x95, 0x0b, 0xf2, 0xa8, 0x3a, 0xe1, 0x6f, 0xfc, 0x35, 0x34, 0xd3, 0x68, 0x3a, 0x35, + 0xd2, 0xd4, 0x61, 0x31, 0xe9, 0x6c, 0x35, 0x31, 0x18, 0x93, 0x0b, 0xe7, 0x64, 0x4d, 0xf2, 0x6a, + 0x2b, 0xdf, 0x66, 0x42, 0x9b, 0x7c, 0xe8, 0x76, 0x30, 0x54, 0xc5, 0x8d, 0xd4, 0x98, 0x5a, 0x87, + 0x15, 0x92, 0x8e, 0x0e, 0x38, 0xb0, 0x9a, 0xe5, 0xc0, 0xc9, 0x2c, 0x07, 0x64, 0xf1, 0xa4, 0x1b, + 0x2a, 0x81, 0x10, 0xdd, 0xb1, 0x3c, 0x9f, 0xd7, 0x8f, 0x58, 0xf5, 0x78, 0x0d, 0xa1, 0xa8, 0x37, + 0x82, 0x81, 0x53, 0x65, 0xe8, 0x87, 0x41, 0x23, 0x2d, 0xf3, 0xae, 0x0b, 0x8d, 0xb4, 0xbc, 0x4e, + 0x1a, 0x14, 0x64, 0xab, 0x92, 0xa4, 0xfa, 0x0b, 0x05, 0xcd, 0xa6, 0x6d, 0x80, 0x1b, 0x4b, 0x68, + 0x4a, 0xaa, 0xee, 0x60, 0xb9, 0x8e, 0x0e, 0x50, 0xde, 0x93, 0x51, 0x79, 0x7b, 0xf8, 0x76, 0x0c, + 0x27, 0x8f, 0xff, 0xe9, 0x42, 0x9c, 0xdc, 0x7e, 0x0c, 0xe8, 0xbb, 0x8a, 0x14, 0x0c, 0x1e, 0xaf, + 0x61, 0x07, 0x23, 0x59, 0xd5, 0x23, 0xa9, 0x26, 0xf2, 0x6d, 0x05, 0x9d, 0x48, 0x82, 0x58, 0xee, + 0x82, 0xef, 0xe6, 0xb0, 0xe1, 0xc4, 0x9a, 0xd2, 0x48, 0xa2, 0x29, 0xc5, 0x12, 0x17, 0xc6, 0x23, + 0x4a, 0x9c, 0x54, 0x7f, 0xb9, 0x89, 0x93, 0x4a, 0x6f, 0x32, 0x2a, 0xbd, 0x21, 0x26, 0xee, 0x3c, + 0x7a, 0x99, 0xe1, 0xbc, 0xb7, 0xb6, 0x21, 0x02, 0x74, 0x08, 0x8d, 0xfb, 0xce, 0x16, 0xb5, 0xa3, + 0xce, 0x73, 0x80, 0x3d, 0x57, 0x4c, 0xf5, 0xab, 0xd0, 0x0f, 0x79, 0x4c, 0x99, 0x4c, 0xd8, 0x14, + 0x26, 0x5a, 0xd4, 0x27, 0xba, 0x49, 0x7c, 0x02, 0x41, 0x55, 0xfb, 0x57, 0xe2, 0x5d, 0xea, 0x93, + 0x15, 0xe2, 0x93, 0xea, 0x78, 0x0b, 0x7e, 0x85, 0xaa, 0xb9, 0xc7, 0x9f, 0x46, 0x35, 0x97, 0xcc, + 0x50, 0xfd, 0x15, 0xf4, 0x2a, 0x53, 0xcd, 0xda, 0x83, 0xac, 0xf9, 0x56, 0x5a, 0xf3, 0x89, 0x2c, + 0xcd, 0x4c, 0x30, 0x43, 0xf1, 0x37, 0x15, 0x68, 0xc4, 0xeb, 0x4e, 0xd3, 0x32, 0xba, 0x6b, 0x8e, + 0xbb, 0x64, 0x18, 0x4e, 0xc7, 0x0e, 0x1b, 0x71, 0x09, 0x8d, 0xbb, 0xd4, 0x73, 0x3a, 0xae, 0x21, + 0xba, 0x70, 0xf8, 0x8c, 0x57, 0xd1, 0x67, 0xdb, 0xae, 0x65, 0x1b, 0x56, 0x9b, 0x34, 0x75, 0x62, + 0x9a, 0x2e, 0xf5, 0x3c, 0x5e, 0x47, 0xcb, 0xb3, 0x1f, 0xbd, 0x3f, 0x3f, 0x03, 0xc9, 0x5c, 0xe2, + 0x6f, 0x1e, 0xfa, 0xae, 0x65, 0x37, 0xaa, 0xd3, 0xa1, 0x08, 0x8c, 0xab, 0x9b, 0xe2, 0x3c, 0x90, + 0x82, 0x00, 0x4e, 0x5e, 0x41, 0x63, 0x6d, 0xf6, 0x0e, 0x3c, 0x3c, 0x2a, 0x7b, 0x18, 0x9d, 0x98, + 0xca, 0x5c, 0x41, 0x15, 0x26, 0xab, 0x1f, 0x0b, 0xdf, 0x36, 0xa9, 0x6b, 0xd5, 0xbb, 0xeb, 0xe1, + 0x44, 0xe1, 0xdb, 0x65, 0x34, 0xee, 0xb4, 0xa9, 0x4b, 0x7c, 0xc7, 0xe5, 0xbe, 0xe5, 0xc0, 0x0e, + 0x67, 0x16, 0x2e, 0xe2, 0xe4, 0xd6, 0x34, 0x9a, 0xdc, 0x9a, 0xf0, 0x32, 0x9a, 0x24, 0x46, 0x50, + 0xbb, 0x7a, 0x70, 0xfa, 0x9a, 0xdd, 0x7f, 0x5c, 0x39, 0x73, 0x30, 0x9e, 0x36, 0xc9, 0xa9, 0x25, + 0x36, 0x73, 0xa3, 0xdb, 0xa6, 0x55, 0x44, 0xc2, 0xdf, 0x61, 0xd0, 0xd2, 0xbe, 0x45, 0x41, 0xa3, + 0xf5, 0x3a, 0x35, 0x7c, 0xe6, 0xda, 0xc1, 0xbe, 0x41, 0x5b, 0x65, 0x93, 0xaa, 0x30, 0x59, 0x7d, + 0x02, 0x95, 0x16, 0x6c, 0x3d, 0x7c, 0x83, 0x82, 0x60, 0x2d, 0xa2, 0x49, 0xb6, 0x87, 0xe9, 0xce, + 0xb6, 0x4d, 0x8b, 0xe3, 0x85, 0xd8, 0xe4, 0xfb, 0xc1, 0x5c, 0x7c, 0x14, 0xf1, 0x27, 0x39, 0x60, + 0x13, 0x6c, 0x84, 0x35, 0xbd, 0x4d, 0xe9, 0x88, 0x02, 0x26, 0xc1, 0x87, 0x1b, 0x42, 0x50, 0xda, + 0xe5, 0x8e, 0xf6, 0x2d, 0x6f, 0xd6, 0x63, 0xb8, 0x5e, 0xb6, 0xbb, 0xfd, 0x50, 0x01, 0xc5, 0x41, + 0x07, 0x63, 0x33, 0x86, 0xde, 0xd0, 0x13, 0x41, 0x19, 0x19, 0x3c, 0x28, 0xea, 0x4f, 0xe5, 0xfd, + 0x46, 0xa0, 0x03, 0xbf, 0x6f, 0x67, 0xc0, 0xfb, 0x34, 0xbd, 0x11, 0xdf, 0x12, 0xf8, 0x78, 0x9b, + 0x1e, 0x61, 0x6d, 0xba, 0x20, 0x82, 0x28, 0x8c, 0xa0, 0xa7, 0xfe, 0x5a, 0x41, 0x87, 0xe3, 0xb9, + 0xb9, 0x4b, 0x5b, 0x35, 0xea, 0x8a, 0x38, 0x5e, 0x40, 0x63, 0x2d, 0x36, 0x50, 0x58, 0x0f, 0x30, + 0x6f, 0x0f, 0x11, 0x4b, 0x94, 0xd1, 0x68, 0xb2, 0x8c, 0xa8, 0x74, 0xa4, 0x8c, 0x41, 0x0d, 0xcf, + 0x4c, 0x53, 0x5c, 0x5c, 0x42, 0x9c, 0xe8, 0xc3, 0xd2, 0xb2, 0x90, 0x35, 0x70, 0xc4, 0xfc, 0x41, + 0xad, 0xc3, 0xa1, 0x37, 0xec, 0x56, 0xb1, 0x55, 0x92, 0xd7, 0x2e, 0xcf, 0x23, 0x1c, 0xb5, 0x4b, + 0x48, 0x8b, 0xd8, 0x77, 0xa3, 0xae, 0xc8, 0x13, 0x61, 0xaa, 0x1b, 0x10, 0xf9, 0xa4, 0x9d, 0xbd, + 0xf5, 0xc4, 0x2b, 0xb0, 0x24, 0xf8, 0x70, 0xe2, 0xb8, 0xce, 0xe7, 0x48, 0xc7, 0x75, 0x3e, 0x50, + 0x31, 0xd5, 0x75, 0xa8, 0x55, 0x59, 0x6c, 0x6f, 0x40, 0x7e, 0xac, 0xc0, 0x67, 0xe5, 0x1d, 0xc7, + 0xd8, 0x5a, 0xa3, 0x34, 0x5a, 0x99, 0x41, 0x90, 0x5a, 0xc4, 0xed, 0xea, 0x5e, 0x3b, 0xdc, 0x54, + 0x94, 0x01, 0x36, 0x95, 0x40, 0xe6, 0x61, 0x1b, 0xc6, 0x03, 0x77, 0x0c, 0x97, 0x12, 0x9f, 0xea, + 0xc4, 0x67, 0x31, 0x1e, 0xad, 0x8e, 0xf3, 0x81, 0x25, 0x1f, 0x9f, 0x40, 0x53, 0x6d, 0xd2, 0x6d, + 0x3a, 0xc4, 0xd4, 0x3d, 0xeb, 0x1d, 0x5e, 0x4b, 0xfb, 0xab, 0x93, 0x30, 0xf6, 0xd0, 0x7a, 0x87, + 0xaa, 0x4d, 0x34, 0x13, 0x87, 0x07, 0xee, 0x6e, 0xa0, 0x31, 0xd2, 0x0a, 0x76, 0x27, 0xc0, 0x74, + 0x23, 0xf8, 0x7e, 0xfc, 0xf8, 0x93, 0x63, 0xa7, 0x1a, 0x96, 0xff, 0xb8, 0x53, 0x2b, 0x1b, 0x4e, + 0x0b, 0x58, 0x03, 0xf8, 0x33, 0xef, 0x99, 0x5b, 0xf0, 0x95, 0x5d, 0xb1, 0xfd, 0x8f, 0xde, 0x9f, + 0x47, 0xe0, 0x41, 0xc5, 0xf6, 0xab, 0xa0, 0x4b, 0xbd, 0x25, 0x2d, 0x33, 0x7e, 0xbe, 0x58, 0x7d, + 0xe6, 0xbb, 0x64, 0xe0, 0x8f, 0x4f, 0xb9, 0xf6, 0x63, 0xf2, 0x61, 0xed, 0x23, 0x1a, 0x0c, 0xc8, + 0x8d, 0xf4, 0x54, 0x56, 0x1b, 0xa8, 0xd8, 0x3e, 0x75, 0x6d, 0xd2, 0x94, 0x8e, 0xdb, 0x13, 0x4c, + 0x92, 0x75, 0xd4, 0x9b, 0x50, 0xfb, 0x15, 0x6f, 0xdd, 0xb5, 0x0c, 0xfa, 0xd6, 0x63, 0x62, 0x37, + 0xa8, 0x39, 0x30, 0xca, 0xff, 0x1c, 0x00, 0x37, 0x93, 0xf2, 0x80, 0x72, 0x16, 0x1d, 0x30, 0xf8, + 0x10, 0x13, 0x1e, 0xaf, 0x8a, 0x47, 0xfc, 0x36, 0xc2, 0x46, 0xc7, 0x75, 0xa9, 0xed, 0xeb, 0x2e, + 0x25, 0xa6, 0xde, 0x0e, 0xc4, 0xa1, 0x79, 0xec, 0x26, 0x03, 0x2b, 0xd4, 0x90, 0x32, 0xb0, 0x42, + 0x8d, 0xea, 0x34, 0xe8, 0xad, 0x52, 0x62, 0x32, 0x50, 0x78, 0x07, 0x1d, 0x16, 0xb6, 0xc2, 0x4a, + 0xf4, 0x1d, 0x97, 0x82, 0xd1, 0xd1, 0x21, 0x18, 0x9d, 0x05, 0x03, 0xeb, 0x50, 0xb5, 0x81, 0x7a, + 0x6e, 0xfc, 0x1b, 0xe8, 0xa8, 0x30, 0xee, 0x51, 0xc3, 0xb1, 0xcd, 0xa4, 0xf9, 0xfd, 0x43, 0x30, + 0x5f, 0x02, 0x13, 0x0f, 0x85, 0x05, 0x09, 0x40, 0x17, 0x89, 0xb7, 0xfa, 0x53, 0xd2, 0xb4, 0xcc, + 0xe0, 0xc8, 0xa3, 0xfb, 0xe4, 0x99, 0xee, 0x12, 0x9f, 0xce, 0xbe, 0x34, 0x04, 0xeb, 0xaf, 0x83, + 0xfe, 0x4d, 0xa1, 0x7e, 0x83, 0x3c, 0xab, 0x12, 0x9f, 0xe2, 0x1a, 0x3a, 0x68, 0xd3, 0x6d, 0x39, + 0xc1, 0x63, 0x43, 0x30, 0x37, 0x65, 0xd3, 0xed, 0x28, 0xb9, 0x1e, 0x7a, 0x3d, 0xb0, 0x91, 0x95, + 0xd8, 0x03, 0x43, 0x30, 0x36, 0x63, 0xd3, 0xed, 0x74, 0x52, 0xb7, 0xd1, 0xa1, 0xc0, 0x68, 0x76, + 0x42, 0xc7, 0x87, 0x60, 0xf6, 0x35, 0x9b, 0x6e, 0x67, 0x25, 0xf3, 0x09, 0x0a, 0xde, 0x64, 0x25, + 0x72, 0x62, 0x08, 0x56, 0x5f, 0xb1, 0xe9, 0x76, 0x32, 0x89, 0x61, 0x27, 0x7b, 0xd0, 0x71, 0x7c, + 0xfa, 0xe5, 0xb6, 0x49, 0x7c, 0xba, 0x61, 0xb5, 0xe8, 0xc0, 0x3d, 0xe2, 0x3a, 0x74, 0xb2, 0x94, + 0x3c, 0xf4, 0x88, 0xc3, 0x68, 0xa2, 0xc3, 0x46, 0x83, 0xbe, 0x3e, 0xc6, 0xfb, 0x3a, 0x1f, 0x58, + 0xf2, 0x55, 0x1b, 0x0e, 0xc5, 0xd2, 0xe6, 0xed, 0xad, 0x3e, 0xb3, 0x3c, 0x5f, 0xfa, 0x30, 0x0c, + 0x37, 0x5e, 0xf8, 0x30, 0xe4, 0xa7, 0x1d, 0x13, 0x2f, 0xa0, 0x03, 0xfc, 0x60, 0xc0, 0x8f, 0x49, + 0x79, 0xbb, 0x8d, 0x98, 0xa8, 0xbe, 0xa7, 0x00, 0x17, 0x99, 0x61, 0x10, 0xf0, 0x6e, 0xa2, 0x31, + 0x1a, 0x0c, 0x88, 0x6f, 0xe4, 0x5b, 0x59, 0x5d, 0x37, 0x5f, 0x47, 0x99, 0x3d, 0x79, 0xab, 0xb6, + 0xef, 0x76, 0xab, 0xa0, 0xad, 0xb4, 0x88, 0x26, 0xa5, 0x61, 0x3c, 0x8d, 0x46, 0xb7, 0x68, 0x17, + 0x7c, 0x0a, 0x7e, 0xe2, 0x19, 0xf4, 0xd2, 0x53, 0xd2, 0xec, 0xf0, 0x2e, 0x39, 0x5e, 0xe5, 0x0f, + 0xd7, 0x46, 0xae, 0x2a, 0x6a, 0x07, 0x36, 0x73, 0x7e, 0xe8, 0x8c, 0xc5, 0x67, 0x0f, 0x87, 0xfc, + 0x63, 0x42, 0x34, 0x48, 0x2c, 0xc4, 0x10, 0x26, 0x04, 0x89, 0xf5, 0xd4, 0x6b, 0x50, 0x19, 0x92, + 0xd9, 0xc4, 0xf9, 0x43, 0xa4, 0x86, 0xc7, 0x6a, 0xa2, 0x3a, 0x0e, 0xb9, 0xf1, 0xd4, 0x5f, 0x0a, + 0x32, 0x22, 0x86, 0x19, 0x42, 0xbc, 0x9e, 0x08, 0xf1, 0xd5, 0xfc, 0x10, 0xff, 0x5f, 0x83, 0xbb, + 0xf0, 0xa7, 0x93, 0xe8, 0x25, 0x66, 0x0b, 0xf7, 0xd0, 0x18, 0xe7, 0x98, 0xf1, 0xa9, 0xbe, 0x80, + 0x62, 0x4c, 0x7b, 0xe9, 0x74, 0xe1, 0x3c, 0x8e, 0x59, 0x55, 0xdf, 0xfd, 0xe7, 0x7f, 0xbf, 0x37, + 0x72, 0x04, 0x97, 0xb4, 0xbe, 0xf7, 0x02, 0xf8, 0xb7, 0xe2, 0xeb, 0x27, 0xc5, 0x93, 0xe3, 0x8b, + 0x05, 0x76, 0xd2, 0x94, 0x7c, 0x69, 0x61, 0x37, 0x22, 0x80, 0xb2, 0xcc, 0x50, 0x9e, 0xc1, 0xa7, + 0xfa, 0xa3, 0xd4, 0x76, 0x42, 0x5e, 0xbf, 0x87, 0x7f, 0xa4, 0x20, 0x14, 0x1d, 0x60, 0xf0, 0xd9, + 0xbe, 0x26, 0x53, 0xec, 0x7c, 0xe9, 0xdc, 0x40, 0x73, 0x01, 0xd7, 0x15, 0x86, 0x4b, 0xc3, 0xf3, + 0x59, 0xb8, 0x1e, 0x07, 0xbb, 0x0f, 0xef, 0x47, 0xda, 0x8e, 0xd4, 0xaa, 0x7a, 0xf8, 0x57, 0x0a, + 0x3a, 0x18, 0x27, 0xf7, 0x71, 0x79, 0x00, 0xb3, 0x52, 0x8d, 0xef, 0x0e, 0xe6, 0x22, 0x83, 0x79, + 0x09, 0x5f, 0x2c, 0x80, 0xa9, 0xd7, 0x82, 0x23, 0x7b, 0x08, 0xd6, 0x32, 0x7b, 0xf8, 0x07, 0x0a, + 0xfa, 0x4c, 0xa4, 0xf1, 0xde, 0xda, 0x06, 0x7e, 0xa3, 0xaf, 0xe5, 0x88, 0x36, 0x2b, 0xf5, 0x8f, + 0x78, 0x8a, 0x2d, 0x53, 0x3f, 0xcf, 0xd0, 0x5d, 0xc0, 0xe5, 0x22, 0x74, 0x76, 0xdd, 0xd7, 0x76, + 0x04, 0x1b, 0xd7, 0xc3, 0xbf, 0x81, 0x24, 0x73, 0xaa, 0xab, 0x20, 0xc9, 0xb1, 0x3b, 0x81, 0x82, + 0xe8, 0xc5, 0x19, 0x72, 0xf5, 0x2d, 0x86, 0xef, 0x26, 0xbe, 0xde, 0x17, 0x1f, 0x27, 0x64, 0xe2, + 0x49, 0xd6, 0x76, 0x24, 0xe6, 0x26, 0x4a, 0x79, 0x74, 0xb9, 0x51, 0x90, 0xf2, 0xd4, 0x2d, 0xc8, + 0xee, 0x40, 0x17, 0xa7, 0x1c, 0xe0, 0x41, 0xca, 0xc3, 0xfb, 0x95, 0x1e, 0xfe, 0x8b, 0x82, 0xa6, + 0x93, 0xd7, 0x05, 0xf8, 0x42, 0xae, 0xf1, 0x8c, 0x7b, 0x97, 0xd2, 0xc5, 0x5d, 0x48, 0x00, 0xe8, + 0x2f, 0x31, 0xd0, 0x2b, 0x78, 0xb9, 0x2f, 0x68, 0x8f, 0x89, 0x0d, 0x12, 0x70, 0x51, 0xb8, 0x21, + 0x85, 0xba, 0xd7, 0xc2, 0x4d, 0x71, 0xb1, 0x03, 0x14, 0xae, 0x40, 0x14, 0x2f, 0xdc, 0xef, 0x2a, + 0x68, 0x52, 0xba, 0xc3, 0xc0, 0xfd, 0x13, 0x9b, 0xbe, 0x4d, 0x29, 0x9d, 0x1f, 0x6c, 0x32, 0x40, + 0x3c, 0xc3, 0x20, 0xaa, 0xf8, 0x78, 0x16, 0xc4, 0xa6, 0xe5, 0xf9, 0xb0, 0xb6, 0x3c, 0xfc, 0x13, + 0x00, 0x05, 0xfc, 0x7c, 0x01, 0xa8, 0xf8, 0xad, 0x46, 0x01, 0xa8, 0x04, 0xe5, 0x9f, 0x1f, 0x37, + 0x06, 0x8a, 0xc7, 0xcd, 0x4b, 0xb4, 0xcd, 0x3f, 0x2b, 0xe8, 0xd5, 0xcc, 0xdb, 0x0c, 0x7c, 0x65, + 0x10, 0xfb, 0xa9, 0xdb, 0x8f, 0x5d, 0xc2, 0x5e, 0x62, 0xb0, 0xaf, 0xe3, 0xc5, 0x22, 0xd8, 0xc1, + 0x9a, 0x0a, 0x5b, 0x68, 0xac, 0x9b, 0x7e, 0x5f, 0x41, 0x53, 0x21, 0xa9, 0x34, 0x70, 0x4d, 0xbe, + 0x99, 0x7f, 0x0a, 0x91, 0x4b, 0xb2, 0x78, 0x43, 0x82, 0x93, 0x55, 0xbc, 0x22, 0xff, 0xae, 0x00, + 0x57, 0x9b, 0x24, 0xce, 0x73, 0xd6, 0x7d, 0x1f, 0x9a, 0x3f, 0x67, 0xdd, 0xf7, 0x63, 0xe5, 0xd5, + 0xbb, 0x0c, 0xf5, 0x6d, 0xbc, 0x9a, 0xb9, 0xbd, 0x73, 0x2a, 0xa9, 0xee, 0xb8, 0x3a, 0xe1, 0x72, + 0xda, 0x8e, 0x20, 0xc2, 0x7a, 0xda, 0x4e, 0xea, 0xda, 0xa0, 0x87, 0xff, 0xa1, 0xa0, 0xe9, 0x24, + 0x99, 0x9d, 0xe3, 0x48, 0x1f, 0x4e, 0x3f, 0xc7, 0x91, 0x7e, 0x4c, 0xb9, 0xba, 0xc1, 0x1c, 0xb9, + 0x87, 0xef, 0x64, 0x39, 0xf2, 0x94, 0x49, 0xe9, 0xd2, 0xff, 0x65, 0xec, 0x88, 0x9b, 0x80, 0x5e, + 0xb2, 0x95, 0x49, 0xa4, 0x7e, 0x0f, 0xff, 0x5c, 0x41, 0x13, 0x61, 0xd5, 0xe0, 0x37, 0x73, 0xfb, + 0xaa, 0x4c, 0x21, 0x96, 0xce, 0x0e, 0x32, 0x75, 0x90, 0xea, 0x8e, 0x2a, 0x47, 0xdb, 0x91, 0x4e, + 0xf5, 0x3d, 0xf1, 0xc4, 0xd7, 0x67, 0x70, 0xea, 0x8a, 0x28, 0xe8, 0x9c, 0x0d, 0x39, 0xc5, 0xa2, + 0x97, 0xce, 0x0d, 0x34, 0x77, 0x90, 0x22, 0x67, 0x0b, 0x91, 0xa1, 0xf2, 0xe2, 0x58, 0xf1, 0xcf, + 0x14, 0xf4, 0x72, 0x82, 0xd1, 0xc5, 0x5a, 0x71, 0x84, 0x62, 0x34, 0x75, 0xe9, 0xc2, 0xe0, 0x02, + 0x80, 0x76, 0x9e, 0xa1, 0x3d, 0x8d, 0x3f, 0x57, 0xb0, 0x24, 0x81, 0xd5, 0xfe, 0xab, 0x60, 0x33, + 0xe3, 0x6c, 0x6d, 0xce, 0x69, 0x21, 0x93, 0x3e, 0x2e, 0x69, 0x03, 0xcf, 0x07, 0x9c, 0x77, 0x18, + 0xce, 0x35, 0xbc, 0x52, 0xb0, 0x08, 0xa1, 0x0c, 0x32, 0x97, 0xa0, 0xf8, 0xec, 0xea, 0x05, 0xdb, + 0xc9, 0xcb, 0x09, 0x9e, 0x37, 0xa7, 0x20, 0x52, 0x1c, 0x72, 0x4e, 0x41, 0xa4, 0x89, 0x63, 0xf5, + 0x32, 0x83, 0x5e, 0xc6, 0xe7, 0x73, 0xa0, 0xc3, 0x39, 0x27, 0x24, 0xa6, 0x7b, 0xf8, 0x5b, 0x0a, + 0x9a, 0x92, 0x89, 0x59, 0xdc, 0xff, 0xa3, 0x29, 0xce, 0x2c, 0x97, 0xce, 0x14, 0x4f, 0x04, 0x64, + 0x27, 0x19, 0xb2, 0x39, 0x7c, 0x24, 0xb3, 0x54, 0x1d, 0x63, 0x4b, 0xaf, 0x53, 0x8a, 0x7f, 0x07, + 0x95, 0x29, 0xf1, 0xad, 0x05, 0x95, 0x99, 0x66, 0x76, 0x0b, 0x2a, 0x33, 0x83, 0xca, 0x55, 0xaf, + 0x33, 0x70, 0x57, 0xf0, 0xa5, 0xa2, 0x83, 0x37, 0xa3, 0x6d, 0x13, 0x9b, 0xf1, 0xef, 0x45, 0x9d, + 0xc6, 0x19, 0xd8, 0x9c, 0x3a, 0xcd, 0xa4, 0x7a, 0x73, 0xea, 0x34, 0x9b, 0xda, 0x55, 0xaf, 0x31, + 0xd4, 0x97, 0xf1, 0x42, 0x16, 0x6a, 0xcb, 0xe3, 0x5c, 0x98, 0x0e, 0x74, 0x6f, 0x02, 0xf4, 0x1f, + 0x14, 0xe0, 0xe2, 0x1f, 0x74, 0x1c, 0x9f, 0x44, 0x9c, 0x50, 0x4e, 0xb4, 0xb3, 0xd9, 0xa7, 0x9c, + 0x68, 0xf7, 0xa1, 0x9b, 0xf2, 0xa3, 0xfd, 0x24, 0xc0, 0xa3, 0x03, 0x1d, 0x15, 0x7c, 0xc8, 0x26, + 0x80, 0xff, 0x4d, 0x7c, 0x82, 0xa7, 0xa8, 0x9d, 0x9c, 0x4f, 0xf0, 0x7e, 0xdc, 0x55, 0xce, 0x27, + 0x78, 0x5f, 0xe6, 0x48, 0x5d, 0x61, 0xf0, 0x6f, 0xe1, 0x1b, 0x59, 0xf0, 0xe5, 0x0e, 0xe6, 0xe9, + 0x8c, 0xfa, 0x10, 0xcd, 0xd7, 0x32, 0x7b, 0xda, 0x0e, 0xbc, 0xe9, 0xe1, 0xf7, 0x14, 0x34, 0x9d, + 0xe4, 0x4f, 0x72, 0x8e, 0x9a, 0x69, 0x5e, 0x29, 0xe7, 0xcc, 0x96, 0x41, 0xc9, 0x0c, 0x80, 0x3a, + 0x01, 0x37, 0xbd, 0xaf, 0x79, 0xbd, 0x60, 0x7d, 0xce, 0x64, 0x11, 0x4e, 0x39, 0x65, 0x93, 0x4d, + 0x4d, 0xed, 0x12, 0x7d, 0x6e, 0xa9, 0xcb, 0xe8, 0x45, 0x77, 0x0b, 0x69, 0xaf, 0xde, 0x72, 0xe5, + 0x83, 0xe7, 0x73, 0xca, 0x87, 0xcf, 0xe7, 0x94, 0x7f, 0x3f, 0x9f, 0x53, 0xbe, 0xf3, 0x62, 0x6e, + 0xdf, 0x87, 0x2f, 0xe6, 0xf6, 0xfd, 0xeb, 0xc5, 0xdc, 0xbe, 0x47, 0x9a, 0x44, 0xd1, 0xd6, 0xec, + 0xda, 0xbc, 0xf1, 0x98, 0x58, 0xb6, 0x6c, 0xe1, 0x59, 0xfc, 0xff, 0x3e, 0x6b, 0x63, 0xec, 0x7f, + 0x3a, 0x2f, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x5f, 0xea, 0x4b, 0x33, 0x31, 0x2b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2468,6 +2570,8 @@ type QueryClient interface { HeadObject(ctx context.Context, in *QueryHeadObjectRequest, opts ...grpc.CallOption) (*QueryHeadObjectResponse, error) // Queries an object by id HeadObjectById(ctx context.Context, in *QueryHeadObjectByIdRequest, opts ...grpc.CallOption) (*QueryHeadObjectResponse, error) + // Queries a shadow object with specify name. + HeadShadowObject(ctx context.Context, in *QueryHeadShadowObjectRequest, opts ...grpc.CallOption) (*QueryHeadShadowObjectResponse, error) // Queries a object with EIP712 standard metadata info HeadObjectNFT(ctx context.Context, in *QueryNFTRequest, opts ...grpc.CallOption) (*QueryObjectNFTResponse, error) // Queries a list of bucket items. @@ -2579,6 +2683,15 @@ func (c *queryClient) HeadObjectById(ctx context.Context, in *QueryHeadObjectByI return out, nil } +func (c *queryClient) HeadShadowObject(ctx context.Context, in *QueryHeadShadowObjectRequest, opts ...grpc.CallOption) (*QueryHeadShadowObjectResponse, error) { + out := new(QueryHeadShadowObjectResponse) + err := c.cc.Invoke(ctx, "/greenfield.storage.Query/HeadShadowObject", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) HeadObjectNFT(ctx context.Context, in *QueryNFTRequest, opts ...grpc.CallOption) (*QueryObjectNFTResponse, error) { out := new(QueryObjectNFTResponse) err := c.cc.Invoke(ctx, "/greenfield.storage.Query/HeadObjectNFT", in, out, opts...) @@ -2766,6 +2879,8 @@ type QueryServer interface { HeadObject(context.Context, *QueryHeadObjectRequest) (*QueryHeadObjectResponse, error) // Queries an object by id HeadObjectById(context.Context, *QueryHeadObjectByIdRequest) (*QueryHeadObjectResponse, error) + // Queries a shadow object with specify name. + HeadShadowObject(context.Context, *QueryHeadShadowObjectRequest) (*QueryHeadShadowObjectResponse, error) // Queries a object with EIP712 standard metadata info HeadObjectNFT(context.Context, *QueryNFTRequest) (*QueryObjectNFTResponse, error) // Queries a list of bucket items. @@ -2831,6 +2946,9 @@ func (*UnimplementedQueryServer) HeadObject(ctx context.Context, req *QueryHeadO func (*UnimplementedQueryServer) HeadObjectById(ctx context.Context, req *QueryHeadObjectByIdRequest) (*QueryHeadObjectResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method HeadObjectById not implemented") } +func (*UnimplementedQueryServer) HeadShadowObject(ctx context.Context, req *QueryHeadShadowObjectRequest) (*QueryHeadShadowObjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HeadShadowObject not implemented") +} func (*UnimplementedQueryServer) HeadObjectNFT(ctx context.Context, req *QueryNFTRequest) (*QueryObjectNFTResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method HeadObjectNFT not implemented") } @@ -3019,6 +3137,24 @@ func _Query_HeadObjectById_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } +func _Query_HeadShadowObject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryHeadShadowObjectRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).HeadShadowObject(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/greenfield.storage.Query/HeadShadowObject", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).HeadShadowObject(ctx, req.(*QueryHeadShadowObjectRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_HeadObjectNFT_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryNFTRequest) if err := dec(in); err != nil { @@ -3393,6 +3529,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "HeadObjectById", Handler: _Query_HeadObjectById_Handler, }, + { + MethodName: "HeadShadowObject", + Handler: _Query_HeadShadowObject_Handler, + }, { MethodName: "HeadObjectNFT", Handler: _Query_HeadObjectNFT_Handler, @@ -3753,6 +3893,43 @@ func (m *QueryHeadObjectByIdRequest) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *QueryHeadShadowObjectRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryHeadShadowObjectRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryHeadShadowObjectRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ObjectName) > 0 { + i -= len(m.ObjectName) + copy(dAtA[i:], m.ObjectName) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ObjectName))) + i-- + dAtA[i] = 0x12 + } + if len(m.BucketName) > 0 { + i -= len(m.BucketName) + copy(dAtA[i:], m.BucketName) + i = encodeVarintQuery(dAtA, i, uint64(len(m.BucketName))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *QueryHeadObjectResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3800,6 +3977,41 @@ func (m *QueryHeadObjectResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } +func (m *QueryHeadShadowObjectResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryHeadShadowObjectResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryHeadShadowObjectResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ObjectInfo != nil { + { + size, err := m.ObjectInfo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *QueryListBucketsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5342,6 +5554,23 @@ func (m *QueryHeadObjectByIdRequest) Size() (n int) { return n } +func (m *QueryHeadShadowObjectRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.BucketName) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ObjectName) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + func (m *QueryHeadObjectResponse) Size() (n int) { if m == nil { return 0 @@ -5359,6 +5588,19 @@ func (m *QueryHeadObjectResponse) Size() (n int) { return n } +func (m *QueryHeadShadowObjectResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ObjectInfo != nil { + l = m.ObjectInfo.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + func (m *QueryListBucketsRequest) Size() (n int) { if m == nil { return 0 @@ -6664,6 +6906,120 @@ func (m *QueryHeadObjectByIdRequest) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryHeadShadowObjectRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryHeadShadowObjectRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryHeadShadowObjectRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BucketName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BucketName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ObjectName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *QueryHeadObjectResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -6786,6 +7142,92 @@ func (m *QueryHeadObjectResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryHeadShadowObjectResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryHeadShadowObjectResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryHeadShadowObjectResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectInfo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ObjectInfo == nil { + m.ObjectInfo = &ShadowObjectInfo{} + } + if err := m.ObjectInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *QueryListBucketsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/storage/types/query.pb.gw.go b/x/storage/types/query.pb.gw.go index 01729c4be..e440477e4 100644 --- a/x/storage/types/query.pb.gw.go +++ b/x/storage/types/query.pb.gw.go @@ -398,6 +398,82 @@ func local_request_Query_HeadObjectById_0(ctx context.Context, marshaler runtime } +func request_Query_HeadShadowObject_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryHeadShadowObjectRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["bucket_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "bucket_name") + } + + protoReq.BucketName, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "bucket_name", err) + } + + val, ok = pathParams["object_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "object_name") + } + + protoReq.ObjectName, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "object_name", err) + } + + msg, err := client.HeadShadowObject(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_HeadShadowObject_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryHeadShadowObjectRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["bucket_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "bucket_name") + } + + protoReq.BucketName, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "bucket_name", err) + } + + val, ok = pathParams["object_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "object_name") + } + + protoReq.ObjectName, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "object_name", err) + } + + msg, err := server.HeadShadowObject(ctx, &protoReq) + return msg, metadata, err + +} + func request_Query_HeadObjectNFT_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryNFTRequest var metadata runtime.ServerMetadata @@ -1769,6 +1845,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_HeadShadowObject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_HeadShadowObject_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_HeadShadowObject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_HeadObjectNFT_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2387,6 +2486,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_HeadShadowObject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_HeadShadowObject_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_HeadShadowObject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_HeadObjectNFT_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2785,6 +2904,8 @@ var ( pattern_Query_HeadObjectById_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"greenfield", "storage", "head_object_by_id", "object_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_HeadShadowObject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"greenfield", "storage", "head_shadow_object", "bucket_name", "object_name"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_HeadObjectNFT_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"greenfield", "storage", "head_object_nft", "token_id"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_ListBuckets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"greenfield", "storage", "list_buckets"}, "", runtime.AssumeColonVerbOpt(false))) @@ -2839,6 +2960,8 @@ var ( forward_Query_HeadObjectById_0 = runtime.ForwardResponseMessage + forward_Query_HeadShadowObject_0 = runtime.ForwardResponseMessage + forward_Query_HeadObjectNFT_0 = runtime.ForwardResponseMessage forward_Query_ListBuckets_0 = runtime.ForwardResponseMessage diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index a089de8cd..f235f592d 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -3189,6 +3189,231 @@ func (m *MsgSetTagResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgSetTagResponse proto.InternalMessageInfo +type MsgUpdateObjectContent struct { + // operator defines the account address of object updater + Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` + // bucket_name defines the name of the bucket where the object is stored. + BucketName string `protobuf:"bytes,2,opt,name=bucket_name,json=bucketName,proto3" json:"bucket_name,omitempty"` + // object_name defines the name of object + ObjectName string `protobuf:"bytes,3,opt,name=object_name,json=objectName,proto3" json:"object_name,omitempty"` + // payload_size defines size of the object's payload + PayloadSize uint64 `protobuf:"varint,4,opt,name=payload_size,json=payloadSize,proto3" json:"payload_size,omitempty"` + // content_type defines a standard MIME type describing the format of the object. + ContentType string `protobuf:"bytes,5,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + // expect_checksums defines a list of hashes which was generate by redundancy algorithm. + ExpectChecksums [][]byte `protobuf:"bytes,6,rep,name=expect_checksums,json=expectChecksums,proto3" json:"expect_checksums,omitempty"` +} + +func (m *MsgUpdateObjectContent) Reset() { *m = MsgUpdateObjectContent{} } +func (m *MsgUpdateObjectContent) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateObjectContent) ProtoMessage() {} +func (*MsgUpdateObjectContent) Descriptor() ([]byte, []int) { + return fileDescriptor_ddb71b028305a3cc, []int{59} +} +func (m *MsgUpdateObjectContent) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateObjectContent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateObjectContent.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateObjectContent) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateObjectContent.Merge(m, src) +} +func (m *MsgUpdateObjectContent) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateObjectContent) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateObjectContent.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateObjectContent proto.InternalMessageInfo + +func (m *MsgUpdateObjectContent) GetOperator() string { + if m != nil { + return m.Operator + } + return "" +} + +func (m *MsgUpdateObjectContent) GetBucketName() string { + if m != nil { + return m.BucketName + } + return "" +} + +func (m *MsgUpdateObjectContent) GetObjectName() string { + if m != nil { + return m.ObjectName + } + return "" +} + +func (m *MsgUpdateObjectContent) GetPayloadSize() uint64 { + if m != nil { + return m.PayloadSize + } + return 0 +} + +func (m *MsgUpdateObjectContent) GetContentType() string { + if m != nil { + return m.ContentType + } + return "" +} + +func (m *MsgUpdateObjectContent) GetExpectChecksums() [][]byte { + if m != nil { + return m.ExpectChecksums + } + return nil +} + +type MsgUpdateObjectContentResponse struct { +} + +func (m *MsgUpdateObjectContentResponse) Reset() { *m = MsgUpdateObjectContentResponse{} } +func (m *MsgUpdateObjectContentResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateObjectContentResponse) ProtoMessage() {} +func (*MsgUpdateObjectContentResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_ddb71b028305a3cc, []int{60} +} +func (m *MsgUpdateObjectContentResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateObjectContentResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateObjectContentResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateObjectContentResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateObjectContentResponse.Merge(m, src) +} +func (m *MsgUpdateObjectContentResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateObjectContentResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateObjectContentResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateObjectContentResponse proto.InternalMessageInfo + +type MsgCancelUpdateObjectContent struct { + // operator defines the account address of the operator, either the object owner or the updater + Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` + // bucket_name defines the name of the bucket + BucketName string `protobuf:"bytes,2,opt,name=bucket_name,json=bucketName,proto3" json:"bucket_name,omitempty"` + // object_name defines the name of the object + ObjectName string `protobuf:"bytes,3,opt,name=object_name,json=objectName,proto3" json:"object_name,omitempty"` +} + +func (m *MsgCancelUpdateObjectContent) Reset() { *m = MsgCancelUpdateObjectContent{} } +func (m *MsgCancelUpdateObjectContent) String() string { return proto.CompactTextString(m) } +func (*MsgCancelUpdateObjectContent) ProtoMessage() {} +func (*MsgCancelUpdateObjectContent) Descriptor() ([]byte, []int) { + return fileDescriptor_ddb71b028305a3cc, []int{61} +} +func (m *MsgCancelUpdateObjectContent) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCancelUpdateObjectContent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCancelUpdateObjectContent.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCancelUpdateObjectContent) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCancelUpdateObjectContent.Merge(m, src) +} +func (m *MsgCancelUpdateObjectContent) XXX_Size() int { + return m.Size() +} +func (m *MsgCancelUpdateObjectContent) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCancelUpdateObjectContent.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCancelUpdateObjectContent proto.InternalMessageInfo + +func (m *MsgCancelUpdateObjectContent) GetOperator() string { + if m != nil { + return m.Operator + } + return "" +} + +func (m *MsgCancelUpdateObjectContent) GetBucketName() string { + if m != nil { + return m.BucketName + } + return "" +} + +func (m *MsgCancelUpdateObjectContent) GetObjectName() string { + if m != nil { + return m.ObjectName + } + return "" +} + +type MsgCancelUpdateObjectContentResponse struct { +} + +func (m *MsgCancelUpdateObjectContentResponse) Reset() { *m = MsgCancelUpdateObjectContentResponse{} } +func (m *MsgCancelUpdateObjectContentResponse) String() string { return proto.CompactTextString(m) } +func (*MsgCancelUpdateObjectContentResponse) ProtoMessage() {} +func (*MsgCancelUpdateObjectContentResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_ddb71b028305a3cc, []int{62} +} +func (m *MsgCancelUpdateObjectContentResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCancelUpdateObjectContentResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCancelUpdateObjectContentResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCancelUpdateObjectContentResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCancelUpdateObjectContentResponse.Merge(m, src) +} +func (m *MsgCancelUpdateObjectContentResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgCancelUpdateObjectContentResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCancelUpdateObjectContentResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCancelUpdateObjectContentResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*MsgCreateBucket)(nil), "greenfield.storage.MsgCreateBucket") proto.RegisterType((*MsgCreateBucketResponse)(nil), "greenfield.storage.MsgCreateBucketResponse") @@ -3249,159 +3474,168 @@ func init() { proto.RegisterType((*MsgRejectMigrateBucketResponse)(nil), "greenfield.storage.MsgRejectMigrateBucketResponse") proto.RegisterType((*MsgSetTag)(nil), "greenfield.storage.MsgSetTag") proto.RegisterType((*MsgSetTagResponse)(nil), "greenfield.storage.MsgSetTagResponse") + proto.RegisterType((*MsgUpdateObjectContent)(nil), "greenfield.storage.MsgUpdateObjectContent") + proto.RegisterType((*MsgUpdateObjectContentResponse)(nil), "greenfield.storage.MsgUpdateObjectContentResponse") + proto.RegisterType((*MsgCancelUpdateObjectContent)(nil), "greenfield.storage.MsgCancelUpdateObjectContent") + proto.RegisterType((*MsgCancelUpdateObjectContentResponse)(nil), "greenfield.storage.MsgCancelUpdateObjectContentResponse") } func init() { proto.RegisterFile("greenfield/storage/tx.proto", fileDescriptor_ddb71b028305a3cc) } var fileDescriptor_ddb71b028305a3cc = []byte{ - // 2339 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x6c, 0x1b, 0xc7, - 0x15, 0x36, 0x45, 0x4a, 0x32, 0x1f, 0x29, 0xc9, 0x5e, 0x2b, 0x11, 0x43, 0xd5, 0x14, 0xcd, 0xb4, - 0x89, 0xfc, 0x27, 0x3a, 0xaa, 0x6b, 0xa4, 0x42, 0x51, 0x54, 0x52, 0x1a, 0x97, 0x48, 0x18, 0x2b, - 0x2b, 0xd9, 0x05, 0x02, 0x14, 0xcc, 0x90, 0x3b, 0x5e, 0x6d, 0x43, 0xee, 0x6e, 0x77, 0x96, 0xb2, - 0x99, 0x02, 0x3d, 0xf4, 0xd2, 0x53, 0x81, 0x00, 0xe9, 0xa1, 0x87, 0xa2, 0x87, 0x9e, 0x7a, 0x28, - 0x8a, 0xa2, 0xc8, 0xb9, 0xe8, 0x25, 0x80, 0xd1, 0x93, 0x91, 0x53, 0xd1, 0x83, 0x1b, 0xd8, 0x05, - 0x8a, 0x5e, 0x7b, 0xe9, 0xb5, 0x98, 0x9d, 0xd9, 0xd9, 0xe1, 0xfe, 0x52, 0xb2, 0x14, 0xeb, 0x24, - 0xed, 0xcc, 0x37, 0x33, 0xef, 0x7f, 0xde, 0x7b, 0x43, 0x58, 0xd6, 0x1d, 0x8c, 0xcd, 0xfb, 0x06, - 0xee, 0x6b, 0x4d, 0xe2, 0x5a, 0x0e, 0xd2, 0x71, 0xd3, 0x7d, 0xb8, 0x66, 0x3b, 0x96, 0x6b, 0x29, - 0x4a, 0x30, 0xb9, 0xc6, 0x27, 0xab, 0x4b, 0x3d, 0x8b, 0x0c, 0x2c, 0xd2, 0x1c, 0x10, 0xbd, 0x79, - 0xf0, 0x06, 0xfd, 0xc3, 0xc0, 0xd5, 0x57, 0xd8, 0x44, 0xc7, 0xfb, 0x6a, 0xb2, 0x0f, 0x3e, 0xb5, - 0xa8, 0x5b, 0xba, 0xc5, 0xc6, 0xe9, 0x7f, 0x7c, 0x74, 0x45, 0xb7, 0x2c, 0xbd, 0x8f, 0x9b, 0xde, - 0x57, 0x77, 0x78, 0xbf, 0xe9, 0x1a, 0x03, 0x4c, 0x5c, 0x34, 0xb0, 0x39, 0xa0, 0x2e, 0xd1, 0xd6, - 0xb3, 0x06, 0x03, 0xcb, 0x6c, 0x22, 0xdb, 0x76, 0xac, 0x03, 0xd4, 0x17, 0x5b, 0x44, 0x10, 0x0f, - 0x1c, 0x64, 0xdb, 0xd8, 0xe1, 0x80, 0x86, 0x04, 0xb0, 0xb1, 0x33, 0x30, 0x08, 0x31, 0x2c, 0x93, - 0x63, 0x63, 0x36, 0xf1, 0x45, 0x90, 0x09, 0xb0, 0x91, 0x83, 0x06, 0x3e, 0x7f, 0xb5, 0x38, 0x21, - 0x8e, 0x6c, 0xcc, 0xe7, 0x1b, 0x7f, 0xc9, 0xc3, 0x42, 0x9b, 0xe8, 0xdb, 0x0e, 0x46, 0x2e, 0xde, - 0x1a, 0xf6, 0x3e, 0xc2, 0xae, 0xb2, 0x0e, 0xb3, 0x3d, 0xfa, 0x6d, 0x39, 0x95, 0x5c, 0x3d, 0xb7, - 0x5a, 0xdc, 0xaa, 0x7c, 0xf1, 0xd9, 0xf5, 0x45, 0x2e, 0xb6, 0x4d, 0x4d, 0x73, 0x30, 0x21, 0xbb, - 0xae, 0x63, 0x98, 0xba, 0xea, 0x03, 0x95, 0x15, 0x28, 0x75, 0xbd, 0xd5, 0x1d, 0x13, 0x0d, 0x70, - 0x65, 0x8a, 0xae, 0x53, 0x81, 0x0d, 0xbd, 0x87, 0x06, 0x58, 0xd9, 0x02, 0x38, 0x30, 0x88, 0xd1, - 0x35, 0xfa, 0x86, 0x3b, 0xaa, 0xe4, 0xeb, 0xb9, 0xd5, 0xf9, 0xf5, 0xc6, 0x5a, 0x54, 0x8b, 0x6b, - 0xf7, 0x04, 0x6a, 0x6f, 0x64, 0x63, 0x55, 0x5a, 0xa5, 0x6c, 0xc2, 0x82, 0x8d, 0x46, 0x03, 0x6c, - 0xba, 0x1d, 0xc4, 0xc8, 0xa8, 0x14, 0x32, 0x08, 0x9c, 0xe7, 0x0b, 0xf8, 0xa8, 0xf2, 0x36, 0x28, - 0xb6, 0x63, 0x0c, 0x90, 0x33, 0xea, 0x10, 0x5b, 0xec, 0x32, 0x9d, 0xb1, 0xcb, 0x39, 0xbe, 0x66, - 0xd7, 0xf6, 0xf7, 0x79, 0x07, 0x2e, 0xc8, 0xfb, 0x70, 0xdd, 0x57, 0x66, 0xea, 0xb9, 0xd5, 0xd2, - 0xfa, 0xb2, 0xcc, 0x17, 0xd7, 0xd7, 0x26, 0x87, 0xa8, 0xe7, 0x83, 0xbd, 0xf8, 0x90, 0x72, 0x0d, - 0x94, 0xde, 0x3e, 0x72, 0x74, 0xac, 0x75, 0x1c, 0x8c, 0xb4, 0xce, 0x4f, 0x86, 0x96, 0x8b, 0x2a, - 0xb3, 0xf5, 0xdc, 0x6a, 0x41, 0x3d, 0xc7, 0x67, 0x54, 0x8c, 0xb4, 0xf7, 0xe9, 0xf8, 0x46, 0xf9, - 0xe7, 0xff, 0xfe, 0xd3, 0x15, 0x5f, 0xf0, 0x8d, 0x5d, 0x58, 0x0a, 0xe9, 0x4f, 0xc5, 0xc4, 0xb6, - 0x4c, 0x82, 0x95, 0x37, 0xa1, 0xc8, 0x75, 0x62, 0x68, 0x5c, 0x93, 0xcb, 0x8f, 0x9e, 0xac, 0x9c, - 0xf9, 0xc7, 0x93, 0x95, 0xc2, 0x5d, 0xc3, 0x74, 0xbf, 0xf8, 0xec, 0x7a, 0x89, 0xb3, 0x4b, 0x3f, - 0xd5, 0xb3, 0x0c, 0xdd, 0xd2, 0x1a, 0x0f, 0x3c, 0xa3, 0x78, 0x0b, 0xf7, 0xb1, 0x30, 0x8a, 0x9b, - 0x70, 0xd6, 0xb2, 0xb1, 0x33, 0x91, 0x55, 0x08, 0x64, 0xa6, 0x59, 0x6c, 0xcc, 0x51, 0x66, 0x04, - 0xbe, 0xf1, 0x8a, 0xc7, 0x8d, 0x7c, 0xb0, 0xcf, 0x4d, 0xe3, 0x57, 0x39, 0x58, 0xa4, 0x73, 0x06, - 0xe9, 0x59, 0xa6, 0x6b, 0x98, 0xc3, 0x93, 0xa5, 0x4c, 0x79, 0x19, 0x66, 0x1c, 0x8c, 0x88, 0x65, - 0x7a, 0xc6, 0x5a, 0x54, 0xf9, 0x57, 0x98, 0xe2, 0x1a, 0x7c, 0x2d, 0x8e, 0x2a, 0x41, 0xf6, 0xbf, - 0x64, 0x07, 0xbb, 0xd3, 0xfd, 0x31, 0xee, 0x9d, 0x90, 0x83, 0xad, 0x40, 0xc9, 0xf2, 0xb6, 0x67, - 0x00, 0x46, 0x34, 0xb0, 0x21, 0x0f, 0x70, 0x09, 0xca, 0x36, 0x1a, 0xf5, 0x2d, 0xa4, 0x75, 0x88, - 0xf1, 0x31, 0xf6, 0x5c, 0xa7, 0xa0, 0x96, 0xf8, 0xd8, 0xae, 0xf1, 0x71, 0xd8, 0x49, 0xa7, 0x8f, - 0xe4, 0xa4, 0x97, 0xa0, 0x4c, 0x45, 0x41, 0x9d, 0x94, 0x06, 0x1a, 0xcf, 0x25, 0x8a, 0x6a, 0x89, - 0x8f, 0x51, 0x78, 0x92, 0xf3, 0xcc, 0x1e, 0xc9, 0x79, 0x2e, 0xc3, 0x39, 0xfc, 0xd0, 0xa6, 0x7c, - 0xf7, 0xf6, 0x71, 0xef, 0x23, 0x32, 0x1c, 0x90, 0xca, 0xd9, 0x7a, 0x7e, 0xb5, 0xac, 0x2e, 0xb0, - 0xf1, 0x6d, 0x7f, 0x58, 0x79, 0x07, 0x16, 0x1c, 0xac, 0x0d, 0x4d, 0x0d, 0x99, 0xbd, 0x11, 0xa3, - 0xae, 0x98, 0xcc, 0xa3, 0x2a, 0xa0, 0x1e, 0x8f, 0xf3, 0xce, 0xd8, 0x77, 0x8a, 0x1b, 0x32, 0x2d, - 0xcb, 0x6e, 0xc8, 0x15, 0x33, 0xa1, 0x1b, 0x32, 0x74, 0x4b, 0x6b, 0x7c, 0x3a, 0x05, 0x73, 0x6d, - 0xa2, 0xef, 0x62, 0xd4, 0xe7, 0x96, 0x73, 0x42, 0xb6, 0x9e, 0x69, 0x3b, 0xdf, 0x82, 0x25, 0xbd, - 0x6f, 0x75, 0x51, 0xbf, 0x73, 0x60, 0x38, 0xee, 0x10, 0xf5, 0x3b, 0xba, 0x63, 0x0d, 0x6d, 0xca, - 0x11, 0x35, 0xa3, 0x39, 0x75, 0x91, 0x4d, 0xdf, 0x63, 0xb3, 0xb7, 0xe9, 0x64, 0x4b, 0x53, 0xde, - 0x82, 0x15, 0x82, 0x7b, 0x96, 0xa9, 0x71, 0x55, 0x77, 0xfb, 0xa4, 0x83, 0x74, 0xbd, 0x43, 0x0c, - 0xdd, 0x44, 0xee, 0xd0, 0xc1, 0x2c, 0xf4, 0x96, 0xd5, 0x65, 0x01, 0xdb, 0xb5, 0xb7, 0xfa, 0x64, - 0x53, 0xd7, 0x77, 0x05, 0x24, 0xec, 0x71, 0x4b, 0xf0, 0xd2, 0x98, 0x50, 0x84, 0xab, 0xfd, 0x26, - 0x07, 0x17, 0xda, 0x44, 0x57, 0x31, 0x1d, 0x7d, 0xf1, 0x42, 0x0b, 0xd3, 0x7d, 0x11, 0x96, 0x63, - 0xa8, 0x13, 0xd4, 0xff, 0x91, 0x29, 0x7b, 0xdb, 0xb2, 0x47, 0x9c, 0xee, 0x6a, 0x98, 0x6e, 0x89, - 0xba, 0xd7, 0x60, 0x81, 0x38, 0xbd, 0x4e, 0x94, 0xc2, 0x39, 0xe2, 0xf4, 0xb6, 0x02, 0x22, 0x5f, - 0x83, 0x05, 0x8d, 0xb8, 0x63, 0x38, 0x46, 0xe8, 0x9c, 0x46, 0xdc, 0x71, 0x1c, 0xdd, 0x4f, 0x66, - 0xa8, 0x20, 0xf6, 0xbb, 0x13, 0x18, 0x02, 0xdf, 0x4f, 0xc6, 0x4d, 0x8b, 0xfd, 0x24, 0x9c, 0x0a, - 0x4b, 0x14, 0x77, 0xc4, 0x3b, 0x72, 0x51, 0x23, 0xee, 0x4e, 0xd8, 0xd3, 0xc3, 0xf2, 0x7c, 0xdf, - 0xb3, 0x83, 0x40, 0x5e, 0xc7, 0xe0, 0x70, 0xbf, 0xce, 0x49, 0x17, 0xdf, 0xe9, 0xb2, 0x1e, 0xf9, - 0x66, 0x0c, 0x59, 0xce, 0xe3, 0xc8, 0xcd, 0x78, 0xb2, 0xa4, 0x6f, 0x00, 0x08, 0xf9, 0x92, 0x4a, - 0xbe, 0x9e, 0xcf, 0x12, 0x70, 0xd1, 0x17, 0x30, 0x91, 0x6e, 0xd5, 0xc2, 0xa1, 0x6e, 0xd5, 0x10, - 0xcb, 0xbf, 0xc8, 0xc1, 0xbc, 0x88, 0xb7, 0x5e, 0xb4, 0x39, 0xd2, 0xa5, 0x7a, 0x11, 0x80, 0xc5, - 0x31, 0x89, 0xd3, 0xa2, 0x37, 0xe2, 0x31, 0xba, 0x08, 0xd3, 0xf8, 0xa1, 0xeb, 0x20, 0xae, 0x1d, - 0xf6, 0x11, 0x0a, 0xfc, 0x3b, 0xf0, 0xf2, 0x38, 0x21, 0xc2, 0x0c, 0x6f, 0xc1, 0x59, 0x11, 0x24, - 0x27, 0xb0, 0xc2, 0x59, 0x9d, 0x05, 0xcd, 0x86, 0xeb, 0xb1, 0xc6, 0x34, 0xcd, 0x58, 0x3b, 0x9a, - 0x1e, 0xd3, 0x99, 0x0b, 0x4b, 0xbc, 0xe2, 0xf1, 0x21, 0x9d, 0x2a, 0x64, 0xfd, 0xf9, 0x94, 0x67, - 0x5e, 0x77, 0x6d, 0xcd, 0x67, 0xb1, 0x8d, 0x07, 0x5d, 0xec, 0x1c, 0x91, 0xac, 0x6f, 0x43, 0x89, - 0x91, 0x65, 0x3d, 0x30, 0xb1, 0xc3, 0xe8, 0x4a, 0x59, 0xc8, 0x78, 0xb8, 0x43, 0xb1, 0x21, 0x8e, - 0xf2, 0x61, 0x75, 0xfd, 0x00, 0xe6, 0x07, 0x1e, 0x65, 0xa4, 0xe3, 0x5a, 0x34, 0xb7, 0xaf, 0x14, - 0xea, 0xf9, 0xd5, 0x52, 0xfc, 0xed, 0xde, 0x26, 0xba, 0xc4, 0x8b, 0x5a, 0xe6, 0x2b, 0xf7, 0xac, - 0x4d, 0x8d, 0xde, 0x5b, 0xe7, 0xa5, 0x9d, 0x34, 0x4f, 0x28, 0x95, 0x69, 0xcf, 0xd0, 0x93, 0x29, - 0x5d, 0x10, 0x5b, 0x30, 0x29, 0xc6, 0xdb, 0x74, 0x44, 0x8c, 0x42, 0xce, 0xff, 0xf5, 0xaf, 0x2f, - 0x13, 0x3f, 0x38, 0xcd, 0x62, 0xfe, 0x0e, 0xcc, 0x72, 0x4e, 0x0f, 0x21, 0x5f, 0x7f, 0x49, 0xd2, - 0xa5, 0x38, 0xce, 0xb3, 0x90, 0xc9, 0x2f, 0x99, 0x9f, 0xcb, 0xe2, 0xb8, 0x01, 0x33, 0x6c, 0xaf, - 0x4c, 0x61, 0x70, 0x9c, 0xd2, 0x02, 0x9a, 0x09, 0x1a, 0x0e, 0x72, 0x0d, 0xcb, 0xec, 0xd0, 0x52, - 0xde, 0x13, 0x47, 0x69, 0xbd, 0xba, 0xc6, 0xea, 0xfc, 0x35, 0xbf, 0xce, 0x5f, 0xdb, 0xf3, 0xeb, - 0xfc, 0xad, 0xc2, 0x27, 0xff, 0x5c, 0xc9, 0xa9, 0xf3, 0xc1, 0x42, 0x3a, 0xd5, 0xf8, 0x1b, 0xd3, - 0x91, 0xa4, 0xc4, 0xef, 0xd3, 0x98, 0x70, 0xea, 0x74, 0x24, 0x22, 0x57, 0x41, 0x8e, 0x5c, 0xb1, - 0xb2, 0x0f, 0xf3, 0x22, 0x64, 0xff, 0xfb, 0x9c, 0x97, 0x90, 0xbc, 0x8b, 0xd1, 0x01, 0x8f, 0x43, - 0x87, 0x17, 0xfd, 0x89, 0x71, 0xb8, 0x51, 0xa2, 0xbc, 0xf0, 0x63, 0x78, 0x4a, 0x18, 0x50, 0x1a, - 0x5c, 0x8d, 0x53, 0x92, 0xbe, 0x58, 0xba, 0xd3, 0x32, 0xef, 0x5b, 0x27, 0x75, 0x33, 0xbe, 0x1b, - 0x5b, 0xc8, 0xe7, 0x3d, 0x63, 0xab, 0xc5, 0x24, 0x3c, 0x77, 0x5b, 0xa6, 0x7b, 0xeb, 0xe6, 0x3d, - 0xd4, 0x1f, 0xe2, 0x68, 0xa1, 0x7f, 0x1c, 0xed, 0x8e, 0x63, 0x28, 0xe8, 0xd2, 0xac, 0x26, 0x90, - 0xa8, 0x90, 0xf8, 0x6f, 0x73, 0x2c, 0x2d, 0x43, 0x66, 0x0f, 0xf7, 0xc7, 0xaa, 0xde, 0x53, 0x92, - 0x48, 0xad, 0xc0, 0xc5, 0x58, 0xfa, 0x04, 0x07, 0x7f, 0x9d, 0x82, 0x72, 0x9b, 0xe8, 0x3b, 0x43, - 0x77, 0xc7, 0xea, 0x1b, 0xbd, 0xd1, 0x11, 0x09, 0xff, 0x2e, 0x14, 0x6d, 0xc7, 0x30, 0x7b, 0x86, - 0x8d, 0xfa, 0x3c, 0xde, 0xd4, 0x65, 0xc9, 0x07, 0x3d, 0xbf, 0xb5, 0x1d, 0x1f, 0xa7, 0x06, 0x4b, - 0x68, 0xf6, 0xef, 0x60, 0x62, 0x0d, 0x9d, 0x9e, 0xcf, 0x94, 0xf8, 0x56, 0xbe, 0x07, 0x40, 0x5c, - 0xe4, 0x62, 0xaa, 0x6a, 0x3f, 0x0a, 0x27, 0x6d, 0xbe, 0xeb, 0x03, 0x55, 0x69, 0x8d, 0xd2, 0x8e, - 0xc6, 0xc4, 0xd9, 0xcc, 0x98, 0x78, 0xf6, 0xd1, 0x93, 0x95, 0x5c, 0x5c, 0x5c, 0x0c, 0xcb, 0x78, - 0xc7, 0xcb, 0x18, 0x84, 0x04, 0xe5, 0xcc, 0xdc, 0xf6, 0x46, 0xfc, 0xc2, 0x31, 0x2b, 0x33, 0x67, - 0xe8, 0x96, 0xd6, 0xf8, 0xb3, 0x9c, 0x99, 0x9f, 0x56, 0xbd, 0x84, 0xc5, 0xb0, 0x2b, 0xe5, 0xec, - 0xc7, 0x26, 0x89, 0xff, 0x30, 0x49, 0xb4, 0x0d, 0xc7, 0xb1, 0x9c, 0xe7, 0x72, 0xad, 0xab, 0x30, - 0x65, 0x68, 0x3c, 0x26, 0xa7, 0x1e, 0x3e, 0x65, 0x68, 0x61, 0x3f, 0xcc, 0x67, 0xf9, 0x61, 0x21, - 0xd2, 0x43, 0x68, 0xc0, 0x9c, 0x86, 0x89, 0xdb, 0xe9, 0xed, 0x23, 0xc3, 0xa4, 0x6c, 0x4f, 0x7b, - 0x9d, 0x83, 0x12, 0x1d, 0xdc, 0xa6, 0x63, 0x2d, 0x2d, 0xbe, 0xe8, 0x91, 0x59, 0x15, 0x5e, 0xfa, - 0x48, 0x16, 0xc3, 0x73, 0x75, 0x02, 0x8f, 0x57, 0x0c, 0x11, 0x2e, 0x0b, 0x99, 0x5c, 0xca, 0x11, - 0x95, 0x71, 0x39, 0x16, 0x51, 0xbf, 0x94, 0x73, 0x8e, 0x60, 0xfe, 0x85, 0xf5, 0x82, 0xc6, 0xef, - 0x94, 0xc2, 0x71, 0xdc, 0x29, 0xb2, 0x9e, 0x43, 0xfd, 0xd3, 0xcf, 0x59, 0x06, 0xc8, 0xe6, 0x9e, - 0xa7, 0x1c, 0x3a, 0x94, 0x9a, 0x33, 0xd2, 0xab, 0x23, 0x28, 0x99, 0xd5, 0x57, 0x12, 0x1b, 0x82, - 0xc3, 0x4f, 0x99, 0x25, 0x33, 0xfd, 0xee, 0x78, 0x8f, 0x37, 0xca, 0x2d, 0x28, 0xa2, 0xa1, 0xbb, - 0x6f, 0x39, 0x54, 0xc4, 0x59, 0x3c, 0x06, 0x50, 0xe5, 0x4d, 0x98, 0x61, 0xcf, 0x3f, 0x41, 0x86, - 0x1b, 0xd5, 0x0b, 0x3b, 0x63, 0xab, 0x40, 0x85, 0xa0, 0x72, 0xfc, 0xc6, 0x3c, 0x25, 0x37, 0xd8, - 0x89, 0xab, 0x44, 0x26, 0x4a, 0x10, 0xfc, 0xbf, 0x1c, 0x9c, 0xf3, 0x78, 0xd1, 0x1d, 0x74, 0xc2, - 0xef, 0x03, 0xca, 0x65, 0x38, 0x1f, 0xea, 0x23, 0x19, 0x9a, 0xa7, 0x8f, 0x39, 0x75, 0x5e, 0x6e, - 0x12, 0xb5, 0xb4, 0xb4, 0x96, 0x53, 0xe1, 0x98, 0x5a, 0x4e, 0x55, 0xa8, 0x84, 0x19, 0x0f, 0x5a, - 0x12, 0x53, 0xde, 0xe4, 0xb6, 0x35, 0xb0, 0x69, 0xbc, 0xff, 0x4a, 0xa4, 0xb3, 0x05, 0xb5, 0xd8, - 0xb6, 0xec, 0x7d, 0x34, 0x30, 0xfa, 0xa3, 0x40, 0x54, 0xd5, 0x68, 0x77, 0xf6, 0x6d, 0x0f, 0xd2, - 0xd2, 0x94, 0x4d, 0x28, 0xeb, 0x07, 0x7a, 0x67, 0x80, 0x6c, 0xdb, 0x30, 0x75, 0x3f, 0x9b, 0xa8, - 0xc5, 0x19, 0xce, 0xed, 0x7b, 0xb7, 0xdb, 0x0c, 0xa6, 0x96, 0xf4, 0x03, 0x9d, 0xff, 0x1f, 0xa9, - 0xe9, 0x1a, 0x50, 0x4f, 0x12, 0x84, 0x90, 0xd6, 0xcf, 0x58, 0xdb, 0xc4, 0xcb, 0xc2, 0xbe, 0x0a, - 0x51, 0x85, 0x69, 0xac, 0x43, 0x2d, 0xfe, 0xfc, 0x10, 0x85, 0xac, 0x5d, 0xfb, 0xe2, 0x28, 0x8c, - 0x39, 0x5f, 0x50, 0xf8, 0xbb, 0x1c, 0x14, 0xbd, 0x4e, 0xb8, 0xbb, 0x87, 0xf4, 0x23, 0x52, 0x25, - 0x67, 0x33, 0x53, 0xa1, 0x2c, 0xf3, 0x26, 0x14, 0x5c, 0xa4, 0x13, 0x5e, 0xbf, 0xd4, 0xe3, 0xdf, - 0x48, 0x18, 0x76, 0x0f, 0xe9, 0x44, 0xf5, 0xd0, 0x61, 0x36, 0x2e, 0xc0, 0x79, 0x41, 0xa3, 0x4f, - 0xf9, 0xfa, 0x1f, 0x96, 0x20, 0xdf, 0x26, 0xba, 0xf2, 0x21, 0x94, 0xc7, 0x5e, 0x9e, 0x5f, 0x4d, - 0xe8, 0x24, 0xc8, 0xa0, 0xea, 0xd5, 0x09, 0x40, 0x22, 0xcf, 0xfa, 0x10, 0xca, 0x63, 0xcf, 0x98, - 0x49, 0x27, 0xc8, 0xa0, 0xc4, 0x13, 0xe2, 0xde, 0x25, 0x95, 0x3e, 0x9c, 0x8b, 0x94, 0x97, 0xaf, - 0x27, 0x6c, 0x10, 0x06, 0x56, 0x9b, 0x13, 0x02, 0x65, 0x7e, 0xc6, 0x52, 0x9e, 0x24, 0x7e, 0x64, - 0x50, 0x22, 0x3f, 0x71, 0x17, 0xae, 0x62, 0xc1, 0xf9, 0xe8, 0x1b, 0xeb, 0x6a, 0x92, 0x44, 0xc2, - 0xc8, 0xea, 0x8d, 0x49, 0x91, 0x32, 0x4b, 0x63, 0x75, 0x62, 0xba, 0x11, 0x30, 0x50, 0x86, 0x11, - 0x84, 0x1e, 0x04, 0x3e, 0x00, 0x90, 0x9e, 0x83, 0x2e, 0x25, 0x2c, 0x0d, 0x20, 0xd5, 0xcb, 0x99, - 0x10, 0x59, 0xfd, 0x91, 0x07, 0xa7, 0x24, 0xf5, 0x87, 0x81, 0x89, 0xea, 0x4f, 0x7a, 0x24, 0xa2, - 0x9c, 0x48, 0x0f, 0x44, 0x49, 0x9c, 0x04, 0x90, 0x44, 0x4e, 0x62, 0x9e, 0x4d, 0x84, 0xab, 0x64, - 0xe8, 0x41, 0x06, 0x65, 0xb8, 0x4a, 0xe8, 0x04, 0x07, 0x94, 0x98, 0xbe, 0x40, 0x22, 0x89, 0x11, - 0x68, 0xf5, 0x8d, 0x89, 0xa1, 0x51, 0x87, 0xc9, 0xe0, 0x4a, 0x06, 0x65, 0x38, 0x4c, 0xe8, 0x84, - 0x71, 0x87, 0xe1, 0xc7, 0x4c, 0xe0, 0x30, 0xfc, 0xac, 0x1b, 0x93, 0x22, 0xa3, 0x11, 0x47, 0x2a, - 0x06, 0xd2, 0x23, 0x4e, 0x00, 0xcc, 0x88, 0x38, 0xd1, 0xf2, 0x43, 0xf9, 0x11, 0x94, 0xe4, 0x67, - 0x96, 0x46, 0xaa, 0xe3, 0x79, 0x98, 0xea, 0x95, 0x6c, 0x8c, 0xbc, 0xbd, 0xfc, 0xd4, 0xd1, 0x48, - 0xb5, 0xa7, 0xf4, 0xed, 0x63, 0x1e, 0x2f, 0xa8, 0x72, 0xa2, 0x0f, 0x17, 0xab, 0xa9, 0x32, 0x90, - 0x90, 0x89, 0xca, 0x49, 0xec, 0xe2, 0x07, 0xca, 0x91, 0xba, 0xc3, 0xaf, 0x67, 0xef, 0xe2, 0x01, - 0x33, 0x94, 0x13, 0xed, 0xd1, 0xd2, 0x78, 0x20, 0xf5, 0x67, 0x93, 0xe2, 0x41, 0x00, 0x49, 0x8c, - 0x07, 0xd1, 0xde, 0x29, 0xd5, 0x8c, 0x5c, 0x75, 0x35, 0x52, 0x7d, 0x22, 0x5d, 0x33, 0x31, 0x65, - 0x0f, 0x0b, 0x9c, 0xa1, 0xa7, 0x8e, 0xe4, 0xc0, 0x39, 0x0e, 0x4c, 0x09, 0x9c, 0xf1, 0x0f, 0x09, - 0xca, 0x0f, 0xa1, 0x18, 0x34, 0xf4, 0xea, 0x09, 0xab, 0x05, 0xa2, 0xba, 0x9a, 0x85, 0x88, 0x46, - 0x4d, 0xbe, 0x77, 0x7a, 0xd4, 0xe4, 0xdb, 0x5f, 0x9d, 0x00, 0x24, 0x9f, 0x30, 0x56, 0x1b, 0xbe, - 0x9a, 0x6a, 0x24, 0x0c, 0x94, 0x78, 0x42, 0x5c, 0x41, 0xa7, 0xf4, 0x60, 0x6e, 0x3c, 0xc3, 0xfd, - 0x7a, 0xa2, 0x1e, 0x25, 0x54, 0xf5, 0xda, 0x24, 0x28, 0x71, 0xc8, 0x4f, 0xe1, 0xa5, 0xf8, 0xda, - 0xe8, 0x5a, 0xe2, 0x15, 0x15, 0x83, 0xae, 0xde, 0x3c, 0x0c, 0x5a, 0x1c, 0x3e, 0x84, 0x0b, 0x71, - 0xb5, 0xc6, 0x95, 0xd4, 0xfb, 0x64, 0xfc, 0xe0, 0xf5, 0xc9, 0xb1, 0xf2, 0xb1, 0x71, 0x05, 0xc4, - 0x95, 0xd4, 0x6b, 0x7f, 0xb2, 0x63, 0x53, 0x0a, 0x03, 0xe5, 0x3d, 0x98, 0xe1, 0x45, 0xc1, 0xc5, - 0xc4, 0x44, 0x86, 0x4e, 0x57, 0xbf, 0x91, 0x3a, 0xed, 0xef, 0xb7, 0xd5, 0x7a, 0xf4, 0xb4, 0x96, - 0x7b, 0xfc, 0xb4, 0x96, 0xfb, 0xf2, 0x69, 0x2d, 0xf7, 0xc9, 0xb3, 0xda, 0x99, 0xc7, 0xcf, 0x6a, - 0x67, 0xfe, 0xfe, 0xac, 0x76, 0xe6, 0x83, 0xa6, 0x6e, 0xb8, 0xfb, 0xc3, 0x2e, 0xad, 0xa6, 0x9b, - 0x5d, 0xb3, 0x7b, 0xdd, 0x6b, 0x88, 0x34, 0xa5, 0xdf, 0x9c, 0x3e, 0x1c, 0xff, 0xd5, 0x69, 0x77, - 0xc6, 0x6b, 0x2b, 0x7f, 0xf3, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x12, 0xe3, 0x8e, 0x56, 0xdd, - 0x2b, 0x00, 0x00, + // 2431 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4b, 0x6c, 0x1b, 0xc7, + 0x19, 0x36, 0x25, 0x4a, 0x32, 0x7f, 0xea, 0x61, 0xaf, 0x95, 0x98, 0xa6, 0x6b, 0x8a, 0x66, 0x52, + 0x47, 0x7e, 0x89, 0x8e, 0xea, 0x1a, 0xae, 0x51, 0x14, 0x95, 0x94, 0xc6, 0x25, 0x12, 0xc5, 0xca, + 0xca, 0x76, 0x81, 0x00, 0x05, 0x33, 0xe4, 0x8e, 0xd7, 0xdb, 0x90, 0xbb, 0xdb, 0x9d, 0xa5, 0x6c, + 0xa6, 0x40, 0x0f, 0xbd, 0xe4, 0x54, 0xc0, 0x40, 0x7a, 0xe8, 0xa1, 0xe8, 0xa1, 0x40, 0x81, 0x5e, + 0x5a, 0x14, 0x45, 0xce, 0x45, 0x2f, 0x01, 0x8c, 0x9e, 0x8c, 0x9c, 0x8a, 0x1e, 0xdc, 0xc0, 0x2e, + 0x50, 0xf4, 0xda, 0x4b, 0xaf, 0xc1, 0x3c, 0x76, 0x76, 0xb8, 0x4f, 0x4a, 0x96, 0x62, 0x9d, 0xa4, + 0x9d, 0xf9, 0x66, 0xe6, 0x7f, 0xcf, 0x3f, 0xff, 0x4f, 0x38, 0x6d, 0x7a, 0x18, 0xdb, 0xf7, 0x2c, + 0xdc, 0x33, 0x9a, 0xc4, 0x77, 0x3c, 0x64, 0xe2, 0xa6, 0xff, 0x70, 0xc5, 0xf5, 0x1c, 0xdf, 0xd1, + 0xb4, 0x70, 0x72, 0x45, 0x4c, 0x56, 0x4f, 0x76, 0x1d, 0xd2, 0x77, 0x48, 0xb3, 0x4f, 0xcc, 0xe6, + 0xce, 0x9b, 0xf4, 0x0f, 0x07, 0x57, 0x4f, 0xf1, 0x89, 0x36, 0xfb, 0x6a, 0xf2, 0x0f, 0x31, 0xb5, + 0x68, 0x3a, 0xa6, 0xc3, 0xc7, 0xe9, 0x7f, 0x62, 0x74, 0xc9, 0x74, 0x1c, 0xb3, 0x87, 0x9b, 0xec, + 0xab, 0x33, 0xb8, 0xd7, 0xf4, 0xad, 0x3e, 0x26, 0x3e, 0xea, 0xbb, 0x02, 0x50, 0x57, 0x68, 0xeb, + 0x3a, 0xfd, 0xbe, 0x63, 0x37, 0x91, 0xeb, 0x7a, 0xce, 0x0e, 0xea, 0xc9, 0x2d, 0x62, 0x88, 0x07, + 0x1e, 0x72, 0x5d, 0xec, 0x09, 0x40, 0x43, 0x01, 0xb8, 0xd8, 0xeb, 0x5b, 0x84, 0x58, 0x8e, 0x2d, + 0xb0, 0x09, 0x9b, 0x04, 0x22, 0xc8, 0x05, 0xb8, 0xc8, 0x43, 0xfd, 0x80, 0xbf, 0x5a, 0x92, 0x10, + 0x87, 0x2e, 0x16, 0xf3, 0x8d, 0xbf, 0x4e, 0xc2, 0xc2, 0x26, 0x31, 0x37, 0x3c, 0x8c, 0x7c, 0xbc, + 0x3e, 0xe8, 0x7e, 0x84, 0x7d, 0x6d, 0x15, 0x66, 0xba, 0xf4, 0xdb, 0xf1, 0x2a, 0x85, 0x7a, 0x61, + 0xb9, 0xb4, 0x5e, 0xf9, 0xe2, 0xb3, 0xcb, 0x8b, 0x42, 0x6c, 0x6b, 0x86, 0xe1, 0x61, 0x42, 0xb6, + 0x7d, 0xcf, 0xb2, 0x4d, 0x3d, 0x00, 0x6a, 0x4b, 0x50, 0xee, 0xb0, 0xd5, 0x6d, 0x1b, 0xf5, 0x71, + 0x65, 0x82, 0xae, 0xd3, 0x81, 0x0f, 0xbd, 0x87, 0xfa, 0x58, 0x5b, 0x07, 0xd8, 0xb1, 0x88, 0xd5, + 0xb1, 0x7a, 0x96, 0x3f, 0xac, 0x4c, 0xd6, 0x0b, 0xcb, 0xf3, 0xab, 0x8d, 0x95, 0xb8, 0x16, 0x57, + 0xee, 0x4a, 0xd4, 0xed, 0xa1, 0x8b, 0x75, 0x65, 0x95, 0xb6, 0x06, 0x0b, 0x2e, 0x1a, 0xf6, 0xb1, + 0xed, 0xb7, 0x11, 0x27, 0xa3, 0x52, 0xcc, 0x21, 0x70, 0x5e, 0x2c, 0x10, 0xa3, 0xda, 0xdb, 0xa0, + 0xb9, 0x9e, 0xd5, 0x47, 0xde, 0xb0, 0x4d, 0x5c, 0xb9, 0xcb, 0x54, 0xce, 0x2e, 0xc7, 0xc4, 0x9a, + 0x6d, 0x37, 0xd8, 0xe7, 0x1d, 0x38, 0xa1, 0xee, 0x23, 0x74, 0x5f, 0x99, 0xae, 0x17, 0x96, 0xcb, + 0xab, 0xa7, 0x55, 0xbe, 0x84, 0xbe, 0xd6, 0x04, 0x44, 0x3f, 0x1e, 0xee, 0x25, 0x86, 0xb4, 0x4b, + 0xa0, 0x75, 0xef, 0x23, 0xcf, 0xc4, 0x46, 0xdb, 0xc3, 0xc8, 0x68, 0xff, 0x74, 0xe0, 0xf8, 0xa8, + 0x32, 0x53, 0x2f, 0x2c, 0x17, 0xf5, 0x63, 0x62, 0x46, 0xc7, 0xc8, 0x78, 0x9f, 0x8e, 0xdf, 0x98, + 0xfd, 0xc5, 0x7f, 0xfe, 0x7c, 0x21, 0x10, 0x7c, 0x63, 0x1b, 0x4e, 0x46, 0xf4, 0xa7, 0x63, 0xe2, + 0x3a, 0x36, 0xc1, 0xda, 0x75, 0x28, 0x09, 0x9d, 0x58, 0x86, 0xd0, 0xe4, 0xe9, 0xc7, 0x4f, 0x97, + 0x8e, 0xfc, 0xf3, 0xe9, 0x52, 0xf1, 0x8e, 0x65, 0xfb, 0x5f, 0x7c, 0x76, 0xb9, 0x2c, 0xd8, 0xa5, + 0x9f, 0xfa, 0x51, 0x8e, 0x6e, 0x19, 0x8d, 0x07, 0xcc, 0x28, 0xde, 0xc2, 0x3d, 0x2c, 0x8d, 0xe2, + 0x2a, 0x1c, 0x75, 0x5c, 0xec, 0x8d, 0x65, 0x15, 0x12, 0x99, 0x6b, 0x16, 0x37, 0xe6, 0x28, 0x33, + 0x12, 0xdf, 0x38, 0xc5, 0xb8, 0x51, 0x0f, 0x0e, 0xb8, 0x69, 0xfc, 0xaa, 0x00, 0x8b, 0x74, 0xce, + 0x22, 0x5d, 0xc7, 0xf6, 0x2d, 0x7b, 0x70, 0xb0, 0x94, 0x69, 0xaf, 0xc2, 0xb4, 0x87, 0x11, 0x71, + 0x6c, 0x66, 0xac, 0x25, 0x5d, 0x7c, 0x45, 0x29, 0xae, 0xc1, 0x37, 0x92, 0xa8, 0x92, 0x64, 0xff, + 0x5b, 0x75, 0xb0, 0x5b, 0x9d, 0x9f, 0xe0, 0xee, 0x01, 0x39, 0xd8, 0x12, 0x94, 0x1d, 0xb6, 0x3d, + 0x07, 0x70, 0xa2, 0x81, 0x0f, 0x31, 0xc0, 0x59, 0x98, 0x75, 0xd1, 0xb0, 0xe7, 0x20, 0xa3, 0x4d, + 0xac, 0x8f, 0x31, 0x73, 0x9d, 0xa2, 0x5e, 0x16, 0x63, 0xdb, 0xd6, 0xc7, 0x51, 0x27, 0x9d, 0xda, + 0x93, 0x93, 0x9e, 0x85, 0x59, 0x2a, 0x0a, 0xea, 0xa4, 0x34, 0xd0, 0x30, 0x97, 0x28, 0xe9, 0x65, + 0x31, 0x46, 0xe1, 0x69, 0xce, 0x33, 0xb3, 0x27, 0xe7, 0x39, 0x0f, 0xc7, 0xf0, 0x43, 0x97, 0xf2, + 0xdd, 0xbd, 0x8f, 0xbb, 0x1f, 0x91, 0x41, 0x9f, 0x54, 0x8e, 0xd6, 0x27, 0x97, 0x67, 0xf5, 0x05, + 0x3e, 0xbe, 0x11, 0x0c, 0x6b, 0xef, 0xc0, 0x82, 0x87, 0x8d, 0x81, 0x6d, 0x20, 0xbb, 0x3b, 0xe4, + 0xd4, 0x95, 0xd2, 0x79, 0xd4, 0x25, 0x94, 0xf1, 0x38, 0xef, 0x8d, 0x7c, 0x67, 0xb8, 0x21, 0xd7, + 0xb2, 0xea, 0x86, 0x42, 0x31, 0x63, 0xba, 0x21, 0x47, 0xb7, 0x8c, 0xc6, 0xa7, 0x13, 0x30, 0xb7, + 0x49, 0xcc, 0x6d, 0x8c, 0x7a, 0xc2, 0x72, 0x0e, 0xc8, 0xd6, 0x73, 0x6d, 0xe7, 0xdb, 0x70, 0xd2, + 0xec, 0x39, 0x1d, 0xd4, 0x6b, 0xef, 0x58, 0x9e, 0x3f, 0x40, 0xbd, 0xb6, 0xe9, 0x39, 0x03, 0x97, + 0x72, 0x44, 0xcd, 0x68, 0x4e, 0x5f, 0xe4, 0xd3, 0x77, 0xf9, 0xec, 0x4d, 0x3a, 0xd9, 0x32, 0xb4, + 0xb7, 0x60, 0x89, 0xe0, 0xae, 0x63, 0x1b, 0x42, 0xd5, 0x9d, 0x1e, 0x69, 0x23, 0xd3, 0x6c, 0x13, + 0xcb, 0xb4, 0x91, 0x3f, 0xf0, 0x30, 0x0f, 0xbd, 0xb3, 0xfa, 0x69, 0x09, 0xdb, 0x76, 0xd7, 0x7b, + 0x64, 0xcd, 0x34, 0xb7, 0x25, 0x24, 0xea, 0x71, 0x27, 0xe1, 0x95, 0x11, 0xa1, 0x48, 0x57, 0xfb, + 0x4d, 0x01, 0x4e, 0x6c, 0x12, 0x53, 0xc7, 0x74, 0xf4, 0xe5, 0x0b, 0x2d, 0x4a, 0xf7, 0x19, 0x38, + 0x9d, 0x40, 0x9d, 0xa4, 0xfe, 0x4f, 0x5c, 0xd9, 0x1b, 0x8e, 0x3b, 0x14, 0x74, 0x57, 0xa3, 0x74, + 0x2b, 0xd4, 0x9d, 0x83, 0x05, 0xe2, 0x75, 0xdb, 0x71, 0x0a, 0xe7, 0x88, 0xd7, 0x5d, 0x0f, 0x89, + 0x3c, 0x07, 0x0b, 0x06, 0xf1, 0x47, 0x70, 0x9c, 0xd0, 0x39, 0x83, 0xf8, 0xa3, 0x38, 0xba, 0x9f, + 0xca, 0x50, 0x51, 0xee, 0x77, 0x2b, 0x34, 0x04, 0xb1, 0x9f, 0x8a, 0x9b, 0x92, 0xfb, 0x29, 0x38, + 0x1d, 0x4e, 0x52, 0xdc, 0x1e, 0xef, 0xc8, 0x45, 0x83, 0xf8, 0x5b, 0x51, 0x4f, 0x8f, 0xca, 0xf3, + 0x7d, 0x66, 0x07, 0xa1, 0xbc, 0xf6, 0xc1, 0xe1, 0x7e, 0x5d, 0x50, 0x2e, 0xbe, 0xc3, 0x65, 0x3d, + 0xea, 0xcd, 0x18, 0xb1, 0x9c, 0x27, 0xb1, 0x9b, 0xf1, 0x60, 0x49, 0xbf, 0x01, 0x20, 0xe5, 0x4b, + 0x2a, 0x93, 0xf5, 0xc9, 0x3c, 0x01, 0x97, 0x02, 0x01, 0x13, 0xe5, 0x56, 0x2d, 0xee, 0xea, 0x56, + 0x8d, 0xb0, 0xfc, 0x49, 0x01, 0xe6, 0x65, 0xbc, 0x65, 0xd1, 0x66, 0x4f, 0x97, 0xea, 0x19, 0x00, + 0x1e, 0xc7, 0x14, 0x4e, 0x4b, 0x6c, 0x84, 0x31, 0xba, 0x08, 0x53, 0xf8, 0xa1, 0xef, 0x21, 0xa1, + 0x1d, 0xfe, 0x11, 0x09, 0xfc, 0x5b, 0xf0, 0xea, 0x28, 0x21, 0xd2, 0x0c, 0xaf, 0xc1, 0x51, 0x19, + 0x24, 0xc7, 0xb0, 0xc2, 0x19, 0x93, 0x07, 0xcd, 0x86, 0xcf, 0x58, 0xe3, 0x9a, 0xe6, 0xac, 0xed, + 0x4d, 0x8f, 0xd9, 0xcc, 0x45, 0x25, 0x5e, 0x61, 0x7c, 0x28, 0xa7, 0x4a, 0x59, 0x7f, 0x3e, 0xc1, + 0xcc, 0xeb, 0x8e, 0x6b, 0x04, 0x2c, 0x6e, 0xe2, 0x7e, 0x07, 0x7b, 0x7b, 0x24, 0xeb, 0x3b, 0x50, + 0xe6, 0x64, 0x39, 0x0f, 0x6c, 0xec, 0x71, 0xba, 0x32, 0x16, 0x72, 0x1e, 0x6e, 0x51, 0x6c, 0x84, + 0xa3, 0xc9, 0xa8, 0xba, 0x7e, 0x08, 0xf3, 0x7d, 0x46, 0x19, 0x69, 0xfb, 0x0e, 0xcd, 0xed, 0x2b, + 0xc5, 0xfa, 0xe4, 0x72, 0x39, 0xf9, 0x76, 0xdf, 0x24, 0xa6, 0xc2, 0x8b, 0x3e, 0x2b, 0x56, 0xde, + 0x76, 0xd6, 0x0c, 0x7a, 0x6f, 0x1d, 0x57, 0x76, 0x32, 0x98, 0x50, 0x2a, 0x53, 0xcc, 0xd0, 0xd3, + 0x29, 0x5d, 0x90, 0x5b, 0x70, 0x29, 0x26, 0xdb, 0x74, 0x4c, 0x8c, 0x52, 0xce, 0xff, 0x0b, 0xae, + 0x2f, 0x1b, 0x3f, 0x38, 0xcc, 0x62, 0xfe, 0x2e, 0xcc, 0x08, 0x4e, 0x77, 0x21, 0xdf, 0x60, 0x49, + 0xda, 0xa5, 0x38, 0xca, 0xb3, 0x94, 0xc9, 0x2f, 0xb9, 0x9f, 0xab, 0xe2, 0xb8, 0x02, 0xd3, 0x7c, + 0xaf, 0x5c, 0x61, 0x08, 0x9c, 0xd6, 0x02, 0x9a, 0x09, 0x5a, 0x1e, 0xf2, 0x2d, 0xc7, 0x6e, 0xd3, + 0xa7, 0x3c, 0x13, 0x47, 0x79, 0xb5, 0xba, 0xc2, 0xdf, 0xf9, 0x2b, 0xc1, 0x3b, 0x7f, 0xe5, 0x76, + 0xf0, 0xce, 0x5f, 0x2f, 0x3e, 0xfa, 0xd7, 0x52, 0x41, 0x9f, 0x0f, 0x17, 0xd2, 0xa9, 0xc6, 0xdf, + 0xb9, 0x8e, 0x14, 0x25, 0xfe, 0x80, 0xc6, 0x84, 0x43, 0xa7, 0x23, 0x19, 0xb9, 0x8a, 0x6a, 0xe4, + 0x4a, 0x94, 0x7d, 0x94, 0x17, 0x29, 0xfb, 0x3f, 0x14, 0x58, 0x42, 0xf2, 0x2e, 0x46, 0x3b, 0x22, + 0x0e, 0xed, 0x5e, 0xf4, 0x07, 0xc6, 0xe1, 0x8d, 0x32, 0xe5, 0x45, 0x1c, 0x23, 0x52, 0xc2, 0x90, + 0xd2, 0xf0, 0x6a, 0x9c, 0x50, 0xf4, 0xc5, 0xd3, 0x9d, 0x96, 0x7d, 0xcf, 0x39, 0xa8, 0x9b, 0xf1, + 0xdd, 0xc4, 0x87, 0xfc, 0x24, 0x33, 0xb6, 0x5a, 0x42, 0xc2, 0x73, 0xa7, 0x65, 0xfb, 0xd7, 0xae, + 0xde, 0x45, 0xbd, 0x01, 0x8e, 0x3f, 0xf4, 0xf7, 0xa3, 0xdc, 0xb1, 0x0f, 0x0f, 0xba, 0x2c, 0xab, + 0x09, 0x25, 0x2a, 0x25, 0xfe, 0xdb, 0x02, 0x4f, 0xcb, 0x90, 0xdd, 0xc5, 0xbd, 0x91, 0x57, 0xef, + 0x21, 0x49, 0xa4, 0x96, 0xe0, 0x4c, 0x22, 0x7d, 0x92, 0x83, 0xbf, 0x4d, 0xc0, 0xec, 0x26, 0x31, + 0xb7, 0x06, 0xfe, 0x96, 0xd3, 0xb3, 0xba, 0xc3, 0x3d, 0x12, 0xfe, 0x3d, 0x28, 0xb9, 0x9e, 0x65, + 0x77, 0x2d, 0x17, 0xf5, 0x44, 0xbc, 0xa9, 0xab, 0x92, 0x0f, 0x6b, 0x7e, 0x2b, 0x5b, 0x01, 0x4e, + 0x0f, 0x97, 0xd0, 0xec, 0xdf, 0xc3, 0xc4, 0x19, 0x78, 0xdd, 0x80, 0x29, 0xf9, 0xad, 0x7d, 0x1f, + 0x80, 0xf8, 0xc8, 0xc7, 0x54, 0xd5, 0x41, 0x14, 0x4e, 0xdb, 0x7c, 0x3b, 0x00, 0xea, 0xca, 0x1a, + 0x6d, 0x33, 0x1e, 0x13, 0x67, 0x72, 0x63, 0xe2, 0xd1, 0xc7, 0x4f, 0x97, 0x0a, 0x49, 0x71, 0x31, + 0x2a, 0xe3, 0x2d, 0x96, 0x31, 0x48, 0x09, 0xaa, 0x99, 0xb9, 0xcb, 0x46, 0x82, 0x87, 0x63, 0x5e, + 0x66, 0xce, 0xd1, 0x2d, 0xa3, 0xf1, 0x17, 0x35, 0x33, 0x3f, 0xac, 0x7a, 0x89, 0x8a, 0x61, 0x5b, + 0xc9, 0xd9, 0xf7, 0x4d, 0x12, 0xff, 0xe5, 0x92, 0xd8, 0xb4, 0x3c, 0xcf, 0xf1, 0x5e, 0xc8, 0xb5, + 0x2e, 0xc2, 0x84, 0x65, 0x88, 0x98, 0x9c, 0x79, 0xf8, 0x84, 0x65, 0x44, 0xfd, 0x70, 0x32, 0xcf, + 0x0f, 0x8b, 0xb1, 0x1a, 0x42, 0x03, 0xe6, 0x0c, 0x4c, 0xfc, 0x76, 0xf7, 0x3e, 0xb2, 0x6c, 0xca, + 0xf6, 0x14, 0xab, 0x1c, 0x94, 0xe9, 0xe0, 0x06, 0x1d, 0x6b, 0x19, 0xc9, 0x8f, 0x1e, 0x95, 0x55, + 0xe9, 0xa5, 0x8f, 0x55, 0x31, 0xbc, 0x50, 0x25, 0x70, 0x7f, 0xc5, 0x10, 0xe3, 0xb2, 0x98, 0xcb, + 0xa5, 0x1a, 0x51, 0x39, 0x97, 0x23, 0x11, 0xf5, 0x4b, 0x35, 0xe7, 0x08, 0xe7, 0x5f, 0x5a, 0x2d, + 0x68, 0xf4, 0x4e, 0x29, 0xee, 0xc7, 0x9d, 0xa2, 0xea, 0x39, 0x52, 0x3f, 0xfd, 0x9c, 0x67, 0x80, + 0x7c, 0xee, 0x45, 0x9e, 0x43, 0xbb, 0x52, 0x73, 0x4e, 0x7a, 0xb5, 0x07, 0x25, 0xf3, 0xf7, 0x95, + 0xc2, 0x86, 0xe4, 0xf0, 0x53, 0x6e, 0xc9, 0x5c, 0xbf, 0x5b, 0xac, 0x79, 0xa3, 0x5d, 0x83, 0x12, + 0x1a, 0xf8, 0xf7, 0x1d, 0x8f, 0x8a, 0x38, 0x8f, 0xc7, 0x10, 0xaa, 0x5d, 0x87, 0x69, 0xde, 0xfe, + 0x09, 0x33, 0xdc, 0xb8, 0x5e, 0xf8, 0x19, 0xeb, 0x45, 0x2a, 0x04, 0x5d, 0xe0, 0x6f, 0xcc, 0x53, + 0x72, 0xc3, 0x9d, 0x84, 0x4a, 0x54, 0xa2, 0x24, 0xc1, 0xff, 0x2f, 0xc0, 0x31, 0xc6, 0x8b, 0xe9, + 0xa1, 0x03, 0xee, 0x0f, 0x68, 0xe7, 0xe1, 0x78, 0xa4, 0x8e, 0x64, 0x19, 0x4c, 0x1f, 0x73, 0xfa, + 0xbc, 0x5a, 0x24, 0x6a, 0x19, 0x59, 0x25, 0xa7, 0xe2, 0x3e, 0x95, 0x9c, 0xaa, 0x50, 0x89, 0x32, + 0x1e, 0x96, 0x24, 0x26, 0xd8, 0xe4, 0x86, 0xd3, 0x77, 0x69, 0xbc, 0xff, 0x5a, 0xa4, 0xb3, 0x0e, + 0xb5, 0xc4, 0xb2, 0xec, 0x3d, 0xd4, 0xb7, 0x7a, 0xc3, 0x50, 0x54, 0xd5, 0x78, 0x75, 0xf6, 0x6d, + 0x06, 0x69, 0x19, 0xda, 0x1a, 0xcc, 0x9a, 0x3b, 0x66, 0xbb, 0x8f, 0x5c, 0xd7, 0xb2, 0xcd, 0x20, + 0x9b, 0xa8, 0x25, 0x19, 0xce, 0xcd, 0xbb, 0x37, 0x37, 0x39, 0x4c, 0x2f, 0x9b, 0x3b, 0xa6, 0xf8, + 0x3f, 0xf6, 0xa6, 0x6b, 0x40, 0x3d, 0x4d, 0x10, 0x52, 0x5a, 0x3f, 0xe7, 0x65, 0x13, 0x96, 0x85, + 0x7d, 0x1d, 0xa2, 0x8a, 0xd2, 0x58, 0x87, 0x5a, 0xf2, 0xf9, 0x11, 0x0a, 0x79, 0xb9, 0xf6, 0xe5, + 0x51, 0x98, 0x70, 0xbe, 0xa4, 0xf0, 0x77, 0x05, 0x28, 0xb1, 0x4a, 0xb8, 0x7f, 0x1b, 0x99, 0x7b, + 0xa4, 0x4a, 0xcd, 0x66, 0x26, 0x22, 0x59, 0xe6, 0x55, 0x28, 0xfa, 0xc8, 0x24, 0xe2, 0xfd, 0x52, + 0x4f, 0xee, 0x91, 0x70, 0xec, 0x6d, 0x64, 0x12, 0x9d, 0xa1, 0xa3, 0x6c, 0x9c, 0x80, 0xe3, 0x92, + 0x46, 0x49, 0xf9, 0xa3, 0x09, 0x26, 0x5c, 0xf5, 0x4a, 0xdb, 0xe0, 0xfd, 0xa1, 0x97, 0x76, 0xab, + 0x8d, 0xd1, 0x1d, 0x8b, 0x76, 0xb6, 0xa6, 0xe2, 0x9d, 0xad, 0xa4, 0x66, 0xd4, 0x74, 0x62, 0x33, + 0x2a, 0x59, 0xdd, 0x09, 0x12, 0x91, 0x42, 0xfb, 0x7d, 0x81, 0x15, 0x90, 0xb8, 0xcd, 0x1e, 0x22, + 0xd1, 0x45, 0x39, 0x39, 0x07, 0xaf, 0x67, 0x91, 0x19, 0xf0, 0xb3, 0xfa, 0xc7, 0x53, 0x30, 0xb9, + 0x49, 0x4c, 0xed, 0x43, 0x98, 0x1d, 0xf9, 0xf9, 0xc1, 0x6b, 0x29, 0xe5, 0x24, 0x15, 0x54, 0xbd, + 0x38, 0x06, 0x48, 0x26, 0xdb, 0x1f, 0xc2, 0xec, 0x48, 0x2f, 0x3b, 0xed, 0x04, 0x15, 0x94, 0x7a, + 0x42, 0x52, 0x73, 0x5a, 0xeb, 0xc1, 0xb1, 0x58, 0x8d, 0xe1, 0x8d, 0x94, 0x0d, 0xa2, 0xc0, 0x6a, + 0x73, 0x4c, 0xa0, 0xca, 0xcf, 0x48, 0xde, 0x9b, 0xc6, 0x8f, 0x0a, 0x4a, 0xe5, 0x27, 0x29, 0xeb, + 0xd2, 0x1c, 0x38, 0x1e, 0x6f, 0xb4, 0x2f, 0xa7, 0x49, 0x24, 0x8a, 0xac, 0x5e, 0x19, 0x17, 0xa9, + 0xb2, 0x34, 0x52, 0x2c, 0xc8, 0x36, 0x02, 0x0e, 0xca, 0x31, 0x82, 0x48, 0x57, 0xe8, 0x03, 0x00, + 0xa5, 0x27, 0x78, 0x36, 0x65, 0x69, 0x08, 0xa9, 0x9e, 0xcf, 0x85, 0xa8, 0xea, 0x8f, 0x75, 0x1d, + 0xd3, 0xd4, 0x1f, 0x05, 0xa6, 0xaa, 0x3f, 0xad, 0x53, 0x48, 0x39, 0x51, 0xba, 0x84, 0x69, 0x9c, + 0x84, 0x90, 0x54, 0x4e, 0x12, 0x7a, 0x67, 0xd2, 0x55, 0x72, 0xf4, 0xa0, 0x82, 0x72, 0x5c, 0x25, + 0x72, 0x82, 0x07, 0x5a, 0x42, 0x71, 0x28, 0x95, 0xc4, 0x18, 0xb4, 0xfa, 0xe6, 0xd8, 0xd0, 0xb8, + 0xc3, 0xe4, 0x70, 0xa5, 0x82, 0x72, 0x1c, 0x26, 0x72, 0xc2, 0xa8, 0xc3, 0x88, 0x63, 0xc6, 0x70, + 0x18, 0x71, 0xd6, 0x95, 0x71, 0x91, 0xf1, 0x88, 0xa3, 0xbc, 0x08, 0xb3, 0x23, 0x4e, 0x08, 0xcc, + 0x89, 0x38, 0xf1, 0x37, 0xa8, 0x36, 0x80, 0x13, 0x49, 0x37, 0xce, 0x85, 0x31, 0xf6, 0x11, 0xd8, + 0xea, 0xea, 0xf8, 0x58, 0x79, 0xec, 0x27, 0x05, 0x38, 0x95, 0x7e, 0xdf, 0x5d, 0xc9, 0x34, 0x84, + 0x24, 0x1a, 0xae, 0xef, 0x76, 0x85, 0xa4, 0xe4, 0xc7, 0x50, 0x56, 0x9b, 0x8d, 0x8d, 0xcc, 0xc8, + 0xc3, 0x30, 0xd5, 0x0b, 0xf9, 0x18, 0x75, 0x7b, 0xb5, 0xe1, 0xd7, 0xc8, 0x74, 0xa8, 0xec, 0xed, + 0x13, 0x5a, 0x78, 0xd4, 0x3a, 0xe3, 0xed, 0xbb, 0xe5, 0x4c, 0x85, 0x28, 0xc8, 0x54, 0xeb, 0x4c, + 0xed, 0x65, 0x85, 0xd6, 0xa9, 0xf4, 0x48, 0xde, 0xc8, 0xdf, 0x85, 0x01, 0x73, 0xac, 0x33, 0xde, + 0xa9, 0xa0, 0x01, 0x51, 0xe9, 0x52, 0xa4, 0x05, 0xc4, 0x10, 0x92, 0x1a, 0x10, 0xe3, 0x1d, 0x04, + 0xaa, 0x19, 0xb5, 0xf6, 0xd0, 0xc8, 0x0c, 0x0a, 0xd9, 0x9a, 0x49, 0x78, 0xfc, 0xf3, 0x9b, 0x23, + 0xd2, 0xf0, 0x4b, 0xbf, 0x39, 0x46, 0x81, 0x19, 0x37, 0x47, 0x72, 0x3b, 0x4d, 0xfb, 0x11, 0x94, + 0xc2, 0xb2, 0x76, 0x3d, 0x65, 0xb5, 0x44, 0x54, 0x97, 0xf3, 0x10, 0xf1, 0x6b, 0x43, 0xec, 0x9d, + 0x7d, 0x6d, 0x88, 0xed, 0x2f, 0x8e, 0x01, 0x52, 0x4f, 0x18, 0xa9, 0x90, 0xbc, 0x96, 0x69, 0x24, + 0x1c, 0x94, 0x7a, 0x42, 0x52, 0x59, 0x43, 0xeb, 0xc2, 0xdc, 0xe8, 0x3b, 0xef, 0xf5, 0x54, 0x3d, + 0x2a, 0xa8, 0xea, 0xa5, 0x71, 0x50, 0xf2, 0x90, 0x9f, 0xc1, 0x2b, 0xc9, 0x15, 0x82, 0x4b, 0xa9, + 0x77, 0x74, 0x02, 0xba, 0x7a, 0x75, 0x37, 0x68, 0x35, 0x8a, 0x27, 0xbd, 0xb8, 0x2f, 0x64, 0x46, + 0xc5, 0xd1, 0x83, 0x57, 0xc7, 0xc7, 0xaa, 0xc7, 0x26, 0x3d, 0xa3, 0x2f, 0x64, 0xe6, 0x3d, 0xe3, + 0x1d, 0x9b, 0xf1, 0x3c, 0xd6, 0xde, 0x83, 0x69, 0xf1, 0x34, 0x3e, 0x93, 0x9a, 0xc9, 0xd1, 0xe9, + 0xea, 0x37, 0x33, 0xa7, 0x83, 0xfd, 0xd6, 0x5b, 0x8f, 0x9f, 0xd5, 0x0a, 0x4f, 0x9e, 0xd5, 0x0a, + 0x5f, 0x3e, 0xab, 0x15, 0x1e, 0x3d, 0xaf, 0x1d, 0x79, 0xf2, 0xbc, 0x76, 0xe4, 0x1f, 0xcf, 0x6b, + 0x47, 0x3e, 0x68, 0x9a, 0x96, 0x7f, 0x7f, 0xd0, 0x59, 0xe9, 0x3a, 0xfd, 0x66, 0xc7, 0xee, 0x5c, + 0x66, 0x65, 0xc1, 0xa6, 0xf2, 0xcb, 0xeb, 0x87, 0xa3, 0xbf, 0xbd, 0xee, 0x4c, 0xb3, 0xe6, 0xca, + 0xb7, 0xbe, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xcb, 0x74, 0x8a, 0xe3, 0x2e, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3432,6 +3666,8 @@ type MsgClient interface { MirrorObject(ctx context.Context, in *MsgMirrorObject, opts ...grpc.CallOption) (*MsgMirrorObjectResponse, error) DiscontinueObject(ctx context.Context, in *MsgDiscontinueObject, opts ...grpc.CallOption) (*MsgDiscontinueObjectResponse, error) UpdateObjectInfo(ctx context.Context, in *MsgUpdateObjectInfo, opts ...grpc.CallOption) (*MsgUpdateObjectInfoResponse, error) + UpdateObjectContent(ctx context.Context, in *MsgUpdateObjectContent, opts ...grpc.CallOption) (*MsgUpdateObjectContentResponse, error) + CancelUpdateObjectContent(ctx context.Context, in *MsgCancelUpdateObjectContent, opts ...grpc.CallOption) (*MsgCancelUpdateObjectContentResponse, error) // basic operation of group CreateGroup(ctx context.Context, in *MsgCreateGroup, opts ...grpc.CallOption) (*MsgCreateGroupResponse, error) DeleteGroup(ctx context.Context, in *MsgDeleteGroup, opts ...grpc.CallOption) (*MsgDeleteGroupResponse, error) @@ -3587,6 +3823,24 @@ func (c *msgClient) UpdateObjectInfo(ctx context.Context, in *MsgUpdateObjectInf return out, nil } +func (c *msgClient) UpdateObjectContent(ctx context.Context, in *MsgUpdateObjectContent, opts ...grpc.CallOption) (*MsgUpdateObjectContentResponse, error) { + out := new(MsgUpdateObjectContentResponse) + err := c.cc.Invoke(ctx, "/greenfield.storage.Msg/UpdateObjectContent", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) CancelUpdateObjectContent(ctx context.Context, in *MsgCancelUpdateObjectContent, opts ...grpc.CallOption) (*MsgCancelUpdateObjectContentResponse, error) { + out := new(MsgCancelUpdateObjectContentResponse) + err := c.cc.Invoke(ctx, "/greenfield.storage.Msg/CancelUpdateObjectContent", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) CreateGroup(ctx context.Context, in *MsgCreateGroup, opts ...grpc.CallOption) (*MsgCreateGroupResponse, error) { out := new(MsgCreateGroupResponse) err := c.cc.Invoke(ctx, "/greenfield.storage.Msg/CreateGroup", in, out, opts...) @@ -3740,6 +3994,8 @@ type MsgServer interface { MirrorObject(context.Context, *MsgMirrorObject) (*MsgMirrorObjectResponse, error) DiscontinueObject(context.Context, *MsgDiscontinueObject) (*MsgDiscontinueObjectResponse, error) UpdateObjectInfo(context.Context, *MsgUpdateObjectInfo) (*MsgUpdateObjectInfoResponse, error) + UpdateObjectContent(context.Context, *MsgUpdateObjectContent) (*MsgUpdateObjectContentResponse, error) + CancelUpdateObjectContent(context.Context, *MsgCancelUpdateObjectContent) (*MsgCancelUpdateObjectContentResponse, error) // basic operation of group CreateGroup(context.Context, *MsgCreateGroup) (*MsgCreateGroupResponse, error) DeleteGroup(context.Context, *MsgDeleteGroup) (*MsgDeleteGroupResponse, error) @@ -3807,6 +4063,12 @@ func (*UnimplementedMsgServer) DiscontinueObject(ctx context.Context, req *MsgDi func (*UnimplementedMsgServer) UpdateObjectInfo(ctx context.Context, req *MsgUpdateObjectInfo) (*MsgUpdateObjectInfoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateObjectInfo not implemented") } +func (*UnimplementedMsgServer) UpdateObjectContent(ctx context.Context, req *MsgUpdateObjectContent) (*MsgUpdateObjectContentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateObjectContent not implemented") +} +func (*UnimplementedMsgServer) CancelUpdateObjectContent(ctx context.Context, req *MsgCancelUpdateObjectContent) (*MsgCancelUpdateObjectContentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CancelUpdateObjectContent not implemented") +} func (*UnimplementedMsgServer) CreateGroup(ctx context.Context, req *MsgCreateGroup) (*MsgCreateGroupResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateGroup not implemented") } @@ -4109,6 +4371,42 @@ func _Msg_UpdateObjectInfo_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } +func _Msg_UpdateObjectContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateObjectContent) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateObjectContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/greenfield.storage.Msg/UpdateObjectContent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateObjectContent(ctx, req.(*MsgUpdateObjectContent)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_CancelUpdateObjectContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCancelUpdateObjectContent) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CancelUpdateObjectContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/greenfield.storage.Msg/CancelUpdateObjectContent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CancelUpdateObjectContent(ctx, req.(*MsgCancelUpdateObjectContent)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_CreateGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgCreateGroup) if err := dec(in); err != nil { @@ -4439,6 +4737,14 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateObjectInfo", Handler: _Msg_UpdateObjectInfo_Handler, }, + { + MethodName: "UpdateObjectContent", + Handler: _Msg_UpdateObjectContent_Handler, + }, + { + MethodName: "CancelUpdateObjectContent", + Handler: _Msg_CancelUpdateObjectContent_Handler, + }, { MethodName: "CreateGroup", Handler: _Msg_CreateGroup_Handler, @@ -6797,37 +7103,192 @@ func (m *MsgSetTagResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func encodeVarintTx(dAtA []byte, offset int, v uint64) int { - offset -= sovTx(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ +func (m *MsgUpdateObjectContent) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - dAtA[offset] = uint8(v) - return base + return dAtA[:n], nil } -func (m *MsgCreateBucket) Size() (n int) { - if m == nil { - return 0 - } + +func (m *MsgUpdateObjectContent) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateObjectContent) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.Creator) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if len(m.ExpectChecksums) > 0 { + for iNdEx := len(m.ExpectChecksums) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ExpectChecksums[iNdEx]) + copy(dAtA[i:], m.ExpectChecksums[iNdEx]) + i = encodeVarintTx(dAtA, i, uint64(len(m.ExpectChecksums[iNdEx]))) + i-- + dAtA[i] = 0x32 + } } - l = len(m.BucketName) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if len(m.ContentType) > 0 { + i -= len(m.ContentType) + copy(dAtA[i:], m.ContentType) + i = encodeVarintTx(dAtA, i, uint64(len(m.ContentType))) + i-- + dAtA[i] = 0x2a } - if m.Visibility != 0 { - n += 1 + sovTx(uint64(m.Visibility)) + if m.PayloadSize != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PayloadSize)) + i-- + dAtA[i] = 0x20 } - l = len(m.PaymentAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if len(m.ObjectName) > 0 { + i -= len(m.ObjectName) + copy(dAtA[i:], m.ObjectName) + i = encodeVarintTx(dAtA, i, uint64(len(m.ObjectName))) + i-- + dAtA[i] = 0x1a + } + if len(m.BucketName) > 0 { + i -= len(m.BucketName) + copy(dAtA[i:], m.BucketName) + i = encodeVarintTx(dAtA, i, uint64(len(m.BucketName))) + i-- + dAtA[i] = 0x12 + } + if len(m.Operator) > 0 { + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Operator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateObjectContentResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateObjectContentResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateObjectContentResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgCancelUpdateObjectContent) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCancelUpdateObjectContent) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCancelUpdateObjectContent) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ObjectName) > 0 { + i -= len(m.ObjectName) + copy(dAtA[i:], m.ObjectName) + i = encodeVarintTx(dAtA, i, uint64(len(m.ObjectName))) + i-- + dAtA[i] = 0x1a + } + if len(m.BucketName) > 0 { + i -= len(m.BucketName) + copy(dAtA[i:], m.BucketName) + i = encodeVarintTx(dAtA, i, uint64(len(m.BucketName))) + i-- + dAtA[i] = 0x12 + } + if len(m.Operator) > 0 { + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Operator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgCancelUpdateObjectContentResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCancelUpdateObjectContentResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCancelUpdateObjectContentResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgCreateBucket) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.BucketName) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.Visibility != 0 { + n += 1 + sovTx(uint64(m.Visibility)) + } + l = len(m.PaymentAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) } l = len(m.PrimarySpAddress) if l > 0 { @@ -7804,6 +8265,79 @@ func (m *MsgSetTagResponse) Size() (n int) { return n } +func (m *MsgUpdateObjectContent) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Operator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.BucketName) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ObjectName) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PayloadSize != 0 { + n += 1 + sovTx(uint64(m.PayloadSize)) + } + l = len(m.ContentType) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.ExpectChecksums) > 0 { + for _, b := range m.ExpectChecksums { + l = len(b) + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgUpdateObjectContentResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgCancelUpdateObjectContent) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Operator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.BucketName) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ObjectName) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgCancelUpdateObjectContentResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func sovTx(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -14536,6 +15070,481 @@ func (m *MsgSetTagResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgUpdateObjectContent) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateObjectContent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateObjectContent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BucketName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BucketName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ObjectName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PayloadSize", wireType) + } + m.PayloadSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PayloadSize |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContentType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContentType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpectChecksums", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExpectChecksums = append(m.ExpectChecksums, make([]byte, postIndex-iNdEx)) + copy(m.ExpectChecksums[len(m.ExpectChecksums)-1], dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateObjectContentResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateObjectContentResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateObjectContentResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCancelUpdateObjectContent) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCancelUpdateObjectContent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCancelUpdateObjectContent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BucketName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BucketName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ObjectName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCancelUpdateObjectContentResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCancelUpdateObjectContentResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCancelUpdateObjectContentResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipTx(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/storage/types/types.go b/x/storage/types/types.go index 8d2136a71..f033790cd 100644 --- a/x/storage/types/types.go +++ b/x/storage/types/types.go @@ -137,3 +137,12 @@ func (b *InternalBucketInfo) DeleteLVG(lvgID uint32) { } } } + +// GetLatestUpdatedTime gets the latest timestamp the object's content is updated. +// UpdatedAt is a new introduced field, it is default to be 0 +func (o *ObjectInfo) GetLatestUpdatedTime() int64 { + if o.UpdatedAt != 0 { + return o.UpdatedAt + } + return o.CreateAt +} diff --git a/x/storage/types/types.pb.go b/x/storage/types/types.pb.go index 66cd17923..8d56e4ce2 100644 --- a/x/storage/types/types.pb.go +++ b/x/storage/types/types.pb.go @@ -259,6 +259,14 @@ type ObjectInfo struct { Checksums [][]byte `protobuf:"bytes,14,rep,name=checksums,proto3" json:"checksums,omitempty" traits:"omit"` // tags defines a list of tags the object has Tags *ResourceTags `protobuf:"bytes,15,opt,name=tags,proto3" json:"tags,omitempty"` + // is_updating indicates whether a object is being updated. + IsUpdating bool `protobuf:"varint,16,opt,name=is_updating,json=isUpdating,proto3" json:"is_updating,omitempty"` + // updated_at define the block timestamp when the object is updated. Will not be visible until object is re-sealed. + UpdatedAt int64 `protobuf:"varint,17,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + // updated_by defined the account address of updater(if there is). Will not be visible until object is re-sealed. + UpdatedBy string `protobuf:"bytes,18,opt,name=updated_by,json=updatedBy,proto3" json:"updated_by,omitempty"` + // version define the version of object + Version int64 `protobuf:"varint,19,opt,name=version,proto3" json:"version,omitempty"` } func (m *ObjectInfo) Reset() { *m = ObjectInfo{} } @@ -392,6 +400,34 @@ func (m *ObjectInfo) GetTags() *ResourceTags { return nil } +func (m *ObjectInfo) GetIsUpdating() bool { + if m != nil { + return m.IsUpdating + } + return false +} + +func (m *ObjectInfo) GetUpdatedAt() int64 { + if m != nil { + return m.UpdatedAt + } + return 0 +} + +func (m *ObjectInfo) GetUpdatedBy() string { + if m != nil { + return m.UpdatedBy + } + return "" +} + +func (m *ObjectInfo) GetVersion() int64 { + if m != nil { + return m.Version + } + return 0 +} + type GroupInfo struct { // owner is the owner of the group. It can not changed once it created. Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` @@ -1027,6 +1063,98 @@ func (m *ResourceTags_Tag) GetValue() string { return "" } +type ShadowObjectInfo struct { + // operator define the account address of object updater + Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` + // id defines the object id + Id Uint `protobuf:"bytes,2,opt,name=id,proto3,customtype=Uint" json:"id"` + // content_type define the content type of the payload data + ContentType string `protobuf:"bytes,3,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + // payload_size is the total size of the object payload + PayloadSize uint64 `protobuf:"varint,4,opt,name=payload_size,json=payloadSize,proto3" json:"payload_size,omitempty"` + // checksums define the root hash of the pieces which stored in a SP. + Checksums [][]byte `protobuf:"bytes,5,rep,name=checksums,proto3" json:"checksums,omitempty" traits:"omit"` + // updated_at define the block timestamp when the object is updated + UpdatedAt int64 `protobuf:"varint,6,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + // version define the version of object + Version int64 `protobuf:"varint,7,opt,name=version,proto3" json:"version,omitempty"` +} + +func (m *ShadowObjectInfo) Reset() { *m = ShadowObjectInfo{} } +func (m *ShadowObjectInfo) String() string { return proto.CompactTextString(m) } +func (*ShadowObjectInfo) ProtoMessage() {} +func (*ShadowObjectInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_bf95fa2efdc74d97, []int{12} +} +func (m *ShadowObjectInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ShadowObjectInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ShadowObjectInfo.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ShadowObjectInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShadowObjectInfo.Merge(m, src) +} +func (m *ShadowObjectInfo) XXX_Size() int { + return m.Size() +} +func (m *ShadowObjectInfo) XXX_DiscardUnknown() { + xxx_messageInfo_ShadowObjectInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_ShadowObjectInfo proto.InternalMessageInfo + +func (m *ShadowObjectInfo) GetOperator() string { + if m != nil { + return m.Operator + } + return "" +} + +func (m *ShadowObjectInfo) GetContentType() string { + if m != nil { + return m.ContentType + } + return "" +} + +func (m *ShadowObjectInfo) GetPayloadSize() uint64 { + if m != nil { + return m.PayloadSize + } + return 0 +} + +func (m *ShadowObjectInfo) GetChecksums() [][]byte { + if m != nil { + return m.Checksums + } + return nil +} + +func (m *ShadowObjectInfo) GetUpdatedAt() int64 { + if m != nil { + return m.UpdatedAt + } + return 0 +} + +func (m *ShadowObjectInfo) GetVersion() int64 { + if m != nil { + return m.Version + } + return 0 +} + func init() { proto.RegisterType((*BucketInfo)(nil), "greenfield.storage.BucketInfo") proto.RegisterType((*InternalBucketInfo)(nil), "greenfield.storage.InternalBucketInfo") @@ -1041,90 +1169,99 @@ func init() { proto.RegisterType((*MigrationBucketInfo)(nil), "greenfield.storage.MigrationBucketInfo") proto.RegisterType((*ResourceTags)(nil), "greenfield.storage.ResourceTags") proto.RegisterType((*ResourceTags_Tag)(nil), "greenfield.storage.ResourceTags.Tag") + proto.RegisterType((*ShadowObjectInfo)(nil), "greenfield.storage.ShadowObjectInfo") } func init() { proto.RegisterFile("greenfield/storage/types.proto", fileDescriptor_bf95fa2efdc74d97) } var fileDescriptor_bf95fa2efdc74d97 = []byte{ - // 1240 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0x51, 0x6f, 0xd4, 0x46, - 0x10, 0x8e, 0xe3, 0xbb, 0x24, 0x1e, 0xe7, 0x12, 0x58, 0xa2, 0x62, 0x82, 0xb8, 0x1c, 0xa7, 0xb6, - 0x3a, 0xb5, 0xcd, 0x9d, 0x08, 0x08, 0x55, 0x15, 0x2a, 0xe2, 0x0a, 0x45, 0xa7, 0x96, 0x56, 0x75, - 0x02, 0x95, 0xfa, 0x62, 0xed, 0xd9, 0x1b, 0x67, 0x8b, 0xed, 0xbd, 0xee, 0xae, 0x43, 0x0e, 0xa9, - 0xff, 0xa1, 0x0f, 0xfd, 0x25, 0x15, 0x3f, 0x02, 0x55, 0xaa, 0x84, 0x78, 0xaa, 0xfa, 0x10, 0x55, - 0xf0, 0x0f, 0xfa, 0xd0, 0xbe, 0x56, 0xde, 0xdd, 0x0b, 0xce, 0xdd, 0x85, 0x90, 0x08, 0xde, 0xbc, - 0xb3, 0xdf, 0x78, 0x67, 0xbe, 0x99, 0x6f, 0xd6, 0x86, 0x7a, 0xcc, 0x09, 0xc9, 0xb6, 0x29, 0x49, - 0xa2, 0x8e, 0x90, 0x8c, 0xe3, 0x98, 0x74, 0xe4, 0x70, 0x40, 0x44, 0x7b, 0xc0, 0x99, 0x64, 0x08, - 0xbd, 0xda, 0x6f, 0x9b, 0xfd, 0xd5, 0x7a, 0xc8, 0x44, 0xca, 0x44, 0xa7, 0x8f, 0x05, 0xe9, 0xec, - 0x5e, 0xe9, 0x13, 0x89, 0xaf, 0x74, 0x42, 0x46, 0x33, 0xed, 0xb3, 0x7a, 0x41, 0xef, 0x07, 0x6a, - 0xd5, 0xd1, 0x0b, 0xb3, 0xb5, 0x12, 0xb3, 0x98, 0x69, 0x7b, 0xf1, 0x64, 0xac, 0x97, 0x4b, 0x41, - 0x0c, 0xf0, 0x30, 0x25, 0x99, 0xec, 0xb0, 0x5c, 0x06, 0xdb, 0x09, 0x7b, 0x64, 0x20, 0x1f, 0x4e, - 0x81, 0x08, 0xc9, 0x09, 0x4e, 0x03, 0x4e, 0x42, 0xc6, 0x23, 0x83, 0x5b, 0x9b, 0x92, 0x4f, 0xc8, - 0xd2, 0x94, 0x99, 0xe0, 0x9a, 0xfb, 0x15, 0x80, 0x6e, 0x1e, 0x3e, 0x24, 0xb2, 0x97, 0x6d, 0x33, - 0xd4, 0x86, 0x2a, 0x7b, 0x94, 0x11, 0xee, 0x59, 0x0d, 0xab, 0xe5, 0x74, 0xbd, 0xe7, 0x4f, 0xd6, - 0x57, 0x4c, 0xc4, 0xb7, 0xa2, 0x88, 0x13, 0x21, 0x36, 0x25, 0xa7, 0x59, 0xec, 0x6b, 0x18, 0x5a, - 0x03, 0xb7, 0xaf, 0xbc, 0x83, 0x0c, 0xa7, 0xc4, 0x9b, 0x2d, 0xbc, 0x7c, 0xd0, 0xa6, 0x6f, 0x70, - 0x4a, 0x50, 0x17, 0x60, 0x97, 0x0a, 0xda, 0xa7, 0x09, 0x95, 0x43, 0xcf, 0x6e, 0x58, 0xad, 0xa5, - 0x8d, 0x66, 0x7b, 0x92, 0xc5, 0xf6, 0x83, 0x03, 0xd4, 0xd6, 0x70, 0x40, 0xfc, 0x92, 0x17, 0xfa, - 0x18, 0x66, 0x69, 0xe4, 0x55, 0x54, 0x44, 0x17, 0x9f, 0xee, 0xaf, 0xcd, 0xfc, 0xb5, 0xbf, 0x56, - 0xb9, 0x4f, 0x33, 0xf9, 0xfc, 0xc9, 0xba, 0x6b, 0xa2, 0x2b, 0x96, 0xfe, 0x2c, 0x8d, 0xd0, 0x4d, - 0x70, 0x05, 0xcb, 0x79, 0x48, 0x82, 0xa2, 0x6e, 0x5e, 0x55, 0x9d, 0x58, 0x9f, 0x76, 0xe2, 0xa6, - 0x82, 0xe9, 0xd3, 0xc4, 0xc1, 0x33, 0xba, 0x08, 0x4e, 0xc8, 0x09, 0x96, 0x24, 0xc0, 0xd2, 0x9b, - 0x6b, 0x58, 0x2d, 0xdb, 0x5f, 0xd0, 0x86, 0x5b, 0x12, 0xdd, 0x82, 0x65, 0x43, 0x77, 0x80, 0x35, - 0x1f, 0xde, 0xfc, 0x31, 0x4c, 0x2d, 0x19, 0x07, 0x63, 0x45, 0x5d, 0xa8, 0xc7, 0x09, 0xeb, 0xe3, - 0x24, 0xd8, 0xa5, 0x5c, 0xe6, 0x38, 0x09, 0x62, 0xce, 0xf2, 0x41, 0xb0, 0x8d, 0x53, 0x9a, 0x0c, - 0x03, 0x1a, 0x79, 0x0b, 0x0d, 0xab, 0x55, 0xf3, 0x57, 0x35, 0xea, 0x81, 0x06, 0xdd, 0x2d, 0x30, - 0x5f, 0x2a, 0x48, 0x2f, 0x42, 0x9f, 0x00, 0x0a, 0x77, 0x30, 0x8f, 0x49, 0x14, 0x70, 0x82, 0xa3, - 0xe0, 0xa7, 0x9c, 0x49, 0xec, 0x39, 0x0d, 0xab, 0x55, 0xf1, 0xcf, 0x98, 0x1d, 0x9f, 0xe0, 0xe8, - 0xbb, 0xc2, 0x8e, 0xee, 0x40, 0xcd, 0x14, 0x49, 0x48, 0x2c, 0x73, 0xe1, 0x81, 0x22, 0xa5, 0x31, - 0x8d, 0x14, 0xdd, 0x0b, 0x9b, 0x0a, 0xe7, 0x2f, 0xf6, 0x4b, 0x2b, 0x74, 0x0d, 0x2a, 0x12, 0xc7, - 0xc2, 0x73, 0x1b, 0x56, 0xcb, 0x9d, 0xee, 0xed, 0x13, 0x43, 0x24, 0x8e, 0x85, 0xaf, 0xd0, 0xcd, - 0x7f, 0x2d, 0x40, 0xbd, 0x4c, 0x12, 0x9e, 0xe1, 0xa4, 0xd4, 0x68, 0x97, 0x00, 0x06, 0x9c, 0x16, - 0x55, 0xa2, 0x29, 0x51, 0xdd, 0x66, 0xfb, 0x8e, 0xb2, 0x6c, 0xd1, 0x94, 0xa0, 0x8f, 0xe0, 0xac, - 0x64, 0x12, 0x27, 0x81, 0x4e, 0x26, 0x10, 0xf4, 0xb1, 0xee, 0xae, 0x8a, 0xbf, 0xac, 0x36, 0xbe, - 0x50, 0xf6, 0x4d, 0xfa, 0x98, 0xa0, 0xef, 0x61, 0x25, 0x61, 0xe1, 0x38, 0x9f, 0xc2, 0xb3, 0x1b, - 0x76, 0xcb, 0xdd, 0xf8, 0x60, 0x5a, 0x9c, 0x5f, 0x17, 0xf8, 0x32, 0xb3, 0x3e, 0x4a, 0xc6, 0x4d, - 0x02, 0xdd, 0x80, 0x8b, 0x19, 0xd9, 0x93, 0xc1, 0x94, 0xb7, 0x07, 0xa6, 0x21, 0x6b, 0xfe, 0xf9, - 0x02, 0x32, 0xf1, 0xbe, 0x5e, 0xd4, 0xfc, 0xaf, 0x0a, 0xf0, 0x6d, 0xff, 0x47, 0x12, 0x9e, 0x4e, - 0x59, 0x1b, 0x30, 0xaf, 0xba, 0x8e, 0x71, 0xad, 0xaa, 0xd7, 0x78, 0x8c, 0x80, 0xe3, 0x6a, 0xb4, - 0x27, 0xd4, 0xb8, 0x06, 0x2e, 0x53, 0x21, 0x69, 0x40, 0x45, 0x03, 0xb4, 0x49, 0x01, 0xb4, 0xd4, - 0xaa, 0x6f, 0x26, 0xb5, 0xab, 0xf0, 0xde, 0x11, 0xd4, 0xcc, 0x29, 0x6a, 0xce, 0x25, 0x93, 0xb4, - 0xa0, 0xcb, 0xb0, 0x38, 0xc0, 0xc3, 0x84, 0xe1, 0x48, 0x17, 0x75, 0x5e, 0x15, 0xd5, 0x35, 0x36, - 0x55, 0xd0, 0xc3, 0x33, 0x63, 0xe1, 0x54, 0x33, 0xe3, 0x32, 0x2c, 0x86, 0x2c, 0x93, 0x85, 0x50, - 0xd5, 0x1c, 0x70, 0x54, 0xaa, 0xae, 0xb1, 0x4d, 0x0a, 0x1d, 0xc6, 0x84, 0x7e, 0x07, 0x6a, 0x86, - 0x29, 0xa3, 0x19, 0xf7, 0x68, 0xcd, 0xe8, 0x2a, 0x8f, 0x34, 0xc3, 0x4a, 0x2b, 0xf4, 0x15, 0x2c, - 0x73, 0x12, 0xe5, 0x59, 0x84, 0xb3, 0x70, 0xa8, 0x23, 0x59, 0x3c, 0x3a, 0x1f, 0xff, 0x00, 0xaa, - 0xf2, 0x59, 0xe2, 0x87, 0xd6, 0xe3, 0xa3, 0xad, 0x76, 0xe2, 0xd1, 0xd6, 0x01, 0x27, 0xdc, 0x21, - 0xe1, 0x43, 0x91, 0xa7, 0xc2, 0x5b, 0x6a, 0xd8, 0xad, 0xc5, 0xee, 0xd9, 0x7f, 0xf6, 0xd7, 0x6a, - 0x92, 0x63, 0x2a, 0xc5, 0x67, 0x4d, 0x96, 0x52, 0xd9, 0xf4, 0x5f, 0x61, 0x0e, 0x24, 0xbf, 0x7c, - 0x22, 0xc9, 0xff, 0x3a, 0x0b, 0x8e, 0x2e, 0xf7, 0x69, 0x1a, 0xff, 0x12, 0x80, 0xee, 0xa3, 0xd2, - 0x8d, 0xe2, 0x28, 0x8b, 0xea, 0xd0, 0x31, 0x12, 0xec, 0x13, 0x93, 0x70, 0xa2, 0xdb, 0x64, 0x05, - 0xaa, 0x64, 0x4f, 0x72, 0xac, 0x25, 0xe1, 0xeb, 0xc5, 0x01, 0x2d, 0x73, 0x27, 0xa2, 0xe5, 0x06, - 0x54, 0xb7, 0x0a, 0xa2, 0x8b, 0x0c, 0x15, 0xe3, 0x3a, 0x03, 0x4b, 0x67, 0xa8, 0x2c, 0x2a, 0xc0, - 0x15, 0xa8, 0xee, 0xe2, 0x24, 0x1f, 0xe5, 0xae, 0x17, 0xcd, 0x3f, 0x2c, 0x58, 0xd2, 0xf3, 0xf3, - 0x1e, 0x91, 0xf8, 0x36, 0x96, 0x18, 0x35, 0xc0, 0x8d, 0x88, 0x08, 0x39, 0x1d, 0x48, 0xca, 0x32, - 0xf3, 0xa2, 0xb2, 0xa9, 0x50, 0x01, 0xd9, 0xd3, 0xb3, 0x37, 0xc8, 0x79, 0x62, 0xde, 0xe8, 0x8e, - 0x6c, 0xf7, 0x79, 0x72, 0xfc, 0xcc, 0x58, 0x81, 0x2a, 0x4d, 0x71, 0x3c, 0x9a, 0x16, 0x7a, 0x81, - 0x6e, 0x02, 0x60, 0x29, 0x39, 0xed, 0xe7, 0x92, 0x08, 0xaf, 0xaa, 0x46, 0xed, 0x85, 0x69, 0x44, - 0xa8, 0x94, 0xbb, 0x95, 0x82, 0x68, 0xbf, 0xe4, 0xa2, 0xf2, 0xd1, 0xc2, 0x79, 0xeb, 0xf9, 0x94, - 0x47, 0x9c, 0x3d, 0x31, 0xe2, 0xde, 0x51, 0x3e, 0xbf, 0x5b, 0x50, 0x53, 0x4d, 0xff, 0x76, 0xd3, - 0x39, 0xac, 0x06, 0x7b, 0x5c, 0x0d, 0xef, 0x28, 0x99, 0x0d, 0xb0, 0x7b, 0x91, 0x30, 0x52, 0xb1, - 0x1a, 0xf6, 0x1b, 0x48, 0xa5, 0xf9, 0x9b, 0x05, 0x70, 0x9b, 0x24, 0x44, 0x12, 0x25, 0xfb, 0xeb, - 0x60, 0x9a, 0x28, 0xa0, 0x91, 0x50, 0xc9, 0xbb, 0x1b, 0xe7, 0xa7, 0xc5, 0xd0, 0x8b, 0x84, 0xef, - 0x68, 0x68, 0x71, 0xe6, 0x75, 0x30, 0xc5, 0x52, 0x7e, 0xb3, 0xc7, 0xf8, 0x69, 0x68, 0xe1, 0x77, - 0x0d, 0x9c, 0xd1, 0xf5, 0x23, 0x14, 0x4f, 0xaf, 0x71, 0x5b, 0x88, 0xf5, 0x65, 0x24, 0x9a, 0xcf, - 0x2d, 0x38, 0x77, 0x8f, 0xc6, 0x1c, 0x17, 0xf5, 0x28, 0x7d, 0x9e, 0xac, 0x82, 0x23, 0x78, 0x18, - 0x08, 0x75, 0x9b, 0x59, 0xea, 0x36, 0x9b, 0x17, 0x3c, 0xdc, 0x2c, 0x6e, 0xb0, 0x1e, 0x34, 0x8b, - 0xbd, 0x63, 0x3e, 0xe2, 0x66, 0x95, 0xd3, 0x25, 0xc1, 0xc3, 0xbb, 0x47, 0x7f, 0xc7, 0xad, 0x82, - 0x13, 0x09, 0x69, 0x8e, 0xb1, 0xf5, 0x31, 0x91, 0x90, 0xea, 0x98, 0x4f, 0xc1, 0x39, 0x20, 0xf0, - 0x4d, 0xc6, 0xd5, 0xc2, 0x88, 0xc3, 0xe6, 0xcf, 0xb0, 0x58, 0x1e, 0x3f, 0xe8, 0x73, 0x33, 0xae, - 0x2c, 0xd5, 0x08, 0xef, 0x1f, 0x37, 0xae, 0xda, 0x5b, 0x38, 0x36, 0x3d, 0xa1, 0xfc, 0x56, 0xd7, - 0xc1, 0xde, 0xc2, 0x31, 0x3a, 0x03, 0xf6, 0x43, 0x32, 0x34, 0x7d, 0x5c, 0x3c, 0x4e, 0x9f, 0x54, - 0xdd, 0xde, 0xd3, 0x17, 0x75, 0xeb, 0xd9, 0x8b, 0xba, 0xf5, 0xf7, 0x8b, 0xba, 0xf5, 0xcb, 0xcb, - 0xfa, 0xcc, 0xb3, 0x97, 0xf5, 0x99, 0x3f, 0x5f, 0xd6, 0x67, 0x7e, 0xe8, 0xc4, 0x54, 0xee, 0xe4, - 0xfd, 0x76, 0xc8, 0xd2, 0x4e, 0x3f, 0xeb, 0xaf, 0x87, 0x3b, 0x98, 0x66, 0x9d, 0xd2, 0x2f, 0xca, - 0xde, 0xe1, 0x9f, 0xae, 0xfe, 0x9c, 0xfa, 0x49, 0xb9, 0xfa, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x29, 0xb8, 0xed, 0x11, 0x97, 0x0d, 0x00, 0x00, + // 1370 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xdf, 0x6e, 0x13, 0x47, + 0x17, 0xcf, 0x7a, 0xed, 0x24, 0x3e, 0xce, 0x3f, 0x86, 0xe8, 0x63, 0x09, 0xc2, 0x31, 0xd6, 0xf7, + 0x7d, 0xb2, 0xda, 0xc6, 0x16, 0x01, 0xd1, 0xaa, 0x42, 0x45, 0x71, 0xa1, 0xc8, 0x6a, 0x69, 0xd5, + 0x4d, 0xa0, 0x52, 0x6f, 0x56, 0xe3, 0xdd, 0xc9, 0x66, 0xca, 0xee, 0x8e, 0x3b, 0x33, 0x1b, 0x62, + 0xa4, 0xbe, 0x40, 0xaf, 0x7a, 0xd1, 0x57, 0xe8, 0x0b, 0x54, 0x3c, 0x04, 0xaa, 0x54, 0x09, 0x71, + 0x55, 0xf5, 0x22, 0xaa, 0xe0, 0x0d, 0x7a, 0xd1, 0xeb, 0x6a, 0x67, 0xc6, 0x66, 0xfd, 0x27, 0x38, + 0x41, 0x70, 0xb7, 0x73, 0xe6, 0x77, 0x66, 0xce, 0xbf, 0xdf, 0x39, 0xb3, 0x50, 0x0d, 0x39, 0x21, + 0xc9, 0x3e, 0x25, 0x51, 0xd0, 0x12, 0x92, 0x71, 0x1c, 0x92, 0x96, 0xec, 0xf7, 0x88, 0x68, 0xf6, + 0x38, 0x93, 0x0c, 0xa1, 0x57, 0xfb, 0x4d, 0xb3, 0xbf, 0x51, 0xf5, 0x99, 0x88, 0x99, 0x68, 0x75, + 0xb1, 0x20, 0xad, 0xc3, 0xab, 0x5d, 0x22, 0xf1, 0xd5, 0x96, 0xcf, 0x68, 0xa2, 0x75, 0x36, 0x2e, + 0xea, 0x7d, 0x4f, 0xad, 0x5a, 0x7a, 0x61, 0xb6, 0xd6, 0x43, 0x16, 0x32, 0x2d, 0xcf, 0xbe, 0x8c, + 0xf4, 0x4a, 0xce, 0x88, 0x1e, 0xee, 0xc7, 0x24, 0x91, 0x2d, 0x96, 0x4a, 0x6f, 0x3f, 0x62, 0x8f, + 0x0c, 0xe4, 0xff, 0x53, 0x20, 0x42, 0x72, 0x82, 0x63, 0x8f, 0x13, 0x9f, 0xf1, 0xc0, 0xe0, 0x36, + 0xa7, 0xf8, 0xe3, 0xb3, 0x38, 0x66, 0xc6, 0xb8, 0xfa, 0x71, 0x11, 0xa0, 0x9d, 0xfa, 0x0f, 0x89, + 0xec, 0x24, 0xfb, 0x0c, 0x35, 0xa1, 0xc4, 0x1e, 0x25, 0x84, 0x3b, 0x56, 0xcd, 0x6a, 0x94, 0xdb, + 0xce, 0xf3, 0x27, 0x5b, 0xeb, 0xc6, 0xe2, 0x9d, 0x20, 0xe0, 0x44, 0x88, 0x5d, 0xc9, 0x69, 0x12, + 0xba, 0x1a, 0x86, 0x36, 0xa1, 0xd2, 0x55, 0xda, 0x5e, 0x82, 0x63, 0xe2, 0x14, 0x32, 0x2d, 0x17, + 0xb4, 0xe8, 0x4b, 0x1c, 0x13, 0xd4, 0x06, 0x38, 0xa4, 0x82, 0x76, 0x69, 0x44, 0x65, 0xdf, 0xb1, + 0x6b, 0x56, 0x63, 0x65, 0xbb, 0xde, 0x9c, 0x8c, 0x62, 0xf3, 0xc1, 0x10, 0xb5, 0xd7, 0xef, 0x11, + 0x37, 0xa7, 0x85, 0xde, 0x87, 0x02, 0x0d, 0x9c, 0xa2, 0xb2, 0xe8, 0xd2, 0xd3, 0xe3, 0xcd, 0xb9, + 0x3f, 0x8f, 0x37, 0x8b, 0xf7, 0x69, 0x22, 0x9f, 0x3f, 0xd9, 0xaa, 0x18, 0xeb, 0xb2, 0xa5, 0x5b, + 0xa0, 0x01, 0xba, 0x05, 0x15, 0xc1, 0x52, 0xee, 0x13, 0x2f, 0xcb, 0x9b, 0x53, 0x52, 0x37, 0x56, + 0xa7, 0xdd, 0xb8, 0xab, 0x60, 0xfa, 0x36, 0x31, 0xfc, 0x46, 0x97, 0xa0, 0xec, 0x73, 0x82, 0x25, + 0xf1, 0xb0, 0x74, 0xe6, 0x6b, 0x56, 0xc3, 0x76, 0x17, 0xb5, 0x60, 0x47, 0xa2, 0x1d, 0x58, 0x35, + 0xe1, 0xf6, 0xb0, 0x8e, 0x87, 0xb3, 0x30, 0x23, 0x52, 0x2b, 0x46, 0xc1, 0x48, 0x51, 0x1b, 0xaa, + 0x61, 0xc4, 0xba, 0x38, 0xf2, 0x0e, 0x29, 0x97, 0x29, 0x8e, 0xbc, 0x90, 0xb3, 0xb4, 0xe7, 0xed, + 0xe3, 0x98, 0x46, 0x7d, 0x8f, 0x06, 0xce, 0x62, 0xcd, 0x6a, 0x2c, 0xbb, 0x1b, 0x1a, 0xf5, 0x40, + 0x83, 0xee, 0x66, 0x98, 0xcf, 0x14, 0xa4, 0x13, 0xa0, 0x0f, 0x00, 0xf9, 0x07, 0x98, 0x87, 0x24, + 0xf0, 0x38, 0xc1, 0x81, 0xf7, 0x7d, 0xca, 0x24, 0x76, 0xca, 0x35, 0xab, 0x51, 0x74, 0xd7, 0xcc, + 0x8e, 0x4b, 0x70, 0xf0, 0x75, 0x26, 0x47, 0x77, 0x60, 0xd9, 0x24, 0x49, 0x48, 0x2c, 0x53, 0xe1, + 0x80, 0x0a, 0x4a, 0x6d, 0x5a, 0x50, 0x74, 0x2d, 0xec, 0x2a, 0x9c, 0xbb, 0xd4, 0xcd, 0xad, 0xd0, + 0x75, 0x28, 0x4a, 0x1c, 0x0a, 0xa7, 0x52, 0xb3, 0x1a, 0x95, 0xe9, 0xda, 0x2e, 0x31, 0x81, 0xc4, + 0xa1, 0x70, 0x15, 0xba, 0xfe, 0x8f, 0x05, 0xa8, 0x93, 0x48, 0xc2, 0x13, 0x1c, 0xe5, 0x0a, 0xed, + 0x32, 0x40, 0x8f, 0xd3, 0x2c, 0x4b, 0x34, 0x26, 0xaa, 0xda, 0x6c, 0xb7, 0xac, 0x24, 0x7b, 0x34, + 0x26, 0xe8, 0x3d, 0x38, 0x27, 0x99, 0xc4, 0x91, 0xa7, 0x9d, 0xf1, 0x04, 0x7d, 0xac, 0xab, 0xab, + 0xe8, 0xae, 0xaa, 0x8d, 0x4f, 0x95, 0x7c, 0x97, 0x3e, 0x26, 0xe8, 0x1b, 0x58, 0x8f, 0x98, 0x3f, + 0x1e, 0x4f, 0xe1, 0xd8, 0x35, 0xbb, 0x51, 0xd9, 0xfe, 0xdf, 0x34, 0x3b, 0xbf, 0xc8, 0xf0, 0xf9, + 0xc8, 0xba, 0x28, 0x1a, 0x17, 0x09, 0x74, 0x13, 0x2e, 0x25, 0xe4, 0x48, 0x7a, 0x53, 0x4e, 0xf7, + 0x4c, 0x41, 0x2e, 0xbb, 0x17, 0x32, 0xc8, 0xc4, 0x79, 0x9d, 0xa0, 0xfe, 0xe3, 0x02, 0xc0, 0x57, + 0xdd, 0xef, 0x88, 0xff, 0x66, 0xcc, 0xda, 0x86, 0x05, 0x55, 0x75, 0x8c, 0x6b, 0x56, 0xbd, 0x46, + 0x63, 0x00, 0x1c, 0x67, 0xa3, 0x3d, 0xc1, 0xc6, 0x4d, 0xa8, 0x30, 0x65, 0x92, 0x06, 0x14, 0x35, + 0x40, 0x8b, 0x14, 0x40, 0x53, 0xad, 0x74, 0x3a, 0xaa, 0x5d, 0x83, 0xff, 0x9c, 0x10, 0x9a, 0x79, + 0x15, 0x9a, 0xf3, 0xd1, 0x64, 0x58, 0xd0, 0x15, 0x58, 0xea, 0xe1, 0x7e, 0xc4, 0x70, 0xa0, 0x93, + 0xba, 0xa0, 0x92, 0x5a, 0x31, 0x32, 0x95, 0xd0, 0xd1, 0x9e, 0xb1, 0xf8, 0x46, 0x3d, 0xe3, 0x0a, + 0x2c, 0xf9, 0x2c, 0x91, 0x19, 0x51, 0x55, 0x1f, 0x28, 0x2b, 0x57, 0x2b, 0x46, 0x36, 0x49, 0x74, + 0x18, 0x23, 0xfa, 0x1d, 0x58, 0x36, 0x91, 0x32, 0x9c, 0xa9, 0x9c, 0xcc, 0x19, 0x9d, 0xe5, 0x01, + 0x67, 0x58, 0x6e, 0x85, 0x3e, 0x87, 0x55, 0x4e, 0x82, 0x34, 0x09, 0x70, 0xe2, 0xf7, 0xb5, 0x25, + 0x4b, 0x27, 0xfb, 0xe3, 0x0e, 0xa1, 0xca, 0x9f, 0x15, 0x3e, 0xb2, 0x1e, 0x6f, 0x6d, 0xcb, 0x67, + 0x6e, 0x6d, 0x2d, 0x28, 0xfb, 0x07, 0xc4, 0x7f, 0x28, 0xd2, 0x58, 0x38, 0x2b, 0x35, 0xbb, 0xb1, + 0xd4, 0x3e, 0xf7, 0xf7, 0xf1, 0xe6, 0xb2, 0xe4, 0x98, 0x4a, 0xf1, 0x71, 0x9d, 0xc5, 0x54, 0xd6, + 0xdd, 0x57, 0x98, 0x21, 0xe5, 0x57, 0xcf, 0x42, 0xf9, 0xac, 0xca, 0xa8, 0xf0, 0xd2, 0x5e, 0x80, + 0x25, 0x4d, 0x42, 0x67, 0xad, 0x66, 0x35, 0x16, 0x5d, 0xa0, 0xe2, 0xbe, 0x91, 0x64, 0xe4, 0x57, + 0xbb, 0x24, 0xc8, 0x42, 0x7f, 0x4e, 0x93, 0xdf, 0x48, 0x76, 0x24, 0xfa, 0xf0, 0xd5, 0x76, 0xb7, + 0xef, 0xa0, 0x19, 0xd5, 0x3f, 0x50, 0x6c, 0xf7, 0x91, 0x03, 0x0b, 0x87, 0x84, 0x0b, 0xca, 0x12, + 0xe7, 0xbc, 0x3a, 0x74, 0xb0, 0xac, 0xff, 0x5c, 0x80, 0xb2, 0xae, 0xc0, 0x37, 0xe1, 0xe2, 0x65, + 0x00, 0x5d, 0xda, 0xb9, 0x21, 0x57, 0x56, 0x12, 0x45, 0x9a, 0xb1, 0xbc, 0xd8, 0x67, 0xce, 0xcb, + 0x99, 0x06, 0xdc, 0x3a, 0x94, 0xc8, 0x91, 0xe4, 0x58, 0xb3, 0xd4, 0xd5, 0x8b, 0x61, 0xa6, 0xe6, + 0xcf, 0xd4, 0x9c, 0x6f, 0x42, 0x69, 0x2f, 0xcb, 0x7d, 0xe6, 0xa1, 0x2a, 0x02, 0xed, 0x81, 0xa5, + 0x3d, 0x54, 0x12, 0x65, 0xe0, 0x3a, 0x94, 0x0e, 0x71, 0x94, 0x0e, 0x7c, 0xd7, 0x8b, 0xfa, 0xef, + 0x16, 0xac, 0xe8, 0x96, 0x7e, 0x8f, 0x48, 0x7c, 0x1b, 0x4b, 0x8c, 0x6a, 0x50, 0x09, 0x88, 0xf0, + 0x39, 0xed, 0xc9, 0x2c, 0x0b, 0xfa, 0xa0, 0xbc, 0x28, 0x23, 0x26, 0x39, 0xd2, 0xe3, 0xc0, 0x4b, + 0x79, 0x64, 0x4e, 0xac, 0x0c, 0x64, 0xf7, 0x79, 0x34, 0xbb, 0x8d, 0xad, 0x43, 0x89, 0xc6, 0x38, + 0x1c, 0x34, 0x30, 0xbd, 0x40, 0xb7, 0x00, 0xb0, 0x94, 0x9c, 0x76, 0x53, 0x49, 0x84, 0x53, 0x52, + 0xdd, 0xff, 0xe2, 0xb4, 0x40, 0x28, 0x97, 0xdb, 0xc5, 0x2c, 0xd0, 0x6e, 0x4e, 0x45, 0xf9, 0xa3, + 0xb9, 0xfc, 0xd6, 0xfd, 0xc9, 0x77, 0x5d, 0x7b, 0xa2, 0xeb, 0xbe, 0x23, 0x7f, 0x7e, 0xb3, 0x60, + 0x59, 0x15, 0xfd, 0xdb, 0x75, 0x67, 0x94, 0x0d, 0xf6, 0x38, 0x1b, 0xde, 0x91, 0x33, 0xdb, 0x60, + 0x77, 0x02, 0x61, 0xa8, 0x62, 0xd5, 0xec, 0x53, 0x50, 0xa5, 0xfe, 0xab, 0x05, 0x70, 0x9b, 0x44, + 0x44, 0x12, 0x45, 0xfb, 0x1b, 0x60, 0x8a, 0xc8, 0xa3, 0x81, 0x50, 0xce, 0x57, 0xb6, 0x2f, 0x4c, + 0xb3, 0xa1, 0x13, 0x08, 0xb7, 0xac, 0xa1, 0xd9, 0x9d, 0x37, 0xc0, 0x24, 0x4b, 0xe9, 0x15, 0x66, + 0xe8, 0x69, 0x68, 0xa6, 0x77, 0x1d, 0xca, 0x83, 0x89, 0x28, 0x54, 0x9c, 0x5e, 0xa3, 0xb6, 0x18, + 0xea, 0xf9, 0x28, 0xea, 0xcf, 0x2d, 0x38, 0x7f, 0x8f, 0x86, 0x1c, 0x67, 0xf9, 0xc8, 0xbd, 0x98, + 0x36, 0xa0, 0x2c, 0xb8, 0xef, 0x09, 0x35, 0x60, 0x2d, 0x35, 0x60, 0x17, 0x04, 0xf7, 0x77, 0xb3, + 0xa1, 0xda, 0x81, 0x7a, 0xb6, 0x37, 0xe3, 0x5d, 0x59, 0x50, 0x4a, 0x97, 0x05, 0xf7, 0xef, 0x9e, + 0xfc, 0xb4, 0xdc, 0x80, 0x72, 0x20, 0xa4, 0xb9, 0xc6, 0xd6, 0xd7, 0x04, 0x42, 0xaa, 0x6b, 0x3e, + 0x82, 0xf2, 0x30, 0x80, 0xa7, 0x69, 0x57, 0x8b, 0x83, 0x18, 0xd6, 0x7f, 0x80, 0xa5, 0x7c, 0xfb, + 0x41, 0x9f, 0x98, 0x76, 0x65, 0xa9, 0x42, 0xf8, 0xef, 0xac, 0x76, 0xd5, 0xdc, 0xc3, 0xa1, 0xa9, + 0x09, 0xa5, 0xb7, 0xb1, 0x05, 0xf6, 0x1e, 0x0e, 0xd1, 0x1a, 0xd8, 0x0f, 0x49, 0xdf, 0xd4, 0x71, + 0xf6, 0x79, 0x42, 0xa7, 0xfa, 0xa5, 0x00, 0x6b, 0xbb, 0x07, 0x38, 0x60, 0x8f, 0x72, 0x2f, 0xb2, + 0xeb, 0xb0, 0xc8, 0x7a, 0x84, 0xab, 0x27, 0xd6, 0xac, 0x41, 0x30, 0x44, 0x9a, 0x02, 0x2c, 0x9c, + 0xae, 0x57, 0x8f, 0xbf, 0x42, 0xec, 0xc9, 0x57, 0xc8, 0xf8, 0x7b, 0xa8, 0x38, 0xf9, 0x1e, 0x1a, + 0x19, 0xdb, 0xa5, 0x53, 0x8c, 0xed, 0xd1, 0xf9, 0x3a, 0x3f, 0x3e, 0x5f, 0x73, 0x63, 0x72, 0x61, + 0x64, 0x4c, 0xb6, 0x3b, 0x4f, 0x5f, 0x54, 0xad, 0x67, 0x2f, 0xaa, 0xd6, 0x5f, 0x2f, 0xaa, 0xd6, + 0x4f, 0x2f, 0xab, 0x73, 0xcf, 0x5e, 0x56, 0xe7, 0xfe, 0x78, 0x59, 0x9d, 0xfb, 0xb6, 0x15, 0x52, + 0x79, 0x90, 0x76, 0x9b, 0x3e, 0x8b, 0x5b, 0xdd, 0xa4, 0xbb, 0xe5, 0x1f, 0x60, 0x9a, 0xb4, 0x72, + 0x7f, 0x97, 0x47, 0xa3, 0xff, 0xcb, 0xdd, 0x79, 0xf5, 0x7f, 0x79, 0xed, 0xdf, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x69, 0x04, 0x1f, 0x0c, 0x52, 0x0f, 0x00, 0x00, } func (m *BucketInfo) Marshal() (dAtA []byte, err error) { @@ -1295,6 +1432,41 @@ func (m *ObjectInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Version != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Version)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x98 + } + if len(m.UpdatedBy) > 0 { + i -= len(m.UpdatedBy) + copy(dAtA[i:], m.UpdatedBy) + i = encodeVarintTypes(dAtA, i, uint64(len(m.UpdatedBy))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } + if m.UpdatedAt != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.UpdatedAt)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x88 + } + if m.IsUpdating { + i-- + if m.IsUpdating { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x80 + } if m.Tags != nil { { size, err := m.Tags.MarshalToSizedBuffer(dAtA[:i]) @@ -1920,6 +2092,77 @@ func (m *ResourceTags_Tag) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ShadowObjectInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ShadowObjectInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ShadowObjectInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Version != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Version)) + i-- + dAtA[i] = 0x38 + } + if m.UpdatedAt != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.UpdatedAt)) + i-- + dAtA[i] = 0x30 + } + if len(m.Checksums) > 0 { + for iNdEx := len(m.Checksums) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Checksums[iNdEx]) + copy(dAtA[i:], m.Checksums[iNdEx]) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Checksums[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if m.PayloadSize != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.PayloadSize)) + i-- + dAtA[i] = 0x20 + } + if len(m.ContentType) > 0 { + i -= len(m.ContentType) + copy(dAtA[i:], m.ContentType) + i = encodeVarintTypes(dAtA, i, uint64(len(m.ContentType))) + i-- + dAtA[i] = 0x1a + } + { + size := m.Id.Size() + i -= size + if _, err := m.Id.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Operator) > 0 { + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Operator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { offset -= sovTypes(v) base := offset @@ -2059,6 +2302,19 @@ func (m *ObjectInfo) Size() (n int) { l = m.Tags.Size() n += 1 + l + sovTypes(uint64(l)) } + if m.IsUpdating { + n += 3 + } + if m.UpdatedAt != 0 { + n += 2 + sovTypes(uint64(m.UpdatedAt)) + } + l = len(m.UpdatedBy) + if l > 0 { + n += 2 + l + sovTypes(uint64(l)) + } + if m.Version != 0 { + n += 2 + sovTypes(uint64(m.Version)) + } return n } @@ -2290,6 +2546,40 @@ func (m *ResourceTags_Tag) Size() (n int) { return n } +func (m *ShadowObjectInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Operator) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = m.Id.Size() + n += 1 + l + sovTypes(uint64(l)) + l = len(m.ContentType) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.PayloadSize != 0 { + n += 1 + sovTypes(uint64(m.PayloadSize)) + } + if len(m.Checksums) > 0 { + for _, b := range m.Checksums { + l = len(b) + n += 1 + l + sovTypes(uint64(l)) + } + } + if m.UpdatedAt != 0 { + n += 1 + sovTypes(uint64(m.UpdatedAt)) + } + if m.Version != 0 { + n += 1 + sovTypes(uint64(m.Version)) + } + return n +} + func sovTypes(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -3191,6 +3481,96 @@ func (m *ObjectInfo) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsUpdating", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsUpdating = bool(v != 0) + case 17: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdatedAt", wireType) + } + m.UpdatedAt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UpdatedAt |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdatedBy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UpdatedBy = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 19: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + m.Version = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Version |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -4780,6 +5160,243 @@ func (m *ResourceTags_Tag) Unmarshal(dAtA []byte) error { } return nil } +func (m *ShadowObjectInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ShadowObjectInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ShadowObjectInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Id.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContentType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContentType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PayloadSize", wireType) + } + m.PayloadSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PayloadSize |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Checksums", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Checksums = append(m.Checksums, make([]byte, postIndex-iNdEx)) + copy(m.Checksums[len(m.Checksums)-1], dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdatedAt", wireType) + } + m.UpdatedAt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UpdatedAt |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + m.Version = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Version |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipTypes(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 From de62f2c0d72a1ef5be9cb827dd1077f8ea8b5646 Mon Sep 17 00:00:00 2001 From: Alexgao001 Date: Mon, 5 Feb 2024 12:25:27 +0800 Subject: [PATCH 2/6] fix comments --- e2e/tests/storage_bill_test.go | 10 + proto/greenfield/storage/events.proto | 2 - x/storage/keeper/keeper.go | 18 +- x/storage/keeper/msg_server.go | 1 - x/storage/types/events.pb.go | 282 +++++++++++--------------- x/storage/types/options.go | 1 - 6 files changed, 137 insertions(+), 177 deletions(-) diff --git a/e2e/tests/storage_bill_test.go b/e2e/tests/storage_bill_test.go index 6ce36083b..032c857b3 100644 --- a/e2e/tests/storage_bill_test.go +++ b/e2e/tests/storage_bill_test.go @@ -2567,4 +2567,14 @@ func (s *PaymentTestSuite) TestStorageBill_UpdateObject() { userStreamAccountAfterSealObjectTx := streamRecordsAfterSealObjectTx.User s.Require().Equal(sdkmath.ZeroInt(), userStreamAccountAfterSealObjectTx.LockBalance) s.Require().Equal(userStreamAccountAfterUpdateObjTx.NetflowRate.Sub(orginChargeRate.Neg()).Add(newChargeRate.Neg()), userStreamAccountAfterSealObjectTx.NetflowRate) + + // User deletes the object + msgDeleteObject := storagetypes.NewMsgDeleteObject(user.GetAddr(), bucketName, objectName) + s.SendTxBlock(user, msgDeleteObject) + + // get stream records after UpdateObjectContent Tx + streamRecordsAfterDeleteObjectTx := s.getStreamRecords(streamAddresses) + s.T().Logf("streamRecordsAfterDeleteObjectTx %s", core.YamlString(streamRecordsAfterDeleteObjectTx)) + userstreamRecordsAfterDeleteObjectTx := streamRecordsAfterDeleteObjectTx.User + s.Require().Equal(sdk.ZeroInt(), userstreamRecordsAfterDeleteObjectTx.LockBalance) } diff --git a/proto/greenfield/storage/events.proto b/proto/greenfield/storage/events.proto index 915b88451..ee3ad7082 100644 --- a/proto/greenfield/storage/events.proto +++ b/proto/greenfield/storage/events.proto @@ -178,8 +178,6 @@ message EventSealObject { uint32 global_virtual_group_id = 7; // local_virtual_group_id defines the unique id of lvg which the object stored uint32 local_virtual_group_id = 8; - // for_update indicates whether sealing on a updating object - bool for_update = 9; } // EventCopyObject is emitted on MsgCopyObject diff --git a/x/storage/keeper/keeper.go b/x/storage/keeper/keeper.go index 25fec83b7..37297bbf1 100644 --- a/x/storage/keeper/keeper.go +++ b/x/storage/keeper/keeper.go @@ -882,7 +882,6 @@ func (k Keeper) SealObject( Status: objectInfo.ObjectStatus, GlobalVirtualGroupId: opts.GlobalVirtualGroupId, LocalVirtualGroupId: objectInfo.LocalVirtualGroupId, - ForUpdate: isUpdate, }); err != nil { return err } @@ -967,10 +966,6 @@ func (k Keeper) DeleteObject( } return types.ErrObjectNotSealed } - // user should cancel the update first to delete an object. - if objectInfo.IsUpdating { - return types.ErrObjectIsUpdating - } // check permission effect := k.VerifyObjectPermission(ctx, bucketInfo, objectInfo, operator, permtypes.ACTION_DELETE_OBJECT) if effect != permtypes.EFFECT_ALLOW { @@ -978,7 +973,13 @@ func (k Keeper) DeleteObject( "The operator(%s) has no DeleteObject permission of the bucket(%s), object(%s)", operator.String(), bucketName, objectName) } - + if objectInfo.IsUpdating { + shadowObjectInfo := k.MustGetShadowObjectInfo(ctx, bucketInfo.BucketName, objectInfo.ObjectName) + err := k.UnlockShadowObjectFeeAndDeleteShadowObjectInfo(ctx, bucketInfo, shadowObjectInfo, objectInfo.ObjectName) + if err != nil { + return err + } + } _ = k.MustGetPrimarySPForBucket(ctx, bucketInfo) internalBucketInfo := k.MustGetInternalBucketInfo(ctx, bucketInfo.Id) @@ -1220,7 +1221,6 @@ func (k Keeper) RejectSealObject(ctx sdk.Context, operator sdk.AccAddress, bucke // only this field need to revert objectInfo.IsUpdating = false obz := k.cdc.MustMarshal(objectInfo) - store.Set(types.GetObjectKey(bucketName, objectName), k.objectSeq.EncodeSequence(objectInfo.Id)) store.Set(types.GetObjectByIDKey(objectInfo.Id), obz) } else { err := k.UnlockObjectStoreFee(ctx, bucketInfo, objectInfo) @@ -2442,9 +2442,6 @@ func (k Keeper) UpdateObjectContent( if objectInfo.IsUpdating { return types.ErrObjectIsUpdating.Wrapf("The object is already being updated") } - if objectInfo.SourceType != opts.SourceType { - return types.ErrSourceTypeMismatch - } // check permission effect := k.VerifyObjectPermission(ctx, bucketInfo, objectInfo, operator, permtypes.ACTION_UPDATE_OBJECT_CONTENT) if effect != permtypes.EFFECT_ALLOW { @@ -2569,7 +2566,6 @@ func (k Keeper) CancelUpdateObjectContent( objectInfo.IsUpdating = false obz := k.cdc.MustMarshal(objectInfo) - store.Set(types.GetObjectKey(bucketName, objectName), k.objectSeq.EncodeSequence(objectInfo.Id)) store.Set(types.GetObjectByIDKey(objectInfo.Id), obz) return ctx.EventManager().EmitTypedEvents(&types.EventCancelUpdateObjectContent{ diff --git a/x/storage/keeper/msg_server.go b/x/storage/keeper/msg_server.go index d1f6bc591..2ddcfa17f 100644 --- a/x/storage/keeper/msg_server.go +++ b/x/storage/keeper/msg_server.go @@ -721,7 +721,6 @@ func (k msgServer) UpdateObjectContent(goCtx context.Context, msg *storagetypes. err := k.Keeper.UpdateObjectContent(ctx, operatorAcc, msg.BucketName, msg.ObjectName, msg.PayloadSize, storagetypes.UpdateObjectOptions{ Checksums: msg.ExpectChecksums, ContentType: msg.ContentType, - SourceType: types.SOURCE_TYPE_ORIGIN, }) if err != nil { return nil, err diff --git a/x/storage/types/events.pb.go b/x/storage/types/events.pb.go index f8fcabce3..4f73a6f83 100644 --- a/x/storage/types/events.pb.go +++ b/x/storage/types/events.pb.go @@ -650,8 +650,6 @@ type EventSealObject struct { GlobalVirtualGroupId uint32 `protobuf:"varint,7,opt,name=global_virtual_group_id,json=globalVirtualGroupId,proto3" json:"global_virtual_group_id,omitempty"` // local_virtual_group_id defines the unique id of lvg which the object stored LocalVirtualGroupId uint32 `protobuf:"varint,8,opt,name=local_virtual_group_id,json=localVirtualGroupId,proto3" json:"local_virtual_group_id,omitempty"` - // for_update indicates whether sealing on a updating object - ForUpdate bool `protobuf:"varint,9,opt,name=for_update,json=forUpdate,proto3" json:"for_update,omitempty"` } func (m *EventSealObject) Reset() { *m = EventSealObject{} } @@ -729,13 +727,6 @@ func (m *EventSealObject) GetLocalVirtualGroupId() uint32 { return 0 } -func (m *EventSealObject) GetForUpdate() bool { - if m != nil { - return m.ForUpdate - } - return false -} - // EventCopyObject is emitted on MsgCopyObject type EventCopyObject struct { // operator define the account address of operator who copy the object @@ -2715,126 +2706,126 @@ func init() { func init() { proto.RegisterFile("greenfield/storage/events.proto", fileDescriptor_946dcba4f763ddc4) } var fileDescriptor_946dcba4f763ddc4 = []byte{ - // 1900 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0xcb, 0x8f, 0x23, 0x47, - 0x19, 0xdf, 0xf6, 0x6b, 0xec, 0xcf, 0x63, 0x7b, 0xa7, 0x19, 0x36, 0x66, 0x92, 0x78, 0x9c, 0x46, - 0x84, 0x49, 0xc4, 0xda, 0x68, 0x13, 0xd0, 0xde, 0x56, 0x33, 0xb3, 0x01, 0x59, 0x90, 0x64, 0x69, - 0x6f, 0x72, 0xe0, 0xd2, 0x2a, 0x77, 0xd7, 0x78, 0x9b, 0x6d, 0x77, 0x35, 0x55, 0xe5, 0x99, 0x75, - 0xfe, 0x01, 0xb8, 0x20, 0x45, 0x42, 0x48, 0x70, 0xc9, 0x15, 0x24, 0x84, 0xc4, 0x21, 0x57, 0xee, - 0x7b, 0x4c, 0x96, 0x0b, 0x0f, 0x29, 0xa0, 0xdd, 0x0b, 0x20, 0x21, 0x38, 0x73, 0x42, 0x5d, 0x55, - 0xdd, 0xee, 0x76, 0x7b, 0xd6, 0xd3, 0xde, 0xec, 0xce, 0x6c, 0x6e, 0xee, 0xf2, 0xaf, 0xcb, 0xdf, - 0xe3, 0xf7, 0x3d, 0xea, 0x2b, 0xc3, 0xee, 0x98, 0x62, 0xec, 0x1f, 0xb9, 0xd8, 0x73, 0xfa, 0x8c, - 0x13, 0x8a, 0xc6, 0xb8, 0x8f, 0x8f, 0xb1, 0xcf, 0x59, 0x2f, 0xa0, 0x84, 0x13, 0x5d, 0x9f, 0x03, - 0x7a, 0x0a, 0xb0, 0xf3, 0x15, 0x9b, 0xb0, 0x09, 0x61, 0x96, 0x40, 0xf4, 0xe5, 0x83, 0x84, 0xef, - 0x6c, 0x8f, 0xc9, 0x98, 0xc8, 0xf5, 0xf0, 0x93, 0x5a, 0xdd, 0x1d, 0x13, 0x32, 0xf6, 0x70, 0x5f, - 0x3c, 0x8d, 0xa6, 0x47, 0x7d, 0xee, 0x4e, 0x30, 0xe3, 0x68, 0x12, 0xc4, 0x80, 0xb9, 0x18, 0x14, - 0x33, 0x32, 0xa5, 0x36, 0xee, 0xf3, 0x59, 0x80, 0xd9, 0x12, 0x40, 0x24, 0xa7, 0x4d, 0x26, 0x13, - 0xe2, 0x2b, 0x40, 0x67, 0x09, 0x20, 0xb1, 0x81, 0xf1, 0xc7, 0x12, 0x6c, 0xbd, 0x15, 0x2a, 0x76, - 0x48, 0x31, 0xe2, 0xf8, 0x60, 0x6a, 0xdf, 0xc5, 0x5c, 0xef, 0x41, 0x99, 0x9c, 0xf8, 0x98, 0xb6, - 0xb5, 0xae, 0xb6, 0x57, 0x3b, 0x68, 0x3f, 0xf8, 0xf8, 0xea, 0xb6, 0xd2, 0x67, 0xdf, 0x71, 0x28, - 0x66, 0x6c, 0xc8, 0xa9, 0xeb, 0x8f, 0x4d, 0x09, 0xd3, 0x77, 0xa1, 0x3e, 0x12, 0x6f, 0x5a, 0x3e, - 0x9a, 0xe0, 0x76, 0x21, 0x7c, 0xcb, 0x04, 0xb9, 0xf4, 0x0e, 0x9a, 0x60, 0xfd, 0x00, 0xe0, 0xd8, - 0x65, 0xee, 0xc8, 0xf5, 0x5c, 0x3e, 0x6b, 0x17, 0xbb, 0xda, 0x5e, 0xf3, 0x9a, 0xd1, 0xcb, 0xda, - 0xb0, 0xf7, 0x7e, 0x8c, 0xba, 0x3d, 0x0b, 0xb0, 0x99, 0x78, 0x4b, 0x7f, 0x11, 0x6a, 0xb6, 0x10, - 0xd2, 0x42, 0xbc, 0x5d, 0xea, 0x6a, 0x7b, 0x45, 0xb3, 0x2a, 0x17, 0xf6, 0xb9, 0x7e, 0x1d, 0x6a, - 0x4a, 0x02, 0xd7, 0x69, 0x97, 0x85, 0xd4, 0x2f, 0xde, 0xff, 0x6c, 0xf7, 0xd2, 0x5f, 0x3e, 0xdb, - 0x2d, 0xbd, 0xe7, 0xfa, 0xfc, 0xc1, 0xc7, 0x57, 0xeb, 0x4a, 0x83, 0xf0, 0xd1, 0xac, 0x4a, 0xf4, - 0xc0, 0xd1, 0x6f, 0x40, 0x5d, 0x1a, 0xd6, 0x0a, 0xed, 0xd2, 0xae, 0x08, 0xd9, 0x3a, 0xcb, 0x64, - 0x1b, 0x0a, 0x98, 0x94, 0x8b, 0xc5, 0x9f, 0xf5, 0x6f, 0x80, 0x6e, 0xdf, 0x41, 0x74, 0x8c, 0x1d, - 0x8b, 0x62, 0xe4, 0x58, 0x3f, 0x9e, 0x12, 0x8e, 0xda, 0x1b, 0x5d, 0x6d, 0xaf, 0x64, 0x5e, 0x56, - 0xdf, 0x98, 0x18, 0x39, 0x3f, 0x08, 0xd7, 0xf5, 0x7d, 0x68, 0x05, 0x68, 0x36, 0xc1, 0x3e, 0xb7, - 0x90, 0x34, 0x65, 0xbb, 0xba, 0xc2, 0xc8, 0x4d, 0xf5, 0x82, 0x5a, 0xd5, 0x0d, 0x68, 0x04, 0xd4, - 0x9d, 0x20, 0x3a, 0xb3, 0x58, 0x10, 0xea, 0x5b, 0xeb, 0x6a, 0x7b, 0x0d, 0xb3, 0xae, 0x16, 0x87, - 0xc1, 0xc0, 0xd1, 0x0f, 0xa0, 0x33, 0xf6, 0xc8, 0x08, 0x79, 0xd6, 0xb1, 0x4b, 0xf9, 0x14, 0x79, - 0xd6, 0x98, 0x92, 0x69, 0x60, 0x1d, 0xa1, 0x89, 0xeb, 0xcd, 0xc2, 0x97, 0x40, 0xbc, 0xb4, 0x23, - 0x51, 0xef, 0x4b, 0xd0, 0x77, 0x43, 0xcc, 0x77, 0x04, 0x64, 0xe0, 0xe8, 0xd7, 0xa1, 0xc2, 0x38, - 0xe2, 0x53, 0xd6, 0xae, 0x0b, 0xa3, 0x74, 0x97, 0x19, 0x45, 0x32, 0x66, 0x28, 0x70, 0xa6, 0xc2, - 0x1b, 0xbf, 0x2c, 0x28, 0x56, 0xdd, 0xc4, 0x1e, 0x8e, 0x59, 0xf5, 0x26, 0x54, 0x49, 0x80, 0x29, - 0xe2, 0x64, 0x35, 0xb1, 0x62, 0xe4, 0x9c, 0x8b, 0x85, 0xb5, 0xb8, 0x58, 0xcc, 0x70, 0x31, 0x45, - 0x95, 0x52, 0x1e, 0xaa, 0xac, 0x36, 0x6a, 0x79, 0x95, 0x51, 0x8d, 0x9f, 0x14, 0xe1, 0xcb, 0xc2, - 0x34, 0xef, 0x05, 0x4e, 0x1c, 0x70, 0x03, 0xff, 0x88, 0xac, 0x69, 0x9e, 0x95, 0xa1, 0x97, 0x52, - 0xb7, 0x98, 0x47, 0xdd, 0xe5, 0xc4, 0x2e, 0x9d, 0x42, 0xec, 0xaf, 0x67, 0x89, 0x2d, 0xe2, 0x30, - 0x43, 0xdf, 0x74, 0x2e, 0xa8, 0xac, 0x95, 0x0b, 0x56, 0x7b, 0x62, 0x63, 0xa5, 0x27, 0x7e, 0xa3, - 0xc1, 0x15, 0x49, 0x52, 0x97, 0xd9, 0xc4, 0xe7, 0xae, 0x3f, 0x8d, 0x98, 0x9a, 0xb2, 0x99, 0x96, - 0xc7, 0x66, 0x2b, 0xdd, 0x71, 0x05, 0x2a, 0x14, 0x23, 0x46, 0x7c, 0xc5, 0x4c, 0xf5, 0x14, 0x66, - 0x37, 0x47, 0x04, 0x4b, 0x22, 0xbb, 0xc9, 0x85, 0x7d, 0x6e, 0xfc, 0xbc, 0x92, 0xca, 0xd2, 0xef, - 0x8e, 0x7e, 0x84, 0x6d, 0xae, 0x5f, 0x83, 0x0d, 0x91, 0xff, 0xce, 0xc0, 0x97, 0x08, 0xf8, 0xf9, - 0x47, 0xd3, 0x2e, 0xd4, 0x89, 0x10, 0x47, 0x02, 0x4a, 0x12, 0x20, 0x97, 0xb2, 0xfc, 0xab, 0xe4, - 0xb1, 0xe5, 0x75, 0xa8, 0xa9, 0xad, 0x95, 0x3f, 0x57, 0xbd, 0x29, 0xd1, 0x03, 0x27, 0x9b, 0x21, - 0xab, 0xd9, 0x0c, 0xf9, 0x0a, 0x6c, 0x06, 0x68, 0xe6, 0x11, 0xe4, 0x58, 0xcc, 0xfd, 0x00, 0x8b, - 0x24, 0x5a, 0x32, 0xeb, 0x6a, 0x6d, 0xe8, 0x7e, 0xb0, 0x58, 0xb5, 0x60, 0x2d, 0xa6, 0xbe, 0x02, - 0x9b, 0x21, 0xb9, 0xc2, 0xb0, 0x10, 0xf5, 0xa5, 0x2e, 0x0c, 0x54, 0x57, 0x6b, 0xa2, 0x80, 0xa4, - 0x0a, 0xdb, 0x66, 0xa6, 0xb0, 0x45, 0x49, 0xb8, 0x71, 0x7a, 0x12, 0x96, 0x84, 0x48, 0x27, 0x61, - 0xfd, 0x7b, 0xd0, 0xa2, 0xd8, 0x99, 0xfa, 0x0e, 0xf2, 0xed, 0x99, 0xfc, 0xf1, 0xe6, 0xe9, 0x2a, - 0x98, 0x31, 0x54, 0xa8, 0xd0, 0xa4, 0xa9, 0xe7, 0xc5, 0x2a, 0xd9, 0xca, 0x5d, 0x25, 0x5f, 0x82, - 0x9a, 0x7d, 0x07, 0xdb, 0x77, 0xd9, 0x74, 0xc2, 0xda, 0x97, 0xbb, 0xc5, 0xbd, 0x4d, 0x73, 0xbe, - 0xa0, 0xbf, 0x01, 0x57, 0x3c, 0x62, 0x67, 0xc2, 0xd9, 0x75, 0xda, 0x5b, 0xc2, 0x73, 0x5f, 0x12, - 0xdf, 0x26, 0xc3, 0x78, 0xe0, 0x18, 0xff, 0xd1, 0xe0, 0x05, 0x19, 0x15, 0xc8, 0xb7, 0xb1, 0x97, - 0x8a, 0x8d, 0xa7, 0x94, 0x4c, 0x17, 0xd8, 0x5e, 0xcc, 0xb0, 0x3d, 0xc3, 0xbc, 0x52, 0x96, 0x79, - 0x29, 0x5e, 0x57, 0x72, 0xf0, 0xda, 0xf8, 0x69, 0x11, 0x5a, 0x42, 0xe3, 0x21, 0x46, 0xde, 0x39, - 0x6b, 0x9a, 0xd2, 0xa2, 0x9c, 0x27, 0x3a, 0xe7, 0x94, 0xae, 0xe4, 0xa4, 0xf4, 0xb7, 0xe0, 0x85, - 0xa5, 0x69, 0x3f, 0xce, 0xf7, 0xdb, 0xd9, 0x7c, 0x3f, 0x70, 0x1e, 0xc3, 0xae, 0xea, 0xa9, 0xec, - 0xd2, 0x5f, 0x06, 0x38, 0x22, 0xd4, 0x9a, 0x8a, 0x32, 0x2d, 0xb2, 0x43, 0xd5, 0xac, 0x1d, 0x11, - 0x2a, 0xeb, 0xb6, 0xf1, 0x51, 0xe4, 0x8a, 0x43, 0x12, 0xcc, 0x9e, 0xc8, 0x15, 0xaf, 0x42, 0x8b, - 0x51, 0xdb, 0xca, 0xba, 0xa3, 0xc1, 0xa8, 0x7d, 0x30, 0xf7, 0x88, 0xc2, 0x65, 0xbd, 0x12, 0xe2, - 0xde, 0x9d, 0x3b, 0xe6, 0x55, 0x68, 0x39, 0x8c, 0xa7, 0xf6, 0x93, 0x59, 0xb9, 0xe1, 0x30, 0x9e, - 0xde, 0x2f, 0xc4, 0x25, 0xf7, 0x2b, 0xc7, 0xb8, 0xc4, 0x7e, 0x37, 0xa0, 0x91, 0xf8, 0xdd, 0xb3, - 0x51, 0xb6, 0x1e, 0x8b, 0x24, 0x3a, 0xec, 0x46, 0xe2, 0x87, 0xce, 0x96, 0xcb, 0xeb, 0xb1, 0x0c, - 0x6b, 0xfa, 0xcf, 0xf8, 0x9f, 0x96, 0xea, 0x41, 0x2f, 0x52, 0xb4, 0x94, 0xf2, 0x44, 0xcb, 0xe9, - 0xca, 0x97, 0x4f, 0x57, 0xfe, 0x1f, 0x9a, 0xea, 0x32, 0x4d, 0x2c, 0xc2, 0xe8, 0x82, 0xa5, 0x8b, - 0x5c, 0x06, 0x48, 0x07, 0x62, 0x79, 0x31, 0x10, 0x97, 0xb5, 0x71, 0x4a, 0xd7, 0x05, 0xa9, 0xb5, - 0x65, 0xbd, 0xf1, 0x5c, 0xa8, 0x42, 0x1e, 0xa1, 0xd6, 0x6a, 0xe3, 0x7e, 0x56, 0x48, 0xf5, 0xfe, - 0x8a, 0xdf, 0x4f, 0xb1, 0xf7, 0x7f, 0x8a, 0x5e, 0x49, 0xf7, 0x46, 0xe5, 0x75, 0x7a, 0x23, 0xe3, - 0xbf, 0x1a, 0x5c, 0x4e, 0xb4, 0xb5, 0x82, 0xbc, 0xb9, 0x67, 0x0f, 0x2f, 0x03, 0xc8, 0x88, 0x48, - 0xd8, 0xa0, 0x26, 0x56, 0x84, 0x86, 0xdf, 0x86, 0x6a, 0x1c, 0x30, 0x67, 0x38, 0xfd, 0x6c, 0x8c, - 0x55, 0xfa, 0x5f, 0x68, 0x78, 0x4a, 0xb9, 0x1b, 0x9e, 0x6d, 0x28, 0xe3, 0x7b, 0x9c, 0x22, 0x95, - 0x54, 0xe5, 0x83, 0xf1, 0xab, 0x48, 0x65, 0x99, 0x95, 0x16, 0x54, 0x2e, 0xac, 0xa3, 0x72, 0xf1, - 0x71, 0x2a, 0x97, 0xce, 0xae, 0xb2, 0xf1, 0x67, 0x4d, 0x95, 0xb4, 0xef, 0x63, 0x74, 0xac, 0x44, - 0xbb, 0x01, 0xcd, 0x09, 0x9e, 0x8c, 0x30, 0x8d, 0x0f, 0x75, 0xab, 0xdc, 0xd2, 0x90, 0xf8, 0xe8, - 0xb4, 0x77, 0x41, 0x74, 0xfb, 0x77, 0x41, 0x65, 0x09, 0x19, 0x7a, 0x42, 0xb9, 0xb7, 0x85, 0xa0, - 0xcf, 0x68, 0x2c, 0xf1, 0x74, 0xf4, 0xd2, 0x6f, 0x45, 0xfe, 0x61, 0x16, 0x27, 0xa1, 0x8f, 0xda, - 0xe5, 0x6e, 0x71, 0xaf, 0x7e, 0xed, 0xf5, 0x65, 0x4c, 0x15, 0x06, 0x48, 0xa8, 0x7e, 0x13, 0x73, - 0xe4, 0x7a, 0xe6, 0xa6, 0xda, 0xe1, 0x36, 0xd9, 0x77, 0x1c, 0xfd, 0x26, 0x6c, 0x25, 0x76, 0x94, - 0xb9, 0xab, 0x5d, 0xe9, 0x16, 0x1f, 0xab, 0x64, 0x2b, 0xde, 0x42, 0xf2, 0xda, 0xf8, 0x6b, 0x21, - 0x2e, 0x40, 0x3e, 0x3e, 0xf9, 0xc2, 0x98, 0x7b, 0x21, 0x2b, 0x94, 0x73, 0x67, 0x85, 0x9b, 0xb0, - 0xa1, 0x4c, 0x25, 0x6c, 0x9a, 0xcf, 0x51, 0xd1, 0xab, 0xc6, 0x2f, 0xa2, 0x9a, 0x97, 0xc1, 0xe8, - 0xdf, 0x84, 0x8a, 0x44, 0xad, 0x34, 0xae, 0xc2, 0xe9, 0x03, 0x68, 0xe1, 0x7b, 0x81, 0x4b, 0x11, - 0x77, 0x89, 0x6f, 0x71, 0x57, 0x65, 0xd1, 0xfa, 0xb5, 0x9d, 0x9e, 0x9c, 0x4f, 0xf7, 0xa2, 0xf9, - 0x74, 0xef, 0x76, 0x34, 0x9f, 0x3e, 0x28, 0x7d, 0xf8, 0xb7, 0x5d, 0xcd, 0x6c, 0xce, 0x5f, 0x0c, - 0xbf, 0x32, 0xfe, 0xa5, 0xa5, 0x0a, 0x9c, 0x90, 0xee, 0xad, 0x30, 0xef, 0x3d, 0xdf, 0x5e, 0x5f, - 0x9e, 0xca, 0xef, 0x47, 0x0d, 0xe6, 0xdb, 0x2e, 0xa5, 0x84, 0x3e, 0xd1, 0x90, 0x33, 0xdf, 0x14, - 0x2f, 0xd7, 0xd0, 0xd2, 0x80, 0x86, 0x83, 0x19, 0xb7, 0xec, 0x3b, 0xc8, 0xf5, 0xe7, 0x6d, 0x63, - 0x3d, 0x5c, 0x3c, 0x0c, 0xd7, 0x06, 0x8e, 0xf1, 0xfb, 0xe8, 0x24, 0x9d, 0x54, 0xc5, 0xc4, 0x6c, - 0xea, 0xf1, 0xb0, 0xd3, 0x51, 0xa7, 0x35, 0x4d, 0xbc, 0x18, 0x9d, 0xc5, 0xce, 0x59, 0xe4, 0x7f, - 0xa6, 0xad, 0xff, 0xdc, 0x76, 0xb7, 0x67, 0xd1, 0xf5, 0xd3, 0xb4, 0x7b, 0xa4, 0xae, 0x4f, 0xea, - 0x9e, 0x73, 0xd6, 0xe9, 0x0f, 0x51, 0x23, 0x24, 0x75, 0xba, 0x50, 0xbd, 0x5f, 0x46, 0xfe, 0x52, - 0x56, 0xfe, 0xdf, 0x46, 0x29, 0x38, 0x21, 0xff, 0x0a, 0x97, 0x9c, 0xa3, 0xb4, 0xc7, 0x8a, 0x40, - 0x43, 0x8e, 0x3c, 0x7c, 0x8b, 0x78, 0xae, 0x3d, 0x3b, 0xf4, 0x30, 0xf2, 0xa7, 0x81, 0xbe, 0x03, - 0xd5, 0x91, 0x47, 0xec, 0xbb, 0xef, 0x4c, 0x27, 0x42, 0xde, 0xa2, 0x19, 0x3f, 0x87, 0xe5, 0x4e, - 0x9d, 0x66, 0x5c, 0xff, 0x88, 0xa8, 0xb2, 0xb0, 0xb4, 0xdc, 0xc9, 0xb2, 0x1f, 0x9e, 0x65, 0x4c, - 0x70, 0xe2, 0xcf, 0xc6, 0x03, 0x0d, 0xb6, 0x95, 0x95, 0xc6, 0xb2, 0x4e, 0x3c, 0xc3, 0x34, 0x99, - 0xeb, 0xb2, 0xe3, 0x35, 0xd8, 0x72, 0x18, 0xb7, 0x96, 0x0d, 0xef, 0x9a, 0x0e, 0xe3, 0xb7, 0xe6, - 0xf3, 0x3b, 0xe3, 0x77, 0x1a, 0xec, 0x24, 0xe6, 0x8e, 0x17, 0x5d, 0xb5, 0x90, 0xaa, 0xed, 0xc4, - 0x30, 0x40, 0xca, 0x8b, 0x2f, 0xaa, 0xb4, 0x1f, 0x15, 0xe0, 0x25, 0x35, 0x58, 0x9b, 0x04, 0x21, - 0x91, 0x2e, 0x3c, 0x75, 0x56, 0x5f, 0x46, 0x95, 0x56, 0xde, 0xb5, 0xbe, 0x06, 0x5b, 0x8c, 0xda, - 0x0b, 0xf4, 0x93, 0x69, 0xb3, 0xc9, 0xa8, 0x9d, 0xa4, 0x9f, 0x05, 0x75, 0x35, 0x03, 0xe6, 0xb7, - 0xd1, 0x38, 0x8c, 0xdf, 0xe8, 0xaf, 0x01, 0x6a, 0xc2, 0x11, 0x3f, 0xeb, 0x6f, 0x42, 0x89, 0xa3, - 0x31, 0x53, 0x81, 0xdb, 0x5d, 0x3e, 0xf7, 0x57, 0xdd, 0x29, 0x1a, 0x33, 0x53, 0xa0, 0x8d, 0x5f, - 0x17, 0x14, 0x5f, 0x92, 0x63, 0x8a, 0x43, 0x79, 0x61, 0xb1, 0xa6, 0xf5, 0xd7, 0x1f, 0xb4, 0x3c, - 0xf9, 0x05, 0xd4, 0xe2, 0x45, 0x4f, 0x39, 0x7b, 0xd1, 0x93, 0xba, 0x9c, 0xa8, 0x2c, 0x5e, 0x4e, - 0xb4, 0x61, 0xe3, 0x18, 0x53, 0xe6, 0x12, 0x5f, 0x4c, 0x2e, 0x8b, 0x66, 0xf4, 0x68, 0x7c, 0x5a, - 0x84, 0xdd, 0xd3, 0x2c, 0x35, 0x9c, 0xda, 0x76, 0x78, 0x00, 0x7e, 0x2e, 0x0d, 0x96, 0xba, 0xb2, - 0x2a, 0x67, 0xaf, 0xac, 0x5e, 0x87, 0xad, 0x80, 0xe2, 0x63, 0x2b, 0x65, 0xd8, 0x8a, 0x30, 0x6c, - 0x2b, 0xfc, 0xe2, 0x56, 0xc2, 0xb8, 0x7b, 0x70, 0xd9, 0xc7, 0x27, 0x69, 0xa8, 0xfc, 0x77, 0x44, - 0xd3, 0xc7, 0x27, 0x49, 0xe4, 0xd7, 0xa0, 0x29, 0x76, 0x9d, 0xfb, 0xa2, 0x2a, 0x7c, 0xd1, 0x08, - 0x57, 0x0f, 0x63, 0x7f, 0x7c, 0x15, 0x1a, 0xe1, 0x86, 0x73, 0x54, 0x4d, 0xa0, 0x36, 0x7d, 0x7c, - 0x72, 0xb8, 0xcc, 0x69, 0x90, 0x72, 0x5a, 0x58, 0x86, 0xe5, 0x2c, 0xd1, 0xb1, 0x10, 0x17, 0xf7, - 0x71, 0x45, 0xb3, 0xa6, 0x56, 0xf6, 0x79, 0x58, 0xb2, 0x3a, 0x89, 0xec, 0xfe, 0xf9, 0xc5, 0xc0, - 0x39, 0x76, 0x64, 0x07, 0x83, 0xfb, 0x0f, 0x3b, 0xda, 0x27, 0x0f, 0x3b, 0xda, 0xdf, 0x1f, 0x76, - 0xb4, 0x0f, 0x1f, 0x75, 0x2e, 0x7d, 0xf2, 0xa8, 0x73, 0xe9, 0x4f, 0x8f, 0x3a, 0x97, 0x7e, 0xd8, - 0x1f, 0xbb, 0xfc, 0xce, 0x74, 0xd4, 0xb3, 0xc9, 0xa4, 0x3f, 0xf2, 0x47, 0x57, 0x45, 0x17, 0xd1, - 0x4f, 0xfc, 0x6b, 0xe8, 0x5e, 0xfa, 0x7f, 0x43, 0xa3, 0x8a, 0x38, 0x0d, 0xbe, 0xf1, 0xff, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xd2, 0x98, 0xb8, 0xc6, 0x23, 0x25, 0x00, 0x00, + // 1891 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0xcb, 0x8f, 0xdb, 0xc6, + 0x19, 0x37, 0xf5, 0x5a, 0xe9, 0xd3, 0x4a, 0xf2, 0xb2, 0x5b, 0x47, 0xdd, 0x24, 0x5a, 0x85, 0x45, + 0xd3, 0x4d, 0x50, 0x4b, 0x85, 0x93, 0x16, 0xbe, 0x19, 0xbb, 0xeb, 0xb4, 0x10, 0xda, 0x24, 0x2e, + 0xe5, 0xe4, 0xd0, 0x0b, 0x31, 0x22, 0x67, 0x65, 0xd6, 0x14, 0x87, 0x9d, 0x19, 0xed, 0x5a, 0xf9, + 0x07, 0x7a, 0x2a, 0x10, 0xa0, 0x28, 0xd0, 0x5e, 0x72, 0x6d, 0x81, 0xa2, 0x40, 0x0f, 0xb9, 0xf6, + 0xee, 0x63, 0xe2, 0x5e, 0xfa, 0x00, 0xd2, 0xc2, 0xbe, 0x34, 0x05, 0x8a, 0xf6, 0xdc, 0x53, 0xc1, + 0x99, 0x21, 0x45, 0x8a, 0x5a, 0x6b, 0x29, 0xc7, 0xde, 0x75, 0x6e, 0xe2, 0xe8, 0xc7, 0xd1, 0xf7, + 0xf8, 0x7d, 0x8f, 0xf9, 0x46, 0xb0, 0x3b, 0xa6, 0x18, 0xfb, 0x47, 0x2e, 0xf6, 0x9c, 0x3e, 0xe3, + 0x84, 0xa2, 0x31, 0xee, 0xe3, 0x63, 0xec, 0x73, 0xd6, 0x0b, 0x28, 0xe1, 0x44, 0xd7, 0xe7, 0x80, + 0x9e, 0x02, 0xec, 0x7c, 0xcd, 0x26, 0x6c, 0x42, 0x98, 0x25, 0x10, 0x7d, 0xf9, 0x20, 0xe1, 0x3b, + 0xdb, 0x63, 0x32, 0x26, 0x72, 0x3d, 0xfc, 0xa4, 0x56, 0x77, 0xc7, 0x84, 0x8c, 0x3d, 0xdc, 0x17, + 0x4f, 0xa3, 0xe9, 0x51, 0x9f, 0xbb, 0x13, 0xcc, 0x38, 0x9a, 0x04, 0x31, 0x60, 0x2e, 0x06, 0xc5, + 0x8c, 0x4c, 0xa9, 0x8d, 0xfb, 0x7c, 0x16, 0x60, 0xb6, 0x04, 0x10, 0xc9, 0x69, 0x93, 0xc9, 0x84, + 0xf8, 0x0a, 0xd0, 0x59, 0x02, 0x48, 0x6c, 0x60, 0xfc, 0xa9, 0x04, 0x5b, 0x6f, 0x85, 0x8a, 0x1d, + 0x52, 0x8c, 0x38, 0x3e, 0x98, 0xda, 0x77, 0x31, 0xd7, 0x7b, 0x50, 0x26, 0x27, 0x3e, 0xa6, 0x6d, + 0xad, 0xab, 0xed, 0xd5, 0x0e, 0xda, 0x0f, 0x3e, 0xbe, 0xba, 0xad, 0xf4, 0xd9, 0x77, 0x1c, 0x8a, + 0x19, 0x1b, 0x72, 0xea, 0xfa, 0x63, 0x53, 0xc2, 0xf4, 0x5d, 0xa8, 0x8f, 0xc4, 0x9b, 0x96, 0x8f, + 0x26, 0xb8, 0x5d, 0x08, 0xdf, 0x32, 0x41, 0x2e, 0xbd, 0x83, 0x26, 0x58, 0x3f, 0x00, 0x38, 0x76, + 0x99, 0x3b, 0x72, 0x3d, 0x97, 0xcf, 0xda, 0xc5, 0xae, 0xb6, 0xd7, 0xbc, 0x66, 0xf4, 0xb2, 0x36, + 0xec, 0xbd, 0x1f, 0xa3, 0x6e, 0xcf, 0x02, 0x6c, 0x26, 0xde, 0xd2, 0x5f, 0x84, 0x9a, 0x2d, 0x84, + 0xb4, 0x10, 0x6f, 0x97, 0xba, 0xda, 0x5e, 0xd1, 0xac, 0xca, 0x85, 0x7d, 0xae, 0x5f, 0x87, 0x9a, + 0x92, 0xc0, 0x75, 0xda, 0x65, 0x21, 0xf5, 0x8b, 0xf7, 0x3f, 0xdb, 0xbd, 0xf4, 0xd7, 0xcf, 0x76, + 0x4b, 0xef, 0xb9, 0x3e, 0x7f, 0xf0, 0xf1, 0xd5, 0xba, 0xd2, 0x20, 0x7c, 0x34, 0xab, 0x12, 0x3d, + 0x70, 0xf4, 0x1b, 0x50, 0x97, 0x86, 0xb5, 0x42, 0xbb, 0xb4, 0x2b, 0x42, 0xb6, 0xce, 0x32, 0xd9, + 0x86, 0x02, 0x26, 0xe5, 0x62, 0xf1, 0x67, 0xfd, 0x5b, 0xa0, 0xdb, 0x77, 0x10, 0x1d, 0x63, 0xc7, + 0xa2, 0x18, 0x39, 0xd6, 0x4f, 0xa7, 0x84, 0xa3, 0xf6, 0x46, 0x57, 0xdb, 0x2b, 0x99, 0x97, 0xd5, + 0x37, 0x26, 0x46, 0xce, 0x8f, 0xc2, 0x75, 0x7d, 0x1f, 0x5a, 0x01, 0x9a, 0x4d, 0xb0, 0xcf, 0x2d, + 0x24, 0x4d, 0xd9, 0xae, 0xae, 0x30, 0x72, 0x53, 0xbd, 0xa0, 0x56, 0x75, 0x03, 0x1a, 0x01, 0x75, + 0x27, 0x88, 0xce, 0x2c, 0x16, 0x84, 0xfa, 0xd6, 0xba, 0xda, 0x5e, 0xc3, 0xac, 0xab, 0xc5, 0x61, + 0x30, 0x70, 0xf4, 0x03, 0xe8, 0x8c, 0x3d, 0x32, 0x42, 0x9e, 0x75, 0xec, 0x52, 0x3e, 0x45, 0x9e, + 0x35, 0xa6, 0x64, 0x1a, 0x58, 0x47, 0x68, 0xe2, 0x7a, 0xb3, 0xf0, 0x25, 0x10, 0x2f, 0xed, 0x48, + 0xd4, 0xfb, 0x12, 0xf4, 0xfd, 0x10, 0xf3, 0x3d, 0x01, 0x19, 0x38, 0xfa, 0x75, 0xa8, 0x30, 0x8e, + 0xf8, 0x94, 0xb5, 0xeb, 0xc2, 0x28, 0xdd, 0x65, 0x46, 0x91, 0x8c, 0x19, 0x0a, 0x9c, 0xa9, 0xf0, + 0xc6, 0xaf, 0x0a, 0x8a, 0x55, 0x37, 0xb1, 0x87, 0x63, 0x56, 0xbd, 0x09, 0x55, 0x12, 0x60, 0x8a, + 0x38, 0x59, 0x4d, 0xac, 0x18, 0x39, 0xe7, 0x62, 0x61, 0x2d, 0x2e, 0x16, 0x33, 0x5c, 0x4c, 0x51, + 0xa5, 0x94, 0x87, 0x2a, 0xab, 0x8d, 0x5a, 0x5e, 0x65, 0x54, 0xe3, 0x67, 0x45, 0xf8, 0xaa, 0x30, + 0xcd, 0x7b, 0x81, 0x13, 0x07, 0xdc, 0xc0, 0x3f, 0x22, 0x6b, 0x9a, 0x67, 0x65, 0xe8, 0xa5, 0xd4, + 0x2d, 0xe6, 0x51, 0x77, 0x39, 0xb1, 0x4b, 0xa7, 0x10, 0xfb, 0x9b, 0x59, 0x62, 0x8b, 0x38, 0xcc, + 0xd0, 0x37, 0x9d, 0x0b, 0x2a, 0x6b, 0xe5, 0x82, 0xd5, 0x9e, 0xd8, 0x58, 0xe9, 0x89, 0xdf, 0x6a, + 0x70, 0x45, 0x92, 0xd4, 0x65, 0x36, 0xf1, 0xb9, 0xeb, 0x4f, 0x23, 0xa6, 0xa6, 0x6c, 0xa6, 0xe5, + 0xb1, 0xd9, 0x4a, 0x77, 0x5c, 0x81, 0x0a, 0xc5, 0x88, 0x11, 0x5f, 0x31, 0x53, 0x3d, 0x85, 0xd9, + 0xcd, 0x11, 0xc1, 0x92, 0xc8, 0x6e, 0x72, 0x61, 0x9f, 0x1b, 0xbf, 0xa8, 0xa4, 0xb2, 0xf4, 0xbb, + 0xa3, 0x9f, 0x60, 0x9b, 0xeb, 0xd7, 0x60, 0x43, 0xe4, 0xbf, 0x33, 0xf0, 0x25, 0x02, 0x7e, 0xf1, + 0xd1, 0xb4, 0x0b, 0x75, 0x22, 0xc4, 0x91, 0x80, 0x92, 0x04, 0xc8, 0xa5, 0x2c, 0xff, 0x2a, 0x79, + 0x6c, 0x79, 0x1d, 0x6a, 0x6a, 0x6b, 0xe5, 0xcf, 0x55, 0x6f, 0x4a, 0xf4, 0xc0, 0xc9, 0x66, 0xc8, + 0x6a, 0x36, 0x43, 0xbe, 0x02, 0x9b, 0x01, 0x9a, 0x79, 0x04, 0x39, 0x16, 0x73, 0x3f, 0xc0, 0x22, + 0x89, 0x96, 0xcc, 0xba, 0x5a, 0x1b, 0xba, 0x1f, 0x2c, 0x56, 0x2d, 0x58, 0x8b, 0xa9, 0xaf, 0xc0, + 0x66, 0x48, 0xae, 0x30, 0x2c, 0x44, 0x7d, 0xa9, 0x0b, 0x03, 0xd5, 0xd5, 0x9a, 0x28, 0x20, 0xa9, + 0xc2, 0xb6, 0x99, 0x29, 0x6c, 0x51, 0x12, 0x6e, 0x9c, 0x9e, 0x84, 0x25, 0x21, 0xd2, 0x49, 0x58, + 0xff, 0x01, 0xb4, 0x28, 0x76, 0xa6, 0xbe, 0x83, 0x7c, 0x7b, 0x26, 0x7f, 0xbc, 0x79, 0xba, 0x0a, + 0x66, 0x0c, 0x15, 0x2a, 0x34, 0x69, 0xea, 0x79, 0xb1, 0x4a, 0xb6, 0x72, 0x57, 0xc9, 0x97, 0xa0, + 0x66, 0xdf, 0xc1, 0xf6, 0x5d, 0x36, 0x9d, 0xb0, 0xf6, 0xe5, 0x6e, 0x71, 0x6f, 0xd3, 0x9c, 0x2f, + 0xe8, 0x6f, 0xc0, 0x15, 0x8f, 0xd8, 0x99, 0x70, 0x76, 0x9d, 0xf6, 0x96, 0xf0, 0xdc, 0x57, 0xc4, + 0xb7, 0xc9, 0x30, 0x1e, 0x38, 0xc6, 0x7f, 0x34, 0x78, 0x41, 0x46, 0x05, 0xf2, 0x6d, 0xec, 0xa5, + 0x62, 0xe3, 0x29, 0x25, 0xd3, 0x05, 0xb6, 0x17, 0x33, 0x6c, 0xcf, 0x30, 0xaf, 0x94, 0x65, 0x5e, + 0x8a, 0xd7, 0x95, 0x1c, 0xbc, 0x36, 0x3e, 0x2f, 0x40, 0x4b, 0x68, 0x3c, 0xc4, 0xc8, 0x3b, 0x67, + 0x4d, 0x53, 0x5a, 0x94, 0xf3, 0x44, 0xe7, 0x9c, 0xd2, 0x95, 0x9c, 0x94, 0xfe, 0x0e, 0xbc, 0xb0, + 0x34, 0xed, 0xc7, 0xf9, 0x7e, 0x3b, 0x9b, 0xef, 0x07, 0xce, 0x63, 0xd8, 0x55, 0x3d, 0x9d, 0x5d, + 0x1f, 0x15, 0x95, 0xad, 0x0f, 0x49, 0x30, 0x7b, 0x22, 0x5b, 0xbf, 0x0a, 0x2d, 0x46, 0x6d, 0x2b, + 0x6b, 0xef, 0x06, 0xa3, 0xf6, 0xc1, 0xdc, 0xe4, 0x0a, 0x97, 0x35, 0x7b, 0x88, 0x7b, 0x77, 0x6e, + 0xf9, 0x57, 0xa1, 0xe5, 0x30, 0x9e, 0xda, 0x4f, 0xa6, 0xdd, 0x86, 0xc3, 0x78, 0x7a, 0xbf, 0x10, + 0x97, 0xdc, 0xaf, 0x1c, 0xe3, 0x12, 0xfb, 0xdd, 0x80, 0x46, 0xe2, 0x77, 0xcf, 0xc6, 0xc9, 0x7a, + 0x2c, 0x92, 0x68, 0xa1, 0x1b, 0x89, 0x1f, 0x3a, 0x5b, 0xb2, 0xae, 0xc7, 0x32, 0xac, 0xeb, 0xa0, + 0xff, 0x69, 0xa9, 0x26, 0xf3, 0x22, 0x85, 0x43, 0x29, 0x4f, 0x38, 0x9c, 0xae, 0x7c, 0xf9, 0x74, + 0xe5, 0xff, 0xa9, 0xa9, 0x36, 0xd2, 0xc4, 0x22, 0x4e, 0x2e, 0x58, 0x3e, 0xc8, 0x65, 0x80, 0x97, + 0x01, 0x8e, 0x08, 0xb5, 0xa6, 0xa2, 0x21, 0x16, 0x4a, 0x57, 0xcd, 0xda, 0x11, 0xa1, 0xb2, 0x43, + 0x5e, 0xda, 0xa7, 0x29, 0x5d, 0x17, 0xa4, 0xd6, 0x96, 0x35, 0xbf, 0x73, 0xa1, 0x0a, 0x79, 0x84, + 0x5a, 0xab, 0x4f, 0xfb, 0x79, 0x21, 0xd5, 0xdc, 0x2b, 0x7e, 0x3f, 0xc5, 0xe6, 0xfe, 0x29, 0x7a, + 0x25, 0xdd, 0xfc, 0x94, 0xd7, 0x69, 0x7e, 0x8c, 0xff, 0x6a, 0x70, 0x39, 0xd1, 0xb7, 0x0a, 0xf2, + 0xe6, 0x1e, 0x2e, 0xbc, 0x0c, 0x20, 0x23, 0x22, 0x61, 0x83, 0x9a, 0x58, 0x11, 0x1a, 0x7e, 0x17, + 0xaa, 0x71, 0xc0, 0x9c, 0xe1, 0x78, 0xb3, 0x31, 0x56, 0x45, 0x61, 0xa1, 0xa3, 0x29, 0xe5, 0xee, + 0x68, 0xb6, 0xa1, 0x8c, 0xef, 0x71, 0x8a, 0x54, 0x52, 0x95, 0x0f, 0xc6, 0xaf, 0x23, 0x95, 0x65, + 0x56, 0x5a, 0x50, 0xb9, 0xb0, 0x8e, 0xca, 0xc5, 0xc7, 0xa9, 0x5c, 0x3a, 0xbb, 0xca, 0xc6, 0x5f, + 0x34, 0x55, 0xd2, 0x7e, 0x88, 0xd1, 0xb1, 0x12, 0xed, 0x06, 0x34, 0x27, 0x78, 0x32, 0xc2, 0x34, + 0x3e, 0xb5, 0xad, 0x72, 0x4b, 0x43, 0xe2, 0xa3, 0xe3, 0xdc, 0x05, 0xd1, 0xed, 0xdf, 0x05, 0x95, + 0x25, 0x64, 0xe8, 0x09, 0xe5, 0xde, 0x16, 0x82, 0x3e, 0xa3, 0xb9, 0xc3, 0xd3, 0xd1, 0x4b, 0xbf, + 0x15, 0xf9, 0x87, 0x59, 0x9c, 0x84, 0x3e, 0x6a, 0x97, 0xbb, 0xc5, 0xbd, 0xfa, 0xb5, 0xd7, 0x97, + 0x31, 0x55, 0x18, 0x20, 0xa1, 0xfa, 0x4d, 0xcc, 0x91, 0xeb, 0x99, 0x9b, 0x6a, 0x87, 0xdb, 0x64, + 0xdf, 0x71, 0xf4, 0x9b, 0xb0, 0x95, 0xd8, 0x51, 0xe6, 0xae, 0x76, 0xa5, 0x5b, 0x7c, 0xac, 0x92, + 0xad, 0x78, 0x0b, 0xc9, 0x6b, 0xe3, 0x6f, 0x85, 0xb8, 0x00, 0xf9, 0xf8, 0xe4, 0x4b, 0x63, 0xee, + 0x85, 0xac, 0x50, 0xce, 0x9d, 0x15, 0x6e, 0xc2, 0x86, 0x32, 0x95, 0xb0, 0x69, 0x3e, 0x47, 0x45, + 0xaf, 0x1a, 0xbf, 0x8c, 0x6a, 0x5e, 0x06, 0xa3, 0x7f, 0x1b, 0x2a, 0x12, 0xb5, 0xd2, 0xb8, 0x0a, + 0xa7, 0x0f, 0xa0, 0x85, 0xef, 0x05, 0x2e, 0x45, 0xdc, 0x25, 0xbe, 0xc5, 0x5d, 0x95, 0x45, 0xeb, + 0xd7, 0x76, 0x7a, 0x72, 0x00, 0xdd, 0x8b, 0x06, 0xd0, 0xbd, 0xdb, 0xd1, 0x00, 0xfa, 0xa0, 0xf4, + 0xe1, 0xdf, 0x77, 0x35, 0xb3, 0x39, 0x7f, 0x31, 0xfc, 0xca, 0xf8, 0x97, 0x96, 0x2a, 0x70, 0x42, + 0xba, 0xb7, 0xc2, 0xbc, 0xf7, 0x7c, 0x7b, 0x7d, 0x79, 0x2a, 0xbf, 0x1f, 0x35, 0x98, 0x6f, 0xbb, + 0x94, 0x12, 0xfa, 0x44, 0x53, 0xcc, 0x7c, 0x63, 0xba, 0x5c, 0x53, 0x49, 0x03, 0x1a, 0x0e, 0x66, + 0xdc, 0xb2, 0xef, 0x20, 0xd7, 0x9f, 0xb7, 0x8d, 0xf5, 0x70, 0xf1, 0x30, 0x5c, 0x1b, 0x38, 0xc6, + 0x1f, 0xa2, 0xa3, 0x72, 0x52, 0x15, 0x13, 0xb3, 0xa9, 0xc7, 0xc3, 0x4e, 0x47, 0x1d, 0xc7, 0x34, + 0xf1, 0x62, 0x74, 0xd8, 0x3a, 0x67, 0x91, 0x3f, 0x4f, 0x5b, 0xff, 0xb9, 0xed, 0x6e, 0xcf, 0xa2, + 0xeb, 0xa7, 0x69, 0xf7, 0x48, 0x5d, 0x9f, 0xd4, 0x3d, 0xe7, 0xac, 0xd3, 0x1f, 0xa3, 0x46, 0x48, + 0xea, 0x74, 0xa1, 0x7a, 0xbf, 0x8c, 0xfc, 0xa5, 0xac, 0xfc, 0xbf, 0x8b, 0x52, 0x70, 0x42, 0xfe, + 0x15, 0x2e, 0x39, 0x47, 0x69, 0x8f, 0x15, 0x81, 0x86, 0x1c, 0x79, 0xf8, 0x16, 0xf1, 0x5c, 0x7b, + 0x76, 0xe8, 0x61, 0xe4, 0x4f, 0x03, 0x7d, 0x07, 0xaa, 0x23, 0x8f, 0xd8, 0x77, 0xdf, 0x99, 0x4e, + 0x84, 0xbc, 0x45, 0x33, 0x7e, 0x0e, 0xcb, 0x9d, 0x3a, 0xcd, 0xb8, 0xfe, 0x11, 0x51, 0x65, 0x61, + 0x69, 0xb9, 0x93, 0x65, 0x3f, 0x3c, 0xcb, 0x98, 0xe0, 0xc4, 0x9f, 0x8d, 0x07, 0x1a, 0x6c, 0x2b, + 0x2b, 0x8d, 0x65, 0x9d, 0x78, 0x86, 0x69, 0x32, 0xd7, 0x6d, 0xc6, 0x6b, 0xb0, 0xe5, 0x30, 0x6e, + 0x2d, 0x9b, 0xce, 0x35, 0x1d, 0xc6, 0x6f, 0xcd, 0x07, 0x74, 0xc6, 0xef, 0x35, 0xd8, 0x49, 0x0c, + 0x16, 0x2f, 0xba, 0x6a, 0x21, 0x55, 0xdb, 0x89, 0x61, 0x80, 0x94, 0x17, 0x5f, 0x54, 0x69, 0x3f, + 0x2a, 0xc0, 0x4b, 0x6a, 0xb0, 0x36, 0x09, 0x42, 0x22, 0x5d, 0x78, 0xea, 0xac, 0xbe, 0x6d, 0x2a, + 0xad, 0xbc, 0x4c, 0x7d, 0x0d, 0xb6, 0x18, 0xb5, 0x17, 0xe8, 0x27, 0xd3, 0x66, 0x93, 0x51, 0x3b, + 0x49, 0x3f, 0x0b, 0xea, 0x6a, 0xc8, 0xcb, 0x6f, 0xa3, 0x71, 0x18, 0xbf, 0xd1, 0xdd, 0xbf, 0x9a, + 0x70, 0xc4, 0xcf, 0xfa, 0x9b, 0x50, 0xe2, 0x68, 0xcc, 0x54, 0xe0, 0x76, 0x97, 0x0f, 0xf6, 0x55, + 0x77, 0x8a, 0xc6, 0xcc, 0x14, 0x68, 0xe3, 0x37, 0x05, 0xc5, 0x97, 0xe4, 0x98, 0xe2, 0x50, 0xde, + 0x48, 0xac, 0x69, 0xfd, 0xf5, 0x07, 0x2d, 0x4f, 0x7e, 0xc3, 0xb4, 0x78, 0x93, 0x53, 0xce, 0xde, + 0xe4, 0xa4, 0x6e, 0x1f, 0x2a, 0x8b, 0xb7, 0x0f, 0x6d, 0xd8, 0x38, 0xc6, 0x94, 0xb9, 0xc4, 0x17, + 0x93, 0xcb, 0xa2, 0x19, 0x3d, 0x1a, 0x9f, 0x16, 0x61, 0xf7, 0x34, 0x4b, 0x0d, 0xa7, 0xb6, 0x1d, + 0x1e, 0x80, 0x9f, 0x4b, 0x83, 0xa5, 0xee, 0xa4, 0xca, 0xd9, 0x3b, 0xa9, 0xd7, 0x61, 0x2b, 0xa0, + 0xf8, 0xd8, 0x4a, 0x19, 0xb6, 0x22, 0x0c, 0xdb, 0x0a, 0xbf, 0xb8, 0x95, 0x30, 0xee, 0x1e, 0x5c, + 0xf6, 0xf1, 0x49, 0x1a, 0x2a, 0xff, 0xfe, 0xd0, 0xf4, 0xf1, 0x49, 0x12, 0xf9, 0x0d, 0x68, 0x8a, + 0x5d, 0xe7, 0xbe, 0xa8, 0x0a, 0x5f, 0x34, 0xc2, 0xd5, 0xc3, 0xd8, 0x1f, 0x5f, 0x87, 0x46, 0xb8, + 0xe1, 0x1c, 0x55, 0x13, 0xa8, 0x4d, 0x1f, 0x9f, 0x1c, 0x2e, 0x73, 0x1a, 0xa4, 0x9c, 0x16, 0x96, + 0x61, 0x39, 0x4b, 0x74, 0x2c, 0xc4, 0xc5, 0x85, 0x5b, 0xd1, 0xac, 0xa9, 0x95, 0x7d, 0x1e, 0x96, + 0xac, 0x4e, 0x22, 0xbb, 0x7f, 0x71, 0x31, 0x70, 0x8e, 0x1d, 0xd9, 0xc1, 0xe0, 0xfe, 0xc3, 0x8e, + 0xf6, 0xc9, 0xc3, 0x8e, 0xf6, 0x8f, 0x87, 0x1d, 0xed, 0xc3, 0x47, 0x9d, 0x4b, 0x9f, 0x3c, 0xea, + 0x5c, 0xfa, 0xf3, 0xa3, 0xce, 0xa5, 0x1f, 0xf7, 0xc7, 0x2e, 0xbf, 0x33, 0x1d, 0xf5, 0x6c, 0x32, + 0xe9, 0x8f, 0xfc, 0xd1, 0x55, 0xd1, 0x45, 0xf4, 0x13, 0x7f, 0x0b, 0xba, 0x97, 0xfe, 0x63, 0xd0, + 0xa8, 0x22, 0x4e, 0x83, 0x6f, 0xfc, 0x3f, 0x00, 0x00, 0xff, 0xff, 0x4f, 0x67, 0x5e, 0xc0, 0x04, + 0x25, 0x00, 0x00, } func (m *EventCreateBucket) Marshal() (dAtA []byte, err error) { @@ -3316,16 +3307,6 @@ func (m *EventSealObject) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.ForUpdate { - i-- - if m.ForUpdate { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x48 - } if m.LocalVirtualGroupId != 0 { i = encodeVarintEvents(dAtA, i, uint64(m.LocalVirtualGroupId)) i-- @@ -5187,9 +5168,6 @@ func (m *EventSealObject) Size() (n int) { if m.LocalVirtualGroupId != 0 { n += 1 + sovEvents(uint64(m.LocalVirtualGroupId)) } - if m.ForUpdate { - n += 2 - } return n } @@ -7671,26 +7649,6 @@ func (m *EventSealObject) Unmarshal(dAtA []byte) error { break } } - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ForUpdate", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ForUpdate = bool(v != 0) default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/x/storage/types/options.go b/x/storage/types/options.go index 2ecb6cb5f..0db2fbaec 100644 --- a/x/storage/types/options.go +++ b/x/storage/types/options.go @@ -88,7 +88,6 @@ type DeletePolicyOptions struct { } type UpdateObjectOptions struct { - SourceType SourceType ContentType string Checksums [][]byte } From d9ae3f0f95d64b775fd8c271475d21b3d1adac23 Mon Sep 17 00:00:00 2001 From: Alexgao001 Date: Mon, 19 Feb 2024 16:22:52 +0800 Subject: [PATCH 3/6] refine code --- proto/greenfield/storage/events.proto | 2 +- proto/greenfield/storage/tx.proto | 4 ++-- proto/greenfield/storage/types.proto | 2 +- x/storage/types/events.pb.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/proto/greenfield/storage/events.proto b/proto/greenfield/storage/events.proto index ee3ad7082..306744127 100644 --- a/proto/greenfield/storage/events.proto +++ b/proto/greenfield/storage/events.proto @@ -620,7 +620,7 @@ message EventCancelUpdateObjectContent { string bucket_name = 2; // object_name define the name of the object string object_name = 3; - // object_name define the id of the object + // object_id define the id of the object string object_id = 4 [ (cosmos_proto.scalar) = "cosmos.Uint", (gogoproto.customtype) = "Uint", diff --git a/proto/greenfield/storage/tx.proto b/proto/greenfield/storage/tx.proto index 7d9a545bf..ade3e22c6 100644 --- a/proto/greenfield/storage/tx.proto +++ b/proto/greenfield/storage/tx.proto @@ -651,7 +651,7 @@ message MsgSetTagResponse {} message MsgUpdateObjectContent { option (cosmos.msg.v1.signer) = "operator"; - // operator defines the account address of object updater + // operator defines the account address of the operator, either the object owner or the updater with granted permission. string operator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // bucket_name defines the name of the bucket where the object is stored. string bucket_name = 2; @@ -670,7 +670,7 @@ message MsgUpdateObjectContentResponse {} message MsgCancelUpdateObjectContent { option (cosmos.msg.v1.signer) = "operator"; - // operator defines the account address of the operator, either the object owner or the updater + // operator defines the account address of the operator, either the object owner or the updater with granted permission. string operator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // bucket_name defines the name of the bucket string bucket_name = 2; diff --git a/proto/greenfield/storage/types.proto b/proto/greenfield/storage/types.proto index a5a9abd58..17b248a80 100644 --- a/proto/greenfield/storage/types.proto +++ b/proto/greenfield/storage/types.proto @@ -197,7 +197,7 @@ message ResourceTags { } message ShadowObjectInfo { - // operator define the account address of object updater + // operator defines the account address of the operator, either the object owner or the updater with granted permission. string operator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // id defines the object id string id = 2 [ diff --git a/x/storage/types/events.pb.go b/x/storage/types/events.pb.go index 4f73a6f83..faddbb2b3 100644 --- a/x/storage/types/events.pb.go +++ b/x/storage/types/events.pb.go @@ -2608,7 +2608,7 @@ type EventCancelUpdateObjectContent struct { BucketName string `protobuf:"bytes,2,opt,name=bucket_name,json=bucketName,proto3" json:"bucket_name,omitempty"` // object_name define the name of the object ObjectName string `protobuf:"bytes,3,opt,name=object_name,json=objectName,proto3" json:"object_name,omitempty"` - // object_name define the id of the object + // object_id define the id of the object ObjectId Uint `protobuf:"bytes,4,opt,name=object_id,json=objectId,proto3,customtype=Uint" json:"object_id"` } From 8fe30001d86112a7b9b7b5eb7ba78ee588a0059b Mon Sep 17 00:00:00 2001 From: Alexgao001 Date: Tue, 20 Feb 2024 18:33:58 +0800 Subject: [PATCH 4/6] resolve comments --- swagger/static/swagger.yaml | 13 ++++++++++--- x/storage/keeper/keeper.go | 24 ++++-------------------- x/storage/types/keys.go | 8 -------- x/storage/types/tx.pb.go | 4 ++-- x/storage/types/types.pb.go | 2 +- 5 files changed, 17 insertions(+), 34 deletions(-) diff --git a/swagger/static/swagger.yaml b/swagger/static/swagger.yaml index b8c2faacd..4f32a9221 100644 --- a/swagger/static/swagger.yaml +++ b/swagger/static/swagger.yaml @@ -3675,7 +3675,10 @@ paths: properties: operator: type: string - title: operator define the account address of object updater + description: >- + operator defines the account address of the operator, + either the object owner or the updater with granted + permission. id: type: string title: id defines the object id @@ -35703,7 +35706,9 @@ definitions: properties: operator: type: string - title: operator define the account address of object updater + description: >- + operator defines the account address of the operator, either the + object owner or the updater with granted permission. id: type: string title: id defines the object id @@ -36886,7 +36891,9 @@ definitions: properties: operator: type: string - title: operator define the account address of object updater + description: >- + operator defines the account address of the operator, either the + object owner or the updater with granted permission. id: type: string title: id defines the object id diff --git a/x/storage/keeper/keeper.go b/x/storage/keeper/keeper.go index 37297bbf1..5bec97746 100644 --- a/x/storage/keeper/keeper.go +++ b/x/storage/keeper/keeper.go @@ -738,7 +738,9 @@ func (k Keeper) GetShadowObjectInfo(ctx sdk.Context, bucketName, objectName stri return nil, false } - return k.GetShadowObjectInfoById(ctx, k.objectSeq.DecodeSequence(bz)) + var objectInfo types.ShadowObjectInfo + k.cdc.MustUnmarshal(bz, &objectInfo) + return &objectInfo, true } func (k Keeper) MustGetShadowObjectInfo(ctx sdk.Context, bucketName, objectName string) *types.ShadowObjectInfo { @@ -749,19 +751,6 @@ func (k Keeper) MustGetShadowObjectInfo(ctx sdk.Context, bucketName, objectName return shadowObjectInfo } -func (k Keeper) GetShadowObjectInfoById(ctx sdk.Context, objectId sdkmath.Uint) (*types.ShadowObjectInfo, bool) { - store := ctx.KVStore(k.storeKey) - - bz := store.Get(types.GetShadowObjectByIDKey(objectId)) - if bz == nil { - return nil, false - } - - var objectInfo types.ShadowObjectInfo - k.cdc.MustUnmarshal(bz, &objectInfo) - return &objectInfo, true -} - type SealObjectOptions struct { GlobalVirtualGroupId uint32 SecondarySpBlsSignatures []byte @@ -819,7 +808,6 @@ func (k Keeper) SealObject( objectInfo.IsUpdating = false store.Delete(types.GetShadowObjectKey(bucketInfo.BucketName, objectName)) - store.Delete(types.GetShadowObjectByIDKey(shadowObjectInfo.Id)) } else if objectInfo.ObjectStatus != types.OBJECT_STATUS_CREATED { return types.ErrObjectAlreadySealed } @@ -980,7 +968,6 @@ func (k Keeper) DeleteObject( return err } } - _ = k.MustGetPrimarySPForBucket(ctx, bucketInfo) internalBucketInfo := k.MustGetInternalBucketInfo(ctx, bucketInfo.Id) err := k.UnChargeObjectStoreFee(ctx, bucketInfo, internalBucketInfo, objectInfo) @@ -2498,9 +2485,7 @@ func (k Keeper) UpdateObjectContent( UpdatedAt: ctx.BlockTime().Unix(), Version: nextVersion, } - store.Set(types.GetShadowObjectKey(bucketName, objectName), k.objectSeq.EncodeSequence(objectInfo.Id)) - store.Set(types.GetShadowObjectByIDKey(shadowObjectInfo.Id), k.cdc.MustMarshal(shadowObjectInfo)) - + store.Set(types.GetShadowObjectKey(bucketName, objectName), k.cdc.MustMarshal(shadowObjectInfo)) err = k.LockShadowObjectStoreFee(ctx, bucketInfo, shadowObjectInfo, objectName) if err != nil { return err @@ -2533,7 +2518,6 @@ func (k Keeper) UnlockShadowObjectFeeAndDeleteShadowObjectInfo(ctx sdk.Context, } store := ctx.KVStore(k.storeKey) store.Delete(types.GetShadowObjectKey(bucketInfo.BucketName, objectName)) - store.Delete(types.GetShadowObjectByIDKey(shadowObjectInfo.Id)) return } diff --git a/x/storage/types/keys.go b/x/storage/types/keys.go index b8af13f31..7300507a9 100644 --- a/x/storage/types/keys.go +++ b/x/storage/types/keys.go @@ -44,8 +44,6 @@ var ( ObjectByIDPrefix = []byte{0x22} GroupByIDPrefix = []byte{0x23} - ShadowObjectByIDPrefix = []byte{0x24} - BucketSequencePrefix = []byte{0x31} ObjectSequencePrefix = []byte{0x32} GroupSequencePrefix = []byte{0x33} @@ -112,12 +110,6 @@ func GetObjectByIDKey(objectId math.Uint) []byte { return append(ObjectByIDPrefix, seq.EncodeSequence(objectId)...) } -// GetShadowObjectByIDKey return the shadowObjectId store key -func GetShadowObjectByIDKey(objectId math.Uint) []byte { - var seq sequence.Sequence[math.Uint] - return append(ShadowObjectByIDPrefix, seq.EncodeSequence(objectId)...) -} - // GetGroupByIDKey return the groupId store key func GetGroupByIDKey(groupId math.Uint) []byte { var seq sequence.Sequence[math.Uint] diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index f235f592d..716a90b09 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -3190,7 +3190,7 @@ func (m *MsgSetTagResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgSetTagResponse proto.InternalMessageInfo type MsgUpdateObjectContent struct { - // operator defines the account address of object updater + // operator defines the account address of the operator, either the object owner or the updater with granted permission. Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` // bucket_name defines the name of the bucket where the object is stored. BucketName string `protobuf:"bytes,2,opt,name=bucket_name,json=bucketName,proto3" json:"bucket_name,omitempty"` @@ -3316,7 +3316,7 @@ func (m *MsgUpdateObjectContentResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateObjectContentResponse proto.InternalMessageInfo type MsgCancelUpdateObjectContent struct { - // operator defines the account address of the operator, either the object owner or the updater + // operator defines the account address of the operator, either the object owner or the updater with granted permission. Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` // bucket_name defines the name of the bucket BucketName string `protobuf:"bytes,2,opt,name=bucket_name,json=bucketName,proto3" json:"bucket_name,omitempty"` diff --git a/x/storage/types/types.pb.go b/x/storage/types/types.pb.go index 8d56e4ce2..85c398f04 100644 --- a/x/storage/types/types.pb.go +++ b/x/storage/types/types.pb.go @@ -1064,7 +1064,7 @@ func (m *ResourceTags_Tag) GetValue() string { } type ShadowObjectInfo struct { - // operator define the account address of object updater + // operator defines the account address of the operator, either the object owner or the updater with granted permission. Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` // id defines the object id Id Uint `protobuf:"bytes,2,opt,name=id,proto3,customtype=Uint" json:"id"` From a77f0f85c2cee7629bd4613c2814e5f1efb33f5f Mon Sep 17 00:00:00 2001 From: Alexgao001 Date: Tue, 20 Feb 2024 20:28:07 +0800 Subject: [PATCH 5/6] fix a gvg test --- e2e/tests/virtualgroup_test.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/e2e/tests/virtualgroup_test.go b/e2e/tests/virtualgroup_test.go index 3647bbe7b..6ddad80c8 100644 --- a/e2e/tests/virtualgroup_test.go +++ b/e2e/tests/virtualgroup_test.go @@ -44,10 +44,13 @@ func TestVirtualGroupTestSuite(t *testing.T) { suite.Run(t, new(VirtualGroupTestSuite)) } -func (s *VirtualGroupTestSuite) getSecondarySPIDs(primarySPID uint32) []uint32 { +func (s *VirtualGroupTestSuite) getSecondarySPIDs(primarySPID uint32, excludeSecondarySP *uint32) []uint32 { var secondarySPIDs []uint32 for _, ssp := range s.StorageProviders { if ssp.Info.Id != primarySPID { + if excludeSecondarySP != nil && ssp.Info.Id == *excludeSecondarySP { + continue + } secondarySPIDs = append(secondarySPIDs, ssp.Info.Id) } if len(secondarySPIDs) == 6 { @@ -110,11 +113,16 @@ func (s *VirtualGroupTestSuite) TestBasic() { srcGVGs := s.queryGlobalVirtualGroupsByFamily(gvg.FamilyId) - secondarySPIDs := s.getSecondarySPIDs(primarySP.Info.Id) + secondarySPIDs := s.getSecondarySPIDs(primarySP.Info.Id, nil) s.BaseSuite.CreateGlobalVirtualGroup(primarySP, gvg.FamilyId, secondarySPIDs, 1) gvgs = s.queryGlobalVirtualGroupsByFamily(gvg.FamilyId) + if len(srcGVGs) == len(gvgs) { + secondarySPIDs = s.getSecondarySPIDs(primarySP.Info.Id, &secondarySPIDs[0]) + s.BaseSuite.CreateGlobalVirtualGroup(primarySP, gvg.FamilyId, secondarySPIDs, 1) + } + oldGVGIDs := make(map[uint32]bool) for _, gvg := range srcGVGs { oldGVGIDs[gvg.Id] = true @@ -213,7 +221,7 @@ func (s *VirtualGroupTestSuite) TestBasic() { s.SendTxBlockWithExpectErrorString(&msgCreateGVG, primarySP.OperatorKey, virtualgroupmoduletypes.ErrDuplicateSecondarySP.Error()) // test create a duplicated GVG in a family - secondarySPIDs = s.getSecondarySPIDs(primarySP.Info.Id) + secondarySPIDs = s.getSecondarySPIDs(primarySP.Info.Id, nil) gvgID, familyID := s.BaseSuite.CreateGlobalVirtualGroup(primarySP, 0, secondarySPIDs, 1) gvgResp, err := s.Client.VirtualGroupQueryClient.GlobalVirtualGroup(context.Background(), &virtualgroupmoduletypes.QueryGlobalVirtualGroupRequest{ GlobalVirtualGroupId: gvgID, @@ -713,7 +721,7 @@ func (s *VirtualGroupTestSuite) TestEmptyGlobalVirtualGroupFamily() { primarySP := s.BaseSuite.PickStorageProvider() user := s.GenAndChargeAccounts(1, 1000000)[0] - secondarySPIDs := s.getSecondarySPIDs(primarySP.Info.Id) + secondarySPIDs := s.getSecondarySPIDs(primarySP.Info.Id, nil) // The Sp creates a family which has 1 GVG. gvgID, familyID := s.BaseSuite.CreateGlobalVirtualGroup(primarySP, 0, secondarySPIDs, 1) From 52008a30de094180881021f3b03f756d99940f6b Mon Sep 17 00:00:00 2001 From: Alexgao001 Date: Wed, 21 Feb 2024 10:20:25 +0800 Subject: [PATCH 6/6] remove unnecessary code --- x/storage/keeper/keeper.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/x/storage/keeper/keeper.go b/x/storage/keeper/keeper.go index 5bec97746..2c4927b51 100644 --- a/x/storage/keeper/keeper.go +++ b/x/storage/keeper/keeper.go @@ -2492,9 +2492,6 @@ func (k Keeper) UpdateObjectContent( } } - bbz := k.cdc.MustMarshal(bucketInfo) - store.Set(types.GetBucketByIDKey(bucketInfo.Id), bbz) - obz := k.cdc.MustMarshal(objectInfo) store.Set(types.GetObjectKey(bucketName, objectName), k.objectSeq.EncodeSequence(objectInfo.Id)) store.Set(types.GetObjectByIDKey(objectInfo.Id), obz)