// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// <auto-generated />

using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using Microsoft.Extensions.Primitives;
using Microsoft.Net.Http.Headers;

namespace Microsoft.AspNetCore.HttpSys.Internal
{
    [GeneratedCode("TextTemplatingFileGenerator", "")]
    internal partial class RequestHeaders
    {
        // Tracks if individual fields have been read from native or set directly.
        // Once read or set, their presence in the collection is marked by if their StringValues is null or not.
        private UInt32 _flag0, _flag1;

        private StringValues _Accept;
        private StringValues _AcceptCharset;
        private StringValues _AcceptEncoding;
        private StringValues _AcceptLanguage;
        private StringValues _Allow;
        private StringValues _Authorization;
        private StringValues _CacheControl;
        private StringValues _Connection;
        private StringValues _ContentEncoding;
        private StringValues _ContentLanguage;
        private StringValues _ContentLength;
        private StringValues _ContentLocation;
        private StringValues _ContentMD5;
        private StringValues _ContentRange;
        private StringValues _ContentType;
        private StringValues _Cookie;
        private StringValues _Date;
        private StringValues _Expect;
        private StringValues _Expires;
        private StringValues _From;
        private StringValues _Host;
        private StringValues _IfMatch;
        private StringValues _IfModifiedSince;
        private StringValues _IfNoneMatch;
        private StringValues _IfRange;
        private StringValues _IfUnmodifiedSince;
        private StringValues _KeepAlive;
        private StringValues _LastModified;
        private StringValues _MaxForwards;
        private StringValues _Pragma;
        private StringValues _ProxyAuthorization;
        private StringValues _Range;
        private StringValues _Referer;
        private StringValues _TE;
        private StringValues _Trailer;
        private StringValues _TransferEncoding;
        private StringValues _Translate;
        private StringValues _Upgrade;
        private StringValues _UserAgent;
        private StringValues _Via;
        private StringValues _Warning;

        public StringValues Accept
        {
            get
            {
                if ((_flag0 & 0x1u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Accept);
                    if (nativeValue != null)
                    {
                        _Accept = nativeValue;
                    }
                    _flag0 |= 0x1u;
                }

                return _Accept.Count > 0 ? _Accept : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x1u;

                _Accept = value.Count > 0 ? value : default;
            }
        }

        public StringValues AcceptCharset
        {
            get
            {
                if ((_flag0 & 0x2u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.AcceptCharset);
                    if (nativeValue != null)
                    {
                        _AcceptCharset = nativeValue;
                    }
                    _flag0 |= 0x2u;
                }

                return _AcceptCharset.Count > 0 ? _AcceptCharset : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x2u;

                _AcceptCharset = value.Count > 0 ? value : default;
            }
        }

        public StringValues AcceptEncoding
        {
            get
            {
                if ((_flag0 & 0x4u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.AcceptEncoding);
                    if (nativeValue != null)
                    {
                        _AcceptEncoding = nativeValue;
                    }
                    _flag0 |= 0x4u;
                }

                return _AcceptEncoding.Count > 0 ? _AcceptEncoding : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x4u;

                _AcceptEncoding = value.Count > 0 ? value : default;
            }
        }

        public StringValues AcceptLanguage
        {
            get
            {
                if ((_flag0 & 0x8u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.AcceptLanguage);
                    if (nativeValue != null)
                    {
                        _AcceptLanguage = nativeValue;
                    }
                    _flag0 |= 0x8u;
                }

                return _AcceptLanguage.Count > 0 ? _AcceptLanguage : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x8u;

                _AcceptLanguage = value.Count > 0 ? value : default;
            }
        }

        public StringValues Allow
        {
            get
            {
                if ((_flag0 & 0x10u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Allow);
                    if (nativeValue != null)
                    {
                        _Allow = nativeValue;
                    }
                    _flag0 |= 0x10u;
                }

                return _Allow.Count > 0 ? _Allow : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x10u;

                _Allow = value.Count > 0 ? value : default;
            }
        }

        public StringValues Authorization
        {
            get
            {
                if ((_flag0 & 0x20u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Authorization);
                    if (nativeValue != null)
                    {
                        _Authorization = nativeValue;
                    }
                    _flag0 |= 0x20u;
                }

                return _Authorization.Count > 0 ? _Authorization : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x20u;

                _Authorization = value.Count > 0 ? value : default;
            }
        }

        public StringValues CacheControl
        {
            get
            {
                if ((_flag0 & 0x40u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.CacheControl);
                    if (nativeValue != null)
                    {
                        _CacheControl = nativeValue;
                    }
                    _flag0 |= 0x40u;
                }

                return _CacheControl.Count > 0 ? _CacheControl : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x40u;

                _CacheControl = value.Count > 0 ? value : default;
            }
        }

        public StringValues Connection
        {
            get
            {
                if ((_flag0 & 0x80u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Connection);
                    if (nativeValue != null)
                    {
                        _Connection = nativeValue;
                    }
                    _flag0 |= 0x80u;
                }

                return _Connection.Count > 0 ? _Connection : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x80u;

                _Connection = value.Count > 0 ? value : default;
            }
        }

        public StringValues ContentEncoding
        {
            get
            {
                if ((_flag0 & 0x100u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.ContentEncoding);
                    if (nativeValue != null)
                    {
                        _ContentEncoding = nativeValue;
                    }
                    _flag0 |= 0x100u;
                }

                return _ContentEncoding.Count > 0 ? _ContentEncoding : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x100u;

                _ContentEncoding = value.Count > 0 ? value : default;
            }
        }

        public StringValues ContentLanguage
        {
            get
            {
                if ((_flag0 & 0x200u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.ContentLanguage);
                    if (nativeValue != null)
                    {
                        _ContentLanguage = nativeValue;
                    }
                    _flag0 |= 0x200u;
                }

                return _ContentLanguage.Count > 0 ? _ContentLanguage : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x200u;

                _ContentLanguage = value.Count > 0 ? value : default;
            }
        }

        public StringValues ContentLength
        {
            get
            {
                if ((_flag0 & 0x400u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.ContentLength);
                    if (nativeValue != null)
                    {
                        _ContentLength = nativeValue;
                    }
                    _flag0 |= 0x400u;
                }

                return _ContentLength.Count > 0 ? _ContentLength : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x400u;

                _ContentLength = value.Count > 0 ? value : default;
            }
        }

        public StringValues ContentLocation
        {
            get
            {
                if ((_flag0 & 0x800u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.ContentLocation);
                    if (nativeValue != null)
                    {
                        _ContentLocation = nativeValue;
                    }
                    _flag0 |= 0x800u;
                }

                return _ContentLocation.Count > 0 ? _ContentLocation : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x800u;

                _ContentLocation = value.Count > 0 ? value : default;
            }
        }

        public StringValues ContentMD5
        {
            get
            {
                if ((_flag0 & 0x1000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.ContentMd5);
                    if (nativeValue != null)
                    {
                        _ContentMD5 = nativeValue;
                    }
                    _flag0 |= 0x1000u;
                }

                return _ContentMD5.Count > 0 ? _ContentMD5 : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x1000u;

                _ContentMD5 = value.Count > 0 ? value : default;
            }
        }

        public StringValues ContentRange
        {
            get
            {
                if ((_flag0 & 0x2000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.ContentRange);
                    if (nativeValue != null)
                    {
                        _ContentRange = nativeValue;
                    }
                    _flag0 |= 0x2000u;
                }

                return _ContentRange.Count > 0 ? _ContentRange : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x2000u;

                _ContentRange = value.Count > 0 ? value : default;
            }
        }

