public static RouteList FilterNoCrossingOccupied(this RouteList baseList, RouteList allRoutes)
        {
            if (allRoutes == null)
            {
                return(baseList);
            }
            if (allRoutes.Count == 0)
            {
                return(baseList);
            }

            var res = new RouteList();

            foreach (var it in baseList)
            {
                if (string.IsNullOrEmpty(it?.Name))
                {
                    continue;
                }
                var crossingRoutes = allRoutes.GetCrossingRoutesOf(it);
                if (crossingRoutes.Count == 0)
                {
                    if (!res.Contains(it))
                    {
                        res.Add(it);
                    }
                }
                else
                {
                    var isOccupied = false;
                    foreach (var itt in crossingRoutes)
                    {
                        if (itt == null)
                        {
                            continue;
                        }
                        isOccupied = itt.Occupied;
                        if (isOccupied)
                        {
                            break;
                        }
                    }

                    if (isOccupied)
                    {
                        continue;
                    }

                    if (!res.Contains(it))
                    {
                        res.Add(it);
                    }
                }
            }

            return(res);
        }