calculator(revised)