def do_authenticate_account(self, authc_token):
try:<EOL><INDENT>realms = self.token_realm_resolver[authc_token.__class__]<EOL><DEDENT>except KeyError:<EOL><INDENT>raise KeyError('<STR_LIT>', authc_token.__class__.__name__)<EOL><DEDENT>if (len(self.realms) == <NUM_LIT:1>):<EOL><INDENT>account = self.authenticate_single_realm_account(realms[<NUM_LIT:0>], authc_token)<EOL><DEDENT>else:<EOL><INDENT>account = self.authenticate_multi_realm_account(self.realms, authc_token)<EOL><DEDENT>cred_type = authc_token.token_info['<STR_LIT>']<EOL>attempts = account['<STR_LIT>'][cred_type].get('<STR_LIT>', [])<EOL>self.validate_locked(authc_token, attempts)<EOL>if len(account['<STR_LIT>']) > authc_token.token_info['<STR_LIT>']:<EOL><INDENT>if self.mfa_dispatcher:<EOL><INDENT>realm = self.token_realm_resolver[TOTPToken][<NUM_LIT:0>]  <EOL>totp_token = realm.generate_totp_token(account)<EOL>mfa_info = account['<STR_LIT>']['<STR_LIT>']['<STR_LIT>']<EOL>self.mfa_dispatcher.dispatch(authc_token.identifier,<EOL>mfa_info,<EOL>totp_token)<EOL><DEDENT>raise AdditionalAuthenticationRequired(account['<STR_LIT>'])<EOL><DEDENT>return account<EOL>
Returns an account object only when the current token authenticates AND
the authentication process is complete, raising otherwise

:returns:  Account
:raises AdditionalAuthenticationRequired: when additional tokens are required,
                                          passing the account object