contract ICoreIssuance {

    /* ============ Internal Functions ============ */

    /**
     * Exchange components for Set tokens, accepting any owner
     *
     * @param  _owner        Address to use tokens from
     * @param  _recipient    Address to issue Set to
     * @param  _set          Address of the Set to issue
     * @param  _quantity     Number of tokens to issue
     */
    function issueInternal(
        address _owner,
        address _recipient,
        address _set,
        uint256 _quantity
    )
        internal;

    /**
     * Converts recipient's components into Set Tokens held directly in Vault
     *
     * @param _recipient    Address to issue to
     * @param _set          Address of the Set
     * @param _quantity     Number of tokens to issue
     */
    function issueInVaultInternal(
        address _recipient,
        address _set,
        uint256 _quantity
    )
        internal;

    /**
     * Exchange Set tokens for underlying components
     *
     * @param _burnAddress       Address to burn tokens from
     * @param _incrementAddress  Address to increment component tokens to
     * @param _set               Address of the Set to redeem
     * @param _quantity          Number of tokens to redeem
     */
    function redeemInternal(
        address _burnAddress,
        address _incrementAddress,
        address _set,
        uint256 _quantity
    )
        internal;
}
/**
 * @title ICoreIssuance
 * @author Set Protocol
 *
 * The ICoreIssuance Contract defines all the functions exposed in the CoreIssuance
 * extension.
 */
function redeemInternal(
    address _burnAddress,
    address _incrementAddress,
    address _set,
    uint256 _quantity
)
    internal;

/**
 * Exchange Set tokens for underlying components
 *
 * @param _burnAddress       Address to burn tokens from
 * @param _incrementAddress  Address to increment component tokens to
 * @param _set               Address of the Set to redeem
 * @param _quantity          Number of tokens to redeem
 */