try {
int retry = 0;
int giftLevel = 0;
int promiseLevel = 0;
Gift g = new Gift(GiftPool.getGiftForLevel(giftLevel));
Money m = new Money(10000);
Promise p = PromisePool.getPromiseForGMN(promiseLevel);
while (retry++ <3 && !persuadeZMN(g, m,p)) {
g.changeGift(GiftPool.getNewGift(giftLevel++));
m.setAmount(m.getAmount()*10);
p.setPrmoise(p.getPromises().add(PromisePool.getPromiseForGMN(promiseLevel++)));
retry ++;
}
if (retry==3) throw new NotPossibleException();
} catch ( NotPossibleException npe) {
try {
int promiseLevel = PromisePool.MAX_LEVEL;
Promise p = PromisePool.getPromiseForGF(promiseLevel);
if (!presuadeGFGowithYou(p)) {
throw new TaskFailException();
}
} catch(TaskFailException tfe) {
cleanUp();
}
}