contract ERC20StaticSupply is ERC20Detailed, Ownable, ERC20Lockable {
    /**
     * @dev Initializes token with a static supply. After construction, there is no other path to minting tokens.
     * Tokens are stored on contract until issued.
     */
    constructor (string memory name, string memory symbol, uint8 decimals, uint256 total_supply_whole_tokens)
        ERC20Detailed(name, symbol, decimals) public {
        require(total_supply_whole_tokens > 0, "ERC20StaticSupply: total_supply is 0");
        uint256 to_mint = total_supply_whole_tokens * (10**uint256(decimals));
        _mint(address(this), to_mint);
    }

    /**
     * @dev Allows owner/issuer to issue tokens from contract to a given address. Follows rules of transfer, cannot
     * transfer more than in on contract.
     */
    function issue(address account, uint256 value) public onlyOwner {
        _transfer(address(this), account, value);
    }
}
/**
 * @dev creates totalSupply and holds on contract until issue is called
 */
function issue(address account, uint256 value) public onlyOwner {
    _transfer(address(this), account, value);
}

/**
 * @dev Allows owner/issuer to issue tokens from contract to a given address. Follows rules of transfer, cannot
 * transfer more than in on contract.
 */