// <auto-generated/>
// ReSharper disable All
namespace MyTelegram.Messenger.Services.Impl;

// https://corefork.telegram.org/api/config
public partial class AppConfigHelper
{
    private static int _hash = 1234567890; // изменено, чтобы клиент перечитал конфигурацию после включения Stars
    private static TJsonObject? _jsonValue;
    public IJSONValue GetAppConfig()
    {
        if (_jsonValue != null)
        {
            return _jsonValue;
        }
        _jsonValue = new TJsonObject
        {
            Value =
            [
                // The maximum UTF-8 length of bios of non-Premium users (integer)
                new TJsonObjectValue { Key = "about_length_limit_default", Value = new TJsonNumber { Value = 70 } },

                // The maximum UTF-8 length of bios of Premium users (integer)
                new TJsonObjectValue { Key = "about_length_limit_premium", Value = new TJsonNumber { Value = 140 } },

                // An unconfirmed session�� will be autoconfirmed this many seconds after login. (integer)
                new TJsonObjectValue { Key = "authorization_autoconfirm_period", Value = new TJsonNumber { Value = 604800 } },

                // Whether clients can invoke account.setGlobalPrivacySettings with globalPrivacySettings.archive_and_mute_new_noncontact_peers = boolTrue, to automatically archive and mute new incoming chats from non-contacts. (boolean)
                new TJsonObjectValue { Key = "autoarchive_setting_available", Value = new TJsonBool { Value = true } },

                // A list of Telegram domains that support automatic login with no user confirmation, click here for more info on URL authorization��. (array of strings)
                new TJsonObjectValue
                {
                    Key = "autologin_domains",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                            new TJsonString { Value = "instantview.telegram.org" },
                            new TJsonString { Value = "translations.telegram.org" },
                            new TJsonString { Value = "contest.dev" },
                            new TJsonString { Value = "contest.com" },
                            new TJsonString { Value = "bugs.telegram.org" },
                            new TJsonString { Value = "suggestions.telegram.org" },
                            new TJsonString { Value = "themes.telegram.org" },
                            new TJsonString { Value = "promote.telegram.org" },
                            new TJsonString { Value = "ads.telegram.org" },
                        ]
                    }
                },

                // Whether app clients should start a background TCP connection for MTProto update fetching (boolean)
                new TJsonObjectValue { Key = "background_connection", Value = new TJsonBool { Value = true } },

                // Maximum boost level for channels. (integer)
                new TJsonObjectValue { Key = "boosts_channel_level_max", Value = new TJsonNumber { Value = 100 } },

                // The number of additional boost slots that the current user will receive when gifting a Telegram Premium subscription.
                new TJsonObjectValue { Key = "boosts_per_sent_gift", Value = new TJsonNumber { Value = 3 } },

                // Maximum number of main mini app previews�� that can be added for a localization. (integer)
                new TJsonObjectValue { Key = "bot_preview_medias_max", Value = new TJsonNumber { Value = 12 } },

                // Maximum number of active business chat links. (integer)
                new TJsonObjectValue { Key = "business_chat_links_limit", Value = new TJsonNumber { Value = 100 } },

                // Array of string identifiers, indicating the order of Telegram Business features in the Telegram Business promotion popup, see here for the possible values��
                new TJsonObjectValue
                {
                    Key = "business_promo_order",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                            new TJsonString { Value = "business_location" },
                            new TJsonString { Value = "business_hours" },
                            new TJsonString { Value = "quick_replies" },
                            new TJsonString { Value = "greeting_message" },
                            new TJsonString { Value = "away_message" },
                            new TJsonString { Value = "business_links" },
                            new TJsonString { Value = "business_intro" },
                            new TJsonString { Value = "business_bots" },
                            new TJsonString { Value = "emoji_status" },
                            new TJsonString { Value = "folder_tags" },
                            new TJsonString { Value = "stories" },
                        ]
                    }
                },

                // If true, the current user is an independent fact-checker and may edit fact-checks��.  (boolean)
                new TJsonObjectValue { Key = "can_edit_factcheck", Value = new TJsonBool { Value = false } },

                // The maximum UTF-8 length of media captions sendable by non-Premium users (integer)
                new TJsonObjectValue { Key = "caption_length_limit_default", Value = new TJsonNumber { Value = 1024 } },

                // The maximum UTF-8 length of media captions sendable by Premium users (integer)
                new TJsonObjectValue { Key = "caption_length_limit_premium", Value = new TJsonNumber { Value = 4096 } },

                // After reaching at least this boost level��, channels gain the ability to change their message accent palette emoji��.  (integer)
                new TJsonObjectValue { Key = "channel_bg_icon_level_min", Value = new TJsonNumber { Value = 4 } },

                // After reaching at least this boost level��, channels gain the ability to set any custom wallpaper, not just fill channel wallpapers, see here � for more info.  (integer)
                new TJsonObjectValue { Key = "channel_custom_wallpaper_level_min", Value = new TJsonNumber { Value = 10 } },

                // After reaching at least this boost level��, channels gain the ability to change their status emoji��.  (integer)
                new TJsonObjectValue { Key = "channel_emoji_status_level_min", Value = new TJsonNumber { Value = 8 } },

                // After reaching at least this boost level�� and the boost level specified in the channel_min_level field of the help.peerColorOption constructor for the chosen palette, channels gain the ability to change the emoji and color used in the profile accent palette��.  (integer)
                new TJsonObjectValue { Key = "channel_profile_bg_icon_level_min", Value = new TJsonNumber { Value = 7 } },

                // After reaching at least this boost level, channel owners may disable ads on the channel for all users using channels.restrictSponsoredMessages.  (integer)
                new TJsonObjectValue { Key = "channel_restrict_sponsored_level_min", Value = new TJsonNumber { Value = 50 } },

                // If true, indicates that channel ad revenue withdrawal is enabled in the current region; otherwise, all ad revenue-related UI options should be hidden from the user. (boolean)
                new TJsonObjectValue { Key = "channel_revenue_withdrawal_enabled", Value = new TJsonBool { Value = true } },

                // After reaching at least this boost level��, channels gain the ability to set a fill channel wallpaper, see here � for more info.  (integer)
                new TJsonObjectValue { Key = "channel_wallpaper_level_min", Value = new TJsonNumber { Value = 9 } },

                // The maximum number of channels and supergroups a non-Premium user may join (integer)
                new TJsonObjectValue { Key = "channels_limit_default", Value = new TJsonNumber { Value = 500 } },

                // The maximum number of channels and supergroups a Premium user may join (integer)
                new TJsonObjectValue { Key = "channels_limit_premium", Value = new TJsonNumber { Value = 1000 } },

                // The maximum number of public channels or supergroups a non-Premium user may create (integer)
                new TJsonObjectValue { Key = "channels_public_limit_default", Value = new TJsonNumber { Value = 10 } },

                // The maximum number of public channels or supergroups a Premium user may create (integer)
                new TJsonObjectValue { Key = "channels_public_limit_premium", Value = new TJsonNumber { Value = 20 } },

                // To protect user privacy, read receipts for chats are only stored for chat_read_mark_expire_period seconds after the message was sent. (integer)
                new TJsonObjectValue { Key = "chat_read_mark_expire_period", Value = new TJsonNumber { Value = 604800 } },

                // Per-user read receipts, fetchable using messages.getMessageReadParticipants, will be available in groups with an amount of participants less or equal to chat_read_mark_size_threshold. (integer)
                new TJsonObjectValue { Key = "chat_read_mark_size_threshold", Value = new TJsonNumber { Value = 100 } },

                // Maximum number of per-folder chat folder deep links � that can be created by non-Premium users. (integer)
                new TJsonObjectValue { Key = "chatlist_invites_limit_default", Value = new TJsonNumber { Value = 3 } },

                // Maximum number of per-folder chat folder deep links � that can be created by Premium users. (integer)
                new TJsonObjectValue { Key = "chatlist_invites_limit_premium", Value = new TJsonNumber { Value = 100 } },

                // Users that import a folder using a chat folder deep link � should retrieve additions made to the folder by invoking chatlists.getChatlistUpdates at most every chatlist_update_period seconds. (integer)
                new TJsonObjectValue { Key = "chatlist_update_period", Value = new TJsonNumber { Value = 300 } },

                // Maximum number of shareable folders non-Premium users may have. (integer)
                new TJsonObjectValue { Key = "chatlists_joined_limit_default", Value = new TJsonNumber { Value = 2 } },

                // Maximum number of shareable folders Premium users may have. (integer)
                new TJsonObjectValue { Key = "chatlists_joined_limit_premium", Value = new TJsonNumber { Value = 20 } },

                // Default emoji status stickerset ID. (integer)
                // Note that the stickerset can be fetched using inputStickerSetEmojiDefaultStatuses.
                new TJsonObjectValue { Key = "default_emoji_statuses_stickerset_id", Value = new TJsonString { Value = "773947703670341676" } },

                // The maximum number of chats a non-Premium user may add to a folder (integer)
                new TJsonObjectValue { Key = "dialog_filters_chats_limit_default", Value = new TJsonNumber { Value = 100 } },

                // The maximum number of chats a Premium user may add to a folder (integer)
                new TJsonObjectValue { Key = "dialog_filters_chats_limit_premium", Value = new TJsonNumber { Value = 200 } },

                // Whether clients should show an option for managing dialog filters AKA folders (boolean)
                new TJsonObjectValue { Key = "dialog_filters_enabled", Value = new TJsonBool { Value = true } },

                // The maximum number of folders a non-Premium user may create (integer)
                new TJsonObjectValue { Key = "dialog_filters_limit_default", Value = new TJsonNumber { Value = 10 } },

                // The maximum number of folders a Premium user may create (integer)
                new TJsonObjectValue { Key = "dialog_filters_limit_premium", Value = new TJsonNumber { Value = 30 } },

                // Whether clients should actively show a tooltip, inviting the user to configure dialog filters AKA folders; typically this happens when the chat list is long enough to start getting cluttered. (boolean)
                new TJsonObjectValue { Key = "dialog_filters_tooltip", Value = new TJsonBool { Value = false } },

                // The maximum number of chats a non-Premium user may pin in a folder (integer)
                new TJsonObjectValue { Key = "dialogs_folder_pinned_limit_default", Value = new TJsonNumber { Value = 100 } },

                // The maximum number of chats a Premium user may pin in a folder (integer)
                new TJsonObjectValue { Key = "dialogs_folder_pinned_limit_premium", Value = new TJsonNumber { Value = 200 } },

                // The maximum number of chats a non-Premium user may pin (integer)
                new TJsonObjectValue { Key = "dialogs_pinned_limit_default", Value = new TJsonNumber { Value = 5 } },

                // The maximum number of chats a Premium user may pin (integer)
                new TJsonObjectValue { Key = "dialogs_pinned_limit_premium", Value = new TJsonNumber { Value = 10 } },

                // Contains a list of inverted suggestions that were dismissed by the user. (Array of strings, possible values shown in the inverted suggestions section��).
                new TJsonObjectValue
                {
                    Key = "dismissed_suggestions",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                        ]
                    }
                },

                // Animated emojis and animated dice should be scaled by this factor before being shown to the user (float)
                new TJsonObjectValue { Key = "emojies_animated_zoom", Value = new TJsonNumber { Value = 0.625 } },

                // A list of supported animated dice stickers (array of strings).
                new TJsonObjectValue
                {
                    Key = "emojies_send_dice",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "?" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                        ]
                    }
                },

                // For animated dice emojis other than the basic , indicates the winning dice value and the final frame of the animated sticker, at which to show the fireworks  (object with emoji keys and object values, containing value and frame_start float values)
                new TJsonObjectValue
                {
                    Key = "emojies_send_dice_success",
                    Value = new TJsonObject
                    {
                        Value =
                        [
                            new TJsonObjectValue
                            {
                                Key = "??",
                                Value = new TJsonObject
                                {
                                    Value =
                                    [
                                        new TJsonObjectValue { Key = "value", Value = new TJsonNumber { Value = 6 } },
                                        new TJsonObjectValue { Key = "frame_start", Value = new TJsonNumber { Value = 62 } },
                                    ]
                                },
                            },
                            new TJsonObjectValue
                            {
                                Key = "??",
                                Value = new TJsonObject
                                {
                                    Value =
                                    [
                                        new TJsonObjectValue { Key = "value", Value = new TJsonNumber { Value = 5 } },
                                        new TJsonObjectValue { Key = "frame_start", Value = new TJsonNumber { Value = 110 } },
                                    ]
                                },
                            },
                            new TJsonObjectValue
                            {
                                Key = "?",
                                Value = new TJsonObject
                                {
                                    Value =
                                    [
                                        new TJsonObjectValue { Key = "value", Value = new TJsonNumber { Value = 5 } },
                                        new TJsonObjectValue { Key = "frame_start", Value = new TJsonNumber { Value = 110 } },
                                    ]
                                },
                            },
                            new TJsonObjectValue
                            {
                                Key = "??",
                                Value = new TJsonObject
                                {
                                    Value =
                                    [
                                        new TJsonObjectValue { Key = "value", Value = new TJsonNumber { Value = 5 } },
                                        new TJsonObjectValue { Key = "frame_start", Value = new TJsonNumber { Value = 110 } },
                                    ]
                                },
                            },
                            new TJsonObjectValue
                            {
                                Key = "??",
                                Value = new TJsonObject
                                {
                                    Value =
                                    [
                                        new TJsonObjectValue { Key = "value", Value = new TJsonNumber { Value = 64 } },
                                        new TJsonObjectValue { Key = "frame_start", Value = new TJsonNumber { Value = 110 } },
                                    ]
                                },
                            },
                            new TJsonObjectValue
                            {
                                Key = "??",
                                Value = new TJsonObject
                                {
                                    Value =
                                    [
                                        new TJsonObjectValue { Key = "value", Value = new TJsonNumber { Value = 6 } },
                                        new TJsonObjectValue { Key = "frame_start", Value = new TJsonNumber { Value = 110 } },
                                    ]
                                },
                            },
                        ]
                    },
                },

                //// A map of soundbites to be played when the user clicks on the specified animated emoji; the file reference field should be base64-decoded before downloading the file (map of file IDs (inputDocument.id), with emoji string keys)
                //new TJsonObjectValue
                //{
                //    Key = "emojies_sounds",
                //    Value = new TJsonArray
                //    {
                //        Value =
                //        [
                //        ]
                //    }
                //},

                // Maximum UTF-8 length of fact-checks��.  (integer)
                new TJsonObjectValue { Key = "factcheck_length_limit", Value = new TJsonNumber { Value = 1024 } },

                // List of phone number prefixes for anonymous Fragment phone numbers. (array of strings).
                new TJsonObjectValue
                {
                    Key = "fragment_prefixes",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                            new TJsonString { Value = "888" },
                        ]
                    }
                },

                // Specifies the name of the service providing GIF search through gif_search_username (string)
                new TJsonObjectValue { Key = "gif_search_branding", Value = new TJsonString { Value = "tenor" } },

                // Specifies a list of emojis that should be suggested as search term in a bar above the GIF search box (array of string emojis)
                new TJsonObjectValue
                {
                    Key = "gif_search_emojies",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                            new TJsonString { Value = "??" },
                        ]
                    }
                },

                // The maximum number of users that can be specified when making a direct giveaway. (integer)
                new TJsonObjectValue { Key = "giveaway_add_peers_max", Value = new TJsonNumber { Value = 10 } },

                // The number of boosts that will be gained by a channel for each winner of a giveaway. (integer)
                new TJsonObjectValue { Key = "giveaway_boosts_per_premium", Value = new TJsonNumber { Value = 4 } },

                // The maximum number of countries that can be specified when restricting the set of participating countries in a giveaway.  (itneger)
                new TJsonObjectValue { Key = "giveaway_countries_max", Value = new TJsonNumber { Value = 10 } },

                // Whether giveaways can be started by the current user. (boolean)
                new TJsonObjectValue { Key = "giveaway_gifts_purchase_available", Value = new TJsonBool { Value = false } },

                // The maximum duration in seconds of a giveaway. (integer)
                new TJsonObjectValue { Key = "giveaway_period_max", Value = new TJsonNumber { Value = 2678400 } },

                // After reaching at least this boost level��, supergroups gain the ability to set any custom wallpaper, not just fill supergroup wallpapers, see here � for more info.  (integer)
                new TJsonObjectValue { Key = "group_custom_wallpaper_level_min", Value = new TJsonNumber { Value = 10 } },

                // After reaching at least this boost level��, supergroups gain the ability to change their status emoji��.  (integer)
                new TJsonObjectValue { Key = "group_emoji_status_level_min", Value = new TJsonNumber { Value = 8 } },

                // After reaching at least this boost level��, supergroups gain the ability to associate a custom emoji stickerset��, which can be used by all users of the group (including non-Premium users!), for messages sent within the group.  (integer)
                new TJsonObjectValue { Key = "group_emoji_stickers_level_min", Value = new TJsonNumber { Value = 4 } },

                // After reaching at least this boost level and the boost level specified in the group_min_level field of the help.peerColorOption constructor for the chosen palette, supergroups gain the ability to change the emoji and color used in the profile accent palette��.  (integer)
                new TJsonObjectValue { Key = "group_profile_bg_icon_level_min", Value = new TJsonNumber { Value = 5 } },

                // After reaching at least this boost level��, non-Premium users in the supergroup gain the ability to transcribe any voice message, without using up their free transcription quota.  (integer)
                new TJsonObjectValue { Key = "group_transcribe_level_min", Value = new TJsonNumber { Value = 6 } },

                // After reaching at least this boost level��, supergroups gain the ability to set a fill supergroup wallpaper, see here � for more info.  (integer)
                new TJsonObjectValue { Key = "group_wallpaper_level_min", Value = new TJsonNumber { Value = 9 } },

                // Maximum number of participants in a group call (livestreams allow ? participants) (integer)
                new TJsonObjectValue { Key = "groupcall_video_participants_max", Value = new TJsonNumber { Value = 1000 } },

                // Minimum number of participants required to hide the participants list of a supergroup using channels.toggleParticipantsHidden. (integer)
                new TJsonObjectValue { Key = "hidden_members_group_size_min", Value = new TJsonNumber { Value = 100 } },

                // Array of strings, containing restriction reasons that must be ignored if encountered in restrictionReason.reason.
                new TJsonObjectValue
                {
                    Key = "ignore_restriction_reasons",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                        ]
                    }
                },

                // help.getAppUpdate should be invoked every inapp_update_check_delay update seconds to check for app updates. (integer)
                new TJsonObjectValue { Key = "inapp_update_check_delay", Value = new TJsonNumber { Value = 86400 } },

                // Maximum UTF-8 length of the business introduction description��. (integer)
                new TJsonObjectValue { Key = "intro_description_length_limit", Value = new TJsonNumber { Value = 70 } },

                // Maximum UTF-8 length of the business introduction title��. (integer)
                new TJsonObjectValue { Key = "intro_title_length_limit", Value = new TJsonNumber { Value = 32 } },

                // Whether app clients should start a keepalive service to keep the app running and fetch updates even when the app is closed (boolean)
                new TJsonObjectValue { Key = "keep_alive_service", Value = new TJsonBool { Value = true } },

                // A soft limit, specifying the maximum number of files that should be downloaded in parallel from the same DC, for files bigger than 20MB. (integer)
                new TJsonObjectValue { Key = "large_queue_max_active_operations_count", Value = new TJsonNumber { Value = 2 } },

                // The maximum number of custom emojis that may be present in a message. (integer)
                new TJsonObjectValue { Key = "message_animated_emoji_max", Value = new TJsonNumber { Value = 100 } },

                // If true, the globalPrivacySettings.new_noncontact_peers_require_premium setting may be enabled even if we don't have a Premium account, see here � for more info.  (boolean)
                new TJsonObjectValue { Key = "new_noncontact_peers_require_premium_without_ownpremium", Value = new TJsonBool { Value = false } },

                // Contains a list of suggestions that should be actively shown as a tooltip to the user. (Array of strings, possible values shown in the suggestions section��).
                new TJsonObjectValue
                {
                    Key = "pending_suggestions",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                        ]
                    }
                },

                // To protect user privacy, read receipts for private chats are only stored for pm_read_date_expire_period seconds after the message was sent. (integer)
                new TJsonObjectValue { Key = "pm_read_date_expire_period", Value = new TJsonNumber { Value = 604800 } },

                // Contains the username of the official Telegram Premium bot that may be used to buy a Telegram Premium subscription, see here for detailed instructions�� (string)
                new TJsonObjectValue { Key = "premium_bot_username", Value = new TJsonString { Value = "PremiumBot" } },

                // Whether a gift icon should be shown in the attachment menu in private chats with users, offering the current user to gift a Telegram Premium subscription to the other user in the chat. (boolean)
                new TJsonObjectValue { Key = "premium_gift_attach_menu_icon", Value = new TJsonBool { Value = true } },

                // Whether a gift icon should be shown in the text bar in private chats with users (ie like the / icon in chats with bots), offering the current user to gift a Telegram Premium subscription to the other user in the chat. Can only be true if premium_gift_attach_menu_icon is also true. (boolean)
                new TJsonObjectValue { Key = "premium_gift_text_field_icon", Value = new TJsonBool { Value = false } },

                // Contains an invoice slug that may be used to buy a Telegram Premium subscription, see here for detailed instructions�� (string)
                new TJsonObjectValue { Key = "premium_invoice_slug", Value = new TJsonString { Value = "abc" } },

                // URL/deep link that can be opened to manage the premium subscription. (string)
                new TJsonObjectValue { Key = "premium_manage_subscription_url", Value = new TJsonString { Value = "https://t.me/premiumbot?start=status" } },

                // Array of string identifiers, indicating the order of Telegram Premium features in the Telegram Premium promotion popup, see here for the possible values��
                new TJsonObjectValue
                {
                    Key = "premium_promo_order",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                            new TJsonString { Value = "stories" },
                            new TJsonString { Value = "more_upload" },
                            new TJsonString { Value = "double_limits" },
                            new TJsonString { Value = "business" },
                            new TJsonString { Value = "last_seen" },
                            new TJsonString { Value = "voice_to_text" },
                            new TJsonString { Value = "faster_download" },
                            new TJsonString { Value = "translations" },
                            new TJsonString { Value = "animated_emoji" },
                            new TJsonString { Value = "emoji_status" },
                            new TJsonString { Value = "saved_tags" },
                            new TJsonString { Value = "peer_colors" },
                            new TJsonString { Value = "wallpapers" },
                            new TJsonString { Value = "profile_badge" },
                            new TJsonString { Value = "message_privacy" },
                            new TJsonString { Value = "advanced_chat_management" },
                            new TJsonString { Value = "no_ads" },
                            new TJsonString { Value = "app_icons" },
                            new TJsonString { Value = "infinite_reactions" },
                            new TJsonString { Value = "animated_userpics" },
                            new TJsonString { Value = "premium_stickers" },
                            new TJsonString { Value = "effects" },
                        ]
                    }
                },

                // The user can't purchase Telegram Premium. The app must also hide all Premium features, including stars for other users, et cetera. (boolean)
                new TJsonObjectValue { Key = "premium_purchase_blocked", Value = new TJsonBool { Value = false } },

                // Whether the Settings->Devices menu should show an option to scan a QR login code (boolean)
                new TJsonObjectValue { Key = "qr_login_camera", Value = new TJsonBool { Value = true } },

                // Whether the login screen should show a QR code login option, possibly as default login method (string, "disabled", "primary" or "secondary")
                new TJsonObjectValue { Key = "qr_login_code", Value = new TJsonString { Value = "primary" } },

                // Maximum number of quick reply shortcuts�� that may be created. (integer)
                new TJsonObjectValue { Key = "quick_replies_limit", Value = new TJsonNumber { Value = 100 } },

                // Maximum number of messages that may be added to a  quick reply shortcut��. (integer)
                new TJsonObjectValue { Key = "quick_reply_messages_limit", Value = new TJsonNumber { Value = 20 } },

                // Maximum UTF-8 length of quoted text. (integer)
                new TJsonObjectValue { Key = "quote_length_max", Value = new TJsonNumber { Value = 1024 } },

                // Enable reactions feature (boolean)
                new TJsonObjectValue { Key = "reactions_default", Value = new TJsonBool { Value = true } },

                // Maximum number of reactions that can be marked as allowed in a chat using chatReactionsSome. (integer)
                new TJsonObjectValue { Key = "reactions_in_chat_max", Value = new TJsonNumber { Value = 100 } },

                // Maximum number of unique reactions for any given message: for example, if there are 2000  and 1000 custom emoji  reactions and reactions_uniq_max = 2, you can't add a  reaction, because that would raise the number of unique reactions to 3 > 2. (integer)
                new TJsonObjectValue { Key = "reactions_uniq_max", Value = new TJsonNumber { Value = 11 } },

                // Maximum number of reactions that can be added to a single message by a non-Premium user. (integer)
                new TJsonObjectValue { Key = "reactions_user_max_default", Value = new TJsonNumber { Value = 1 } },

                // Maximum number of reactions that can be added to a single message by a Premium user. (integer)
                new TJsonObjectValue { Key = "reactions_user_max_premium", Value = new TJsonNumber { Value = 3 } },

                // The maximum number of similar channels that can be recommended by channels.getChannelRecommendations� to non-Premium users. (integer)
                new TJsonObjectValue { Key = "recommended_channels_limit_default", Value = new TJsonNumber { Value = 10 } },

                // The maximum number of similar channels that can be recommended by channels.getChannelRecommendations� to Premium users. (integer)
                new TJsonObjectValue { Key = "recommended_channels_limit_premium", Value = new TJsonNumber { Value = 100 } },

                // Array of strings, containing additional platform identifiers that must be used when parsing restrictionReason.
                new TJsonObjectValue
                {
                    Key = "restriction_add_platforms",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                        ]
                    }
                },

                // The maximum duration in seconds of uploadable notification sounds�� (integer)
                new TJsonObjectValue { Key = "ringtone_duration_max", Value = new TJsonNumber { Value = 5 } },

                // The maximum number of saveable notification sounds��
                new TJsonObjectValue { Key = "ringtone_saved_count_max", Value = new TJsonNumber { Value = 100 } },

                // The maximum post-conversion size in bytes of uploadable notification sounds��
                new TJsonObjectValue { Key = "ringtone_size_max", Value = new TJsonNumber { Value = 307200 } },

                // Contains a set of recommended codec parameters for round videos.  (object, as described in the example)
                new TJsonObjectValue
                {
                    Key = "round_video_encoding",
                    Value = new TJsonObject
                    {
                        Value =
                        [
                            new TJsonObjectValue { Key = "diameter", Value = new TJsonNumber { Value = 384 } },
                            new TJsonObjectValue { Key = "video_bitrate", Value = new TJsonNumber { Value = 1000 } },
                            new TJsonObjectValue { Key = "audio_bitrate", Value = new TJsonNumber { Value = 64 } },
                            new TJsonObjectValue { Key = "max_size", Value = new TJsonNumber { Value = 12582912 } },
                        ]
                    },
                },

                // Maximum number of pinned dialogs in saved messages for non-Premium users.  (integer)
                new TJsonObjectValue { Key = "saved_dialogs_pinned_limit_default", Value = new TJsonNumber { Value = 5 } },

                // Maximum number of pinned dialogs in saved messages for Premium users.  (integer)
                new TJsonObjectValue { Key = "saved_dialogs_pinned_limit_premium", Value = new TJsonNumber { Value = 100 } },

                // The maximum number of GIFs a non-Premium user may save (integer)
                new TJsonObjectValue { Key = "saved_gifs_limit_default", Value = new TJsonNumber { Value = 200 } },

                // The maximum number of GIFs a Premium user may save (integer)
                new TJsonObjectValue { Key = "saved_gifs_limit_premium", Value = new TJsonNumber { Value = 400 } },

                // A soft limit, specifying the maximum number of files that should be downloaded in parallel from the same DC, for files smaller than 20MB. (integer)
                new TJsonObjectValue { Key = "small_queue_max_active_operations_count", Value = new TJsonNumber { Value = 5 } },

                // If true, non-deep/TON links opened from sponsored messages must be opened in the in-app browser (if present); otherwise they must be opened in the standard, external browser. (boolean)
                new TJsonObjectValue { Key = "sponsored_links_inapp_allow", Value = new TJsonBool { Value = false } },

                // If true, gifts � must be disabled. (boolean)
                new TJsonObjectValue { Key = "stargifts_blocked", Value = new TJsonBool { Value = false } },

                // A Gift � can be converted back into Telegram Stars only if it was received less than stargifts_convert_period_max seconds ago. (integer)
                new TJsonObjectValue { Key = "stargifts_convert_period_max", Value = new TJsonNumber { Value = 7776000 } },

                // The maximum length of gift messages, see here � for more info. (integer)
                new TJsonObjectValue { Key = "stargifts_message_length_max", Value = new TJsonNumber { Value = 255 } },

                // If false, the current user cannot join referral programs, becoming an affiliate �. (boolean)
                new TJsonObjectValue { Key = "starref_connect_allowed", Value = new TJsonBool { Value = false } },

                // Maximum allowed permille affiliate commission for referral programs �. (integer)
                new TJsonObjectValue { Key = "starref_max_commission_permille", Value = new TJsonNumber { Value = 800 } },

                // Minimum allowed permille affiliate commission for referral programs �. (integer)
                new TJsonObjectValue { Key = "starref_min_commission_permille", Value = new TJsonNumber { Value = 1 } },

                // If false, the current user cannot create referral programs � for bots they own. (boolean)
                new TJsonObjectValue { Key = "starref_program_allowed", Value = new TJsonBool { Value = false } },

                // Start parameter referral program prefixes for referral links �. (array of strings)
                new TJsonObjectValue
                {
                    Key = "starref_start_param_prefixes",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                            new TJsonString { Value = "_tgr_" },
                        ]
                    }
                },

                // Star gifting functionality should only be enabled if this flag is equal to true. (boolean)
                new TJsonObjectValue { Key = "stars_gifts_enabled", Value = new TJsonBool { Value = true } },

                // Maximum price in Telegram Stars for posted paid media. (integer)
                new TJsonObjectValue { Key = "stars_paid_post_amount_max", Value = new TJsonNumber { Value = 2500 } },

                // Maximum number of paid reactions that may be sent on a post. (integer)
                new TJsonObjectValue { Key = "stars_paid_reaction_amount_max", Value = new TJsonNumber { Value = 2500 } },

                // If false, indicates that Telegram Stars may be used in the current region; otherwise, all Star-related UI options should be hidden from the user. (boolean)
                new TJsonObjectValue { Key = "stars_purchase_blocked", Value = new TJsonBool { Value = false } },  // false — покупка Stars разрешена

                // Minimum required amount of Telegram Stars on a channel or bot's balance to allow withdrawal��. (integer)
                new TJsonObjectValue { Key = "stars_revenue_withdrawal_min", Value = new TJsonNumber { Value = 1000 } },

                // Specifies the maximum allowed price in Stars of a Telegram Star subscription �. (int)
                new TJsonObjectValue { Key = "stars_subscription_amount_max", Value = new TJsonNumber { Value = 2500 } },

                // Specifies the number of US dollars required to buy one thousand Telegram Stars. (float)
                new TJsonObjectValue { Key = "stars_usd_sell_rate_x1000", Value = new TJsonNumber { Value = 1410 } },

                // Specifies the number of US dollars that will be received by withdrawing � one thousand Telegram Stars. (float)
                new TJsonObjectValue { Key = "stars_usd_withdraw_rate_x1000", Value = new TJsonNumber { Value = 1300 } },

                // Specifies the validity period of the local cache of messages.getStickers, also relevant when generating the pagination hash when invoking the method. (integer)
                new TJsonObjectValue { Key = "stickers_emoji_cache_time", Value = new TJsonNumber { Value = 86400 } },

                // Specifies that the app should not display local sticker suggestions�� for emojis at all and just use the result of messages.getStickers (bool)
                new TJsonObjectValue { Key = "stickers_emoji_suggest_only_api", Value = new TJsonBool { Value = false } },

                // The maximum number of stickers a non-Premium user may add to Favorites�� (integer)
                new TJsonObjectValue { Key = "stickers_faved_limit_default", Value = new TJsonNumber { Value = 5 } },

                // The maximum number of stickers a Premium user may add to Favorites�� (integer)
                new TJsonObjectValue { Key = "stickers_faved_limit_premium", Value = new TJsonNumber { Value = 10 } },

                // For Premium users, used to define the suggested sticker list, see the sticker docs for more info (integer)
                new TJsonObjectValue { Key = "stickers_normal_by_emoji_per_premium_num", Value = new TJsonNumber { Value = 3 } },

                // Defines how many Premium stickers to show in the sticker suggestion popup when entering an emoji into the text field, see the sticker docs for more info (integer)
                new TJsonObjectValue { Key = "stickers_premium_by_emoji_num", Value = new TJsonNumber { Value = 0 } },

                // Maximum number of URL media areas�� that can be added to a posted story. (integer)
                new TJsonObjectValue { Key = "stories_area_url_max", Value = new TJsonNumber { Value = 3 } },

                // ID of the official Telegram user that will post stories about new Telegram features: stories posted by this user should be shown on the active or active and hidden stories bar just like for contacts, even if the user was removed from the contact list. (integer)
                new TJsonObjectValue { Key = "stories_changelog_user_id", Value = new TJsonNumber { Value = 777000 } },

                // Whether styled text entities and links in story text captions can be used by all users (enabled), only Premium users) (premium), or no one (disabled). (string)
                new TJsonObjectValue { Key = "stories_entities", Value = new TJsonString { Value = "premium" } },

                // The maximum number of stories that can be pinned on top of the profile��.  (integer)
                new TJsonObjectValue { Key = "stories_pinned_to_top_count_max", Value = new TJsonNumber { Value = 3 } },

                // Indicates whether users can post stories. (string)
                new TJsonObjectValue { Key = "stories_posting", Value = new TJsonString { Value = "enabled" } },

                // Maximum number of stories that can be sent in a month by non-Premium users. (integer)
                new TJsonObjectValue { Key = "stories_sent_monthly_limit_default", Value = new TJsonNumber { Value = 30 } },

                // Maximum number of stories that can be sent in a month by Premium users. (integer)
                new TJsonObjectValue { Key = "stories_sent_monthly_limit_premium", Value = new TJsonNumber { Value = 3000 } },

                // Maximum number of stories that can be sent in a week by non-Premium users. (integer)
                new TJsonObjectValue { Key = "stories_sent_weekly_limit_default", Value = new TJsonNumber { Value = 7 } },

                // Maximum number of stories that can be sent in a week by Premium users. (integer)
                new TJsonObjectValue { Key = "stories_sent_weekly_limit_premium", Value = new TJsonNumber { Value = 700 } },

                // After enabling stories stealth mode, this many seconds must elapse before the user is allowed to enable it again. (integer)
                new TJsonObjectValue { Key = "stories_stealth_cooldown_period", Value = new TJsonNumber { Value = 10800 } },

                // Enabling stories stealth mode with the future flag will hide views of any story opened in the next stories_stealth_future_period seconds. (integer)
                new TJsonObjectValue { Key = "stories_stealth_future_period", Value = new TJsonNumber { Value = 1500 } },

                // Enabling stories stealth mode with the past flag will erase views of any story opened in the past stories_stealth_past_period seconds. (integer)
                new TJsonObjectValue { Key = "stories_stealth_past_period", Value = new TJsonNumber { Value = 300 } },

                // Maximum number of story reaction media areas�� that can be added to a story by non-Premium users. (integer)
                new TJsonObjectValue { Key = "stories_suggested_reactions_limit_default", Value = new TJsonNumber { Value = 1 } },

                // Maximum number of story reaction media areas�� that can be added to a story by Premium users. (integer)
                new TJsonObjectValue { Key = "stories_suggested_reactions_limit_premium", Value = new TJsonNumber { Value = 5 } },

                // Username of the inline bot to use to generate venue location tags for stories, see here�� for more info. (string)
                new TJsonObjectValue { Key = "stories_venue_search_username", Value = new TJsonString { Value = "foursquare" } },

                // The maximum UTF-8 length of story captions for non-Premium users. (integer)
                new TJsonObjectValue { Key = "story_caption_length_limit_default", Value = new TJsonNumber { Value = 200 } },

                // The maximum UTF-8 length of story captions for Premium users. (integer)
                new TJsonObjectValue { Key = "story_caption_length_limit_premium", Value = new TJsonNumber { Value = 2048 } },

                // The maximum number of active stories for non-Premium users (integer).
                new TJsonObjectValue { Key = "story_expiring_limit_default", Value = new TJsonNumber { Value = 3 } },

                // The maximum number of active stories for Premium users (integer).
                new TJsonObjectValue { Key = "story_expiring_limit_premium", Value = new TJsonNumber { Value = 100 } },

                // The exact list of users that viewed the story will be hidden from the poster this many seconds after the story expires. (integer)
                new TJsonObjectValue { Key = "story_viewers_expire_period", Value = new TJsonNumber { Value = 86400 } },

                // If true, clients should preload the current weather on startup (as opposed to only when creating a weather media area) by querying the bot specified in weather_search_username. (boolean)
                new TJsonObjectValue { Key = "story_weather_preload", Value = new TJsonBool { Value = false } },

                // Minimum number of group members required to enable native antispam functionality. (integer)
                new TJsonObjectValue { Key = "telegram_antispam_group_size_min", Value = new TJsonNumber { Value = 200 } },

                // The ID of the official native antispam bot, that will automatically delete spam messages if enabled as specified in the native antispam documentation��.
                // When fetching the admin list of a supergroup using channels.getParticipants, if native antispam functionality in the specified supergroup, the bot should be manually added to the admin list displayed to the user.  (numeric string that represents a Telegram user/bot ID, should be casted to an int64)
                new TJsonObjectValue { Key = "telegram_antispam_user_id", Value = new TJsonString { Value = "5434988373" } },

                // Specifies the domain name to be used to securely open TON sites��. (string)
                new TJsonObjectValue { Key = "ton_proxy_address", Value = new TJsonString { Value = "magic.org" } },

                // Maximum number of topics that can be pinned in a single forum. (integer)
                new TJsonObjectValue { Key = "topics_pinned_limit", Value = new TJsonNumber { Value = 5 } },

                // The maximum allowed duration of media in seconds for speech recognition�� for non-Premium users. (integer)
                new TJsonObjectValue { Key = "transcribe_audio_trial_duration_max", Value = new TJsonNumber { Value = 300 } },

                // The maximum number of speech recognition�� calls per week for non-Premium users. (integer)
                new TJsonObjectValue { Key = "transcribe_audio_trial_weekly_number", Value = new TJsonNumber { Value = 0 } },

                // The maximum number of file parts uploadable by non-Premium users (integer, the maximum file size can be extrapolated by multiplying this value by 524288, the biggest possible chunk size)
                new TJsonObjectValue { Key = "upload_max_fileparts_default", Value = new TJsonNumber { Value = 4000 } },

                // The maximum number of file parts uploadable by Premium users (integer, the maximum file size can be extrapolated by multiplying this value by 524288, the biggest possible chunk size)
                new TJsonObjectValue { Key = "upload_max_fileparts_premium", Value = new TJsonNumber { Value = 8000 } },

                // Indicates the file download speedup enjoyed by Premium subscribers, used as specified here�� in the Premium modal shown when receiving FLOOD_WAIT_PREMIUM_X errors during file downloads. (integer)
                new TJsonObjectValue { Key = "upload_premium_speedup_download", Value = new TJsonNumber { Value = 10 } },

                // The Premium modal shown when receiving FLOOD_WAIT_PREMIUM_X errors during file uploads/downloads should be shown at most every upload_premium_speedup_notify_period seconds.  (integer)
                new TJsonObjectValue { Key = "upload_premium_speedup_notify_period", Value = new TJsonNumber { Value = 3600 } },

                // Indicates the file upload speedup enjoyed by Premium subscribers, used as specified here�� in the Premium modal shown when receiving FLOOD_WAIT_PREMIUM_X errors during file uploads. (integer)
                new TJsonObjectValue { Key = "upload_premium_speedup_upload", Value = new TJsonNumber { Value = 10 } },

                // A list of domains that support automatic login with manual user confirmation, click here for more info on URL authorization��. (array of strings)
                new TJsonObjectValue
                {
                    Key = "url_auth_domains",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                            new TJsonString { Value = "web.telegram.org" },
                            new TJsonString { Value = "web.t.me" },
                            new TJsonString { Value = "k.t.me" },
                            new TJsonString { Value = "z.t.me" },
                            new TJsonString { Value = "a.t.me" },
                        ]
                    }
                },

                // If true, indicates that the messageMediaDocument.alt_documents field must be ignored. (boolean)
                new TJsonObjectValue { Key = "video_ignore_alt_documents", Value = new TJsonBool { Value = false } },

                // Contains the username of the bot used to query the current weather, to use in weather media areas as specified here��. (string)
                new TJsonObjectValue { Key = "weather_search_username", Value = new TJsonString { Value = "StoryWeatherBot" } },

                // Specifies a list of allowed schemes for URLs received in web_app_open_link events. (array of strings)
                new TJsonObjectValue
                {
                    Key = "web_app_allowed_protocols",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                            new TJsonString { Value = "http" },
                            new TJsonString { Value = "https" },
                        ]
                    }
                },

                // A list of Telegram domains that can always be opened without additional user confirmation, when clicking on in-app links where the URL is not fully displayed (i.e. messageEntityTextUrl entities). (array of strings)
                new TJsonObjectValue
                {
                    Key = "whitelisted_domains",
                    Value = new TJsonArray
                    {
                        Value =
                        [
                            new TJsonString { Value = "telegram.dog" },
                            new TJsonString { Value = "telegram.me" },
                            new TJsonString { Value = "telegram.org" },
                            new TJsonString { Value = "t.me" },
                            new TJsonString { Value = "telesco.pe" },
                            new TJsonString { Value = "fragment.com" },
                            new TJsonString { Value = "translations.telegram.org" },
                        ]
                    }
                },

                new TJsonObjectValue { Key = "forum_upgrade_participants_min", Value = new TJsonNumber { Value = 10000 } },

            ]
        };
        AddCustomConfig();

        return _jsonValue;
    }
}
