zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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
U
£ý°dĖã@sdZdZddlZddlZddlmZddlmZddlmZddlm    Z    e    j
Z dd    „Z d
d „Z e d eƒZe d eƒZe deƒZe deƒZdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdHdd„ZeejeƒZeejeƒZeejeƒZeejeƒZeejeejƒZ eejeejƒZ!eej"dƒZ#eej$d ƒZ%eej"d!ƒZ&eej$d"ƒZ'eƒZ(eƒZ)eejee*ƒZ+dId#d$„Z,dJd%d&„Z-d'd(„Z.d)d*„Z/e 0d+ej1¡Z2d,d-„Z3d.d/„Z4d0d1„Z5d2d3„Z6d4d5„Z7d6d7„Z8d8d9„Z9dKd:d;„Z:d<d=„Z;d>d?„Z<d@dA„Z=dBdC„Z>dDdE„Z?dFdG„Z@e@ƒZAdS)LaÏ    Code for decoding protocol buffer primitives.
 
This code is very similar to encoder.py -- read the docs for that module first.
 
A "decoder" is a function with the signature:
  Decode(buffer, pos, end, message, field_dict)
The arguments are:
  buffer:     The string containing the encoded message.
  pos:        The current position in the string.
  end:        The position in the string where the current message ends.  May be
              less than len(buffer) if we're reading a sub-message.
  message:    The message object into which we're parsing.
  field_dict: message._fields (avoids a hashtable lookup).
The decoder reads the field and stores it into field_dict, returning the new
buffer position.  A decoder for a repeated field may proactively decode all of
the elements of that field, if they appear consecutively.
 
Note that decoders may throw any of the following:
  IndexError:  Indicates a truncated message.
  struct.error:  Unpacking of a fixed-width field failed.
  message.DecodeError:  Other errors.
 
Decoders are expected to raise an exception if they are called with pos > end.
This allows callers to be lax about bounds checking:  it's fineto read past
"end" as long as you are sure that someone else will notice and throw an
exception later on.
 
Something up the call stack is expected to catch IndexError and struct.error
and convert them to message.DecodeError.
 
Decoders are constructed using decoder constructors with the signature:
  MakeDecoder(field_number, is_repeated, is_packed, key, new_default)
The arguments are:
  field_number:  The field number of the field we want to decode.
  is_repeated:   Is the field a repeated field? (bool)
  is_packed:     Is the field a packed field? (bool)
  key:           The key to use when looking up the field within field_dict.
                 (This is actually the FieldDescriptor but nothing in this
                 file should depend on that.)
  new_default:   A function which takes a message object as a parameter and
                 returns a new instance of the default value for this field.
                 (This is called for repeated fields and sub-messages, when an
                 instance does not already exist.)
 
As with encoders, we define a decoder constructor for every type of field.
Then, for every field of every message class we construct an actual decoder.
That decoder goes into a dict indexed by tag, so when we decode a message
we repeatedly read a tag, look up the corresponding decoder, and invoke it.
z kenton@google.com (Kenton Varda)éN)Ú
containers)Úencoder)Ú wire_format)Úmessagecs‡‡fdd„}|S)a¢Return an encoder for a basic varint value (does not include tag).
 
  Decoded values will be bitwise-anded with the given mask before being
  returned, e.g. to limit them to 32 bits.  The returned decoder does not
  take the usual "end" parameter -- the caller is expected to do bounds checking
  after the fact (often the caller can defer such checking until later).  The
  decoder returns a (value, new_pos) pair.
  csfd}d}||}||d@|>O}|d7}|d@sH|ˆM}ˆ|ƒ}||fS|d7}|dkrtdƒ‚qdS©Nrééé€éé@z$Too many bytes when decoding varint.©Ú _DecodeError©ÚbufferÚposÚresultÚshiftÚb©ÚmaskÚ result_type©úWd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\google/protobuf/internal/decoder.pyÚ DecodeVarintksz$_VarintDecoder.<locals>.DecodeVarintr)rrrrrrÚ_VarintDecoderas
