docs: void handleBikeRelated(IntsRef edgeFlags, ReaderWay way, boolean partOfCycleRelation) {
          String surfaceTag = way.getTag("surface");
          String highway = way.getTag("highway");
          String trackType = way.getTag("tracktype");
  
          // Populate unpavedBit
          if ("track".equals(highway) && (trackType == null || !"grade1".equals(trackType))
                  || "path".equals(highway) && surfaceTag == null
                  || unpavedSurfaceTags.contains(surfaceTag)) {
              unpavedEncoder.setBool(false, edgeFlags, true);
          }
  
          WayType wayType;
          if (roadValues.contains(highway))
              wayType = WayType.ROAD;
          else
              wayType = WayType.OTHER_SMALL_WAY;
  
          boolean isPushingSection = isPushingSection(way);
          if (isPushingSection && !partOfCycleRelation || "steps".equals(highway))
              wayType = WayType.PUSHING_SECTION;
  
          if (way.hasTag("bicycle", intendedValues)) {
              if (isPushingSection && !way.hasTag("bicycle", "designated"))
                  wayType = WayType.OTHER_SMALL_WAY;
              else if (wayType == WayType.OTHER_SMALL_WAY || wayType == WayType.PUSHING_SECTION)
                  wayType = WayType.CYCLEWAY;
          } else if ("cycleway".equals(highway))
              wayType = WayType.CYCLEWAY;
  
          wayTypeEncoder.setInt(false, edgeFlags, wayType.getValue());
      }