diff --git a/csi.proto b/csi.proto index 95d7c294..609c59a0 100644 --- a/csi.proto +++ b/csi.proto @@ -242,35 +242,33 @@ message VolumeInfo { // NFS share). If set, it MUST be non-zero. uint64 capacity_bytes = 1; - // Contains identity information for the created volume. This field is + // Contains identity information for the created volume. This field is // REQUIRED. The identity information will be used by the CO in // subsequent calls to refer to the provisioned volume. - VolumeID id = 4; - - // Metadata of the created volume. This field is OPTIONAL. If set, the - // CO SHALL pass this information along with the `id` to subsequent - // calls. - VolumeMetadata metadata = 5; + VolumeHandle handle = 2; } -// The identity of the volume. -message VolumeID { - // The identity of the provisioned volume specified by the Plugin in - // the form of key-value pairs. This field is REQUIRED. Given this - // information will be passed around by the CO, it is RECOMMENDED that - // each Plugin keeps this information as small as possible. - map values = 1; -} - -// The metadata information about the volume. -message VolumeMetadata { - // The metadata information about the provisioned volume specified by - // the Plugin in the form of key-value pairs. This field is OPTIONAL. - // This field MAY contain sensitive information. Therefore, the CO - // MUST NOT leak this information to untrusted entities. Given this - // information will be passed around by the CO, it is RECOMMENDED that - // each Plugin keeps this information as small as possible. - map values = 1; +// VolumeHandle objects are generated by Plugin implementations to +// serve two purposes: first, to efficiently identify a volume known +// to the Plugin implementation; second, to capture additional, opaque, +// possibly sensitive information associated with a volume. It SHALL +// NOT change over the lifetime of the volume and MAY be safely cached +// by the CO. +// Since this object will be passed around by the CO, it is RECOMMENDED +// that each Plugin keeps the information herein as small as possible. +// The total bytes of a serialized VolumeHandle must be less than 1 MiB. +message VolumeHandle { + // ID is the identity of the provisioned volume specified by the + // Plugin. This field is REQUIRED. + // This information SHALL NOT be considered sensitive such that, for + // example, the CO MAY generate log messages that include this data. + string id = 1; + + // Metadata captures additional, possibly sensitive, information about + // a volume in the form of key-value pairs. This field is OPTIONAL. + // Since this field MAY contain sensitive information, the CO MUST NOT + // leak this information to untrusted entities. + map metadata = 2; } // A standard way to encode credential data. The total bytes of the values in @@ -293,17 +291,14 @@ message DeleteVolumeRequest { // The API version assumed by the CO. This field is REQUIRED. Version version = 1; - // The ID of the volume to be deprovisioned. This field is REQUIRED. - VolumeID volume_id = 2; - - // The metadata of the volume to be deprovisioned. This field is - // OPTIONAL. - VolumeMetadata volume_metadata = 3; + // The handle of the volume to be deprovisioned. + // This field is REQUIRED. + VolumeHandle volume_handle = 2; // End user credentials used to authenticate/authorize volume deletion // request. // This field is OPTIONAL. - Credentials user_credentials = 4; + Credentials user_credentials = 3; } message DeleteVolumeResponse { @@ -321,22 +316,19 @@ message ControllerPublishVolumeRequest { // The API version assumed by the CO. This field is REQUIRED. Version version = 1; - // The ID of the volume to be used on a node. This field is REQUIRED. - VolumeID volume_id = 2; + // The handle of the volume to be used on a node. + // This field is REQUIRED. + VolumeHandle volume_handle = 2; - // The metadata of the volume to be used on a node. This field is - // OPTIONAL. - VolumeMetadata volume_metadata = 3; - // The ID of the node. This field is OPTIONAL. The CO SHALL set (or // clear) this field to match the `NodeID` returned by `GetNodeID`. // `GetNodeID` is allowed to omit `NodeID` from a successful `Result`; // in such cases the CO SHALL NOT specify this field. - NodeID node_id = 4; + NodeID node_id = 3; // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability volume_capability = 6; + VolumeCapability volume_capability = 4; // Whether to publish the volume in readonly mode. This field is // REQUIRED. @@ -345,7 +337,7 @@ message ControllerPublishVolumeRequest { // End user credentials used to authenticate/authorize controller publish // request. // This field is OPTIONAL. - Credentials user_credentials = 7; + Credentials user_credentials = 6; } message ControllerPublishVolumeResponse { @@ -385,11 +377,8 @@ message ControllerUnpublishVolumeRequest { // The API version assumed by the CO. This field is REQUIRED. Version version = 1; - // The ID of the volume. This field is REQUIRED. - VolumeID volume_id = 2; - - // The metadata of the volume. This field is OPTIONAL. - VolumeMetadata volume_metadata = 3; + // The handle of the volume. This field is REQUIRED. + VolumeHandle volume_handle = 2; // The ID of the node. This field is OPTIONAL. The CO SHALL set (or // clear) this field to match the `NodeID` returned by `GetNodeID`. @@ -400,12 +389,12 @@ message ControllerUnpublishVolumeRequest { // the CO MAY omit this field as well, indicating that it does not // know which node the volume was previously used. The Plugin SHOULD // return an Error if this is not supported. - NodeID node_id = 4; + NodeID node_id = 3; // End user credentials used to authenticate/authorize controller unpublish // request. // This field is OPTIONAL. - Credentials user_credentials = 5; + Credentials user_credentials = 4; } message ControllerUnpublishVolumeResponse { @@ -575,36 +564,33 @@ message NodePublishVolumeRequest { // The API version assumed by the CO. This is a REQUIRED field. Version version = 1; - // The ID of the volume to publish. This field is REQUIRED. - VolumeID volume_id = 2; - - // The metadata of the volume to publish. This field is OPTIONAL. - VolumeMetadata volume_metadata = 3; + // The handle of the volume to publish. This field is REQUIRED. + VolumeHandle volume_handle = 2; // The CO SHALL set this field to the value returned by // `ControllerPublishVolume` if the corresponding Controller Plugin // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be // left unset if the corresponding Controller Plugin does not have // this capability. This is an OPTIONAL field. - PublishVolumeInfo publish_volume_info = 4; + PublishVolumeInfo publish_volume_info = 3; // The path to which the volume will be published. It MUST be an // absolute path in the root filesystem of the process serving this // request. The CO SHALL ensure uniqueness of target_path per volume. // This is a REQUIRED field. - string target_path = 5; + string target_path = 4; // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability volume_capability = 6; + VolumeCapability volume_capability = 5; // Whether to publish the volume in readonly mode. This field is // REQUIRED. - bool readonly = 7; + bool readonly = 6; // End user credentials used to authenticate/authorize node publish request. // This field is OPTIONAL. - Credentials user_credentials = 8; + Credentials user_credentials = 7; } message NodePublishVolumeResponse { @@ -622,20 +608,17 @@ message NodeUnpublishVolumeRequest { // The API version assumed by the CO. This is a REQUIRED field. Version version = 1; - // The ID of the volume. This field is REQUIRED. - VolumeID volume_id = 2; - - // The metadata of the volume. This field is OPTIONAL. - VolumeMetadata volume_metadata = 3; + // The handle of the volume. This field is REQUIRED. + VolumeHandle volume_handle = 2; // The path at which the volume was published. It MUST be an absolute // path in the root filesystem of the process serving this request. // This is a REQUIRED field. - string target_path = 4; + string target_path = 3; // End user credentials used to authenticate/authorize node unpublish request. // This field is OPTIONAL. - Credentials user_credentials = 5; + Credentials user_credentials = 4; } message NodeUnpublishVolumeResponse { @@ -900,28 +883,20 @@ message Error { // exponential back off. OPERATION_PENDING_FOR_VOLUME = 2; - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - INVALID_VOLUME_ID = 3; - - // Indicates that the specified `VolumeMetadata` is not allowed or - // understood by the Plugin. More human-readable information MAY - // be provided in the `error_description` field. - // - // Recovery behavior: Caller MUST fix the `VolumeMetadata` before - // retrying. - INVALID_VOLUME_METADATA = 4; + INVALID_VOLUME_HANDLE = 3; // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // // Recovery behavior: Caller SHOULD assume the `DeleteVolume` call // succeeded. - VOLUME_DOES_NOT_EXIST = 5; + VOLUME_DOES_NOT_EXIST = 4; } // Machine parsable error code. @@ -968,32 +943,24 @@ message Error { // exponential back off. OPERATION_PENDING_FOR_VOLUME = 2; - // Indicates that the specified `VolumeID` is not allowed or - // understood by the Plugin. More human-readable information MAY - // be provided in the `error_description` field. - // - // Recovery behavior: Caller MUST fix the `VolumeID` before - // retrying. - INVALID_VOLUME_ID = 3; - - // Indicates that the specified `VolumeMetadata` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeMetadata` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - INVALID_VOLUME_METADATA = 4; + INVALID_VOLUME_HANDLE = 3; // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. - VOLUME_DOES_NOT_EXIST = 5; + VOLUME_DOES_NOT_EXIST = 4; // Indicates that a volume corresponding to the specified - // `VolumeID` is already attached to another node and does not + // `VolumeHandle` is already attached to another node and does not // support multi-node attach. If this error code is returned, the // Plugin MUST also specify the `node_id` of the node the volume // is already attached to. @@ -1002,7 +969,7 @@ message Error { // information to detach the volume from the other node. Caller // SHOULD ensure the specified volume is not attached to any other // node before retrying with exponential back off. - VOLUME_ALREADY_PUBLISHED = 6; + VOLUME_ALREADY_PUBLISHED = 5; // Indicates that a node corresponding to the specified `NodeID` // does not exist. @@ -1010,24 +977,24 @@ message Error { // Recovery behavior: Caller SHOULD verify that the `NodeID` is // correct and that the node is available and has not been // terminated or deleted before retrying with exponential backoff. - NODE_DOES_NOT_EXIST = 7; + NODE_DOES_NOT_EXIST = 6; // Indicates that a volume corresponding to the specified - // `VolumeID` is already attached to the maximum supported number - // of nodes and therefore this operation can not be completed - // until the volume is detached from at least one of the existing - // nodes. When this error code is returned, the Plugin MUST also - // specify the `NodeId` of all the nodes the volume is attached - // to. + // `VolumeHandle` is already attached to the maximum supported + // number of nodes and therefore this operation can not be + // completed until the volume is detached from at least one of the + // existing nodes. When this error code is returned, the Plugin + // MUST also specify the `NodeId` of all the nodes the volume is + // attached to. // // Recovery behavior: Caller MAY use the provided `node_ids` // information to detach the volume from one other node before // retrying with exponential backoff. - MAX_ATTACHED_NODES = 8; + MAX_ATTACHED_NODES = 7; - UNSUPPORTED_MOUNT_FLAGS = 10; - UNSUPPORTED_VOLUME_TYPE = 11; - UNSUPPORTED_FS_TYPE = 12; + UNSUPPORTED_MOUNT_FLAGS = 9; + UNSUPPORTED_VOLUME_TYPE = 10; + UNSUPPORTED_FS_TYPE = 11; // Indicates that the specified `NodeID` is not allowed or // understood by the Plugin, or the Plugin does not support the @@ -1036,7 +1003,7 @@ message Error { // // Recovery behavior: Caller MUST fix the `NodeID` before // retrying. - INVALID_NODE_ID = 9; + INVALID_NODE_ID = 8; } // Machine parsable error code. @@ -1088,29 +1055,21 @@ message Error { // exponential back off. OPERATION_PENDING_FOR_VOLUME = 2; - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - INVALID_VOLUME_ID = 3; - - // Indicates that the specified `VolumeMetadata` is not allowed or - // understood by the Plugin. More human-readable information MAY - // be provided in the `error_description` field. - // - // Recovery behavior: Caller MUST fix the `VolumeMetadata` before - // retrying. - INVALID_VOLUME_METADATA = 4; + INVALID_VOLUME_HANDLE = 3; // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. - VOLUME_DOES_NOT_EXIST = 5; + VOLUME_DOES_NOT_EXIST = 4; // Indicates that a node corresponding to the specified `NodeID` // does not exist. @@ -1118,7 +1077,7 @@ message Error { // Recovery behavior: Caller SHOULD verify that the `NodeID` is // correct and that the node is available and has not been // terminated or deleted before retrying. - NODE_DOES_NOT_EXIST = 6; + NODE_DOES_NOT_EXIST = 5; // Indicates that the specified `NodeID` is not allowed or // understood by the Plugin. More human-readable information MAY @@ -1126,16 +1085,16 @@ message Error { // // Recovery behavior: Caller MUST fix the `NodeID` before // retrying. - INVALID_NODE_ID = 7; + INVALID_NODE_ID = 6; - VOLUME_NOT_ATTACHED_TO_SPECIFIED_NODE = 8; + VOLUME_NOT_ATTACHED_TO_SPECIFIED_NODE = 7; // Indicates that the Plugin does not support the operation // without a `NodeID`. // // Recovery behavior: Caller MUST specify the `NodeID` before // retrying. - NODE_ID_REQUIRED = 9; + NODE_ID_REQUIRED = 8; } ControllerUnpublishVolumeErrorCode error_code = 1; @@ -1209,10 +1168,10 @@ message Error { OPERATION_PENDING_FOR_VOLUME = 1; // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. VOLUME_DOES_NOT_EXIST = 2; @@ -1221,13 +1180,13 @@ message Error { UNSUPPORTED_FS_TYPE = 5; MOUNT_ERROR = 6; - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - INVALID_VOLUME_ID = 7; + INVALID_VOLUME_HANDLE = 7; } NodePublishVolumeErrorCode error_code = 1; @@ -1263,22 +1222,22 @@ message Error { OPERATION_PENDING_FOR_VOLUME = 1; // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. VOLUME_DOES_NOT_EXIST = 2; UNMOUNT_ERROR = 3; - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - INVALID_VOLUME_ID = 4; + INVALID_VOLUME_HANDLE = 4; } NodeUnpublishVolumeErrorCode error_code = 1; diff --git a/lib/go/csi/csi.pb.go b/lib/go/csi/csi.pb.go index 1bc1f77b..4be3aae5 100644 --- a/lib/go/csi/csi.pb.go +++ b/lib/go/csi/csi.pb.go @@ -18,8 +18,7 @@ It has these top-level messages: VolumeCapability CapacityRange VolumeInfo - VolumeID - VolumeMetadata + VolumeHandle Credentials DeleteVolumeRequest DeleteVolumeResponse @@ -143,7 +142,7 @@ func (x ControllerServiceCapability_RPC_Type) String() string { return proto.EnumName(ControllerServiceCapability_RPC_Type_name, int32(x)) } func (ControllerServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{29, 0, 0} + return fileDescriptor0, []int{28, 0, 0} } type NodeServiceCapability_RPC_Type int32 @@ -163,7 +162,7 @@ func (x NodeServiceCapability_RPC_Type) String() string { return proto.EnumName(NodeServiceCapability_RPC_Type_name, int32(x)) } func (NodeServiceCapability_RPC_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{40, 0, 0} + return fileDescriptor0, []int{39, 0, 0} } type Error_GeneralError_GeneralErrorCode int32 @@ -221,7 +220,7 @@ func (x Error_GeneralError_GeneralErrorCode) String() string { return proto.EnumName(Error_GeneralError_GeneralErrorCode_name, int32(x)) } func (Error_GeneralError_GeneralErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 0, 0} + return fileDescriptor0, []int{40, 0, 0} } type Error_CreateVolumeError_CreateVolumeErrorCode int32 @@ -318,7 +317,7 @@ func (x Error_CreateVolumeError_CreateVolumeErrorCode) String() string { return proto.EnumName(Error_CreateVolumeError_CreateVolumeErrorCode_name, int32(x)) } func (Error_CreateVolumeError_CreateVolumeErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 1, 0} + return fileDescriptor0, []int{40, 1, 0} } type Error_DeleteVolumeError_DeleteVolumeErrorCode int32 @@ -353,50 +352,41 @@ const ( // calls pending for the specified volume, and then retry with // exponential back off. Error_DeleteVolumeError_OPERATION_PENDING_FOR_VOLUME Error_DeleteVolumeError_DeleteVolumeErrorCode = 2 - // Indicates that the specified `VolumeID` is not allowed or - // understood by the Plugin. More human-readable information MAY - // be provided in the `error_description` field. - // - // Recovery behavior: Caller MUST fix the `VolumeID` before - // retrying. - Error_DeleteVolumeError_INVALID_VOLUME_ID Error_DeleteVolumeError_DeleteVolumeErrorCode = 3 - // Indicates that the specified `VolumeMetadata` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeMetadata` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - Error_DeleteVolumeError_INVALID_VOLUME_METADATA Error_DeleteVolumeError_DeleteVolumeErrorCode = 4 + Error_DeleteVolumeError_INVALID_VOLUME_HANDLE Error_DeleteVolumeError_DeleteVolumeErrorCode = 3 // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // // Recovery behavior: Caller SHOULD assume the `DeleteVolume` call // succeeded. - Error_DeleteVolumeError_VOLUME_DOES_NOT_EXIST Error_DeleteVolumeError_DeleteVolumeErrorCode = 5 + Error_DeleteVolumeError_VOLUME_DOES_NOT_EXIST Error_DeleteVolumeError_DeleteVolumeErrorCode = 4 ) var Error_DeleteVolumeError_DeleteVolumeErrorCode_name = map[int32]string{ 0: "UNKNOWN", 1: "CALL_NOT_IMPLEMENTED", 2: "OPERATION_PENDING_FOR_VOLUME", - 3: "INVALID_VOLUME_ID", - 4: "INVALID_VOLUME_METADATA", - 5: "VOLUME_DOES_NOT_EXIST", + 3: "INVALID_VOLUME_HANDLE", + 4: "VOLUME_DOES_NOT_EXIST", } var Error_DeleteVolumeError_DeleteVolumeErrorCode_value = map[string]int32{ "UNKNOWN": 0, "CALL_NOT_IMPLEMENTED": 1, "OPERATION_PENDING_FOR_VOLUME": 2, - "INVALID_VOLUME_ID": 3, - "INVALID_VOLUME_METADATA": 4, - "VOLUME_DOES_NOT_EXIST": 5, + "INVALID_VOLUME_HANDLE": 3, + "VOLUME_DOES_NOT_EXIST": 4, } func (x Error_DeleteVolumeError_DeleteVolumeErrorCode) String() string { return proto.EnumName(Error_DeleteVolumeError_DeleteVolumeErrorCode_name, int32(x)) } func (Error_DeleteVolumeError_DeleteVolumeErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 2, 0} + return fileDescriptor0, []int{40, 2, 0} } type Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode int32 @@ -432,29 +422,22 @@ const ( // calls pending for the specified volume, and then retry with // exponential back off. Error_ControllerPublishVolumeError_OPERATION_PENDING_FOR_VOLUME Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 2 - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - Error_ControllerPublishVolumeError_INVALID_VOLUME_ID Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 3 - // Indicates that the specified `VolumeMetadata` is not allowed or - // understood by the Plugin. More human-readable information MAY - // be provided in the `error_description` field. - // - // Recovery behavior: Caller MUST fix the `VolumeMetadata` before - // retrying. - Error_ControllerPublishVolumeError_INVALID_VOLUME_METADATA Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 4 + Error_ControllerPublishVolumeError_INVALID_VOLUME_HANDLE Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 3 // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. - Error_ControllerPublishVolumeError_VOLUME_DOES_NOT_EXIST Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 5 + Error_ControllerPublishVolumeError_VOLUME_DOES_NOT_EXIST Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 4 // Indicates that a volume corresponding to the specified - // `VolumeID` is already attached to another node and does not + // `VolumeHandle` is already attached to another node and does not // support multi-node attach. If this error code is returned, the // Plugin MUST also specify the `node_id` of the node the volume // is already attached to. @@ -463,29 +446,29 @@ const ( // information to detach the volume from the other node. Caller // SHOULD ensure the specified volume is not attached to any other // node before retrying with exponential back off. - Error_ControllerPublishVolumeError_VOLUME_ALREADY_PUBLISHED Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 6 + Error_ControllerPublishVolumeError_VOLUME_ALREADY_PUBLISHED Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 5 // Indicates that a node corresponding to the specified `NodeID` // does not exist. // // Recovery behavior: Caller SHOULD verify that the `NodeID` is // correct and that the node is available and has not been // terminated or deleted before retrying with exponential backoff. - Error_ControllerPublishVolumeError_NODE_DOES_NOT_EXIST Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 7 + Error_ControllerPublishVolumeError_NODE_DOES_NOT_EXIST Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 6 // Indicates that a volume corresponding to the specified - // `VolumeID` is already attached to the maximum supported number - // of nodes and therefore this operation can not be completed - // until the volume is detached from at least one of the existing - // nodes. When this error code is returned, the Plugin MUST also - // specify the `NodeId` of all the nodes the volume is attached - // to. + // `VolumeHandle` is already attached to the maximum supported + // number of nodes and therefore this operation can not be + // completed until the volume is detached from at least one of the + // existing nodes. When this error code is returned, the Plugin + // MUST also specify the `NodeId` of all the nodes the volume is + // attached to. // // Recovery behavior: Caller MAY use the provided `node_ids` // information to detach the volume from one other node before // retrying with exponential backoff. - Error_ControllerPublishVolumeError_MAX_ATTACHED_NODES Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 8 - Error_ControllerPublishVolumeError_UNSUPPORTED_MOUNT_FLAGS Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 10 - Error_ControllerPublishVolumeError_UNSUPPORTED_VOLUME_TYPE Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 11 - Error_ControllerPublishVolumeError_UNSUPPORTED_FS_TYPE Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 12 + Error_ControllerPublishVolumeError_MAX_ATTACHED_NODES Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 7 + Error_ControllerPublishVolumeError_UNSUPPORTED_MOUNT_FLAGS Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 9 + Error_ControllerPublishVolumeError_UNSUPPORTED_VOLUME_TYPE Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 10 + Error_ControllerPublishVolumeError_UNSUPPORTED_FS_TYPE Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 11 // Indicates that the specified `NodeID` is not allowed or // understood by the Plugin, or the Plugin does not support the // operation without a `NodeID`. More human-readable information @@ -493,45 +476,43 @@ const ( // // Recovery behavior: Caller MUST fix the `NodeID` before // retrying. - Error_ControllerPublishVolumeError_INVALID_NODE_ID Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 9 + Error_ControllerPublishVolumeError_INVALID_NODE_ID Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode = 8 ) var Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode_name = map[int32]string{ 0: "UNKNOWN", 1: "CALL_NOT_IMPLEMENTED", 2: "OPERATION_PENDING_FOR_VOLUME", - 3: "INVALID_VOLUME_ID", - 4: "INVALID_VOLUME_METADATA", - 5: "VOLUME_DOES_NOT_EXIST", - 6: "VOLUME_ALREADY_PUBLISHED", - 7: "NODE_DOES_NOT_EXIST", - 8: "MAX_ATTACHED_NODES", - 10: "UNSUPPORTED_MOUNT_FLAGS", - 11: "UNSUPPORTED_VOLUME_TYPE", - 12: "UNSUPPORTED_FS_TYPE", - 9: "INVALID_NODE_ID", + 3: "INVALID_VOLUME_HANDLE", + 4: "VOLUME_DOES_NOT_EXIST", + 5: "VOLUME_ALREADY_PUBLISHED", + 6: "NODE_DOES_NOT_EXIST", + 7: "MAX_ATTACHED_NODES", + 9: "UNSUPPORTED_MOUNT_FLAGS", + 10: "UNSUPPORTED_VOLUME_TYPE", + 11: "UNSUPPORTED_FS_TYPE", + 8: "INVALID_NODE_ID", } var Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode_value = map[string]int32{ "UNKNOWN": 0, "CALL_NOT_IMPLEMENTED": 1, "OPERATION_PENDING_FOR_VOLUME": 2, - "INVALID_VOLUME_ID": 3, - "INVALID_VOLUME_METADATA": 4, - "VOLUME_DOES_NOT_EXIST": 5, - "VOLUME_ALREADY_PUBLISHED": 6, - "NODE_DOES_NOT_EXIST": 7, - "MAX_ATTACHED_NODES": 8, - "UNSUPPORTED_MOUNT_FLAGS": 10, - "UNSUPPORTED_VOLUME_TYPE": 11, - "UNSUPPORTED_FS_TYPE": 12, - "INVALID_NODE_ID": 9, + "INVALID_VOLUME_HANDLE": 3, + "VOLUME_DOES_NOT_EXIST": 4, + "VOLUME_ALREADY_PUBLISHED": 5, + "NODE_DOES_NOT_EXIST": 6, + "MAX_ATTACHED_NODES": 7, + "UNSUPPORTED_MOUNT_FLAGS": 9, + "UNSUPPORTED_VOLUME_TYPE": 10, + "UNSUPPORTED_FS_TYPE": 11, + "INVALID_NODE_ID": 8, } func (x Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode) String() string { return proto.EnumName(Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode_name, int32(x)) } func (Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 3, 0} + return fileDescriptor0, []int{40, 3, 0} } type Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode int32 @@ -567,80 +548,71 @@ const ( // calls pending for the specified volume, and then retry with // exponential back off. Error_ControllerUnpublishVolumeError_OPERATION_PENDING_FOR_VOLUME Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 2 - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - Error_ControllerUnpublishVolumeError_INVALID_VOLUME_ID Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 3 - // Indicates that the specified `VolumeMetadata` is not allowed or - // understood by the Plugin. More human-readable information MAY - // be provided in the `error_description` field. - // - // Recovery behavior: Caller MUST fix the `VolumeMetadata` before - // retrying. - Error_ControllerUnpublishVolumeError_INVALID_VOLUME_METADATA Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 4 + Error_ControllerUnpublishVolumeError_INVALID_VOLUME_HANDLE Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 3 // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. - Error_ControllerUnpublishVolumeError_VOLUME_DOES_NOT_EXIST Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 5 + Error_ControllerUnpublishVolumeError_VOLUME_DOES_NOT_EXIST Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 4 // Indicates that a node corresponding to the specified `NodeID` // does not exist. // // Recovery behavior: Caller SHOULD verify that the `NodeID` is // correct and that the node is available and has not been // terminated or deleted before retrying. - Error_ControllerUnpublishVolumeError_NODE_DOES_NOT_EXIST Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 6 + Error_ControllerUnpublishVolumeError_NODE_DOES_NOT_EXIST Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 5 // Indicates that the specified `NodeID` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // // Recovery behavior: Caller MUST fix the `NodeID` before // retrying. - Error_ControllerUnpublishVolumeError_INVALID_NODE_ID Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 7 - Error_ControllerUnpublishVolumeError_VOLUME_NOT_ATTACHED_TO_SPECIFIED_NODE Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 8 + Error_ControllerUnpublishVolumeError_INVALID_NODE_ID Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 6 + Error_ControllerUnpublishVolumeError_VOLUME_NOT_ATTACHED_TO_SPECIFIED_NODE Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 7 // Indicates that the Plugin does not support the operation // without a `NodeID`. // // Recovery behavior: Caller MUST specify the `NodeID` before // retrying. - Error_ControllerUnpublishVolumeError_NODE_ID_REQUIRED Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 9 + Error_ControllerUnpublishVolumeError_NODE_ID_REQUIRED Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode = 8 ) var Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode_name = map[int32]string{ 0: "UNKNOWN", 1: "CALL_NOT_IMPLEMENTED", 2: "OPERATION_PENDING_FOR_VOLUME", - 3: "INVALID_VOLUME_ID", - 4: "INVALID_VOLUME_METADATA", - 5: "VOLUME_DOES_NOT_EXIST", - 6: "NODE_DOES_NOT_EXIST", - 7: "INVALID_NODE_ID", - 8: "VOLUME_NOT_ATTACHED_TO_SPECIFIED_NODE", - 9: "NODE_ID_REQUIRED", + 3: "INVALID_VOLUME_HANDLE", + 4: "VOLUME_DOES_NOT_EXIST", + 5: "NODE_DOES_NOT_EXIST", + 6: "INVALID_NODE_ID", + 7: "VOLUME_NOT_ATTACHED_TO_SPECIFIED_NODE", + 8: "NODE_ID_REQUIRED", } var Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode_value = map[string]int32{ "UNKNOWN": 0, "CALL_NOT_IMPLEMENTED": 1, "OPERATION_PENDING_FOR_VOLUME": 2, - "INVALID_VOLUME_ID": 3, - "INVALID_VOLUME_METADATA": 4, - "VOLUME_DOES_NOT_EXIST": 5, - "NODE_DOES_NOT_EXIST": 6, - "INVALID_NODE_ID": 7, - "VOLUME_NOT_ATTACHED_TO_SPECIFIED_NODE": 8, - "NODE_ID_REQUIRED": 9, + "INVALID_VOLUME_HANDLE": 3, + "VOLUME_DOES_NOT_EXIST": 4, + "NODE_DOES_NOT_EXIST": 5, + "INVALID_NODE_ID": 6, + "VOLUME_NOT_ATTACHED_TO_SPECIFIED_NODE": 7, + "NODE_ID_REQUIRED": 8, } func (x Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode) String() string { return proto.EnumName(Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode_name, int32(x)) } func (Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 4, 0} + return fileDescriptor0, []int{40, 4, 0} } type Error_ValidateVolumeCapabilitiesError_ValidateVolumeCapabilitiesErrorCode int32 @@ -695,7 +667,7 @@ func (x Error_ValidateVolumeCapabilitiesError_ValidateVolumeCapabilitiesErrorCod return proto.EnumName(Error_ValidateVolumeCapabilitiesError_ValidateVolumeCapabilitiesErrorCode_name, int32(x)) } func (Error_ValidateVolumeCapabilitiesError_ValidateVolumeCapabilitiesErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 5, 0} + return fileDescriptor0, []int{40, 5, 0} } type Error_NodePublishVolumeError_NodePublishVolumeErrorCode int32 @@ -725,23 +697,23 @@ const ( // exponential back off. Error_NodePublishVolumeError_OPERATION_PENDING_FOR_VOLUME Error_NodePublishVolumeError_NodePublishVolumeErrorCode = 1 // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. Error_NodePublishVolumeError_VOLUME_DOES_NOT_EXIST Error_NodePublishVolumeError_NodePublishVolumeErrorCode = 2 Error_NodePublishVolumeError_UNSUPPORTED_MOUNT_FLAGS Error_NodePublishVolumeError_NodePublishVolumeErrorCode = 3 Error_NodePublishVolumeError_UNSUPPORTED_VOLUME_TYPE Error_NodePublishVolumeError_NodePublishVolumeErrorCode = 4 Error_NodePublishVolumeError_UNSUPPORTED_FS_TYPE Error_NodePublishVolumeError_NodePublishVolumeErrorCode = 5 Error_NodePublishVolumeError_MOUNT_ERROR Error_NodePublishVolumeError_NodePublishVolumeErrorCode = 6 - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - Error_NodePublishVolumeError_INVALID_VOLUME_ID Error_NodePublishVolumeError_NodePublishVolumeErrorCode = 7 + Error_NodePublishVolumeError_INVALID_VOLUME_HANDLE Error_NodePublishVolumeError_NodePublishVolumeErrorCode = 7 ) var Error_NodePublishVolumeError_NodePublishVolumeErrorCode_name = map[int32]string{ @@ -752,7 +724,7 @@ var Error_NodePublishVolumeError_NodePublishVolumeErrorCode_name = map[int32]str 4: "UNSUPPORTED_VOLUME_TYPE", 5: "UNSUPPORTED_FS_TYPE", 6: "MOUNT_ERROR", - 7: "INVALID_VOLUME_ID", + 7: "INVALID_VOLUME_HANDLE", } var Error_NodePublishVolumeError_NodePublishVolumeErrorCode_value = map[string]int32{ "UNKNOWN": 0, @@ -762,14 +734,14 @@ var Error_NodePublishVolumeError_NodePublishVolumeErrorCode_value = map[string]i "UNSUPPORTED_VOLUME_TYPE": 4, "UNSUPPORTED_FS_TYPE": 5, "MOUNT_ERROR": 6, - "INVALID_VOLUME_ID": 7, + "INVALID_VOLUME_HANDLE": 7, } func (x Error_NodePublishVolumeError_NodePublishVolumeErrorCode) String() string { return proto.EnumName(Error_NodePublishVolumeError_NodePublishVolumeErrorCode_name, int32(x)) } func (Error_NodePublishVolumeError_NodePublishVolumeErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 6, 0} + return fileDescriptor0, []int{40, 6, 0} } type Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode int32 @@ -799,20 +771,20 @@ const ( // exponential back off. Error_NodeUnpublishVolumeError_OPERATION_PENDING_FOR_VOLUME Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode = 1 // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. Error_NodeUnpublishVolumeError_VOLUME_DOES_NOT_EXIST Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode = 2 Error_NodeUnpublishVolumeError_UNMOUNT_ERROR Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode = 3 - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - Error_NodeUnpublishVolumeError_INVALID_VOLUME_ID Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode = 4 + Error_NodeUnpublishVolumeError_INVALID_VOLUME_HANDLE Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode = 4 ) var Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode_name = map[int32]string{ @@ -820,21 +792,21 @@ var Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode_name = map[int32 1: "OPERATION_PENDING_FOR_VOLUME", 2: "VOLUME_DOES_NOT_EXIST", 3: "UNMOUNT_ERROR", - 4: "INVALID_VOLUME_ID", + 4: "INVALID_VOLUME_HANDLE", } var Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode_value = map[string]int32{ "UNKNOWN": 0, "OPERATION_PENDING_FOR_VOLUME": 1, "VOLUME_DOES_NOT_EXIST": 2, "UNMOUNT_ERROR": 3, - "INVALID_VOLUME_ID": 4, + "INVALID_VOLUME_HANDLE": 4, } func (x Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode) String() string { return proto.EnumName(Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode_name, int32(x)) } func (Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 7, 0} + return fileDescriptor0, []int{40, 7, 0} } type Error_ProbeNodeError_ProbeNodeErrorCode int32 @@ -868,7 +840,7 @@ func (x Error_ProbeNodeError_ProbeNodeErrorCode) String() string { return proto.EnumName(Error_ProbeNodeError_ProbeNodeErrorCode_name, int32(x)) } func (Error_ProbeNodeError_ProbeNodeErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 8, 0} + return fileDescriptor0, []int{40, 8, 0} } type Error_GetNodeIDError_GetNodeIDErrorCode int32 @@ -901,7 +873,7 @@ func (x Error_GetNodeIDError_GetNodeIDErrorCode) String() string { return proto.EnumName(Error_GetNodeIDError_GetNodeIDErrorCode_name, int32(x)) } func (Error_GetNodeIDError_GetNodeIDErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 9, 0} + return fileDescriptor0, []int{40, 9, 0} } // ////// @@ -1730,11 +1702,7 @@ type VolumeInfo struct { // Contains identity information for the created volume. This field is // REQUIRED. The identity information will be used by the CO in // subsequent calls to refer to the provisioned volume. - Id *VolumeID `protobuf:"bytes,4,opt,name=id" json:"id,omitempty"` - // Metadata of the created volume. This field is OPTIONAL. If set, the - // CO SHALL pass this information along with the `id` to subsequent - // calls. - Metadata *VolumeMetadata `protobuf:"bytes,5,opt,name=metadata" json:"metadata,omitempty"` + Handle *VolumeHandle `protobuf:"bytes,2,opt,name=handle" json:"handle,omitempty"` } func (m *VolumeInfo) Reset() { *m = VolumeInfo{} } @@ -1749,64 +1717,54 @@ func (m *VolumeInfo) GetCapacityBytes() uint64 { return 0 } -func (m *VolumeInfo) GetId() *VolumeID { +func (m *VolumeInfo) GetHandle() *VolumeHandle { + if m != nil { + return m.Handle + } + return nil +} + +// VolumeHandle objects are generated by Plugin implementations to +// serve two purposes: first, to efficiently identify a volume known +// to the Plugin implementation; second, to capture additional, opaque, +// possibly sensitive information associated with a volume. It SHALL +// NOT change over the lifetime of the volume and MAY be safely cached +// by the CO. +// Since this object will be passed around by the CO, it is RECOMMENDED +// that each Plugin keeps the information herein as small as possible. +// The total bytes of a serialized VolumeHandle must be less than 1 MiB. +type VolumeHandle struct { + // ID is the identity of the provisioned volume specified by the + // Plugin. This field is REQUIRED. + // This information SHALL NOT be considered sensitive such that, for + // example, the CO MAY generate log messages that include this data. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // Metadata captures additional, possibly sensitive, information about + // a volume in the form of key-value pairs. This field is OPTIONAL. + // Since this field MAY contain sensitive information, the CO MUST NOT + // leak this information to untrusted entities. + Metadata map[string]string `protobuf:"bytes,2,rep,name=metadata" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *VolumeHandle) Reset() { *m = VolumeHandle{} } +func (m *VolumeHandle) String() string { return proto.CompactTextString(m) } +func (*VolumeHandle) ProtoMessage() {} +func (*VolumeHandle) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *VolumeHandle) GetId() string { if m != nil { return m.Id } - return nil + return "" } -func (m *VolumeInfo) GetMetadata() *VolumeMetadata { +func (m *VolumeHandle) GetMetadata() map[string]string { if m != nil { return m.Metadata } return nil } -// The identity of the volume. -type VolumeID struct { - // The identity of the provisioned volume specified by the Plugin in - // the form of key-value pairs. This field is REQUIRED. Given this - // information will be passed around by the CO, it is RECOMMENDED that - // each Plugin keeps this information as small as possible. - Values map[string]string `protobuf:"bytes,1,rep,name=values" json:"values,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` -} - -func (m *VolumeID) Reset() { *m = VolumeID{} } -func (m *VolumeID) String() string { return proto.CompactTextString(m) } -func (*VolumeID) ProtoMessage() {} -func (*VolumeID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } - -func (m *VolumeID) GetValues() map[string]string { - if m != nil { - return m.Values - } - return nil -} - -// The metadata information about the volume. -type VolumeMetadata struct { - // The metadata information about the provisioned volume specified by - // the Plugin in the form of key-value pairs. This field is OPTIONAL. - // This field MAY contain sensitive information. Therefore, the CO - // MUST NOT leak this information to untrusted entities. Given this - // information will be passed around by the CO, it is RECOMMENDED that - // each Plugin keeps this information as small as possible. - Values map[string]string `protobuf:"bytes,1,rep,name=values" json:"values,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` -} - -func (m *VolumeMetadata) Reset() { *m = VolumeMetadata{} } -func (m *VolumeMetadata) String() string { return proto.CompactTextString(m) } -func (*VolumeMetadata) ProtoMessage() {} -func (*VolumeMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } - -func (m *VolumeMetadata) GetValues() map[string]string { - if m != nil { - return m.Values - } - return nil -} - // A standard way to encode credential data. The total bytes of the values in // the Data field must be less than 1 Mebibyte. type Credentials struct { @@ -1825,7 +1783,7 @@ type Credentials struct { func (m *Credentials) Reset() { *m = Credentials{} } func (m *Credentials) String() string { return proto.CompactTextString(m) } func (*Credentials) ProtoMessage() {} -func (*Credentials) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*Credentials) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (m *Credentials) GetData() map[string]string { if m != nil { @@ -1839,21 +1797,19 @@ func (m *Credentials) GetData() map[string]string { type DeleteVolumeRequest struct { // The API version assumed by the CO. This field is REQUIRED. Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` - // The ID of the volume to be deprovisioned. This field is REQUIRED. - VolumeId *VolumeID `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` - // The metadata of the volume to be deprovisioned. This field is - // OPTIONAL. - VolumeMetadata *VolumeMetadata `protobuf:"bytes,3,opt,name=volume_metadata,json=volumeMetadata" json:"volume_metadata,omitempty"` + // The handle of the volume to be deprovisioned. + // This field is REQUIRED. + VolumeHandle *VolumeHandle `protobuf:"bytes,2,opt,name=volume_handle,json=volumeHandle" json:"volume_handle,omitempty"` // End user credentials used to authenticate/authorize volume deletion // request. // This field is OPTIONAL. - UserCredentials *Credentials `protobuf:"bytes,4,opt,name=user_credentials,json=userCredentials" json:"user_credentials,omitempty"` + UserCredentials *Credentials `protobuf:"bytes,3,opt,name=user_credentials,json=userCredentials" json:"user_credentials,omitempty"` } func (m *DeleteVolumeRequest) Reset() { *m = DeleteVolumeRequest{} } func (m *DeleteVolumeRequest) String() string { return proto.CompactTextString(m) } func (*DeleteVolumeRequest) ProtoMessage() {} -func (*DeleteVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*DeleteVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } func (m *DeleteVolumeRequest) GetVersion() *Version { if m != nil { @@ -1862,16 +1818,9 @@ func (m *DeleteVolumeRequest) GetVersion() *Version { return nil } -func (m *DeleteVolumeRequest) GetVolumeId() *VolumeID { - if m != nil { - return m.VolumeId - } - return nil -} - -func (m *DeleteVolumeRequest) GetVolumeMetadata() *VolumeMetadata { +func (m *DeleteVolumeRequest) GetVolumeHandle() *VolumeHandle { if m != nil { - return m.VolumeMetadata + return m.VolumeHandle } return nil } @@ -1895,7 +1844,7 @@ type DeleteVolumeResponse struct { func (m *DeleteVolumeResponse) Reset() { *m = DeleteVolumeResponse{} } func (m *DeleteVolumeResponse) String() string { return proto.CompactTextString(m) } func (*DeleteVolumeResponse) ProtoMessage() {} -func (*DeleteVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*DeleteVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } type isDeleteVolumeResponse_Reply interface { isDeleteVolumeResponse_Reply() @@ -2012,39 +1961,37 @@ type DeleteVolumeResponse_Result struct { func (m *DeleteVolumeResponse_Result) Reset() { *m = DeleteVolumeResponse_Result{} } func (m *DeleteVolumeResponse_Result) String() string { return proto.CompactTextString(m) } func (*DeleteVolumeResponse_Result) ProtoMessage() {} -func (*DeleteVolumeResponse_Result) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14, 0} } +func (*DeleteVolumeResponse_Result) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13, 0} } // ////// // ////// type ControllerPublishVolumeRequest struct { // The API version assumed by the CO. This field is REQUIRED. Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` - // The ID of the volume to be used on a node. This field is REQUIRED. - VolumeId *VolumeID `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` - // The metadata of the volume to be used on a node. This field is - // OPTIONAL. - VolumeMetadata *VolumeMetadata `protobuf:"bytes,3,opt,name=volume_metadata,json=volumeMetadata" json:"volume_metadata,omitempty"` + // The handle of the volume to be used on a node. + // This field is REQUIRED. + VolumeHandle *VolumeHandle `protobuf:"bytes,2,opt,name=volume_handle,json=volumeHandle" json:"volume_handle,omitempty"` // The ID of the node. This field is OPTIONAL. The CO SHALL set (or // clear) this field to match the `NodeID` returned by `GetNodeID`. // `GetNodeID` is allowed to omit `NodeID` from a successful `Result`; // in such cases the CO SHALL NOT specify this field. - NodeId *NodeID `protobuf:"bytes,4,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` + NodeId *NodeID `protobuf:"bytes,3,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability *VolumeCapability `protobuf:"bytes,6,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` + VolumeCapability *VolumeCapability `protobuf:"bytes,4,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` // Whether to publish the volume in readonly mode. This field is // REQUIRED. Readonly bool `protobuf:"varint,5,opt,name=readonly" json:"readonly,omitempty"` // End user credentials used to authenticate/authorize controller publish // request. // This field is OPTIONAL. - UserCredentials *Credentials `protobuf:"bytes,7,opt,name=user_credentials,json=userCredentials" json:"user_credentials,omitempty"` + UserCredentials *Credentials `protobuf:"bytes,6,opt,name=user_credentials,json=userCredentials" json:"user_credentials,omitempty"` } func (m *ControllerPublishVolumeRequest) Reset() { *m = ControllerPublishVolumeRequest{} } func (m *ControllerPublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*ControllerPublishVolumeRequest) ProtoMessage() {} -func (*ControllerPublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*ControllerPublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (m *ControllerPublishVolumeRequest) GetVersion() *Version { if m != nil { @@ -2053,16 +2000,9 @@ func (m *ControllerPublishVolumeRequest) GetVersion() *Version { return nil } -func (m *ControllerPublishVolumeRequest) GetVolumeId() *VolumeID { +func (m *ControllerPublishVolumeRequest) GetVolumeHandle() *VolumeHandle { if m != nil { - return m.VolumeId - } - return nil -} - -func (m *ControllerPublishVolumeRequest) GetVolumeMetadata() *VolumeMetadata { - if m != nil { - return m.VolumeMetadata + return m.VolumeHandle } return nil } @@ -2108,7 +2048,7 @@ func (m *ControllerPublishVolumeResponse) Reset() { *m = ControllerPubli func (m *ControllerPublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*ControllerPublishVolumeResponse) ProtoMessage() {} func (*ControllerPublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{16} + return fileDescriptor0, []int{15} } type isControllerPublishVolumeResponse_Reply interface { @@ -2233,7 +2173,7 @@ func (m *ControllerPublishVolumeResponse_Result) Reset() { func (m *ControllerPublishVolumeResponse_Result) String() string { return proto.CompactTextString(m) } func (*ControllerPublishVolumeResponse_Result) ProtoMessage() {} func (*ControllerPublishVolumeResponse_Result) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{16, 0} + return fileDescriptor0, []int{15, 0} } func (m *ControllerPublishVolumeResponse_Result) GetPublishVolumeInfo() *PublishVolumeInfo { @@ -2254,7 +2194,7 @@ type NodeID struct { func (m *NodeID) Reset() { *m = NodeID{} } func (m *NodeID) String() string { return proto.CompactTextString(m) } func (*NodeID) ProtoMessage() {} -func (*NodeID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*NodeID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (m *NodeID) GetValues() map[string]string { if m != nil { @@ -2275,7 +2215,7 @@ type PublishVolumeInfo struct { func (m *PublishVolumeInfo) Reset() { *m = PublishVolumeInfo{} } func (m *PublishVolumeInfo) String() string { return proto.CompactTextString(m) } func (*PublishVolumeInfo) ProtoMessage() {} -func (*PublishVolumeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*PublishVolumeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *PublishVolumeInfo) GetValues() map[string]string { if m != nil { @@ -2289,10 +2229,8 @@ func (m *PublishVolumeInfo) GetValues() map[string]string { type ControllerUnpublishVolumeRequest struct { // The API version assumed by the CO. This field is REQUIRED. Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` - // The ID of the volume. This field is REQUIRED. - VolumeId *VolumeID `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` - // The metadata of the volume. This field is OPTIONAL. - VolumeMetadata *VolumeMetadata `protobuf:"bytes,3,opt,name=volume_metadata,json=volumeMetadata" json:"volume_metadata,omitempty"` + // The handle of the volume. This field is REQUIRED. + VolumeHandle *VolumeHandle `protobuf:"bytes,2,opt,name=volume_handle,json=volumeHandle" json:"volume_handle,omitempty"` // The ID of the node. This field is OPTIONAL. The CO SHALL set (or // clear) this field to match the `NodeID` returned by `GetNodeID`. // `GetNodeID` is allowed to omit `NodeID` from a successful `Result`; @@ -2302,18 +2240,18 @@ type ControllerUnpublishVolumeRequest struct { // the CO MAY omit this field as well, indicating that it does not // know which node the volume was previously used. The Plugin SHOULD // return an Error if this is not supported. - NodeId *NodeID `protobuf:"bytes,4,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` + NodeId *NodeID `protobuf:"bytes,3,opt,name=node_id,json=nodeId" json:"node_id,omitempty"` // End user credentials used to authenticate/authorize controller unpublish // request. // This field is OPTIONAL. - UserCredentials *Credentials `protobuf:"bytes,5,opt,name=user_credentials,json=userCredentials" json:"user_credentials,omitempty"` + UserCredentials *Credentials `protobuf:"bytes,4,opt,name=user_credentials,json=userCredentials" json:"user_credentials,omitempty"` } func (m *ControllerUnpublishVolumeRequest) Reset() { *m = ControllerUnpublishVolumeRequest{} } func (m *ControllerUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*ControllerUnpublishVolumeRequest) ProtoMessage() {} func (*ControllerUnpublishVolumeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{19} + return fileDescriptor0, []int{18} } func (m *ControllerUnpublishVolumeRequest) GetVersion() *Version { @@ -2323,16 +2261,9 @@ func (m *ControllerUnpublishVolumeRequest) GetVersion() *Version { return nil } -func (m *ControllerUnpublishVolumeRequest) GetVolumeId() *VolumeID { - if m != nil { - return m.VolumeId - } - return nil -} - -func (m *ControllerUnpublishVolumeRequest) GetVolumeMetadata() *VolumeMetadata { +func (m *ControllerUnpublishVolumeRequest) GetVolumeHandle() *VolumeHandle { if m != nil { - return m.VolumeMetadata + return m.VolumeHandle } return nil } @@ -2364,7 +2295,7 @@ func (m *ControllerUnpublishVolumeResponse) Reset() { *m = ControllerUnp func (m *ControllerUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*ControllerUnpublishVolumeResponse) ProtoMessage() {} func (*ControllerUnpublishVolumeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{20} + return fileDescriptor0, []int{19} } type isControllerUnpublishVolumeResponse_Reply interface { @@ -2485,7 +2416,7 @@ func (m *ControllerUnpublishVolumeResponse_Result) Reset() { func (m *ControllerUnpublishVolumeResponse_Result) String() string { return proto.CompactTextString(m) } func (*ControllerUnpublishVolumeResponse_Result) ProtoMessage() {} func (*ControllerUnpublishVolumeResponse_Result) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{20, 0} + return fileDescriptor0, []int{19, 0} } // ////// @@ -2506,7 +2437,7 @@ func (m *ValidateVolumeCapabilitiesRequest) Reset() { *m = ValidateVolum func (m *ValidateVolumeCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*ValidateVolumeCapabilitiesRequest) ProtoMessage() {} func (*ValidateVolumeCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{21} + return fileDescriptor0, []int{20} } func (m *ValidateVolumeCapabilitiesRequest) GetVersion() *Version { @@ -2543,7 +2474,7 @@ func (m *ValidateVolumeCapabilitiesResponse) Reset() { *m = ValidateVolu func (m *ValidateVolumeCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*ValidateVolumeCapabilitiesResponse) ProtoMessage() {} func (*ValidateVolumeCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{22} + return fileDescriptor0, []int{21} } type isValidateVolumeCapabilitiesResponse_Reply interface { @@ -2670,7 +2601,7 @@ func (m *ValidateVolumeCapabilitiesResponse_Result) Reset() { func (m *ValidateVolumeCapabilitiesResponse_Result) String() string { return proto.CompactTextString(m) } func (*ValidateVolumeCapabilitiesResponse_Result) ProtoMessage() {} func (*ValidateVolumeCapabilitiesResponse_Result) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{22, 0} + return fileDescriptor0, []int{21, 0} } func (m *ValidateVolumeCapabilitiesResponse_Result) GetSupported() bool { @@ -2709,7 +2640,7 @@ type ListVolumesRequest struct { func (m *ListVolumesRequest) Reset() { *m = ListVolumesRequest{} } func (m *ListVolumesRequest) String() string { return proto.CompactTextString(m) } func (*ListVolumesRequest) ProtoMessage() {} -func (*ListVolumesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } +func (*ListVolumesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } func (m *ListVolumesRequest) GetVersion() *Version { if m != nil { @@ -2744,7 +2675,7 @@ type ListVolumesResponse struct { func (m *ListVolumesResponse) Reset() { *m = ListVolumesResponse{} } func (m *ListVolumesResponse) String() string { return proto.CompactTextString(m) } func (*ListVolumesResponse) ProtoMessage() {} -func (*ListVolumesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } +func (*ListVolumesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } type isListVolumesResponse_Reply interface { isListVolumesResponse_Reply() @@ -2868,7 +2799,7 @@ type ListVolumesResponse_Result struct { func (m *ListVolumesResponse_Result) Reset() { *m = ListVolumesResponse_Result{} } func (m *ListVolumesResponse_Result) String() string { return proto.CompactTextString(m) } func (*ListVolumesResponse_Result) ProtoMessage() {} -func (*ListVolumesResponse_Result) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24, 0} } +func (*ListVolumesResponse_Result) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23, 0} } func (m *ListVolumesResponse_Result) GetEntries() []*ListVolumesResponse_Result_Entry { if m != nil { @@ -2892,7 +2823,7 @@ func (m *ListVolumesResponse_Result_Entry) Reset() { *m = ListVolumesRes func (m *ListVolumesResponse_Result_Entry) String() string { return proto.CompactTextString(m) } func (*ListVolumesResponse_Result_Entry) ProtoMessage() {} func (*ListVolumesResponse_Result_Entry) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{24, 0, 0} + return fileDescriptor0, []int{23, 0, 0} } func (m *ListVolumesResponse_Result_Entry) GetVolumeInfo() *VolumeInfo { @@ -2923,7 +2854,7 @@ type GetCapacityRequest struct { func (m *GetCapacityRequest) Reset() { *m = GetCapacityRequest{} } func (m *GetCapacityRequest) String() string { return proto.CompactTextString(m) } func (*GetCapacityRequest) ProtoMessage() {} -func (*GetCapacityRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } +func (*GetCapacityRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } func (m *GetCapacityRequest) GetVersion() *Version { if m != nil { @@ -2958,7 +2889,7 @@ type GetCapacityResponse struct { func (m *GetCapacityResponse) Reset() { *m = GetCapacityResponse{} } func (m *GetCapacityResponse) String() string { return proto.CompactTextString(m) } func (*GetCapacityResponse) ProtoMessage() {} -func (*GetCapacityResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } +func (*GetCapacityResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } type isGetCapacityResponse_Reply interface { isGetCapacityResponse_Reply() @@ -3081,7 +3012,7 @@ type GetCapacityResponse_Result struct { func (m *GetCapacityResponse_Result) Reset() { *m = GetCapacityResponse_Result{} } func (m *GetCapacityResponse_Result) String() string { return proto.CompactTextString(m) } func (*GetCapacityResponse_Result) ProtoMessage() {} -func (*GetCapacityResponse_Result) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26, 0} } +func (*GetCapacityResponse_Result) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25, 0} } func (m *GetCapacityResponse_Result) GetAvailableCapacity() uint64 { if m != nil { @@ -3101,7 +3032,7 @@ func (m *ControllerGetCapabilitiesRequest) Reset() { *m = ControllerGetC func (m *ControllerGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*ControllerGetCapabilitiesRequest) ProtoMessage() {} func (*ControllerGetCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{27} + return fileDescriptor0, []int{26} } func (m *ControllerGetCapabilitiesRequest) GetVersion() *Version { @@ -3124,7 +3055,7 @@ func (m *ControllerGetCapabilitiesResponse) Reset() { *m = ControllerGet func (m *ControllerGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*ControllerGetCapabilitiesResponse) ProtoMessage() {} func (*ControllerGetCapabilitiesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{28} + return fileDescriptor0, []int{27} } type isControllerGetCapabilitiesResponse_Reply interface { @@ -3248,7 +3179,7 @@ func (m *ControllerGetCapabilitiesResponse_Result) Reset() { func (m *ControllerGetCapabilitiesResponse_Result) String() string { return proto.CompactTextString(m) } func (*ControllerGetCapabilitiesResponse_Result) ProtoMessage() {} func (*ControllerGetCapabilitiesResponse_Result) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{28, 0} + return fileDescriptor0, []int{27, 0} } func (m *ControllerGetCapabilitiesResponse_Result) GetCapabilities() []*ControllerServiceCapability { @@ -3268,7 +3199,7 @@ type ControllerServiceCapability struct { func (m *ControllerServiceCapability) Reset() { *m = ControllerServiceCapability{} } func (m *ControllerServiceCapability) String() string { return proto.CompactTextString(m) } func (*ControllerServiceCapability) ProtoMessage() {} -func (*ControllerServiceCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } +func (*ControllerServiceCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } type isControllerServiceCapability_Type interface { isControllerServiceCapability_Type() @@ -3357,7 +3288,7 @@ func (m *ControllerServiceCapability_RPC) Reset() { *m = ControllerServi func (m *ControllerServiceCapability_RPC) String() string { return proto.CompactTextString(m) } func (*ControllerServiceCapability_RPC) ProtoMessage() {} func (*ControllerServiceCapability_RPC) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{29, 0} + return fileDescriptor0, []int{28, 0} } func (m *ControllerServiceCapability_RPC) GetType() ControllerServiceCapability_RPC_Type { @@ -3372,36 +3303,34 @@ func (m *ControllerServiceCapability_RPC) GetType() ControllerServiceCapability_ type NodePublishVolumeRequest struct { // The API version assumed by the CO. This is a REQUIRED field. Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` - // The ID of the volume to publish. This field is REQUIRED. - VolumeId *VolumeID `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` - // The metadata of the volume to publish. This field is OPTIONAL. - VolumeMetadata *VolumeMetadata `protobuf:"bytes,3,opt,name=volume_metadata,json=volumeMetadata" json:"volume_metadata,omitempty"` + // The handle of the volume to publish. This field is REQUIRED. + VolumeHandle *VolumeHandle `protobuf:"bytes,2,opt,name=volume_handle,json=volumeHandle" json:"volume_handle,omitempty"` // The CO SHALL set this field to the value returned by // `ControllerPublishVolume` if the corresponding Controller Plugin // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be // left unset if the corresponding Controller Plugin does not have // this capability. This is an OPTIONAL field. - PublishVolumeInfo *PublishVolumeInfo `protobuf:"bytes,4,opt,name=publish_volume_info,json=publishVolumeInfo" json:"publish_volume_info,omitempty"` + PublishVolumeInfo *PublishVolumeInfo `protobuf:"bytes,3,opt,name=publish_volume_info,json=publishVolumeInfo" json:"publish_volume_info,omitempty"` // The path to which the volume will be published. It MUST be an // absolute path in the root filesystem of the process serving this // request. The CO SHALL ensure uniqueness of target_path per volume. // This is a REQUIRED field. - TargetPath string `protobuf:"bytes,5,opt,name=target_path,json=targetPath" json:"target_path,omitempty"` + TargetPath string `protobuf:"bytes,4,opt,name=target_path,json=targetPath" json:"target_path,omitempty"` // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability *VolumeCapability `protobuf:"bytes,6,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` + VolumeCapability *VolumeCapability `protobuf:"bytes,5,opt,name=volume_capability,json=volumeCapability" json:"volume_capability,omitempty"` // Whether to publish the volume in readonly mode. This field is // REQUIRED. - Readonly bool `protobuf:"varint,7,opt,name=readonly" json:"readonly,omitempty"` + Readonly bool `protobuf:"varint,6,opt,name=readonly" json:"readonly,omitempty"` // End user credentials used to authenticate/authorize node publish request. // This field is OPTIONAL. - UserCredentials *Credentials `protobuf:"bytes,8,opt,name=user_credentials,json=userCredentials" json:"user_credentials,omitempty"` + UserCredentials *Credentials `protobuf:"bytes,7,opt,name=user_credentials,json=userCredentials" json:"user_credentials,omitempty"` } func (m *NodePublishVolumeRequest) Reset() { *m = NodePublishVolumeRequest{} } func (m *NodePublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodePublishVolumeRequest) ProtoMessage() {} -func (*NodePublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } +func (*NodePublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } func (m *NodePublishVolumeRequest) GetVersion() *Version { if m != nil { @@ -3410,16 +3339,9 @@ func (m *NodePublishVolumeRequest) GetVersion() *Version { return nil } -func (m *NodePublishVolumeRequest) GetVolumeId() *VolumeID { +func (m *NodePublishVolumeRequest) GetVolumeHandle() *VolumeHandle { if m != nil { - return m.VolumeId - } - return nil -} - -func (m *NodePublishVolumeRequest) GetVolumeMetadata() *VolumeMetadata { - if m != nil { - return m.VolumeMetadata + return m.VolumeHandle } return nil } @@ -3471,7 +3393,7 @@ type NodePublishVolumeResponse struct { func (m *NodePublishVolumeResponse) Reset() { *m = NodePublishVolumeResponse{} } func (m *NodePublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodePublishVolumeResponse) ProtoMessage() {} -func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } +func (*NodePublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } type isNodePublishVolumeResponse_Reply interface { isNodePublishVolumeResponse_Reply() @@ -3589,7 +3511,7 @@ func (m *NodePublishVolumeResponse_Result) Reset() { *m = NodePublishVol func (m *NodePublishVolumeResponse_Result) String() string { return proto.CompactTextString(m) } func (*NodePublishVolumeResponse_Result) ProtoMessage() {} func (*NodePublishVolumeResponse_Result) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{31, 0} + return fileDescriptor0, []int{30, 0} } // ////// @@ -3597,23 +3519,21 @@ func (*NodePublishVolumeResponse_Result) Descriptor() ([]byte, []int) { type NodeUnpublishVolumeRequest struct { // The API version assumed by the CO. This is a REQUIRED field. Version *Version `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` - // The ID of the volume. This field is REQUIRED. - VolumeId *VolumeID `protobuf:"bytes,2,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` - // The metadata of the volume. This field is OPTIONAL. - VolumeMetadata *VolumeMetadata `protobuf:"bytes,3,opt,name=volume_metadata,json=volumeMetadata" json:"volume_metadata,omitempty"` + // The handle of the volume. This field is REQUIRED. + VolumeHandle *VolumeHandle `protobuf:"bytes,2,opt,name=volume_handle,json=volumeHandle" json:"volume_handle,omitempty"` // The path at which the volume was published. It MUST be an absolute // path in the root filesystem of the process serving this request. // This is a REQUIRED field. - TargetPath string `protobuf:"bytes,4,opt,name=target_path,json=targetPath" json:"target_path,omitempty"` + TargetPath string `protobuf:"bytes,3,opt,name=target_path,json=targetPath" json:"target_path,omitempty"` // End user credentials used to authenticate/authorize node unpublish request. // This field is OPTIONAL. - UserCredentials *Credentials `protobuf:"bytes,5,opt,name=user_credentials,json=userCredentials" json:"user_credentials,omitempty"` + UserCredentials *Credentials `protobuf:"bytes,4,opt,name=user_credentials,json=userCredentials" json:"user_credentials,omitempty"` } func (m *NodeUnpublishVolumeRequest) Reset() { *m = NodeUnpublishVolumeRequest{} } func (m *NodeUnpublishVolumeRequest) String() string { return proto.CompactTextString(m) } func (*NodeUnpublishVolumeRequest) ProtoMessage() {} -func (*NodeUnpublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } +func (*NodeUnpublishVolumeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } func (m *NodeUnpublishVolumeRequest) GetVersion() *Version { if m != nil { @@ -3622,16 +3542,9 @@ func (m *NodeUnpublishVolumeRequest) GetVersion() *Version { return nil } -func (m *NodeUnpublishVolumeRequest) GetVolumeId() *VolumeID { - if m != nil { - return m.VolumeId - } - return nil -} - -func (m *NodeUnpublishVolumeRequest) GetVolumeMetadata() *VolumeMetadata { +func (m *NodeUnpublishVolumeRequest) GetVolumeHandle() *VolumeHandle { if m != nil { - return m.VolumeMetadata + return m.VolumeHandle } return nil } @@ -3662,7 +3575,7 @@ type NodeUnpublishVolumeResponse struct { func (m *NodeUnpublishVolumeResponse) Reset() { *m = NodeUnpublishVolumeResponse{} } func (m *NodeUnpublishVolumeResponse) String() string { return proto.CompactTextString(m) } func (*NodeUnpublishVolumeResponse) ProtoMessage() {} -func (*NodeUnpublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } +func (*NodeUnpublishVolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } type isNodeUnpublishVolumeResponse_Reply interface { isNodeUnpublishVolumeResponse_Reply() @@ -3780,7 +3693,7 @@ func (m *NodeUnpublishVolumeResponse_Result) Reset() { *m = NodeUnpublis func (m *NodeUnpublishVolumeResponse_Result) String() string { return proto.CompactTextString(m) } func (*NodeUnpublishVolumeResponse_Result) ProtoMessage() {} func (*NodeUnpublishVolumeResponse_Result) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{33, 0} + return fileDescriptor0, []int{32, 0} } // ////// @@ -3793,7 +3706,7 @@ type GetNodeIDRequest struct { func (m *GetNodeIDRequest) Reset() { *m = GetNodeIDRequest{} } func (m *GetNodeIDRequest) String() string { return proto.CompactTextString(m) } func (*GetNodeIDRequest) ProtoMessage() {} -func (*GetNodeIDRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } +func (*GetNodeIDRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } func (m *GetNodeIDRequest) GetVersion() *Version { if m != nil { @@ -3814,7 +3727,7 @@ type GetNodeIDResponse struct { func (m *GetNodeIDResponse) Reset() { *m = GetNodeIDResponse{} } func (m *GetNodeIDResponse) String() string { return proto.CompactTextString(m) } func (*GetNodeIDResponse) ProtoMessage() {} -func (*GetNodeIDResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } +func (*GetNodeIDResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } type isGetNodeIDResponse_Reply interface { isGetNodeIDResponse_Reply() @@ -3936,7 +3849,7 @@ type GetNodeIDResponse_Result struct { func (m *GetNodeIDResponse_Result) Reset() { *m = GetNodeIDResponse_Result{} } func (m *GetNodeIDResponse_Result) String() string { return proto.CompactTextString(m) } func (*GetNodeIDResponse_Result) ProtoMessage() {} -func (*GetNodeIDResponse_Result) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35, 0} } +func (*GetNodeIDResponse_Result) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34, 0} } func (m *GetNodeIDResponse_Result) GetNodeId() *NodeID { if m != nil { @@ -3955,7 +3868,7 @@ type ProbeNodeRequest struct { func (m *ProbeNodeRequest) Reset() { *m = ProbeNodeRequest{} } func (m *ProbeNodeRequest) String() string { return proto.CompactTextString(m) } func (*ProbeNodeRequest) ProtoMessage() {} -func (*ProbeNodeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } +func (*ProbeNodeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } func (m *ProbeNodeRequest) GetVersion() *Version { if m != nil { @@ -3976,7 +3889,7 @@ type ProbeNodeResponse struct { func (m *ProbeNodeResponse) Reset() { *m = ProbeNodeResponse{} } func (m *ProbeNodeResponse) String() string { return proto.CompactTextString(m) } func (*ProbeNodeResponse) ProtoMessage() {} -func (*ProbeNodeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } +func (*ProbeNodeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } type isProbeNodeResponse_Reply interface { isProbeNodeResponse_Reply() @@ -4093,7 +4006,7 @@ type ProbeNodeResponse_Result struct { func (m *ProbeNodeResponse_Result) Reset() { *m = ProbeNodeResponse_Result{} } func (m *ProbeNodeResponse_Result) String() string { return proto.CompactTextString(m) } func (*ProbeNodeResponse_Result) ProtoMessage() {} -func (*ProbeNodeResponse_Result) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37, 0} } +func (*ProbeNodeResponse_Result) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36, 0} } // ////// // ////// @@ -4105,7 +4018,7 @@ type NodeGetCapabilitiesRequest struct { func (m *NodeGetCapabilitiesRequest) Reset() { *m = NodeGetCapabilitiesRequest{} } func (m *NodeGetCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*NodeGetCapabilitiesRequest) ProtoMessage() {} -func (*NodeGetCapabilitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } +func (*NodeGetCapabilitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } func (m *NodeGetCapabilitiesRequest) GetVersion() *Version { if m != nil { @@ -4126,7 +4039,7 @@ type NodeGetCapabilitiesResponse struct { func (m *NodeGetCapabilitiesResponse) Reset() { *m = NodeGetCapabilitiesResponse{} } func (m *NodeGetCapabilitiesResponse) String() string { return proto.CompactTextString(m) } func (*NodeGetCapabilitiesResponse) ProtoMessage() {} -func (*NodeGetCapabilitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } +func (*NodeGetCapabilitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } type isNodeGetCapabilitiesResponse_Reply interface { isNodeGetCapabilitiesResponse_Reply() @@ -4247,7 +4160,7 @@ func (m *NodeGetCapabilitiesResponse_Result) Reset() { *m = NodeGetCapab func (m *NodeGetCapabilitiesResponse_Result) String() string { return proto.CompactTextString(m) } func (*NodeGetCapabilitiesResponse_Result) ProtoMessage() {} func (*NodeGetCapabilitiesResponse_Result) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{39, 0} + return fileDescriptor0, []int{38, 0} } func (m *NodeGetCapabilitiesResponse_Result) GetCapabilities() []*NodeServiceCapability { @@ -4267,7 +4180,7 @@ type NodeServiceCapability struct { func (m *NodeServiceCapability) Reset() { *m = NodeServiceCapability{} } func (m *NodeServiceCapability) String() string { return proto.CompactTextString(m) } func (*NodeServiceCapability) ProtoMessage() {} -func (*NodeServiceCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } +func (*NodeServiceCapability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } type isNodeServiceCapability_Type interface { isNodeServiceCapability_Type() @@ -4355,7 +4268,7 @@ type NodeServiceCapability_RPC struct { func (m *NodeServiceCapability_RPC) Reset() { *m = NodeServiceCapability_RPC{} } func (m *NodeServiceCapability_RPC) String() string { return proto.CompactTextString(m) } func (*NodeServiceCapability_RPC) ProtoMessage() {} -func (*NodeServiceCapability_RPC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40, 0} } +func (*NodeServiceCapability_RPC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39, 0} } func (m *NodeServiceCapability_RPC) GetType() NodeServiceCapability_RPC_Type { if m != nil { @@ -4386,7 +4299,7 @@ type Error struct { func (m *Error) Reset() { *m = Error{} } func (m *Error) String() string { return proto.CompactTextString(m) } func (*Error) ProtoMessage() {} -func (*Error) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } +func (*Error) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } type isError_Value interface { isError_Value() @@ -4756,7 +4669,7 @@ type Error_GeneralError struct { func (m *Error_GeneralError) Reset() { *m = Error_GeneralError{} } func (m *Error_GeneralError) String() string { return proto.CompactTextString(m) } func (*Error_GeneralError) ProtoMessage() {} -func (*Error_GeneralError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41, 0} } +func (*Error_GeneralError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40, 0} } func (m *Error_GeneralError) GetErrorCode() Error_GeneralError_GeneralErrorCode { if m != nil { @@ -4791,7 +4704,7 @@ type Error_CreateVolumeError struct { func (m *Error_CreateVolumeError) Reset() { *m = Error_CreateVolumeError{} } func (m *Error_CreateVolumeError) String() string { return proto.CompactTextString(m) } func (*Error_CreateVolumeError) ProtoMessage() {} -func (*Error_CreateVolumeError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41, 1} } +func (*Error_CreateVolumeError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40, 1} } func (m *Error_CreateVolumeError) GetErrorCode() Error_CreateVolumeError_CreateVolumeErrorCode { if m != nil { @@ -4819,7 +4732,7 @@ type Error_DeleteVolumeError struct { func (m *Error_DeleteVolumeError) Reset() { *m = Error_DeleteVolumeError{} } func (m *Error_DeleteVolumeError) String() string { return proto.CompactTextString(m) } func (*Error_DeleteVolumeError) ProtoMessage() {} -func (*Error_DeleteVolumeError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41, 2} } +func (*Error_DeleteVolumeError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40, 2} } func (m *Error_DeleteVolumeError) GetErrorCode() Error_DeleteVolumeError_DeleteVolumeErrorCode { if m != nil { @@ -4852,7 +4765,7 @@ func (m *Error_ControllerPublishVolumeError) Reset() { *m = Error_Contro func (m *Error_ControllerPublishVolumeError) String() string { return proto.CompactTextString(m) } func (*Error_ControllerPublishVolumeError) ProtoMessage() {} func (*Error_ControllerPublishVolumeError) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 3} + return fileDescriptor0, []int{40, 3} } func (m *Error_ControllerPublishVolumeError) GetErrorCode() Error_ControllerPublishVolumeError_ControllerPublishVolumeErrorCode { @@ -4886,7 +4799,7 @@ func (m *Error_ControllerUnpublishVolumeError) Reset() { *m = Error_Cont func (m *Error_ControllerUnpublishVolumeError) String() string { return proto.CompactTextString(m) } func (*Error_ControllerUnpublishVolumeError) ProtoMessage() {} func (*Error_ControllerUnpublishVolumeError) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 4} + return fileDescriptor0, []int{40, 4} } func (m *Error_ControllerUnpublishVolumeError) GetErrorCode() Error_ControllerUnpublishVolumeError_ControllerUnpublishVolumeErrorCode { @@ -4913,7 +4826,7 @@ func (m *Error_ValidateVolumeCapabilitiesError) Reset() { *m = Error_Val func (m *Error_ValidateVolumeCapabilitiesError) String() string { return proto.CompactTextString(m) } func (*Error_ValidateVolumeCapabilitiesError) ProtoMessage() {} func (*Error_ValidateVolumeCapabilitiesError) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 5} + return fileDescriptor0, []int{40, 5} } func (m *Error_ValidateVolumeCapabilitiesError) GetErrorCode() Error_ValidateVolumeCapabilitiesError_ValidateVolumeCapabilitiesErrorCode { @@ -4940,7 +4853,7 @@ func (m *Error_NodePublishVolumeError) Reset() { *m = Error_NodePublishV func (m *Error_NodePublishVolumeError) String() string { return proto.CompactTextString(m) } func (*Error_NodePublishVolumeError) ProtoMessage() {} func (*Error_NodePublishVolumeError) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 6} + return fileDescriptor0, []int{40, 6} } func (m *Error_NodePublishVolumeError) GetErrorCode() Error_NodePublishVolumeError_NodePublishVolumeErrorCode { @@ -4967,7 +4880,7 @@ func (m *Error_NodeUnpublishVolumeError) Reset() { *m = Error_NodeUnpubl func (m *Error_NodeUnpublishVolumeError) String() string { return proto.CompactTextString(m) } func (*Error_NodeUnpublishVolumeError) ProtoMessage() {} func (*Error_NodeUnpublishVolumeError) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{41, 7} + return fileDescriptor0, []int{40, 7} } func (m *Error_NodeUnpublishVolumeError) GetErrorCode() Error_NodeUnpublishVolumeError_NodeUnpublishVolumeErrorCode { @@ -4993,7 +4906,7 @@ type Error_ProbeNodeError struct { func (m *Error_ProbeNodeError) Reset() { *m = Error_ProbeNodeError{} } func (m *Error_ProbeNodeError) String() string { return proto.CompactTextString(m) } func (*Error_ProbeNodeError) ProtoMessage() {} -func (*Error_ProbeNodeError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41, 8} } +func (*Error_ProbeNodeError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40, 8} } func (m *Error_ProbeNodeError) GetErrorCode() Error_ProbeNodeError_ProbeNodeErrorCode { if m != nil { @@ -5018,7 +4931,7 @@ type Error_GetNodeIDError struct { func (m *Error_GetNodeIDError) Reset() { *m = Error_GetNodeIDError{} } func (m *Error_GetNodeIDError) String() string { return proto.CompactTextString(m) } func (*Error_GetNodeIDError) ProtoMessage() {} -func (*Error_GetNodeIDError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41, 9} } +func (*Error_GetNodeIDError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40, 9} } func (m *Error_GetNodeIDError) GetErrorCode() Error_GetNodeIDError_GetNodeIDErrorCode { if m != nil { @@ -5051,8 +4964,7 @@ func init() { proto.RegisterType((*VolumeCapability_AccessMode)(nil), "csi.VolumeCapability.AccessMode") proto.RegisterType((*CapacityRange)(nil), "csi.CapacityRange") proto.RegisterType((*VolumeInfo)(nil), "csi.VolumeInfo") - proto.RegisterType((*VolumeID)(nil), "csi.VolumeID") - proto.RegisterType((*VolumeMetadata)(nil), "csi.VolumeMetadata") + proto.RegisterType((*VolumeHandle)(nil), "csi.VolumeHandle") proto.RegisterType((*Credentials)(nil), "csi.Credentials") proto.RegisterType((*DeleteVolumeRequest)(nil), "csi.DeleteVolumeRequest") proto.RegisterType((*DeleteVolumeResponse)(nil), "csi.DeleteVolumeResponse") @@ -5722,209 +5634,207 @@ var _Node_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("csi.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 3260 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x1b, 0x4b, 0x8c, 0x23, 0x57, - 0xd1, 0xed, 0xcf, 0xd8, 0x2e, 0xaf, 0x67, 0xdb, 0x6f, 0x76, 0x76, 0x3c, 0xbd, 0xb3, 0x3b, 0xb3, - 0xbd, 0x9f, 0x6c, 0x12, 0xe2, 0x90, 0xe1, 0xb0, 0xd9, 0xdd, 0xfc, 0x3c, 0x76, 0x8f, 0xc7, 0xac, - 0xdd, 0x76, 0xda, 0xf6, 0x26, 0x0b, 0x22, 0xad, 0x5e, 0xbb, 0x67, 0xd6, 0xac, 0xc7, 0x76, 0xba, - 0x7b, 0xac, 0xf5, 0x39, 0x11, 0x12, 0x28, 0x07, 0x04, 0x87, 0x48, 0x1c, 0xe0, 0x10, 0x0e, 0x20, - 0x0e, 0x48, 0x20, 0x90, 0x10, 0xe2, 0x98, 0x23, 0x12, 0x5c, 0xc8, 0x89, 0x03, 0x12, 0x12, 0x84, - 0x13, 0x1c, 0x38, 0x70, 0x02, 0xf5, 0x7b, 0xaf, 0xdb, 0xdd, 0xed, 0x6e, 0xdb, 0xf3, 0x89, 0x94, - 0x70, 0x73, 0x57, 0xbd, 0xfa, 0xbc, 0xaa, 0x7a, 0x55, 0xf5, 0x3e, 0x86, 0x64, 0x5b, 0xef, 0xe6, - 0x86, 0xda, 0xc0, 0x18, 0xa0, 0x48, 0x5b, 0xef, 0xf2, 0x97, 0xe1, 0x52, 0x49, 0x35, 0x1a, 0x47, - 0xc3, 0xe1, 0x40, 0x33, 0xd4, 0xce, 0x03, 0x55, 0xd3, 0xbb, 0x83, 0xbe, 0x2e, 0xa9, 0xef, 0x1e, - 0xa9, 0xba, 0xc1, 0xff, 0x89, 0x81, 0x0d, 0x7f, 0xbc, 0x3e, 0x1c, 0xf4, 0x75, 0x15, 0xed, 0xc0, - 0x92, 0xa6, 0xea, 0x47, 0x3d, 0x23, 0xcb, 0x6c, 0x31, 0xb7, 0x52, 0xdb, 0xb7, 0x72, 0xa6, 0x80, - 0x59, 0x24, 0x39, 0x09, 0x8f, 0xdf, 0x0b, 0x49, 0x94, 0x12, 0xf1, 0x10, 0x53, 0x35, 0x6d, 0xa0, - 0x65, 0xc3, 0x98, 0x05, 0x60, 0x16, 0x82, 0x09, 0xd9, 0x0b, 0x49, 0x04, 0xc5, 0x09, 0xb0, 0x44, - 0xe8, 0xd0, 0x3d, 0x40, 0xba, 0xc5, 0x5b, 0x1e, 0x51, 0xe6, 0x59, 0x66, 0x2b, 0x72, 0x2b, 0xb5, - 0x7d, 0x0e, 0x93, 0x52, 0x89, 0x52, 0x46, 0xf7, 0xea, 0xb0, 0x13, 0x87, 0x98, 0xa6, 0x0e, 0x7b, - 0x63, 0xfe, 0x3e, 0xc4, 0x29, 0x10, 0x5d, 0x80, 0xd8, 0xa1, 0xf2, 0xcd, 0x81, 0x86, 0x67, 0x90, - 0x96, 0xc8, 0x07, 0x86, 0x76, 0xfb, 0x54, 0x29, 0x13, 0x6a, 0x7e, 0x98, 0xd0, 0xa1, 0x62, 0xb4, - 0x1f, 0x67, 0x23, 0x04, 0x8a, 0x3f, 0xf8, 0xd7, 0xe0, 0x42, 0x49, 0x35, 0xea, 0xbd, 0xa3, 0x83, - 0x6e, 0xbf, 0xdc, 0xdf, 0x1f, 0x50, 0xeb, 0xa1, 0x9b, 0x10, 0xa7, 0x0a, 0x52, 0xeb, 0xb8, 0xf5, - 0xb3, 0x90, 0xfc, 0x1f, 0xc3, 0xb0, 0xea, 0x61, 0x40, 0xcd, 0x7b, 0xcf, 0x63, 0xde, 0xab, 0x96, - 0x79, 0xa7, 0xc7, 0x9e, 0xcc, 0xae, 0xbf, 0x67, 0x6c, 0xc3, 0x22, 0x88, 0xf6, 0x95, 0x43, 0x15, - 0x4b, 0x4a, 0x4a, 0xf8, 0x37, 0xba, 0x01, 0xcb, 0x23, 0xb5, 0xdf, 0x19, 0x68, 0x96, 0xa5, 0x31, - 0xaf, 0xa4, 0x94, 0x26, 0x50, 0xcb, 0x84, 0xf7, 0x21, 0x71, 0xa8, 0xf4, 0xbb, 0xfb, 0xaa, 0x6e, - 0x64, 0x23, 0xd8, 0x13, 0x2f, 0xce, 0x55, 0x34, 0x57, 0xa5, 0x14, 0x42, 0xdf, 0xd0, 0xc6, 0x92, - 0xcd, 0x80, 0xbb, 0x07, 0x69, 0x17, 0x0a, 0xb1, 0x10, 0x79, 0xa2, 0x8e, 0xa9, 0x5e, 0xe6, 0x4f, - 0xd3, 0x0d, 0x23, 0xa5, 0x77, 0xa4, 0x52, 0x6d, 0xc8, 0xc7, 0xdd, 0xf0, 0xcb, 0xcc, 0xc4, 0xc1, - 0x3f, 0x88, 0xc0, 0x4a, 0x41, 0x53, 0x15, 0x43, 0x7d, 0x30, 0xe8, 0x1d, 0x1d, 0xaa, 0xc7, 0xf4, - 0x89, 0x6d, 0x8d, 0xb0, 0xc3, 0x1a, 0x77, 0x60, 0xb9, 0xad, 0x0c, 0x95, 0x76, 0xd7, 0x18, 0xcb, - 0x9a, 0xd2, 0x3f, 0x50, 0x71, 0x18, 0xa4, 0xb6, 0x11, 0x66, 0x51, 0xa0, 0x28, 0xc9, 0xc4, 0x48, - 0xe9, 0xb6, 0xf3, 0x13, 0xed, 0xc2, 0xca, 0x08, 0xeb, 0x21, 0x9b, 0xf0, 0x47, 0xdd, 0x5e, 0xd7, - 0xe8, 0xaa, 0x7a, 0x36, 0x8a, 0x8d, 0xb5, 0x4a, 0x54, 0xc0, 0xf8, 0x82, 0x85, 0x1e, 0x4b, 0x68, - 0xe4, 0x86, 0x74, 0x55, 0x1d, 0xed, 0x01, 0x0c, 0x15, 0x4d, 0x39, 0x54, 0x0d, 0x55, 0xd3, 0xb3, - 0x31, 0x4c, 0x4e, 0xd6, 0x9c, 0xcf, 0x64, 0x73, 0x75, 0x7b, 0x28, 0x31, 0xb2, 0x83, 0x16, 0xdd, - 0x03, 0xf6, 0x48, 0x57, 0x35, 0xb9, 0xad, 0xa9, 0x1d, 0xb5, 0x6f, 0x74, 0x95, 0x9e, 0x9e, 0x5d, - 0xc2, 0xd3, 0x61, 0x2d, 0x7e, 0x16, 0x5c, 0x3a, 0x6f, 0x8e, 0x74, 0x00, 0xb8, 0x57, 0xe1, 0xbc, - 0x87, 0xf7, 0x71, 0xbc, 0xc4, 0xff, 0x96, 0x81, 0x0b, 0x6e, 0x7d, 0x69, 0xbc, 0xdf, 0xf5, 0xc4, - 0xfb, 0x96, 0xcf, 0xd4, 0x4e, 0x13, 0xee, 0x77, 0xed, 0x68, 0xff, 0x32, 0xa4, 0xa8, 0x43, 0xba, - 0xfd, 0xfd, 0x01, 0x15, 0x77, 0xde, 0xe1, 0x08, 0x1c, 0xb2, 0x30, 0xb2, 0x7f, 0x4f, 0x42, 0xeb, - 0x87, 0x51, 0x60, 0xbd, 0xce, 0x42, 0x77, 0x20, 0xf6, 0xa8, 0x37, 0x68, 0x3f, 0x71, 0x2d, 0x54, - 0xef, 0xa8, 0xdc, 0x8e, 0x39, 0x84, 0x40, 0x4d, 0xa5, 0x30, 0x85, 0x49, 0x7a, 0x38, 0x38, 0xea, - 0x1b, 0x54, 0xf1, 0x00, 0xd2, 0xaa, 0x39, 0x64, 0x42, 0x8a, 0x29, 0x50, 0x1e, 0x52, 0x4a, 0xbb, - 0xad, 0xea, 0xba, 0x7c, 0x38, 0xe8, 0x58, 0xe1, 0xb8, 0xe5, 0xcf, 0x20, 0x8f, 0x07, 0x56, 0x07, - 0x1d, 0x55, 0x02, 0xc5, 0xfe, 0xcd, 0xa5, 0x21, 0xe5, 0xd0, 0x8a, 0x2b, 0x41, 0xca, 0x21, 0x09, - 0xad, 0x41, 0x7c, 0x5f, 0x97, 0x8d, 0xf1, 0xd0, 0xca, 0x0b, 0x4b, 0xfb, 0x7a, 0x73, 0x3c, 0x54, - 0xd1, 0x26, 0xa4, 0xb0, 0x0a, 0xf2, 0x7e, 0x4f, 0x39, 0xd0, 0xb3, 0xe1, 0xad, 0xc8, 0xad, 0xa4, - 0x04, 0x18, 0xb4, 0x6b, 0x42, 0xb8, 0x4f, 0x19, 0x80, 0x89, 0x48, 0x74, 0x07, 0xa2, 0x58, 0x45, - 0x93, 0xcb, 0xf2, 0xf6, 0x8d, 0x79, 0x2a, 0xe6, 0xb0, 0x9e, 0x98, 0x84, 0xff, 0x11, 0x03, 0x51, - 0xcc, 0x23, 0x05, 0xf1, 0x96, 0x78, 0x5f, 0xac, 0xbd, 0x25, 0xb2, 0x21, 0x74, 0x11, 0x50, 0xa3, - 0x2c, 0x96, 0x2a, 0x82, 0x2c, 0xd6, 0x8a, 0x82, 0xfc, 0x96, 0x54, 0x6e, 0x0a, 0x12, 0xcb, 0xa0, - 0x4b, 0xb0, 0xe6, 0x84, 0x4b, 0x42, 0xbe, 0x28, 0x48, 0x72, 0x4d, 0xac, 0x3c, 0x64, 0xc3, 0x88, - 0x83, 0x8b, 0xd5, 0x56, 0xa5, 0x59, 0x9e, 0xc6, 0x45, 0xd0, 0x06, 0x64, 0x1d, 0x38, 0xca, 0x83, - 0xb2, 0x8d, 0x9a, 0x6c, 0x1d, 0x58, 0xf2, 0x93, 0x22, 0x63, 0x3b, 0x69, 0xdb, 0x0d, 0xa6, 0xa5, - 0xf8, 0xb7, 0x20, 0xed, 0x4a, 0x06, 0x66, 0x1a, 0xd5, 0xd4, 0x77, 0x8f, 0xba, 0x9a, 0xda, 0x91, - 0x1f, 0x8d, 0x0d, 0x55, 0xc7, 0x66, 0x88, 0x4a, 0x69, 0x0b, 0xba, 0x63, 0x02, 0x4d, 0x9b, 0xf6, - 0xba, 0x87, 0x5d, 0x83, 0x8e, 0x09, 0xe3, 0x31, 0x80, 0x41, 0x78, 0x00, 0xff, 0x1e, 0x03, 0x30, - 0x89, 0x4e, 0x93, 0xad, 0x9d, 0x8f, 0x5c, 0x6c, 0x2d, 0x28, 0x61, 0x7b, 0x19, 0xc2, 0xdd, 0x4e, - 0x36, 0x8a, 0x63, 0x23, 0xed, 0x8c, 0xf0, 0xa2, 0x14, 0xee, 0x76, 0xd0, 0x8b, 0x90, 0x38, 0x54, - 0x0d, 0xa5, 0xa3, 0x18, 0x4a, 0x36, 0x86, 0x07, 0xad, 0x38, 0x06, 0x55, 0x29, 0x4a, 0xb2, 0x07, - 0xf1, 0x4f, 0x21, 0x61, 0x31, 0x40, 0x2f, 0xc1, 0x12, 0x5e, 0xd6, 0x56, 0x05, 0x5e, 0x77, 0xf1, - 0xcf, 0x3d, 0xc0, 0x38, 0x92, 0x7c, 0xe8, 0x40, 0xee, 0x0e, 0xa4, 0x1c, 0xe0, 0x63, 0xe5, 0x8d, - 0xf7, 0x19, 0x58, 0x76, 0xab, 0x85, 0x6e, 0x7b, 0x14, 0xd8, 0xf4, 0xd1, 0xfd, 0xac, 0xd5, 0x18, - 0x41, 0xca, 0x91, 0x0c, 0x51, 0x0e, 0xa2, 0xd8, 0x78, 0x44, 0x01, 0xce, 0x9b, 0x3d, 0x73, 0x45, - 0xc5, 0x50, 0x88, 0x6c, 0x3c, 0x8e, 0xbb, 0x0d, 0x49, 0x1b, 0x74, 0x2c, 0xb9, 0x7f, 0x65, 0x60, - 0xa5, 0xa8, 0xf6, 0xd4, 0x93, 0xd6, 0xb4, 0xe7, 0x20, 0x69, 0xe5, 0xbc, 0x0e, 0x4d, 0x36, 0x9e, - 0x78, 0x48, 0xd0, 0x7c, 0xd7, 0x41, 0xaf, 0xc0, 0x79, 0x3a, 0xd6, 0x0e, 0x8e, 0x48, 0x70, 0x70, - 0x2c, 0x8f, 0xdc, 0x5e, 0xf1, 0x2b, 0x2e, 0xd1, 0x05, 0x8b, 0x0b, 0xff, 0x6d, 0x06, 0x2e, 0xb8, - 0xa7, 0x39, 0xb3, 0x3a, 0xf8, 0x0d, 0x3d, 0x59, 0x75, 0x48, 0x58, 0xd5, 0x61, 0x92, 0xeb, 0xff, - 0x1d, 0x86, 0x2b, 0x85, 0x41, 0xdf, 0xd0, 0x06, 0xbd, 0x9e, 0xaa, 0xd5, 0x8f, 0x1e, 0xf5, 0xba, - 0xfa, 0xe3, 0xcf, 0xbb, 0xf5, 0xaf, 0x43, 0xbc, 0x3f, 0xe8, 0x60, 0x39, 0xc4, 0xe8, 0x29, 0x4c, - 0x25, 0x0e, 0x3a, 0xa6, 0x94, 0x25, 0x13, 0x57, 0xee, 0xa0, 0x1d, 0xc8, 0x78, 0x5b, 0x92, 0x31, - 0xed, 0x00, 0x02, 0x1a, 0x12, 0x76, 0xe4, 0xad, 0x7a, 0x1c, 0x24, 0x34, 0x55, 0xe9, 0x0c, 0xfa, - 0xbd, 0x31, 0xce, 0x1d, 0x09, 0xc9, 0xfe, 0xf6, 0x8d, 0x81, 0xf8, 0xa2, 0x31, 0xf0, 0x37, 0x06, - 0x36, 0x03, 0xed, 0x4e, 0xc3, 0x41, 0xf0, 0x84, 0xc3, 0xf3, 0x84, 0xed, 0x6c, 0xaa, 0x93, 0x45, - 0x46, 0xdd, 0xee, 0x1b, 0x76, 0x61, 0x65, 0x48, 0xf8, 0xca, 0xd3, 0xfd, 0xc3, 0x45, 0x4c, 0xeb, - 0x92, 0x8b, 0xdb, 0x88, 0xcc, 0xd0, 0x0b, 0x9a, 0x44, 0x98, 0x01, 0x4b, 0xc4, 0x31, 0xe8, 0x45, - 0x4f, 0x2a, 0x5b, 0x73, 0x78, 0xed, 0xac, 0x53, 0xd8, 0x77, 0x18, 0xc8, 0x4c, 0xe9, 0x69, 0x2e, - 0x30, 0x97, 0x06, 0xbc, 0xff, 0x7c, 0xce, 0x5a, 0x99, 0x0f, 0xc3, 0xb0, 0x35, 0x71, 0x5b, 0xab, - 0x3f, 0xfc, 0x7f, 0x5a, 0x66, 0x7e, 0xcb, 0x20, 0xb6, 0xe8, 0x32, 0xf8, 0x88, 0x81, 0xab, 0x33, - 0x2c, 0x43, 0x17, 0x42, 0xc9, 0xb3, 0x10, 0x5e, 0xf0, 0x2c, 0x84, 0x00, 0xba, 0x33, 0x4b, 0x92, - 0x1f, 0x33, 0x70, 0xf5, 0x81, 0xd2, 0xeb, 0x76, 0xec, 0x2e, 0xdd, 0xb9, 0x67, 0x39, 0xae, 0x03, - 0x3d, 0x9d, 0x79, 0x78, 0x6e, 0x67, 0x1e, 0xb4, 0xb9, 0x8a, 0x1c, 0x73, 0x73, 0xc5, 0xff, 0x99, - 0x01, 0x7e, 0xd6, 0x3c, 0xa8, 0xb9, 0xf7, 0x3c, 0xe6, 0xce, 0x11, 0x09, 0x73, 0x09, 0x4f, 0x66, - 0xef, 0x37, 0xec, 0xd4, 0xb3, 0x01, 0x49, 0xfb, 0x44, 0x03, 0x8b, 0x4e, 0x48, 0x13, 0x00, 0xca, - 0x42, 0xfc, 0x50, 0xd5, 0x75, 0xe5, 0xc0, 0x5a, 0x60, 0xd6, 0xe7, 0xc4, 0x4f, 0xef, 0x33, 0x80, - 0x2a, 0x5d, 0x9d, 0xf6, 0xf6, 0xc7, 0x76, 0x8c, 0xd9, 0xf2, 0x2b, 0x4f, 0x65, 0xb5, 0x6f, 0x68, - 0x5d, 0xda, 0x9e, 0xa6, 0x25, 0x38, 0x54, 0x9e, 0x0a, 0x04, 0x62, 0xf6, 0xa3, 0xba, 0xa1, 0x68, - 0x46, 0xb7, 0x7f, 0x20, 0x1b, 0x83, 0x27, 0x6a, 0x1f, 0xaf, 0xa6, 0xa4, 0x94, 0xb6, 0xa0, 0x4d, - 0x13, 0xc8, 0x7f, 0x14, 0x86, 0x15, 0x97, 0x1a, 0xd4, 0xae, 0x77, 0x3c, 0x76, 0x25, 0xad, 0x9c, - 0xcf, 0xc8, 0x93, 0x19, 0xf2, 0xa3, 0xc9, 0x51, 0xc7, 0xeb, 0x10, 0xb7, 0x66, 0x41, 0x12, 0xdd, - 0x8d, 0x39, 0xa2, 0x72, 0x24, 0xd7, 0x59, 0x54, 0xe8, 0x32, 0x40, 0x5f, 0x7d, 0x6a, 0xd0, 0x59, - 0x12, 0x7b, 0x27, 0x4d, 0x08, 0x9e, 0x21, 0x77, 0x07, 0x62, 0x24, 0x0b, 0x9e, 0x62, 0x97, 0xf9, - 0x41, 0x18, 0x50, 0x49, 0x35, 0xec, 0x8d, 0xc4, 0x31, 0x9d, 0x15, 0xb0, 0x26, 0xc2, 0xc7, 0x3d, - 0x70, 0x28, 0xb9, 0x0e, 0x1c, 0xc8, 0x92, 0x7a, 0xc6, 0x3a, 0xdc, 0xf1, 0x28, 0x37, 0xeb, 0xbc, - 0xe1, 0xb4, 0x47, 0x06, 0xbf, 0x66, 0x60, 0xc5, 0x25, 0x71, 0x66, 0xd0, 0xf8, 0x8c, 0x3c, 0x59, - 0xd0, 0xdc, 0xb6, 0x63, 0xe6, 0x05, 0x40, 0xca, 0x48, 0xe9, 0xf6, 0x94, 0x47, 0x3d, 0x62, 0x53, - 0x93, 0x39, 0xdd, 0x70, 0x65, 0x6c, 0x8c, 0x25, 0x75, 0xe2, 0xc7, 0xaf, 0x3a, 0x6b, 0x1b, 0xd5, - 0xeb, 0x84, 0xa9, 0x91, 0xff, 0xd4, 0x55, 0x0e, 0xa6, 0x98, 0x2d, 0x58, 0x0e, 0x02, 0xe8, 0x4e, - 0x66, 0x20, 0xd1, 0x36, 0x50, 0x11, 0xce, 0xf9, 0x84, 0xda, 0x96, 0x47, 0x78, 0x43, 0xd5, 0x46, - 0xdd, 0xb6, 0x33, 0xea, 0x5c, 0x54, 0x13, 0xbb, 0x7d, 0x18, 0x86, 0x4b, 0x33, 0xc8, 0xd0, 0xcb, - 0x10, 0xd1, 0x86, 0x6d, 0x3a, 0xc5, 0xeb, 0xf3, 0xa4, 0xe4, 0xa4, 0x7a, 0x61, 0x2f, 0x24, 0x99, - 0x24, 0xdc, 0xaf, 0x18, 0x88, 0x48, 0xf5, 0x02, 0x7a, 0x15, 0xa2, 0xf6, 0xc1, 0xc6, 0xf2, 0xf6, - 0xb3, 0x8b, 0xb0, 0xc8, 0x35, 0xc7, 0x43, 0x55, 0xc2, 0x64, 0xfc, 0x00, 0xa2, 0xf8, 0x24, 0xc4, - 0x75, 0x2a, 0x91, 0x85, 0x0b, 0x05, 0x49, 0xc8, 0x37, 0x05, 0xb9, 0x28, 0x54, 0x84, 0xa6, 0x20, - 0x3f, 0xa8, 0x55, 0x5a, 0x55, 0x81, 0x65, 0xd0, 0x06, 0x64, 0xeb, 0xad, 0x9d, 0x4a, 0xb9, 0xb1, - 0x27, 0xb7, 0x44, 0xeb, 0x17, 0xc5, 0x86, 0x11, 0x0b, 0xe7, 0x2a, 0xe5, 0x46, 0x93, 0x02, 0x1a, - 0x6c, 0xc4, 0x84, 0x94, 0x84, 0xa6, 0x5c, 0xc8, 0xd7, 0xf3, 0x85, 0x72, 0xf3, 0x21, 0x1b, 0xdd, - 0x59, 0x22, 0xfa, 0xf2, 0xbf, 0x88, 0x40, 0xd6, 0x6c, 0x32, 0xbe, 0x20, 0xbb, 0x91, 0x80, 0x8e, - 0x39, 0x7a, 0xcc, 0x8e, 0xd9, 0x2c, 0x3f, 0x86, 0xa2, 0x1d, 0xa8, 0x86, 0x3c, 0x54, 0x8c, 0xc7, - 0xb8, 0x87, 0x4a, 0x4a, 0x40, 0x40, 0x75, 0xc5, 0x78, 0x7c, 0xe6, 0x1b, 0x9a, 0xf8, 0x02, 0x1b, - 0x9a, 0xc4, 0xa2, 0x9d, 0xdc, 0xf7, 0x19, 0x58, 0xf7, 0x71, 0x1a, 0x5d, 0xb2, 0xaf, 0x7b, 0x96, - 0xec, 0x0d, 0xbb, 0x93, 0xac, 0x7f, 0xa6, 0x9d, 0xdb, 0x07, 0x61, 0xe0, 0x4c, 0x29, 0x5f, 0x98, - 0x9e, 0xdb, 0x13, 0x04, 0xd1, 0xa9, 0x20, 0x38, 0x55, 0xbb, 0xfd, 0x21, 0x03, 0x97, 0x7c, 0xcd, - 0x41, 0xdd, 0x94, 0xf7, 0xb8, 0xe9, 0x19, 0xdb, 0x4d, 0x9f, 0x75, 0x8b, 0x7d, 0x17, 0xd8, 0x92, - 0x6a, 0xd0, 0xad, 0xc5, 0x31, 0xab, 0xc6, 0x4f, 0x19, 0xc8, 0x38, 0x88, 0xe9, 0x5c, 0x6e, 0x7b, - 0xe6, 0x72, 0xd9, 0x2a, 0x9c, 0xee, 0x71, 0x27, 0x9b, 0x41, 0xce, 0xae, 0x0a, 0x8e, 0x4d, 0x12, - 0x13, 0xb8, 0x49, 0x72, 0xcd, 0xb3, 0xae, 0x0d, 0x1e, 0xa9, 0x26, 0xfe, 0xb8, 0xf3, 0x7c, 0xcf, - 0xdc, 0xd3, 0x4e, 0x88, 0x67, 0xce, 0x73, 0x6a, 0xdc, 0x99, 0x79, 0xaa, 0x48, 0x56, 0xd4, 0x29, - 0x2b, 0xfd, 0x27, 0x34, 0x12, 0x83, 0x6a, 0x7c, 0x70, 0x24, 0x9e, 0x69, 0x75, 0xdf, 0xb3, 0xfd, - 0xf8, 0x9a, 0x6f, 0x75, 0xe7, 0x6c, 0xb1, 0x0b, 0xd7, 0xf5, 0x9f, 0x30, 0xb0, 0xea, 0x4b, 0x80, - 0xb6, 0x9d, 0x15, 0xfd, 0x4a, 0x30, 0x67, 0x67, 0x2d, 0x6f, 0x90, 0x52, 0x7e, 0xdb, 0x55, 0xca, - 0xaf, 0xcd, 0xa6, 0x75, 0x16, 0xf1, 0x15, 0x9f, 0x22, 0x6e, 0x17, 0xda, 0xff, 0x5e, 0x83, 0x18, - 0x36, 0x08, 0x7a, 0x0d, 0xd2, 0x07, 0x6a, 0x5f, 0xd5, 0x94, 0x9e, 0x4c, 0x6c, 0x46, 0x94, 0x5c, - 0x9b, 0xd8, 0x2c, 0x57, 0x22, 0x78, 0xcb, 0x80, 0xe7, 0x0e, 0x1c, 0xdf, 0x48, 0x84, 0x95, 0x36, - 0xbe, 0xc4, 0xb2, 0x4a, 0xa0, 0xd3, 0xf2, 0x1b, 0x0e, 0x2e, 0xce, 0xab, 0x2e, 0x8b, 0x55, 0xa6, - 0xed, 0x05, 0x9a, 0xfc, 0x3a, 0xf8, 0xd8, 0xd3, 0xcd, 0x2f, 0x32, 0xc5, 0xcf, 0x79, 0x38, 0x6a, - 0xf3, 0xeb, 0x78, 0x81, 0x68, 0x08, 0x9b, 0x6d, 0xbb, 0xf3, 0x91, 0x3d, 0xe5, 0x9a, 0xf0, 0x8e, - 0x3a, 0xe2, 0x8c, 0xea, 0xea, 0x7f, 0xd2, 0x66, 0x89, 0xd9, 0x68, 0xcf, 0xc0, 0xa3, 0x11, 0x5c, - 0x75, 0x48, 0x3c, 0xea, 0xfb, 0xca, 0x24, 0x89, 0xfb, 0x59, 0x5f, 0x99, 0x9e, 0x8c, 0x6b, 0x49, - 0xbd, 0xd2, 0x9e, 0x39, 0x02, 0x8d, 0x81, 0x1f, 0xd1, 0x9d, 0xba, 0xec, 0xb3, 0x41, 0xa2, 0x82, - 0x49, 0xd7, 0xf0, 0x9c, 0x43, 0x70, 0xf0, 0xf6, 0xde, 0x92, 0xbc, 0x39, 0x9a, 0x3d, 0x04, 0xbd, - 0x03, 0xeb, 0x38, 0x15, 0xfa, 0x4e, 0x35, 0xee, 0xb8, 0xfb, 0x23, 0x12, 0xa7, 0xaa, 0xbf, 0x25, - 0xe8, 0x62, 0xdf, 0x17, 0x83, 0x3a, 0x70, 0x09, 0xf3, 0x0f, 0x30, 0x26, 0x69, 0x55, 0xae, 0x79, - 0x24, 0x04, 0x98, 0x31, 0xdb, 0x0f, 0xc0, 0x21, 0x01, 0xd8, 0xa1, 0x99, 0x3c, 0x65, 0x2c, 0x8b, - 0xb0, 0x4e, 0x62, 0xd6, 0xeb, 0x0e, 0xd6, 0x76, 0x7e, 0xb5, 0x18, 0x2e, 0x0f, 0x5d, 0x10, 0xb4, - 0x0b, 0x19, 0xb3, 0x8a, 0xd3, 0xda, 0x40, 0xf9, 0xc0, 0x14, 0x1f, 0xbb, 0x1e, 0xd9, 0x7c, 0x0e, - 0x28, 0xa4, 0x83, 0x21, 0xdc, 0x8f, 0xc3, 0x70, 0xce, 0xb9, 0xf4, 0xcc, 0x0d, 0x2b, 0x66, 0x26, - 0xb7, 0x27, 0xd7, 0x8d, 0xb7, 0x02, 0xd6, 0xa9, 0xeb, 0xa3, 0x60, 0x56, 0x83, 0xa4, 0x6a, 0xfd, - 0x44, 0x2f, 0xc1, 0x6a, 0x5b, 0xc1, 0xd1, 0x79, 0x78, 0xa4, 0x9b, 0x9a, 0x1a, 0xb2, 0xa6, 0x1a, - 0xda, 0x18, 0xaf, 0xda, 0x84, 0x84, 0x08, 0xb2, 0x7a, 0xa4, 0x1b, 0xe2, 0xc0, 0x90, 0x4c, 0x0c, - 0x7a, 0x1e, 0x32, 0x44, 0x76, 0x47, 0xd5, 0xdb, 0x5a, 0x77, 0x68, 0x98, 0x79, 0x9e, 0x9c, 0x81, - 0xb0, 0x18, 0x51, 0x9c, 0xc0, 0xf9, 0x27, 0x66, 0x49, 0x77, 0x8b, 0x77, 0xef, 0x25, 0xd2, 0x90, - 0x6c, 0x89, 0x45, 0x61, 0xb7, 0x2c, 0x0a, 0x45, 0x96, 0x41, 0x9b, 0x70, 0xa9, 0x25, 0x36, 0x5a, - 0xf5, 0x7a, 0x4d, 0x6a, 0x0a, 0x45, 0x59, 0x12, 0xde, 0x6c, 0x09, 0xe6, 0x8e, 0x41, 0x90, 0x1a, - 0xe5, 0x9a, 0x48, 0x2f, 0x37, 0xcb, 0x8d, 0x46, 0x59, 0x2c, 0x61, 0x64, 0x59, 0x12, 0x8a, 0xf2, - 0x6e, 0x59, 0xa8, 0x14, 0xd9, 0x08, 0xf7, 0xad, 0x08, 0x64, 0xa6, 0x72, 0x0b, 0x7a, 0xd3, 0xc7, - 0x56, 0xdb, 0xb3, 0xb2, 0xd1, 0x34, 0xc4, 0x6b, 0x35, 0x5f, 0x13, 0x84, 0x03, 0x4c, 0xf0, 0x4f, - 0x06, 0x56, 0x7d, 0x39, 0x4e, 0x6f, 0xaa, 0xf2, 0x95, 0x8a, 0x2c, 0xd6, 0x9a, 0x72, 0xb9, 0x5a, - 0xaf, 0x08, 0x55, 0x41, 0x6c, 0x62, 0x9b, 0x6c, 0xc1, 0x46, 0xad, 0x2e, 0x48, 0xf9, 0x66, 0xb9, - 0x26, 0xca, 0x75, 0x41, 0x2c, 0x9a, 0x93, 0xdf, 0xad, 0x49, 0x93, 0x8d, 0xd5, 0x1a, 0xac, 0x94, - 0xc5, 0x07, 0xf9, 0x4a, 0xb9, 0x48, 0x61, 0xb2, 0x98, 0xaf, 0x0a, 0x6c, 0x04, 0x5d, 0x01, 0xce, - 0x69, 0x4e, 0x6b, 0x9f, 0x25, 0x4b, 0x79, 0xb1, 0x24, 0xb0, 0x51, 0xb4, 0x0e, 0xab, 0x94, 0x20, - 0x5f, 0x91, 0x84, 0x7c, 0xf1, 0xa1, 0x2c, 0xbc, 0x5d, 0x6e, 0x34, 0x1b, 0x6c, 0x0c, 0x5d, 0x86, - 0x75, 0x27, 0x69, 0x3d, 0x2f, 0xe5, 0xab, 0x42, 0x53, 0x90, 0xe4, 0xfb, 0xc2, 0x43, 0x76, 0x09, - 0x5d, 0x82, 0x35, 0x4b, 0xe4, 0x04, 0xf5, 0x20, 0x5f, 0x69, 0x09, 0x6c, 0x9c, 0xfb, 0x38, 0x0c, - 0x99, 0xa9, 0xa4, 0x3c, 0xd7, 0x11, 0x53, 0x14, 0xd3, 0x90, 0x53, 0x39, 0xe2, 0xe7, 0x0c, 0xac, - 0xfa, 0x72, 0x3c, 0x3b, 0x47, 0xac, 0x42, 0xc6, 0xe3, 0x88, 0x72, 0x91, 0x8d, 0x38, 0x8d, 0x45, - 0xc1, 0x55, 0xa1, 0x99, 0x2f, 0xe6, 0x9b, 0x79, 0x97, 0x0f, 0x8a, 0x35, 0xa1, 0x81, 0xc5, 0x62, - 0x27, 0xb0, 0x31, 0xee, 0x0f, 0x51, 0xd8, 0x98, 0x55, 0x80, 0xd0, 0x81, 0x8f, 0x49, 0xf7, 0x16, - 0xac, 0x5e, 0x33, 0x91, 0xa7, 0x31, 0x34, 0xba, 0x09, 0x09, 0x9a, 0xf2, 0xac, 0xc3, 0x34, 0x57, - 0x3f, 0x1c, 0x27, 0xfd, 0xb0, 0xce, 0xff, 0xcb, 0x75, 0x25, 0xe2, 0xaf, 0xc4, 0xe7, 0xd5, 0x37, - 0x68, 0x03, 0xb2, 0x9e, 0xa5, 0x43, 0xcf, 0x3b, 0x84, 0x22, 0xbb, 0x64, 0xae, 0x48, 0xfc, 0x86, - 0xc2, 0x43, 0x16, 0x47, 0x17, 0x01, 0x55, 0xf3, 0x6f, 0xcb, 0xf9, 0x66, 0x33, 0x5f, 0xd8, 0x13, - 0x8a, 0xf8, 0xa5, 0x45, 0x83, 0x4d, 0x98, 0x6a, 0x38, 0x97, 0x5b, 0xb5, 0xd6, 0x12, 0x9b, 0xf2, - 0x6e, 0x25, 0x5f, 0x6a, 0xb0, 0xe0, 0x45, 0x52, 0xb9, 0xcd, 0x87, 0x75, 0x81, 0x4d, 0x99, 0xa2, - 0x9c, 0xc8, 0xdd, 0x06, 0x41, 0x9c, 0x43, 0x2b, 0x70, 0xde, 0x9a, 0x19, 0xd6, 0xa5, 0x5c, 0x64, - 0x93, 0xdc, 0xdf, 0x23, 0xce, 0xbb, 0x5e, 0xdf, 0xe2, 0xf7, 0xc4, 0x27, 0xa8, 0x2a, 0x0b, 0xb7, - 0x27, 0x73, 0xd0, 0xa7, 0x5a, 0xc1, 0x3f, 0x0b, 0x03, 0x3f, 0x9f, 0xfd, 0xe7, 0x36, 0x64, 0x02, - 0x82, 0x62, 0xc9, 0xcf, 0x53, 0x71, 0xf4, 0x2c, 0xdc, 0xb0, 0x92, 0x79, 0xad, 0x39, 0x09, 0x98, - 0x66, 0x4d, 0x6e, 0xd4, 0x85, 0x42, 0x79, 0xb7, 0x4c, 0xa3, 0x87, 0x4d, 0xa0, 0x0b, 0xc0, 0x52, - 0x3a, 0xbb, 0x28, 0xb2, 0x49, 0xee, 0x3f, 0x61, 0xd8, 0x9c, 0xd3, 0xd1, 0xa1, 0x43, 0x1f, 0x5f, - 0x8b, 0x8b, 0x77, 0x84, 0xf3, 0xf0, 0xa7, 0xf2, 0xf6, 0x6f, 0x18, 0xb8, 0xb6, 0x00, 0x7f, 0xb7, - 0xbb, 0x03, 0xcd, 0xcf, 0xcc, 0x5a, 0x62, 0xe1, 0x59, 0x4b, 0x2c, 0x12, 0xb4, 0xc4, 0xa2, 0x3e, - 0x85, 0xb7, 0x2c, 0xee, 0xd6, 0xd8, 0x98, 0xd9, 0x8a, 0x5c, 0xf4, 0xef, 0x6d, 0xd1, 0xd7, 0x7d, - 0x4c, 0xfe, 0xca, 0xdc, 0x96, 0x38, 0x00, 0x7c, 0x2a, 0x03, 0xff, 0x85, 0x21, 0xdb, 0xf8, 0x45, - 0x32, 0xef, 0xbc, 0xc5, 0xc2, 0x04, 0x5b, 0x3e, 0x3c, 0xcb, 0xf2, 0x91, 0x59, 0x96, 0x8f, 0x06, - 0x59, 0x3e, 0x86, 0xce, 0x43, 0x8a, 0xb0, 0x11, 0x24, 0xa9, 0x26, 0xb1, 0x4b, 0xfe, 0x6b, 0x35, - 0xce, 0xfd, 0x2e, 0x4c, 0xce, 0x91, 0x7d, 0x33, 0x9d, 0xec, 0xe3, 0x8a, 0x37, 0x16, 0xd8, 0x3b, - 0x04, 0x22, 0x4e, 0xe5, 0x8e, 0xef, 0x31, 0xb0, 0x31, 0x8b, 0xf1, 0x19, 0x3a, 0x24, 0x03, 0xe9, - 0x96, 0xe8, 0xb4, 0x5f, 0xc4, 0xdf, 0x7e, 0x51, 0xee, 0x1f, 0x0c, 0x2c, 0xbb, 0xf7, 0x39, 0xe8, - 0xbe, 0x8f, 0xd5, 0xbe, 0x14, 0xb8, 0x2d, 0xf2, 0x7c, 0x9e, 0xca, 0x42, 0xef, 0x00, 0x9a, 0xe6, - 0xe6, 0x36, 0xcb, 0x2a, 0x64, 0x76, 0xf2, 0x45, 0xb9, 0x5e, 0x69, 0x95, 0xca, 0xa2, 0x5c, 0xa8, - 0x89, 0xbb, 0xe5, 0x12, 0xcb, 0xa0, 0xeb, 0xb0, 0x35, 0xb5, 0x6d, 0xd8, 0xab, 0x35, 0x9a, 0x72, - 0x51, 0x30, 0x6d, 0x27, 0x88, 0x85, 0x87, 0x6c, 0x18, 0x4f, 0xd6, 0xbd, 0x19, 0x9b, 0x3b, 0x59, - 0xf7, 0x70, 0xcf, 0xe7, 0x69, 0x27, 0x3b, 0xcd, 0xed, 0xec, 0x26, 0xbb, 0x13, 0xa7, 0xd7, 0x90, - 0xdb, 0xbf, 0x64, 0x20, 0x51, 0xc6, 0xc7, 0xc3, 0xc6, 0x18, 0x7d, 0x03, 0x3f, 0xf3, 0x9f, 0xfa, - 0x63, 0x03, 0xda, 0x9a, 0xf1, 0x9f, 0x07, 0x7c, 0xea, 0xc7, 0x5d, 0x9d, 0xfb, 0xaf, 0x08, 0x3e, - 0x84, 0xf6, 0x20, 0xed, 0x7a, 0x2f, 0x8f, 0xd6, 0xfd, 0xde, 0xd0, 0x13, 0x86, 0x5c, 0xf0, 0xf3, - 0x7a, 0x3e, 0xb4, 0xfd, 0x49, 0x0c, 0x60, 0xd2, 0x0b, 0x20, 0x01, 0xce, 0x39, 0x37, 0x59, 0x28, - 0x1b, 0xf4, 0x5e, 0x9c, 0x5b, 0x0f, 0x7c, 0x6e, 0xcd, 0x87, 0x4c, 0x36, 0xce, 0x2d, 0x02, 0x65, - 0xe3, 0xf3, 0x1e, 0x91, 0xb2, 0xf1, 0x7b, 0x97, 0xc7, 0x87, 0xd0, 0x3e, 0xac, 0x05, 0x34, 0xb6, - 0xe8, 0xda, 0xec, 0x07, 0x5c, 0x84, 0xf9, 0xf5, 0x45, 0x5e, 0x79, 0xf1, 0x21, 0xd4, 0x83, 0xf5, - 0xc0, 0x7e, 0x08, 0xdd, 0x98, 0xf7, 0x42, 0x86, 0xc8, 0xba, 0xb9, 0xd8, 0x43, 0x1a, 0x3e, 0x84, - 0x06, 0xc0, 0x05, 0xd7, 0x63, 0x74, 0x73, 0xee, 0x0b, 0x11, 0x22, 0xef, 0x99, 0x05, 0x5f, 0x92, - 0xf0, 0x21, 0xb4, 0x03, 0x29, 0xc7, 0x73, 0x05, 0xb4, 0x36, 0xfd, 0x80, 0x81, 0xb0, 0xcc, 0x06, - 0xbd, 0x6c, 0x20, 0x3c, 0x1c, 0x17, 0xe5, 0x94, 0xc7, 0xf4, 0xb5, 0x3e, 0xe5, 0xe1, 0x73, 0xa7, - 0xee, 0x35, 0xb3, 0xe7, 0xec, 0x79, 0xca, 0xcc, 0xfe, 0x87, 0xe2, 0x53, 0x66, 0x0e, 0x38, 0xc2, - 0xe6, 0x43, 0xdb, 0xdf, 0x8d, 0x40, 0xd4, 0x5c, 0xf6, 0xa8, 0x09, 0x99, 0xa9, 0xf2, 0x8c, 0x2e, - 0x07, 0xdd, 0x9a, 0x11, 0x31, 0x57, 0x66, 0x5f, 0xaa, 0xf1, 0x21, 0xf4, 0x35, 0x58, 0xf1, 0xa9, - 0x32, 0x68, 0x33, 0xf8, 0x9a, 0x87, 0x70, 0xde, 0x9a, 0x77, 0x0f, 0xc4, 0x87, 0xd0, 0x2b, 0x90, - 0xb4, 0x73, 0x16, 0x5a, 0xf5, 0x5e, 0xb6, 0x10, 0x3e, 0x17, 0xfd, 0xef, 0x60, 0x08, 0xb5, 0x9d, - 0xde, 0x29, 0xb5, 0xf7, 0x9e, 0x84, 0x52, 0x4f, 0xdd, 0x6c, 0x4c, 0xe6, 0xe5, 0x75, 0xcf, 0x66, - 0xf0, 0xa5, 0x81, 0x77, 0x5e, 0x81, 0x2e, 0x79, 0xb4, 0x84, 0xff, 0x4d, 0xf6, 0x95, 0xff, 0x05, - 0x00, 0x00, 0xff, 0xff, 0x56, 0x68, 0xb8, 0x30, 0x5a, 0x36, 0x00, 0x00, + // 3226 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5b, 0x4d, 0x6c, 0x23, 0x49, + 0x15, 0x76, 0xfb, 0x37, 0x7e, 0x8e, 0x67, 0xda, 0x95, 0xc9, 0xc4, 0xe9, 0xc9, 0x4c, 0x32, 0x3d, + 0x3f, 0x3b, 0xc3, 0xb2, 0x5e, 0x08, 0x12, 0xb3, 0x33, 0xb3, 0x7f, 0x8e, 0xdd, 0x71, 0xcc, 0x38, + 0x6d, 0x6f, 0xdb, 0xce, 0xee, 0x80, 0xd8, 0x56, 0xc7, 0xee, 0x64, 0xcc, 0x38, 0xb6, 0xb7, 0xbb, + 0x63, 0x6d, 0x6e, 0x48, 0x20, 0x24, 0x56, 0x1c, 0x10, 0x48, 0x2c, 0xe2, 0x00, 0x87, 0xe5, 0x00, + 0x12, 0x27, 0x10, 0x20, 0x04, 0x17, 0x84, 0x38, 0x22, 0xc4, 0x85, 0x45, 0x48, 0x1c, 0x57, 0x68, + 0x39, 0x71, 0xe5, 0x86, 0xaa, 0xba, 0xba, 0xdd, 0xdd, 0xee, 0xb6, 0x9d, 0x38, 0xcb, 0x70, 0x73, + 0xbf, 0x57, 0xef, 0xbd, 0xaa, 0xef, 0x55, 0xbd, 0xf7, 0xea, 0xc7, 0x90, 0x6c, 0xe9, 0x9d, 0xdc, + 0x40, 0xeb, 0x1b, 0x7d, 0x14, 0x69, 0xe9, 0x1d, 0xfe, 0x2a, 0x5c, 0x29, 0xa9, 0x46, 0xfd, 0x78, + 0x30, 0xe8, 0x6b, 0x86, 0xda, 0xde, 0x53, 0x35, 0xbd, 0xd3, 0xef, 0xe9, 0x92, 0xfa, 0xce, 0xb1, + 0xaa, 0x1b, 0xfc, 0x5f, 0x19, 0x58, 0xf3, 0xe7, 0xeb, 0x83, 0x7e, 0x4f, 0x57, 0xd1, 0x16, 0xc4, + 0x35, 0x55, 0x3f, 0xee, 0x1a, 0x59, 0x66, 0x83, 0xb9, 0x93, 0xda, 0xbc, 0x93, 0xc3, 0x06, 0x26, + 0x89, 0xe4, 0x24, 0xd2, 0x7e, 0x27, 0x24, 0x51, 0x49, 0xc4, 0x43, 0x4c, 0xd5, 0xb4, 0xbe, 0x96, + 0x0d, 0x13, 0x15, 0x40, 0x54, 0x08, 0x98, 0xb2, 0x13, 0x92, 0x4c, 0x16, 0x27, 0x40, 0xdc, 0x94, + 0x43, 0x0f, 0x01, 0xe9, 0x96, 0x6e, 0x79, 0x48, 0x95, 0x67, 0x99, 0x8d, 0xc8, 0x9d, 0xd4, 0xe6, + 0x22, 0x11, 0xa5, 0x16, 0xa5, 0x8c, 0xee, 0xed, 0xc3, 0x56, 0x02, 0x62, 0x9a, 0x3a, 0xe8, 0x9e, + 0xf0, 0x8f, 0x20, 0x41, 0x89, 0xe8, 0x12, 0xc4, 0x8e, 0x94, 0xaf, 0xf4, 0x35, 0x32, 0x82, 0xb4, + 0x64, 0x7e, 0x10, 0x6a, 0xa7, 0x47, 0x3b, 0x85, 0xa9, 0xf8, 0x03, 0x53, 0x07, 0x8a, 0xd1, 0x7a, + 0x92, 0x8d, 0x98, 0x54, 0xf2, 0xc1, 0xbf, 0x0a, 0x97, 0x4a, 0xaa, 0x51, 0xeb, 0x1e, 0x1f, 0x76, + 0x7a, 0xe5, 0xde, 0x41, 0x9f, 0xa2, 0x87, 0x6e, 0x43, 0x82, 0x76, 0x90, 0xa2, 0xe3, 0xee, 0x9f, + 0xc5, 0xe4, 0xff, 0x12, 0x86, 0x65, 0x8f, 0x02, 0x0a, 0xef, 0x43, 0x0f, 0xbc, 0xd7, 0x2d, 0x78, + 0xc7, 0xdb, 0x9e, 0x0d, 0xd7, 0x3f, 0x31, 0x36, 0xb0, 0x08, 0xa2, 0x3d, 0xe5, 0x48, 0x25, 0x96, + 0x92, 0x12, 0xf9, 0x8d, 0x6e, 0xc1, 0x85, 0xa1, 0xda, 0x6b, 0xf7, 0x35, 0x0b, 0x69, 0xa2, 0x2b, + 0x29, 0xa5, 0x4d, 0xaa, 0x05, 0xe1, 0x23, 0x58, 0x38, 0x52, 0x7a, 0x9d, 0x03, 0x55, 0x37, 0xb2, + 0x11, 0xe2, 0x89, 0x17, 0xa7, 0x76, 0x34, 0xb7, 0x4b, 0x25, 0x84, 0x9e, 0xa1, 0x9d, 0x48, 0xb6, + 0x02, 0xee, 0x21, 0xa4, 0x5d, 0x2c, 0xc4, 0x42, 0xe4, 0xa9, 0x7a, 0x42, 0xfb, 0x85, 0x7f, 0x62, + 0x37, 0x0c, 0x95, 0xee, 0xb1, 0x4a, 0x7b, 0x63, 0x7e, 0x3c, 0x08, 0xbf, 0xc4, 0x8c, 0x1c, 0xfc, + 0x83, 0x08, 0x2c, 0x15, 0x34, 0x55, 0x31, 0xd4, 0xbd, 0x7e, 0xf7, 0xf8, 0x48, 0x3d, 0xa5, 0x4f, + 0x6c, 0x34, 0xc2, 0x0e, 0x34, 0xee, 0xc3, 0x85, 0x96, 0x32, 0x50, 0x5a, 0x1d, 0xe3, 0x44, 0xd6, + 0x94, 0xde, 0xa1, 0x4a, 0xa6, 0x41, 0x6a, 0x13, 0x11, 0x15, 0x05, 0xca, 0x92, 0x30, 0x47, 0x4a, + 0xb7, 0x9c, 0x9f, 0x68, 0x1b, 0x96, 0x86, 0xa4, 0x1f, 0x32, 0xa6, 0xef, 0x77, 0xba, 0x1d, 0xa3, + 0xa3, 0xea, 0xd9, 0x28, 0x01, 0x6b, 0xd9, 0xec, 0x02, 0xe1, 0x17, 0x2c, 0xf6, 0x89, 0x84, 0x86, + 0x6e, 0x4a, 0x47, 0xd5, 0xd1, 0x0e, 0xc0, 0x40, 0xd1, 0x94, 0x23, 0xd5, 0x50, 0x35, 0x3d, 0x1b, + 0x23, 0xe2, 0xe6, 0x9a, 0xf3, 0x19, 0x6c, 0xae, 0x66, 0x37, 0x35, 0x41, 0x76, 0xc8, 0xa2, 0x87, + 0xc0, 0x1e, 0xeb, 0xaa, 0x26, 0xb7, 0x34, 0xb5, 0xad, 0xf6, 0x8c, 0x8e, 0xd2, 0xd5, 0xb3, 0x71, + 0x32, 0x1c, 0xd6, 0xd2, 0x67, 0xd1, 0xa5, 0x8b, 0xb8, 0xa5, 0x83, 0xc0, 0xbd, 0x02, 0x17, 0x3d, + 0xba, 0x4f, 0xe3, 0x25, 0xfe, 0xb7, 0x0c, 0x5c, 0x72, 0xf7, 0x97, 0xce, 0xf7, 0x07, 0x9e, 0xf9, + 0xbe, 0xe1, 0x33, 0xb4, 0x79, 0xa6, 0xfb, 0x03, 0x7b, 0xb6, 0x7f, 0x06, 0x52, 0xd4, 0x21, 0x9d, + 0xde, 0x41, 0x9f, 0x9a, 0xbb, 0xe8, 0x70, 0x04, 0x99, 0xb2, 0x30, 0xb4, 0x7f, 0x8f, 0xa6, 0xd6, + 0x0f, 0xa3, 0xc0, 0x7a, 0x9d, 0x85, 0xee, 0x43, 0x6c, 0xbf, 0xdb, 0x6f, 0x3d, 0x75, 0x2d, 0x54, + 0x6f, 0xab, 0xdc, 0x16, 0x6e, 0x62, 0x52, 0x71, 0xa7, 0x88, 0x04, 0x16, 0x3d, 0xea, 0x1f, 0xf7, + 0x0c, 0xda, 0xf1, 0x00, 0xd1, 0x5d, 0xdc, 0x64, 0x24, 0x4a, 0x24, 0x50, 0x1e, 0x52, 0x4a, 0xab, + 0xa5, 0xea, 0xba, 0x7c, 0xd4, 0x6f, 0x5b, 0xd3, 0x71, 0xc3, 0x5f, 0x41, 0x9e, 0x34, 0xdc, 0xed, + 0xb7, 0x55, 0x09, 0x14, 0xfb, 0x37, 0x97, 0x86, 0x94, 0xa3, 0x57, 0x5c, 0x09, 0x52, 0x0e, 0x4b, + 0x68, 0x05, 0x12, 0x07, 0xba, 0x6c, 0x9c, 0x0c, 0xac, 0xb8, 0x10, 0x3f, 0xd0, 0x1b, 0x27, 0x03, + 0x15, 0xad, 0x43, 0x8a, 0x74, 0x41, 0x3e, 0xe8, 0x2a, 0x87, 0x7a, 0x36, 0xbc, 0x11, 0xb9, 0x93, + 0x94, 0x80, 0x90, 0xb6, 0x31, 0x85, 0xfb, 0x98, 0x01, 0x18, 0x99, 0x44, 0xf7, 0x21, 0x4a, 0xba, + 0x88, 0xb5, 0x5c, 0xd8, 0xbc, 0x35, 0xad, 0x8b, 0x39, 0xd2, 0x4f, 0x22, 0xc2, 0xff, 0x88, 0x81, + 0x28, 0xd1, 0x91, 0x82, 0x44, 0x53, 0x7c, 0x24, 0x56, 0xdf, 0x14, 0xd9, 0x10, 0xba, 0x0c, 0xa8, + 0x5e, 0x16, 0x4b, 0x15, 0x41, 0x16, 0xab, 0x45, 0x41, 0x7e, 0x53, 0x2a, 0x37, 0x04, 0x89, 0x65, + 0xd0, 0x15, 0x58, 0x71, 0xd2, 0x25, 0x21, 0x5f, 0x14, 0x24, 0xb9, 0x2a, 0x56, 0x1e, 0xb3, 0x61, + 0xc4, 0xc1, 0xe5, 0xdd, 0x66, 0xa5, 0x51, 0x1e, 0xe7, 0x45, 0xd0, 0x1a, 0x64, 0x1d, 0x3c, 0xaa, + 0x83, 0xaa, 0x8d, 0x62, 0xb5, 0x0e, 0xae, 0xf9, 0x93, 0x32, 0x63, 0x5b, 0x69, 0xdb, 0x0d, 0x18, + 0x29, 0xfe, 0x4d, 0x48, 0xbb, 0x82, 0x01, 0x0e, 0xa3, 0x9a, 0xfa, 0xce, 0x71, 0x47, 0x53, 0xdb, + 0xf2, 0xfe, 0x89, 0xa1, 0xea, 0x04, 0x86, 0xa8, 0x94, 0xb6, 0xa8, 0x5b, 0x98, 0x88, 0x31, 0xed, + 0x76, 0x8e, 0x3a, 0x06, 0x6d, 0x13, 0x26, 0x6d, 0x80, 0x90, 0x48, 0x03, 0xfe, 0x6d, 0x80, 0xd1, + 0xe4, 0xc4, 0x5a, 0xed, 0x70, 0xe4, 0xd2, 0x6a, 0x51, 0x4d, 0xad, 0x77, 0x21, 0xfe, 0x44, 0xe9, + 0xb5, 0xbb, 0x2a, 0x9d, 0x5f, 0x19, 0x07, 0xf6, 0x3b, 0x84, 0x21, 0xd1, 0x06, 0xfc, 0xf7, 0x19, + 0x58, 0x74, 0x32, 0xd0, 0x05, 0x08, 0x77, 0xda, 0xd4, 0xf3, 0xe1, 0x4e, 0x1b, 0x3d, 0x84, 0x85, + 0x23, 0xd5, 0x50, 0xda, 0x8a, 0xa1, 0x10, 0x97, 0xa7, 0x36, 0xd7, 0xc7, 0xb4, 0xe5, 0x76, 0x69, + 0x0b, 0x2b, 0xb0, 0xd3, 0x4f, 0x12, 0xd8, 0x9d, 0xac, 0x53, 0x85, 0x8c, 0x21, 0xa4, 0x1c, 0x01, + 0x08, 0xe5, 0x20, 0x4a, 0x3a, 0x61, 0xe6, 0x7d, 0xce, 0x1b, 0xb1, 0x72, 0x45, 0xdb, 0x3e, 0x69, + 0xc7, 0xdd, 0x83, 0x64, 0xf1, 0x4c, 0x76, 0x7f, 0xce, 0xc0, 0x52, 0x51, 0xed, 0xaa, 0x67, 0xcd, + 0x23, 0x9f, 0x87, 0x34, 0x8d, 0x33, 0xd3, 0x9c, 0xb0, 0x38, 0x74, 0x22, 0xef, 0x17, 0x9e, 0x23, + 0x33, 0x86, 0x67, 0xfe, 0x9b, 0x0c, 0x5c, 0x72, 0x77, 0x7a, 0x62, 0x7c, 0xf5, 0x6b, 0x7a, 0xb6, + 0xf8, 0xba, 0x60, 0xc5, 0xd7, 0x51, 0xb4, 0xfc, 0x43, 0x18, 0xae, 0x15, 0xfa, 0x3d, 0x43, 0xeb, + 0x77, 0xbb, 0xaa, 0x56, 0x3b, 0xde, 0xef, 0x76, 0xf4, 0x27, 0xff, 0x5b, 0x2c, 0x6f, 0x42, 0xa2, + 0xd7, 0x6f, 0xab, 0x72, 0xa7, 0x4d, 0x21, 0x4c, 0x11, 0x09, 0xb1, 0xdf, 0x56, 0xcb, 0x45, 0x29, + 0x8e, 0x79, 0xe5, 0x36, 0xda, 0x82, 0x8c, 0x37, 0x45, 0x9f, 0x64, 0xa3, 0xa4, 0x7d, 0x40, 0x82, + 0x66, 0x87, 0xde, 0x2c, 0xc0, 0xc1, 0x82, 0xa6, 0x2a, 0xed, 0x7e, 0xaf, 0x7b, 0x92, 0x8d, 0x6d, + 0x30, 0x77, 0x16, 0x24, 0xfb, 0x7b, 0xae, 0x84, 0xcb, 0xff, 0x93, 0x81, 0xf5, 0x40, 0x14, 0xa9, + 0x73, 0x05, 0x8f, 0x73, 0x9f, 0x37, 0xd5, 0x4e, 0x96, 0x3a, 0x9b, 0x9f, 0x6b, 0x76, 0x1e, 0xdd, + 0x86, 0xa5, 0x81, 0xa9, 0x57, 0x1e, 0xcf, 0xa7, 0x97, 0x89, 0xac, 0xcb, 0x2e, 0x49, 0xab, 0x99, + 0x81, 0x97, 0x34, 0x9a, 0x2f, 0x06, 0xc4, 0x4d, 0xc7, 0xa0, 0x17, 0x21, 0x4e, 0xd6, 0xa1, 0x55, + 0xdd, 0xaf, 0x38, 0xbc, 0x96, 0xdb, 0x23, 0x1c, 0x73, 0x89, 0xd3, 0x66, 0xdc, 0x7d, 0x48, 0x39, + 0xc8, 0xa7, 0x5a, 0xe6, 0xef, 0x31, 0x90, 0x19, 0xeb, 0x27, 0x5e, 0x2e, 0xae, 0x1e, 0xf0, 0xfe, + 0xe3, 0x39, 0xef, 0xce, 0x7c, 0xc4, 0xc0, 0xc6, 0xc8, 0x6d, 0xcd, 0xde, 0xe0, 0xff, 0x77, 0xd1, + 0xf8, 0x4d, 0xea, 0xe8, 0xac, 0x93, 0xfa, 0x03, 0x06, 0xae, 0x4f, 0x18, 0x27, 0x9d, 0xd6, 0x25, + 0xcf, 0xb4, 0x7e, 0xc1, 0x33, 0xad, 0x03, 0xe4, 0xce, 0x2d, 0x80, 0xfd, 0x91, 0x81, 0xeb, 0x7b, + 0x4a, 0xb7, 0xd3, 0xb6, 0x6b, 0x50, 0x67, 0x45, 0x7e, 0x5a, 0x77, 0x78, 0xea, 0xce, 0xf0, 0xd4, + 0xba, 0x33, 0x68, 0xeb, 0x10, 0x39, 0xe5, 0xd6, 0x81, 0xff, 0x07, 0x03, 0xfc, 0xa4, 0x71, 0x50, + 0xb8, 0x77, 0x3c, 0x70, 0xe7, 0x4c, 0x0b, 0x53, 0x05, 0xcf, 0x86, 0xf7, 0xeb, 0x76, 0x20, 0x59, + 0x83, 0xa4, 0xbd, 0x5f, 0x27, 0xa6, 0x17, 0xa4, 0x11, 0x01, 0x65, 0x21, 0x71, 0xa4, 0xea, 0xba, + 0x72, 0x68, 0x2d, 0x17, 0xeb, 0x73, 0xe4, 0xa7, 0xaf, 0x33, 0x80, 0x2a, 0x1d, 0x9d, 0x56, 0xae, + 0xa7, 0x76, 0x0c, 0x2e, 0x68, 0x95, 0x77, 0x65, 0xb5, 0x67, 0x68, 0x1d, 0x5a, 0x7c, 0xa5, 0x25, + 0x38, 0x52, 0xde, 0x15, 0x4c, 0x0a, 0x2e, 0xb7, 0x74, 0x43, 0xd1, 0x8c, 0x4e, 0xef, 0x50, 0x36, + 0xfa, 0x4f, 0xd5, 0x1e, 0x59, 0x17, 0x49, 0x29, 0x6d, 0x51, 0x1b, 0x98, 0xc8, 0x7f, 0x10, 0x86, + 0x25, 0x57, 0x37, 0x28, 0xae, 0xf7, 0x3d, 0xb8, 0x9a, 0x85, 0x93, 0x4f, 0xcb, 0xb3, 0x01, 0xf9, + 0xc1, 0x68, 0x23, 0xff, 0x1a, 0x24, 0xac, 0x51, 0x98, 0x61, 0xeb, 0xd6, 0x14, 0x53, 0x39, 0x33, + 0x72, 0x59, 0x52, 0xe8, 0x2a, 0x40, 0x4f, 0x7d, 0xd7, 0xa0, 0xa3, 0x34, 0xf1, 0x4e, 0x62, 0x0a, + 0x19, 0x21, 0x77, 0x1f, 0x62, 0x66, 0x4c, 0x9b, 0x63, 0x0f, 0xf5, 0xad, 0x30, 0xa0, 0x92, 0x6a, + 0xd8, 0x65, 0xf2, 0x29, 0x9d, 0x15, 0xb0, 0x26, 0xc2, 0xa7, 0xdd, 0x4e, 0x97, 0x5c, 0xdb, 0x69, + 0x73, 0x49, 0x3d, 0x67, 0x1d, 0x5d, 0x78, 0x3a, 0x37, 0x69, 0x37, 0x3d, 0xef, 0x86, 0xf8, 0x57, + 0x0c, 0x2c, 0xb9, 0x2c, 0x4e, 0x9c, 0x34, 0x3e, 0x2d, 0xcf, 0x36, 0x69, 0xee, 0xd9, 0x73, 0xe6, + 0x05, 0x40, 0xca, 0x50, 0xe9, 0x74, 0x95, 0xfd, 0xae, 0x89, 0x29, 0x56, 0x4e, 0xf7, 0x13, 0x19, + 0x9b, 0x63, 0x59, 0x1d, 0xf9, 0xf1, 0x0b, 0xce, 0x4c, 0x45, 0xfb, 0x75, 0xc6, 0xd0, 0xc8, 0x7f, + 0xec, 0x4a, 0x07, 0x63, 0xca, 0x66, 0x4c, 0x07, 0x01, 0x72, 0x67, 0x03, 0x48, 0xb4, 0x01, 0x2a, + 0xc2, 0xa2, 0xcf, 0x54, 0xdb, 0xf0, 0x18, 0xaf, 0xab, 0xda, 0xb0, 0xd3, 0x72, 0xce, 0x3a, 0x97, + 0xd4, 0x08, 0xb7, 0xf7, 0xc3, 0x70, 0x65, 0x82, 0x18, 0x7a, 0x09, 0x22, 0xda, 0xa0, 0x45, 0x87, + 0x78, 0x73, 0x9a, 0x95, 0x9c, 0x54, 0x2b, 0xec, 0x84, 0x24, 0x2c, 0xc2, 0xfd, 0x92, 0x81, 0x88, + 0x54, 0x2b, 0xa0, 0x57, 0x20, 0x6a, 0x6f, 0xdb, 0x2f, 0x6c, 0xde, 0x9d, 0x45, 0x45, 0x0e, 0xef, + 0xec, 0x25, 0x22, 0xc6, 0xf7, 0x21, 0x4a, 0xf6, 0xf9, 0xae, 0x3d, 0x77, 0x16, 0x2e, 0x15, 0x24, + 0x21, 0xdf, 0x10, 0xe4, 0xa2, 0x50, 0x11, 0x1a, 0x82, 0xbc, 0x57, 0xad, 0x34, 0x77, 0x05, 0x96, + 0xc1, 0x9b, 0xe7, 0x5a, 0x73, 0xab, 0x52, 0xae, 0xef, 0xc8, 0x4d, 0xd1, 0xfa, 0x45, 0xb9, 0x61, + 0xc4, 0xc2, 0x62, 0xa5, 0x5c, 0x6f, 0x50, 0x42, 0x9d, 0x8d, 0x60, 0x4a, 0x49, 0x68, 0xc8, 0x85, + 0x7c, 0x2d, 0x5f, 0x28, 0x37, 0x1e, 0xb3, 0xd1, 0xad, 0xb8, 0xd9, 0x5f, 0xfe, 0xab, 0x11, 0xc8, + 0xe2, 0x22, 0xe3, 0x99, 0xec, 0x14, 0x02, 0xaa, 0xd9, 0xc8, 0x29, 0xab, 0x59, 0x9c, 0x4c, 0x0c, + 0x45, 0x3b, 0x54, 0x0d, 0x79, 0xa0, 0x18, 0x4f, 0x48, 0x45, 0x94, 0x94, 0xc0, 0x24, 0xd5, 0x14, + 0xe3, 0x89, 0xff, 0x66, 0x23, 0x76, 0xf6, 0xcd, 0x46, 0x7c, 0x86, 0xcd, 0x46, 0x62, 0xd6, 0xba, + 0xec, 0xbb, 0x0c, 0xac, 0xfa, 0xb8, 0x80, 0x2e, 0xc0, 0xd7, 0x3c, 0x0b, 0xf0, 0x96, 0x5d, 0x17, + 0xd6, 0x3e, 0xd1, 0x3a, 0xec, 0xef, 0x0c, 0x70, 0xd8, 0xca, 0x33, 0xaa, 0x87, 0x3d, 0x2e, 0x8d, + 0x8c, 0xb9, 0x74, 0xae, 0x52, 0xf8, 0x7d, 0x06, 0xae, 0xf8, 0x0e, 0x8e, 0x82, 0x9e, 0xf7, 0x80, + 0xfe, 0x9c, 0x0d, 0xfa, 0x27, 0x5d, 0xfe, 0x3e, 0x00, 0xb6, 0xa4, 0x1a, 0xb4, 0xec, 0x3f, 0x65, + 0x44, 0xff, 0x29, 0x03, 0x19, 0x87, 0x30, 0x1d, 0xcb, 0x3d, 0xcf, 0x58, 0xae, 0x5a, 0x49, 0xcd, + 0xdd, 0xee, 0x6c, 0x23, 0xc8, 0xd9, 0x11, 0xdb, 0xb1, 0x81, 0x61, 0x02, 0x37, 0x30, 0xae, 0x71, + 0xd6, 0xb4, 0xfe, 0xbe, 0x8a, 0xf9, 0xa7, 0x1d, 0xe7, 0xd7, 0xf0, 0xee, 0x71, 0x24, 0x3c, 0x71, + 0x9c, 0x63, 0xed, 0xce, 0xcd, 0x53, 0x45, 0x73, 0x7d, 0xcc, 0x99, 0x85, 0x3f, 0xa4, 0x33, 0x31, + 0x28, 0xff, 0x06, 0xcf, 0xc4, 0x73, 0xcd, 0xbc, 0x3b, 0xb6, 0x1f, 0x5f, 0xf5, 0xcd, 0xbc, 0x9c, + 0x6d, 0x76, 0xe6, 0x9c, 0xfb, 0x13, 0x06, 0x96, 0x7d, 0x05, 0xd0, 0xa6, 0x33, 0xdb, 0x5e, 0x0b, + 0xd6, 0xec, 0xcc, 0xb3, 0x75, 0x33, 0xcd, 0xde, 0x73, 0xa5, 0xd9, 0x1b, 0x93, 0x65, 0x9d, 0x09, + 0x76, 0xc9, 0x27, 0xc1, 0xda, 0x49, 0xf0, 0x77, 0x37, 0x20, 0x46, 0x00, 0x41, 0xaf, 0x42, 0xfa, + 0x50, 0xed, 0xa9, 0x9a, 0xd2, 0x95, 0x4d, 0xcc, 0xcc, 0x4e, 0xae, 0x8c, 0x30, 0xcb, 0x95, 0x4c, + 0xbe, 0x05, 0xe0, 0xe2, 0xa1, 0xe3, 0x1b, 0x89, 0xb0, 0xd4, 0x22, 0xd7, 0x27, 0x56, 0x42, 0x73, + 0x22, 0xbf, 0xe6, 0xd0, 0xe2, 0xbc, 0x64, 0xb1, 0x54, 0x65, 0x5a, 0x5e, 0x22, 0xd6, 0xd7, 0x26, + 0xc7, 0x85, 0x6e, 0x7d, 0x91, 0x31, 0x7d, 0xce, 0x43, 0x45, 0x5b, 0x5f, 0xdb, 0x4b, 0x44, 0x03, + 0x58, 0x6f, 0xd9, 0x55, 0x89, 0xec, 0x49, 0xbe, 0xa6, 0xee, 0xa8, 0x63, 0x9e, 0xd1, 0xbe, 0xfa, + 0x9f, 0x69, 0x59, 0x66, 0xd6, 0x5a, 0x13, 0xf8, 0x68, 0x08, 0xd7, 0x1d, 0x16, 0x8f, 0x7b, 0xbe, + 0x36, 0xcd, 0x54, 0x7c, 0xd7, 0xd7, 0xa6, 0x27, 0xe2, 0x5a, 0x56, 0xaf, 0xb5, 0x26, 0xb6, 0x40, + 0x27, 0xc0, 0x0f, 0xe9, 0x2e, 0x5a, 0xf6, 0xd9, 0xbc, 0x50, 0xc3, 0xe6, 0x89, 0xe0, 0xa7, 0x1c, + 0x86, 0x83, 0xb7, 0xde, 0x96, 0xe5, 0xf5, 0xe1, 0xe4, 0x26, 0xe8, 0x6d, 0x58, 0x25, 0xa1, 0xd0, + 0x77, 0xa8, 0x09, 0xc7, 0xad, 0x93, 0x69, 0x71, 0x2c, 0x97, 0x5b, 0x86, 0x2e, 0xf7, 0x7c, 0x39, + 0xa8, 0x0d, 0x57, 0x88, 0xfe, 0x00, 0x30, 0x17, 0x88, 0x85, 0x1b, 0x1e, 0x0b, 0x01, 0x30, 0x66, + 0x7b, 0x01, 0x3c, 0x24, 0x00, 0x3b, 0xc0, 0xc1, 0x53, 0x26, 0xb6, 0x4c, 0xd5, 0x49, 0xa2, 0x7a, + 0xd5, 0xa1, 0xda, 0x8e, 0xaf, 0x96, 0xc2, 0x0b, 0x03, 0x17, 0x05, 0x6d, 0x43, 0x06, 0x67, 0x71, + 0x9a, 0x1b, 0xa8, 0x1e, 0x18, 0xd3, 0x63, 0xe7, 0x23, 0x5b, 0xcf, 0x21, 0xa5, 0xb4, 0x09, 0x85, + 0xfb, 0x71, 0x18, 0x16, 0x9d, 0x4b, 0x0f, 0x6f, 0x26, 0x89, 0x32, 0xb9, 0x35, 0xba, 0xe8, 0xba, + 0x13, 0xb0, 0x4e, 0x5d, 0x1f, 0x05, 0x9c, 0x0d, 0x92, 0xaa, 0xf5, 0x13, 0x7d, 0x16, 0x96, 0x5b, + 0x0a, 0x99, 0x9d, 0x47, 0xc7, 0x3a, 0xee, 0xa9, 0x21, 0x6b, 0xaa, 0xa1, 0x9d, 0x90, 0x55, 0xbb, + 0x20, 0x21, 0x93, 0xb9, 0x7b, 0xac, 0x1b, 0x62, 0xdf, 0x90, 0x30, 0x07, 0x3d, 0x0f, 0x19, 0xd3, + 0x76, 0x5b, 0xd5, 0x5b, 0x5a, 0x67, 0x60, 0xe0, 0x38, 0x6f, 0xd6, 0x28, 0x2c, 0x61, 0x14, 0x47, + 0x74, 0xfe, 0x29, 0x4e, 0xe9, 0x6e, 0xf3, 0xee, 0x3a, 0x3f, 0x0d, 0xc9, 0xa6, 0x58, 0x14, 0xb6, + 0xcb, 0xa2, 0x50, 0x64, 0x19, 0xb4, 0x0e, 0x57, 0x9a, 0x62, 0xbd, 0x59, 0xab, 0x55, 0xa5, 0x86, + 0x50, 0x94, 0x25, 0xe1, 0x8d, 0xa6, 0x80, 0xab, 0x79, 0x41, 0xaa, 0x97, 0xab, 0x22, 0xbd, 0x56, + 0x2b, 0xd7, 0xeb, 0x65, 0xb1, 0x44, 0x98, 0x65, 0x49, 0x28, 0xca, 0xdb, 0x65, 0xa1, 0x52, 0x64, + 0x23, 0xdc, 0x37, 0x22, 0x90, 0x19, 0x8b, 0x2d, 0xe8, 0x0d, 0x1f, 0xac, 0x36, 0x27, 0x45, 0xa3, + 0x71, 0x8a, 0x17, 0x35, 0x5f, 0x08, 0xc2, 0x01, 0x10, 0xfc, 0x9b, 0x81, 0x65, 0x5f, 0x8d, 0xe3, + 0x1b, 0x9e, 0x7c, 0xa5, 0x22, 0x8b, 0xd5, 0x86, 0x5c, 0xde, 0xad, 0x55, 0x84, 0x5d, 0x41, 0x6c, + 0x10, 0x4c, 0x36, 0x60, 0xad, 0x5a, 0x13, 0xa4, 0x7c, 0xa3, 0x5c, 0x15, 0xe5, 0x9a, 0x20, 0x16, + 0xf1, 0xe0, 0xb7, 0xab, 0xd2, 0x68, 0xd3, 0xb3, 0x02, 0x4b, 0x65, 0x71, 0x2f, 0x5f, 0x29, 0x17, + 0x29, 0x4d, 0x16, 0xf3, 0xbb, 0x02, 0x1b, 0x41, 0xd7, 0x80, 0x73, 0xc2, 0x69, 0xed, 0x81, 0x64, + 0x29, 0x2f, 0x96, 0x04, 0x36, 0x8a, 0x56, 0x61, 0x99, 0x0a, 0xe4, 0x2b, 0x92, 0x90, 0x2f, 0x3e, + 0x96, 0x85, 0xb7, 0xca, 0xf5, 0x46, 0x9d, 0x8d, 0xa1, 0xab, 0xb0, 0xea, 0x14, 0xad, 0xe5, 0xa5, + 0xfc, 0xae, 0xd0, 0x10, 0x24, 0xf9, 0x91, 0xf0, 0x98, 0x8d, 0xa3, 0x2b, 0xb0, 0x62, 0x99, 0x1c, + 0xb1, 0xf6, 0xf2, 0x95, 0xa6, 0xc0, 0x26, 0xb8, 0x9f, 0x85, 0x21, 0x33, 0x16, 0x94, 0xa7, 0x3a, + 0x62, 0x4c, 0x62, 0x9c, 0x32, 0x97, 0x23, 0xbe, 0xc7, 0xc0, 0xb2, 0xaf, 0xc6, 0xf3, 0x73, 0xc4, + 0x2a, 0x2c, 0x7b, 0x1c, 0xb1, 0x93, 0x17, 0x8b, 0x15, 0xec, 0x8a, 0x11, 0xd4, 0xc5, 0xaa, 0x50, + 0x27, 0xda, 0x09, 0xd6, 0x6c, 0x94, 0xfb, 0x75, 0x14, 0xd6, 0x26, 0xe5, 0x19, 0x74, 0xe8, 0x83, + 0xdc, 0xce, 0x8c, 0x49, 0x6a, 0x22, 0x73, 0x1e, 0x3c, 0xd1, 0x6d, 0x58, 0xa0, 0x91, 0xcd, 0x3a, + 0xcf, 0x72, 0x95, 0xbd, 0x09, 0xb3, 0xec, 0xd5, 0xf9, 0xbf, 0x85, 0x9d, 0x27, 0x37, 0xfe, 0x9d, + 0x78, 0xc6, 0x2e, 0x40, 0x6b, 0x90, 0xf5, 0x2c, 0x04, 0x7a, 0xb2, 0x20, 0x14, 0xd9, 0x18, 0x5e, + 0x5f, 0xe4, 0x2e, 0xde, 0x23, 0x16, 0x47, 0x97, 0x01, 0xed, 0xe6, 0xdf, 0x92, 0xf3, 0x8d, 0x46, + 0xbe, 0xb0, 0x23, 0x14, 0xc9, 0x8d, 0x7d, 0x9d, 0x4d, 0xe0, 0xd5, 0xe1, 0x5c, 0x3c, 0xbb, 0xd5, + 0xa6, 0xd8, 0x90, 0xb7, 0x2b, 0xf9, 0x52, 0x9d, 0x4d, 0x7a, 0x99, 0xd4, 0x6e, 0xe3, 0x71, 0x4d, + 0x60, 0x01, 0x9b, 0x72, 0x32, 0xb7, 0xeb, 0x26, 0x23, 0x85, 0x96, 0xe0, 0xa2, 0x35, 0x2e, 0xd2, + 0x97, 0x72, 0x91, 0x5d, 0xe0, 0xfe, 0x1c, 0x71, 0xde, 0x78, 0xfa, 0xa6, 0xb2, 0xa7, 0x3e, 0x73, + 0xa7, 0x32, 0x73, 0xb1, 0x31, 0x85, 0x3d, 0xd7, 0x7a, 0xfc, 0x4e, 0x18, 0xf8, 0xe9, 0xea, 0x9f, + 0xf5, 0xcc, 0x08, 0xf0, 0x7d, 0xcc, 0xcf, 0x21, 0x71, 0x74, 0x17, 0x6e, 0x59, 0x11, 0xb8, 0xda, + 0x18, 0xcd, 0x8b, 0x46, 0x55, 0xae, 0xd7, 0x84, 0x42, 0x79, 0xbb, 0x4c, 0x27, 0x09, 0x9b, 0x40, + 0x97, 0x80, 0xa5, 0x72, 0x76, 0x26, 0x63, 0x17, 0xb8, 0xff, 0x84, 0x61, 0x7d, 0x4a, 0x19, 0x86, + 0x8e, 0x7c, 0x5c, 0x2a, 0xce, 0x5e, 0xc6, 0x4d, 0xe3, 0xcf, 0xe5, 0xd4, 0xdf, 0x30, 0x70, 0x63, + 0x06, 0xfd, 0x6e, 0xaf, 0x06, 0xc2, 0xcf, 0x4c, 0x5a, 0x49, 0xe1, 0x49, 0x2b, 0x29, 0x12, 0xb4, + 0x92, 0xa2, 0x3e, 0xd9, 0xb2, 0x2c, 0x6e, 0x57, 0xd9, 0x18, 0xf7, 0x5e, 0x04, 0x2e, 0xfb, 0x17, + 0xa4, 0xe8, 0x4b, 0x3e, 0x90, 0xbf, 0x3c, 0xb5, 0x8e, 0x0d, 0x20, 0xcf, 0x05, 0xf0, 0x47, 0xf4, + 0x6c, 0x6a, 0x96, 0x38, 0x3a, 0x6d, 0x4d, 0x30, 0xc1, 0xc8, 0x87, 0x27, 0x21, 0x1f, 0x99, 0x84, + 0x7c, 0x34, 0x08, 0xf9, 0x18, 0xba, 0x08, 0x29, 0x53, 0x8d, 0x20, 0x49, 0x55, 0x89, 0x8d, 0x07, + 0x2f, 0xc9, 0x04, 0xf7, 0xfb, 0xb0, 0x79, 0x38, 0xeb, 0x1b, 0xd4, 0x64, 0x1f, 0x77, 0xbc, 0x3e, + 0x43, 0xd1, 0x1f, 0xc8, 0x98, 0xb7, 0xb0, 0x58, 0x9b, 0xa4, 0xf8, 0x1c, 0x9d, 0x92, 0x81, 0x74, + 0x53, 0x74, 0x62, 0x18, 0x09, 0xc6, 0x30, 0xca, 0xfd, 0x8b, 0x81, 0x0b, 0xee, 0x4d, 0x0a, 0x7a, + 0xe4, 0x83, 0xdc, 0xa7, 0x03, 0xf7, 0x34, 0x9e, 0xcf, 0xb9, 0x50, 0x7a, 0x1b, 0xd0, 0xb8, 0x36, + 0x37, 0x34, 0xcb, 0x90, 0xd9, 0xca, 0x17, 0xe5, 0x5a, 0xa5, 0x59, 0x2a, 0x8b, 0x72, 0xa1, 0x2a, + 0x6e, 0x97, 0x4b, 0x2c, 0x83, 0x6e, 0xc2, 0xc6, 0x58, 0xcd, 0xbf, 0x53, 0xad, 0x37, 0xe4, 0xa2, + 0x80, 0xf1, 0x13, 0xc4, 0xc2, 0x63, 0x36, 0x4c, 0x06, 0xeb, 0xde, 0x49, 0x4d, 0x1d, 0xac, 0xbb, + 0xb9, 0xe7, 0x73, 0xde, 0xc1, 0x8e, 0x6b, 0x3b, 0xbf, 0xc1, 0x6e, 0x25, 0xe8, 0xfd, 0xde, 0xe6, + 0x2f, 0x18, 0x58, 0x28, 0x93, 0xb3, 0x5d, 0xe3, 0x04, 0x7d, 0x99, 0xbc, 0x0e, 0x1f, 0x7b, 0x0f, + 0x8f, 0x36, 0x26, 0x3c, 0x95, 0x27, 0x47, 0x76, 0xdc, 0xf5, 0xa9, 0x8f, 0xe9, 0xf9, 0x10, 0xda, + 0x81, 0xb4, 0xeb, 0x99, 0x35, 0x5a, 0xf5, 0x7b, 0x7a, 0x6d, 0x2a, 0xe4, 0x82, 0x5f, 0x65, 0xf3, + 0xa1, 0xcd, 0x0f, 0x63, 0x00, 0xa3, 0xd4, 0x8f, 0x04, 0x58, 0x74, 0xee, 0x90, 0x50, 0x36, 0xe8, + 0x99, 0x31, 0xb7, 0x1a, 0xf8, 0x4a, 0x97, 0x0f, 0x61, 0x35, 0xce, 0xfa, 0x9e, 0xaa, 0xf1, 0x79, + 0x52, 0x47, 0xd5, 0xf8, 0x3d, 0x46, 0xe3, 0x43, 0xe8, 0x00, 0x56, 0x02, 0xca, 0x55, 0x74, 0x63, + 0xf2, 0x3b, 0x27, 0x53, 0xf9, 0xcd, 0x59, 0x1e, 0x43, 0xf1, 0x21, 0xd4, 0x85, 0xd5, 0xc0, 0xf2, + 0x07, 0xdd, 0x9a, 0xf6, 0xf4, 0xc4, 0xb4, 0x75, 0x7b, 0xb6, 0x17, 0x2a, 0x7c, 0x08, 0xf5, 0x81, + 0x0b, 0xce, 0xcb, 0xe8, 0xf6, 0xd4, 0xa7, 0x17, 0xa6, 0xbd, 0xe7, 0x66, 0x7c, 0xa2, 0xc1, 0x87, + 0xd0, 0x16, 0xa4, 0x1c, 0xef, 0x00, 0xd0, 0xca, 0xf8, 0xcb, 0x00, 0x53, 0x65, 0x36, 0xe8, 0xc9, + 0x80, 0xa9, 0xc3, 0x71, 0x03, 0x4d, 0x75, 0x8c, 0xdf, 0x97, 0x53, 0x1d, 0x3e, 0x97, 0xd5, 0x5e, + 0x98, 0x3d, 0x07, 0xc7, 0x63, 0x30, 0xfb, 0x9f, 0x68, 0x8f, 0xc1, 0x1c, 0x70, 0xfe, 0xcc, 0x87, + 0x36, 0xbf, 0x1d, 0x81, 0x28, 0x5e, 0xf6, 0xa8, 0x01, 0x99, 0xb1, 0x34, 0x8d, 0xae, 0x06, 0x5d, + 0x60, 0x99, 0x66, 0xae, 0x4d, 0xbe, 0xdf, 0xe2, 0x43, 0xe8, 0x8b, 0xb0, 0xe4, 0x93, 0x69, 0xd0, + 0x7a, 0xf0, 0x1d, 0x8d, 0xa9, 0x79, 0x63, 0xda, 0x25, 0x0e, 0x1f, 0x42, 0x2f, 0x43, 0xd2, 0x8e, + 0x59, 0x68, 0xd9, 0x7b, 0x53, 0x62, 0xea, 0xb9, 0xec, 0x7f, 0x81, 0x62, 0x4a, 0xdb, 0xe1, 0x9d, + 0x4a, 0x7b, 0x2f, 0x39, 0xa8, 0xf4, 0xd8, 0xb5, 0xc4, 0x68, 0x5c, 0x5e, 0xf7, 0xac, 0x07, 0x9f, + 0xf8, 0x7b, 0xc7, 0x15, 0xe8, 0x92, 0xfd, 0x38, 0xf9, 0x13, 0xd2, 0xe7, 0xfe, 0x1b, 0x00, 0x00, + 0xff, 0xff, 0x9c, 0x97, 0x7c, 0x25, 0x91, 0x34, 0x00, 0x00, } diff --git a/spec.md b/spec.md index 2d39a6b9..f6938916 100644 --- a/spec.md +++ b/spec.md @@ -537,35 +537,33 @@ message VolumeInfo { // NFS share). If set, it MUST be non-zero. uint64 capacity_bytes = 1; - // Contains identity information for the created volume. This field is + // Contains identity information for the created volume. This field is // REQUIRED. The identity information will be used by the CO in // subsequent calls to refer to the provisioned volume. - VolumeID id = 4; - - // Metadata of the created volume. This field is OPTIONAL. If set, the - // CO SHALL pass this information along with the `id` to subsequent - // calls. - VolumeMetadata metadata = 5; + VolumeHandle handle = 2; } -// The identity of the volume. -message VolumeID { - // The identity of the provisioned volume specified by the Plugin in - // the form of key-value pairs. This field is REQUIRED. Given this - // information will be passed around by the CO, it is RECOMMENDED that - // each Plugin keeps this information as small as possible. - map values = 1; -} - -// The metadata information about the volume. -message VolumeMetadata { - // The metadata information about the provisioned volume specified by - // the Plugin in the form of key-value pairs. This field is OPTIONAL. - // This field MAY contain sensitive information. Therefore, the CO - // MUST NOT leak this information to untrusted entities. Given this - // information will be passed around by the CO, it is RECOMMENDED that - // each Plugin keeps this information as small as possible. - map values = 1; +// VolumeHandle objects are generated by Plugin implementations to +// serve two purposes: first, to efficiently identify a volume known +// to the Plugin implementation; second, to capture additional, opaque, +// possibly sensitive information associated with a volume. It SHALL +// NOT change over the lifetime of the volume and MAY be safely cached +// by the CO. +// Since this object will be passed around by the CO, it is RECOMMENDED +// that each Plugin keeps the information herein as small as possible. +// The total bytes of a serialized VolumeHandle must be less than 1 MiB. +message VolumeHandle { + // ID is the identity of the provisioned volume specified by the + // Plugin. This field is REQUIRED. + // This information SHALL NOT be considered sensitive such that, for + // example, the CO MAY generate log messages that include this data. + string id = 1; + + // Metadata captures additional, possibly sensitive, information about + // a volume in the form of key-value pairs. This field is OPTIONAL. + // Since this field MAY contain sensitive information, the CO MUST NOT + // leak this information to untrusted entities. + map metadata = 2; } // A standard way to encode credential data. The total bytes of the values in @@ -598,17 +596,14 @@ message DeleteVolumeRequest { // The API version assumed by the CO. This field is REQUIRED. Version version = 1; - // The ID of the volume to be deprovisioned. This field is REQUIRED. - VolumeID volume_id = 2; - - // The metadata of the volume to be deprovisioned. This field is - // OPTIONAL. - VolumeMetadata volume_metadata = 3; + // The handle of the volume to be deprovisioned. + // This field is REQUIRED. + VolumeHandle volume_handle = 2; // End user credentials used to authenticate/authorize volume deletion // request. // This field is OPTIONAL. - Credentials user_credentials = 4; + Credentials user_credentials = 3; } message DeleteVolumeResponse { @@ -639,22 +634,19 @@ message ControllerPublishVolumeRequest { // The API version assumed by the CO. This field is REQUIRED. Version version = 1; - // The ID of the volume to be used on a node. This field is REQUIRED. - VolumeID volume_id = 2; + // The handle of the volume to be used on a node. + // This field is REQUIRED. + VolumeHandle volume_handle = 2; - // The metadata of the volume to be used on a node. This field is - // OPTIONAL. - VolumeMetadata volume_metadata = 3; - // The ID of the node. This field is OPTIONAL. The CO SHALL set (or // clear) this field to match the `NodeID` returned by `GetNodeID`. // `GetNodeID` is allowed to omit `NodeID` from a successful `Result`; // in such cases the CO SHALL NOT specify this field. - NodeID node_id = 4; + NodeID node_id = 3; // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability volume_capability = 6; + VolumeCapability volume_capability = 4; // Whether to publish the volume in readonly mode. This field is // REQUIRED. @@ -663,7 +655,7 @@ message ControllerPublishVolumeRequest { // End user credentials used to authenticate/authorize controller publish // request. // This field is OPTIONAL. - Credentials user_credentials = 7; + Credentials user_credentials = 6; } message ControllerPublishVolumeResponse { @@ -717,11 +709,8 @@ message ControllerUnpublishVolumeRequest { // The API version assumed by the CO. This field is REQUIRED. Version version = 1; - // The ID of the volume. This field is REQUIRED. - VolumeID volume_id = 2; - - // The metadata of the volume. This field is OPTIONAL. - VolumeMetadata volume_metadata = 3; + // The handle of the volume. This field is REQUIRED. + VolumeHandle volume_handle = 2; // The ID of the node. This field is OPTIONAL. The CO SHALL set (or // clear) this field to match the `NodeID` returned by `GetNodeID`. @@ -732,12 +721,12 @@ message ControllerUnpublishVolumeRequest { // the CO MAY omit this field as well, indicating that it does not // know which node the volume was previously used. The Plugin SHOULD // return an Error if this is not supported. - NodeID node_id = 4; + NodeID node_id = 3; // End user credentials used to authenticate/authorize controller unpublish // request. // This field is OPTIONAL. - Credentials user_credentials = 5; + Credentials user_credentials = 4; } message ControllerUnpublishVolumeResponse { @@ -945,36 +934,33 @@ message NodePublishVolumeRequest { // The API version assumed by the CO. This is a REQUIRED field. Version version = 1; - // The ID of the volume to publish. This field is REQUIRED. - VolumeID volume_id = 2; - - // The metadata of the volume to publish. This field is OPTIONAL. - VolumeMetadata volume_metadata = 3; + // The handle of the volume to publish. This field is REQUIRED. + VolumeHandle volume_handle = 2; // The CO SHALL set this field to the value returned by // `ControllerPublishVolume` if the corresponding Controller Plugin // has `PUBLISH_UNPUBLISH_VOLUME` controller capability, and SHALL be // left unset if the corresponding Controller Plugin does not have // this capability. This is an OPTIONAL field. - PublishVolumeInfo publish_volume_info = 4; + PublishVolumeInfo publish_volume_info = 3; // The path to which the volume will be published. It MUST be an // absolute path in the root filesystem of the process serving this // request. The CO SHALL ensure uniqueness of target_path per volume. // This is a REQUIRED field. - string target_path = 5; + string target_path = 4; // The capability of the volume the CO expects the volume to have. // This is a REQUIRED field. - VolumeCapability volume_capability = 6; + VolumeCapability volume_capability = 5; // Whether to publish the volume in readonly mode. This field is // REQUIRED. - bool readonly = 7; + bool readonly = 6; // End user credentials used to authenticate/authorize node publish request. // This field is OPTIONAL. - Credentials user_credentials = 8; + Credentials user_credentials = 7; } message NodePublishVolumeResponse { @@ -1007,20 +993,17 @@ message NodeUnpublishVolumeRequest { // The API version assumed by the CO. This is a REQUIRED field. Version version = 1; - // The ID of the volume. This field is REQUIRED. - VolumeID volume_id = 2; - - // The metadata of the volume. This field is OPTIONAL. - VolumeMetadata volume_metadata = 3; + // The handle of the volume. This field is REQUIRED. + VolumeHandle volume_handle = 2; // The path at which the volume was published. It MUST be an absolute // path in the root filesystem of the process serving this request. // This is a REQUIRED field. - string target_path = 4; + string target_path = 3; // End user credentials used to authenticate/authorize node unpublish request. // This field is OPTIONAL. - Credentials user_credentials = 5; + Credentials user_credentials = 4; } message NodeUnpublishVolumeResponse { @@ -1315,28 +1298,20 @@ message Error { // exponential back off. OPERATION_PENDING_FOR_VOLUME = 2; - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - INVALID_VOLUME_ID = 3; - - // Indicates that the specified `VolumeMetadata` is not allowed or - // understood by the Plugin. More human-readable information MAY - // be provided in the `error_description` field. - // - // Recovery behavior: Caller MUST fix the `VolumeMetadata` before - // retrying. - INVALID_VOLUME_METADATA = 4; + INVALID_VOLUME_HANDLE = 3; // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // // Recovery behavior: Caller SHOULD assume the `DeleteVolume` call // succeeded. - VOLUME_DOES_NOT_EXIST = 5; + VOLUME_DOES_NOT_EXIST = 4; } // Machine parsable error code. @@ -1383,32 +1358,24 @@ message Error { // exponential back off. OPERATION_PENDING_FOR_VOLUME = 2; - // Indicates that the specified `VolumeID` is not allowed or - // understood by the Plugin. More human-readable information MAY - // be provided in the `error_description` field. - // - // Recovery behavior: Caller MUST fix the `VolumeID` before - // retrying. - INVALID_VOLUME_ID = 3; - - // Indicates that the specified `VolumeMetadata` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeMetadata` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - INVALID_VOLUME_METADATA = 4; + INVALID_VOLUME_HANDLE = 3; // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. - VOLUME_DOES_NOT_EXIST = 5; + VOLUME_DOES_NOT_EXIST = 4; // Indicates that a volume corresponding to the specified - // `VolumeID` is already attached to another node and does not + // `VolumeHandle` is already attached to another node and does not // support multi-node attach. If this error code is returned, the // Plugin MUST also specify the `node_id` of the node the volume // is already attached to. @@ -1417,7 +1384,7 @@ message Error { // information to detach the volume from the other node. Caller // SHOULD ensure the specified volume is not attached to any other // node before retrying with exponential back off. - VOLUME_ALREADY_PUBLISHED = 6; + VOLUME_ALREADY_PUBLISHED = 5; // Indicates that a node corresponding to the specified `NodeID` // does not exist. @@ -1425,24 +1392,24 @@ message Error { // Recovery behavior: Caller SHOULD verify that the `NodeID` is // correct and that the node is available and has not been // terminated or deleted before retrying with exponential backoff. - NODE_DOES_NOT_EXIST = 7; + NODE_DOES_NOT_EXIST = 6; // Indicates that a volume corresponding to the specified - // `VolumeID` is already attached to the maximum supported number - // of nodes and therefore this operation can not be completed - // until the volume is detached from at least one of the existing - // nodes. When this error code is returned, the Plugin MUST also - // specify the `NodeId` of all the nodes the volume is attached - // to. + // `VolumeHandle` is already attached to the maximum supported + // number of nodes and therefore this operation can not be + // completed until the volume is detached from at least one of the + // existing nodes. When this error code is returned, the Plugin + // MUST also specify the `NodeId` of all the nodes the volume is + // attached to. // // Recovery behavior: Caller MAY use the provided `node_ids` // information to detach the volume from one other node before // retrying with exponential backoff. - MAX_ATTACHED_NODES = 8; + MAX_ATTACHED_NODES = 7; - UNSUPPORTED_MOUNT_FLAGS = 10; - UNSUPPORTED_VOLUME_TYPE = 11; - UNSUPPORTED_FS_TYPE = 12; + UNSUPPORTED_MOUNT_FLAGS = 9; + UNSUPPORTED_VOLUME_TYPE = 10; + UNSUPPORTED_FS_TYPE = 11; // Indicates that the specified `NodeID` is not allowed or // understood by the Plugin, or the Plugin does not support the @@ -1451,7 +1418,7 @@ message Error { // // Recovery behavior: Caller MUST fix the `NodeID` before // retrying. - INVALID_NODE_ID = 9; + INVALID_NODE_ID = 8; } // Machine parsable error code. @@ -1503,29 +1470,21 @@ message Error { // exponential back off. OPERATION_PENDING_FOR_VOLUME = 2; - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - INVALID_VOLUME_ID = 3; - - // Indicates that the specified `VolumeMetadata` is not allowed or - // understood by the Plugin. More human-readable information MAY - // be provided in the `error_description` field. - // - // Recovery behavior: Caller MUST fix the `VolumeMetadata` before - // retrying. - INVALID_VOLUME_METADATA = 4; + INVALID_VOLUME_HANDLE = 3; // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. - VOLUME_DOES_NOT_EXIST = 5; + VOLUME_DOES_NOT_EXIST = 4; // Indicates that a node corresponding to the specified `NodeID` // does not exist. @@ -1533,7 +1492,7 @@ message Error { // Recovery behavior: Caller SHOULD verify that the `NodeID` is // correct and that the node is available and has not been // terminated or deleted before retrying. - NODE_DOES_NOT_EXIST = 6; + NODE_DOES_NOT_EXIST = 5; // Indicates that the specified `NodeID` is not allowed or // understood by the Plugin. More human-readable information MAY @@ -1541,16 +1500,16 @@ message Error { // // Recovery behavior: Caller MUST fix the `NodeID` before // retrying. - INVALID_NODE_ID = 7; + INVALID_NODE_ID = 6; - VOLUME_NOT_ATTACHED_TO_SPECIFIED_NODE = 8; + VOLUME_NOT_ATTACHED_TO_SPECIFIED_NODE = 7; // Indicates that the Plugin does not support the operation // without a `NodeID`. // // Recovery behavior: Caller MUST specify the `NodeID` before // retrying. - NODE_ID_REQUIRED = 9; + NODE_ID_REQUIRED = 8; } ControllerUnpublishVolumeErrorCode error_code = 1; @@ -1624,10 +1583,10 @@ message Error { OPERATION_PENDING_FOR_VOLUME = 1; // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. VOLUME_DOES_NOT_EXIST = 2; @@ -1636,13 +1595,13 @@ message Error { UNSUPPORTED_FS_TYPE = 5; MOUNT_ERROR = 6; - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - INVALID_VOLUME_ID = 7; + INVALID_VOLUME_HANDLE = 7; } NodePublishVolumeErrorCode error_code = 1; @@ -1678,22 +1637,22 @@ message Error { OPERATION_PENDING_FOR_VOLUME = 1; // Indicates that a volume corresponding to the specified - // `VolumeID` does not exist. + // `VolumeHandle` does not exist. // - // Recovery behavior: Caller SHOULD verify that the `VolumeID` is - // correct and that the volume is accessible and has not been + // Recovery behavior: Caller SHOULD verify that the `VolumeHandle` + // is correct and that the volume is accessible and has not been // deleted before retrying with exponential back off. VOLUME_DOES_NOT_EXIST = 2; UNMOUNT_ERROR = 3; - // Indicates that the specified `VolumeID` is not allowed or + // Indicates that the specified `VolumeHandle` is not allowed or // understood by the Plugin. More human-readable information MAY // be provided in the `error_description` field. // - // Recovery behavior: Caller MUST fix the `VolumeID` before + // Recovery behavior: Caller MUST fix the `VolumeHandle` before // retrying. - INVALID_VOLUME_ID = 4; + INVALID_VOLUME_HANDLE = 4; } NodeUnpublishVolumeErrorCode error_code = 1; @@ -1854,7 +1813,7 @@ Supervised plugins MAY be isolated and/or resource-bounded. * Logging configuration flags and/or variables, including working sample configurations. * Default log destination(s) (where do the logs go if no configuration is specified?) * Log lifecycle management ownership and related guidance (size limits, rate limits, rolling, archiving, expunging, etc.) applicable to the logging mechanism embedded within the Plugin. -* Plugins SHOULD NOT write potentially sensitive data to logs (e.g. `VolumeMetadata`). +* Plugins SHOULD NOT write potentially sensitive data to logs (e.g. `Credentials`, `VolumeHandle.Metadata`). ##### Available Services