rcs,d|d>‰d|>d‰‡‡‡fdd„}|S)z0Like _VarintDecoder() but decodes signed values.rcsrd}d}||}||d@|>O}|d7}|d@sT|ˆM}|ˆAˆ}ˆ|ƒ}||fS|d7}|dkrtdƒ‚qdSrr r©rrZsignbitrrr‚s z*_SignedVarintDecoder.<locals>.DecodeVarintr)ÚbitsrrrrrÚ_SignedVarintDecoder|s  rlÿÿÿÿr lÿÿé cCs:|}||d@r|d7}q|d7}|||… ¡}||fS)ažRead a tag from the memoryview, and return a (tag_bytes, new_pos) tuple.
 
  We return the raw bytes of the tag rather than decoding them.  The raw
  bytes can then be used to look up the proper decoder.  This effectively allows
  us to trade some work that would be done in pure-python (decoding a varint)
  for work that is done in C (searching for a byte string in a hash table).
  In a low-level language it would be much cheaper to decode the varint and
  use that, but not in Python.
 
  Args:
    buffer: memoryview object of the encoded bytes
    pos: int of the current position to start from
 
  Returns:
    Tuple[bytes, int] of the tag data and new position.
  r    r)Útobytes)rrÚstartÚ    tag_bytesrrrÚReadTagœs  
r"csd‡‡fdd„    }|S)zØReturn a constructor for a decoder for fields of a particular type.
 
  Args:
      wire_type:  The field's wire type.
      decode_value:  A function which decodes an individual value, e.g.
        _DecodeVarint()
  Fc    sf|rt‰‡‡‡‡fdd„}|S|rNt |ˆ¡‰tˆƒ‰‡‡‡‡‡fdd„}|S‡‡‡fdd„}|SdS)Ncs„| ˆ¡}|dkr"| ˆˆ|ƒ¡}ˆ||ƒ\}}||7}||krHtdƒ‚||krjˆ||ƒ\}}| |¡qH||kr€|d=tdƒ‚|S)NúTruncated message.éÿÿÿÿúPacked element was truncated.©ÚgetÚ
setdefaultr Úappend)rrÚendrÚ
field_dictÚvalueÚendpointÚelement)Ú decode_valueÚkeyÚlocal_DecodeVarintÚ new_defaultrrÚDecodePackedFieldÆs
 zB_SimpleDecoder.<locals>.SpecificDecoder.<locals>.DecodePackedFieldcst| ˆ¡}|dkr"| ˆˆ|ƒ¡}ˆ||ƒ\}}| |¡|ˆ}|||…ˆksZ||kr"||krjtdƒ‚|Sq"dS©Nr#)r'r(r)r ©rrr*rr+r,r.Únew_pos)r/r0r2r!Útag_lenrrÚDecodeRepeatedFieldÙs
 
zD_SimpleDecoder.<locals>.SpecificDecoder.<locals>.DecodeRepeatedFieldcs@ˆ||ƒ\}}||krtdƒ‚ˆr4|s4| ˆd¡n||ˆ<|Sr4©r Úpop)rrr*rr+Ú    new_value)Úclear_if_defaultr/r0rrÚ DecodeFieldêsz<_SimpleDecoder.<locals>.SpecificDecoder.<locals>.DecodeField)Ú _DecodeVarintrÚTagBytesÚlen©    Ú field_numberÚ is_repeatedÚ    is_packedr0r2r<r3r8r=©r/Ú    wire_type©r<r0r1r2r!r7rÚSpecificDecoderÂs     z'_SimpleDecoder.<locals>.SpecificDecoder)Fr)rFr/rHrrErÚ_SimpleDecoder¹s
ÿ3rIcs‡‡fdd„}t||ƒS)z†Like SimpleDecoder but additionally invokes modify_value on every value
  before storing it.  Usually modify_value is ZigZagDecode.
  csˆ||ƒ\}}ˆ|ƒ|fS)Nr)rrrr6©r/Ú modify_valuerrÚ InnerDecodesz%_ModifiedDecoder.<locals>.InnerDecode)rI)rFr/rKrLrrJrÚ_ModifiedDecoderøsrMcs*t ˆ¡‰tj‰‡‡‡fdd„}t||ƒS)z­Return a constructor for a decoder for a fixed-width field.
 
  Args:
      wire_type:  The field's wire type.
      format:  The format string to pass to struct.unpack().
  cs&|ˆ}ˆˆ|||…ƒd}||fS)Nrr)rrr6r©ÚformatÚ local_unpackZ
