contract MiniMeTokenFactory {

    /**
     * @notice Update the DApp by creating a new token with new functionalities
     *  the msg.sender becomes the controller of this clone token
     * @param _parentToken Address of the token being cloned
     * @param _snapshotBlock Block of the parent token that will
     *  determine the initial distribution of the clone token
     * @param _tokenName Name of the new token
     * @param _decimalUnits Number of decimals of the new token
     * @param _tokenSymbol Token Symbol for the new token
     * @param _transfersEnabled If true, tokens will be able to be transferred
     * @return The address of the new token contract
     */
    function createCloneToken(
        address _parentToken,
        uint _snapshotBlock,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol,
        bool _transfersEnabled
    ) public returns (MiniMeToken) {
        MiniMeToken newToken = new MiniMeToken(
            this,
            _parentToken,
            _snapshotBlock,
            _tokenName,
            _decimalUnits,
            _tokenSymbol,
            _transfersEnabled
            );

        newToken.changeController(msg.sender);
        return newToken;
    }
}
/**
 * @dev This contract is used to generate clone contracts from a contract.
 *  In solidity this is the way to create a contract from a contract of the
 *  same class
 */
function createCloneToken(
        address _parentToken,
        uint _snapshotBlock,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol,
        bool _transfersEnabled
    ) public returns (MiniMeToken) {
        MiniMeToken newToken = new MiniMeToken(
            this,
            _parentToken,
            _snapshotBlock,
            _tokenName,
            _decimalUnits,
            _tokenSymbol,
            _transfersEnabled
            );

        newToken.changeController(msg.sender);
        return newToken;
    }
/**
 * @notice Update the DApp by creating a new token with new functionalities
 *  the msg.sender becomes the controller of this clone token
 * @param _parentToken Address of the token being cloned
 * @param _snapshotBlock Block of the parent token that will
 *  determine the initial distribution of the clone token
 * @param _tokenName Name of the new token
 * @param _decimalUnits Number of decimals of the new token
 * @param _tokenSymbol Token Symbol for the new token
 * @param _transfersEnabled If true, tokens will be able to be transferred
 * @return The address of the new token contract
 */