using System; using System.Reflection; using System.Runtime.Remoting; using System.Runtime.Serialization; namespace System { // Token: 0x0200065A RID: 1626 [Serializable] internal class DelegateSerializationHolder : ISerializable, IObjectReference { // Token: 0x06003DFE RID: 15870 RVA: 0x000D2F44 File Offset: 0x000D1144 private DelegateSerializationHolder(SerializationInfo info, StreamingContext ctx) { DelegateSerializationHolder.DelegateEntry delegateEntry = (DelegateSerializationHolder.DelegateEntry)info.GetValue("Delegate", typeof(DelegateSerializationHolder.DelegateEntry)); int num = 0; DelegateSerializationHolder.DelegateEntry delegateEntry2 = delegateEntry; while (delegateEntry2 != null) { delegateEntry2 = delegateEntry2.delegateEntry; num++; } if (num == 1) { this._delegate = delegateEntry.DeserializeDelegate(info); } else { Delegate[] array = new Delegate[num]; delegateEntry2 = delegateEntry; for (int i = 0; i < num; i++) { array[i] = delegateEntry2.DeserializeDelegate(info); delegateEntry2 = delegateEntry2.delegateEntry; } this._delegate = Delegate.Combine(array); } } // Token: 0x06003DFF RID: 15871 RVA: 0x000D2FE4 File Offset: 0x000D11E4 public static void GetDelegateData(Delegate instance, SerializationInfo info, StreamingContext ctx) { Delegate[] invocationList = instance.GetInvocationList(); DelegateSerializationHolder.DelegateEntry delegateEntry = null; for (int i = 0; i < invocationList.Length; i++) { Delegate @delegate = invocationList[i]; string text = ((@delegate.Target == null) ? null : ("target" + i)); DelegateSerializationHolder.DelegateEntry delegateEntry2 = new DelegateSerializationHolder.DelegateEntry(@delegate, text); if (delegateEntry == null) { info.AddValue("Delegate", delegateEntry2); } else { delegateEntry.delegateEntry = delegateEntry2; } delegateEntry = delegateEntry2; if (@delegate.Target != null) { info.AddValue(text, @delegate.Target); } } info.SetType(typeof(DelegateSerializationHolder)); } // Token: 0x06003E00 RID: 15872 RVA: 0x000D308C File Offset: 0x000D128C public void GetObjectData(SerializationInfo info, StreamingContext context) { throw new NotSupportedException(); } // Token: 0x06003E01 RID: 15873 RVA: 0x000D3094 File Offset: 0x000D1294 public object GetRealObject(StreamingContext context) { return this._delegate; } // Token: 0x040018C4 RID: 6340 private Delegate _delegate; // Token: 0x0200065B RID: 1627 [Serializable] private class DelegateEntry { // Token: 0x06003E02 RID: 15874 RVA: 0x000D309C File Offset: 0x000D129C public DelegateEntry(Delegate del, string targetLabel) { this.type = del.GetType().FullName; this.assembly = del.GetType().Assembly.FullName; this.target = targetLabel; this.targetTypeAssembly = del.Method.DeclaringType.Assembly.FullName; this.targetTypeName = del.Method.DeclaringType.FullName; this.methodName = del.Method.Name; } // Token: 0x06003E03 RID: 15875 RVA: 0x000D3120 File Offset: 0x000D1320 public Delegate DeserializeDelegate(SerializationInfo info) { object obj = null; if (this.target != null) { obj = info.GetValue(this.target.ToString(), typeof(object)); } Assembly assembly = Assembly.Load(this.assembly); Type type = assembly.GetType(this.type); Delegate @delegate; if (obj != null) { if (RemotingServices.IsTransparentProxy(obj)) { Assembly assembly2 = Assembly.Load(this.targetTypeAssembly); Type type2 = assembly2.GetType(this.targetTypeName); if (!type2.IsInstanceOfType(obj)) { throw new RemotingException("Unexpected proxy type."); } } @delegate = Delegate.CreateDelegate(type, obj, this.methodName); } else { Assembly assembly3 = Assembly.Load(this.targetTypeAssembly); Type type3 = assembly3.GetType(this.targetTypeName); @delegate = Delegate.CreateDelegate(type, type3, this.methodName); } return @delegate; } // Token: 0x040018C5 RID: 6341 private string type; // Token: 0x040018C6 RID: 6342 private string assembly; // Token: 0x040018C7 RID: 6343 public object target; // Token: 0x040018C8 RID: 6344 private string targetTypeAssembly; // Token: 0x040018C9 RID: 6345 private string targetTypeName; // Token: 0x040018CA RID: 6346 private string methodName; // Token: 0x040018CB RID: 6347 public DelegateSerializationHolder.DelegateEntry delegateEntry; } } }