value_sizerrrLsz'_StructPackDecoder.<locals>.InnerDecode)ÚstructÚcalcsizeÚunpackrI)rFrOrLrrNrÚ_StructPackDecoders
    rTcstj‰‡fdd„}ttj|ƒS)z‡Returns a decoder for a float field.
 
  This code works around a bug in struct.unpack for non-finite 32-bit
  floating-point values.
  csŽ|d}|||… ¡}|dd…dkrx|dd…dkrx|dd…dkrRtj|fS|dd…dkrntj |fStj|fSˆd    |ƒd}||fS)
a#Decode serialized float to a float and new position.
 
    Args:
      buffer: memoryview of the serialized bytes
      pos: int, position in the memory view to start at.
 
    Returns:
      Tuple[float, int] of the deserialized float value and new position
      in the serialized data.
    ééóÿéó€rs€óÿz<f)rÚmathÚnanÚinf)rrr6Z float_bytesr©rPrrrL(s  
 
z"_FloatDecoder.<locals>.InnerDecode)rQrSrIrÚWIRETYPE_FIXED32©rLrr^rÚ _FloatDecoders !racstj‰‡fdd„}ttj|ƒS)zkReturns a decoder for a double field.
 
  This code works around a bug in struct.unpack for not-a-number.
  csh|d}|||… ¡}|dd…dkrR|dd…dkrR|dd…dkrRtj|fSˆd|ƒd}||fS)    a"Decode serialized double to a double and new position.
 
    Args:
      buffer: memoryview of the serialized bytes.
      pos: int, position in the memory view to start at.
 
    Returns:
      Tuple[float, int] of the decoded double value and new position
      in the serialized data.
    ér
rWéóðrsðz<d)rr[r\)rrr6Z double_bytesrr^rrrLTs ÿþ
z#_DoubleDecoder.<locals>.InnerDecode)rQrSrIrÚWIRETYPE_FIXED64r`rr^rÚ_DoubleDecoderLs rfFc    stˆj‰|r&t‰‡‡‡‡‡fdd„}|S|rZt ˆtj¡‰tˆƒ‰‡‡‡‡‡‡fdd„}|S‡‡‡‡fdd„}|SdS)z!Returns a decoder for enum field.c
s| ˆ¡}|dkr"| ˆˆ|ƒ¡}ˆ||ƒ\}}||7}||krHtdƒ‚||krÖ|}t||ƒ\}}|ˆjkrx| |¡qH|js„g|_t ˆt    j
¡}    |j |    |||…  ¡f¡|j dkrÂt  ¡|_ |j  ˆt    j
|¡qH||kr |ˆjkrò|d=n|jd=|j jd=tdƒ‚|S)a±Decode serialized packed enum to its value and a new position.
 
      Args:
        buffer: memoryview of the serialized bytes.
        pos: int, position in the memory view to start at.
        end: int, end position of serialized data
        message: Message object to store unknown fields in
        field_dict: Map[Descriptor, Any] to store decoded values in.
 
      Returns:
        int, new position in serialized data.
      Nr#r$r%)r'r(r Ú_DecodeSignedVarint32Úvalues_by_numberr)Ú_unknown_fieldsrr?rÚWIRETYPE_VARINTrÚ_unknown_field_setrÚUnknownFieldSetÚ_addZ_values)
rrr*rr+r,r-Úvalue_start_posr.r!)Ú    enum_typerBr0r1r2rrr3zsD
 
 ÿÿ
 
ÿ
 
 
z&EnumDecoder.<locals>.DecodePackedFieldcsÎ| ˆ¡}|dkr"| ˆˆ|ƒ¡}t||ƒ\}}|ˆjkrF| |¡nN|jsRg|_|j ˆ|||… ¡f¡|jdkr‚t     ¡|_|j 
ˆt j |¡|ˆ}|||…ˆks´||kr"||krÄt dƒ‚|Sq"dS)á³Decode serialized repeated enum to its value and a new position.
 
      Args:
        buffer: memoryview of the serialized bytes.
        pos: int, position in the memory view to start at.
        end: int, end position of serialized data
        message: Message object to store unknown fields in
        field_dict: Map[Descriptor, Any] to store decoded values in.
 
      Returns:
        int, new position in serialized data.
      Nr#)r'r(rgrhr)rirrkrrlrmrrjr r5)rorBr0r2r!r7rrr8¯s.
 
 ÿ
 
