/* C++ code produced by gperf version 3.0.4 */
/* Command-line: /usr/bin/gperf --key-positions='*' -D -n -s 2 --output-file=HTTPHeaderNames.cpp HTTPHeaderNames.gperf  */

#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
/* The character set is not based on ISO-646.  */
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
#endif

#line 2 "HTTPHeaderNames.gperf"

/*
 * Copyright (C) 2014 Apple Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */

/// This file is generated by create-http-header-name-table, do not edit.

#include "config.h"
#include "HTTPHeaderNames.h"

#include <wtf/text/StringView.h>

#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wdeprecated-register"
#pragma clang diagnostic ignored "-Wimplicit-fallthrough"
#endif

namespace WebCore {

static const struct HeaderNameString {
    const char* const name;
    unsigned length;
} headerNameStrings[] = {
    { "Accept", 6 },
    { "Accept-Charset", 14 },
    { "Accept-Encoding", 15 },
    { "Accept-Language", 15 },
    { "Accept-Ranges", 13 },
    { "Access-Control-Allow-Credentials", 32 },
    { "Access-Control-Allow-Headers", 28 },
    { "Access-Control-Allow-Methods", 28 },
    { "Access-Control-Allow-Origin", 27 },
    { "Access-Control-Expose-Headers", 29 },
    { "Access-Control-Max-Age", 22 },
    { "Access-Control-Request-Headers", 30 },
    { "Access-Control-Request-Method", 29 },
    { "Age", 3 },
    { "Alternate-Protocol", 18 },
    { "Authorization", 13 },
    { "Cache-Control", 13 },
    { "Connection", 10 },
    { "Content-Disposition", 19 },
    { "Content-Encoding", 16 },
    { "Content-Language", 16 },
    { "Content-Length", 14 },
    { "Content-Range", 13 },
    { "Content-Security-Policy", 23 },
    { "Content-Security-Policy-Report-Only", 35 },
    { "Content-Transfer-Encoding", 25 },
    { "Content-Type", 12 },
    { "Cookie", 6 },
    { "Cookie2", 7 },
    { "DNT", 3 },
    { "Date", 4 },
    { "Default-Style", 13 },
    { "ETag", 4 },
    { "Expect", 6 },
    { "Expires", 7 },
    { "Host", 4 },
    { "Icy-Genre", 9 },
    { "Icy-MetaInt", 11 },
    { "Icy-Metadata", 12 },
    { "Icy-Name", 8 },
    { "Icy-Title", 9 },
    { "Icy-URL", 7 },
    { "If-Match", 8 },
    { "If-Modified-Since", 17 },
    { "If-None-Match", 13 },
    { "If-Range", 8 },
    { "If-Unmodified-Since", 19 },
    { "Keep-Alive", 10 },
    { "Last-Event-ID", 13 },
    { "Last-Modified", 13 },
    { "Location", 8 },
    { "Origin", 6 },
    { "Ping-From", 9 },
    { "Ping-To", 7 },
    { "Pragma", 6 },
    { "Purpose", 7 },
    { "Range", 5 },
    { "Referer", 7 },
    { "Refresh", 7 },
    { "Sec-WebSocket-Accept", 20 },
    { "Sec-WebSocket-Extensions", 24 },
    { "Sec-WebSocket-Key", 17 },
    { "Sec-WebSocket-Protocol", 22 },
    { "Sec-WebSocket-Version", 21 },
    { "Server", 6 },
    { "Set-Cookie", 10 },
    { "Set-Cookie2", 11 },
    { "TE", 2 },
    { "Timing-Allow-Origin", 19 },
    { "Trailer", 7 },
    { "Transfer-Encoding", 17 },
    { "Upgrade", 7 },
    { "Upgrade-Insecure-Requests", 25 },
    { "User-Agent", 10 },
    { "Vary", 4 },
    { "Via", 3 },
    { "X-Check-Cacheable", 17 },
    { "X-Content-Type-Options", 22 },
    { "X-DNS-Prefetch-Control", 22 },
    { "X-Frame-Options", 15 },
    { "X-Powered-By", 12 },
    { "X-WebKit-CSP", 12 },
    { "X-WebKit-CSP-Report-Only", 24 },
    { "X-XSS-Protection", 16 },
};


#line 143 "HTTPHeaderNames.gperf"
struct HeaderNameHashEntry {
    const char* name;
    HTTPHeaderName headerName;
};
enum
  {
    TOTAL_KEYWORDS = 84,
    MIN_WORD_LENGTH = 2,
    MAX_WORD_LENGTH = 35,
    MIN_HASH_VALUE = 4,
    MAX_HASH_VALUE = 860
  };

/* maximum key range = 857, duplicates = 0 */

#ifndef GPERF_DOWNCASE
#define GPERF_DOWNCASE 1
static unsigned char gperf_downcase[256] =
  {
      0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
     15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
     30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,
     45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,
     60,  61,  62,  63,  64,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106,
    107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
    122,  91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104,
    105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
    120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
    135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
    150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
    165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
    180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
    195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
    210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
    225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
    240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
    255
  };
#endif

#ifndef GPERF_CASE_STRNCMP
#define GPERF_CASE_STRNCMP 1
static int
gperf_case_strncmp (register const char *s1, register const char *s2, register unsigned int n)
{
  for (; n > 0;)
    {
      unsigned char c1 = gperf_downcase[(unsigned char)*s1++];
      unsigned char c2 = gperf_downcase[(unsigned char)*s2++];
      if (c1 != 0 && c1 == c2)
        {
          n--;
          continue;
        }
      return (int)c1 - (int)c2;
    }
  return 0;
}
#endif

class HTTPHeaderNamesHash
{
private:
  static inline unsigned int header_name_hash_function (const char *str, unsigned int len);
public:
  static const struct HeaderNameHashEntry *findHeaderNameImpl (const char *str, unsigned int len);
};

inline unsigned int
HTTPHeaderNamesHash::header_name_hash_function (register const char *str, register unsigned int len)
{
  static const unsigned short asso_values[] =
    {
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861,   0, 861, 861, 861, 861,
      105, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861,   0,  20,   0, 135,   0,
      135,  10, 155,   0, 861,  90,  45, 165,   5,   5,
       30,   5,   5,  65,   5,   0,   4,   0, 200,  20,
       30, 861, 861, 861, 861, 861, 861,   0,  20,   0,
      135,   0, 135,  10, 155,   0, 861,  90,  45, 165,
        5,   5,  30,   5,   5,  65,   5,   0,   4,   0,
      200,  20,  30, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861, 861, 861, 861, 861,
      861, 861, 861, 861, 861, 861
    };
  register int hval = 0;

  switch (len)
    {
      default:
        hval += asso_values[(unsigned char)str[34]];
      /*FALLTHROUGH*/
      case 34:
        hval += asso_values[(unsigned char)str[33]];
      /*FALLTHROUGH*/
      case 33:
        hval += asso_values[(unsigned char)str[32]];
      /*FALLTHROUGH*/
      case 32:
        hval += asso_values[(unsigned char)str[31]];
      /*FALLTHROUGH*/
      case 31:
        hval += asso_values[(unsigned char)str[30]];
      /*FALLTHROUGH*/
      case 30:
        hval += asso_values[(unsigned char)str[29]];
      /*FALLTHROUGH*/
      case 29:
        hval += asso_values[(unsigned char)str[28]];
      /*FALLTHROUGH*/
      case 28:
        hval += asso_values[(unsigned char)str[27]];
      /*FALLTHROUGH*/
      case 27:
        hval += asso_values[(unsigned char)str[26]];
      /*FALLTHROUGH*/
      case 26:
        hval += asso_values[(unsigned char)str[25]];
      /*FALLTHROUGH*/
      case 25:
        hval += asso_values[(unsigned char)str[24]];
      /*FALLTHROUGH*/
      case 24:
        hval += asso_values[(unsigned char)str[23]];
      /*FALLTHROUGH*/
      case 23:
        hval += asso_values[(unsigned char)str[22]];
      /*FALLTHROUGH*/
      case 22:
        hval += asso_values[(unsigned char)str[21]];
      /*FALLTHROUGH*/
      case 21:
        hval += asso_values[(unsigned char)str[20]];
      /*FALLTHROUGH*/
      case 20:
        hval += asso_values[(unsigned char)str[19]];
      /*FALLTHROUGH*/
      case 19:
        hval += asso_values[(unsigned char)str[18]];
      /*FALLTHROUGH*/
      case 18:
        hval += asso_values[(unsigned char)str[17]];
      /*FALLTHROUGH*/
      case 17:
        hval += asso_values[(unsigned char)str[16]];
      /*FALLTHROUGH*/
      case 16:
        hval += asso_values[(unsigned char)str[15]];
      /*FALLTHROUGH*/
      case 15:
        hval += asso_values[(unsigned char)str[14]];
      /*FALLTHROUGH*/
      case 14:
        hval += asso_values[(unsigned char)str[13]];
      /*FALLTHROUGH*/
      case 13:
        hval += asso_values[(unsigned char)str[12]];
      /*FALLTHROUGH*/
      case 12:
        hval += asso_values[(unsigned char)str[11]];
      /*FALLTHROUGH*/
      case 11:
        hval += asso_values[(unsigned char)str[10]];
      /*FALLTHROUGH*/
      case 10:
        hval += asso_values[(unsigned char)str[9]];
      /*FALLTHROUGH*/
      case 9:
        hval += asso_values[(unsigned char)str[8]];
      /*FALLTHROUGH*/
      case 8:
        hval += asso_values[(unsigned char)str[7]];
      /*FALLTHROUGH*/
      case 7:
        hval += asso_values[(unsigned char)str[6]];
      /*FALLTHROUGH*/
      case 6:
        hval += asso_values[(unsigned char)str[5]];
      /*FALLTHROUGH*/
      case 5:
        hval += asso_values[(unsigned char)str[4]];
      /*FALLTHROUGH*/
      case 4:
        hval += asso_values[(unsigned char)str[3]];
      /*FALLTHROUGH*/
      case 3:
        hval += asso_values[(unsigned char)str[2]];
      /*FALLTHROUGH*/
      case 2:
        hval += asso_values[(unsigned char)str[1]];
      /*FALLTHROUGH*/
      case 1:
        hval += asso_values[(unsigned char)str[0]];
        break;
    }
  return hval;
}

static const struct HeaderNameHashEntry header_name_wordlist[] =
  {
#line 228 "HTTPHeaderNames.gperf"
    {"Via", HTTPHeaderName::Via},
#line 220 "HTTPHeaderNames.gperf"
    {"TE", HTTPHeaderName::TE},
#line 166 "HTTPHeaderNames.gperf"
    {"Age", HTTPHeaderName::Age},
#line 185 "HTTPHeaderNames.gperf"
    {"ETag", HTTPHeaderName::ETag},
#line 209 "HTTPHeaderNames.gperf"
    {"Range", HTTPHeaderName::Range},
#line 204 "HTTPHeaderNames.gperf"
    {"Origin", HTTPHeaderName::Origin},
#line 227 "HTTPHeaderNames.gperf"
    {"Vary", HTTPHeaderName::Vary},
#line 170 "HTTPHeaderNames.gperf"
    {"Connection", HTTPHeaderName::Connection},
#line 153 "HTTPHeaderNames.gperf"
    {"Accept", HTTPHeaderName::Accept},
#line 189 "HTTPHeaderNames.gperf"
    {"Icy-Genre", HTTPHeaderName::IcyGenre},
#line 175 "HTTPHeaderNames.gperf"
    {"Content-Range", HTTPHeaderName::ContentRange},
#line 206 "HTTPHeaderNames.gperf"
    {"Ping-To", HTTPHeaderName::PingTo},
#line 222 "HTTPHeaderNames.gperf"
    {"Trailer", HTTPHeaderName::Trailer},
#line 203 "HTTPHeaderNames.gperf"
    {"Location", HTTPHeaderName::Location},
#line 194 "HTTPHeaderNames.gperf"
    {"Icy-URL", HTTPHeaderName::IcyURL},
#line 193 "HTTPHeaderNames.gperf"
    {"Icy-Title", HTTPHeaderName::IcyTitle},
#line 217 "HTTPHeaderNames.gperf"
    {"Server", HTTPHeaderName::Server},
#line 179 "HTTPHeaderNames.gperf"
    {"Content-Type", HTTPHeaderName::ContentType},
#line 226 "HTTPHeaderNames.gperf"
    {"User-Agent", HTTPHeaderName::UserAgent},
#line 173 "HTTPHeaderNames.gperf"
    {"Content-Language", HTTPHeaderName::ContentLanguage},
#line 180 "HTTPHeaderNames.gperf"
    {"Cookie", HTTPHeaderName::Cookie},
#line 156 "HTTPHeaderNames.gperf"
    {"Accept-Language", HTTPHeaderName::AcceptLanguage},
#line 157 "HTTPHeaderNames.gperf"
    {"Accept-Ranges", HTTPHeaderName::AcceptRanges},
#line 208 "HTTPHeaderNames.gperf"
    {"Purpose", HTTPHeaderName::Purpose},
#line 183 "HTTPHeaderNames.gperf"
    {"Date", HTTPHeaderName::Date},
#line 182 "HTTPHeaderNames.gperf"
    {"DNT", HTTPHeaderName::DNT},
#line 210 "HTTPHeaderNames.gperf"
    {"Referer", HTTPHeaderName::Referer},
#line 198 "HTTPHeaderNames.gperf"
    {"If-Range", HTTPHeaderName::IfRange},
#line 167 "HTTPHeaderNames.gperf"
    {"Alternate-Protocol", HTTPHeaderName::AlternateProtocol},
#line 200 "HTTPHeaderNames.gperf"
    {"Keep-Alive", HTTPHeaderName::KeepAlive},
#line 218 "HTTPHeaderNames.gperf"
    {"Set-Cookie", HTTPHeaderName::SetCookie},
#line 224 "HTTPHeaderNames.gperf"
    {"Upgrade", HTTPHeaderName::Upgrade},
#line 172 "HTTPHeaderNames.gperf"
    {"Content-Encoding", HTTPHeaderName::ContentEncoding},
#line 192 "HTTPHeaderNames.gperf"
    {"Icy-Name", HTTPHeaderName::IcyName},
#line 155 "HTTPHeaderNames.gperf"
    {"Accept-Encoding", HTTPHeaderName::AcceptEncoding},
#line 190 "HTTPHeaderNames.gperf"
    {"Icy-MetaInt", HTTPHeaderName::IcyMetaInt},
#line 181 "HTTPHeaderNames.gperf"
    {"Cookie2", HTTPHeaderName::Cookie2},
#line 207 "HTTPHeaderNames.gperf"
    {"Pragma", HTTPHeaderName::Pragma},
#line 168 "HTTPHeaderNames.gperf"
    {"Authorization", HTTPHeaderName::Authorization},
#line 176 "HTTPHeaderNames.gperf"
    {"Content-Security-Policy", HTTPHeaderName::ContentSecurityPolicy},
#line 169 "HTTPHeaderNames.gperf"
    {"Cache-Control", HTTPHeaderName::CacheControl},
#line 188 "HTTPHeaderNames.gperf"
    {"Host", HTTPHeaderName::Host},
#line 186 "HTTPHeaderNames.gperf"
    {"Expect", HTTPHeaderName::Expect},
#line 174 "HTTPHeaderNames.gperf"
    {"Content-Length", HTTPHeaderName::ContentLength},
#line 201 "HTTPHeaderNames.gperf"
    {"Last-Event-ID", HTTPHeaderName::LastEventID},
#line 154 "HTTPHeaderNames.gperf"
    {"Accept-Charset", HTTPHeaderName::AcceptCharset},
#line 219 "HTTPHeaderNames.gperf"
    {"Set-Cookie2", HTTPHeaderName::SetCookie2},
#line 212 "HTTPHeaderNames.gperf"
    {"Sec-WebSocket-Accept", HTTPHeaderName::SecWebSocketAccept},
#line 187 "HTTPHeaderNames.gperf"
    {"Expires", HTTPHeaderName::Expires},
#line 221 "HTTPHeaderNames.gperf"
    {"Timing-Allow-Origin", HTTPHeaderName::TimingAllowOrigin},
#line 161 "HTTPHeaderNames.gperf"
    {"Access-Control-Allow-Origin", HTTPHeaderName::AccessControlAllowOrigin},
#line 191 "HTTPHeaderNames.gperf"
    {"Icy-Metadata", HTTPHeaderName::IcyMetadata},
#line 216 "HTTPHeaderNames.gperf"
    {"Sec-WebSocket-Version", HTTPHeaderName::SecWebSocketVersion},
#line 171 "HTTPHeaderNames.gperf"
    {"Content-Disposition", HTTPHeaderName::ContentDisposition},
#line 177 "HTTPHeaderNames.gperf"
    {"Content-Security-Policy-Report-Only", HTTPHeaderName::ContentSecurityPolicyReportOnly},
#line 215 "HTTPHeaderNames.gperf"
    {"Sec-WebSocket-Protocol", HTTPHeaderName::SecWebSocketProtocol},
#line 205 "HTTPHeaderNames.gperf"
    {"Ping-From", HTTPHeaderName::PingFrom},
#line 214 "HTTPHeaderNames.gperf"
    {"Sec-WebSocket-Key", HTTPHeaderName::SecWebSocketKey},
#line 211 "HTTPHeaderNames.gperf"
    {"Refresh", HTTPHeaderName::Refresh},
#line 223 "HTTPHeaderNames.gperf"
    {"Transfer-Encoding", HTTPHeaderName::TransferEncoding},
#line 230 "HTTPHeaderNames.gperf"
    {"X-Content-Type-Options", HTTPHeaderName::XContentTypeOptions},
#line 225 "HTTPHeaderNames.gperf"
    {"Upgrade-Insecure-Requests", HTTPHeaderName::UpgradeInsecureRequests},
#line 178 "HTTPHeaderNames.gperf"
    {"Content-Transfer-Encoding", HTTPHeaderName::ContentTransferEncoding},
#line 234 "HTTPHeaderNames.gperf"
    {"X-WebKit-CSP", HTTPHeaderName::XWebKitCSP},
#line 233 "HTTPHeaderNames.gperf"
    {"X-Powered-By", HTTPHeaderName::XPoweredBy},
#line 184 "HTTPHeaderNames.gperf"
    {"Default-Style", HTTPHeaderName::DefaultStyle},
#line 195 "HTTPHeaderNames.gperf"
    {"If-Match", HTTPHeaderName::IfMatch},
#line 197 "HTTPHeaderNames.gperf"
    {"If-None-Match", HTTPHeaderName::IfNoneMatch},
#line 235 "HTTPHeaderNames.gperf"
    {"X-WebKit-CSP-Report-Only", HTTPHeaderName::XWebKitCSPReportOnly},
#line 158 "HTTPHeaderNames.gperf"
    {"Access-Control-Allow-Credentials", HTTPHeaderName::AccessControlAllowCredentials},
#line 163 "HTTPHeaderNames.gperf"
    {"Access-Control-Max-Age", HTTPHeaderName::AccessControlMaxAge},
#line 236 "HTTPHeaderNames.gperf"
    {"X-XSS-Protection", HTTPHeaderName::XXSSProtection},
#line 213 "HTTPHeaderNames.gperf"
    {"Sec-WebSocket-Extensions", HTTPHeaderName::SecWebSocketExtensions},
#line 232 "HTTPHeaderNames.gperf"
    {"X-Frame-Options", HTTPHeaderName::XFrameOptions},
#line 164 "HTTPHeaderNames.gperf"
    {"Access-Control-Request-Headers", HTTPHeaderName::AccessControlRequestHeaders},
#line 159 "HTTPHeaderNames.gperf"
    {"Access-Control-Allow-Headers", HTTPHeaderName::AccessControlAllowHeaders},
#line 229 "HTTPHeaderNames.gperf"
    {"X-Check-Cacheable", HTTPHeaderName::XCheckCacheable},
#line 202 "HTTPHeaderNames.gperf"
    {"Last-Modified", HTTPHeaderName::LastModified},
#line 165 "HTTPHeaderNames.gperf"
    {"Access-Control-Request-Method", HTTPHeaderName::AccessControlRequestMethod},
#line 196 "HTTPHeaderNames.gperf"
    {"If-Modified-Since", HTTPHeaderName::IfModifiedSince},
#line 199 "HTTPHeaderNames.gperf"
    {"If-Unmodified-Since", HTTPHeaderName::IfUnmodifiedSince},
#line 231 "HTTPHeaderNames.gperf"
    {"X-DNS-Prefetch-Control", HTTPHeaderName::XDNSPrefetchControl},
#line 160 "HTTPHeaderNames.gperf"
    {"Access-Control-Allow-Methods", HTTPHeaderName::AccessControlAllowMethods},
#line 162 "HTTPHeaderNames.gperf"
    {"Access-Control-Expose-Headers", HTTPHeaderName::AccessControlExposeHeaders}
  };

static const signed char lookup[] =
  {
    -1, -1, -1, -1,  0,  1, -1, -1, -1, -1,  2, -1, -1, -1,
    -1,  3, -1, -1, -1, -1,  4, -1, -1, -1, -1,  5, -1, -1,
    -1,  6,  7, -1, -1, -1, -1,  8, -1, -1, -1, -1,  9, -1,
    -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11,
    -1, -1, -1, -1, 12, -1, -1, -1, -1, 13, -1, -1, -1, -1,
    14, -1, -1, -1, -1, 15, -1, -1, -1, 16, 17, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, 18, -1, -1, -1, -1, 19, -1, -1,
    -1, -1, 20, -1, -1, -1, -1, 21, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, -1, -1,
    24, -1, -1, -1, -1, 25, -1, -1, -1, -1, 26, -1, -1, -1,
    -1, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, 28, -1, -1,
    -1, 29, 30, -1, -1, -1, -1, -1, -1, -1, -1, -1, 31, -1,
    -1, -1, -1, 32, -1, -1, -1, -1, 33, -1, -1, -1, -1, 34,
    -1, -1, -1, -1, 35, -1, -1, -1, -1, 36, -1, -1, -1, -1,
    37, -1, -1, -1, -1, 38, -1, -1, -1, -1, 39, -1, -1, -1,
    -1, 40, -1, -1, -1, -1, 41, -1, -1, -1, -1, 42, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, 43, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, 45,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, 46, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, 48, -1, -1, -1, -1, 49, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 50, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, 51, -1, -1, -1, 52, -1,
    -1, -1, -1, -1, 53, -1, -1, -1, -1, 54, -1, -1, -1, -1,
    55, -1, -1, -1, -1, 56, -1, -1, -1, -1, 57, -1, -1, -1,
    -1, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, 60, -1, -1, -1, -1, 61, -1, -1, -1, -1, 62,
    -1, -1, -1, -1, 63, -1, -1, -1, -1, 64, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, 66, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 67,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, 69, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 74, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, 77, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, 78, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 79, -1, -1, -1,
    -1, 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 82,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, 83
  };

const struct HeaderNameHashEntry *
HTTPHeaderNamesHash::findHeaderNameImpl (register const char *str, register unsigned int len)
{
  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
    {
      register int key = header_name_hash_function (str, len);

      if (key <= MAX_HASH_VALUE && key >= 0)
        {
          register int index = lookup[key];

          if (index >= 0)
            {
              register const char *s = header_name_wordlist[index].name;

              if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strncmp (str, s, len) && s[len] == '\0')
                return &header_name_wordlist[index];
            }
        }
    }
  return 0;
}
#line 237 "HTTPHeaderNames.gperf"

