def find_object_base_in_project(self, object_name: str) -> int | None:
        """
        Find the base address of an object in angr project. Returns None if the project is not mapped. Results are
        cached in self._cached_object_project_base_addrs.

        :param object_name: Name of the object to look for.
        :return:            The base address of the loaded object in angr Project.
        """

        try:
            return self._cached_object_project_base_addrs[object_name]
        except KeyError:
            pass

        base_addr = None
        base_obj_name = os.path.basename(object_name)
        for obj in self.project.loader.all_objects:
            if not hasattr(obj, "binary"):
                continue
            if obj.binary and os.path.basename(obj.binary) == base_obj_name:
                # found it!
                # we assume binary names are unique. if they are not, someone should the logic here.
                base_addr = obj.mapped_base
                break

        if base_addr is None:
            log.warning(
                "Cannot find object %s in angr project. Maybe it has not been loaded. Exclude it from the trace.",
                object_name,
            )
        self._cached_object_project_base_addrs[object_name] = base_addr
        return base_addr

        Find the base address of an object in angr project. Returns None if the project is not mapped. Results are
        cached in self._cached_object_project_base_addrs.

        :param object_name: Name of the object to look for.
        :return:            The base address of the loaded object in angr Project.
        
angrmanagement/plugins/trace_viewer/trace_statistics.py