ÿz(EnumDecoder.<locals>.DecodeRepeatedFieldcs®|}t||ƒ\}}||kr"tdƒ‚ˆr:|s:| ˆd¡|S|ˆjkrN||ˆ<n\|jsZg|_t ˆtj¡}|j     ||||… 
¡f¡|j dkr˜t   ¡|_ |j  ˆtj|¡|S)rpr#N)rgr r:rhrirr?rrjr)rrkrrlrm)rrr*rr+rnZ
enum_valuer!)r<rorBr0rrr=Øs2  
 
ÿÿ
 
ÿz EnumDecoder.<locals>.DecodeFieldN)ror>rr?rrjr@rAr)r<rorBr0r1r2r!r7rÚ EnumDecoderts1'$rqú<Iú<Qz<iz<qcsft‰‡fdd„‰|rt‚|rLt |tj¡‰tˆƒ‰‡‡‡‡‡‡fdd„}|S‡‡‡‡fdd„}|SdS)z%Returns a decoder for a string field.c
sP| ¡}zt|dƒ}Wn4tk
rJ}zd|ˆjf|_‚W5d}~XYnX|S)zConvert byte to unicode.zutf-8z%s in field: %sN)rÚstrÚUnicodeDecodeErrorZ    full_nameÚreason)ZmemviewÚbyte_strr,Úe)r0rrÚ_ConvertToUnicode%sz(StringDecoder.<locals>._ConvertToUnicodecsˆ| ˆ¡}|dkr"| ˆˆ|ƒ¡}ˆ||ƒ\}}||}||krHtdƒ‚| ˆ|||…ƒ¡|ˆ}|||…ˆks~||kr"|Sq"dS©NzTruncated string.r&©rrr*rr+r,Úsizer6)ryr0r1r2r!r7rrr86s
z*StringDecoder.<locals>.DecodeRepeatedFieldcsTˆ||ƒ\}}||}||kr&tdƒ‚ˆr<|s<| ˆd¡nˆ|||…ƒ|ˆ<|Srzr9©rrr*rr+r|r6)ryr<r0r1rrr=Gsz"StringDecoder.<locals>.DecodeFieldN©r>ÚAssertionErrorrr?rÚWIRETYPE_LENGTH_DELIMITEDr@©rBrCrDr0r2r<r8r=r)ryr<r0r1r2r!r7rÚ StringDecoders ÿ
r‚csVt‰|r t‚|r>t |tj¡‰tˆƒ‰‡‡‡‡‡fdd„}|S‡‡‡fdd„}|SdS)z$Returns a decoder for a bytes field.csˆ| ˆ¡}|dkr"| ˆˆ|ƒ¡}ˆ||ƒ\}}||}||krHtdƒ‚| |||… ¡¡|ˆ}|||…ˆks~||kr"|Sq"dSrz)r'r(r r)rr{©r0r1r2r!r7rrr8_s
z)BytesDecoder.<locals>.DecodeRepeatedFieldcsTˆ||ƒ\}}||}||kr&tdƒ‚ˆr<|s<| ˆd¡n|||… ¡|ˆ<|Srz)r r:rr})r<r0r1rrr=psz!BytesDecoder.<locals>.DecodeFieldNr~rrrGrÚ BytesDecoderTsÿ
r„cslt |tj¡‰tˆƒ‰|rt‚|rRt |tj¡‰tˆƒ‰‡‡‡‡‡‡fdd„}|S‡‡‡‡fdd„}|SdS)z$Returns a decoder for a group field.cs¨| ˆ¡}|dkr"| ˆˆ|ƒ¡}| ˆ¡}|dkrD| ˆˆ|ƒ¡}| ¡ |||¡}|ˆ}|||…ˆksv||kr~tdƒ‚|ˆ}|||…ˆksž||kr"|Sq"dS©NúMissing group end tag.)r'r(ÚaddÚ_InternalParser ©rrr*rr+r,r6©Ú end_tag_bytesÚ end_tag_lenr0r2r!r7rrr8‰s
 
