
    Rh              	       @   d Z ddlmZ ddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZ ddlZddlmZ dd	lmZmZ ddlZddlZddlZddlZg d
Z	 ddlmZ ej1                  d       dZeefZdZg dZdZ dZ! G d de"      Z# G d de#      Z$ G d de#      Z% G d de"      Z&dZ'dZ(dZ)dZ*dZ+d Z,d!Z-d"Z.d#Z/d$Z0d%Z1d&Z2d'Z3d(Z4d)Z5d*Z6d+Z7d,Z8d-Z9d.Z:d/Z;d0Z<d1Z=d2Z>d3Z?d4Z@d5ZAd6ZBd7ZCd8ZDd9ZEd:ZFd;ZGd<ZHd=ZId>ZJd?ZKd@ZLdAZMdBZNdCZOdDZPdEZQdFZRdGZSdHZTdIZUdJZVdKZWdLZXdMZYdNZZdOZ[dPZ\dQZ]eMeWeXeYgZ^dRZ_dSZ`dTZadUZbdVZcdWZddXZedYZfdZZgd[Zhd\Zid]Zjd^Zkd_Zld`Zmej                   eo       D  cg c]  }  ej                  da|       s|  c}         G db dc      Zq G dd de      Zrdf Zsdg Ztdh Zudi Zv G dj dk      Zw G dl dm      ZxddddndoZyddddndpZzddqdrddsdtZ{ddqdrddsduZ|	 dd
lm#Z#m$Z$m%Z%m}Z}m~Z~mZmZmZmZ dv Zedwk(  rddlZ ej                  dxy      Zej                  dzd{d|}       ej                  d~ddd       ej                  ddd       ej                         Zej                  r e        yej                  sej                          yddlZej                  D ]S  Zedk(  r eej                   j"                        Zn eed      5 Z ee      Zddd        ej                  e       U yy# e$ r dZY w xY wc c} w # e$ r ewexcZ}Z~eyeze{e|f\  ZZZZY :w xY w# 1 sw Y   OxY w)a  Create portable serialized representations of Python objects.

See module copyreg for a mechanism for registering custom picklers.
See module pickletools source for extensive comments.

Classes:

    Pickler
    Unpickler

Functions:

    dump(object, file)
    dumps(object) -> string
    load(file) -> object
    loads(bytes) -> object

Misc variables:

    __version__
    format_version
    compatible_formats

    )FunctionType)dispatch_table)_extension_registry_inverted_registry_extension_cache)islice)partialN)maxsize)packunpack)	PickleErrorPicklingErrorUnpicklingErrorPickler	Unpicklerdumpdumpsloadloads)PickleBufferr   TF4.0)z1.0z1.1z1.2z1.3z2.0z3.0r   z5.0      c                       e Zd ZdZy)r   z6A common base class for the other pickling exceptions.N__name__
__module____qualname____doc__     /usr/lib/python3.12/pickle.pyr   r   I   s    @r!   r   c                       e Zd ZdZy)r   z]This exception is raised when an unpicklable object is passed to the
    dump() method.

    Nr   r    r!   r"   r   r   M   s     	r!   r   c                       e Zd ZdZy)r   a  This exception is raised when there is a problem unpickling an object,
    such as a security violation.

    Note that other exceptions may also be raised during unpickling, including
    (but not necessarily limited to) AttributeError, EOFError, ImportError,
    and IndexError.

    Nr   r    r!   r"   r   r   T   s     	r!   r   c                       e Zd Zd Zy)_Stopc                     || _         y N)valueselfr)   s     r"   __init__z_Stop.__init__b   s	    
r!   N)r   r   r   r,   r    r!   r"   r&   r&   a   s    r!   r&      (   .   0   1   2   F   I   J   K   L   M   N   P   Q   R   S   T   U   V   X   a   b   c   d   }   e   g   h   i   j   l   ]   o   p   q   r   s   t   )   u   Gs   I01
s   I00
                                       B   C                                       z[A-Z][A-Z0-9_]+$c                   :    e Zd ZdZdZd Zd Zd Zd
dZd Z	d Z
y	)_Framerr   i   c                      || _         d | _        y r(   )
file_writecurrent_frame)r+   rt   s     r"   r,   z_Framer.__init__   s    $!r!   c                 6    t        j                         | _        y r(   )ioBytesIOru   r+   s    r"   start_framingz_Framer.start_framing   s    ZZ\r!   c                     | j                   r8| j                   j                         dkD  r| j                  d       d | _         y y y )Nr   Tforce)ru   tellcommit_framery   s    r"   end_framingz_Framer.end_framing   sC    $"4"4"9"9";a"?D)!%D #@r!   c           	      d   | j                   r| j                   }|j                         | j                  k\  s|rx|j                         }| j                  }t        |      | j                  k\  r" |t        t        dt        |            z           ||       t        j                         | _         y y y )N<Q)ru   r~   _FRAME_SIZE_TARGET	getbufferrt   len_FRAME_SIZE_MINFRAMEr   rw   rx   )r+   r}   fdatawrites        r"   r   z_Framer.commit_frame   s    ""Avvx4222e{{}t9 4 44
 %$tSY"778
 d &(ZZ\"' 7< r!   c                 r    | j                   r| j                   j                  |      S | j                  |      S r(   )ru   r   rt   r+   r   s     r"   r   z_Framer.write   s1    %%++D11??4((r!   c                 x    | j                   }| j                  r| j                  d        ||        ||       y )NTr|   )rt   ru   r   )r+   headerpayloadr   s       r"   write_large_bytesz_Framer.write_large_bytes   s5    D) 	fgr!   N)F)r   r   r   r   r   r,   rz   r   r   r   r   r    r!   r"   rr   rr      s+    O""*&
20)r!   rr   c                   ,    e Zd ZddZd Zd Zd Zd Zy)	_UnframerNc                 .    || _         || _        d | _        y r(   )	file_readfile_readlineru   )r+   r   r   	file_tells       r"   r,   z_Unframer.__init__  s    "*!r!   c                 >   | j                   rq| j                   j                  |      }|dk(  r6t        |      dk7  r(d | _         t        |      }| j                  |      |d d  |S |t        |      k  rt	        d      |S t        |      }| j                  |      |d d  |S Nr   $pickle exhausted before end of frame)ru   readintor   r   r   )r+   bufns      r"   r   z_Unframer.readinto  s    ""++C0AAv#c(a-%)"H*A3s8|%:< <HCA^^A&CFHr!   c                     | j                   rU| j                   j                  |      }|s|dk7  rd | _         | j                  |      S t        |      |k  rt	        d      |S | j                  |      S r   )ru   readr   r   r   r+   r   r   s      r"   r   z_Unframer.read  sp    %%**1-DAF%)"~~a((4y1}%:< <K>>!$$r!   c                     | j                   rH| j                   j                         }|sd | _         | j                         S |d   dk7  rt        d      |S | j                         S )N
   r   )ru   readliner   r   r   s     r"   r   z_Unframer.readline&  si    %%..0D%)"))++Bx8#%:< <K%%''r!   c                     | j                   r(| j                   j                         dk7  rt        d      t        j                  | j                  |            | _         y )Nr!   z4beginning of a new frame before end of current frame)ru   r   r   rw   rx   r   r+   
