コード例 #1
0
        public static MemberAuthenticationResultView Deserialize(Stream bytes)
        {
            int mask = Int32Proxy.Deserialize(bytes);
            var view = new MemberAuthenticationResultView();

            if ((mask & 1) != 0)
            {
                view.AuthToken = StringProxy.Deserialize(bytes);
            }

            view.IsAccountComplete = BooleanProxy.Deserialize(bytes);

            if ((mask & 2) != 0)
            {
                view.LuckyDraw = LuckyDrawUnityViewProxy.Deserialize(bytes);
            }

            view.MemberAuthenticationResult = EnumProxy <MemberAuthenticationResult> .Deserialize(bytes);

            if ((mask & 4) != 0)
            {
                view.MemberView = MemberViewProxy.Deserialize(bytes);
            }
            if ((mask & 8) != 0)
            {
                view.PlayerStatisticsView = PlayerStatisticsViewProxy.Deserialize(bytes);
            }

            view.ServerTime = DateTimeProxy.Deserialize(bytes);
            return(view);
        }
コード例 #2
0
        public static PlayerCardView Deserialize(Stream bytes)
        {
            int mask = Int32Proxy.Deserialize(bytes);
            var view = new PlayerCardView();

            view.Cmid = Int32Proxy.Deserialize(bytes);
            view.Hits = Int64Proxy.Deserialize(bytes);

            if ((mask & 1) != 0)
            {
                view.Name = StringProxy.Deserialize(bytes);
            }
            if ((mask & 2) != 0)
            {
                view.Precision = StringProxy.Deserialize(bytes);
            }

            view.Ranking  = Int32Proxy.Deserialize(bytes);
            view.Shots    = Int64Proxy.Deserialize(bytes);
            view.Splats   = Int32Proxy.Deserialize(bytes);
            view.Splatted = Int32Proxy.Deserialize(bytes);

            if ((mask & 4) != 0)
            {
                view.TagName = StringProxy.Deserialize(bytes);
            }

            return(view);
        }
コード例 #3
0
        public byte[] BuyItem(byte[] data)
        {
            var inputStream  = new MemoryStream(data);
            var itemId       = Int32Proxy.Deserialize(inputStream);
            var authToken    = Encoding.UTF8.GetString(Convert.FromBase64String(StringProxy.Deserialize(inputStream)));
            var currencyType = EnumProxy <UberStrikeCurrencyType> .Deserialize(inputStream);

            var itemType = EnumProxy <UberstrikeItemType> .Deserialize(inputStream);

            var buyingLocationType = EnumProxy <BuyingLocationType> .Deserialize(inputStream);

            var buyingRecommendationType = EnumProxy <BuyingRecommendationType> .Deserialize(inputStream);

            var outputStream = new MemoryStream();

            if (inventoryData.ContainsKey(authToken))
            {
                var item = new ItemInventoryView {
                    ItemId          = itemId,
                    AmountRemaining = itemType != UberstrikeItemType.QuickUse ? -1 : 50
                };
                inventoryData[authToken].Add(item);

                UpdateInventoryData();

                Int32Proxy.Serialize(outputStream, (int)BuyItemResult.OK);
            }
            else
            {
                Int32Proxy.Serialize(outputStream, (int)BuyItemResult.InvalidMember);
            }

            return(outputStream.ToArray());
        }
コード例 #4
0
        public static AuthenticateApplicationView Deserialize(Stream bytes)
        {
            var mask = Int32Proxy.Deserialize(bytes);
            var view = new AuthenticateApplicationView();

            if ((mask & 1) != 0)
            {
                view.CommServer = PhotonViewProxy.Deserialize(bytes);
            }
            if ((mask & 2) != 0)
            {
                view.EncryptionInitVector = StringProxy.Deserialize(bytes);
            }
            if ((mask & 4) != 0)
            {
                view.EncryptionPassPhrase = StringProxy.Deserialize(bytes);
            }
            if ((mask & 8) != 0)
            {
                view.GameServers = ListProxy <PhotonView> .Deserialize(bytes, PhotonViewProxy.Deserialize);
            }

            view.IsEnabled  = BooleanProxy.Deserialize(bytes);
            view.WarnPlayer = BooleanProxy.Deserialize(bytes);
            return(view);
        }
