code: int getSecondaryAfter(int index, int s) {
          long secTer;
          int secLimit;
          if(index == 0) {
              // primary = 0
              assert(s != 0);
              index = (int)elements[IX_FIRST_SECONDARY_INDEX];
              secTer = elements[index];
              // Gap at the end of the secondary CE range.
              secLimit = 0x10000;
          } else {
              assert(index >= (int)elements[IX_FIRST_PRIMARY_INDEX]);
              secTer = getFirstSecTerForPrimary(index + 1);
              // If this is an explicit sec/ter unit, then it will be read once more.
              // Gap for secondaries of primary CEs.
              secLimit = getSecondaryBoundary();
          }
          for(;;) {
              int sec = (int)(secTer >> 16);
              if(sec > s) { return sec; }
              secTer = elements[++index];
              if((secTer & SEC_TER_DELTA_FLAG) == 0) { return secLimit; }
          }
      }
docs: Returns the secondary weight after [p, s] where index=findPrimary(p)
  except use index=0 for p=0.
  
  <p>Must return a weight for every root [p, s] as well as for every weight
  returned by getSecondaryBefore(). If p!=0 then s can be BEFORE_WEIGHT16.
  
  <p>Exception: [0, 0] is handled by the CollationBuilder:
  Both its lower and upper boundaries are special.