        public StringValues ContentType
        {
            get
            {
                if ((_flag0 & 0x4000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.ContentType);
                    if (nativeValue != null)
                    {
                        _ContentType = nativeValue;
                    }
                    _flag0 |= 0x4000u;
                }

                return _ContentType.Count > 0 ? _ContentType : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x4000u;

                _ContentType = value.Count > 0 ? value : default;
            }
        }

        public StringValues Cookie
        {
            get
            {
                if ((_flag0 & 0x8000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Cookie);
                    if (nativeValue != null)
                    {
                        _Cookie = nativeValue;
                    }
                    _flag0 |= 0x8000u;
                }

                return _Cookie.Count > 0 ? _Cookie : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x8000u;

                _Cookie = value.Count > 0 ? value : default;
            }
        }

        public StringValues Date
        {
            get
            {
                if ((_flag0 & 0x10000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Date);
                    if (nativeValue != null)
                    {
                        _Date = nativeValue;
                    }
                    _flag0 |= 0x10000u;
                }

                return _Date.Count > 0 ? _Date : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x10000u;

                _Date = value.Count > 0 ? value : default;
            }
        }

        public StringValues Expect
        {
            get
            {
                if ((_flag0 & 0x20000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Expect);
                    if (nativeValue != null)
                    {
                        _Expect = nativeValue;
                    }
                    _flag0 |= 0x20000u;
                }

                return _Expect.Count > 0 ? _Expect : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x20000u;

                _Expect = value.Count > 0 ? value : default;
            }
        }

        public StringValues Expires
        {
            get
            {
                if ((_flag0 & 0x40000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Expires);
                    if (nativeValue != null)
                    {
                        _Expires = nativeValue;
                    }
                    _flag0 |= 0x40000u;
                }

                return _Expires.Count > 0 ? _Expires : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x40000u;

                _Expires = value.Count > 0 ? value : default;
            }
        }

        public StringValues From
        {
            get
            {
                if ((_flag0 & 0x80000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.From);
                    if (nativeValue != null)
                    {
                        _From = nativeValue;
                    }
                    _flag0 |= 0x80000u;
                }

                return _From.Count > 0 ? _From : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x80000u;

                _From = value.Count > 0 ? value : default;
            }
        }

        public StringValues Host
        {
            get
            {
                if ((_flag0 & 0x100000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Host);
                    if (nativeValue != null)
                    {
                        _Host = nativeValue;
                    }
                    _flag0 |= 0x100000u;
                }

                return _Host.Count > 0 ? _Host : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x100000u;

                _Host = value.Count > 0 ? value : default;
            }
        }

        public StringValues IfMatch
        {
            get
            {
                if ((_flag0 & 0x200000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.IfMatch);
                    if (nativeValue != null)
                    {
                        _IfMatch = nativeValue;
                    }
                    _flag0 |= 0x200000u;
                }

                return _IfMatch.Count > 0 ? _IfMatch : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x200000u;

                _IfMatch = value.Count > 0 ? value : default;
            }
        }

        public StringValues IfModifiedSince
        {
            get
            {
                if ((_flag0 & 0x400000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.IfModifiedSince);
                    if (nativeValue != null)
                    {
                        _IfModifiedSince = nativeValue;
                    }
                    _flag0 |= 0x400000u;
                }

                return _IfModifiedSince.Count > 0 ? _IfModifiedSince : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x400000u;

                _IfModifiedSince = value.Count > 0 ? value : default;
            }
        }

        public StringValues IfNoneMatch
        {
            get
            {
                if ((_flag0 & 0x800000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.IfNoneMatch);
                    if (nativeValue != null)
                    {
                        _IfNoneMatch = nativeValue;
                    }
                    _flag0 |= 0x800000u;
                }

                return _IfNoneMatch.Count > 0 ? _IfNoneMatch : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x800000u;

                _IfNoneMatch = value.Count > 0 ? value : default;
            }
        }

        public StringValues IfRange
        {
            get
            {
                if ((_flag0 & 0x1000000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.IfRange);
                    if (nativeValue != null)
                    {
                        _IfRange = nativeValue;
                    }
                    _flag0 |= 0x1000000u;
                }

                return _IfRange.Count > 0 ? _IfRange : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x1000000u;

                _IfRange = value.Count > 0 ? value : default;
            }
        }

        public StringValues IfUnmodifiedSince
        {
            get
            {
                if ((_flag0 & 0x2000000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.IfUnmodifiedSince);
                    if (nativeValue != null)
                    {
                        _IfUnmodifiedSince = nativeValue;
                    }
                    _flag0 |= 0x2000000u;
                }

                return _IfUnmodifiedSince.Count > 0 ? _IfUnmodifiedSince : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x2000000u;

                _IfUnmodifiedSince = value.Count > 0 ? value : default;
            }
        }

        public StringValues KeepAlive
        {
            get
            {
                if ((_flag0 & 0x4000000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.KeepAlive);
                    if (nativeValue != null)
                    {
                        _KeepAlive = nativeValue;
                    }
                    _flag0 |= 0x4000000u;
                }

                return _KeepAlive.Count > 0 ? _KeepAlive : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x4000000u;

                _KeepAlive = value.Count > 0 ? value : default;
            }
        }

        public StringValues LastModified
        {
            get
            {
                if ((_flag0 & 0x8000000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.LastModified);
                    if (nativeValue != null)
                    {
                        _LastModified = nativeValue;
                    }
                    _flag0 |= 0x8000000u;
                }

                return _LastModified.Count > 0 ? _LastModified : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x8000000u;

                _LastModified = value.Count > 0 ? value : default;
            }
        }

        public StringValues MaxForwards
        {
            get
            {
                if ((_flag0 & 0x10000000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.MaxForwards);
                    if (nativeValue != null)
                    {
                        _MaxForwards = nativeValue;
                    }
                    _flag0 |= 0x10000000u;
                }

                return _MaxForwards.Count > 0 ? _MaxForwards : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x10000000u;

                _MaxForwards = value.Count > 0 ? value : default;
            }
        }

        public StringValues Pragma
        {
            get
            {
                if ((_flag0 & 0x20000000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Pragma);
                    if (nativeValue != null)
                    {
                        _Pragma = nativeValue;
                    }
                    _flag0 |= 0x20000000u;
                }

                return _Pragma.Count > 0 ? _Pragma : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x20000000u;

                _Pragma = value.Count > 0 ? value : default;
            }
        }

        public StringValues ProxyAuthorization
        {
            get
            {
                if ((_flag0 & 0x40000000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.ProxyAuthorization);
                    if (nativeValue != null)
                    {
                        _ProxyAuthorization = nativeValue;
                    }
                    _flag0 |= 0x40000000u;
                }

                return _ProxyAuthorization.Count > 0 ? _ProxyAuthorization : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x40000000u;

                _ProxyAuthorization = value.Count > 0 ? value : default;
            }
        }

        public StringValues Range
        {
            get
            {
                if ((_flag0 & 0x80000000u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Range);
                    if (nativeValue != null)
                    {
                        _Range = nativeValue;
                    }
                    _flag0 |= 0x80000000u;
                }

                return _Range.Count > 0 ? _Range : StringValues.Empty;
            }
            set
            {
                _flag0 |= 0x80000000u;

                _Range = value.Count > 0 ? value : default;
            }
        }

        public StringValues Referer
        {
            get
            {
                if ((_flag1 & 0x1u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Referer);
                    if (nativeValue != null)
                    {
                        _Referer = nativeValue;
                    }
                    _flag1 |= 0x1u;
                }

                return _Referer.Count > 0 ? _Referer : StringValues.Empty;
            }
            set
            {
                _flag1 |= 0x1u;

                _Referer = value.Count > 0 ? value : default;
            }
        }

