contruct & function