frame_sizes     r"   
load_framez_Unframer.load_frame3  sM    $"4"4"9"9";s"B!FH HZZz(BCr!   r(   )r   r   r   r,   r   r   r   r   r    r!   r"   r   r     s    "
"%(Dr!   r   c                     |j                  d      D ]1  }|dk(  rt        dj                  ||             	 | }t        | |      } 3 | fS # t        $ r t        dj                  ||             d w xY w)N.z<locals>z&Can't get local attribute {!r} on {!r}z Can't get attribute {!r} on {!r})splitAttributeErrorformatgetattr)objnamesubpathparents       r"   _getattributer   <  s    ::c? 	?j  !I"(&s"35 5	?F#w'C	? ;  	? !C"(&s"35:>?	?s   A

&A0c                     t        | dd      }||S t        j                  j                         j	                         D ](  \  }}|dk(  s|dk(  s|	 t        ||      d   | u r|c S * y# t        $ r Y 7w xY w)z$Find the module an object belong to.r   N__main____mp_main__r   )r   sysmodulescopyitemsr   r   )r   r   module_namemodules       r"   whichmoduler   I  s    #|T2K  #{{//1779 	V:%m+~	VT*1-4"" 5	   		s   A**	A65A6c                     | dk(  ry| j                         dz	  dz   }| j                  |dd      }| dk  r|dkD  r|d   d	k(  r|d
   dz  dk7  r|dd }|S )a  Encode a long to a two's complement little-endian binary string.
    Note that 0 is a special case, returning an empty string, to save a
    byte in the LONG1 pickling context.

    >>> encode_long(0)
    b''
    >>> encode_long(255)
    b'\xff\x00'
    >>> encode_long(32767)
    b'\xff\x7f'
    >>> encode_long(-256)
    b'\x00\xff'
    >>> encode_long(-32768)
    b'\x00\x80'
    >>> encode_long(-128)
    b'\x80'
    >>> encode_long(127)
    b'\x7f'
    >>>
    r   r!         littleT	byteordersignedr         N)
bit_lengthto_bytes)xnbytesresults      r"   encode_longr   \  sp    * 	Avlln!Q&FZZ(4Z@F1u!":6":#4":CR[FMr!   c                 2    t         j                  | dd      S )a\  Decode a long from a two's complement little-endian binary string.

    >>> decode_long(b'')
    0
    >>> decode_long(b"\xff\x00")
    255
    >>> decode_long(b"\xff\x7f")
    32767
    >>> decode_long(b"\x00\xff")
    -256
    >>> decode_long(b"\x00\x80")
    -32768
    >>> decode_long(b"\x80")
    -128
    >>> decode_long(b"\x7f")
    127
    r   Tr   )int
from_bytes)r   s    r"   decode_longr   z  s    $ >>$(4>@@r!   c                   v   e Zd Zd!ddddZd Zd Zd Zd Zd	 Zd"d
Z	d Z
d Z	 	 d#dddZi Zd Zee ed      <   d Zeee<   d Zeee<   d Zeee<   d Zeee<   d Zeee<   erd Zeee<   d Zeee<   d Zeee <   d Z!e!ee"<   dZ#d Z$d Z%e%ee&<   d Z'd Z(e(ee)<   d Z*e*ee+<   d!dZ,d  Z-e,ee.<   e-ee<   y)$_PicklerNTfix_importsbuffer_callbackc                   |t         }|dk  rt        }n#d|cxk  r	t        k  sn t        dt        z        ||dk  rt        d      || _        	 |j                  | _        t        | j
                        | _	        | j                  j                  | _        | j                  j                  | _        i | _        t        |      | _        |dk\  | _        d| _        |xr |dk  | _        y# t        $ r t        d      w xY w)	a!  This takes a binary file for writing a pickle data stream.

        The optional *protocol* argument tells the pickler to use the
        given protocol; supported protocols are 0, 1, 2, 3, 4 and 5.
        The default protocol is 4. It was introduced in Python 3.4, and
        is incompatible with previous versions.

        Specifying a negative protocol version selects the highest
        protocol version supported.  The higher the protocol used, the
        more recent the version of Python needed to read the pickle
        produced.

        The *file* argument must have a write() method that accepts a
        single bytes argument. It can thus be a file object opened for
        binary writing, an io.BytesIO instance, or any other custom
        object that meets this interface.

        If *fix_imports* is True and *protocol* is less than 3, pickle
        will try to map the new Python 3 names to the old module names
        used in Python 2, so that the pickle data stream is readable
        with Python 2.

        If *buffer_callback* is None (the default), buffer views are
        serialized into *file* as part of the pickle stream.

        If *buffer_callback* is not None, then it can be called any number
        of times with a buffer view.  If the callback returns a false value
        (such as None), the given buffer is out-of-band; otherwise the
        buffer is serialized in-band, i.e. inside the pickle stream.

        It is an error if *buffer_callback* is not None and *protocol*
        is None or smaller than 5.
        Nr   zpickle protocol must be <= %dr   z#buffer_callback needs protocol >= 5z"file must have a 'write' attributer   r   )DEFAULT_PROTOCOLHIGHEST_PROTOCOL
ValueError_buffer_callbackr   _file_writer   	TypeErrorrr   framerr   _write_large_bytesmemor   protobinfastr   )r+   fileprotocolr   r   s        r"   r,   z_Pickler.__init__  s    F 'Ha<'Hh2"22<?OOPP&8a<BCC /	B#zzD d../[[&&
"&++"?"?	]
q=	&78a<  	B@AA	Bs   C* *C?c                 8    | j                   j                          y)a  Clears the pickler's "memo".

        The memo is the data structure that remembers which objects the
        pickler has already seen, so that shared or recursive objects
        are pickled by reference and not by value.  This method is
        useful when re-using picklers.
        N)r   clearry   s    r"   
clear_memoz_Pickler.clear_memo  s     			r!   c                    t        | d      s#t        d| j                  j                  d      | j                  dk\  r,| j                  t        t        d| j                        z          | j                  dk\  r| j                  j                          | j                  |       | j                  t               | j                  j                          y)z7Write a pickled representation of obj to the open file.r   z%Pickler.__init__() was not called by .__init__()   <Br   N)hasattrr   	__class__r   r   r   PROTOr   r   rz   saveSTOPr   r+   r   s     r"   r   z_Pickler.dump  s     t]+37>>3J3J!M N N::?JJutD$**556::?KK%%'		#

4!r!   c                     | j                   ryt        |      | j                  vsJ t        | j                        }| j	                  | j                  |             ||f| j                  t        |      <   y)zStore an object in the memo.N)r   idr   r   r   put)r+   r   idxs      r"   memoizez_Pickler.memoize  s[     99#wdii'''$))n

488C=! #X		"S'r!   c                     | j                   dk\  rt        S | j                  r+|dk  rt        t	        d|      z   S t
        t	        d|      z   S t        t        |      j                  d      z   dz   S )Nr      r   <Iascii   
)	r   MEMOIZEr   BINPUTr   LONG_BINPUTPUTreprencode)r+   r   s     r"   r   z_Pickler.put  sa    ::?NXXSyT3//"T$_44c))'22U::r!   c                     | j                   r+|dk  rt        t        d|      z   S t        t        d|      z   S t        t        |      j                  d      z   dz   S )Nr   r   r   r   r   )r   BINGETr   LONG_BINGETGETr   r  r+   is     r"   getz_Pickler.get  sO    883wT1--"T$]22T!W^^G,,u44r!   c                    | j                   j                          | j                  |      }||r| j                  |       y | j                  j                  t        |            }|$| j                  | j                  |d                y t        }t        | dd       }| ||      }|t        u rt        |      }| j                  j                  |      }|
 || |       y t        | dt              j                  |      }|	 ||      }nvt        |t              r| j                  |       y t        |dd       }| || j                        }n2t        |dd       }| |       }nt!        d|j"                  d|      t%        |t&              r| j                  ||       y t%        |t(              st!        d|z        t+        |      }	d	|	cxk  rd
