docs: def decompressBlocks(self, startBlock, endBlock):
          '''
          This is mostly a helper function to get BWT range, but I wanted it to be a separate thing for use possibly in 
          decompression
          @param startBlock - the index of the start block we will decode
          @param endBlock - the index of the final block we will decode, if they are the same, we decode one block
          @return - an array of size blockSize*(endBlock-startBlock+1), interpreting that block is up to getBWTRange(...)
          '''
          expectedIndex = startBlock*self.binSize
          trueIndex = np.sum(self.partialFM[startBlock])-self.offsetSum
          dist = expectedIndex - trueIndex
          
          #find the end of the region of interest
          startRange = self.refFM[startBlock]
          if endBlock >= self.refFM.shape[0]-1:
              endRange = self.bwt.shape[0]
              returnSize = self.binSize*(endBlock-startBlock)+(self.totalSize % self.binSize)
          else:
              endRange = self.refFM[endBlock+1]+1
              returnSize = self.binSize*(endBlock-startBlock+1)
              while endRange < self.bwt.shape[0] and (self.bwt[endRange] & self.mask) == (self.bwt[endRange-1] & self.mask):
                  endRange += 1
          
          ret = np.zeros(dtype='<u1', shape=(returnSize,))
          
          #split the letters and numbers in the compressed bwt
          letters = np.bitwise_and(self.bwt[startRange:endRange], self.mask)
          counts = np.right_shift(self.bwt[startRange:endRange], self.letterBits, dtype='<u8')
          
          #multiply counts where needed
          i = 1
          same = (letters[0:-1] == letters[1:])
          while np.count_nonzero(same) > 0:
              (counts[i:])[same] *= self.numPower
              i += 1
              same = np.bitwise_and(same[0:-1], same[1:])
          
          #now I have letters and counts, time to fill in the array
          s = 0
          lInd = 0
          while dist > 0:
              if counts[lInd] < dist:
                  dist -= counts[lInd]
                  lInd += 1
              else:
                  counts[lInd] -= dist
                  dist = 0
          
          #we're at the correct letter index now
          while s < ret.shape[0]:
              if lInd >= letters.shape[0]:
                  pass
              ret[s:s+counts[lInd]] = letters[lInd]
              s += counts[lInd]
              lInd += 1
          
          return ret