public bool?DownloadLists()
        {
            HttpStatusCode code;

            bool?isVerified = VerifyLists();

            if (isVerified == true)
            {
                return(false);
            }

            if (Configuration == null)
            {
                return(null);
            }

            createListFolderIfNotExists();

            m_logger.Info("Updating filtering rules, rules missing or integrity violation.");

            List <FilteringPlainTextListModel> listsToFetch = new List <FilteringPlainTextListModel>();

            foreach (var list in Configuration.ConfiguredLists)
            {
                bool?listIsCurrent = false;

                if (lastFilterListResults != null && lastFilterListResults.TryGetValue(list.RelativeListPath, out listIsCurrent))
                {
                    if (listIsCurrent == false || listIsCurrent == null)
                    {
                        listsToFetch.Add(list);
                    }
                }
            }

            bool responseReceived;

            byte[] listBytes = WebServiceUtil.Default.GetFilterLists(listsToFetch, out code, out responseReceived);

            if (listBytes != null)
            {
                Dictionary <string, string> rulesets = new Dictionary <string, string>();

                using (MemoryStream ms = new MemoryStream(listBytes))
                    using (StreamReader reader = new StreamReader(ms))
                    {
                        string currentList = null;
                        bool   errorList   = false;

                        StringBuilder fileBuilder = new StringBuilder();

                        string line = null;
                        while ((line = reader.ReadLine()) != null)
                        {
                            if (string.IsNullOrWhiteSpace(line))
                            {
                                continue;
                            }

                            if (line.Contains("--startlist"))
                            {
                                currentList = line.Substring("--startlist".Length).TrimStart();
                            }
                            else if (line.StartsWith("--endlist"))
                            {
                                if (errorList)
                                {
                                    errorList = false;
                                }
                                else
                                {
                                    rulesets[currentList] = fileBuilder.ToString();
                                    fileBuilder.Clear();

                                    try
                                    {
                                        byte[] fileBytes = Encoding.UTF8.GetBytes(rulesets[currentList]);
                                        using (FileStream stream = new FileStream(getListFilePath(currentList), FileMode.Create))
                                            using (CryptoStream cs = RulesetEncryption.EncryptionStream(stream))
                                            {
                                                cs.Write(fileBytes, 0, fileBytes.Length);

                                                cs.FlushFinalBlock();
                                            }
                                    }
                                    catch (Exception ex)
                                    {
                                        m_logger.Error($"Failed to write to rule path {getListFilePath(currentList)} {ex}");
                                    }
                                }
                            }
                            else
                            {
                                if (line == "http-result 404")
                                {
                                    m_logger.Error($"404 Error was returned for category {currentList}");
                                    errorList = true;
                                    continue;
                                }
                                fileBuilder.Append($"{line}\n");
                            }
                        }
                    }
            }

            return(true);
        }