code: private LNGIntVector generateBlockingClause(final LNGBooleanVector modelFromSolver, final LNGIntVector relevantVars) {
      final LNGIntVector blockingClause;
      if (relevantVars != null) {
        blockingClause = new LNGIntVector(relevantVars.size());
        for (int i = 0; i < relevantVars.size(); i++) {
          final int varIndex = relevantVars.get(i);
          if (varIndex != -1) {
            final boolean varAssignment = modelFromSolver.get(varIndex);
            blockingClause.push(varAssignment ? (varIndex * 2) ^ 1 : varIndex * 2);
          }
        }
      } else {
        blockingClause = new LNGIntVector(modelFromSolver.size());
        for (int i = 0; i < modelFromSolver.size(); i++) {
          final boolean varAssignment = modelFromSolver.get(i);
          blockingClause.push(varAssignment ? (i * 2) ^ 1 : i * 2);
        }
      }
      return blockingClause;
    }
docs: Generates a blocking clause from a given model and a set of relevant variables.
  @param modelFromSolver the current model for which the blocking clause should be generated
  @param relevantVars    the indices of the relevant variables.  If {@code null} all variables are relevant.
  @return the blocking clause for the given model and relevant variables