コード例 #5
0
 public static PlayerWeaponStatisticsView Deserialize(Stream bytes)
 {
     return(new PlayerWeaponStatisticsView
     {
         CannonTotalDamageDone = Int32Proxy.Deserialize(bytes),
         CannonTotalShotsFired = Int32Proxy.Deserialize(bytes),
         CannonTotalShotsHit = Int32Proxy.Deserialize(bytes),
         CannonTotalSplats = Int32Proxy.Deserialize(bytes),
         LauncherTotalDamageDone = Int32Proxy.Deserialize(bytes),
         LauncherTotalShotsFired = Int32Proxy.Deserialize(bytes),
         LauncherTotalShotsHit = Int32Proxy.Deserialize(bytes),
         LauncherTotalSplats = Int32Proxy.Deserialize(bytes),
         MachineGunTotalDamageDone = Int32Proxy.Deserialize(bytes),
         MachineGunTotalShotsFired = Int32Proxy.Deserialize(bytes),
         MachineGunTotalShotsHit = Int32Proxy.Deserialize(bytes),
         MachineGunTotalSplats = Int32Proxy.Deserialize(bytes),
         MeleeTotalDamageDone = Int32Proxy.Deserialize(bytes),
         MeleeTotalShotsFired = Int32Proxy.Deserialize(bytes),
         MeleeTotalShotsHit = Int32Proxy.Deserialize(bytes),
         MeleeTotalSplats = Int32Proxy.Deserialize(bytes),
         ShotgunTotalDamageDone = Int32Proxy.Deserialize(bytes),
         ShotgunTotalShotsFired = Int32Proxy.Deserialize(bytes),
         ShotgunTotalShotsHit = Int32Proxy.Deserialize(bytes),
         ShotgunTotalSplats = Int32Proxy.Deserialize(bytes),
         SniperTotalDamageDone = Int32Proxy.Deserialize(bytes),
         SniperTotalShotsFired = Int32Proxy.Deserialize(bytes),
         SniperTotalShotsHit = Int32Proxy.Deserialize(bytes),
         SniperTotalSplats = Int32Proxy.Deserialize(bytes),
         SplattergunTotalDamageDone = Int32Proxy.Deserialize(bytes),
         SplattergunTotalShotsFired = Int32Proxy.Deserialize(bytes),
         SplattergunTotalShotsHit = Int32Proxy.Deserialize(bytes),
         SplattergunTotalSplats = Int32Proxy.Deserialize(bytes)
     });
 }