bool findHTTPHeaderName(StringView stringView, HTTPHeaderName& headerName)
{
    unsigned length = stringView.length();
    if (length > maxHTTPHeaderNameLength || length < minHTTPHeaderNameLength)
        return false;

    if (stringView.is8Bit()) {
        if (auto nameAndString = HTTPHeaderNamesHash::findHeaderNameImpl(reinterpret_cast<const char*>(stringView.characters8()), length)) {
            headerName = nameAndString->headerName;
            return true;
        }
    } else {
        LChar characters[maxHTTPHeaderNameLength];
        for (unsigned i = 0; i < length; ++i) {
            UChar character = stringView.characters16()[i];
            if (!isASCII(character))
                return false;
                
            characters[i] = static_cast<LChar>(character);
        }
        
        if (auto nameAndString = HTTPHeaderNamesHash::findHeaderNameImpl(reinterpret_cast<const char*>(characters), length)) {
            headerName = nameAndString->headerName;
            return true;
        }
    }

    return false;
}

StringView httpHeaderNameString(HTTPHeaderName headerName)
{
    ASSERT(static_cast<unsigned>(headerName) < numHTTPHeaderNames);
    
    const auto& name = headerNameStrings[static_cast<unsigned>(headerName)];
    
    return StringView { reinterpret_cast<const LChar*>(name.name), static_cast<unsigned>(name.length) };
}

} // namespace WebCore

#if defined(__clang__)
#pragma clang diagnostic pop
#endif
