function safeTransferFrom(
        IERC20 _token,
        address _from,
        address _to,
        uint256 _value
    ) internal returns (bool)
    {
        uint256 prevBalance = _token.balanceOf(_from);

        if (prevBalance < _value) {
            
            return false;
        }

        if (_token.allowance(_from, address(this)) < _value) {
            
            return false;
        }

        address(_token).call(
            abi.encodeWithSignature("transferFrom(address,address,uint256)", _from, _to, _value)
        );

        if (prevBalance.sub(_value) != _token.balanceOf(_from)) {
            
            return false;
        }

        return true;
    }