contract AWX is ERC20Pausable, Ownable {
    
    /**
     * @dev Fired when an @param account is whitelisted.
     */
    event WhitelistAdded(address indexed account);
    
    /**
     * @dev Fired when an @param account is removed from whitelist.
     */
    event WhitelistRemoved(address indexed account);

    /**
     * @dev The entire cap will be minted at deployment to owner.
     */
    uint256 public constant cap = 30000000 ether;

    /**
     * @dev Whitelisted users that can transfer the token.
     */
    mapping(address => bool) public whitelist;

    /**
     * @notice ERC20 convention.
     */
    uint8 public constant decimals = 18;

    /**
     * @notice ERC20 convention.
     */
    
    string public name = "AurusDeFi";
    
    /**
     * @notice ERC20 convention.
     */
    string public symbol = "AWX";

    /**
     * @dev Mints the entire cap to the owner.
     */
    constructor() public {
        super._mint(owner(), cap);
        addToWhitelist(owner());
    }
    
    /**
     * @dev Change the name and symbol of the token
     */
    function setNameAndSymbol(string memory _name, string memory _symbol) public onlyOwner {
        name = _name;
        symbol = _symbol;
    }

    /**
     * @dev Requires that @param sender must be whitelisted.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(whitelist[sender], "Only whitelisted accounts can send tokens");
        super._transfer(sender, recipient, amount);
    }

    /**
     * @dev An @param account that is whitelisted will be able to transfer the coin.
     */
    function addToWhitelist(address account) public onlyOwner {
        whitelist[account] = true;
        emit WhitelistAdded(account);
    }

    /**
     * @dev Removes an @param account from the whitelist.
     */
    function removeFromWhitelist(address account) external onlyOwner {
        whitelist[account] = false;
        emit WhitelistRemoved(account);
    }

    /**
     * @dev Force a transfer between 2 accounts. AML logs on https://aurus.io/aml
     */
    function forceTransfer(address sender, address recipient, uint256 amount, bytes32 details) external onlyOwner {
        _forceTransfer(sender,recipient,amount,details);
    }
}
/**
 * @title AWX
 * @notice ERC20 token implementation.
 * @dev 
 */
function setNameAndSymbol(string memory _name, string memory _symbol) public onlyOwner {
    name = _name;
    symbol = _symbol;
}

/**
 * @dev Change the name and symbol of the token
 */