return new ECPoint.F2m(this.curve);
return new ECPoint.F2m(this.curve, null, null, this.withCompression);
        public ECPoint add(ECPoint b)        {            // Check, if points are on the same curve            if (!(this.curve.equals(b.getCurve())))            {                throw new IllegalArgumentException("Only points on the same "                        + "curve can be added");            }            if (this.isInfinity())            {                if (b.isInfinity())                {                    return new ECPoint.F2m(this.curve);                }                return new ECPoint.F2m(b.getCurve(), b.getX(), b.getY(), withCompression);            }            if (b.isInfinity())            {                return new ECPoint.F2m(this.curve, this.x, this.y, withCompression);            }            ECFieldElement.F2m.checkFieldElements(this.x, b.getX());            ECFieldElement.F2m x2 = (ECFieldElement.F2m)b.getX();            ECFieldElement.F2m y2 = (ECFieldElement.F2m)b.getY();            // Check if b = this or b = -this            if (this.x.equals(x2))            {                if (this.y.equals(y2))                {                    // this = b, i.e. this must be doubled                    return this.twice();                }                else                {                    // this = -b, i.e. the result is the point at infinity                    return new ECPoint.F2m(this.curve);                }            }            ECFieldElement.F2m lambda                = (ECFieldElement.F2m)(this.y.add(y2)).divide(this.x.add(x2));            ECFieldElement.F2m x3                = (ECFieldElement.F2m)lambda.square().add(lambda).add(this.x).add(x2).add(this.curve.getA());            ECFieldElement.F2m y3                = (ECFieldElement.F2m)lambda.multiply(this.x.add(x3)).add(x3).add(this.y);            return new ECPoint.F2m(curve, x3, y3, withCompression);        }