static public void handlePlayingSpellAbility(SpellAbility sa) {
        AllZone.getStack().freezeStack();
        Card source = sa.getSourceCard();

        if (sa.isSpell() && !source.isCopiedSpell())
            AllZone.getGameAction().moveToStack(source);

        Cost cost = sa.getPayCosts();
        Target tgt = sa.getTarget();

        if (cost == null) {
            payManaCost(sa);
            sa.chooseTargetAI();
            sa.getBeforePayManaAI().execute();
            AllZone.getStack().addAndUnfreeze(sa);
        } else {
            if (tgt != null && tgt.doesTarget())
                sa.chooseTargetAI();

            Cost_Payment pay = new Cost_Payment(cost, sa);
            if (pay.payComputerCosts())
                AllZone.getStack().addAndUnfreeze(sa);
        }
    }