k  sn t!        d|z         | j,                  |d|i y )Nr   reducer_overrider   __reduce_ex__
__reduce__Can't pickle z	 object: z%s must return string or tupler      z2Tuple returned by %s must have two to six elementsr   )r   r   persistent_id	save_persr   r  r   r   NotImplementedr   typedispatchr   
issubclasssave_globalr   r   r   
isinstancestrtupler   save_reduce)
r+   r   save_persistent_idpidr   rvreducetr   ls
             r"   r   z_Pickler.save  s     "   %?1NN3 IIMM"S'"=JJtxx!~&148BS	A!!!$A}$ T#3^DHHKF!C[ a&$$S) !ot<%

+B$S,=F)#X+-.ZZ-> ? ? b#S"% "e$ @6 IJJ GQ! !68>!? @ @ 	2&S&r!   c                      y r(   r    r   s     r"   r  z_Pickler.persistent_idW  s    r!   c                    | j                   r)| j                  |d       | j                  t               y 	 | j                  t        t        |      j                  d      z   dz          y # t        $ r t        d      w xY w)NF)r  r   r   2persistent IDs in protocol 0 must be ASCII strings)	r   r   r   	BINPERSIDPERSIDr  r  UnicodeEncodeErrorr   r+   r  s     r"   r  z_Pickler.save_pers[  sq    88IIceI4JJy!J

6CHOOG$<<uDE% J#HJ JJs   3A+ +B r   c          	      (   t        |t              st        d      t        |      st        d      | j                  }| j
                  }	t        |dd      }