コード例 #6
0
        byte[] IShopWebServiceContract.BuyItem(byte[] data)
        {
            try
            {
                using (var bytes = new MemoryStream(data))
                {
                    var itemId       = Int32Proxy.Deserialize(bytes);
                    var authToken    = StringProxy.Deserialize(bytes);
                    var currencyType = EnumProxy <UberStrikeCurrencyType> .Deserialize(bytes);

                    var durationType = EnumProxy <BuyingDurationType> .Deserialize(bytes);

                    var itemType = EnumProxy <UberStrikeItemType> .Deserialize(bytes);

                    var marketLocation = EnumProxy <BuyingLocationType> .Deserialize(bytes);

                    var recommendationType = EnumProxy <BuyingRecommendationType> .Deserialize(bytes);

                    BuyItemResult result = OnBuyItem(itemId, authToken, currencyType, durationType, itemType, marketLocation, recommendationType);
                    using (var outBytes = new MemoryStream())
                    {
                        EnumProxy <BuyItemResult> .Serialize(outBytes, result);

                        return(outBytes.ToArray());
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error("Unable to handle BuyItem request:");
                Log.Error(ex);
                return(null);
            }
        }
コード例 #7
0
        public static CommActorInfoView Deserialize(Stream bytes)
        {
            int mask = Int32Proxy.Deserialize(bytes);
            var view = new CommActorInfoView();

            view.AccessLevel = EnumProxy <MemberAccessLevel> .Deserialize(bytes);

            view.Channel = EnumProxy <ChannelType> .Deserialize(bytes);

            if ((mask & 1) != 0)
            {
                view.ClanTag = StringProxy.Deserialize(bytes);
            }

            view.Cmid = Int32Proxy.Deserialize(bytes);

            if ((mask & 2) != 0)
            {
                view.CurrentRoom = GameRoomViewProxy.Deserialize(bytes);
            }

            view.ModerationFlag = ByteProxy.Deserialize(bytes);

            if ((mask & 4) != 0)
            {
                view.ModInformation = StringProxy.Deserialize(bytes);
            }
            if ((mask & 8) != 0)
            {
                view.PlayerName = StringProxy.Deserialize(bytes);
            }

            return(view);
        }
コード例 #8
0
        // Token: 0x060013D6 RID: 5078 RVA: 0x000235CC File Offset: 0x000217CC
        private T Deserialize(byte[] bytes)
        {
            T result;

            using (MemoryStream memoryStream = new MemoryStream(bytes))
            {
                Type typeFromHandle = typeof(T);
                if (typeFromHandle == typeof(int))
                {
                    result = (T)((object)Int32Proxy.Deserialize(memoryStream));
                }
                else if (typeFromHandle == typeof(float))
                {
                    result = (T)((object)SingleProxy.Deserialize(memoryStream));
                }
                else if (typeFromHandle == typeof(string))
                {
                    result = (T)((object)StringProxy.Deserialize(memoryStream));
                }
                else
                {
                    result = default(T);
                }
            }
            return(result);
        }
コード例 #9
0
        public static ApplicationConfigurationView Deserialize(Stream bytes)
        {
            int mask = Int32Proxy.Deserialize(bytes);
            var view = new ApplicationConfigurationView();

            view.MaxLevel              = Int32Proxy.Deserialize(bytes);
            view.MaxXp                 = Int32Proxy.Deserialize(bytes);
            view.PointsBaseLoser       = Int32Proxy.Deserialize(bytes);
            view.PointsBaseWinner      = Int32Proxy.Deserialize(bytes);
            view.PointsHeadshot        = Int32Proxy.Deserialize(bytes);
            view.PointsKill            = Int32Proxy.Deserialize(bytes);
            view.PointsNutshot         = Int32Proxy.Deserialize(bytes);
            view.PointsPerMinuteLoser  = Int32Proxy.Deserialize(bytes);
            view.PointsPerMinuteWinner = Int32Proxy.Deserialize(bytes);
            view.PointsSmackdown       = Int32Proxy.Deserialize(bytes);
            view.XpBaseLoser           = Int32Proxy.Deserialize(bytes);
            view.XpBaseWinner          = Int32Proxy.Deserialize(bytes);
            view.XpHeadshot            = Int32Proxy.Deserialize(bytes);
            view.XpKill                = Int32Proxy.Deserialize(bytes);
            view.XpNutshot             = Int32Proxy.Deserialize(bytes);
            view.XpPerMinuteLoser      = Int32Proxy.Deserialize(bytes);
            view.XpPerMinuteWinner     = Int32Proxy.Deserialize(bytes);

            if ((mask & 1) != 0)
            {
                view.XpRequiredPerLevel = DictionaryProxy <int, int> .Deserialize(bytes, Int32Proxy.Deserialize, Int32Proxy.Deserialize);
            }

            view.XpSmackdown = Int32Proxy.Deserialize(bytes);
            return(view);
        }
コード例 #10
0
        byte[] IAuthenticationWebServiceContract.CompleteAccount(byte[] data)
        {
            try
            {
                using (var bytes = new MemoryStream(data))
                {
                    var cmid        = Int32Proxy.Deserialize(bytes);
                    var name        = StringProxy.Deserialize(bytes);
                    var channelType = EnumProxy <ChannelType> .Deserialize(bytes);

                    var locale    = StringProxy.Deserialize(bytes);
                    var machineId = StringProxy.Deserialize(bytes);

                    var view = OnCompleteAccount(cmid, name, channelType, locale, machineId);
                    using (var outBytes = new MemoryStream())
                    {
                        AccountCompletionResultViewProxy.Serialize(outBytes, view);
                        return(outBytes.ToArray());
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error("Unable to handle CompleteAccount request:");
                Log.Error(ex);
                return(null);
            }
        }
コード例 #11
0
        public static LuckyDrawSetUnityView Deserialize(Stream bytes)
        {
            var mask = Int32Proxy.Deserialize(bytes);
            var view = new LuckyDrawSetUnityView();

            view.CreditsAttributed    = Int32Proxy.Deserialize(bytes);
            view.ExposeItemsToPlayers = BooleanProxy.Deserialize(bytes);
            view.Id = Int32Proxy.Deserialize(bytes);

            if ((mask & 1) != 0)
            {
                view.ImageUrl = StringProxy.Deserialize(bytes);
            }

            view.LuckyDrawId = Int32Proxy.Deserialize(bytes);

            if ((mask & 2) != 0)
            {
                view.LuckyDrawSetItems = ListProxy <BundleItemView> .Deserialize(bytes, BundleItemViewProxy.Deserialize);
            }

            view.PointsAttributed = Int32Proxy.Deserialize(bytes);
            view.SetWeight        = Int32Proxy.Deserialize(bytes);
            return(view);
        }
コード例 #12
0
        public static PhotonView Deserialize(Stream bytes)
        {
            var mask = Int32Proxy.Deserialize(bytes);
            var view = new PhotonView();

            if ((mask & 1) != 0)
            {
                view.IP = StringProxy.Deserialize(bytes);
            }

            view.MinLatency = Int32Proxy.Deserialize(bytes);

            if ((mask & 2) != 0)
            {
                view.Name = StringProxy.Deserialize(bytes);
            }

            view.PhotonId = Int32Proxy.Deserialize(bytes);
            view.Port     = Int32Proxy.Deserialize(bytes);
            view.Region   = EnumProxy <RegionType> .Deserialize(bytes);

            view.UsageType = EnumProxy <PhotonUsageType> .Deserialize(bytes);

            return(view);
        }
コード例 #13
0
        public static PlayerStatisticsView Deserialize(Stream bytes)
        {
            var mask = Int32Proxy.Deserialize(bytes);
            var view = new PlayerStatisticsView();

            view.Cmid      = Int32Proxy.Deserialize(bytes);
            view.Headshots = Int32Proxy.Deserialize(bytes);
            view.Hits      = Int64Proxy.Deserialize(bytes);
            view.Level     = Int32Proxy.Deserialize(bytes);
            view.Nutshots  = Int32Proxy.Deserialize(bytes);

            if ((mask & 1) != 0)
            {
                view.PersonalRecord = PlayerPersonalRecordStatisticsViewProxy.Deserialize(bytes);
            }

            view.Shots           = Int64Proxy.Deserialize(bytes);
            view.Splats          = Int32Proxy.Deserialize(bytes);
            view.Splatted        = Int32Proxy.Deserialize(bytes);
            view.TimeSpentInGame = Int32Proxy.Deserialize(bytes);

            if ((mask & 2) != 0)
            {
                view.WeaponStatistics = PlayerWeaponStatisticsViewProxy.Deserialize(bytes);
            }

            view.Xp = Int32Proxy.Deserialize(bytes);

            return(view);
        }
コード例 #14
0
        public static LuckyDrawUnityView Deserialize(Stream bytes)
        {
            var mask = Int32Proxy.Deserialize(bytes);
            var view = new LuckyDrawUnityView();

            view.Category = EnumProxy <BundleCategoryType> .Deserialize(bytes);

            if ((mask & 1) != 0)
            {
                view.Description = StringProxy.Deserialize(bytes);
            }
            if ((mask & 2) != 0)
            {
                view.IconUrl = StringProxy.Deserialize(bytes);
            }

            view.Id = Int32Proxy.Deserialize(bytes);
            view.IsAvailableInShop = BooleanProxy.Deserialize(bytes);

            if ((mask & 4) != 0)
            {
                view.LuckyDrawSets = ListProxy <LuckyDrawSetUnityView> .Deserialize(bytes, LuckyDrawSetUnityViewProxy.Deserialize);
            }
            if ((mask & 8) != 0)
            {
                view.Name = StringProxy.Deserialize(bytes);
            }

            view.Price = Int32Proxy.Deserialize(bytes);
            view.UberStrikeCurrencyType = EnumProxy <UberStrikeCurrencyType> .Deserialize(bytes);

            return(view);
        }
コード例 #15
0
        public static PublicProfileView Deserialize(Stream bytes)
        {
            var mask = Int32Proxy.Deserialize(bytes);
            var view = new PublicProfileView();

            view.AccessLevel = EnumProxy <MemberAccessLevel> .Deserialize(bytes);

            view.Cmid = Int32Proxy.Deserialize(bytes);
            view.EmailAddressStatus = EnumProxy <EmailAddressStatus> .Deserialize(bytes);

            if ((mask & 1) != 0)
            {
                view.FacebookId = StringProxy.Deserialize(bytes);
            }
            if ((mask & 2) != 0)
            {
                view.GroupTag = StringProxy.Deserialize(bytes);
            }

            view.IsChatDisabled = BooleanProxy.Deserialize(bytes);
            view.LastLoginDate  = DateTimeProxy.Deserialize(bytes);
            if ((mask & 4) != 0)
            {
                view.Name = StringProxy.Deserialize(bytes);
            }

            return(view);
        }
コード例 #16
0
        private void ChatMessageToPlayer(CommPeer peer, MemoryStream bytes)
        {
            var cmid    = Int32Proxy.Deserialize(bytes);
            var message = StringProxy.Deserialize(bytes);

            OnChatMessageToPlayer(peer, cmid, message);
        }
コード例 #17
0
        // Token: 0x060011BE RID: 4542 RVA: 0x0001D2E0 File Offset: 0x0001B4E0
        public static Coroutine BuyPack(int itemId, string authToken, PackType packType, UberStrikeCurrencyType currencyType, UberstrikeItemType itemType, BuyingLocationType marketLocation, BuyingRecommendationType recommendationType, Action <int> callback, Action <Exception> handler)
        {
            Coroutine result;

            using (MemoryStream memoryStream = new MemoryStream())
            {
                Int32Proxy.Serialize(memoryStream, itemId);
                StringProxy.Serialize(memoryStream, authToken);
                EnumProxy <PackType> .Serialize(memoryStream, packType);

                EnumProxy <UberStrikeCurrencyType> .Serialize(memoryStream, currencyType);

                EnumProxy <UberstrikeItemType> .Serialize(memoryStream, itemType);

                EnumProxy <BuyingLocationType> .Serialize(memoryStream, marketLocation);

                EnumProxy <BuyingRecommendationType> .Serialize(memoryStream, recommendationType);

                result = MonoInstance.Mono.StartCoroutine(SoapClient.MakeRequest("IShopWebServiceContract", "ShopWebService", "BuyPack", memoryStream.ToArray(), delegate(byte[] data)
                {
                    if (callback != null)
                    {
                        callback(Int32Proxy.Deserialize(new MemoryStream(data)));
                    }
                }, handler));
            }
            return(result);
        }
コード例 #18
0
        private void UpdateInboxMessages(CommPeer peer, MemoryStream bytes)
        {
            var cmid      = Int32Proxy.Deserialize(bytes);
            var messageId = Int32Proxy.Deserialize(bytes);

            OnUpdateInboxMessages(peer, cmid, messageId);
        }
コード例 #19
0
        public static MapView Deserialize(Stream bytes)
        {
            var mask = Int32Proxy.Deserialize(bytes);
            var view = new MapView();

            if ((mask & 1) != 0)
            {
                view.Description = StringProxy.Deserialize(bytes);
            }
            if ((mask & 2) != 0)
            {
                view.DisplayName = StringProxy.Deserialize(bytes);
            }

            view.IsBlueBox         = BooleanProxy.Deserialize(bytes);
            view.MapId             = Int32Proxy.Deserialize(bytes);
            view.MaxPlayers        = Int32Proxy.Deserialize(bytes);
            view.RecommendedItemId = Int32Proxy.Deserialize(bytes);

            if ((mask & 4) != 0)
            {
                view.SceneName = StringProxy.Deserialize(bytes);
            }
            if ((mask & 8) != 0)
            {
                view.Settings = DictionaryProxy <GameModeType, MapSettingsView> .Deserialize(bytes, EnumProxy <GameModeType> .Deserialize, MapSettingsViewProxy.Deserialize);
            }

            view.SupportedGameModes = Int32Proxy.Deserialize(bytes);
            view.SupportedItemClass = Int32Proxy.Deserialize(bytes);
            return(view);
        }
コード例 #20
0
        private void ModerationCustomMessage(CommPeer peer, MemoryStream bytes)
        {
            var cmid    = Int32Proxy.Deserialize(bytes);
            var message = StringProxy.Deserialize(bytes);

            OnModerationCustomMessage(peer, cmid, message);
        }
コード例 #21
0
 // Token: 0x06001342 RID: 4930 RVA: 0x00021F18 File Offset: 0x00020118
 private void LevelUp(byte[] _bytes)
 {
     using (MemoryStream memoryStream = new MemoryStream(_bytes))
     {
         int newLevel = Int32Proxy.Deserialize(memoryStream);
         this.OnLevelUp(newLevel);
     }
 }
コード例 #22
0
 // Token: 0x06001345 RID: 4933 RVA: 0x00022008 File Offset: 0x00020208
 private void SingleBulletFire(byte[] _bytes)
 {
     using (MemoryStream memoryStream = new MemoryStream(_bytes))
     {
         int cmid = Int32Proxy.Deserialize(memoryStream);
         this.OnSingleBulletFire(cmid);
     }
 }
コード例 #23
0
 // Token: 0x0600133A RID: 4922 RVA: 0x00021CB8 File Offset: 0x0001FEB8
 private void PlayerLeftGame(byte[] _bytes)
 {
     using (MemoryStream memoryStream = new MemoryStream(_bytes))
     {
         int cmid = Int32Proxy.Deserialize(memoryStream);
         this.OnPlayerLeftGame(cmid);
     }
 }
コード例 #24
0
 // Token: 0x06001329 RID: 4905 RVA: 0x000217D4 File Offset: 0x0001F9D4
 private void DoorOpen(byte[] _bytes)
 {
     using (MemoryStream memoryStream = new MemoryStream(_bytes))
     {
         int id = Int32Proxy.Deserialize(memoryStream);
         this.OnDoorOpen(id);
     }
 }
コード例 #25
0
 public static ConnectionAddressView Deserialize(Stream bytes)
 {
     return(new ConnectionAddressView
     {
         Ipv4 = Int32Proxy.Deserialize(bytes),
         Port = UInt16Proxy.Deserialize(bytes)
     });
 }
コード例 #26
0
 // Token: 0x060012A8 RID: 4776 RVA: 0x0001F95C File Offset: 0x0001DB5C
 private void UpdateInboxMessages(byte[] _bytes)
 {
     using (MemoryStream memoryStream = new MemoryStream(_bytes))
     {
         int messageId = Int32Proxy.Deserialize(memoryStream);
         this.OnUpdateInboxMessages(messageId);
     }
 }
コード例 #27
0
        private void ModerationMutePlayer(CommPeer peer, MemoryStream bytes)
        {
            var durationInMinutes = Int32Proxy.Deserialize(bytes);
            var mutedCmid         = Int32Proxy.Deserialize(bytes);
            var disableChat       = BooleanProxy.Deserialize(bytes);

            OnModerationMutePlayer(peer, durationInMinutes, mutedCmid, disableChat);
        }
コード例 #28
0
 // Token: 0x06001341 RID: 4929 RVA: 0x00021ECC File Offset: 0x000200CC
 private void KillsRemaining(byte[] _bytes)
 {
     using (MemoryStream memoryStream = new MemoryStream(_bytes))
     {
         int killsRemaining = Int32Proxy.Deserialize(memoryStream);
         int leaderCmid     = Int32Proxy.Deserialize(memoryStream);
         this.OnKillsRemaining(killsRemaining, leaderCmid);
     }
 }
コード例 #29
0
 // Token: 0x06001335 RID: 4917 RVA: 0x00021B44 File Offset: 0x0001FD44
 private void PlayerJumped(byte[] _bytes)
 {
     using (MemoryStream memoryStream = new MemoryStream(_bytes))
     {
         int     cmid     = Int32Proxy.Deserialize(memoryStream);
         Vector3 position = Vector3Proxy.Deserialize(memoryStream);
         this.OnPlayerJumped(cmid, position);
     }
 }
コード例 #30
0
 // Token: 0x06001347 RID: 4935 RVA: 0x00022090 File Offset: 0x00020290
 private void RemoveProjectile(byte[] _bytes)
 {
     using (MemoryStream memoryStream = new MemoryStream(_bytes))
     {
         int  projectileId = Int32Proxy.Deserialize(memoryStream);
         bool explode      = BooleanProxy.Deserialize(memoryStream);
         this.OnRemoveProjectile(projectileId, explode);
     }
 }