        public StringValues TE
        {
            get
            {
                if ((_flag1 & 0x2u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Te);
                    if (nativeValue != null)
                    {
                        _TE = nativeValue;
                    }
                    _flag1 |= 0x2u;
                }

                return _TE.Count > 0 ? _TE : StringValues.Empty;
            }
            set
            {
                _flag1 |= 0x2u;

                _TE = value.Count > 0 ? value : default;
            }
        }

        public StringValues Trailer
        {
            get
            {
                if ((_flag1 & 0x4u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Trailer);
                    if (nativeValue != null)
                    {
                        _Trailer = nativeValue;
                    }
                    _flag1 |= 0x4u;
                }

                return _Trailer.Count > 0 ? _Trailer : StringValues.Empty;
            }
            set
            {
                _flag1 |= 0x4u;

                _Trailer = value.Count > 0 ? value : default;
            }
        }

        public StringValues TransferEncoding
        {
            get
            {
                if ((_flag1 & 0x8u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.TransferEncoding);
                    if (nativeValue != null)
                    {
                        _TransferEncoding = nativeValue;
                    }
                    _flag1 |= 0x8u;
                }

                return _TransferEncoding.Count > 0 ? _TransferEncoding : StringValues.Empty;
            }
            set
            {
                _flag1 |= 0x8u;

                _TransferEncoding = value.Count > 0 ? value : default;
            }
        }

        public StringValues Translate
        {
            get
            {
                if ((_flag1 & 0x10u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Translate);
                    if (nativeValue != null)
                    {
                        _Translate = nativeValue;
                    }
                    _flag1 |= 0x10u;
                }

                return _Translate.Count > 0 ? _Translate : StringValues.Empty;
            }
            set
            {
                _flag1 |= 0x10u;

                _Translate = value.Count > 0 ? value : default;
            }
        }

        public StringValues Upgrade
        {
            get
            {
                if ((_flag1 & 0x20u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Upgrade);
                    if (nativeValue != null)
                    {
                        _Upgrade = nativeValue;
                    }
                    _flag1 |= 0x20u;
                }

                return _Upgrade.Count > 0 ? _Upgrade : StringValues.Empty;
            }
            set
            {
                _flag1 |= 0x20u;

                _Upgrade = value.Count > 0 ? value : default;
            }
        }

        public StringValues UserAgent
        {
            get
            {
                if ((_flag1 & 0x40u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.UserAgent);
                    if (nativeValue != null)
                    {
                        _UserAgent = nativeValue;
                    }
                    _flag1 |= 0x40u;
                }

                return _UserAgent.Count > 0 ? _UserAgent : StringValues.Empty;
            }
            set
            {
                _flag1 |= 0x40u;

                _UserAgent = value.Count > 0 ? value : default;
            }
        }

        public StringValues Via
        {
            get
            {
                if ((_flag1 & 0x80u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Via);
                    if (nativeValue != null)
                    {
                        _Via = nativeValue;
                    }
                    _flag1 |= 0x80u;
                }

                return _Via.Count > 0 ? _Via : StringValues.Empty;
            }
            set
            {
                _flag1 |= 0x80u;

                _Via = value.Count > 0 ? value : default;
            }
        }

        public StringValues Warning
        {
            get
            {
                if ((_flag1 & 0x100u) == 0)
                {
                    string nativeValue = GetKnownHeader(HttpSysRequestHeader.Warning);
                    if (nativeValue != null)
                    {
                        _Warning = nativeValue;
                    }
                    _flag1 |= 0x100u;
                }

                return _Warning.Count > 0 ? _Warning : StringValues.Empty;
            }
            set
            {
                _flag1 |= 0x100u;

                _Warning = value.Count > 0 ? value : default;
            }
        }

