code: def resolve_functions(slither, functions):
      
      # Create the resolved list.
      resolved = []
  
      # Verify that the provided argument is a list.
      if not isinstance(functions, list):
          raise ResolveFunctionException("Provided functions to resolve must be a list type.")
  
      # Loop for each item in the list.
      for item in functions:
          if isinstance(item, str):
              # If the item is a single string, we assume it is of form 'ContractName.FunctionName'.
              parts = item.split('.')
              if len(parts) < 2:
                  raise ResolveFunctionException("Provided string descriptor must be of form 'ContractName.FunctionName'")
              resolved.append(resolve_function(slither, parts[0], parts[1]))
          elif isinstance(item, tuple):
              # If the item is a tuple, it should be a 2-tuple providing contract and function names.
              if len(item) != 2:
                  raise ResolveFunctionException("Provided tuple descriptor must provide a contract and function name.")
              resolved.append(resolve_function(slither, item[0], item[1]))
          else:
              raise ResolveFunctionException(f"Unexpected function descriptor type to resolve in list: {type(item)}")
  
      # Return the resolved list.
      return resolved
docs: Resolves the provided function descriptors.
      :param functions: A list of tuples (contract_name, function_name) or str (of form "ContractName.FunctionName")
      to resolve into function objects.
      :return: Returns a list of resolved functions.