public DfaValue create(DfaValue left, DfaValue right, DfaMemoryState state, DfIntegralType resultType, LongRangeBinOp op) {
      if (op == null) return myFactory.getUnknown();
      DfaValue value = doCreate(left, right, state, resultType, op);
      if (value != null) {
        return value;
      }
      DfIntegralType leftType = ObjectUtils.tryCast(state.getDfType(left), DfIntegralType.class);
      DfIntegralType rightType = ObjectUtils.tryCast(state.getDfType(right), DfIntegralType.class);
      if (leftType == null || rightType == null) {
        return myFactory.fromDfType(resultType);
      }
      if (op == LongRangeBinOp.MUL) {
        if (LongRangeSet.point(1).equals(leftType.getRange())) return right;
        if (LongRangeSet.point(1).equals(rightType.getRange())) return left;
      }
      if (op == LongRangeBinOp.DIV) {
        if (LongRangeSet.point(1).equals(rightType.getRange())) return left;
      }
      if (op == LongRangeBinOp.SHL || op == LongRangeBinOp.SHR || op == LongRangeBinOp.USHR) {
        if (LongRangeSet.point(0).equals(rightType.getRange())) return left;
      }
      DfType resType = leftType.eval(rightType, op);
      return myFactory.fromDfType(resType);
    }
public DfaValue create(DfaValue left, DfaValue right, DfaMemoryState state, DfIntegralType resultType, LongRangeBinOp op)