contract DssVestTransferrable is DssVest {

    address   public immutable czar;
    TokenLike public immutable gem;

    /*
        @dev This contract must be approved for transfer of the gem on the czar
        @param _czar The owner of the tokens to be distributed
        @param _gem  The token to be distributed
    */
    constructor(address _czar, address _gem) public DssVest() {
        require(_czar != address(0), "DssVest/Invalid-distributor-address");
        require(_gem  != address(0), "DssVest/Invalid-token-address");
        czar = _czar;
        gem  = TokenLike(_gem);
    }

    /*
        @dev Override pay to handle transfer logic
        @param _guy The recipient of the ERC-20 Dai
        @param _amt The amount of gem to send to the _guy (in native token units)
    */
    function pay(address _guy, uint256 _amt) override internal {
        require(gem.transferFrom(czar, _guy, _amt));
    }
}
/**
 Transferrable token DssVest. Can be used to enable streaming payments of
 any arbitrary token from an address (i.e. CU multisig) to individual
 contributors.
 */
function pay(address _guy, uint256 _amt) override internal {
    require(gem.transferFrom(czar, _guy, _amt));
}

/*
 @dev Override pay to handle transfer logic
 @param _guy The recipient of the ERC-20 Dai
 @param _amt The amount of gem to send to the _guy (in native token units)
 */