contract SotaToken is ERC20, ERC20Capped, ERC20Burnable, Ownable {
    uint public allowTransferOn = 1617235200; // 2021-03-31 00:00:00 (GMT time)
    mapping (address => bool ) public whiteListTransfer;
    /**
     * @dev Constructor function of SotaToken
     * @dev set name, symbol and decimal of token
     * @dev mint totalSupply (cap) to deployer
     */
    constructor (
        string memory name,
        string memory symbol,
        uint8 decimals,
        uint256 cap
    ) ERC20(name, symbol) ERC20Capped(cap) {
        _setupDecimals(decimals);
        _mint(0x077EdcC92337eD87C5D8f975F955A25465a5D950, cap);
        whiteListTransfer[0x077EdcC92337eD87C5D8f975F955A25465a5D950] = true;
    }
    function adminWhiteList(address _whitelistAddr, bool _whiteList) onlyOwner public returns (bool) {
        whiteListTransfer[_whitelistAddr] = _whiteList;
    }
    function adminSetTime(uint _newTimeTransfer) onlyOwner public returns (bool) {
        require(_newTimeTransfer < allowTransferOn, "Invalid-time-or-allowed");
        allowTransferOn = _newTimeTransfer;
        return true;
    }
    function transfer(address to, uint amount) public override(ERC20) returns (bool) {
        require(whiteListTransfer[msg.sender] || block.timestamp > allowTransferOn,"Can-not-transfer");
        return super.transfer(to, amount);
    }
    function transferFrom(address from, address to, uint amount) public override(ERC20) returns (bool) {
        require(whiteListTransfer[msg.sender] || block.timestamp > allowTransferOn,"Can-not-transfer");
        return super.transferFrom(from, to, amount);
    }
     /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override(ERC20, ERC20Capped) {
        super._beforeTokenTransfer(from, to, amount);
    }
}
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override(ERC20, ERC20Capped) {
    super._beforeTokenTransfer(from, to, amount);
}

/**
 * @dev See {ERC20-_beforeTokenTransfer}.
 */