anchor.diff:  
           ++pushBackIter;
   
  -        if (pushBackIter == Settings.maxPolygonVertices) {
  +        if (pushBackIter == Settings.maxPolygonVertices ||
  +            rootIterCount == MAX_ROOT_ITERATIONS) {
             break;
           }
         }
  
positive.code:       case SeparationFunctionType.FACE_A:
          Rot.mulToOutUnsafe(_xfa.q, axis, _normal);
          Transform.mulToOutUnsafeVec2(_xfa, localPoint, _pointA);
  
          Rot.mulTransUnsafeVec2(_xfb.q, _normal..negate(), _axisB);
          _normal.negate();
  
          _localPointB.setFrom(proxyB.getVertex(indexB));
          Transform.mulToOutUnsafeVec2(_xfb, _localPointB, _pointB);
  
negative.code:             t = 0.5 * (a1 + a2);
            }
  
            ++rootIterCount;
            ++toiRootIters;
  
            double s = _fcn.evaluate(_indexes[0], _indexes[1], t);
  
            if ((s - target).abs() < tolerance) {
  