# Generated by the pRPC protocol buffer compiler plugin.  DO NOT EDIT!
# source: api/api_proto/sitewide.proto

import base64
import zlib

from google.protobuf import descriptor_pb2

# Includes description of the api/api_proto/sitewide.proto and all of its transitive
# dependencies. Includes source code info.
FILE_DESCRIPTOR_SET = descriptor_pb2.FileDescriptorSet()
FILE_DESCRIPTOR_SET.ParseFromString(zlib.decompress(base64.b64decode(
    'eJx9lFFP20gQgFkbwmYJdDApSQ2UbSSgPYm4hHuoWumklqNVUa+cEk6q7iVykk1ineNNvRsKL/'
    '1X9z/uB9z7/Yd76njtGNOWPkTa+XZ2Zr61HfbPKtv2p4GHv+40llp6KtDiUzAQTRM6dCIjGftB'
    '2DhjG20xjIUaX8i/RNQWH2dCaafKlnQS1y1OHpfbaeDsMGYW3amvx3XbbJUN+R1B4wOr3q6lpj'
    'JS4qYYKRb7ia2nxcTVNMBDXSX6pt1q+57ZOE15R/Qbdbb5RuiOiC9F3NG+nqls0MZnVvtmJ2u7'
    'x9Z6fhSJuDsRSvkjkfVfTelvKXR22UqWpoOJMBMst1mKLpA4W6wcC3/QlVF4baRpmybgHOPW34'
    'TRTna5zjmrFC/A2WnO77n5nUt2H961nQo0FpwP7N5Xdg6/OfT9K3Ef/SBjXvnVkz8PgmgY+948'
    '97Ll3XplXsw3zv6njMISLMATIOw/QismcFr/En4ip9dxMBpr3np69IxfjAU/GcdyEswm/OVMj2'
    'WsmvxlGHKTpDg6JuMMmoz/oQSXQ67HgeJKzuK+4H05EBzDkcSJIzHgvWvu81edXw+Vvg4F42HQ'
    'Fzg+HvI17/sR7wk+lLNowIMIoeDv3p6cvu+c8mEQYvWY+5rxsdZT9dzzBuJShHIqcKSRlKNQNP'
    'ty4iGIDtP+XlZeeT01YIxSC5ZRdB1XFMq4+iWBdCVbV2iJLsAKrtfwXkxECcYUgK2ZyML9Clhw'
    'xmAeY0YFSuAUiIWkCgcFYiNpweu8CoFVrNLJM4ghJbhfIBaSGhwWiI3kGZyzPbqIczg4530gbo'
    '2/F1ea+5f4ZP0e3pL2R8/5zwwFFs14DgpsYevFTGADW29g2SymS4bQAiFIyrBWIDaSdZScVyEo'
    'aEE9zyBYpXqrCjE55UKnRKAKm1AzAgQeoMD2nQLHqQAxiRS2TWtiBNxcgGQCbt6aZAJuLkAyAT'
    'cXIEZgC8/s5hmJwNatKsTklMEtEBvJDjw0AhZwFHh0p8BRKpC04iiQHrJhL/3sfvzYbDy0h4d2'
    'zby2sd7H6bbNLHZmvZ/Pa2fW+zhvrUBsJG728G0zygGecfOMxDoh5QJJcph5E+fERlKHB3kVCx'
    '7jmZsMC6skpFQgBMkyfjc3xEayAdVeyfwZHX8BAsRanA==')))
_INDEX = {
    f.name: {
      'descriptor': f,
      'services': {s.name: s for s in f.service},
    }
    for f in FILE_DESCRIPTOR_SET.file
}


SitewideServiceDescription = {
  'file_descriptor_set': FILE_DESCRIPTOR_SET,
  'file_descriptor': _INDEX[u'api/api_proto/sitewide.proto']['descriptor'],
  'service_descriptor': _INDEX[u'api/api_proto/sitewide.proto']['services'][u'Sitewide'],
}
