private static boolean debuffMandatoryTarget(AbilityFactory af, SpellAbility sa, boolean mandatory) {
        CardList list = AllZoneUtil.getCardsInPlay();
        Target tgt = sa.getTarget();
        list = list.getValidCards(tgt.getValidTgts(), sa.getActivatingPlayer(), sa.getSourceCard());

        if (list.size() < tgt.getMinTargets(sa.getSourceCard(), sa)) {
            tgt.resetTargets();
            return false;
        }

        // Remove anything that's already been targeted
        for (Card c : tgt.getTargetCards())
            list.remove(c);

        CardList pref = list.getController(AllZone.getHumanPlayer());
        CardList forced = list.getController(AllZone.getComputerPlayer());
        Card source = sa.getSourceCard();

        while (tgt.getNumTargeted() < tgt.getMaxTargets(source, sa)) {
            if (pref.isEmpty())
                break;

            Card c;
            if (pref.getNotType("Creature").size() == 0)
                c = CardFactoryUtil.AI_getBestCreature(pref);
            else
                c = CardFactoryUtil.AI_getMostExpensivePermanent(pref, source, true);

            pref.remove(c);

            tgt.addTarget(c);
        }

        while (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa)) {
            if (forced.isEmpty())
                break;

            //TODO - if forced targeting, just pick something without the given keyword
            Card c;
            if (forced.getNotType("Creature").size() == 0)
                c = CardFactoryUtil.AI_getWorstCreature(forced);
            else
                c = CardFactoryUtil.AI_getCheapestPermanent(forced, source, true);

            forced.remove(c);

            tgt.addTarget(c);
        }

        if (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa)) {
            tgt.resetTargets();
            return false;
        }

        return true;
    }//pumpMandatoryTarget()