        private bool PropertiesContainsKey(string key)
        {
            switch (key.Length)
            {
                case 2:
                    if (string.Equals(key, HeaderNames.TE, StringComparison.OrdinalIgnoreCase))
                    {
                        return TE.Count > 0;
                    }
                    break;
                case 3:
                    if (string.Equals(key, HeaderNames.Via, StringComparison.OrdinalIgnoreCase))
                    {
                        return Via.Count > 0;
                    }
                    break;
                case 4:
                    if (string.Equals(key, HeaderNames.Date, StringComparison.OrdinalIgnoreCase))
                    {
                        return Date.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.From, StringComparison.OrdinalIgnoreCase))
                    {
                        return From.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Host, StringComparison.OrdinalIgnoreCase))
                    {
                        return Host.Count > 0;
                    }
                    break;
                case 5:
                    if (string.Equals(key, HeaderNames.Allow, StringComparison.OrdinalIgnoreCase))
                    {
                        return Allow.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Range, StringComparison.OrdinalIgnoreCase))
                    {
                        return Range.Count > 0;
                    }
                    break;
                case 6:
                    if (string.Equals(key, HeaderNames.Accept, StringComparison.OrdinalIgnoreCase))
                    {
                        return Accept.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Cookie, StringComparison.OrdinalIgnoreCase))
                    {
                        return Cookie.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Expect, StringComparison.OrdinalIgnoreCase))
                    {
                        return Expect.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Pragma, StringComparison.OrdinalIgnoreCase))
                    {
                        return Pragma.Count > 0;
                    }
                    break;
                case 7:
                    if (string.Equals(key, HeaderNames.Expires, StringComparison.OrdinalIgnoreCase))
                    {
                        return Expires.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Referer, StringComparison.OrdinalIgnoreCase))
                    {
                        return Referer.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Trailer, StringComparison.OrdinalIgnoreCase))
                    {
                        return Trailer.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Upgrade, StringComparison.OrdinalIgnoreCase))
                    {
                        return Upgrade.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Warning, StringComparison.OrdinalIgnoreCase))
                    {
                        return Warning.Count > 0;
                    }
                    break;
                case 8:
                    if (string.Equals(key, HeaderNames.IfMatch, StringComparison.OrdinalIgnoreCase))
                    {
                        return IfMatch.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.IfRange, StringComparison.OrdinalIgnoreCase))
                    {
                        return IfRange.Count > 0;
                    }
                    break;
                case 9:
                    if (string.Equals(key, HeaderNames.Translate, StringComparison.OrdinalIgnoreCase))
                    {
                        return Translate.Count > 0;
                    }
                    break;
                case 10:
                    if (string.Equals(key, HeaderNames.Connection, StringComparison.OrdinalIgnoreCase))
                    {
                        return Connection.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.KeepAlive, StringComparison.OrdinalIgnoreCase))
                    {
                        return KeepAlive.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.UserAgent, StringComparison.OrdinalIgnoreCase))
                    {
                        return UserAgent.Count > 0;
                    }
                    break;
                case 11:
                    if (string.Equals(key, HeaderNames.ContentMD5, StringComparison.OrdinalIgnoreCase))
                    {
                        return ContentMD5.Count > 0;
                    }
                    break;
                case 12:
                    if (string.Equals(key, HeaderNames.ContentType, StringComparison.OrdinalIgnoreCase))
                    {
                        return ContentType.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.MaxForwards, StringComparison.OrdinalIgnoreCase))
                    {
                        return MaxForwards.Count > 0;
                    }
                    break;
                case 13:
                    if (string.Equals(key, HeaderNames.Authorization, StringComparison.OrdinalIgnoreCase))
                    {
                        return Authorization.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.CacheControl, StringComparison.OrdinalIgnoreCase))
                    {
                        return CacheControl.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.ContentRange, StringComparison.OrdinalIgnoreCase))
                    {
                        return ContentRange.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.IfNoneMatch, StringComparison.OrdinalIgnoreCase))
                    {
                        return IfNoneMatch.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.LastModified, StringComparison.OrdinalIgnoreCase))
                    {
                        return LastModified.Count > 0;
                    }
                    break;
                case 14:
                    if (string.Equals(key, HeaderNames.AcceptCharset, StringComparison.OrdinalIgnoreCase))
                    {
                        return AcceptCharset.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.ContentLength, StringComparison.OrdinalIgnoreCase))
                    {
                        return ContentLength.Count > 0;
                    }
                    break;
                case 15:
                    if (string.Equals(key, HeaderNames.AcceptEncoding, StringComparison.OrdinalIgnoreCase))
                    {
                        return AcceptEncoding.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.AcceptLanguage, StringComparison.OrdinalIgnoreCase))
                    {
                        return AcceptLanguage.Count > 0;
                    }
                    break;
                case 16:
                    if (string.Equals(key, HeaderNames.ContentEncoding, StringComparison.OrdinalIgnoreCase))
                    {
                        return ContentEncoding.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.ContentLanguage, StringComparison.OrdinalIgnoreCase))
                    {
                        return ContentLanguage.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.ContentLocation, StringComparison.OrdinalIgnoreCase))
                    {
                        return ContentLocation.Count > 0;
                    }
                    break;
                case 17:
                    if (string.Equals(key, HeaderNames.IfModifiedSince, StringComparison.OrdinalIgnoreCase))
                    {
                        return IfModifiedSince.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.TransferEncoding, StringComparison.OrdinalIgnoreCase))
                    {
                        return TransferEncoding.Count > 0;
                    }
                    break;
                case 19:
                    if (string.Equals(key, HeaderNames.IfUnmodifiedSince, StringComparison.OrdinalIgnoreCase))
                    {
                        return IfUnmodifiedSince.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.ProxyAuthorization, StringComparison.OrdinalIgnoreCase))
                    {
                        return ProxyAuthorization.Count > 0;
                    }
                    break;
            }
            return false;
        }

        private bool PropertiesTryGetValue(string key, out StringValues value)
        {
            switch (key.Length)
            {
                case 2:
                    if (string.Equals(key, HeaderNames.TE, StringComparison.OrdinalIgnoreCase))
                    {
                        value = TE;
                        return value.Count > 0;
                    }
                    break;
                case 3:
                    if (string.Equals(key, HeaderNames.Via, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Via;
                        return value.Count > 0;
                    }
                    break;
                case 4:
                    if (string.Equals(key, HeaderNames.Date, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Date;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.From, StringComparison.OrdinalIgnoreCase))
                    {
                        value = From;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Host, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Host;
                        return value.Count > 0;
                    }
                    break;
                case 5:
                    if (string.Equals(key, HeaderNames.Allow, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Allow;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Range, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Range;
                        return value.Count > 0;
                    }
                    break;
                case 6:
                    if (string.Equals(key, HeaderNames.Accept, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Accept;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Cookie, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Cookie;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Expect, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Expect;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Pragma, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Pragma;
                        return value.Count > 0;
                    }
                    break;
                case 7:
                    if (string.Equals(key, HeaderNames.Expires, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Expires;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Referer, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Referer;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Trailer, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Trailer;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Upgrade, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Upgrade;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.Warning, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Warning;
                        return value.Count > 0;
                    }
                    break;
                case 8:
                    if (string.Equals(key, HeaderNames.IfMatch, StringComparison.OrdinalIgnoreCase))
                    {
                        value = IfMatch;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.IfRange, StringComparison.OrdinalIgnoreCase))
                    {
                        value = IfRange;
                        return value.Count > 0;
                    }
                    break;
                case 9:
                    if (string.Equals(key, HeaderNames.Translate, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Translate;
                        return value.Count > 0;
                    }
                    break;
                case 10:
                    if (string.Equals(key, HeaderNames.Connection, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Connection;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.KeepAlive, StringComparison.OrdinalIgnoreCase))
                    {
                        value = KeepAlive;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.UserAgent, StringComparison.OrdinalIgnoreCase))
                    {
                        value = UserAgent;
                        return value.Count > 0;
                    }
                    break;
                case 11:
                    if (string.Equals(key, HeaderNames.ContentMD5, StringComparison.OrdinalIgnoreCase))
                    {
                        value = ContentMD5;
                        return value.Count > 0;
                    }
                    break;
                case 12:
                    if (string.Equals(key, HeaderNames.ContentType, StringComparison.OrdinalIgnoreCase))
                    {
                        value = ContentType;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.MaxForwards, StringComparison.OrdinalIgnoreCase))
                    {
                        value = MaxForwards;
                        return value.Count > 0;
                    }
                    break;
                case 13:
                    if (string.Equals(key, HeaderNames.Authorization, StringComparison.OrdinalIgnoreCase))
                    {
                        value = Authorization;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.CacheControl, StringComparison.OrdinalIgnoreCase))
                    {
                        value = CacheControl;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.ContentRange, StringComparison.OrdinalIgnoreCase))
                    {
                        value = ContentRange;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.IfNoneMatch, StringComparison.OrdinalIgnoreCase))
                    {
                        value = IfNoneMatch;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.LastModified, StringComparison.OrdinalIgnoreCase))
                    {
                        value = LastModified;
                        return value.Count > 0;
                    }
                    break;
                case 14:
                    if (string.Equals(key, HeaderNames.AcceptCharset, StringComparison.OrdinalIgnoreCase))
                    {
                        value = AcceptCharset;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.ContentLength, StringComparison.OrdinalIgnoreCase))
                    {
                        value = ContentLength;
                        return value.Count > 0;
                    }
                    break;
                case 15:
                    if (string.Equals(key, HeaderNames.AcceptEncoding, StringComparison.OrdinalIgnoreCase))
                    {
                        value = AcceptEncoding;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.AcceptLanguage, StringComparison.OrdinalIgnoreCase))
                    {
                        value = AcceptLanguage;
                        return value.Count > 0;
                    }
                    break;
                case 16:
                    if (string.Equals(key, HeaderNames.ContentEncoding, StringComparison.OrdinalIgnoreCase))
                    {
                        value = ContentEncoding;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.ContentLanguage, StringComparison.OrdinalIgnoreCase))
                    {
                        value = ContentLanguage;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.ContentLocation, StringComparison.OrdinalIgnoreCase))
                    {
                        value = ContentLocation;
                        return value.Count > 0;
                    }
                    break;
                case 17:
                    if (string.Equals(key, HeaderNames.IfModifiedSince, StringComparison.OrdinalIgnoreCase))
                    {
                        value = IfModifiedSince;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.TransferEncoding, StringComparison.OrdinalIgnoreCase))
                    {
                        value = TransferEncoding;
                        return value.Count > 0;
                    }
                    break;
                case 19:
                    if (string.Equals(key, HeaderNames.IfUnmodifiedSince, StringComparison.OrdinalIgnoreCase))
                    {
                        value = IfUnmodifiedSince;
                        return value.Count > 0;
                    }
                    if (string.Equals(key, HeaderNames.ProxyAuthorization, StringComparison.OrdinalIgnoreCase))
                    {
                        value = ProxyAuthorization;
                        return value.Count > 0;
                    }
                    break;
            }
            value = default;
            return false;
        }

        private bool PropertiesTrySetValue(string key, StringValues value)
        {
            switch (key.Length)
            {
                case 2:
                    if (string.Equals(key, HeaderNames.TE, StringComparison.OrdinalIgnoreCase))
                    {
                        TE = value;
                        return true;
                    }
                    break;
                case 3:
                    if (string.Equals(key, HeaderNames.Via, StringComparison.OrdinalIgnoreCase))
                    {
                        Via = value;
                        return true;
                    }
                    break;
                case 4:
                    if (string.Equals(key, HeaderNames.Date, StringComparison.OrdinalIgnoreCase))
                    {
                        Date = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.From, StringComparison.OrdinalIgnoreCase))
                    {
                        From = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.Host, StringComparison.OrdinalIgnoreCase))
                    {
                        Host = value;
                        return true;
                    }
                    break;
                case 5:
                    if (string.Equals(key, HeaderNames.Allow, StringComparison.OrdinalIgnoreCase))
                    {
                        Allow = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.Range, StringComparison.OrdinalIgnoreCase))
                    {
                        Range = value;
                        return true;
                    }
                    break;
                case 6:
                    if (string.Equals(key, HeaderNames.Accept, StringComparison.OrdinalIgnoreCase))
                    {
                        Accept = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.Cookie, StringComparison.OrdinalIgnoreCase))
                    {
                        Cookie = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.Expect, StringComparison.OrdinalIgnoreCase))
                    {
                        Expect = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.Pragma, StringComparison.OrdinalIgnoreCase))
                    {
                        Pragma = value;
                        return true;
                    }
                    break;
                case 7:
                    if (string.Equals(key, HeaderNames.Expires, StringComparison.OrdinalIgnoreCase))
                    {
                        Expires = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.Referer, StringComparison.OrdinalIgnoreCase))
                    {
                        Referer = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.Trailer, StringComparison.OrdinalIgnoreCase))
                    {
                        Trailer = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.Upgrade, StringComparison.OrdinalIgnoreCase))
                    {
                        Upgrade = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.Warning, StringComparison.OrdinalIgnoreCase))
                    {
                        Warning = value;
                        return true;
                    }
                    break;
                case 8:
                    if (string.Equals(key, HeaderNames.IfMatch, StringComparison.OrdinalIgnoreCase))
                    {
                        IfMatch = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.IfRange, StringComparison.OrdinalIgnoreCase))
                    {
                        IfRange = value;
                        return true;
                    }
                    break;
                case 9:
                    if (string.Equals(key, HeaderNames.Translate, StringComparison.OrdinalIgnoreCase))
                    {
                        Translate = value;
                        return true;
                    }
                    break;
                case 10:
                    if (string.Equals(key, HeaderNames.Connection, StringComparison.OrdinalIgnoreCase))
                    {
                        Connection = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.KeepAlive, StringComparison.OrdinalIgnoreCase))
                    {
                        KeepAlive = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.UserAgent, StringComparison.OrdinalIgnoreCase))
                    {
                        UserAgent = value;
                        return true;
                    }
                    break;
                case 11:
                    if (string.Equals(key, HeaderNames.ContentMD5, StringComparison.OrdinalIgnoreCase))
                    {
                        ContentMD5 = value;
                        return true;
                    }
                    break;
                case 12:
                    if (string.Equals(key, HeaderNames.ContentType, StringComparison.OrdinalIgnoreCase))
                    {
                        ContentType = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.MaxForwards, StringComparison.OrdinalIgnoreCase))
                    {
                        MaxForwards = value;
                        return true;
                    }
                    break;
                case 13:
                    if (string.Equals(key, HeaderNames.Authorization, StringComparison.OrdinalIgnoreCase))
                    {
                        Authorization = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.CacheControl, StringComparison.OrdinalIgnoreCase))
                    {
                        CacheControl = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.ContentRange, StringComparison.OrdinalIgnoreCase))
                    {
                        ContentRange = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.IfNoneMatch, StringComparison.OrdinalIgnoreCase))
                    {
                        IfNoneMatch = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.LastModified, StringComparison.OrdinalIgnoreCase))
                    {
                        LastModified = value;
                        return true;
                    }
                    break;
                case 14:
                    if (string.Equals(key, HeaderNames.AcceptCharset, StringComparison.OrdinalIgnoreCase))
                    {
                        AcceptCharset = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.ContentLength, StringComparison.OrdinalIgnoreCase))
                    {
                        ContentLength = value;
                        return true;
                    }
                    break;
                case 15:
                    if (string.Equals(key, HeaderNames.AcceptEncoding, StringComparison.OrdinalIgnoreCase))
                    {
                        AcceptEncoding = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.AcceptLanguage, StringComparison.OrdinalIgnoreCase))
                    {
                        AcceptLanguage = value;
                        return true;
                    }
                    break;
                case 16:
                    if (string.Equals(key, HeaderNames.ContentEncoding, StringComparison.OrdinalIgnoreCase))
                    {
                        ContentEncoding = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.ContentLanguage, StringComparison.OrdinalIgnoreCase))
                    {
                        ContentLanguage = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.ContentLocation, StringComparison.OrdinalIgnoreCase))
                    {
                        ContentLocation = value;
                        return true;
                    }
                    break;
                case 17:
                    if (string.Equals(key, HeaderNames.IfModifiedSince, StringComparison.OrdinalIgnoreCase))
                    {
                        IfModifiedSince = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.TransferEncoding, StringComparison.OrdinalIgnoreCase))
                    {
                        TransferEncoding = value;
                        return true;
                    }
                    break;
                case 19:
                    if (string.Equals(key, HeaderNames.IfUnmodifiedSince, StringComparison.OrdinalIgnoreCase))
                    {
                        IfUnmodifiedSince = value;
                        return true;
                    }
                    if (string.Equals(key, HeaderNames.ProxyAuthorization, StringComparison.OrdinalIgnoreCase))
                    {
                        ProxyAuthorization = value;
                        return true;
                    }
                    break;
            }
            return false;
        }

        private bool PropertiesTryRemove(string key)
        {
            switch (key.Length)
            {
                case 2:
                    if (string.Equals(key, HeaderNames.TE, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Te))
                        {
                            TE = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 3:
                    if (string.Equals(key, HeaderNames.Via, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Via))
                        {
                            Via = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 4:
                    if (string.Equals(key, HeaderNames.Date, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Date))
                        {
                            Date = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.From, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.From))
                        {
                            From = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.Host, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Host))
                        {
                            Host = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 5:
                    if (string.Equals(key, HeaderNames.Allow, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Allow))
                        {
                            Allow = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.Range, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Range))
                        {
                            Range = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 6:
                    if (string.Equals(key, HeaderNames.Accept, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Accept))
                        {
                            Accept = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.Cookie, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Cookie))
                        {
                            Cookie = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.Expect, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Expect))
                        {
                            Expect = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.Pragma, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Pragma))
                        {
                            Pragma = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 7:
                    if (string.Equals(key, HeaderNames.Expires, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Expires))
                        {
                            Expires = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.Referer, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Referer))
                        {
                            Referer = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.Trailer, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Trailer))
                        {
                            Trailer = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.Upgrade, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Upgrade))
                        {
                            Upgrade = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.Warning, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Warning))
                        {
                            Warning = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 8:
                    if (string.Equals(key, HeaderNames.IfMatch, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.IfMatch))
                        {
                            IfMatch = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.IfRange, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.IfRange))
                        {
                            IfRange = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 9:
                    if (string.Equals(key, HeaderNames.Translate, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Translate))
                        {
                            Translate = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 10:
                    if (string.Equals(key, HeaderNames.Connection, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Connection))
                        {
                            Connection = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.KeepAlive, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.KeepAlive))
                        {
                            KeepAlive = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.UserAgent, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.UserAgent))
                        {
                            UserAgent = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 11:
                    if (string.Equals(key, HeaderNames.ContentMD5, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.ContentMd5))
                        {
                            ContentMD5 = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 12:
                    if (string.Equals(key, HeaderNames.ContentType, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.ContentType))
                        {
                            ContentType = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.MaxForwards, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.MaxForwards))
                        {
                            MaxForwards = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 13:
                    if (string.Equals(key, HeaderNames.Authorization, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.Authorization))
                        {
                            Authorization = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.CacheControl, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.CacheControl))
                        {
                            CacheControl = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.ContentRange, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.ContentRange))
                        {
                            ContentRange = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.IfNoneMatch, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.IfNoneMatch))
                        {
                            IfNoneMatch = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.LastModified, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.LastModified))
                        {
                            LastModified = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 14:
                    if (string.Equals(key, HeaderNames.AcceptCharset, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.AcceptCharset))
                        {
                            AcceptCharset = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.ContentLength, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.ContentLength))
                        {
                            ContentLength = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 15:
                    if (string.Equals(key, HeaderNames.AcceptEncoding, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.AcceptEncoding))
                        {
                            AcceptEncoding = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.AcceptLanguage, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.AcceptLanguage))
                        {
                            AcceptLanguage = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 16:
                    if (string.Equals(key, HeaderNames.ContentEncoding, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.ContentEncoding))
                        {
                            ContentEncoding = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.ContentLanguage, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.ContentLanguage))
                        {
                            ContentLanguage = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.ContentLocation, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.ContentLocation))
                        {
                            ContentLocation = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 17:
                    if (string.Equals(key, HeaderNames.IfModifiedSince, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.IfModifiedSince))
                        {
                            IfModifiedSince = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.TransferEncoding, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.TransferEncoding))
                        {
                            TransferEncoding = default;
                            return true;
                        }
                        return false;
                    }

                    break;
                case 19:
                    if (string.Equals(key, HeaderNames.IfUnmodifiedSince, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.IfUnmodifiedSince))
                        {
                            IfUnmodifiedSince = default;
                            return true;
                        }
                        return false;
                    }

                    if (string.Equals(key, HeaderNames.ProxyAuthorization, StringComparison.Ordinal))
                    {
                        if (HasKnownHeader(HttpSysRequestHeader.ProxyAuthorization))
                        {
                            ProxyAuthorization = default;
                            return true;
                        }
                        return false;
                    }

                    break;
            }
            return false;
        }

        private IEnumerable<string> PropertiesKeys()
        {
            if (Accept.Count > 0)
            {
                yield return HeaderNames.Accept;
            }
            if (AcceptCharset.Count > 0)
            {
                yield return HeaderNames.AcceptCharset;
            }
            if (AcceptEncoding.Count > 0)
            {
                yield return HeaderNames.AcceptEncoding;
            }
            if (AcceptLanguage.Count > 0)
            {
                yield return HeaderNames.AcceptLanguage;
            }
            if (Allow.Count > 0)
            {
                yield return HeaderNames.Allow;
            }
            if (Authorization.Count > 0)
            {
                yield return HeaderNames.Authorization;
            }
            if (CacheControl.Count > 0)
            {
                yield return HeaderNames.CacheControl;
            }
            if (Connection.Count > 0)
            {
                yield return HeaderNames.Connection;
            }
            if (ContentEncoding.Count > 0)
            {
                yield return HeaderNames.ContentEncoding;
            }
            if (ContentLanguage.Count > 0)
            {
                yield return HeaderNames.ContentLanguage;
            }
            if (ContentLength.Count > 0)
            {
                yield return HeaderNames.ContentLength;
            }
            if (ContentLocation.Count > 0)
            {
                yield return HeaderNames.ContentLocation;
            }
            if (ContentMD5.Count > 0)
            {
                yield return HeaderNames.ContentMD5;
            }
            if (ContentRange.Count > 0)
            {
                yield return HeaderNames.ContentRange;
            }
            if (ContentType.Count > 0)
            {
                yield return HeaderNames.ContentType;
            }
            if (Cookie.Count > 0)
            {
                yield return HeaderNames.Cookie;
            }
            if (Date.Count > 0)
            {
                yield return HeaderNames.Date;
            }
            if (Expect.Count > 0)
            {
                yield return HeaderNames.Expect;
            }
            if (Expires.Count > 0)
            {
                yield return HeaderNames.Expires;
            }
            if (From.Count > 0)
            {
                yield return HeaderNames.From;
            }
            if (Host.Count > 0)
            {
                yield return HeaderNames.Host;
            }
            if (IfMatch.Count > 0)
            {
                yield return HeaderNames.IfMatch;
            }
            if (IfModifiedSince.Count > 0)
            {
                yield return HeaderNames.IfModifiedSince;
            }
            if (IfNoneMatch.Count > 0)
            {
                yield return HeaderNames.IfNoneMatch;
            }
            if (IfRange.Count > 0)
            {
                yield return HeaderNames.IfRange;
            }
            if (IfUnmodifiedSince.Count > 0)
            {
                yield return HeaderNames.IfUnmodifiedSince;
            }
            if (KeepAlive.Count > 0)
            {
                yield return HeaderNames.KeepAlive;
            }
            if (LastModified.Count > 0)
            {
                yield return HeaderNames.LastModified;
            }
            if (MaxForwards.Count > 0)
            {
                yield return HeaderNames.MaxForwards;
            }
            if (Pragma.Count > 0)
            {
                yield return HeaderNames.Pragma;
            }
            if (ProxyAuthorization.Count > 0)
            {
                yield return HeaderNames.ProxyAuthorization;
            }
            if (Range.Count > 0)
            {
                yield return HeaderNames.Range;
            }
            if (Referer.Count > 0)
            {
                yield return HeaderNames.Referer;
            }
            if (TE.Count > 0)
            {
                yield return HeaderNames.TE;
            }
            if (Trailer.Count > 0)
            {
                yield return HeaderNames.Trailer;
            }
            if (TransferEncoding.Count > 0)
            {
                yield return HeaderNames.TransferEncoding;
            }
            if (Translate.Count > 0)
            {
                yield return HeaderNames.Translate;
            }
            if (Upgrade.Count > 0)
            {
                yield return HeaderNames.Upgrade;
            }
            if (UserAgent.Count > 0)
            {
                yield return HeaderNames.UserAgent;
            }
            if (Via.Count > 0)
            {
                yield return HeaderNames.Via;
            }
            if (Warning.Count > 0)
            {
                yield return HeaderNames.Warning;
            }
        }

        private IEnumerable<StringValues> PropertiesValues()
        {
            if (Accept.Count > 0)
            {
                yield return Accept;
            }
            if (AcceptCharset.Count > 0)
            {
                yield return AcceptCharset;
            }
            if (AcceptEncoding.Count > 0)
            {
                yield return AcceptEncoding;
            }
            if (AcceptLanguage.Count > 0)
            {
                yield return AcceptLanguage;
            }
            if (Allow.Count > 0)
            {
                yield return Allow;
            }
            if (Authorization.Count > 0)
            {
                yield return Authorization;
            }
            if (CacheControl.Count > 0)
            {
                yield return CacheControl;
            }
            if (Connection.Count > 0)
            {
                yield return Connection;
            }
            if (ContentEncoding.Count > 0)
            {
                yield return ContentEncoding;
            }
            if (ContentLanguage.Count > 0)
            {
                yield return ContentLanguage;
            }
            if (ContentLength.Count > 0)
            {
                yield return ContentLength;
            }
            if (ContentLocation.Count > 0)
            {
                yield return ContentLocation;
            }
            if (ContentMD5.Count > 0)
            {
                yield return ContentMD5;
            }
            if (ContentRange.Count > 0)
            {
                yield return ContentRange;
            }
            if (ContentType.Count > 0)
            {
                yield return ContentType;
            }
            if (Cookie.Count > 0)
            {
                yield return Cookie;
            }
            if (Date.Count > 0)
            {
                yield return Date;
            }
            if (Expect.Count > 0)
            {
                yield return Expect;
            }
            if (Expires.Count > 0)
            {
                yield return Expires;
            }
            if (From.Count > 0)
            {
                yield return From;
            }
            if (Host.Count > 0)
            {
                yield return Host;
            }
            if (IfMatch.Count > 0)
            {
                yield return IfMatch;
            }
            if (IfModifiedSince.Count > 0)
            {
                yield return IfModifiedSince;
            }
            if (IfNoneMatch.Count > 0)
            {
                yield return IfNoneMatch;
            }
            if (IfRange.Count > 0)
            {
                yield return IfRange;
            }
            if (IfUnmodifiedSince.Count > 0)
            {
                yield return IfUnmodifiedSince;
            }
            if (KeepAlive.Count > 0)
            {
                yield return KeepAlive;
            }
            if (LastModified.Count > 0)
            {
                yield return LastModified;
            }
            if (MaxForwards.Count > 0)
            {
                yield return MaxForwards;
            }
            if (Pragma.Count > 0)
            {
                yield return Pragma;
            }
            if (ProxyAuthorization.Count > 0)
            {
                yield return ProxyAuthorization;
            }
            if (Range.Count > 0)
            {
                yield return Range;
            }
            if (Referer.Count > 0)
            {
                yield return Referer;
            }
            if (TE.Count > 0)
            {
                yield return TE;
            }
            if (Trailer.Count > 0)
            {
                yield return Trailer;
            }
            if (TransferEncoding.Count > 0)
            {
                yield return TransferEncoding;
            }
            if (Translate.Count > 0)
            {
                yield return Translate;
            }
            if (Upgrade.Count > 0)
            {
                yield return Upgrade;
            }
            if (UserAgent.Count > 0)
            {
                yield return UserAgent;
            }
            if (Via.Count > 0)
            {
                yield return Via;
            }
            if (Warning.Count > 0)
            {
                yield return Warning;
            }
        }

        private IEnumerable<KeyValuePair<string, StringValues>> PropertiesEnumerable()
        {
            if (Accept.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Accept, Accept);
            }
            if (AcceptCharset.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.AcceptCharset, AcceptCharset);
            }
            if (AcceptEncoding.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.AcceptEncoding, AcceptEncoding);
            }
            if (AcceptLanguage.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.AcceptLanguage, AcceptLanguage);
            }
            if (Allow.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Allow, Allow);
            }
            if (Authorization.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Authorization, Authorization);
            }
            if (CacheControl.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.CacheControl, CacheControl);
            }
            if (Connection.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Connection, Connection);
            }
            if (ContentEncoding.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.ContentEncoding, ContentEncoding);
            }
            if (ContentLanguage.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.ContentLanguage, ContentLanguage);
            }
            if (ContentLength.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.ContentLength, ContentLength);
            }
            if (ContentLocation.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.ContentLocation, ContentLocation);
            }
            if (ContentMD5.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.ContentMD5, ContentMD5);
            }
            if (ContentRange.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.ContentRange, ContentRange);
            }
            if (ContentType.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.ContentType, ContentType);
            }
            if (Cookie.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Cookie, Cookie);
            }
            if (Date.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Date, Date);
            }
            if (Expect.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Expect, Expect);
            }
            if (Expires.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Expires, Expires);
            }
            if (From.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.From, From);
            }
            if (Host.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Host, Host);
            }
            if (IfMatch.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.IfMatch, IfMatch);
            }
            if (IfModifiedSince.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.IfModifiedSince, IfModifiedSince);
            }
            if (IfNoneMatch.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.IfNoneMatch, IfNoneMatch);
            }
            if (IfRange.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.IfRange, IfRange);
            }
            if (IfUnmodifiedSince.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.IfUnmodifiedSince, IfUnmodifiedSince);
            }
            if (KeepAlive.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.KeepAlive, KeepAlive);
            }
            if (LastModified.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.LastModified, LastModified);
            }
            if (MaxForwards.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.MaxForwards, MaxForwards);
            }
            if (Pragma.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Pragma, Pragma);
            }
            if (ProxyAuthorization.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.ProxyAuthorization, ProxyAuthorization);
            }
            if (Range.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Range, Range);
            }
            if (Referer.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Referer, Referer);
            }
            if (TE.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.TE, TE);
            }
            if (Trailer.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Trailer, Trailer);
            }
            if (TransferEncoding.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.TransferEncoding, TransferEncoding);
            }
            if (Translate.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Translate, Translate);
            }
            if (Upgrade.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Upgrade, Upgrade);
            }
            if (UserAgent.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.UserAgent, UserAgent);
            }
            if (Via.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Via, Via);
            }
            if (Warning.Count > 0)
            {
                yield return new KeyValuePair<string, StringValues>(HeaderNames.Warning, Warning);
            }
        }

        private static ReadOnlySpan<HttpSysRequestHeader> HeaderKeys =>
        [
            HttpSysRequestHeader.Accept,
            HttpSysRequestHeader.AcceptCharset,
            HttpSysRequestHeader.AcceptEncoding,
            HttpSysRequestHeader.AcceptLanguage,
            HttpSysRequestHeader.Allow,
            HttpSysRequestHeader.Authorization,
            HttpSysRequestHeader.CacheControl,
            HttpSysRequestHeader.Connection,
            HttpSysRequestHeader.ContentEncoding,
            HttpSysRequestHeader.ContentLanguage,
            HttpSysRequestHeader.ContentLength,
            HttpSysRequestHeader.ContentLocation,
            HttpSysRequestHeader.ContentMd5,
            HttpSysRequestHeader.ContentRange,
            HttpSysRequestHeader.ContentType,
            HttpSysRequestHeader.Cookie,
            HttpSysRequestHeader.Date,
            HttpSysRequestHeader.Expect,
            HttpSysRequestHeader.Expires,
            HttpSysRequestHeader.From,
            HttpSysRequestHeader.Host,
            HttpSysRequestHeader.IfMatch,
            HttpSysRequestHeader.IfModifiedSince,
            HttpSysRequestHeader.IfNoneMatch,
            HttpSysRequestHeader.IfRange,
            HttpSysRequestHeader.IfUnmodifiedSince,
            HttpSysRequestHeader.KeepAlive,
            HttpSysRequestHeader.LastModified,
            HttpSysRequestHeader.MaxForwards,
            HttpSysRequestHeader.Pragma,
            HttpSysRequestHeader.ProxyAuthorization,
            HttpSysRequestHeader.Range,
            HttpSysRequestHeader.Referer,
            HttpSysRequestHeader.Te,
            HttpSysRequestHeader.Trailer,
            HttpSysRequestHeader.TransferEncoding,
            HttpSysRequestHeader.Translate,
            HttpSysRequestHeader.Upgrade,
            HttpSysRequestHeader.UserAgent,
            HttpSysRequestHeader.Via,
            HttpSysRequestHeader.Warning,
        ];

        private string GetHeaderKeyName(HttpSysRequestHeader header) => header switch
        {
            HttpSysRequestHeader.Accept => HeaderNames.Accept,
            HttpSysRequestHeader.AcceptCharset => HeaderNames.AcceptCharset,
            HttpSysRequestHeader.AcceptEncoding => HeaderNames.AcceptEncoding,
            HttpSysRequestHeader.AcceptLanguage => HeaderNames.AcceptLanguage,
            HttpSysRequestHeader.Allow => HeaderNames.Allow,
            HttpSysRequestHeader.Authorization => HeaderNames.Authorization,
            HttpSysRequestHeader.CacheControl => HeaderNames.CacheControl,
            HttpSysRequestHeader.Connection => HeaderNames.Connection,
            HttpSysRequestHeader.ContentEncoding => HeaderNames.ContentEncoding,
            HttpSysRequestHeader.ContentLanguage => HeaderNames.ContentLanguage,
            HttpSysRequestHeader.ContentLength => HeaderNames.ContentLength,
            HttpSysRequestHeader.ContentLocation => HeaderNames.ContentLocation,
            HttpSysRequestHeader.ContentMd5 => HeaderNames.ContentMD5,
            HttpSysRequestHeader.ContentRange => HeaderNames.ContentRange,
            HttpSysRequestHeader.ContentType => HeaderNames.ContentType,
            HttpSysRequestHeader.Cookie => HeaderNames.Cookie,
            HttpSysRequestHeader.Date => HeaderNames.Date,
            HttpSysRequestHeader.Expect => HeaderNames.Expect,
            HttpSysRequestHeader.Expires => HeaderNames.Expires,
            HttpSysRequestHeader.From => HeaderNames.From,
            HttpSysRequestHeader.Host => HeaderNames.Host,
            HttpSysRequestHeader.IfMatch => HeaderNames.IfMatch,
            HttpSysRequestHeader.IfModifiedSince => HeaderNames.IfModifiedSince,
            HttpSysRequestHeader.IfNoneMatch => HeaderNames.IfNoneMatch,
            HttpSysRequestHeader.IfRange => HeaderNames.IfRange,
            HttpSysRequestHeader.IfUnmodifiedSince => HeaderNames.IfUnmodifiedSince,
            HttpSysRequestHeader.KeepAlive => HeaderNames.KeepAlive,
            HttpSysRequestHeader.LastModified => HeaderNames.LastModified,
            HttpSysRequestHeader.MaxForwards => HeaderNames.MaxForwards,
            HttpSysRequestHeader.Pragma => HeaderNames.Pragma,
            HttpSysRequestHeader.ProxyAuthorization => HeaderNames.ProxyAuthorization,
            HttpSysRequestHeader.Range => HeaderNames.Range,
            HttpSysRequestHeader.Referer => HeaderNames.Referer,
            HttpSysRequestHeader.Te => HeaderNames.TE,
            HttpSysRequestHeader.Trailer => HeaderNames.Trailer,
            HttpSysRequestHeader.TransferEncoding => HeaderNames.TransferEncoding,
            HttpSysRequestHeader.Translate => HeaderNames.Translate,
            HttpSysRequestHeader.Upgrade => HeaderNames.Upgrade,
            HttpSysRequestHeader.UserAgent => HeaderNames.UserAgent,
            HttpSysRequestHeader.Via => HeaderNames.Via,
            HttpSysRequestHeader.Warning => HeaderNames.Warning,
            _ => throw new NotImplementedException()
        };

        private bool HasKnownHeader(HttpSysRequestHeader header) => header switch
        {
            HttpSysRequestHeader.Accept => (_flag0 & 0x1u) != 0 ? _Accept.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Accept),
            HttpSysRequestHeader.AcceptCharset => (_flag0 & 0x2u) != 0 ? _AcceptCharset.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.AcceptCharset),
            HttpSysRequestHeader.AcceptEncoding => (_flag0 & 0x4u) != 0 ? _AcceptEncoding.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.AcceptEncoding),
            HttpSysRequestHeader.AcceptLanguage => (_flag0 & 0x8u) != 0 ? _AcceptLanguage.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.AcceptLanguage),
            HttpSysRequestHeader.Allow => (_flag0 & 0x10u) != 0 ? _Allow.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Allow),
            HttpSysRequestHeader.Authorization => (_flag0 & 0x20u) != 0 ? _Authorization.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Authorization),
            HttpSysRequestHeader.CacheControl => (_flag0 & 0x40u) != 0 ? _CacheControl.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.CacheControl),
            HttpSysRequestHeader.Connection => (_flag0 & 0x80u) != 0 ? _Connection.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Connection),
            HttpSysRequestHeader.ContentEncoding => (_flag0 & 0x100u) != 0 ? _ContentEncoding.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.ContentEncoding),
            HttpSysRequestHeader.ContentLanguage => (_flag0 & 0x200u) != 0 ? _ContentLanguage.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.ContentLanguage),
            HttpSysRequestHeader.ContentLength => (_flag0 & 0x400u) != 0 ? _ContentLength.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.ContentLength),
            HttpSysRequestHeader.ContentLocation => (_flag0 & 0x800u) != 0 ? _ContentLocation.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.ContentLocation),
            HttpSysRequestHeader.ContentMd5 => (_flag0 & 0x1000u) != 0 ? _ContentMD5.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.ContentMd5),
            HttpSysRequestHeader.ContentRange => (_flag0 & 0x2000u) != 0 ? _ContentRange.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.ContentRange),
            HttpSysRequestHeader.ContentType => (_flag0 & 0x4000u) != 0 ? _ContentType.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.ContentType),
            HttpSysRequestHeader.Cookie => (_flag0 & 0x8000u) != 0 ? _Cookie.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Cookie),
            HttpSysRequestHeader.Date => (_flag0 & 0x10000u) != 0 ? _Date.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Date),
            HttpSysRequestHeader.Expect => (_flag0 & 0x20000u) != 0 ? _Expect.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Expect),
            HttpSysRequestHeader.Expires => (_flag0 & 0x40000u) != 0 ? _Expires.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Expires),
            HttpSysRequestHeader.From => (_flag0 & 0x80000u) != 0 ? _From.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.From),
            HttpSysRequestHeader.Host => (_flag0 & 0x100000u) != 0 ? _Host.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Host),
            HttpSysRequestHeader.IfMatch => (_flag0 & 0x200000u) != 0 ? _IfMatch.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.IfMatch),
            HttpSysRequestHeader.IfModifiedSince => (_flag0 & 0x400000u) != 0 ? _IfModifiedSince.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.IfModifiedSince),
            HttpSysRequestHeader.IfNoneMatch => (_flag0 & 0x800000u) != 0 ? _IfNoneMatch.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.IfNoneMatch),
            HttpSysRequestHeader.IfRange => (_flag0 & 0x1000000u) != 0 ? _IfRange.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.IfRange),
            HttpSysRequestHeader.IfUnmodifiedSince => (_flag0 & 0x2000000u) != 0 ? _IfUnmodifiedSince.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.IfUnmodifiedSince),
            HttpSysRequestHeader.KeepAlive => (_flag0 & 0x4000000u) != 0 ? _KeepAlive.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.KeepAlive),
            HttpSysRequestHeader.LastModified => (_flag0 & 0x8000000u) != 0 ? _LastModified.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.LastModified),
            HttpSysRequestHeader.MaxForwards => (_flag0 & 0x10000000u) != 0 ? _MaxForwards.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.MaxForwards),
            HttpSysRequestHeader.Pragma => (_flag0 & 0x20000000u) != 0 ? _Pragma.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Pragma),
            HttpSysRequestHeader.ProxyAuthorization => (_flag0 & 0x40000000u) != 0 ? _ProxyAuthorization.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.ProxyAuthorization),
            HttpSysRequestHeader.Range => (_flag0 & 0x80000000u) != 0 ? _Range.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Range),
            HttpSysRequestHeader.Referer => (_flag1 & 0x1u) != 0 ? _Referer.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Referer),
            HttpSysRequestHeader.Te => (_flag1 & 0x2u) != 0 ? _TE.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Te),
            HttpSysRequestHeader.Trailer => (_flag1 & 0x4u) != 0 ? _Trailer.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Trailer),
            HttpSysRequestHeader.TransferEncoding => (_flag1 & 0x8u) != 0 ? _TransferEncoding.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.TransferEncoding),
            HttpSysRequestHeader.Translate => (_flag1 & 0x10u) != 0 ? _Translate.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Translate),
            HttpSysRequestHeader.Upgrade => (_flag1 & 0x20u) != 0 ? _Upgrade.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Upgrade),
            HttpSysRequestHeader.UserAgent => (_flag1 & 0x40u) != 0 ? _UserAgent.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.UserAgent),
            HttpSysRequestHeader.Via => (_flag1 & 0x80u) != 0 ? _Via.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Via),
            HttpSysRequestHeader.Warning => (_flag1 & 0x100u) != 0 ? _Warning.Count > 0 : _requestMemoryBlob.HasKnownHeader(HttpSysRequestHeader.Warning),
            _ => throw new NotImplementedException()
        };
    }
}
