static IMemento MementoCapture(IMementoContext ctx, Obj item)
 {
     ObjMemento m = new ObjMemento();
     m.Target = item;
     m.Obj_f = item._f;
     m.Obj_f1 = item._f1;
     m.Obj_f2 = item._f2;
     return m;
 }
 static IMemento MementoCapture(IMementoContext ctx, SubWithPrimitiveArray item)
 {
     SubSubMemento m;
     m.BaseMemento = ATTi.Core.Mementos.Memento.CaptureBaseMemento<Sub>(ctx, item);
     m.SubSub_Blibber = ATTi.Core.Mementos.Memento.CaptureMemento<Obj>(ctx, Blibber);
     m.SubSub_ss = item._ss;
     m.SubSub_values = ATTi.Core.Mementos.Memento.CaptureArrayMemento<int>(ctx, item._values);
     return m;
 }
 static void MementoRestore(IMementoContext ctx, ref SubWithPrimitiveArray item, object m)
 {
     SubSubMemento data = (SubSubMemento)m;
     Sub b = item;
     ATTi.Core.Mementos.Memento.RestoreBaseMemento<Sub>(ctx, ref b, data.BaseMemento);
     ATTi.Core.Mementos.Memento.RestoreMemento<Obj>(ctx, ref Blibber, data.SubSub_Blibber);
     item._ss = data.SubSub_ss;
     ATTi.Core.Mementos.Memento.RestoreArrayMemento<int>(ctx, ref item._values, data.SubSub_values);
 }
 static void MementoRestore(IMementoContext ctx, ref SubWithListField item, object m)
 {
     SubWithListFieldMemento data = (SubWithListFieldMemento)m;
     Sub b = item;
     ATTi.Core.Mementos.Memento.RestoreBaseMemento<Sub>(ctx, ref b, data.BaseMemento);
     ATTi.Core.Mementos.Memento.RestoreMemento(ctx, ref item._values, data.SubSub_values);
 }
 static IMemento MementoCapture(IMementoContext ctx, SubWithListField item)
 {
     SubWithListFieldMemento m;
     m.BaseMemento = ATTi.Core.Mementos.Memento.CaptureBaseMemento<Sub>(ctx, item);
     m.SubSub_values = ATTi.Core.Mementos.Memento.CaptureMemento(ctx, item._values);
     return m;
 }
 static void MementoRestore(IMementoContext ctx, ref SubWithArrayOfObjects item, object m)
 {
     SubWithArrayOfObjectsMemento data = (SubWithArrayOfObjectsMemento)m;
     Sub b = item;
     ATTi.Core.Mementos.Memento.RestoreBaseMemento<Sub>(ctx, ref b, data.BaseMemento);
     item._ss = data.SubSub_ss;
     ATTi.Core.Mementos.Memento.RestoreArrayMemento<object>(ctx, ref item._values, data.SubSub_values);
 }
 static IMemento MementoCapture(IMementoContext ctx, SubWithArrayOfObjects item)
 {
     SubWithArrayOfObjectsMemento m;
     m.BaseMemento = ATTi.Core.Mementos.Memento.CaptureBaseMemento<Sub>(ctx, item);
     m.SubSub_ss = item._ss;
     m.SubSub_values = ATTi.Core.Mementos.Memento.CaptureArrayMemento<object>(ctx, item._values);
     return m;
 }
 static void MementoRestore(IMementoContext ctx, ref Obj item, object m)
 {
     ObjMemento data = (ObjMemento)m;
     item._f = data.Obj_f;
     item._f1 = data.Obj_f1;
     item._f2 = data.Obj_f2;
 }