| j                  dk\  r|
dk(  r|\  }}}t        |d      st        dj                  |
            |(||j                  urt        d	j                  |
            | j                  d
k\  r% ||        ||        ||        |	t               nt        |j                  |g|i |} ||        |d        |	t               n| j                  dk\  r^|
dk(  rY|d   }t        |d      st        d      |||j                  urt        d      |dd  } ||        ||        |	t               n ||        ||        |	t               |`t!        |      | j"                  v r8 |	t$        | j'                  | j"                  t!        |         d         z          n| j)                  |       || j+                  |       || j-                  |       |T| ||        |	t.               y  ||        ||        ||        |	t0                |	t                |	t$               y y )Nz'args from save_reduce() must be a tuplez(func from save_reduce() must be callabler    r   __newobj_ex____new__z#args[0] from {} args has no __new__z(args[0] from {} args has the wrong classr   r    
__newobj__r   z+args[0] from __newobj__ args has no __new__z0args[0] from __newobj__ args has the wrong classr   )r  r  r   callabler   r   r   r   r   r   r   	NEWOBJ_EXr	   r+  REDUCENEWOBJr   r   POPr  r   _batch_appends_batch_setitemsBUILDTUPLE2)r+   funcargsstate	listitems	dictitemsstate_setterr   r   r   	func_nameclskwargss                r"   r  z_Pickler.save_reduceg  sc    $& IJJ~ JKKyy

D*b1	::?yO; $Cv3	*#$I%+VI%68 83cmm#;#$N%+VI%68 8zzQS	T
Vi s{{CA$A&AT
RfZZ1_l!:6 q'C3	*#AC C3cmm#;#FH H8DIJ&MJJ&M? #w$))#cDHHTYYr#w%7%:;;<S!  	*   +#Ue \"S	Uff
 c
' r!   c                 .    | j                  t               y r(   )r   NONEr   s     r"   	save_nonez_Pickler.save_none  s    

4r!   c                     | j                   dk\  r#| j                  |rt               y t               y | j                  |rt        nt
               y )Nr   )r   r   NEWTRUENEWFALSETRUEFALSEr   s     r"   	save_boolz_Pickler.save_bool  s0    ::?JJ#w484JJst.r!   c                    | j                   r|dk\  rP|dk  r#| j                  t        t        d|      z          y |dk  r#| j                  t        t        d|      z          y d|cxk  rdk  r&n n#| j                  t
        t        d|      z          y | j                  d	k\  rgt        |      }t        |      }|d
k  r&| j                  t        t        d|      z   |z          y | j                  t        t        d|      z   |z          y d|cxk  rdk  r7n n4| j                  t        t        |      j                  d      z   dz          y | j                  t        t        |      j                  d      z   dz          y )Nr   r   r     <Hi   i<ir   r   r   r   s   L
)r   r   BININT1r   BININT2BININTr   r   r   LONG1LONG4INTr   r  LONG)r+   r   encodedr   s       r"   	save_longz_Pickler.save_long  s9   88
 ax$;JJwdC89&=JJwdC89c/Z/

6DsO34::?!#&GGA3w

54a=07:;  

54a=07:;#++JJsT#Y--g66>?JJtd3i..w77&@Ar!   c                     | j                   r#| j                  t        t        d|      z          y | j                  t        t        |      j                  d      z   dz          y )N>dr   r   )r   r   BINFLOATr   FLOATr   r  r   s     r"   
save_floatz_Pickler.save_float  sE    88JJx$tS/12JJutCy//885@Ar!   c                 x   | j                   dk  rJ|s| j                  t        d|       y | j                  t        j                  t        |d      df|       y t        |      }|dk  r&| j                  t        t        d|      z   |z          n|dkD  r3| j                   dk\  r$| j                  t        t        d	|      z   |       nb|| j                  j                  k\  r$| j                  t        t        d
|      z   |       n%| j                  t        t        d
|      z   |z          | j                  |       y )Nr   r    r'  latin1r   r       r   r   r   )r   r  bytescodecsr  r  r   r   SHORT_BINBYTESr   r   	BINBYTES8r   r   BINBYTESr   r+   r   r   s      r"   
save_bytesz_Pickler.save_bytes  s   ::>   4    "%c8"4h!?S ! JH9JJ~T15;<^

a##IT1$=sC$++000##HtD!}$<cBJJx$tQ-/#56Sr!   c                    | j                   dk  r>|s| j                  t        d|       y | j                  t        t        |      f|       y t	        |      }|| j
                  j                  k\  r$| j                  t        t        d|      z   |       n%| j                  t        t        d|      z   |z          | j                  |       y )Nr   r    r'  r   )r   r  	bytearrayr]  r   r   r   r   
BYTEARRAY8r   r   r   rb  s      r"   save_bytearrayz_Pickler.save_bytearray#  s    ::>  BC 8    U3ZMs CH...##JdA$>DJJzDqM1C78Sr!   c                    | j                   dk  rt        d      |j                         5 }|j                  st        d      d}| j                  t        | j	                  |            }|rL|j                  r | j                  |j                                nV| j                  |j                                n6| j                  t               |j                  r| j                  t               d d d        y # 1 sw Y   y xY w)Nr   z0PickleBuffer can only pickled with protocol >= 5zHPickleBuffer can not be pickled when pointing to a non-contiguous bufferT)r   r   raw
contiguousr   boolreadonlyrc  tobytesrg  r   NEXT_BUFFERREADONLY_BUFFER)r+   r   min_bands       r"   save_picklebufferz_Pickler.save_picklebuffer3  s    zzA~# %4 5 5 4a||' )N O O((4"4#8#8#=>G zz		4++AIIK8 JJ{+zz

?3%4 4 4s   CC88Dc                 ,   | j                   r|j                  dd      }t        |      }|dk  r6| j                  dk\  r'| j	                  t
        t        d|      z   |z          n|dkD  r3| j                  dk\  r$| j                  t        t        d|      z   |       n|| j                  j                  k\  r$| j                  t        t        d|      z   |       n| j	                  t        t        d|      z   |z          n|j                  d	d
      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }| j	                  t        |j                  d      z   dz          | j                  |       y )Nutf-8surrogatepassr   r   r   r\  r   r   \z\u005c z\u0000
z\u000az\u000dz\u001araw-unicode-escaper   )r   r  r   r   r   SHORT_BINUNICODEr   r   BINUNICODE8r   r   
BINUNICODEreplaceUNICODEr   )r+   r   rS  r   tmps        r"   save_strz_Pickler.save_strM  sC   88jj/:GGADyTZZ1_

+d4m;gEFZDJJ!O''d4m(CWMdkk444''
T$](BGL

:T15?@ ++dI.C++dI.C++dI.C++dI.C++fi0CJJw,@!AAEIJSr!   c                 >   |s?| j                   r| j                  t               y | j                  t        t        z          y t        |      }| j                  }| j                  }|dk  r| j                  dk\  r|D ]
  } ||        t        |      |v r<| j                  |t        |         d         }| j                  t        |z  |z          y | j                  t        |          | j                  |       y | j                  } |t               |D ]
  } ||        t        |      |v rR| j                  |t        |         d         }| j                   r |t        |z          y  |t        |dz   z  |z          y  |t               | j                  |       y )Nr   r   r   r   )r   r   EMPTY_TUPLEMARKTUPLEr   r   r   r   r   r  r1  _tuplesize2coder   POP_MARK)r+   r   r   r   r   elementr  r   s           r"   
save_tuplez_Pickler.save_tupled  sp   xx

;'  

4%<(Hyyyy6djjAo W #w$hhtBsG}Q/0

37S=)  

?1-.S! 

d 	GM	 c7d? ((43=+,Cxxhn%  cQqSkC'( 	eSr!   c                     | j                   r| j                  t               n| j                  t        t        z          | j                  |       | j                  |       y r(   )r   r   
EMPTY_LISTr  LISTr   r2  r   s     r"   	save_listz_Pickler.save_list  s?    88JJz"JJtd{#SC r!   i  c                    | j                   }| j                  }| j                  s|D ]  } ||        |t                y t	        |      }	 t        t        || j                              }t        |      }|dkD  r( |t               |D ]
  } ||         |t               n|r ||d           |t               || j                  k  ry Nr   r   )r   r   r   APPENDiterlistr   
_BATCHSIZEr   r  APPENDS)r+   r   r   r   r   itr  r   s           r"   r2  z_Pickler._batch_appends  s    yy

xx Qf %[vb$//23CCA1ud AGgSVf4??" r!   c                     | j                   r| j                  t               n| j                  t        t        z          | j                  |       | j                  |j                                y r(   )r   r   
EMPTY_DICTr  DICTr   r3  r   r   s     r"   	save_dictz_Pickler.save_dict  sE    88JJz"JJtd{#SSYY[)r!   c                    | j                   }| j                  }| j                  s'|D ]!  \  }} ||        ||        |t               # y t	        |      }	 t        t        || j                              }t        |      }|dkD  r3 |t               |D ]  \  }} ||        ||         |t               n&|r$|d   \  }} ||        ||        |t               || j                  k  ry r  )r   r   r   SETITEMr  r  r   r  r   r  SETITEMS)	r+   r   r   r   kvr  r  r   s	            r"   r3  z_Pickler._batch_setitems  s    yy

xx 1QQg %[vb$//23CCA1ud DAqGG h1v1QQg4??"! r!   c                    | j                   }| j                  }| j                  dk  r#| j                  t        t        |      f|       y  |t               | j                  |       t        |      }	 t        t        || j                              }t        |      }|dkD  r' |t               |D ]
  } ||         |t               || j                  k  ry gNr   r'  r   )r   r   r   r  setr  	EMPTY_SETr   r  r   r  r   r  ADDITEMS)r+   r   r   r   r  batchr   items           r"   save_setz_Pickler.save_set  s    yy

::>S49,C8iS#YDOO45EE
A1ud! DJh4??" r!   c           	         | j                   }| j                  }| j                  dk  r#| j                  t        t        |      f|       y  |t               |D ]
  } ||        t        |      | j                  v r8 |t        | j                  | j                  t        |         d         z          y  |t               | j                  |       y r  )r   r   r   r  	frozensetr  r  r   r   r  r  	FROZENSETr   )r+   r   r   r   r  s        r"   save_frozensetz_Pickler.save_frozenset  s    yy

::>Yc#>d 	DJ	 c7dii (TXXdii3&8&;<<=iSr!   c           	      :   | j                   }| j                  }|t        |dd       }||j                  }t	        ||      }	 t        |d       t        j                  |   }t        ||      \  }}||urt        d|d|d|      | j                  dk\  rxt        j                  ||f      }	|	r_|	dkD  sJ |	d	k  r |t         t#        d
|	      z          y |	dk  r |t$        t#        d|	      z          y  |t&        t#        d|	      z          y |j)                  d      d   }
||u r|
}| j                  dk\  r/| j+                  |       | j+                  |        |t,               n||ur| j/                  t        ||
f       n| j                  dk\  r- |t0        t3        |d      z   dz   t3        |d      z   dz          ns| j4                  r:t6        j8                  }t6        j:                  }||f|v r|||f   \  }}n	||v r||   }	  |t0        t3        |d      z   dz   t3        |d      z   dz          | j?                  |       y # t        t        t        f$ r t        d|d|d|      d w xY w# t<        $ r t        d||| j                  fz        d w xY w)Nr   r   levelr  z: it's not the same object as r   z: it's not found as r   r   r   rI  rJ  rK  r   r   rt  r   r   z?can't pickle global identifier '%s.%s' using pickle protocol %i) r   r   r   r   r   
__import__r   r   r   r   ImportErrorKeyErrorr   r   r   r  EXT1r   EXT2EXT4
rpartitionr   STACK_GLOBALr  GLOBALr]  r   _compat_pickleREVERSE_NAME_MAPPINGREVERSE_IMPORT_MAPPINGr%  r   )r+   r   r   r   r   r   r   obj2r   codelastnamer_name_mappingr_import_mappings                r"   r  z_Pickler.save_global  s   

yy<35D<<<D!#t,	.{!,[[-F(6LD& 3#+t-. . ::?&**K+>?Daxx4<$dD!112
 	 V^$dD!112  $dD!112??3'*VD::?IIk"IIdO,6!Wvx&89ZZ1_&5g66>g&')./ 0 !/!D!D#1#H#H &.8(6T7J(K%K $44"2;"?KQfu['::UBD'*+-23 4 	Se X~6 	4k4)*/34	4Z & Q#),2D$**+EFGLPQQs   /I 	,I4 *I14&Jc                    |t        d       u r| j                  t         d|      S |t        t              u r| j                  t         t        f|      S |t        d      u r| j                  t         d|      S | j                  |      S )Nr(   r'  .).)r  r  r  r  r   s     r"   	save_typez_Pickler.save_typeZ  s    $t*##D's#;;D((##D>*;#EEDI##D&c#::$$r!   r(   )T)NNNN)/r   r   r   r,   r   r   r   r   r  r   r  r  r  r  rA  r  rG  rk  rT  r   rY  floatrc  r]  rg  re  _HAVE_PICKLE_BUFFERrr  r   r  r  r  r  r  r  r  r2  r  dictr3  r  r  r  r  r  r  r   r    r!   r"   r   r     si   784!%78r"&.	;5D'L
J =A15q>Bqj H$HT$Z/
 HTNB: HSMB
 !HUO$ !HUO )HY	40 "3* HSM/b !HUO! HTNJ6* HTN>, HSM* )HY@D% )H\HTNr!   r   c                   $   e Zd ZddddddZd Zd Zd	 Zi Zd
 Zeee	d   <   d Z
e
eed   <   d Zeeed   <   d Zeeed   <   d Zeeed   <   d Zeeed   <   d Zeeed   <   d Zeeed   <   d Zeeed   <   d Zeeed   <   d Zeeed   <   d Zeeed   <   d Z e ee!d   <   d Z"e"ee#d   <   d Z$e$ee%d   <   d Z&e&ee'd   <   d Z(d Z)e)ee*d   <   d Z+e+ee,d   <   d Z-e-ee.d   <   d Z/e/ee0d   <   d  Z1e1ee2d   <   d! Z3e3ee4d   <   d" Z5e5ee6d   <   d# Z7e7ee8d   <   d$ Z9e9ee:d   <   d% Z;e;ee<d   <   d& Z=e=ee>d   <   d' Z?e?ee@d   <   d( ZAeAeeBd   <   d) ZCeCeeDd   <   d* ZEeEeeFd   <   d+ ZGeGeeHd   <   d, ZIeIeeJd   <   d- ZKeKeeLd   <   d. ZMeMeeNd   <   d/ ZOeOeePd   <   d0 ZQeQeeRd   <   d1 ZSeSeeTd   <   d2 ZUeUeeVd   <   d3 ZWeWeeXd   <   d4 ZYd5 ZZeZee[d   <   d6 Z\e\ee]d   <   d7 Z^e^ee_d   <   d8 Z`e`eead   <   d9 Zbebeecd   <   d: Zdedeeed   <   d; Zfefeegd   <   d< Zheheeid   <   d= Zjejeekd   <   d> Zld? Zmd@ Zneneeod   <   dA Zpepeeqd   <   dB Zrereesd   <   dC Zteteeud   <   dD Zveveewd   <   dE Zxexeeyd   <   dF Zzezee{d   <   dG Z|e|ee}d   <   dH Z~e~eed   <   dI Zeeed   <   dJ Zeeed   <   dK Zeeed   <   dL Zeeed   <   dM Zeeed   <   dN Zeeed   <   dO Zeeed   <   dP Zeeed   <   dQ Zeeed   <   dR Zeeed   <   y)S
_UnpicklerTASCIIstrictNr   encodingerrorsbuffersc                    |t        |      nd| _        |j                  | _        |j                  | _        i | _        || _        || _        d| _	        || _
        y)a  This takes a binary file for reading a pickle data stream.

        The protocol version of the pickle is detected automatically, so
        no proto argument is needed.

        The argument *file* must have two methods, a read() method that
        takes an integer argument, and a readline() method that requires
        no arguments.  Both methods should return bytes.  Thus *file*
        can be a binary file object opened for reading, an io.BytesIO
        object, or any other custom object that meets this interface.

        The file-like object must have two methods, a read() method
        that takes an integer argument, and a readline() method that
        requires no arguments.  Both methods should return bytes.
        Thus file-like object can be a binary file object opened for
        reading, a BytesIO object, or any other custom object that
        meets this interface.

        If *buffers* is not None, it should be an iterable of buffer-enabled
        objects that is consumed each time the pickle stream references
        an out-of-band buffer view.  Such buffers have been given in order
        to the *buffer_callback* of a Pickler object.

        If *buffers* is None (the default), then the buffers are taken
        from the pickle stream, assuming they are serialized there.
        It is an error for *buffers* to be None if the pickle stream
        was produced with a non-None *buffer_callback*.

        Other optional arguments are *fix_imports*, *encoding* and
        *errors*, which are used to control compatibility support for
        pickle stream generated by Python 2.  If *fix_imports* is True,
        pickle will try to map the old Python 2 names to the new names
        used in Python 3.  The *encoding* and *errors* tell pickle how
        to decode 8-bit string instances pickled by Python 2; these
        default to 'ASCII' and 'strict', respectively. *encoding* can be
        'bytes' to read these 8-bit string instances as bytes objects.
        Nr   )r  _buffersr   _file_readliner   
_file_readr   r  r  r   r   )r+   r   r   r  r  r  s         r"   r,   z_Unpickler.__init__k  sR    N *1)<W$"mm))	 
&r!   c                    t        | d      s#t        d| j                  j                  d      t	        | j
                  | j                        | _        | j                  j                  | _        | j                  j                  | _	        | j                  j                  | _
        g | _        g | _        | j                  j                  | _        d| _        | j                  }| j                  }	 	  |d      }|st         t#        |t$              sJ  ||d      |        1# t&        $ r}|j(                  cY d}~S d}~ww xY w)zRead a pickled object representation from the open file.

        Return the reconstituted object hierarchy specified in the file.
        r  z'Unpickler.__init__() was not called by r   r   r   N)r   r   r   r   r   r  r  	_unframerr   r   r   	metastackstackappendr   r  EOFErrorr  bytes_typesr&   r)   )r+   r   r  keystopinsts        r"   r   z_Unpickler.load  s    t\*!59^^5L5L#O P P"4??D4G4GHNN''	////
jj''
yy==	"1g"N!#{333 Q &   	">>!	"s   /2D! !	E *D;5E ;E c                     | j                   }| j                  j                         | _         | j                   j                  | _        |S r(   )r  r  popr  r+   r   s     r"   pop_markz_Unpickler.pop_mark  s5    

^^'')
jj''r!   c                     t        d      )Nz%unsupported persistent id encountered)r   r&  s     r"   persistent_loadz_Unpickler.persistent_load  s    EFFr!   c                 x    | j                  d      d   }d|cxk  r	t        k  sn t        d|z        || _        y )Nr   r   zunsupported pickle protocol: %d)r   r   r   r   )r+   r   s     r"   
load_protoz_Unpickler.load_proto  s9    		!QE--->FGG
r!   r   c                     t        d| j                  d            \  }|t        j                  kD  rt	        d|z        | j
                  j                  |       y )Nr      zframe size > sys.maxsize: %d)r   r   r   r
   r   r  r   r   s     r"   r   z_Unpickler.load_frame  sG    T499Q<0
#;jHII!!*-r!   c                     	 | j                         d d j                  d      }| j	                  | j                  |             y # t        $ r t        d      w xY w)Nr   r   r"  )r   decodeUnicodeDecodeErrorr   r  r  r&  s     r"   load_persidz_Unpickler.load_persid  sc    	F--/#2&--g6C 	D((-. " 	F!DF F	Fs   "A Ac                 x    | j                   j                         }| j                  | j                  |             y r(   )r  r  r  r  r&  s     r"   load_binpersidz_Unpickler.load_binpersid  s)    jjnnD((-.r!   c                 &    | j                  d        y r(   r  ry   s    r"   	load_nonez_Unpickler.load_none      Dr!   c                 &    | j                  d       y )NFr  ry   s    r"   
load_falsez_Unpickler.load_false  s    Er!   c                 &    | j                  d       y )NTr  ry   s    r"   	load_truez_Unpickler.load_true  r  r!   c                     | j                         }|t        dd  k(  rd}n|t        dd  k(  rd}nt        |d      }| j	                  |       y )Nr   FTr   )r   rF  rE  r   r  )r+   r   vals      r"   load_intz_Unpickler.load_int  sJ    }}59CT!"XCdA,CCr!   c                 ^    | j                  t        d| j                  d            d          y )NrK  r   r   r  r   r   ry   s    r"   load_binintz_Unpickler.load_binint  "    F41.q12r!   c                 J    | j                  | j                  d      d          y r  )r  r   ry   s    r"   load_binint1z_Unpickler.load_binint1  s    DIIaLO$r!   c                 ^    | j                  t        d| j                  d            d          y )NrJ  r   r   r  ry   s    r"   load_binint2z_Unpickler.load_binint2   r  r!   c                 ~    | j                         d d }|r|d   dk(  r|d d }| j                  t        |d             y )Nr   L   r   )r   r  r   )r+   r  s     r"   	load_longz_Unpickler.load_long  s?    mmocr"3r7g%cr(CCQK r!   c                     | j                  d      d   }| j                  |      }| j                  t        |             y r  )r   r  r   r   s      r"   
load_long1z_Unpickler.load_long1  s1    IIaLOyy|K%&r!   c                     t        d| j                  d            \  }|dk  rt        d      | j                  |      }| j                  t	        |             y )NrK  r   r   z#LONG pickle has negative byte count)r   r   r   r  r   r   s      r"   
load_long4z_Unpickler.load_long4  sI    D$))A,'q5!"GHHyy|K%&r!   c                 Z    | j                  t        | j                         d d              y Nr   )r  r  r   ry   s    r"   
load_floatz_Unpickler.load_float  s     E$--/#2./0r!   c                 ^    | j                  t        d| j                  d            d          y )NrV  r  r   r  ry   s    r"   load_binfloatz_Unpickler.load_binfloat  r  r!   c                 p    | j                   dk(  r|S |j                  | j                   | j                        S )Nr]  )r  r  r  r*   s     r"   _decode_stringz_Unpickler._decode_string"  s.     ==G#L<<t{{;;r!   c                     | j                         d d }t        |      dk\  r|d   |d   k(  r|d   dv r|dd }nt        d      | j                  | j	                  t        j                  |      d                y )Nr   r   r   s   "'r   z)the STRING opcode argument must be quoted)r   r   r   r  r
  r^  escape_decoder   s     r"   load_stringz_Unpickler.load_string+  sw    }}s#t9>d1gb1d1g6G":D!"MNND''(<(<T(B1(EFGr!   c                     t        d| j                  d            \  }|dk  rt        d      | j                  |      }| j                  | j	                  |             y )NrK  r   r   z(BINSTRING pickle has negative byte count)r   r   r   r  r
  r+   r   r   s      r"   load_binstringz_Unpickler.load_binstring5  sO    dDIIaL)7!"LMMyy~D''-.r!   c                     t        d| j                  d            \  }|t        kD  rt        dt        z        | j	                  | j                  |             y )Nr   r   z2BINBYTES exceeds system's maximum size of %d bytesr   r   r
   r   r  r+   r   s     r"   load_binbytesz_Unpickler.load_binbytes>  M    dDIIaL)=! #029#: ; ;DIIcN#r!   c                 \    | j                  t        | j                         d d d             y )Nr   r{  )r  r  r   ry   s    r"   load_unicodez_Unpickler.load_unicodeF  s#    C,.BCDr!   c                     t        d| j                  d            \  }|t        kD  rt        dt        z        | j	                  t        | j                  |      dd             y )Nr   r   z4BINUNICODE exceeds system's maximum size of %d bytesrt  ru  r   r   r
   r   r  r  r  s     r"   load_binunicodez_Unpickler.load_binunicodeJ  V    dDIIaL)=! #029#: ; ;C		#ABr!   c                     t        d| j                  d            \  }|t        kD  rt        dt        z        | j	                  t        | j                  |      dd             y )Nr   r  z5BINUNICODE8 exceeds system's maximum size of %d bytesrt  ru  r  r  s     r"   load_binunicode8z_Unpickler.load_binunicode8R  r  r!   c                     t        d| j                  d            \  }|t        kD  rt        dt        z        | j	                  | j                  |             y )Nr   r  z3BINBYTES8 exceeds system's maximum size of %d bytesr  r  s     r"   load_binbytes8z_Unpickler.load_binbytes8Z  r  r!   c                     t        d| j                  d            \  }|t        kD  rt        dt        z        t	        |      }| j                  |       | j                  |       y )Nr   r  z4BYTEARRAY8 exceeds system's maximum size of %d bytes)r   r   r
   r   re  r   r  )r+   r   bs      r"   load_bytearray8z_Unpickler.load_bytearray8b  sY    dDIIaL)=! #029#: ; ;cNaAr!   c                     | j                   t        d      	 t        | j                         }| j	                  |       y # t        $ r t        d      w xY w)NzLpickle stream refers to out-of-band data but no *buffers* argument was givenznot enough out-of-band buffers)r  r   nextStopIterationr  )r+   r   s     r"   load_next_bufferz_Unpickler.load_next_bufferl  sb    == ! #H I I	Dt}}%C 	C  	D!"BCC	Ds   A   Ac                     | j                   d   }t        |      5 }|j                  s|j                         | j                   d<   d d d        y # 1 sw Y   y xY wr  )r  
memoryviewrl  
toreadonly)r+   r   rp  s      r"   load_readonly_bufferz_Unpickler.load_readonly_bufferw  sG    jjn_ 	0::!"

2	0 	0 	0s   *AAc                     | j                  d      d   }| j                  |      }| j                  | j                  |             y r  )r   r  r
  r  s      r"   load_short_binstringz_Unpickler.load_short_binstring~  s7    iil1oyy~D''-.r!   c                 l    | j                  d      d   }| j                  | j                  |             y r  )r   r  r  s     r"   load_short_binbytesz_Unpickler.load_short_binbytes  s'    iil1oDIIcN#r!   c                     | j                  d      d   }| j                  t        | j                  |      dd             y )Nr   r   rt  ru  )r   r  r  r  s     r"   load_short_binunicodez _Unpickler.load_short_binunicode  s0    iil1oC		#ABr!   c                 X    | j                         }| j                  t        |             y r(   )r  r  r  r  s     r"   
load_tuplez_Unpickler.load_tuple  s    E%L!r!   c                 &    | j                  d       y )Nr    r  ry   s    r"   load_empty_tuplez_Unpickler.load_empty_tuple      Br!   c                 >    | j                   d   f| j                   d<   y r  r  ry   s    r"   load_tuple1z_Unpickler.load_tuple1  s    **R.*

2r!   c                 \    | j                   d   | j                   d   fg| j                   dd  y )Nr   r   r7  ry   s    r"   load_tuple2z_Unpickler.load_tuple2  s)     JJrNDJJrN;<

23r!   c                 x    | j                   d   | j                   d   | j                   d   fg| j                   dd  y )Nr   r   r7  ry   s    r"   load_tuple3z_Unpickler.load_tuple3  s3     JJrNDJJrNDJJrNKL

23r!   c                 &    | j                  g        y r(   r  ry   s    r"   load_empty_listz_Unpickler.load_empty_list  r5  r!   c                 &    | j                  i        y r(   r  ry   s    r"   load_empty_dictionaryz _Unpickler.load_empty_dictionary  r5  r!   c                 6    | j                  t                      y r(   )r  r  ry   s    r"   load_empty_setz_Unpickler.load_empty_set  s    CEr!   c                 X    | j                         }| j                  t        |             y r(   )r  r  r  r  s     r"   load_frozensetz_Unpickler.load_frozenset  s    Ie$%r!   c                 F    | j                         }| j                  |       y r(   )r  r  r  s     r"   	load_listz_Unpickler.load_list  s    Er!   c                     | j                         }t        dt        |      d      D ci c]  }||   ||dz       }}| j                  |       y c c}w )Nr   r   r   )r  ranger   r  )r+   r   r  ds       r"   	load_dictz_Unpickler.load_dict  sX    As5z1-/ 1XuQqSz! / /A/s   Ac           	         |st        |t              rt        |d      r	  || }n|j                  |      }| j                  |       y # t        $ r4}t        d|j                  dt        |      |j                        d }~ww xY w)N__getinitargs__zin constructor for z: )	r  r  r   r   r   r  __traceback__r+  r  )r+   klassr7  r)   errs        r"   _instantiatez_Unpickler._instantiate  s    
5$/E,-Ot
 MM%(EE  O!&S!;<?<M<MO OOs   A	 		B/BBc                     | j                         d d j                  d      }| j                         d d j                  d      }| j                  ||      }| j                  || j	                                y )Nr   r   )r   r  
find_classrQ  r  r+   r   r   rO  s       r"   	load_instz_Unpickler.load_inst  sb    "%,,W5}}s#**73-%1r!   c                 j    | j                         }|j                  d      }| j                  ||       y Nr   )r  r  rQ  )r+   r7  r=  s      r"   load_objz_Unpickler.load_obj  s*    }}hhqk#t$r!   c                     | j                   j                         }| j                   j                         } |j                  |g| }| j                  |       y r(   r  r  r+  r  )r+   r7  r=  r   s       r"   load_newobjz_Unpickler.load_newobj  sC    zz~~jjnnckk#%%Cr!   c                     | j                   j                         }| j                   j                         }| j                   j                         } |j                  |g|i |}| j                  |       y r(   rZ  )r+   r>  r7  r=  r   s        r"   load_newobj_exz_Unpickler.load_newobj_ex  sX    !zz~~jjnnckk#///Cr!   c                     | j                         d d j                  d      }| j                         d d j                  d      }| j                  ||      }| j                  |       y )Nr   rt  )r   r  rS  r  rT  s       r"   load_globalz_Unpickler.load_global  sX    "%,,W5}}s#**73-Er!   c                    | j                   j                         }| j                   j                         }t        |      t        ust        |      t        urt	        d      | j                  | j                  ||             y )NzSTACK_GLOBAL requires str)r  r  r  r  r   r  rS  )r+   r   r   s      r"   load_stack_globalz_Unpickler.load_stack_global  s\    zz~~!:S DL$;!"=>>DOOFD12r!   c                 N    | j                  d      d   }| j                  |       y r  )r   get_extensionr+   r  s     r"   	load_ext1z_Unpickler.load_ext1  s!    yy|A4 r!   c                 `    t        d| j                  d            \  }| j                  |       y )NrJ  r   r   r   rc  rd  s     r"   	load_ext2z_Unpickler.load_ext2  &    tTYYq\*4 r!   c                 `    t        d| j                  d            \  }| j                  |       y )NrK  r   rg  rd  s     r"   	load_ext4z_Unpickler.load_ext4  ri  r!   c                    g }t        j                  ||      }||ur| j                  |       y t        j                  |      }|s|dk  rt	        d      t        d|z         | j                  | }|t         |<   | j                  |       y )Nr   zEXT specifies code <= 0zunregistered extension code %d)r   r  r  r   r   r   rS  )r+   r  nilr   r  s        r"   rc  z_Unpickler.get_extension  s    ""4-c>KK $$T*qy%&?@@=DEEdoos#!$Cr!   c                    t        j                  d||       | j                  dk  r^| j                  rR||ft        j
                  v rt        j
                  ||f   \  }}n%|t        j                  v rt        j                  |   }t        |d       | j                  dk\  r t        t         j                  |   |      d   S t        t         j                  |   |      S )Nzpickle.find_classr   r   r  r   )r   auditr   r   r  NAME_MAPPINGIMPORT_MAPPINGr  r   r   r   )r+   r   r   s      r"   rS  z_Unpickler.find_class  s    		%vt4::>d..~!<!<<-::FD>J>888'66v>6#::? V!4d;A>>3;;v.55r!   c                 V    | j                   }|j                         }|d   } || |d<   y r  r  r  )r+   r  r7  r6  s       r"   load_reducez_Unpickler.load_reduce*  s,    

