diff --git a/Assets/Fonts.meta b/Assets/Fonts.meta
new file mode 100644
index 0000000..289170d
--- /dev/null
+++ b/Assets/Fonts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 282a943f36668ff479bc23eaca294bdd
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Fonts/ChosunGu SDF.asset b/Assets/Fonts/ChosunGu SDF.asset
new file mode 100644
index 0000000..c626016
--- /dev/null
+++ b/Assets/Fonts/ChosunGu SDF.asset
@@ -0,0 +1,298 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &-6184892272082730352
+Material:
+ serializedVersion: 8
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: ChosunGu Atlas Material
+ m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3}
+ m_Parent: {fileID: 0}
+ m_ModifiedSerializedProperties: 0
+ m_ValidKeywords: []
+ m_InvalidKeywords: []
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_LockedProperties:
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _Cube:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _FaceTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 3745761090520965496}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OutlineTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Ints: []
+ m_Floats:
+ - _Ambient: 0.5
+ - _Bevel: 0.5
+ - _BevelClamp: 0
+ - _BevelOffset: 0
+ - _BevelRoundness: 0
+ - _BevelWidth: 0
+ - _BumpFace: 0
+ - _BumpOutline: 0
+ - _ColorMask: 15
+ - _CullMode: 0
+ - _Diffuse: 0.5
+ - _FaceDilate: 0
+ - _FaceUVSpeedX: 0
+ - _FaceUVSpeedY: 0
+ - _GlowInner: 0.05
+ - _GlowOffset: 0
+ - _GlowOuter: 0.05
+ - _GlowPower: 0.75
+ - _GradientScale: 10
+ - _LightAngle: 3.1416
+ - _MaskSoftnessX: 0
+ - _MaskSoftnessY: 0
+ - _OutlineSoftness: 0
+ - _OutlineUVSpeedX: 0
+ - _OutlineUVSpeedY: 0
+ - _OutlineWidth: 0
+ - _PerspectiveFilter: 0.875
+ - _Reflectivity: 10
+ - _ScaleRatioA: 0.9
+ - _ScaleRatioB: 0.73125
+ - _ScaleRatioC: 0.73125
+ - _ScaleX: 1
+ - _ScaleY: 1
+ - _ShaderFlags: 0
+ - _Sharpness: 0
+ - _SpecularPower: 2
+ - _Stencil: 0
+ - _StencilComp: 8
+ - _StencilOp: 0
+ - _StencilReadMask: 255
+ - _StencilWriteMask: 255
+ - _TextureHeight: 1024
+ - _TextureWidth: 1024
+ - _UnderlayDilate: 0
+ - _UnderlayOffsetX: 0
+ - _UnderlayOffsetY: 0
+ - _UnderlaySoftness: 0
+ - _VertexOffsetX: 0
+ - _VertexOffsetY: 0
+ - _WeightBold: 0.75
+ - _WeightNormal: 0
+ m_Colors:
+ - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767}
+ - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0}
+ - _FaceColor: {r: 1, g: 1, b: 1, a: 1}
+ - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5}
+ - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767}
+ - _OutlineColor: {r: 0, g: 0, b: 0, a: 1}
+ - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1}
+ - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
+ - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5}
+ m_BuildTextureStacks: []
+ m_AllowLocking: 1
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3}
+ m_Name: ChosunGu SDF
+ m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TMP_FontAsset
+ m_Version: 1.1.0
+ m_FaceInfo:
+ m_FaceIndex: 0
+ m_FamilyName: ?????
+ m_StyleName: Regular
+ m_PointSize: 90
+ m_Scale: 1
+ m_UnitsPerEM: 1000
+ m_LineHeight: 90
+ m_AscentLine: 77.4
+ m_CapLine: 68
+ m_MeanLine: 48
+ m_Baseline: 0
+ m_DescentLine: -12.6
+ m_SuperscriptOffset: 77.4
+ m_SuperscriptSize: 0.5
+ m_SubscriptOffset: -12.6
+ m_SubscriptSize: 0.5
+ m_UnderlineOffset: -14.400001
+ m_UnderlineThickness: 3.6000001
+ m_StrikethroughOffset: 19.2
+ m_StrikethroughThickness: 3.6000001
+ m_TabWidth: 27
+ m_Material: {fileID: -6184892272082730352}
+ m_SourceFontFileGUID: 90ceb21f33ec4a84f9284288f050fd0a
+ m_CreationSettings:
+ sourceFontFileName:
+ sourceFontFileGUID: 90ceb21f33ec4a84f9284288f050fd0a
+ faceIndex: 0
+ pointSizeSamplingMode: 0
+ pointSize: 90
+ padding: 9
+ paddingMode: 2
+ packingMode: 0
+ atlasWidth: 1024
+ atlasHeight: 1024
+ characterSetSelectionMode: 7
+ characterSequence:
+ referencedFontAssetGUID:
+ referencedTextAssetGUID:
+ fontStyle: 0
+ fontStyleModifier: 0
+ renderMode: 4165
+ includeFontFeatures: 0
+ m_SourceFontFile: {fileID: 12800000, guid: 90ceb21f33ec4a84f9284288f050fd0a, type: 3}
+ m_SourceFontFilePath:
+ m_AtlasPopulationMode: 1
+ InternalDynamicOS: 0
+ m_GlyphTable: []
+ m_CharacterTable: []
+ m_AtlasTextures:
+ - {fileID: 3745761090520965496}
+ m_AtlasTextureIndex: 0
+ m_IsMultiAtlasTexturesEnabled: 0
+ m_GetFontFeatures: 1
+ m_ClearDynamicDataOnBuild: 1
+ m_AtlasWidth: 1024
+ m_AtlasHeight: 1024
+ m_AtlasPadding: 9
+ m_AtlasRenderMode: 4165
+ m_UsedGlyphRects: []
+ m_FreeGlyphRects:
+ - m_X: 0
+ m_Y: 0
+ m_Width: 1023
+ m_Height: 1023
+ m_FontFeatureTable:
+ m_MultipleSubstitutionRecords: []
+ m_LigatureSubstitutionRecords: []
+ m_GlyphPairAdjustmentRecords: []
+ m_MarkToBaseAdjustmentRecords: []
+ m_MarkToMarkAdjustmentRecords: []
+ m_ShouldReimportFontFeatures: 0
+ m_FallbackFontAssetTable: []
+ m_FontWeightTable:
+ - regularTypeface: {fileID: 0}
+ italicTypeface: {fileID: 0}
+ - regularTypeface: {fileID: 0}
+ italicTypeface: {fileID: 0}
+ - regularTypeface: {fileID: 0}
+ italicTypeface: {fileID: 0}
+ - regularTypeface: {fileID: 0}
+ italicTypeface: {fileID: 0}
+ - regularTypeface: {fileID: 0}
+ italicTypeface: {fileID: 0}
+ - regularTypeface: {fileID: 0}
+ italicTypeface: {fileID: 0}
+ - regularTypeface: {fileID: 0}
+ italicTypeface: {fileID: 0}
+ - regularTypeface: {fileID: 0}
+ italicTypeface: {fileID: 0}
+ - regularTypeface: {fileID: 0}
+ italicTypeface: {fileID: 0}
+ - regularTypeface: {fileID: 0}
+ italicTypeface: {fileID: 0}
+ fontWeights: []
+ normalStyle: 0
+ normalSpacingOffset: 0
+ boldStyle: 0.75
+ boldSpacing: 7
+ italicStyle: 35
+ tabSize: 10
+ m_fontInfo:
+ Name:
+ PointSize: 0
+ Scale: 0
+ CharacterCount: 0
+ LineHeight: 0
+ Baseline: 0
+ Ascender: 0
+ CapHeight: 0
+ Descender: 0
+ CenterLine: 0
+ SuperscriptOffset: 0
+ SubscriptOffset: 0
+ SubSize: 0
+ Underline: 0
+ UnderlineThickness: 0
+ strikethrough: 0
+ strikethroughThickness: 0
+ TabWidth: 0
+ Padding: 0
+ AtlasWidth: 0
+ AtlasHeight: 0
+ m_glyphInfoList: []
+ m_KerningTable:
+ kerningPairs: []
+ fallbackFontAssets: []
+ atlas: {fileID: 0}
+--- !u!28 &3745761090520965496
+Texture2D:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: ChosunGu Atlas
+ m_ImageContentsHash:
+ serializedVersion: 2
+ Hash: 00000000000000000000000000000000
+ m_IsAlphaChannelOptional: 0
+ serializedVersion: 4
+ m_Width: 1
+ m_Height: 1
+ m_CompleteImageSize: 1
+ m_MipsStripped: 0
+ m_TextureFormat: 1
+ m_MipCount: 1
+ m_IsReadable: 1
+ m_IsPreProcessed: 0
+ m_IgnoreMipmapLimit: 1
+ m_MipmapLimitGroupName:
+ m_StreamingMipmaps: 0
+ m_StreamingMipmapsPriority: 0
+ m_VTOnly: 0
+ m_AlphaIsTransparency: 0
+ m_ImageCount: 1
+ m_TextureDimension: 2
+ m_TextureSettings:
+ serializedVersion: 2
+ m_FilterMode: 1
+ m_Aniso: 1
+ m_MipBias: 0
+ m_WrapU: 0
+ m_WrapV: 0
+ m_WrapW: 0
+ m_LightmapFormat: 0
+ m_ColorSpace: 1
+ m_PlatformBlob:
+ image data: 1
+ _typelessdata: 00
+ m_StreamData:
+ serializedVersion: 2
+ offset: 0
+ size: 0
+ path:
diff --git a/Assets/Fonts/ChosunGu SDF.asset.meta b/Assets/Fonts/ChosunGu SDF.asset.meta
new file mode 100644
index 0000000..4aa85a8
--- /dev/null
+++ b/Assets/Fonts/ChosunGu SDF.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 869674cfb3d61894eb996d32970d370a
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Fonts/ChosunGu.TTF b/Assets/Fonts/ChosunGu.TTF
new file mode 100644
index 0000000..953386f
Binary files /dev/null and b/Assets/Fonts/ChosunGu.TTF differ
diff --git a/Assets/Fonts/ChosunGu.TTF.meta b/Assets/Fonts/ChosunGu.TTF.meta
new file mode 100644
index 0000000..a4eba45
--- /dev/null
+++ b/Assets/Fonts/ChosunGu.TTF.meta
@@ -0,0 +1,21 @@
+fileFormatVersion: 2
+guid: 90ceb21f33ec4a84f9284288f050fd0a
+TrueTypeFontImporter:
+ externalObjects: {}
+ serializedVersion: 4
+ fontSize: 16
+ forceTextureCase: -2
+ characterSpacing: 0
+ characterPadding: 1
+ includeFontData: 1
+ fontNames:
+ - ?????
+ fallbackFontReferences: []
+ customCharacters:
+ fontRenderingMode: 0
+ ascentCalculationMode: 1
+ useLegacyBoundsCalculation: 0
+ shouldRoundAdvanceValue: 1
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon.meta b/Assets/Photon.meta
new file mode 100644
index 0000000..e24157e
--- /dev/null
+++ b/Assets/Photon.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 98951132346795f438babe7a3183da43
+folderAsset: yes
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/PhotonChat.meta b/Assets/Photon/PhotonChat.meta
new file mode 100644
index 0000000..ba25111
--- /dev/null
+++ b/Assets/Photon/PhotonChat.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ea05e6479d592944d955c2a5e1a6d6f1
+folderAsset: yes
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/PhotonChat/Code.meta b/Assets/Photon/PhotonChat/Code.meta
new file mode 100644
index 0000000..a328a6d
--- /dev/null
+++ b/Assets/Photon/PhotonChat/Code.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: af83a98aaa4f7b64eb7fcec95ee7b1ed
+folderAsset: yes
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/PhotonChat/Code/ChannelCreationOptions.cs b/Assets/Photon/PhotonChat/Code/ChannelCreationOptions.cs
new file mode 100644
index 0000000..50c791b
--- /dev/null
+++ b/Assets/Photon/PhotonChat/Code/ChannelCreationOptions.cs
@@ -0,0 +1,22 @@
+// ----------------------------------------------------------------------------------------------------------------------
+// The Photon Chat Api enables clients to connect to a chat server and communicate with other clients.
+// ChannelCreationOptions is a parameter used when subscribing to a public channel for the first time.
+// Photon Chat Api - Copyright (C) 2018 Exit Games GmbH
+// ----------------------------------------------------------------------------------------------------------------------
+
+namespace Photon.Chat
+{
+ public class ChannelCreationOptions
+ {
+ /// Default values of channel creation options.
+ public static ChannelCreationOptions Default = new ChannelCreationOptions();
+ /// Whether or not the channel to be created will allow client to keep a list of users.
+ public bool PublishSubscribers { get; set; }
+ /// Limit of the number of users subscribed to the channel to be created.
+ public int MaxSubscribers { get; set; }
+
+ #if CHAT_EXTENDED
+ public System.Collections.Generic.Dictionary CustomProperties { get; set; }
+ #endif
+ }
+}
diff --git a/Assets/Photon/PhotonChat/Code/ChannelCreationOptions.cs.meta b/Assets/Photon/PhotonChat/Code/ChannelCreationOptions.cs.meta
new file mode 100644
index 0000000..5b80d57
--- /dev/null
+++ b/Assets/Photon/PhotonChat/Code/ChannelCreationOptions.cs.meta
@@ -0,0 +1,15 @@
+fileFormatVersion: 2
+guid: 6c1aa0fceaa2bc14eabdf85976f4e2c8
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 119922
+ packageName: PUN 2 - FREE
+ packageVersion: 2.52
+ assetPath: Assets/Photon/PhotonChat/Code/ChannelCreationOptions.cs
+ uploadId: 817708
diff --git a/Assets/Photon/PhotonChat/Code/ChannelWellKnownProperties.cs b/Assets/Photon/PhotonChat/Code/ChannelWellKnownProperties.cs
new file mode 100644
index 0000000..2627e7a
--- /dev/null
+++ b/Assets/Photon/PhotonChat/Code/ChannelWellKnownProperties.cs
@@ -0,0 +1,14 @@
+// ----------------------------------------------------------------------------------------------------------------------
+// The Photon Chat Api enables clients to connect to a chat server and communicate with other clients.
+// ChannelWellKnownProperties contains the list of well-known channel properties.
+// Photon Chat Api - Copyright (C) 2018 Exit Games GmbH
+// ----------------------------------------------------------------------------------------------------------------------
+
+namespace Photon.Chat
+{
+ public class ChannelWellKnownProperties
+ {
+ public const byte MaxSubscribers = 255;
+ public const byte PublishSubscribers = 254;
+ }
+}
diff --git a/Assets/Photon/PhotonChat/Code/ChannelWellKnownProperties.cs.meta b/Assets/Photon/PhotonChat/Code/ChannelWellKnownProperties.cs.meta
new file mode 100644
index 0000000..0f61b3a
--- /dev/null
+++ b/Assets/Photon/PhotonChat/Code/ChannelWellKnownProperties.cs.meta
@@ -0,0 +1,15 @@
+fileFormatVersion: 2
+guid: 5eb508ffb7b7b0f47882f0087a668283
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 119922
+ packageName: PUN 2 - FREE
+ packageVersion: 2.52
+ assetPath: Assets/Photon/PhotonChat/Code/ChannelWellKnownProperties.cs
+ uploadId: 817708
diff --git a/Assets/Photon/PhotonChat/Code/ChatAppSettings.cs b/Assets/Photon/PhotonChat/Code/ChatAppSettings.cs
new file mode 100644
index 0000000..a2255d5
--- /dev/null
+++ b/Assets/Photon/PhotonChat/Code/ChatAppSettings.cs
@@ -0,0 +1,64 @@
+// -----------------------------------------------------------------------
+//
+// Chat API for Photon - Copyright (C) 2018 Exit Games GmbH
+//
+// Settings for Photon Chat application and the server to connect to.
+// developer@photonengine.com
+// ----------------------------------------------------------------------------
+
+#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER
+#define SUPPORTED_UNITY
+#endif
+
+
+namespace Photon.Chat
+{
+ using System;
+ using ExitGames.Client.Photon;
+ #if SUPPORTED_UNITY
+ using UnityEngine.Serialization;
+ #endif
+
+ ///
+ /// Settings for Photon application(s) and the server to connect to.
+ ///
+ ///
+ /// This is Serializable for Unity, so it can be included in ScriptableObject instances.
+ ///
+ #if !NETFX_CORE || SUPPORTED_UNITY
+ [Serializable]
+ #endif
+ public class ChatAppSettings
+ {
+ /// AppId for the Chat Api.
+ public string AppIdChat;
+
+ /// The AppVersion can be used to identify builds and will split the AppId distinct "Virtual AppIds" (important for the users to find each other).
+ public string AppVersion;
+
+ /// Can be set to any of the Photon Cloud's region names to directly connect to that region.
+ public string FixedRegion;
+
+ /// The address (hostname or IP) of the server to connect to.
+ public string Server;
+
+ /// If not null, this sets the port of the first Photon server to connect to (that will "forward" the client as needed).
+ public ushort Port;
+
+ /// The address (hostname or IP and port) of the proxy server.
+ public string ProxyServer;
+
+ /// The network level protocol to use.
+ public ConnectionProtocol Protocol = ConnectionProtocol.Udp;
+
+ /// Enables a fallback to another protocol in case a connect to the Name Server fails.
+ /// See: LoadBalancingClient.EnableProtocolFallback.
+ public bool EnableProtocolFallback = true;
+
+ /// Log level for the network lib.
+ public DebugLevel NetworkLogging = DebugLevel.ERROR;
+
+ /// If true, the default nameserver address for the Photon Cloud should be used.
+ public bool IsDefaultNameServer { get { return string.IsNullOrEmpty(this.Server); } }
+ }
+}
\ No newline at end of file
diff --git a/Assets/Photon/PhotonChat/Code/ChatAppSettings.cs.meta b/Assets/Photon/PhotonChat/Code/ChatAppSettings.cs.meta
new file mode 100644
index 0000000..cf39b30
--- /dev/null
+++ b/Assets/Photon/PhotonChat/Code/ChatAppSettings.cs.meta
@@ -0,0 +1,15 @@
+fileFormatVersion: 2
+guid: 87776a9b1f405644abcc38ecd70c37fb
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+AssetOrigin:
+ serializedVersion: 1
+ productId: 119922
+ packageName: PUN 2 - FREE
+ packageVersion: 2.52
+ assetPath: Assets/Photon/PhotonChat/Code/ChatAppSettings.cs
+ uploadId: 817708
diff --git a/Assets/Photon/PhotonChat/Code/ChatChannel.cs b/Assets/Photon/PhotonChat/Code/ChatChannel.cs
new file mode 100644
index 0000000..6d0885e
--- /dev/null
+++ b/Assets/Photon/PhotonChat/Code/ChatChannel.cs
@@ -0,0 +1,255 @@
+// ----------------------------------------------------------------------------------------------------------------------
+// The Photon Chat Api enables clients to connect to a chat server and communicate with other clients.
+// ChatClient is the main class of this api.
+// Photon Chat Api - Copyright (C) 2014 Exit Games GmbH
+// ----------------------------------------------------------------------------------------------------------------------
+
+#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER
+#define SUPPORTED_UNITY
+#endif
+
+namespace Photon.Chat
+{
+ using System.Collections.Generic;
+ using System.Text;
+
+ #if SUPPORTED_UNITY || NETFX_CORE
+ using Hashtable = ExitGames.Client.Photon.Hashtable;
+ using SupportClass = ExitGames.Client.Photon.SupportClass;
+ #endif
+
+
+ ///
+ /// A channel of communication in Photon Chat, updated by ChatClient and provided as READ ONLY.
+ ///
+ ///
+ /// Contains messages and senders to use (read!) and display by your GUI.
+ /// Access these by:
+ /// ChatClient.PublicChannels
+ /// ChatClient.PrivateChannels
+ ///
+ public class ChatChannel
+ {
+ /// Name of the channel (used to subscribe and unsubscribe).
+ public readonly string Name;
+
+ /// Senders of messages in chronological order. Senders and Messages refer to each other by index. Senders[x] is the sender of Messages[x].
+ public readonly List Senders = new List();
+
+ /// Messages in chronological order. Senders and Messages refer to each other by index. Senders[x] is the sender of Messages[x].
+ public readonly List