z)GroupDecoder.<locals>.DecodeRepeatedFieldcs\| ˆ¡}|dkr"| ˆˆ|ƒ¡}| |||¡}|ˆ}|||…ˆksP||krXtdƒ‚|Sr…)r'r(rˆr r‰)r‹rŒr0r2rrr=žs
z!GroupDecoder.<locals>.DecodeFieldN)rr?rÚWIRETYPE_END_GROUPr@rÚWIRETYPE_START_GROUP©rBrCrDr0r2r8r=rrŠrÚ GroupDecoder}sÿÿ rcsVt‰|r t‚|r>t |tj¡‰tˆƒ‰‡‡‡‡‡fdd„}|S‡‡‡fdd„}|SdS)z&Returns a decoder for a message field.cs| ˆ¡}|dkr"| ˆˆ|ƒ¡}ˆ||ƒ\}}||}||krHtdƒ‚| ¡ |||¡|krftdƒ‚|ˆ}|||…ˆks†||kr"|Sq"dS©Nr#úUnexpected end-group tag.)r'r(r r‡rˆr{rƒrrr8¶s
z+MessageDecoder.<locals>.DecodeRepeatedFieldcsf| ˆ¡}|dkr"| ˆˆ|ƒ¡}ˆ||ƒ\}}||}||krHtdƒ‚| |||¡|krbtdƒ‚|Sr‘)r'r(r rˆr{)r0r1r2rrr=Ìs
z#MessageDecoder.<locals>.DecodeFieldNr~rrrƒrÚMessageDecoder¬sÿr“rcsNt dtj¡‰t dtj¡‰t dtj¡‰t‰t‰t}‡‡‡‡‡fdd„}|S)aReturns a decoder for a MessageSet item.
 
  The parameter is the message Descriptor.
 
  The message set message looks like this:
    message MessageSet {
      repeated group Item = 1 {
        required int32 type_id = 2;
        required string message = 3;
      }
    }
  rXrVrcsŒ|}d}d}d}ˆ||ƒ\}    }|    ˆkr6ˆ||ƒ\}}q|    ˆkrZˆ||ƒ\}
}||
}}q|    ˆkrfq†qt||||    ƒ}|dkrtdƒ‚q||kr–tdƒ‚|dkr¦tdƒ‚|dkr¶tdƒ‚|j |¡} | dk    r*| | ¡} | dkr | j} t| dƒsü|j | ¡|     | |  
¡¡} |   |||¡|krˆtdƒ‚n^|j s8g|_ |j   t|||… ¡f¡|jdkrjt ¡|_|j |tj|||… ¡¡|S)    aDecode serialized message set to its value and new position.
 
    Args:
      buffer: memoryview of the serialized bytes.
      pos: int, position in the memory view to start at.
      end: int, end position of serialized data
      message: Message object to store unknown fields in
      field_dict: Map[Descriptor, Any] to store decoded values in.
 
    Returns:
      int, new position in serialized data.
    r$r†r#z MessageSet item missing type_id.z MessageSet item missing message.NÚ_concrete_classr’)Ú    SkipFieldr Z
ExtensionsZ_FindExtensionByNumberr'Ú message_typeÚhasattrZ_FACTORYZ GetPrototyper(r”rˆrir)ÚMESSAGE_SET_ITEM_TAGrrkrrlrmrr€)rrr*rr+Zmessage_set_item_startZtype_idÚ message_startZ message_endr!r|Ú    extensionr,r–©Zitem_end_tag_bytesr1Z local_ReadTagZmessage_tag_bytesZtype_id_tag_bytesrrÚ
DecodeItemøs^ 
 
 
 
 
 ÿ
ÿ 
ýz)MessageSetItemDecoder.<locals>.DecodeItem)    rr?rrjr€rr"r>r•)Z
descriptorZlocal_SkipFieldrœrr›rÚMessageSetItemDecoderâsHrcsB|‰t |jtj¡‰tˆƒ‰t‰|j‰‡‡‡‡‡‡‡fdd„}|S)z"Returns a decoder for a map field.c    sÀˆ ¡}| ˆ¡}|dkr*| ˆˆ|ƒ¡}ˆ||ƒ\}}||}||krPtdƒ‚| ¡| |||¡|krrtdƒ‚ˆrŠ||j |j¡n |j||j<|ˆ}|||…ˆks¶||kr*|Sq*dSr‘)    r”r'r(r ZClearrˆr0ZCopyFromr,)    rrr*rr+Zsubmsgr,r|r6©Úis_message_mapr0r1r–r2r!r7rrÚ    DecodeMapOs"
 zMapDecoder.<locals>.DecodeMap)rr?Únumberrr€r@r>r–)Zfield_descriptorr2rŸr rržrÚ
