docs: def find_merge_points(function_addr, function_endpoints, graph):  # pylint:disable=unused-argument
          """
          Given a local transition graph of a function, find all merge points inside, and then perform a
          quasi-topological sort of those merge points.
  
          A merge point might be one of the following cases:
          - two or more paths come together, and ends at the same address.
          - end of the current function
  
          :param int function_addr: Address of the function.
          :param list function_endpoints: Endpoints of the function. They typically come from Function.endpoints.
          :param networkx.DiGraph graph: A local transition graph of a function. Normally it comes from Function.graph.
          :return: A list of ordered addresses of merge points.
          :rtype: list
          """
  
          merge_points = set()
  
          for node in graph.nodes():
              if graph.in_degree(node) > 1:
                  merge_points.add(node)
  
          ordered_merge_points = CFGUtils.quasi_topological_sort_nodes(graph, merge_points)
  
          addrs = [n.addr for n in ordered_merge_points]
          return addrs