@MessageLogger(projectCode="WFLYSEC",
length=4)
public interface SecurityLogger
extends org.jboss.logging.BasicLogger
| Modifier and Type | Field and Description |
|---|---|
static SecurityLogger |
ROOT_LOGGER
A logger with a category of the package name.
|
| Modifier and Type | Method and Description |
|---|---|
String |
actionNotSpecified()
i18n version of string from Vault Tool utility
|
void |
activatingSecuritySubsystem()
Logs a message indicating that the security subsystem is being activated
|
IllegalArgumentException |
addressDidNotContainSecurityDomain()
Create a
IllegalArgumentException when the path address does not contain a security domain name |
Exception |
cannotCreateEncryptionDirectory(String directory)
Create an exception when encryption directory cannot be created.
|
String |
cmdLineAttributeName()
i18n version of string from Vault Tool utility
|
String |
cmdLineAutomaticallyCreateKeystore()
i18n version of string from Vault Tool utility
|
String |
cmdLineCheckAttribute()
i18n version of string from Vault Tool utility
|
String |
cmdLineEncryptionDirectory()
i18n version of string from Vault Tool utility
|
String |
cmdLineHelp()
i18n version of string from Vault Tool utility
|
String |
cmdLineIterationCount()
i18n version of string from Vault Tool utility
|
String |
cmdLineKeyStorePassword()
i18n version of string from Vault Tool utility
|
String |
cmdLineKeyStoreURL()
i18n version of string from Vault Tool utility
|
String |
cmdLineRemoveSecuredAttribute()
i18n version of string from Vault Tool utility
|
String |
cmdLineSalt()
i18n version of string from Vault Tool utility
|
String |
cmdLineSecuredAttribute()
i18n version of string from Vault Tool utility
|
String |
cmdLineSecuredAttributeAlreadyExists()
i18n version of string from Vault Tool utility
|
String |
cmdLineSecuredAttributeDoesNotExist()
i18n version of string from Vault Tool utility
|
String |
cmdLineVaultBlock()
i18n version of string from Vault Tool utility
|
String |
cmdLineVaultKeyStoreAlias()
i18n version of string from Vault Tool utility
|
ClassNotFoundException |
cnfe(String name)
Create a
ClassNotFoundException to indicate that a class could not be found |
void |
currentVersion(String version)
Logs a message indicating the current version of the PicketBox library
|
void |
defaultCacheRequirementMissing(String containerName,
String legacyCacheName) |
Exception |
encryptionDirectoryDoesNotExist(String directory)
Create an exception when encryption directory does not exist or is not a directory.
|
String |
enterEncryptionDirectory()
i18n version of string from Vault Tool utility
|
String |
enterIterationCount()
i18n version of string from Vault Tool utility
|
String |
enterKeyStoreAlias()
i18n version of string from Vault Tool utility
|
String |
enterKeyStorePassword()
i18n version of string from Vault Tool utility
|
String |
enterKeyStorePasswordAgain()
Keystore password confirmation
|
String |
enterKeyStoreURL()
i18n version of string from Vault Tool utility
|
String |
enterSalt()
i18n version of string from Vault Tool utility
|
String |
enterYourPassword()
i18n version of string from Vault Tool utility
|
String |
enterYourPasswordAgain()
Password confirmation
|
void |
errorDeletingJACCPolicy(Throwable t)
Logs a message indicating that there was an exception while trying to delete the JACC Policy
|
String |
exceptionEncountered()
i18n version of string from Vault Tool utility
|
org.jboss.msc.service.StartException |
expectedManagerTypeNotFound(String managerName,
String managerType,
String legacyDomainName)
Creates an exception indicating that the expected manager type was not found in the JSSE security domain.
|
LoginException |
failureCallingSecurityRealm(String cause)
Create a
LoginException to indicate a failure calling the security realm. |
String |
handshakeComplete()
i18n version of string from Vault Tool utility
|
String |
initializingVault()
i18n version of string from Vault Tool utility
|
String |
interactionCommandOptions()
i18n version of string from Vault Tool utility
|
String |
interactiveCommandString()
i18n version of string from Vault Tool utility
|
String |
interactiveMessageNoValueStored(String displayFormattedAttribute)
i18n version of string from Vault Tool utility
|
String |
interactiveMessageValueStored(String displayFormattedAttribute)
i18n version of string from Vault Tool utility
|
String |
interactivePromptAttributeName()
i18n version of string from Vault Tool utility
|
String |
interactivePromptSecureAttributeValue()
i18n version of string from Vault Tool utility
|
String |
interactivePromptSecureAttributeValueAgain()
i18n version of string from Vault Tool utility
|
String |
interactivePromptVaultBlock()
i18n version of string from Vault Tool utility
|
org.jboss.as.controller.OperationFailedException |
interruptedWaitingForSecurityDomain(String securityDomainName) |
SecurityException |
invalidUserException()
Create a
SecurityException to indicate that the vault is not initialized |
Exception |
iterationCountOutOfRange(String iteration)
Create an exception when iteration count is out of range.
|
Exception |
keyStoreDoesnotExistWithExample(String keystoreURL,
String keystoreURLExample)
Create an Exception when KeyStore cannot be located with example how to create one.
|
Exception |
keyStoreNotWritable(String keystoreURL)
Create an Exception when one cannot write to the KeyStore or it is not a file.
|
Exception |
keyStorePasswordNotSpecified()
Create an exception when KeyStore password is not specified.
|
IllegalArgumentException |
loginModuleStackIllegalArgument(String str)
Create a
IllegalArgumentException to indicate that the auth-module references a login module stack that does not exist |
String |
messageAttributeNotRemoved(String displayFormattedAttribute)
i18n version of string from Vault Tool utility
|
String |
messageAttributeRemovedSuccessfuly(String displayFormattedAttribute)
i18n version of string from Vault Tool utility
|
IllegalArgumentException |
missingModuleName(String name)
Creates an exception indicating that the module name was missing
|
org.jboss.as.controller.OperationFailedException |
noAuthenticationCacheAvailable(String securityDomain)
Create an OperationFailedException to indicate a failure to find an authentication cache
|
String |
noConsole()
i18n version of string from Vault Tool utility
|
IllegalStateException |
noUserPrincipalFound()
Create an IllegalStateFoundException to indicate no UserPrincipal was found on the underlying connection.
|
IllegalArgumentException |
nullArgument(String arg)
Create a
IllegalArgumentException when a null argument is passed |
InvalidNameException |
nullName()
Creates an exception indicating that the name passed to jndi is null or empty
|
OperationNotSupportedException |
operationNotSupported(Method method)
Creates an exception indicating that the operation is not supported
|
String |
passwordAgain()
Deprecated.
do not use this message to build confirmation message
|
String |
passwordsDoNotMatch()
i18n version of string from Vault Tool utility
|
String |
passwordsMatch()
i18n version of string from Vault Tool utility
|
String |
problemOcurred()
i18n version of string from Vault Tool utility
|
String |
problemParsingCommandLineParameters()
i18n version of string from Vault Tool utility
|
SecurityException |
realmNotFound(String name)
Create a
SecurityException to indicate that the specified realm has not been found. |
String |
removingInteractiveSession()
i18n version of string from Vault Tool utility
|
org.jboss.as.controller.OperationFailedException |
requiredSecurityDomainServiceNotAvailable(String securityDomainName) |
RuntimeException |
runtimeException(Throwable e)
Creates a
RuntimeException |
Exception |
saltWrongLength()
Create an exception when salt has different length than 8.
|
SecurityException |
securityException(Throwable t)
Create a
SecurityException |
SecurityException |
securityManagementNotInjected()
Create a
SecurityException to indicate that the security management has not been injected |
Exception |
securityVaultException(org.jboss.security.vault.SecurityVaultException cause)
Unspecified exception encountered.
|
String |
startingInteractiveSession()
i18n version of string from Vault Tool utility
|
String |
taskRemoveSecuredAttribute()
i18n version of string from Vault Tool utility
|
String |
taskStoreSecuredAttribute()
i18n version of string from Vault Tool utility
|
String |
taskVerifySecuredAttributeExists()
i18n version of string from Vault Tool utility
|
IllegalStateException |
unableToCreateAuthorizationIdentity()
Creates an exception indicating that an
AuthorizationIdentity could not be created
because a valid authenticated Subject was not established yet. |
IllegalStateException |
unableToGetModuleClassLoader(Throwable e)
Creates an exception indicating the inability to get the
ModuleClassLoader |
org.jboss.msc.service.StartException |
unableToLocateComponentInJSSEDomain(String componentName,
String legacyDomainName)
Creates an exception indicating the inability to find a component (keystore, truststore, keymanager, etc) in
the specified JSSE security domain.
|
org.jboss.msc.service.StartException |
unableToLocateJSSEConfig(String legacyDomainName)
Creates an exception indicating the inability to find a JSSE-enabled security domain with the specified name.
|
org.jboss.msc.service.StartException |
unableToStartException(String service,
Throwable t)
Create a
StartException to indicate that a service could not be started |
UnsupportedOperationException |
unsupportedOperation()
Create a
UnsupportedOperationException to indicate that the intended operation is not supported |
UnsupportedOperationException |
unsupportedOperationExceptionUseResourceDesc()
Exception indicates that the method being used indicates a misuse of this class
|
Exception |
vaultAliasNotSpecified()
Create an exception when Vault alias is not specified.
|
String |
vaultAttributeCreateDisplay(String VaultBlock,
String attributeName,
String configurationString)
Display string at the end of successful attribute creation.
|
String |
vaultConfigurationTitle()
i18n version of string from Vault Tool utility
|
String |
vaultInitialized()
i18n version of string from Vault Tool utility
|
SecurityException |
vaultNotInitializedException()
Create a
SecurityException to indicate that the vault is not initialized |
org.jboss.as.server.services.security.VaultReaderException |
vaultReaderException(Throwable t)
Create a
VaultReaderException to indicate there was an exception while reading from the vault |
XMLStreamException |
xmlStreamExceptionAuth(Location loc)
Create a
XMLStreamException to indicate that the security domain configuration cannot have both JAAS and JASPI config |
XMLStreamException |
xmlStreamExceptionMissingAttribute(String a,
String b,
Location loc)
Creates a
XMLStreamException to indicate a missing required attribute |
debug, debug, debug, debug, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugf, debugv, debugv, debugv, debugv, debugv, debugv, debugv, debugv, error, error, error, error, errorf, errorf, errorf, errorf, errorf, errorf, errorf, errorf, errorv, errorv, errorv, errorv, errorv, errorv, errorv, errorv, fatal, fatal, fatal, fatal, fatalf, fatalf, fatalf, fatalf, fatalf, fatalf, fatalf, fatalf, fatalv, fatalv, fatalv, fatalv, fatalv, fatalv, fatalv, fatalv, info, info, info, info, infof, infof, infof, infof, infof, infof, infof, infof, infov, infov, infov, infov, infov, infov, infov, infov, isDebugEnabled, isEnabled, isInfoEnabled, isTraceEnabled, log, log, log, log, logf, logf, logf, logf, logf, logf, logf, logf, logf, logf, logf, logf, logv, logv, logv, logv, logv, logv, logv, logv, logv, logv, logv, logv, trace, trace, trace, trace, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracef, tracev, tracev, tracev, tracev, tracev, tracev, tracev, tracev, warn, warn, warn, warn, warnf, warnf, warnf, warnf, warnf, warnf, warnf, warnf, warnv, warnv, warnv, warnv, warnv, warnv, warnv, warnvstatic final SecurityLogger ROOT_LOGGER
@LogMessage(level=INFO)
@Message(id=1,
value="Current PicketBox version=%s")
void currentVersion(String version)
version - a String representing the current version@LogMessage(level=INFO)
@Message(id=2,
value="Activating Security Subsystem")
void activatingSecuritySubsystem()
@LogMessage(level=WARN)
@Message(id=3,
value="Error deleting JACC Policy")
void errorDeletingJACCPolicy(@Cause
Throwable t)
t - the underlying exception@Message(id=4,
value="Unable to get the Module Class Loader")
IllegalStateException unableToGetModuleClassLoader(@Cause
Throwable e)
ModuleClassLoaderIllegalStateException for the error.@Message(id=5,
value="Operation not supported : %s")
OperationNotSupportedException operationNotSupported(Method method)
OperationNotSupportedException for the error.@Message(id=6,
value="Missing module name for the %s")
IllegalArgumentException missingModuleName(String name)
name - the missing module nameIllegalArgumentException@Message(id=7,
value="Runtime Exception:")
RuntimeException runtimeException(@Cause
Throwable e)
RuntimeExceptione - the underlying exception@Message(id=9,
value="Name cannot be null or empty")
InvalidNameException nullName()
InvalidNameException@Message(id=11,
value="Argument %s is null")
IllegalArgumentException nullArgument(String arg)
IllegalArgumentException when a null argument is passedarg - an argument that is nullIllegalArgumentException@Message(id=12,
value="Unable to start the %s service")
org.jboss.msc.service.StartException unableToStartException(String service,
@Cause
Throwable t)
StartException to indicate that a service could not be startedservice - the name of the servicet - underlying exceptionStartException@Message(id=13,
value="Class not found : %s")
ClassNotFoundException cnfe(String name)
ClassNotFoundException to indicate that a class could not be foundname - name of the classClassNotFoundException@Message(id=15,
value="Security Exception")
SecurityException securityException(@Cause
Throwable t)
SecurityExceptiont - underlying exceptionSecurityException@Message(id=17,
value="Vault Reader Exception:")
org.jboss.as.server.services.security.VaultReaderException vaultReaderException(@Cause
Throwable t)
VaultReaderException to indicate there was an exception while reading from the vaultt - underlying exceptionVaultReaderException@Message(id=18,
value="Use the ResourceDescriptionResolver variant")
UnsupportedOperationException unsupportedOperationExceptionUseResourceDesc()
UnsupportedOperationException@Message(id=19,
value="Unsupported Operation")
UnsupportedOperationException unsupportedOperation()
UnsupportedOperationException to indicate that the intended operation is not supportedUnsupportedOperationException@Message(id=22,
value="A security domain can have either an <authentication> or <authentication-jaspi> element, not both")
XMLStreamException xmlStreamExceptionAuth(@Param
Location loc)
XMLStreamException to indicate that the security domain configuration cannot have both JAAS and JASPI configloc - the current location of the stax parserXMLStreamException@Message(id=23,
value="Missing required attribute: either %s or %s must be present")
XMLStreamException xmlStreamExceptionMissingAttribute(String a,
String b,
@Param
Location loc)
XMLStreamException to indicate a missing required attributea - the first attributeb - the second attributeloc - the current location of the stax parserXMLStreamException@Message(id=24,
value="auth-module references a login module stack that doesn\'t exist::%s")
IllegalArgumentException loginModuleStackIllegalArgument(String str)
IllegalArgumentException to indicate that the auth-module references a login module stack that does not existstr - login module stack nameIllegalArgumentException@Message(id=25,
value="Address did not contain a security domain name")
IllegalArgumentException addressDidNotContainSecurityDomain()
IllegalArgumentException when the path address does not contain a security domain nameIllegalArgumentException@Message(id=26,
value="Vault is not initialized")
SecurityException vaultNotInitializedException()
SecurityException to indicate that the vault is not initializedSecurityException@Message(id=27,
value="Invalid User")
SecurityException invalidUserException()
SecurityException to indicate that the vault is not initializedSecurityException@Message(id=28,
value="Security Management not injected")
SecurityException securityManagementNotInjected()
SecurityException to indicate that the security management has not been injectedSecurityException@Message(id=29,
value="Security realm \'%s\' not found.")
SecurityException realmNotFound(String name)
SecurityException to indicate that the specified realm has not been found.SecurityException@Message(id=31,
value="Failure calling CallbackHandler \'%s\'")
LoginException failureCallingSecurityRealm(String cause)
LoginException to indicate a failure calling the security realm.LoginException@Message(id=32,
value="No authentication cache for security domain \'%s\' available")
org.jboss.as.controller.OperationFailedException noAuthenticationCacheAvailable(String securityDomain)
@Message(id=33,
value="No UserPrincipalFound constructing RemotingConnectionPrincipal.")
IllegalStateException noUserPrincipalFound()
@Message(id=34,
value="Interrupted waiting for security domain \'%s\'")
org.jboss.as.controller.OperationFailedException interruptedWaitingForSecurityDomain(String securityDomainName)
@Message(id=35,
value="Required security domain is not available \'%s\'")
org.jboss.as.controller.OperationFailedException requiredSecurityDomainServiceNotAvailable(String securityDomainName)
@Message(id=37,
value="Keystore \'%s\' doesn\'t exist.\nkeystore could be created: keytool -genseckey -alias Vault -storetype jceks -keyalg AES -keysize 128 -storepass secretsecret -keypass secretsecret -keystore %s")
Exception keyStoreDoesnotExistWithExample(String keystoreURL,
String keystoreURLExample)
keystoreURL - nonexistent keystore URLkeystoreURLExample - example keystore url@Message(id=38,
value="Keystore [%s] is not writable or not a file.")
Exception keyStoreNotWritable(String keystoreURL)
keystoreURL - URL of the keystore@Message(id=39,
value="Keystore password has to be specified.")
Exception keyStorePasswordNotSpecified()
@Message(id=41,
value="Encryption directory is not a directory or doesn\'t exist. (%s)")
Exception encryptionDirectoryDoesNotExist(String directory)
directory - directory name@Message(id=42,
value="Cannot create encryption directory %s")
Exception cannotCreateEncryptionDirectory(String directory)
directory - directory name@Message(id=43,
value="Iteration count has to be within 1 - 2147483647, but it is %s.")
Exception iterationCountOutOfRange(String iteration)
iteration - iteration count@Message(id=44,
value="Salt has to be exactly 8 characters long.")
Exception saltWrongLength()
@Message(id=45,
value="Exception encountered:")
Exception securityVaultException(@Cause
org.jboss.security.vault.SecurityVaultException cause)
@Message(id=46,
value="Vault alias has to be specified.")
Exception vaultAliasNotSpecified()
@Message(id=47,
value="Secured attribute value has been stored in Vault.\nPlease make note of the following:\n********************************************\nVault Block:%s\nAttribute Name:%s\nConfiguration should be done as follows:\n%s\n********************************************")
String vaultAttributeCreateDisplay(String VaultBlock,
String attributeName,
String configurationString)
VaultBlock - name of vault blockattributeName - name of value attributeconfigurationString - configuration details@Message(id=48,
value="Vault Configuration commands in WildFly for CLI:")
String vaultConfigurationTitle()
@Message(id=49,
value="No console.")
String noConsole()
@Message(id=0,
value="Enter directory to store encrypted files:")
String enterEncryptionDirectory()
@Message(id=0,
value="Enter Keystore URL:")
String enterKeyStoreURL()
@Message(id=0,
value="Enter Keystore password:")
String enterKeyStorePassword()
@Message(id=0,
value="Enter 8 character salt:")
String enterSalt()
@Message(id=0,
value="Enter iteration count as a number (e.g.: 44):")
String enterIterationCount()
@Message(id=0,
value="Enter Keystore Alias:")
String enterKeyStoreAlias()
@Message(id=56,
value="Initializing Vault")
String initializingVault()
@Message(id=57,
value="Vault is initialized and ready for use")
String vaultInitialized()
@Message(id=58,
value="Handshake with Vault complete")
String handshakeComplete()
@Message(id=59,
value="Exception encountered:")
String exceptionEncountered()
@Message(id=0,
value="Enter your password:")
String enterYourPassword()
@Deprecated @Message(id=61, value=" again: ") String passwordAgain()
@Message(id=0,
value="Values entered don\'t match")
String passwordsDoNotMatch()
@Message(id=0,
value="Values match")
String passwordsMatch()
@Message(id=0,
value="Problem occurred:")
String problemOcurred()
@Message(id=0,
value="Please enter a Digit:: 0: Start Interactive Session 1: Remove Interactive Session 2: Exit")
String interactiveCommandString()
@Message(id=0,
value="Starting an interactive session")
String startingInteractiveSession()
@Message(id=0,
value="Removing the current interactive session")
String removingInteractiveSession()
@Message(id=68,
value="Problem while parsing command line parameters:")
String problemParsingCommandLineParameters()
@Message(id=0,
value="Keystore URL")
String cmdLineKeyStoreURL()
@Message(id=0,
value="Keystore password")
String cmdLineKeyStorePassword()
@Message(id=0,
value="Directory containing encrypted files")
String cmdLineEncryptionDirectory()
@Message(id=0,
value="8 character salt")
String cmdLineSalt()
@Message(id=0,
value="Iteration count")
String cmdLineIterationCount()
@Message(id=0,
value="Vault keystore alias")
String cmdLineVaultKeyStoreAlias()
@Message(id=0,
value="Vault block")
String cmdLineVaultBlock()
@Message(id=0,
value="Attribute name")
String cmdLineAttributeName()
@Message(id=0,
value="Secured attribute value (such as password) to store")
String cmdLineSecuredAttribute()
@Message(id=0,
value="Check whether the secured attribute already exists in the Vault")
String cmdLineCheckAttribute()
@Message(id=0,
value="Help")
String cmdLineHelp()
@Message(id=80,
value="Secured attribute (password) already exists.")
String cmdLineSecuredAttributeAlreadyExists()
@Message(id=81,
value="Secured attribute (password) doesn\'t exist.")
String cmdLineSecuredAttributeDoesNotExist()
@Message(id=0,
value="Enter your password again:")
String enterYourPasswordAgain()
@Message(id=0,
value="Enter Keystore password again:")
String enterKeyStorePasswordAgain()
@Message(id=0,
value="Remove secured attribute from the Vault")
String cmdLineRemoveSecuredAttribute()
@Message(id=0,
value="Automatically create keystore when it doesn\'t exist")
String cmdLineAutomaticallyCreateKeystore()
@Message(id=0,
value="Secured attribute %s has been successfuly removed from vault")
String messageAttributeRemovedSuccessfuly(String displayFormattedAttribute)
@Message(id=0,
value="Secured attribute %s was not removed from vault, check whether it exist")
String messageAttributeNotRemoved(String displayFormattedAttribute)
@Message(id=0,
value="Please enter a Digit:: 0: Store a secured attribute 1: Check whether a secured attribute exists 2: Remove secured attribute 3: Exit")
String interactionCommandOptions()
@Message(id=0,
value="Task: Store a secured attribute")
String taskStoreSecuredAttribute()
@Message(id=0,
value="Please enter secured attribute value (such as password)")
String interactivePromptSecureAttributeValue()
@Message(id=0,
value="Please enter secured attribute value again")
String interactivePromptSecureAttributeValueAgain()
@Message(id=0,
value="Enter Vault Block:")
String interactivePromptVaultBlock()
@Message(id=0,
value="Enter Attribute Name:")
String interactivePromptAttributeName()
@Message(id=0,
value="Task: Verify whether a secured attribute exists")
String taskVerifySecuredAttributeExists()
@Message(id=0,
value="No value has been stored for %s")
String interactiveMessageNoValueStored(String displayFormattedAttribute)
@Message(id=0,
value="A value exists for %s")
String interactiveMessageValueStored(String displayFormattedAttribute)
@Message(id=0,
value="Task: Remove secured attribute")
String taskRemoveSecuredAttribute()
@Message(id=0,
value="Action not specified")
String actionNotSpecified()
@Message(id=100,
value="Legacy security domain %s doesn\'t contain a valid JSSE configuration")
org.jboss.msc.service.StartException unableToLocateJSSEConfig(String legacyDomainName)
StartException instance.@Message(id=101,
value="Unable to find a %s configuration in JSSE security domain %s")
org.jboss.msc.service.StartException unableToLocateComponentInJSSEDomain(String componentName,
String legacyDomainName)
StartException instance.@Message(id=102,
value="Could not find a %s of type %s in the JSSE security domain %s")
org.jboss.msc.service.StartException expectedManagerTypeNotFound(String managerName,
String managerType,
String legacyDomainName)
managerName - the name of the manager being retrieved (KeyManager or TrustManager).managerType - the expected type.StartException instance.@Message(id=103,
value="Unable to create AuthorizationIdentity: no authenticated Subject was found")
IllegalStateException unableToCreateAuthorizationIdentity()
AuthorizationIdentity could not be created
because a valid authenticated Subject was not established yet.IllegalStateException instance.Copyright © 2019 JBoss by Red Hat. All rights reserved.