yy{Ry$Kb	r!   c                 X    | j                   r| j                   d= y | j                          y r  )r  r  ry   s    r"   load_popz_Unpickler.load_pop1  s    ::

2MMOr!   c                 $    | j                          y r(   )r  ry   s    r"   load_pop_markz_Unpickler.load_pop_mark8  s    r!   c                 @    | j                  | j                  d          y r  )r  r  ry   s    r"   load_dupz_Unpickler.load_dup<  s    DJJrN#r!   c                     t        | j                         d d       }	 | j                  | j                  |          y # t        $ r d| }t        |      d w xY w)Nr   Memo value not found at index )r   r   r  r   r  r   )r+   r  msgs      r"   load_getz_Unpickler.load_get@  sZ    $%	1KK		!% 	121#6C!#&D0	1s	   = Ac                     | j                  d      d   }	 | j                  | j                  |          y # t        $ r}d| }t	        |      d d }~ww xY w)Nr   r   r|  )r   r  r   r  r   r+   r  excr}  s       r"   load_bingetz_Unpickler.load_bingetI  sU    IIaLO	1KK		!% 	121#6C!#&D0	1s   5 	AAAc                     t        d| j                  d            \  }	 | j                  | j                  |          y # t        $ r}d| }t        |      d d }~ww xY w)Nr   r   r|  )r   r   r  r   r  r   r  s       r"   load_long_bingetz_Unpickler.load_long_bingetR  sZ    D$))A,'	1KK		!% 	121#6C!#&D0	1s   > 	AAAc                     t        | j                         d d       }|dk  rt        d      | j                  d   | j                  |<   y )Nr   r   znegative PUT argument)r   r   r   r  r   r  s     r"   load_putz_Unpickler.load_put[  sA    $%q5455zz"~		!r!   c                     | j                  d      d   }|dk  rt        d      | j                  d   | j                  |<   y )Nr   r   znegative BINPUT argumentr   )r   r   r  r   r  s     r"   load_binputz_Unpickler.load_binputb  s;    IIaLOq5788zz"~		!r!   c                     t        d| j                  d            \  }|t        kD  rt        d      | j                  d   | j
                  |<   y )Nr   r   znegative LONG_BINPUT argumentr   )r   r   r
   r   r  r   r  s     r"   load_long_binputz_Unpickler.load_long_binputi  s@    D$))A,'w;<==zz"~		!r!   c                 R    | j                   }| j                  d   |t        |      <   y r  )r   r  r   )r+   r   s     r"   load_memoizez_Unpickler.load_memoizep  s     yy**R.SYr!   c                 h    | j                   }|j                         }|d   }|j                  |       y r  )r  r  r  )r+   r  r)   r  s       r"   load_appendz_Unpickler.load_appendu  s+    

		RyEr!   c                     | j                         }| j                  d   }	 |j                  } ||       y # t        $ r Y nw xY w|j                  }|D ]
  } ||        y r  )r  r  extendr   r  )r+   r   list_objr  r  r  s         r"   load_appendsz_Unpickler.load_appends|  si    ::b>	__F 5M	  		  	D4L	s   6 	AAc                 p    | j                   }|j                         }|j                         }|d   }|||<   y r  rs  )r+   r  r)   r  r  s        r"   load_setitemz_Unpickler.load_setitem  s3    

		iikRyS	r!   c                     | j                         }| j                  d   }t        dt        |      d      D ]  }||dz      |||   <    y )Nr   r   r   r   )r  r  rI  r   )r+   r   r  r  s       r"   load_setitemsz_Unpickler.load_setitems  sK    zz"~q#e*a( 	*A"1q5\DqN	*r!   c                     | j                         }| j                  d   }t        |t              r|j	                  |       y |j
                  }|D ]
  } ||        y r  )r  r  r  r  updateadd)r+   r   set_objr  r  s        r"   load_additemsz_Unpickler.load_additems  sO    **R.gs#NN5!++C D	r!   c                    | j                   }|j                         }|d   }t        |dd       }|	 ||       y d }t        |t              rt        |      dk(  r|\  }}|rV|j                  }t        j                  }|j                         D ]'  \  }}	t        |      t        u r|	| ||      <   #|	||<   ) |r&|j                         D ]  \  }}	t        |||	        y y )Nr   __setstate__r   )r  r  r   r  r  r   __dict__r   internr   r  r  setattr)
