private bool ValidateCRC(uint input)
        {
            var calculatedCRC = CRC32.CalcCrc32(previousDecryptIV, 2);

            if (UseMemoryCRC)
            {
                foreach (var region in MemoryRegions.Instance.Regions)
                {
                    calculatedCRC = CRC32.CalcCrc32(
                        region.Data,
                        region.Length,
                        calculatedCRC ^ (region.Address + (uint)_memoryOffset),
                        _memoryOffset
                        );
                }
            }

            var isValid = calculatedCRC == input;

            if (!isValid)
            {
                if (_ignoredWrongCRC)
                {
                    log.Error($"Disconnecting client because CRC didnt match _again_");
                }
                else
                {
                    log.Warn($"Accepting wrong CRC for _once_...");
                    _ignoredWrongCRC = true;
                    isValid          = true;
                }
            }

            return(isValid);
        }
        public override void SendPacket(Packet pPacket)
        {
            while (IsConnectedAsClient && MEMORY_CRC_ENABLED && (BitConverter.ToUInt16(_encryptIV, 0) % 31) == 0)
            {
                var p = new Packet((byte)ClientMessages.CLIENT_HASH);
                p.WriteByte(1);
                p.WriteUInt(CRC32.CalcCrc32(_encryptIV, 2)); // TODO: Get CRC for memory
                base.SendPacket(p);
            }

            base.SendPacket(pPacket);
        }