private void DoSimplePolygons() {
		int i = 0;
		while(i < m_PolyOuts.size()) {
			OutRec outrec = m_PolyOuts.get(i++);
			OutPt op = outrec.pts;
			if(op == null)
				continue;
			do // for each Pt in Polygon until duplicate found do ...
			{
				OutPt op2 = op.next;
				while(op2 != outrec.pts) {
					if(PointsEqual(op.pt, op2.pt) && op2.next != op && op2.prev != op) {
						// split the polygon into two ...
						OutPt op3 = op.prev;
						OutPt op4 = op2.prev;
						op.prev = op4;
						op4.next = op;
						op2.prev = op3;
						op3.next = op2;

						outrec.pts = op;
						OutRec outrec2 = CreateOutRec();
						outrec2.pts = op2;
						UpdateOutPtIdxs(outrec2);
						if(Poly2ContainsPoly1(outrec2.pts, outrec.pts, m_UseFullRange)) {
							// OutRec2 is contained by OutRec1 ...
							outrec2.isHole = !outrec.isHole;
							outrec2.firstLeft = outrec;
						} else if(Poly2ContainsPoly1(outrec.pts, outrec2.pts, m_UseFullRange)) {
							// OutRec1 is contained by OutRec2 ...
							outrec2.isHole = outrec.isHole;
							outrec.isHole = !outrec2.isHole;
							outrec2.firstLeft = outrec.firstLeft;
							outrec.firstLeft = outrec2;
						} else {
							// the 2 polygons are separate ...
							outrec2.isHole = outrec.isHole;
							outrec2.firstLeft = outrec.firstLeft;
						}
						op2 = op; // ie get ready for the next iteration
					}
					op2 = op2.next;
				}
				op = op.next;
			} while(op != outrec.pts);
		}
	}