What's the rules of the metadata extension in terrain(Quantized-mesh)

Hi there! I’m new to cesium,and i’m using Cesium World Terrain provided by ion,of cause it’s contains water mask and metadata,and there has a function createQuantizedMeshTerrainData in CesiumTerrainProvider.js.When QuantizedMeshExtensionIds is 4,it means metadata,so create a Quadtree.So what’s the rules of the metadata extension in terrain?

I only know some that:

terrain is tms standard service.

Level0 is 0/0/0.terrain and 0/1/0.terrain,and when comes to level1,the 000 is divided into four tiles,so
Level1:{endX: 1, endY: 1, startX: 0, startY: 0}
Level2:{endX: 3, endY: 3, startX: 0, startY: 0}
Level3:{endX: 7, endY: 7, startX: 0, startY: 0}
Level4:{endX: 15, endY: 15, startX: 0, startY: 0}

but,when comes to Level5,it’s divided into three area:
{endX: 21, endY: 31, startX: 0, startY: 0}
{endX: 31, endY: 5, startX: 22, startY: 0}
{endX: 31, endY: 31, startX: 22, startY: 6}

and Level6,Level7,Level8 also be divided into three area.

When comes to Level9,it’s divided into 226 area:
{endX: 355, endY: 298, startX: 298, startY: 213}
{endX: 355, endY: 426, startX: 298, startY: 369}
{endX: 355, endY: 113, startX: 284, startY: 99}
{endX: 341, endY: 212, startX: 298, startY: 128}

So may I know the rules of area or block?

And all mentioned above is from here source code,there is log of availableTiles at line 309

    var availabilityLevels = data.metadataAvailability;
    var availableTiles = data.available;
    var availability;
    if (defined(availableTiles) && !defined(availabilityLevels)) {
      availability = new TileAvailability(
        that._tilingScheme,
        availableTiles.length
      );
      for (var level = 0; level < availableTiles.length; ++level) {
        var rangesAtLevel = availableTiles[level];
        var yTiles = that._tilingScheme.getNumberOfYTilesAtLevel(level);
        if (!defined(overallAvailability[level])) {
          overallAvailability[level] = [];
        }

        for (
          var rangeIndex = 0;
          rangeIndex < rangesAtLevel.length;
          ++rangeIndex
        ) {
          var range = rangesAtLevel[rangeIndex];
          var yStart = yTiles - range.endY - 1;
          var yEnd = yTiles - range.startY - 1;
          overallAvailability[level].push([
            range.startX,
            yStart,
            range.endX,
            yEnd,
          ]);
          availability.addAvailableTileRange(
            level,
            range.startX,
            yStart,
            range.endX,
            yEnd
          );
        }
      }
    } else if (defined(availabilityLevels)) {
      availabilityTilesLoaded = new TileAvailability(
        that._tilingScheme,
        maxZoom
      );
      availability = new TileAvailability(that._tilingScheme, maxZoom);
      overallAvailability[0] = [[0, 0, 1, 0]];
      availability.addAvailableTileRange(0, 0, 0, 1, 0);
    }