fun1' impl