public static QueryIterator createQuerySpecialistIterator(ControlFrame frame, Object [] MV_returnarray) {
    { Proposition proposition = null;
      PropertyList subqueryoptions = null;

      { Object [] caller_MV_returnarray = new Object[1];

        proposition = ControlFrame.computeSubqueryOptions(frame, caller_MV_returnarray);
        subqueryoptions = ((PropertyList)(caller_MV_returnarray[0]));
      }
      { QueryIterator subqueryiterator = Logic.allocateQueryIterator();
        Description subquerydescription = null;
        Stella_Object matchmode = null;
        boolean truefalsequeryP = false;
        boolean partialqueryP = false;
        List iovariables = List.newList();
        Vector iovariablebindings = null;

        if (proposition == null) {
          { QueryIterator _return_temp = null;

            MV_returnarray[0] = BooleanWrapper.wrapBoolean(false);
            MV_returnarray[1] = BooleanWrapper.wrapBoolean(false);
            return (_return_temp);
          }
        }
        else {
          QueryIterator.processQueryOptions(subqueryiterator, subqueryoptions);
        }
        matchmode = Logic.lookupQueryOption(subqueryiterator, Logic.KWD_MATCH_MODE);
        if ((matchmode != null) &&
            (!Stella.stringEqualP(Stella_Object.coerceToString(matchmode), "STRICT"))) {
          partialqueryP = true;
        }
        Logic.collectFreeVariables(proposition, iovariables, List.list(Stella.NIL), List.list(Stella.NIL));
        KeyValueList.setDynamicSlotValue(frame.dynamicSlots, Logic.SYM_LOGIC_QUERY_SPECIALIST_IO_VARIABLES, iovariables, null);
        { Object old$Evaluationmode$000 = Logic.$EVALUATIONMODE$.get();

          try {
            Native.setSpecial(Logic.$EVALUATIONMODE$, Logic.KWD_DESCRIPTION);
            { Description self001 = Description.newDescription();

              self001.ioVariables = ((Vector)(Logic.copyListToArgumentsVector(iovariables)));
              self001.proposition = proposition;
              subquerydescription = self001;
            }
            { Description temp000 = Description.findDuplicateDescription(subquerydescription);

              subquerydescription = ((temp000 != null) ? temp000 : subquerydescription);
            }

          } finally {
            Logic.$EVALUATIONMODE$.set(old$Evaluationmode$000);
          }
        }
        Description.computeInternalVariables(subquerydescription);
        iovariablebindings = Vector.newVector(iovariables.length());
        truefalsequeryP = true;
        { Stella_Object var = null;
          Cons iter000 = iovariables.theConsList;
          int i = Stella.NULL_INTEGER;
          int iter001 = 0;

          for (;!(iter000 == Stella.NIL); iter000 = iter000.rest, iter001 = iter001 + 1) {
            var = iter000.value;
            i = iter001;
            (iovariablebindings.theArray)[i] = (Logic.argumentBoundTo(var));
            if ((iovariablebindings.theArray)[i] == null) {
              truefalsequeryP = false;
            }
          }
        }
        QueryIterator.initializeQueryIterator(subqueryiterator, subquerydescription, iovariablebindings);
        { QueryIterator _return_temp = subqueryiterator;

          MV_returnarray[0] = BooleanWrapper.wrapBoolean(truefalsequeryP);
          MV_returnarray[1] = BooleanWrapper.wrapBoolean(partialqueryP);
          return (_return_temp);
        }
      }
    }
  }