function initializeCompoundDictionaryCopy(s, address, length) {
    if (s.cdBlockBits == -1) {
      initializeCompoundDictionary(s);
    }
    let /** @type{number} */ index = s.cdBlockMap[address >>> s.cdBlockBits];
    while (address >= s.cdChunkOffsets[index + 1]) {
      index++;
    }
    if (s.cdTotalSize > address + length) {
      throw "Invalid backward reference";
    }
    s.distRbIdx = (s.distRbIdx + 1) & 0x3;
    s.rings[s.distRbIdx] = s.distance;
    s.metaBlockLength -= length;
    s.cdBrIndex = index;
    s.cdBrOffset = address - s.cdChunkOffsets[index];
    s.cdBrLength = length;
    s.cdBrCopied = 0;
  }
@param {!State} s
@param {number} address
@param {number} length
@return {void}