MapDecoderDsÿr¢cCsBt|||d… ¡ƒd@r&|d7}q|d7}||kr>tdƒ‚|S)z/Skip a varint value.  Returns the new position.rr    r#)Úordrr ©rrr*rrrÚ _SkipVarintrs 
r¥cCs|d7}||krtdƒ‚|S)z0Skip a fixed64 value.  Returns the new position.rbr#r r¤rrrÚ _SkipFixed64~sr¦cCs$|d}t d|||…¡d|fS)zDecode a fixed64.rbrsr©rQrS©rrr6rrrÚ_DecodeFixed64‡sr©cCs*t||ƒ\}}||7}||kr&tdƒ‚|S)z9Skip a length-delimited value.  Returns the new position.r#)r>r )rrr*r|rrrÚ_SkipLengthDelimiteds
rªcCs2t||ƒ\}}t||||ƒ}|dkr(|S|}qdS)z*Skip sub-group.  Returns the new position.r$N)r"r•)rrr*r!r6rrrÚ
_SkipGroup—s
r«c
Csvt ¡}|dks||krnt||ƒ\}}t|dƒ\}}t |¡\}}|tjkrNqnt|||ƒ\}    }| |||    ¡q||fS)zFDecode UnknownFieldSet.  Returns the UnknownFieldSet and new position.Nr)    rrlr"r>rZ    UnpackTagrÚ_DecodeUnknownFieldrm)
rrZend_posZunknown_field_setr!ÚtagÚ_rBrFÚdatarrrÚ_DecodeUnknownFieldSet¢s
r°cCs¼|tjkrt||ƒ\}}nš|tjkr4t||ƒ\}}n€|tjkrNt||ƒ\}}nf|tjkr„t||ƒ\}}||||… ¡}||7}n0|tj    kržt
||ƒ\}}n|tj kr¬dSt dƒ‚||fS)zCDecode a unknown field.  Returns the UnknownField and new position.)rr$zWrong wire type in tag.) rrjr>rer©r_Ú_DecodeFixed32r€rrŽr°rr )rrrFr¯r|rrrr¬³s 
 
 
 
 
 
 
r¬cCsdS)zFSkipping an END_GROUP tag returns -1 to tell the parent loop to break.r$rr¤rrrÚ    _EndGroupÊsr²cCs|d7}||krtdƒ‚|S)z0Skip a fixed32 value.  Returns the new position.rUr#r r¤rrrÚ _SkipFixed32Ðsr³cCs$|d}t d|||…¡d|fS)zDecode a fixed32.rUrrrr§r¨rrrr±Ùsr±cCs tdƒ‚dS)z;Skip function for unknown wire types.  Raises an exception.zTag had invalid wire type.Nr r¤rrrÚ_RaiseInvalidWireTypeàsr´cs,ttttttttg‰tj‰‡‡fdd„}|S)z"Constructs the SkipField function.cs$t|dd…ƒˆ@}ˆ||||ƒS)aSkips a field with the specified tag.
 
    |pos| should point to the byte immediately after the tag.
 
    Returns:
        The new position (after the tag value), or -1 if the tag is an end-group
        tag (in which case the calling loop should break).
    rr)r£)rrr*r!rF©ZWIRETYPE_TO_SKIPPERZ wiretype_maskrrr•õs z _FieldSkipper.<locals>.SkipField)    r¥r¦rªr«r²r³r´rZ TAG_TYPE_MASK)r•rrµrÚ _FieldSkipperåsø r¶)F)F)F)N)BÚ__doc__Ú
__author__r[rQZgoogle.protobuf.internalrrrZgoogle.protobufrÚ DecodeErrorr rrÚintr>Z_DecodeSignedVarintZ_DecodeVarint32rgr"rIrMrTrarfrqrjZ Int32DecoderZ Int64DecoderZ UInt32DecoderZ UInt64DecoderZ ZigZagDecodeZ SInt32DecoderZ SInt64Decoderr_ZFixed32DecoderreZFixed64DecoderZSFixed32DecoderZSFixed64DecoderZ FloatDecoderZ DoubleDecoderÚboolZ BoolDecoderr‚r„rr“r?rŽr˜rr¢r¥r¦r©rªr«r°r¬r²r³r±r´r¶r•rrrrÚ<module>s˜2    
 
 
 
?-)ÿ
ÿÿ  ÿÿ    ÿÿ
6ÿ
)/4b.