From 4fb47cd5683c2d10f2fd4abf5002a02b22f41b24 Mon Sep 17 00:00:00 2001 From: Aditya Manthramurthy Date: Mon, 31 Oct 2022 14:52:26 -0700 Subject: [PATCH] fix: update admin IDP APIs to be more RESTful (#15896) --- cmd/admin-handlers-idp-config.go | 249 ++++++++++++++++++++----------- cmd/admin-router.go | 8 +- cmd/api-errors.go | 12 ++ cmd/apierrorcode_string.go | 238 ++++++++++++++--------------- 4 files changed, 296 insertions(+), 211 deletions(-) diff --git a/cmd/admin-handlers-idp-config.go b/cmd/admin-handlers-idp-config.go index 504feaf6a..b355f97b5 100644 --- a/cmd/admin-handlers-idp-config.go +++ b/cmd/admin-handlers-idp-config.go @@ -28,21 +28,16 @@ import ( "github.com/gorilla/mux" "github.com/minio/madmin-go" + "github.com/minio/minio-go/v7/pkg/set" "github.com/minio/minio/internal/config" + cfgldap "github.com/minio/minio/internal/config/identity/ldap" "github.com/minio/minio/internal/config/identity/openid" "github.com/minio/minio/internal/logger" iampolicy "github.com/minio/pkg/iam/policy" "github.com/minio/pkg/ldap" ) -// SetIdentityProviderCfg: -// -// PUT /id-cfg?type=openid&name=dex1 -func (a adminAPIHandlers) SetIdentityProviderCfg(w http.ResponseWriter, r *http.Request) { - ctx := newContext(r, w, "SetIdentityCfg") - - defer logger.AuditLog(ctx, w, r, mustGetClaimsFromToken(r)) - +func (a adminAPIHandlers) addOrUpdateIDPHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, isUpdate bool) { objectAPI, cred := validateAdminReq(ctx, w, r, iampolicy.ConfigUpdateAdminAction) if objectAPI == nil { return @@ -54,6 +49,14 @@ func (a adminAPIHandlers) SetIdentityProviderCfg(w http.ResponseWriter, r *http. return } + // Ensure body content type is opaque to ensure that request body has not + // been interpreted as form data. + contentType := r.Header.Get("Content-Type") + if contentType != "application/octet-stream" { + writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(ErrBadRequest), r.URL) + return + } + password := cred.SecretKey reqBytes, err := madmin.DecryptData(password, io.LimitReader(r.Body, r.ContentLength)) if err != nil { @@ -68,43 +71,42 @@ func (a adminAPIHandlers) SetIdentityProviderCfg(w http.ResponseWriter, r *http. return } - var cfgDataBuilder strings.Builder + var subSys string switch idpCfgType { case madmin.OpenidIDPCfg: - fmt.Fprintf(&cfgDataBuilder, "identity_openid") + subSys = madmin.IdentityOpenIDSubSys case madmin.LDAPIDPCfg: - fmt.Fprintf(&cfgDataBuilder, "identity_ldap") + subSys = madmin.IdentityLDAPSubSys } - // Ensure body content type is opaque. - contentType := r.Header.Get("Content-Type") - if contentType != "application/octet-stream" { - writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(ErrBadRequest), r.URL) - return - } - - // Subsystem configuration name could be empty. cfgName := mux.Vars(r)["name"] + cfgTarget := madmin.Default if cfgName != "" { - if idpCfgType == madmin.LDAPIDPCfg { - // LDAP does not support multiple configurations. So this must be - // empty. + cfgTarget = cfgName + if idpCfgType == madmin.LDAPIDPCfg && cfgName != madmin.Default { + // LDAP does not support multiple configurations. So cfgName must be + // empty or `madmin.Default`. writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(ErrBadRequest), r.URL) return } - - fmt.Fprintf(&cfgDataBuilder, "%s%s", config.SubSystemSeparator, cfgName) } - fmt.Fprintf(&cfgDataBuilder, "%s%s", config.KvSpaceSeparator, string(reqBytes)) - - cfgData := cfgDataBuilder.String() - subSys, _, _, err := config.GetSubSys(cfgData) - if err != nil { - writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) + // Check that this is a valid Create vs Update API call. + s := globalServerConfig.Clone() + if apiErrCode := handleCreateUpdateValidation(s, subSys, cfgTarget, isUpdate); apiErrCode != ErrNone { + writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(apiErrCode), r.URL) return } + cfgData := "" + { + tgtSuffix := "" + if cfgTarget != madmin.Default { + tgtSuffix = config.SubSystemSeparator + cfgTarget + } + cfgData = subSys + tgtSuffix + config.KvSpaceSeparator + string(reqBytes) + } + cfg, err := readServerConfig(ctx, objectAPI) if err != nil { writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) @@ -153,79 +155,86 @@ func (a adminAPIHandlers) SetIdentityProviderCfg(w http.ResponseWriter, r *http. writeSuccessResponseHeadersOnly(w) } -// GetIdentityProviderCfg: -// -// GET /id-cfg?type=openid&name=dex_test -// -// GetIdentityProviderCfg returns a list of configured IDPs on the server if -// name is empty. If name is non-empty, returns the configuration details for -// the IDP of the given type and configuration name. The configuration name for -// the default ("un-named") configuration target is `_`. -func (a adminAPIHandlers) GetIdentityProviderCfg(w http.ResponseWriter, r *http.Request) { - ctx := newContext(r, w, "GetIdentityProviderCfg") +func handleCreateUpdateValidation(s config.Config, subSys, cfgTarget string, isUpdate bool) APIErrorCode { + if cfgTarget != madmin.Default { + // This cannot give an error at this point. + subSysTargets, _ := s.GetAvailableTargets(subSys) + subSysTargetsSet := set.CreateStringSet(subSysTargets...) + if isUpdate && !subSysTargetsSet.Contains(cfgTarget) { + return ErrAdminConfigIDPCfgNameDoesNotExist + } + if !isUpdate && subSysTargetsSet.Contains(cfgTarget) { + return ErrAdminConfigIDPCfgNameAlreadyExists + } + return ErrNone + } + + // For the default configuration name, since it will always be an available + // target, we need to check if a configuration value has been set previously + // to figure out if this is a valid create or update API call. + + // This cannot really error (FIXME: improve the type for GetConfigInfo) + var cfgInfos []madmin.IDPCfgInfo + switch subSys { + case madmin.IdentityOpenIDSubSys: + cfgInfos, _ = globalOpenIDConfig.GetConfigInfo(s, cfgTarget) + case madmin.IdentityLDAPSubSys: + cfgInfos, _ = globalLDAPConfig.GetConfigInfo(s, cfgTarget) + } + + if len(cfgInfos) > 0 && !isUpdate { + return ErrAdminConfigIDPCfgNameAlreadyExists + } + if len(cfgInfos) == 0 && isUpdate { + return ErrAdminConfigIDPCfgNameDoesNotExist + } + return ErrNone +} + +// AddIdentityProviderCfg: adds a new IDP config for openid/ldap. +// +// PUT /idp-cfg/openid/dex1 -> create named config `dex1` +// +// PUT /idp-cfg/openid/_ -> create (default) named config `_` +func (a adminAPIHandlers) AddIdentityProviderCfg(w http.ResponseWriter, r *http.Request) { + ctx := newContext(r, w, "AddIdentityProviderCfg") + defer logger.AuditLog(ctx, w, r, mustGetClaimsFromToken(r)) + + a.addOrUpdateIDPHandler(ctx, w, r, false) +} + +// UpdateIdentityProviderCfg: updates an existing IDP config for openid/ldap. +// +// PATCH /idp-cfg/openid/dex1 -> update named config `dex1` +// +// PATCH /idp-cfg/openid/_ -> update (default) named config `_` +func (a adminAPIHandlers) UpdateIdentityProviderCfg(w http.ResponseWriter, r *http.Request) { + ctx := newContext(r, w, "UpdateIdentityProviderCfg") + defer logger.AuditLog(ctx, w, r, mustGetClaimsFromToken(r)) + + a.addOrUpdateIDPHandler(ctx, w, r, true) +} + +// ListIdentityProviderCfg: +// +// GET /idp-cfg/openid -> lists openid provider configs. +func (a adminAPIHandlers) ListIdentityProviderCfg(w http.ResponseWriter, r *http.Request) { + ctx := newContext(r, w, "ListIdentityProviderCfg") defer logger.AuditLog(ctx, w, r, mustGetClaimsFromToken(r)) objectAPI, cred := validateAdminReq(ctx, w, r, iampolicy.ConfigUpdateAdminAction) if objectAPI == nil { return } - - idpCfgType := mux.Vars(r)["type"] - cfgName := r.Form.Get("name") password := cred.SecretKey + idpCfgType := mux.Vars(r)["type"] if !madmin.ValidIDPConfigTypes.Contains(idpCfgType) { writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(ErrAdminConfigInvalidIDPType), r.URL) return } - // If no cfgName is provided, we list. - if cfgName == "" { - a.listIdentityProviders(ctx, w, r, idpCfgType, password) - return - } - - cfg := globalServerConfig.Clone() - var cfgInfos []madmin.IDPCfgInfo - var err error - switch idpCfgType { - case madmin.OpenidIDPCfg: - cfgInfos, err = globalOpenIDConfig.GetConfigInfo(cfg, cfgName) - case madmin.LDAPIDPCfg: - cfgInfos, err = globalLDAPConfig.GetConfigInfo(cfg, cfgName) - } - if err != nil { - if errors.Is(err, openid.ErrProviderConfigNotFound) { - writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(ErrAdminNoSuchConfigTarget), r.URL) - return - } - - writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) - return - } - - res := madmin.IDPConfig{ - Type: idpCfgType, - Name: cfgName, - Info: cfgInfos, - } - data, err := json.Marshal(res) - if err != nil { - writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) - return - } - - econfigData, err := madmin.EncryptData(password, data) - if err != nil { - writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) - return - } - - writeSuccessResponseJSON(w, econfigData) -} - -func (a adminAPIHandlers) listIdentityProviders(ctx context.Context, w http.ResponseWriter, r *http.Request, idpCfgType, password string) { var cfgList []madmin.IDPListItem var err error switch idpCfgType { @@ -261,9 +270,69 @@ func (a adminAPIHandlers) listIdentityProviders(ctx context.Context, w http.Resp writeSuccessResponseJSON(w, econfigData) } +// GetIdentityProviderCfg: +// +// GET /idp-cfg/openid/dex_test +func (a adminAPIHandlers) GetIdentityProviderCfg(w http.ResponseWriter, r *http.Request) { + ctx := newContext(r, w, "GetIdentityProviderCfg") + defer logger.AuditLog(ctx, w, r, mustGetClaimsFromToken(r)) + + objectAPI, cred := validateAdminReq(ctx, w, r, iampolicy.ConfigUpdateAdminAction) + if objectAPI == nil { + return + } + + idpCfgType := mux.Vars(r)["type"] + cfgName := mux.Vars(r)["name"] + password := cred.SecretKey + + if !madmin.ValidIDPConfigTypes.Contains(idpCfgType) { + writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(ErrAdminConfigInvalidIDPType), r.URL) + return + } + + cfg := globalServerConfig.Clone() + var cfgInfos []madmin.IDPCfgInfo + var err error + switch idpCfgType { + case madmin.OpenidIDPCfg: + cfgInfos, err = globalOpenIDConfig.GetConfigInfo(cfg, cfgName) + case madmin.LDAPIDPCfg: + cfgInfos, err = globalLDAPConfig.GetConfigInfo(cfg, cfgName) + } + if err != nil { + if errors.Is(err, openid.ErrProviderConfigNotFound) || errors.Is(err, cfgldap.ErrProviderConfigNotFound) { + writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(ErrAdminNoSuchConfigTarget), r.URL) + return + } + + writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) + return + } + + res := madmin.IDPConfig{ + Type: idpCfgType, + Name: cfgName, + Info: cfgInfos, + } + data, err := json.Marshal(res) + if err != nil { + writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) + return + } + + econfigData, err := madmin.EncryptData(password, data) + if err != nil { + writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) + return + } + + writeSuccessResponseJSON(w, econfigData) +} + // DeleteIdentityProviderCfg: // -// DELETE /id-cfg?type=openid&name=dex_test +// DELETE /idp-cfg/openid/dex_test func (a adminAPIHandlers) DeleteIdentityProviderCfg(w http.ResponseWriter, r *http.Request) { ctx := newContext(r, w, "DeleteIdentityProviderCfg") diff --git a/cmd/admin-router.go b/cmd/admin-router.go index bd669cede..41a8b80b9 100644 --- a/cmd/admin-router.go +++ b/cmd/admin-router.go @@ -184,9 +184,11 @@ func registerAdminRouter(router *mux.Router, enableConfigOps bool) { adminRouter.Methods(http.MethodPut).Path(adminVersion + "/import-iam").HandlerFunc(httpTraceHdrs(adminAPI.ImportIAM)) // IDentity Provider configuration APIs - adminRouter.Methods(http.MethodPut).Path(adminVersion+"/idp-config").HandlerFunc(gz(httpTraceHdrs(adminAPI.SetIdentityProviderCfg))).Queries("type", "{type:.*}").Queries("name", "{name:.*}") - adminRouter.Methods(http.MethodGet).Path(adminVersion+"/idp-config").HandlerFunc(gz(httpTraceHdrs(adminAPI.GetIdentityProviderCfg))).Queries("type", "{type:.*}") - adminRouter.Methods(http.MethodDelete).Path(adminVersion+"/idp-config").HandlerFunc(gz(httpTraceHdrs(adminAPI.DeleteIdentityProviderCfg))).Queries("type", "{type:.*}").Queries("name", "{name:.*}") + adminRouter.Methods(http.MethodPut).Path(adminVersion + "/idp-config/{type}/{name}").HandlerFunc(gz(httpTraceHdrs(adminAPI.AddIdentityProviderCfg))) + adminRouter.Methods(http.MethodPost).Path(adminVersion + "/idp-config/{type}/{name}").HandlerFunc(gz(httpTraceHdrs(adminAPI.UpdateIdentityProviderCfg))) + adminRouter.Methods(http.MethodGet).Path(adminVersion + "/idp-config/{type}").HandlerFunc(gz(httpTraceHdrs(adminAPI.ListIdentityProviderCfg))) + adminRouter.Methods(http.MethodGet).Path(adminVersion + "/idp-config/{type}/{name}").HandlerFunc(gz(httpTraceHdrs(adminAPI.GetIdentityProviderCfg))) + adminRouter.Methods(http.MethodDelete).Path(adminVersion + "/idp-config/{type}/{name}").HandlerFunc(gz(httpTraceHdrs(adminAPI.DeleteIdentityProviderCfg))) // -- END IAM APIs -- diff --git a/cmd/api-errors.go b/cmd/api-errors.go index c24e72d6d..d1615fc24 100644 --- a/cmd/api-errors.go +++ b/cmd/api-errors.go @@ -277,6 +277,8 @@ const ( ErrAdminConfigDuplicateKeys ErrAdminConfigInvalidIDPType ErrAdminConfigLDAPValidation + ErrAdminConfigIDPCfgNameAlreadyExists + ErrAdminConfigIDPCfgNameDoesNotExist ErrAdminCredentialsMismatch ErrInsecureClientRequest ErrObjectTampered @@ -1305,6 +1307,16 @@ var errorCodes = errorCodeMap{ Description: "LDAP Configuration validation failed", HTTPStatusCode: http.StatusBadRequest, }, + ErrAdminConfigIDPCfgNameAlreadyExists: { + Code: "XMinioAdminConfigIDPCfgNameAlreadyExists", + Description: "An IDP configuration with the given name aleady exists", + HTTPStatusCode: http.StatusBadRequest, + }, + ErrAdminConfigIDPCfgNameDoesNotExist: { + Code: "XMinioAdminConfigIDPCfgNameDoesNotExist", + Description: "No such IDP configuration exists", + HTTPStatusCode: http.StatusBadRequest, + }, ErrAdminConfigNotificationTargetsFailed: { Code: "XMinioAdminNotificationTargetsTestFailed", Description: "Configuration update failed due an unsuccessful attempt to connect to one or more notification servers", diff --git a/cmd/apierrorcode_string.go b/cmd/apierrorcode_string.go index 6dff7fa8f..9f509a369 100644 --- a/cmd/apierrorcode_string.go +++ b/cmd/apierrorcode_string.go @@ -192,127 +192,129 @@ func _() { _ = x[ErrAdminConfigDuplicateKeys-181] _ = x[ErrAdminConfigInvalidIDPType-182] _ = x[ErrAdminConfigLDAPValidation-183] - _ = x[ErrAdminCredentialsMismatch-184] - _ = x[ErrInsecureClientRequest-185] - _ = x[ErrObjectTampered-186] - _ = x[ErrSiteReplicationInvalidRequest-187] - _ = x[ErrSiteReplicationPeerResp-188] - _ = x[ErrSiteReplicationBackendIssue-189] - _ = x[ErrSiteReplicationServiceAccountError-190] - _ = x[ErrSiteReplicationBucketConfigError-191] - _ = x[ErrSiteReplicationBucketMetaError-192] - _ = x[ErrSiteReplicationIAMError-193] - _ = x[ErrSiteReplicationConfigMissing-194] - _ = x[ErrAdminRebalanceAlreadyStarted-195] - _ = x[ErrAdminRebalanceNotStarted-196] - _ = x[ErrAdminBucketQuotaExceeded-197] - _ = x[ErrAdminNoSuchQuotaConfiguration-198] - _ = x[ErrHealNotImplemented-199] - _ = x[ErrHealNoSuchProcess-200] - _ = x[ErrHealInvalidClientToken-201] - _ = x[ErrHealMissingBucket-202] - _ = x[ErrHealAlreadyRunning-203] - _ = x[ErrHealOverlappingPaths-204] - _ = x[ErrIncorrectContinuationToken-205] - _ = x[ErrEmptyRequestBody-206] - _ = x[ErrUnsupportedFunction-207] - _ = x[ErrInvalidExpressionType-208] - _ = x[ErrBusy-209] - _ = x[ErrUnauthorizedAccess-210] - _ = x[ErrExpressionTooLong-211] - _ = x[ErrIllegalSQLFunctionArgument-212] - _ = x[ErrInvalidKeyPath-213] - _ = x[ErrInvalidCompressionFormat-214] - _ = x[ErrInvalidFileHeaderInfo-215] - _ = x[ErrInvalidJSONType-216] - _ = x[ErrInvalidQuoteFields-217] - _ = x[ErrInvalidRequestParameter-218] - _ = x[ErrInvalidDataType-219] - _ = x[ErrInvalidTextEncoding-220] - _ = x[ErrInvalidDataSource-221] - _ = x[ErrInvalidTableAlias-222] - _ = x[ErrMissingRequiredParameter-223] - _ = x[ErrObjectSerializationConflict-224] - _ = x[ErrUnsupportedSQLOperation-225] - _ = x[ErrUnsupportedSQLStructure-226] - _ = x[ErrUnsupportedSyntax-227] - _ = x[ErrUnsupportedRangeHeader-228] - _ = x[ErrLexerInvalidChar-229] - _ = x[ErrLexerInvalidOperator-230] - _ = x[ErrLexerInvalidLiteral-231] - _ = x[ErrLexerInvalidIONLiteral-232] - _ = x[ErrParseExpectedDatePart-233] - _ = x[ErrParseExpectedKeyword-234] - _ = x[ErrParseExpectedTokenType-235] - _ = x[ErrParseExpected2TokenTypes-236] - _ = x[ErrParseExpectedNumber-237] - _ = x[ErrParseExpectedRightParenBuiltinFunctionCall-238] - _ = x[ErrParseExpectedTypeName-239] - _ = x[ErrParseExpectedWhenClause-240] - _ = x[ErrParseUnsupportedToken-241] - _ = x[ErrParseUnsupportedLiteralsGroupBy-242] - _ = x[ErrParseExpectedMember-243] - _ = x[ErrParseUnsupportedSelect-244] - _ = x[ErrParseUnsupportedCase-245] - _ = x[ErrParseUnsupportedCaseClause-246] - _ = x[ErrParseUnsupportedAlias-247] - _ = x[ErrParseUnsupportedSyntax-248] - _ = x[ErrParseUnknownOperator-249] - _ = x[ErrParseMissingIdentAfterAt-250] - _ = x[ErrParseUnexpectedOperator-251] - _ = x[ErrParseUnexpectedTerm-252] - _ = x[ErrParseUnexpectedToken-253] - _ = x[ErrParseUnexpectedKeyword-254] - _ = x[ErrParseExpectedExpression-255] - _ = x[ErrParseExpectedLeftParenAfterCast-256] - _ = x[ErrParseExpectedLeftParenValueConstructor-257] - _ = x[ErrParseExpectedLeftParenBuiltinFunctionCall-258] - _ = x[ErrParseExpectedArgumentDelimiter-259] - _ = x[ErrParseCastArity-260] - _ = x[ErrParseInvalidTypeParam-261] - _ = x[ErrParseEmptySelect-262] - _ = x[ErrParseSelectMissingFrom-263] - _ = x[ErrParseExpectedIdentForGroupName-264] - _ = x[ErrParseExpectedIdentForAlias-265] - _ = x[ErrParseUnsupportedCallWithStar-266] - _ = x[ErrParseNonUnaryAgregateFunctionCall-267] - _ = x[ErrParseMalformedJoin-268] - _ = x[ErrParseExpectedIdentForAt-269] - _ = x[ErrParseAsteriskIsNotAloneInSelectList-270] - _ = x[ErrParseCannotMixSqbAndWildcardInSelectList-271] - _ = x[ErrParseInvalidContextForWildcardInSelectList-272] - _ = x[ErrIncorrectSQLFunctionArgumentType-273] - _ = x[ErrValueParseFailure-274] - _ = x[ErrEvaluatorInvalidArguments-275] - _ = x[ErrIntegerOverflow-276] - _ = x[ErrLikeInvalidInputs-277] - _ = x[ErrCastFailed-278] - _ = x[ErrInvalidCast-279] - _ = x[ErrEvaluatorInvalidTimestampFormatPattern-280] - _ = x[ErrEvaluatorInvalidTimestampFormatPatternSymbolForParsing-281] - _ = x[ErrEvaluatorTimestampFormatPatternDuplicateFields-282] - _ = x[ErrEvaluatorTimestampFormatPatternHourClockAmPmMismatch-283] - _ = x[ErrEvaluatorUnterminatedTimestampFormatPatternToken-284] - _ = x[ErrEvaluatorInvalidTimestampFormatPatternToken-285] - _ = x[ErrEvaluatorInvalidTimestampFormatPatternSymbol-286] - _ = x[ErrEvaluatorBindingDoesNotExist-287] - _ = x[ErrMissingHeaders-288] - _ = x[ErrInvalidColumnIndex-289] - _ = x[ErrAdminConfigNotificationTargetsFailed-290] - _ = x[ErrAdminProfilerNotEnabled-291] - _ = x[ErrInvalidDecompressedSize-292] - _ = x[ErrAddUserInvalidArgument-293] - _ = x[ErrAdminResourceInvalidArgument-294] - _ = x[ErrAdminAccountNotEligible-295] - _ = x[ErrAccountNotEligible-296] - _ = x[ErrAdminServiceAccountNotFound-297] - _ = x[ErrPostPolicyConditionInvalidFormat-298] - _ = x[ErrInvalidChecksum-299] + _ = x[ErrAdminConfigIDPCfgNameAlreadyExists-184] + _ = x[ErrAdminConfigIDPCfgNameDoesNotExist-185] + _ = x[ErrAdminCredentialsMismatch-186] + _ = x[ErrInsecureClientRequest-187] + _ = x[ErrObjectTampered-188] + _ = x[ErrSiteReplicationInvalidRequest-189] + _ = x[ErrSiteReplicationPeerResp-190] + _ = x[ErrSiteReplicationBackendIssue-191] + _ = x[ErrSiteReplicationServiceAccountError-192] + _ = x[ErrSiteReplicationBucketConfigError-193] + _ = x[ErrSiteReplicationBucketMetaError-194] + _ = x[ErrSiteReplicationIAMError-195] + _ = x[ErrSiteReplicationConfigMissing-196] + _ = x[ErrAdminRebalanceAlreadyStarted-197] + _ = x[ErrAdminRebalanceNotStarted-198] + _ = x[ErrAdminBucketQuotaExceeded-199] + _ = x[ErrAdminNoSuchQuotaConfiguration-200] + _ = x[ErrHealNotImplemented-201] + _ = x[ErrHealNoSuchProcess-202] + _ = x[ErrHealInvalidClientToken-203] + _ = x[ErrHealMissingBucket-204] + _ = x[ErrHealAlreadyRunning-205] + _ = x[ErrHealOverlappingPaths-206] + _ = x[ErrIncorrectContinuationToken-207] + _ = x[ErrEmptyRequestBody-208] + _ = x[ErrUnsupportedFunction-209] + _ = x[ErrInvalidExpressionType-210] + _ = x[ErrBusy-211] + _ = x[ErrUnauthorizedAccess-212] + _ = x[ErrExpressionTooLong-213] + _ = x[ErrIllegalSQLFunctionArgument-214] + _ = x[ErrInvalidKeyPath-215] + _ = x[ErrInvalidCompressionFormat-216] + _ = x[ErrInvalidFileHeaderInfo-217] + _ = x[ErrInvalidJSONType-218] + _ = x[ErrInvalidQuoteFields-219] + _ = x[ErrInvalidRequestParameter-220] + _ = x[ErrInvalidDataType-221] + _ = x[ErrInvalidTextEncoding-222] + _ = x[ErrInvalidDataSource-223] + _ = x[ErrInvalidTableAlias-224] + _ = x[ErrMissingRequiredParameter-225] + _ = x[ErrObjectSerializationConflict-226] + _ = x[ErrUnsupportedSQLOperation-227] + _ = x[ErrUnsupportedSQLStructure-228] + _ = x[ErrUnsupportedSyntax-229] + _ = x[ErrUnsupportedRangeHeader-230] + _ = x[ErrLexerInvalidChar-231] + _ = x[ErrLexerInvalidOperator-232] + _ = x[ErrLexerInvalidLiteral-233] + _ = x[ErrLexerInvalidIONLiteral-234] + _ = x[ErrParseExpectedDatePart-235] + _ = x[ErrParseExpectedKeyword-236] + _ = x[ErrParseExpectedTokenType-237] + _ = x[ErrParseExpected2TokenTypes-238] + _ = x[ErrParseExpectedNumber-239] + _ = x[ErrParseExpectedRightParenBuiltinFunctionCall-240] + _ = x[ErrParseExpectedTypeName-241] + _ = x[ErrParseExpectedWhenClause-242] + _ = x[ErrParseUnsupportedToken-243] + _ = x[ErrParseUnsupportedLiteralsGroupBy-244] + _ = x[ErrParseExpectedMember-245] + _ = x[ErrParseUnsupportedSelect-246] + _ = x[ErrParseUnsupportedCase-247] + _ = x[ErrParseUnsupportedCaseClause-248] + _ = x[ErrParseUnsupportedAlias-249] + _ = x[ErrParseUnsupportedSyntax-250] + _ = x[ErrParseUnknownOperator-251] + _ = x[ErrParseMissingIdentAfterAt-252] + _ = x[ErrParseUnexpectedOperator-253] + _ = x[ErrParseUnexpectedTerm-254] + _ = x[ErrParseUnexpectedToken-255] + _ = x[ErrParseUnexpectedKeyword-256] + _ = x[ErrParseExpectedExpression-257] + _ = x[ErrParseExpectedLeftParenAfterCast-258] + _ = x[ErrParseExpectedLeftParenValueConstructor-259] + _ = x[ErrParseExpectedLeftParenBuiltinFunctionCall-260] + _ = x[ErrParseExpectedArgumentDelimiter-261] + _ = x[ErrParseCastArity-262] + _ = x[ErrParseInvalidTypeParam-263] + _ = x[ErrParseEmptySelect-264] + _ = x[ErrParseSelectMissingFrom-265] + _ = x[ErrParseExpectedIdentForGroupName-266] + _ = x[ErrParseExpectedIdentForAlias-267] + _ = x[ErrParseUnsupportedCallWithStar-268] + _ = x[ErrParseNonUnaryAgregateFunctionCall-269] + _ = x[ErrParseMalformedJoin-270] + _ = x[ErrParseExpectedIdentForAt-271] + _ = x[ErrParseAsteriskIsNotAloneInSelectList-272] + _ = x[ErrParseCannotMixSqbAndWildcardInSelectList-273] + _ = x[ErrParseInvalidContextForWildcardInSelectList-274] + _ = x[ErrIncorrectSQLFunctionArgumentType-275] + _ = x[ErrValueParseFailure-276] + _ = x[ErrEvaluatorInvalidArguments-277] + _ = x[ErrIntegerOverflow-278] + _ = x[ErrLikeInvalidInputs-279] + _ = x[ErrCastFailed-280] + _ = x[ErrInvalidCast-281] + _ = x[ErrEvaluatorInvalidTimestampFormatPattern-282] + _ = x[ErrEvaluatorInvalidTimestampFormatPatternSymbolForParsing-283] + _ = x[ErrEvaluatorTimestampFormatPatternDuplicateFields-284] + _ = x[ErrEvaluatorTimestampFormatPatternHourClockAmPmMismatch-285] + _ = x[ErrEvaluatorUnterminatedTimestampFormatPatternToken-286] + _ = x[ErrEvaluatorInvalidTimestampFormatPatternToken-287] + _ = x[ErrEvaluatorInvalidTimestampFormatPatternSymbol-288] + _ = x[ErrEvaluatorBindingDoesNotExist-289] + _ = x[ErrMissingHeaders-290] + _ = x[ErrInvalidColumnIndex-291] + _ = x[ErrAdminConfigNotificationTargetsFailed-292] + _ = x[ErrAdminProfilerNotEnabled-293] + _ = x[ErrInvalidDecompressedSize-294] + _ = x[ErrAddUserInvalidArgument-295] + _ = x[ErrAdminResourceInvalidArgument-296] + _ = x[ErrAdminAccountNotEligible-297] + _ = x[ErrAccountNotEligible-298] + _ = x[ErrAdminServiceAccountNotFound-299] + _ = x[ErrPostPolicyConditionInvalidFormat-300] + _ = x[ErrInvalidChecksum-301] } -const _APIErrorCode_name = "NoneAccessDeniedBadDigestEntityTooSmallEntityTooLargePolicyTooLargeIncompleteBodyInternalErrorInvalidAccessKeyIDAccessKeyDisabledInvalidBucketNameInvalidDigestInvalidRangeInvalidRangePartNumberInvalidCopyPartRangeInvalidCopyPartRangeSourceInvalidMaxKeysInvalidEncodingMethodInvalidMaxUploadsInvalidMaxPartsInvalidPartNumberMarkerInvalidPartNumberInvalidRequestBodyInvalidCopySourceInvalidMetadataDirectiveInvalidCopyDestInvalidPolicyDocumentInvalidObjectStateMalformedXMLMissingContentLengthMissingContentMD5MissingRequestBodyErrorMissingSecurityHeaderNoSuchBucketNoSuchBucketPolicyNoSuchBucketLifecycleNoSuchLifecycleConfigurationInvalidLifecycleWithObjectLockNoSuchBucketSSEConfigNoSuchCORSConfigurationNoSuchWebsiteConfigurationReplicationConfigurationNotFoundErrorRemoteDestinationNotFoundErrorReplicationDestinationMissingLockRemoteTargetNotFoundErrorReplicationRemoteConnectionErrorReplicationBandwidthLimitErrorBucketRemoteIdenticalToSourceBucketRemoteAlreadyExistsBucketRemoteLabelInUseBucketRemoteArnTypeInvalidBucketRemoteArnInvalidBucketRemoteRemoveDisallowedRemoteTargetNotVersionedErrorReplicationSourceNotVersionedErrorReplicationNeedsVersioningErrorReplicationBucketNeedsVersioningErrorReplicationDenyEditErrorReplicationNoExistingObjectsObjectRestoreAlreadyInProgressNoSuchKeyNoSuchUploadInvalidVersionIDNoSuchVersionNotImplementedPreconditionFailedRequestTimeTooSkewedSignatureDoesNotMatchMethodNotAllowedInvalidPartInvalidPartOrderAuthorizationHeaderMalformedMalformedPOSTRequestPOSTFileRequiredSignatureVersionNotSupportedBucketNotEmptyAllAccessDisabledMalformedPolicyMissingFieldsMissingCredTagCredMalformedInvalidRegionInvalidServiceS3InvalidServiceSTSInvalidRequestVersionMissingSignTagMissingSignHeadersTagMalformedDateMalformedPresignedDateMalformedCredentialDateMalformedCredentialRegionMalformedExpiresNegativeExpiresAuthHeaderEmptyExpiredPresignRequestRequestNotReadyYetUnsignedHeadersMissingDateHeaderInvalidQuerySignatureAlgoInvalidQueryParamsBucketAlreadyOwnedByYouInvalidDurationBucketAlreadyExistsTooManyBucketsMetadataTooLargeUnsupportedMetadataMaximumExpiresSlowDownInvalidPrefixMarkerBadRequestKeyTooLongErrorInvalidBucketObjectLockConfigurationObjectLockConfigurationNotFoundObjectLockConfigurationNotAllowedNoSuchObjectLockConfigurationObjectLockedInvalidRetentionDatePastObjectLockRetainDateUnknownWORMModeDirectiveBucketTaggingNotFoundObjectLockInvalidHeadersInvalidTagDirectiveInvalidEncryptionMethodInvalidEncryptionKeyIDInsecureSSECustomerRequestSSEMultipartEncryptedSSEEncryptedObjectInvalidEncryptionParametersInvalidSSECustomerAlgorithmInvalidSSECustomerKeyMissingSSECustomerKeyMissingSSECustomerKeyMD5SSECustomerKeyMD5MismatchInvalidSSECustomerParametersIncompatibleEncryptionMethodKMSNotConfiguredKMSKeyNotFoundExceptionNoAccessKeyInvalidTokenEventNotificationARNNotificationRegionNotificationOverlappingFilterNotificationFilterNameInvalidFilterNamePrefixFilterNameSuffixFilterValueInvalidOverlappingConfigsUnsupportedNotificationContentSHA256MismatchContentChecksumMismatchReadQuorumWriteQuorumStorageFullRequestBodyParseObjectExistsAsDirectoryInvalidObjectNameInvalidObjectNamePrefixSlashInvalidResourceNameServerNotInitializedOperationTimedOutClientDisconnectedOperationMaxedOutInvalidRequestTransitionStorageClassNotFoundErrorInvalidStorageClassBackendDownMalformedJSONAdminNoSuchUserAdminNoSuchGroupAdminGroupNotEmptyAdminNoSuchJobAdminNoSuchPolicyAdminInvalidArgumentAdminInvalidAccessKeyAdminInvalidSecretKeyAdminConfigNoQuorumAdminConfigTooLargeAdminConfigBadJSONAdminNoSuchConfigTargetAdminConfigEnvOverriddenAdminConfigDuplicateKeysAdminConfigInvalidIDPTypeAdminConfigLDAPValidationAdminCredentialsMismatchInsecureClientRequestObjectTamperedSiteReplicationInvalidRequestSiteReplicationPeerRespSiteReplicationBackendIssueSiteReplicationServiceAccountErrorSiteReplicationBucketConfigErrorSiteReplicationBucketMetaErrorSiteReplicationIAMErrorSiteReplicationConfigMissingAdminRebalanceAlreadyStartedAdminRebalanceNotStartedAdminBucketQuotaExceededAdminNoSuchQuotaConfigurationHealNotImplementedHealNoSuchProcessHealInvalidClientTokenHealMissingBucketHealAlreadyRunningHealOverlappingPathsIncorrectContinuationTokenEmptyRequestBodyUnsupportedFunctionInvalidExpressionTypeBusyUnauthorizedAccessExpressionTooLongIllegalSQLFunctionArgumentInvalidKeyPathInvalidCompressionFormatInvalidFileHeaderInfoInvalidJSONTypeInvalidQuoteFieldsInvalidRequestParameterInvalidDataTypeInvalidTextEncodingInvalidDataSourceInvalidTableAliasMissingRequiredParameterObjectSerializationConflictUnsupportedSQLOperationUnsupportedSQLStructureUnsupportedSyntaxUnsupportedRangeHeaderLexerInvalidCharLexerInvalidOperatorLexerInvalidLiteralLexerInvalidIONLiteralParseExpectedDatePartParseExpectedKeywordParseExpectedTokenTypeParseExpected2TokenTypesParseExpectedNumberParseExpectedRightParenBuiltinFunctionCallParseExpectedTypeNameParseExpectedWhenClauseParseUnsupportedTokenParseUnsupportedLiteralsGroupByParseExpectedMemberParseUnsupportedSelectParseUnsupportedCaseParseUnsupportedCaseClauseParseUnsupportedAliasParseUnsupportedSyntaxParseUnknownOperatorParseMissingIdentAfterAtParseUnexpectedOperatorParseUnexpectedTermParseUnexpectedTokenParseUnexpectedKeywordParseExpectedExpressionParseExpectedLeftParenAfterCastParseExpectedLeftParenValueConstructorParseExpectedLeftParenBuiltinFunctionCallParseExpectedArgumentDelimiterParseCastArityParseInvalidTypeParamParseEmptySelectParseSelectMissingFromParseExpectedIdentForGroupNameParseExpectedIdentForAliasParseUnsupportedCallWithStarParseNonUnaryAgregateFunctionCallParseMalformedJoinParseExpectedIdentForAtParseAsteriskIsNotAloneInSelectListParseCannotMixSqbAndWildcardInSelectListParseInvalidContextForWildcardInSelectListIncorrectSQLFunctionArgumentTypeValueParseFailureEvaluatorInvalidArgumentsIntegerOverflowLikeInvalidInputsCastFailedInvalidCastEvaluatorInvalidTimestampFormatPatternEvaluatorInvalidTimestampFormatPatternSymbolForParsingEvaluatorTimestampFormatPatternDuplicateFieldsEvaluatorTimestampFormatPatternHourClockAmPmMismatchEvaluatorUnterminatedTimestampFormatPatternTokenEvaluatorInvalidTimestampFormatPatternTokenEvaluatorInvalidTimestampFormatPatternSymbolEvaluatorBindingDoesNotExistMissingHeadersInvalidColumnIndexAdminConfigNotificationTargetsFailedAdminProfilerNotEnabledInvalidDecompressedSizeAddUserInvalidArgumentAdminResourceInvalidArgumentAdminAccountNotEligibleAccountNotEligibleAdminServiceAccountNotFoundPostPolicyConditionInvalidFormatInvalidChecksum" +const _APIErrorCode_name = "NoneAccessDeniedBadDigestEntityTooSmallEntityTooLargePolicyTooLargeIncompleteBodyInternalErrorInvalidAccessKeyIDAccessKeyDisabledInvalidBucketNameInvalidDigestInvalidRangeInvalidRangePartNumberInvalidCopyPartRangeInvalidCopyPartRangeSourceInvalidMaxKeysInvalidEncodingMethodInvalidMaxUploadsInvalidMaxPartsInvalidPartNumberMarkerInvalidPartNumberInvalidRequestBodyInvalidCopySourceInvalidMetadataDirectiveInvalidCopyDestInvalidPolicyDocumentInvalidObjectStateMalformedXMLMissingContentLengthMissingContentMD5MissingRequestBodyErrorMissingSecurityHeaderNoSuchBucketNoSuchBucketPolicyNoSuchBucketLifecycleNoSuchLifecycleConfigurationInvalidLifecycleWithObjectLockNoSuchBucketSSEConfigNoSuchCORSConfigurationNoSuchWebsiteConfigurationReplicationConfigurationNotFoundErrorRemoteDestinationNotFoundErrorReplicationDestinationMissingLockRemoteTargetNotFoundErrorReplicationRemoteConnectionErrorReplicationBandwidthLimitErrorBucketRemoteIdenticalToSourceBucketRemoteAlreadyExistsBucketRemoteLabelInUseBucketRemoteArnTypeInvalidBucketRemoteArnInvalidBucketRemoteRemoveDisallowedRemoteTargetNotVersionedErrorReplicationSourceNotVersionedErrorReplicationNeedsVersioningErrorReplicationBucketNeedsVersioningErrorReplicationDenyEditErrorReplicationNoExistingObjectsObjectRestoreAlreadyInProgressNoSuchKeyNoSuchUploadInvalidVersionIDNoSuchVersionNotImplementedPreconditionFailedRequestTimeTooSkewedSignatureDoesNotMatchMethodNotAllowedInvalidPartInvalidPartOrderAuthorizationHeaderMalformedMalformedPOSTRequestPOSTFileRequiredSignatureVersionNotSupportedBucketNotEmptyAllAccessDisabledMalformedPolicyMissingFieldsMissingCredTagCredMalformedInvalidRegionInvalidServiceS3InvalidServiceSTSInvalidRequestVersionMissingSignTagMissingSignHeadersTagMalformedDateMalformedPresignedDateMalformedCredentialDateMalformedCredentialRegionMalformedExpiresNegativeExpiresAuthHeaderEmptyExpiredPresignRequestRequestNotReadyYetUnsignedHeadersMissingDateHeaderInvalidQuerySignatureAlgoInvalidQueryParamsBucketAlreadyOwnedByYouInvalidDurationBucketAlreadyExistsTooManyBucketsMetadataTooLargeUnsupportedMetadataMaximumExpiresSlowDownInvalidPrefixMarkerBadRequestKeyTooLongErrorInvalidBucketObjectLockConfigurationObjectLockConfigurationNotFoundObjectLockConfigurationNotAllowedNoSuchObjectLockConfigurationObjectLockedInvalidRetentionDatePastObjectLockRetainDateUnknownWORMModeDirectiveBucketTaggingNotFoundObjectLockInvalidHeadersInvalidTagDirectiveInvalidEncryptionMethodInvalidEncryptionKeyIDInsecureSSECustomerRequestSSEMultipartEncryptedSSEEncryptedObjectInvalidEncryptionParametersInvalidSSECustomerAlgorithmInvalidSSECustomerKeyMissingSSECustomerKeyMissingSSECustomerKeyMD5SSECustomerKeyMD5MismatchInvalidSSECustomerParametersIncompatibleEncryptionMethodKMSNotConfiguredKMSKeyNotFoundExceptionNoAccessKeyInvalidTokenEventNotificationARNNotificationRegionNotificationOverlappingFilterNotificationFilterNameInvalidFilterNamePrefixFilterNameSuffixFilterValueInvalidOverlappingConfigsUnsupportedNotificationContentSHA256MismatchContentChecksumMismatchReadQuorumWriteQuorumStorageFullRequestBodyParseObjectExistsAsDirectoryInvalidObjectNameInvalidObjectNamePrefixSlashInvalidResourceNameServerNotInitializedOperationTimedOutClientDisconnectedOperationMaxedOutInvalidRequestTransitionStorageClassNotFoundErrorInvalidStorageClassBackendDownMalformedJSONAdminNoSuchUserAdminNoSuchGroupAdminGroupNotEmptyAdminNoSuchJobAdminNoSuchPolicyAdminInvalidArgumentAdminInvalidAccessKeyAdminInvalidSecretKeyAdminConfigNoQuorumAdminConfigTooLargeAdminConfigBadJSONAdminNoSuchConfigTargetAdminConfigEnvOverriddenAdminConfigDuplicateKeysAdminConfigInvalidIDPTypeAdminConfigLDAPValidationAdminConfigIDPCfgNameAlreadyExistsAdminConfigIDPCfgNameDoesNotExistAdminCredentialsMismatchInsecureClientRequestObjectTamperedSiteReplicationInvalidRequestSiteReplicationPeerRespSiteReplicationBackendIssueSiteReplicationServiceAccountErrorSiteReplicationBucketConfigErrorSiteReplicationBucketMetaErrorSiteReplicationIAMErrorSiteReplicationConfigMissingAdminRebalanceAlreadyStartedAdminRebalanceNotStartedAdminBucketQuotaExceededAdminNoSuchQuotaConfigurationHealNotImplementedHealNoSuchProcessHealInvalidClientTokenHealMissingBucketHealAlreadyRunningHealOverlappingPathsIncorrectContinuationTokenEmptyRequestBodyUnsupportedFunctionInvalidExpressionTypeBusyUnauthorizedAccessExpressionTooLongIllegalSQLFunctionArgumentInvalidKeyPathInvalidCompressionFormatInvalidFileHeaderInfoInvalidJSONTypeInvalidQuoteFieldsInvalidRequestParameterInvalidDataTypeInvalidTextEncodingInvalidDataSourceInvalidTableAliasMissingRequiredParameterObjectSerializationConflictUnsupportedSQLOperationUnsupportedSQLStructureUnsupportedSyntaxUnsupportedRangeHeaderLexerInvalidCharLexerInvalidOperatorLexerInvalidLiteralLexerInvalidIONLiteralParseExpectedDatePartParseExpectedKeywordParseExpectedTokenTypeParseExpected2TokenTypesParseExpectedNumberParseExpectedRightParenBuiltinFunctionCallParseExpectedTypeNameParseExpectedWhenClauseParseUnsupportedTokenParseUnsupportedLiteralsGroupByParseExpectedMemberParseUnsupportedSelectParseUnsupportedCaseParseUnsupportedCaseClauseParseUnsupportedAliasParseUnsupportedSyntaxParseUnknownOperatorParseMissingIdentAfterAtParseUnexpectedOperatorParseUnexpectedTermParseUnexpectedTokenParseUnexpectedKeywordParseExpectedExpressionParseExpectedLeftParenAfterCastParseExpectedLeftParenValueConstructorParseExpectedLeftParenBuiltinFunctionCallParseExpectedArgumentDelimiterParseCastArityParseInvalidTypeParamParseEmptySelectParseSelectMissingFromParseExpectedIdentForGroupNameParseExpectedIdentForAliasParseUnsupportedCallWithStarParseNonUnaryAgregateFunctionCallParseMalformedJoinParseExpectedIdentForAtParseAsteriskIsNotAloneInSelectListParseCannotMixSqbAndWildcardInSelectListParseInvalidContextForWildcardInSelectListIncorrectSQLFunctionArgumentTypeValueParseFailureEvaluatorInvalidArgumentsIntegerOverflowLikeInvalidInputsCastFailedInvalidCastEvaluatorInvalidTimestampFormatPatternEvaluatorInvalidTimestampFormatPatternSymbolForParsingEvaluatorTimestampFormatPatternDuplicateFieldsEvaluatorTimestampFormatPatternHourClockAmPmMismatchEvaluatorUnterminatedTimestampFormatPatternTokenEvaluatorInvalidTimestampFormatPatternTokenEvaluatorInvalidTimestampFormatPatternSymbolEvaluatorBindingDoesNotExistMissingHeadersInvalidColumnIndexAdminConfigNotificationTargetsFailedAdminProfilerNotEnabledInvalidDecompressedSizeAddUserInvalidArgumentAdminResourceInvalidArgumentAdminAccountNotEligibleAccountNotEligibleAdminServiceAccountNotFoundPostPolicyConditionInvalidFormatInvalidChecksum" -var _APIErrorCode_index = [...]uint16{0, 4, 16, 25, 39, 53, 67, 81, 94, 112, 129, 146, 159, 171, 193, 213, 239, 253, 274, 291, 306, 329, 346, 364, 381, 405, 420, 441, 459, 471, 491, 508, 531, 552, 564, 582, 603, 631, 661, 682, 705, 731, 768, 798, 831, 856, 888, 918, 947, 972, 994, 1020, 1042, 1070, 1099, 1133, 1164, 1201, 1225, 1253, 1283, 1292, 1304, 1320, 1333, 1347, 1365, 1385, 1406, 1422, 1433, 1449, 1477, 1497, 1513, 1541, 1555, 1572, 1587, 1600, 1614, 1627, 1640, 1656, 1673, 1694, 1708, 1729, 1742, 1764, 1787, 1812, 1828, 1843, 1858, 1879, 1897, 1912, 1929, 1954, 1972, 1995, 2010, 2029, 2043, 2059, 2078, 2092, 2100, 2119, 2129, 2144, 2180, 2211, 2244, 2273, 2285, 2305, 2329, 2353, 2374, 2398, 2417, 2440, 2462, 2488, 2509, 2527, 2554, 2581, 2602, 2623, 2647, 2672, 2700, 2728, 2744, 2767, 2778, 2790, 2807, 2822, 2840, 2869, 2886, 2902, 2918, 2936, 2954, 2977, 2998, 3021, 3031, 3042, 3053, 3069, 3092, 3109, 3137, 3156, 3176, 3193, 3211, 3228, 3242, 3277, 3296, 3307, 3320, 3335, 3351, 3369, 3383, 3400, 3420, 3441, 3462, 3481, 3500, 3518, 3541, 3565, 3589, 3614, 3639, 3663, 3684, 3698, 3727, 3750, 3777, 3811, 3843, 3873, 3896, 3924, 3952, 3976, 4000, 4029, 4047, 4064, 4086, 4103, 4121, 4141, 4167, 4183, 4202, 4223, 4227, 4245, 4262, 4288, 4302, 4326, 4347, 4362, 4380, 4403, 4418, 4437, 4454, 4471, 4495, 4522, 4545, 4568, 4585, 4607, 4623, 4643, 4662, 4684, 4705, 4725, 4747, 4771, 4790, 4832, 4853, 4876, 4897, 4928, 4947, 4969, 4989, 5015, 5036, 5058, 5078, 5102, 5125, 5144, 5164, 5186, 5209, 5240, 5278, 5319, 5349, 5363, 5384, 5400, 5422, 5452, 5478, 5506, 5539, 5557, 5580, 5615, 5655, 5697, 5729, 5746, 5771, 5786, 5803, 5813, 5824, 5862, 5916, 5962, 6014, 6062, 6105, 6149, 6177, 6191, 6209, 6245, 6268, 6291, 6313, 6341, 6364, 6382, 6409, 6441, 6456} +var _APIErrorCode_index = [...]uint16{0, 4, 16, 25, 39, 53, 67, 81, 94, 112, 129, 146, 159, 171, 193, 213, 239, 253, 274, 291, 306, 329, 346, 364, 381, 405, 420, 441, 459, 471, 491, 508, 531, 552, 564, 582, 603, 631, 661, 682, 705, 731, 768, 798, 831, 856, 888, 918, 947, 972, 994, 1020, 1042, 1070, 1099, 1133, 1164, 1201, 1225, 1253, 1283, 1292, 1304, 1320, 1333, 1347, 1365, 1385, 1406, 1422, 1433, 1449, 1477, 1497, 1513, 1541, 1555, 1572, 1587, 1600, 1614, 1627, 1640, 1656, 1673, 1694, 1708, 1729, 1742, 1764, 1787, 1812, 1828, 1843, 1858, 1879, 1897, 1912, 1929, 1954, 1972, 1995, 2010, 2029, 2043, 2059, 2078, 2092, 2100, 2119, 2129, 2144, 2180, 2211, 2244, 2273, 2285, 2305, 2329, 2353, 2374, 2398, 2417, 2440, 2462, 2488, 2509, 2527, 2554, 2581, 2602, 2623, 2647, 2672, 2700, 2728, 2744, 2767, 2778, 2790, 2807, 2822, 2840, 2869, 2886, 2902, 2918, 2936, 2954, 2977, 2998, 3021, 3031, 3042, 3053, 3069, 3092, 3109, 3137, 3156, 3176, 3193, 3211, 3228, 3242, 3277, 3296, 3307, 3320, 3335, 3351, 3369, 3383, 3400, 3420, 3441, 3462, 3481, 3500, 3518, 3541, 3565, 3589, 3614, 3639, 3673, 3706, 3730, 3751, 3765, 3794, 3817, 3844, 3878, 3910, 3940, 3963, 3991, 4019, 4043, 4067, 4096, 4114, 4131, 4153, 4170, 4188, 4208, 4234, 4250, 4269, 4290, 4294, 4312, 4329, 4355, 4369, 4393, 4414, 4429, 4447, 4470, 4485, 4504, 4521, 4538, 4562, 4589, 4612, 4635, 4652, 4674, 4690, 4710, 4729, 4751, 4772, 4792, 4814, 4838, 4857, 4899, 4920, 4943, 4964, 4995, 5014, 5036, 5056, 5082, 5103, 5125, 5145, 5169, 5192, 5211, 5231, 5253, 5276, 5307, 5345, 5386, 5416, 5430, 5451, 5467, 5489, 5519, 5545, 5573, 5606, 5624, 5647, 5682, 5722, 5764, 5796, 5813, 5838, 5853, 5870, 5880, 5891, 5929, 5983, 6029, 6081, 6129, 6172, 6216, 6244, 6258, 6276, 6312, 6335, 6358, 6380, 6408, 6431, 6449, 6476, 6508, 6523} func (i APIErrorCode) String() string { if i < 0 || i >= APIErrorCode(len(_APIErrorCode_index)-1) {