r+   r  r8  instsetstate	slotstate	inst_dictr  r  r  s
             r"   
load_buildz_Unpickler.load_build  s    

		Ry46UO	eU#E
a$E9IZZF %17c>+,IfQi(#$IaL	%
 !) $1a#$ r!   c                     | j                   j                  | j                         g | _        | j                  j                  | _        y r(   )r  r  r  ry   s    r"   	load_markz_Unpickler.load_mark  s0    djj)
jj''r!   c                 L    | j                   j                         }t        |      r(   )r  r  r&   r*   s     r"   	load_stopz_Unpickler.load_stop  s    

 Elr!   )r   r   r   r,   r   r  r  r  r  r   r   r   r  r$  r  r#  r  r@  r  rD  r  rC  r  rQ  r  rN  r  rL  r  rM  r  rR  r  rO  r  rP  r  rX  r  rW  r
  r  STRINGr  	BINSTRINGr  ra  r  r  r  r~  r  r}  r  r`  r"  rf  r&  rn  r*  ro  r,  SHORT_BINSTRINGr.  r_  r0  r|  r2  r  r4  r  r8  TUPLE1r:  r5  r=  TUPLE3r?  r  rA  r  rC  r  rE  r  rG  r  rK  r  rQ  rU  INSTrX  OBJr[  r0  r]  r.  r_  r  ra  r  re  r  rh  r  rk  r  rc  rS  rt  r/  rv  r1  rx  r  rz  DUPr~  r  r  r  r  r  r  r   r  r   r  r   r  r   r  r  r  r  r  r  r  r  r  r  r  r4  r  r  r  r   r    r!   r"   r  r  i  s   ,0!(D.'`">G H
 $HU1X.
 $HU1X/ &HVAY/ ,HYq\!HT!W&HXa[$HWQZ  HSV3%HVAY%'HWQZ3'HWQZ!
 "HT!W' $HU1X' $HU1X1#HU1X3)HXa[<H &HVAY/ ,HYq\$ *HXa[E'HWQZC .HZ]C  0H[^$ ,HYq\ .HZ]  0H[^0
 $8H_Q / $8H_Q $ #6H^AC %:Ha !" $HU1X/H[^+%HVAY=%HVAYM%HVAY-HZ]3HZ]+HYq\& ,HYq\ "HT!W
 "HT!W
2
 "HT!W%
  HSV
 &HVAY ,HYq\
 &HVAY3 !2H\!_! "HT!W! "HT!W! "HT!W 6 
 &HVAY
  HSV)HXa[$HSV1  HSV1 &HVAY1  0H[^&
  HSV&
 &HVAY&
  0H[^) (HWQZ
 &HVAY  (HWQZ (HWQZ*
 *HXa[ *HXa[$, $HU1X( "HT!W "HT!Wr!   r  r   c                @    t        ||||      j                  |        y Nr   )r   r   )r   r   r   r   r   s        r"   _dumpr    s    T8,..2d3ir!   c                    t        j                         }t        ||||      j                  |        |j	                         }t        |t              sJ |S r  )rw   rx   r   r   getvaluer  r  )r   r   r   r   r   ress         r"   _dumpsr    sG    


AQk,..2d3i
**,Cc;'''Jr!   r  r  r  c                >    t        | ||||      j                         S )Nr   r  r  r  )r  r   )r   r   r  r  r  s        r"   _loadr    s!    dW&v77;tv>r!   c                   t        | t              rt        d      t        j                  |       }t        |||||      j                         S )Nz%Can't load pickle from unicode stringr  )r  r  r   rw   rx   r  r   )sr   r  r  r  r   s         r"   _loadsr    sD    !S?@@::a=DdW'88<?r!   c                  *    dd l } | j                         S rW  )doctesttestmod)r  s    r"   _testr    s    ??r!   r   z$display contents of the pickle files)descriptionpickle_file*zthe pickle file)nargshelpz-tz--test
store_truezrun self-test suite)actionr  z-vz)run verbosely; only affects self-test run-rbr(   )r   typesr   copyregr   r   r   r   	itertoolsr   	functoolsr	   r   r
   structr   r   rerw   r^  r  __all___pickler   r  r  r  r]  re  r  format_versioncompatible_formatsr   r   	Exceptionr   r   r   r&   r  r   r1  r  r  rX  rQ  rN  rL  rR  rM  r@  r$  r#  r/  r  r  r  r  r~  r  r4  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r  r  r  rW  rE  rF  r   r0  r  r  r  r  r5  r  rC  rD  rO  rP  r  ra  r_  r|  r}  r`  r  r  r  r.  r  r   r   rf  rn  ro  r  dirmatchrr   r   r   r   r   r   r   r  r  r  r  r  r   r   r   r   r   r   r  r   argparseArgumentParserparseradd_argument
parse_argsr7  testr  
print_helppprintfnstdinbufferr   openr   )r   s   0r"   <module>r     s[  2  " M M   
   	 	  : $NN>" i     
  	) 		K 			k 		I  		


 7   				 
 35DaHBHH-?$CD E< <~6D 6Dv&<A.S Sp`	" `	"J84 8dD   $gh>
 !%wx?<
 
 
  z$X$$:<F
)  + h|"  $ \8  : Dyy&& #9syy//0Cb$ &1"1g&c"#+ _6    b Ej1  <!:GY$feV;D%u<D& &s<   K% K3K3 K8 =	L%K0/K08LLL	