grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026B kjÖŒû²gã @s.dZddddddddd d d d g Zd dlZd dlZd dlZd dlZd dlZd dlmZd dl Z d dl Z d dl Z d dl Z d dl mZd dlmZejdded�Zeƒ ej¡ejdd„ƒZdd„Zdd„Zdd„Zdd„ZGdd„dƒZdZe  d¡Z dJdd „Z!d!d"„Z"e  d#e j#¡Z$d$d%„Z%d&d'„Z&d(d)„Z'Gd*d+„d+ƒZ(Gd,d-„d-ƒZ)Gd.d/„d/e)ƒZ*d0d1„Z+Gd2d„de,ƒZ-d3d4d5d6d7œZ.e/ƒZ0Gd8d9„d9ƒZ1d:d;„Z2e3e4e5eje6fZ7Gdd?„Z9e:e;e+e(e*d@�eddAe;dBœdDd „Z?e:dAdEdFœdGd „Z@e:dEdAdHœdId „ZAdS)KaÕplistlib.py -- a tool to generate and parse MacOSX .plist files. The property list (.plist) file format is a simple XML pickle supporting basic object types, like dictionaries, lists, numbers and strings. Usually the top level object is a dictionary. To write out a plist file, use the dump(value, file) function. 'value' is the top level object, 'file' is a (writable) file object. To parse a plist from a file, use the load(file) function, with a (readable) file object as the only argument. It returns the top level object (again, usually a dictionary). To work with plist data in bytes objects, you can use loads() and dumps(). Values can be strings, integers, floats, booleans, tuples, lists, dictionaries (but only with string keys), Data, bytes, bytearray, or datetime.datetime objects. Generate Plist example: pl = dict( aString = "Doodah", aList = ["A", "B", 12, 32.1, [1, 2, 3]], aFloat = 0.1, anInt = 728, aDict = dict( anotherString = "", aUnicodeValue = "M\xe4ssig, Ma\xdf", aTrueValue = True, aFalseValue = False, ), someData = b"", someMoreData = b"" * 10, aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())), ) with open(fileName, 'wb') as fp: dump(pl, fp) Parse Plist example: with open(fileName, 'rb') as fp: pl = load(fp) print(pl["aKey"]) Ú readPlistÚ writePlistÚreadPlistFromBytesÚwritePlistToBytesÚDataÚInvalidFileExceptionÚFMT_XMLÚ FMT_BINARYÚloadÚdumpÚloadsÚdumpséN)ÚBytesIO)Úwarn)Ú ParserCreateÚ PlistFormatzFMT_XML FMT_BINARY)Úmodulec cs2t|tƒr(t||ƒ� }|VWdQRXn|VdS)N)Ú isinstanceÚstrÚopen)Ú pathOrFileÚmodeÚfp©rú-/opt/alt/python37/lib64/python3.7/plistlib.pyÚ _maybe_openOs  rc Cs0tdtdƒt|dƒ�}t|ddd�SQRXdS)z¯ Read a .plist from a path or file. pathOrFile should either be a file name, or a readable binary file object. This function is deprecated, use load instead. z8The readPlist function is deprecated, use load() insteadéÚrbNF)ÚfmtÚuse_builtin_types)rÚDeprecationWarningrr )rrrrrrYs c Cs8tdtdƒt|dƒ�}t||tddd�WdQRXdS)z¥ Write 'value' to a .plist file. 'pathOrFile' may either be a file name or a (writable) file object. This function is deprecated, use dump instead. z9The writePlist function is deprecated, use dump() insteadrÚwbTF)rÚ sort_keysÚskipkeysN)rr rr r)Úvaluerrrrrrfs cCstdtdƒtt|ƒddd�S)z} Read a plist data from a bytes object. Return the root object. This function is deprecated, use loads instead. zBThe readPlistFromBytes function is deprecated, use loads() insteadrNF)rr)rr r r)ÚdatarrrrsscCs,tdtdƒtƒ}t||tddd�| ¡S)zp Return 'value' as a plist-formatted bytes object. This function is deprecated, use dumps instead. zAThe writePlistToBytes function is deprecated, use dumps() insteadrTF)rr"r#)rr rr rÚgetvalue)r$Úfrrrr~s c@s>eZdZdZdd„Zedd„ƒZddd„Zd d „Zd d „Z d S)rz] Wrapper for binary data. This class is deprecated, use a bytes object instead. cCst|tƒstdƒ‚||_dS)Nzdata must be as bytes)rÚbytesÚ TypeErrorr%)Úselfr%rrrÚ__init__’s z Data.__init__cCs |t|ƒƒS)N)Ú_decode_base64)Úclsr%rrrÚ fromBase64—szData.fromBase64éLcCs t|j|ƒS)N)Ú_encode_base64r%)r*Ú maxlinelengthrrrÚasBase64�sz Data.asBase64cCs4t||jƒr|j|jkSt|tƒr,|j|kStSdS)N)rÚ __class__r%r(ÚNotImplemented)r*ÚotherrrrÚ__eq__ s     z Data.__eq__cCsd|jjt|jƒfS)Nz%s(%s))r3Ú__name__Úreprr%)r*rrrÚ__repr__¨sz Data.__repr__N)r/) r7Ú __module__Ú __qualname__Ú__doc__r+Ú classmethodr.r2r6r9rrrrr‹s   sŽ zv[\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f]r/cCsT|dd}g}x8tdt|ƒ|ƒD]$}||||…}| t |¡¡q"Wd |¡S)Néér ó)ÚrangeÚlenÚappendÚbinasciiZ b2a_base64Újoin)Úsr1Z maxbinsizeÚpiecesÚiÚchunkrrrr0Ãs  r0cCs(t|tƒrt | d¡¡St |¡SdS)Nzutf-8)rrrDZ a2b_base64Úencode)rFrrrr,Ìs r,z{(?P\d\d\d\d)(?:-(?P\d\d)(?:-(?P\d\d)(?:T(?P\d\d)(?::(?P\d\d)(?::(?P\d\d))?)?)?)?)?ZcCsNd}t |¡ ¡}g}x,|D]$}||}|dkr2P| t|ƒ¡qWtj|ŽS)N)ÚyearÚmonthÚdayÚhourÚminuteÚsecond)Ú _dateParserÚmatchÚ groupdictrCÚintÚdatetime)rFÚorderZgdZlstÚkeyÚvalrrrÚ_date_from_stringÙs rYcCs d|j|j|j|j|j|jfS)Nz%04d-%02d-%02dT%02d:%02d:%02dZ)rKrLrMrNrOrP)ÚdrrrÚ_date_to_stringås r[cCsZt |¡}|dk rtdƒ‚| dd¡}| dd¡}| dd¡}| dd¡}| d d ¡}|S) Nzz>)Ú_controlCharPatÚsearchÚ ValueErrorÚreplace)ÚtextÚmrrrÚ_escapeës      rgc@s¬eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)S)*Ú _PlistParsercCs"g|_d|_d|_||_||_dS)N)ÚstackÚ current_keyÚrootÚ_use_builtin_typesÚ _dict_type)r*rÚ dict_typerrrr+øs z_PlistParser.__init__cCsBtƒ|_|j|j_|j|j_|j|j_|j|j_ |j  |¡|j S)N) rÚparserÚhandle_begin_elementZStartElementHandlerÚhandle_end_elementZEndElementHandlerÚ handle_dataZCharacterDataHandlerÚhandle_entity_declZEntityDeclHandlerZ ParseFilerk)r*ZfileobjrrrÚparseÿs     z_PlistParser.parsecCs tdƒ‚dS)Nz8XML entity declarations are not supported in plist files)r)r*Z entity_nameZis_parameter_entityr$ÚbaseZ system_idZ public_idZ notation_namerrrrssz_PlistParser.handle_entity_declcCs*g|_t|d|dƒ}|dk r&||ƒdS)NZbegin_)r%Úgetattr)r*ÚelementÚattrsÚhandlerrrrrpsz!_PlistParser.handle_begin_elementcCs"t|d|dƒ}|dk r|ƒdS)NZend_)rv)r*rwryrrrrqsz_PlistParser.handle_end_elementcCs|j |¡dS)N)r%rC)r*r%rrrrrsz_PlistParser.handle_datacCsŒ|jdk rFt|jdtiƒƒs.td|jjƒ‚||jd|j<d|_nB|jsT||_n4t|jdtgƒƒsxtd|jjƒ‚|jd |¡dS)Néÿÿÿÿzunexpected element at line %d) rjrriÚtypercroÚCurrentLineNumberrkrC)r*r$rrrÚ add_objects   z_PlistParser.add_objectcCsd |j¡}g|_|S)NÚ)rEr%)r*r%rrrÚget_data,s z_PlistParser.get_datacCs"| ¡}| |¡|j |¡dS)N)rmr}rirC)r*rxrZrrrÚ begin_dict3s z_PlistParser.begin_dictcCs*|jrtd|j|jjfƒ‚|j ¡dS)Nz%missing value for key '%s' at line %d)rjrcror|riÚpop)r*rrrÚend_dict8sz_PlistParser.end_dictcCs8|jst|jdtiƒƒs*td|jjƒ‚| ¡|_dS)Nrzzunexpected key at line %d)rjrrir{rcror|r)r*rrrÚend_key>s z_PlistParser.end_keycCsg}| |¡|j |¡dS)N)r}rirC)r*rxÚarrrÚ begin_arrayDs z_PlistParser.begin_arraycCs|j ¡dS)N)rir�)r*rrrÚ end_arrayIsz_PlistParser.end_arraycCs| d¡dS)NT)r})r*rrrÚend_trueLsz_PlistParser.end_truecCs| d¡dS)NF)r})r*rrrÚ end_falseOsz_PlistParser.end_falsecCs| t| ¡ƒ¡dS)N)r}rTr)r*rrrÚ end_integerRsz_PlistParser.end_integercCs| t| ¡ƒ¡dS)N)r}Úfloatr)r*rrrÚend_realUsz_PlistParser.end_realcCs| | ¡¡dS)N)r}r)r*rrrÚ end_stringXsz_PlistParser.end_stringcCs2|jr| t| ¡ƒ¡n| t | ¡¡¡dS)N)rlr}r,rrr.)r*rrrÚend_data[sz_PlistParser.end_datacCs| t| ¡ƒ¡dS)N)r}rYr)r*rrrÚend_datebsz_PlistParser.end_dateN)r7r:r;r+rtrsrprqrrr}rr€r‚rƒr…r†r‡rˆr‰r‹rŒr�rŽrrrrrh÷s( rhc@s8eZdZddd„Zdd„Zdd„Zdd d „Zd d „Zd S)Ú_DumbXMLWriterr ú cCs||_g|_||_||_dS)N)ÚfileriÚ _indent_levelÚindent)r*r‘Ú indent_levelr“rrrr+gsz_DumbXMLWriter.__init__cCs,|j |¡| d|¡|jd7_dS)Nz<%s>é)rirCÚwritelnr’)r*rwrrrÚ begin_elementms z_DumbXMLWriter.begin_elementcCs |jd8_| d|¡dS)Nr•z)r’r–)r*rwrrrÚ end_elementrsz_DumbXMLWriter.end_elementNcCs8|dk r&t|ƒ}| d|||f¡n| d|¡dS)Nz <%s>%sz<%s/>)rgr–)r*rwr$rrrÚsimple_elementxsz_DumbXMLWriter.simple_elementcCsH|r8t|tƒr| d¡}|j |j|j¡|j |¡|j d¡dS)Nzutf-8ó )rrrJr‘Úwriter’r“)r*Úlinerrrr–€s    z_DumbXMLWriter.writeln)r r�)N)r7r:r;r+r—r˜r™r–rrrrr�fs   r�c@sFeZdZddd„Zdd „Zd d „Zd d „Zdd„Zdd„Zdd„Z dS)Ú _PlistWriterr ó r•TFcCs.|r| t¡t ||||¡||_||_dS)N)r›Ú PLISTHEADERr�r+Ú _sort_keysÚ _skipkeys)r*r‘r”r“Z writeHeaderr"r#rrrr+�s  z_PlistWriter.__init__cCs"| d¡| |¡| d¡dS)Nzz)r–Ú write_value)r*r$rrrr›—s  z_PlistWriter.writecCs4t|tƒr| d|¡�n|dkr0| d¡�n|dkrD| d¡nìt|tƒr‚d|krbdkrxnn| dd |¡nt|ƒ‚n®t|tƒrž| d t|ƒ¡n’t|tƒr´| |¡n|t|t ƒrÊ|  |¡nft|t t fƒrä|  |¡nLt|tjƒ�r| d t|ƒ¡n,t|ttfƒ�r | |¡ntd t|ƒƒ‚dS) NÚstringTÚtrueFZfalselûÿÿÿlZintegerz%dÚrealZdatezunsupported type: %s)rrr™rTÚ OverflowErrorrŠr8ÚdictÚ write_dictrÚ write_datar(Ú bytearrayÚ write_bytesrUr[ÚtupleÚlistÚ write_arrayr)r{)r*r$rrrr¢œs.           z_PlistWriter.write_valuecCs| |j¡dS)N)r«r%)r*r%rrrr©Ász_PlistWriter.write_datacCs~| d¡|jd8_tddt|j dd¡|jƒƒ}x&t||ƒ d¡D]}|rL| |¡qLW|jd7_|  d¡dS)Nr%r•ér/ržs rš) r—r’ÚmaxrBr“rdr0Úsplitr–r˜)r*r%r1rœrrrr«Äs z_PlistWriter.write_bytescCs†|rx| d¡|jr"t| ¡ƒ}n| ¡}x@|D]8\}}t|tƒsR|jrJq0tdƒ‚| d|¡|  |¡q0W|  d¡n | d¡dS)Nr§zkeys must be stringsrW) r—r ÚsortedÚitemsrrr¡r)r™r¢r˜)r*rZr³rWr$rrrr¨Ñs    z_PlistWriter.write_dictcCs@|r2| d¡x|D]}| |¡qW| d¡n | d¡dS)NÚarray)r—r¢r˜r™)r*r´r$rrrr®ås    z_PlistWriter.write_arrayN)r ržr•TF) r7r:r;r+r›r¢r©r«r¨r®rrrrr�Œs % r�cCs”d}x|D]}| |¡r dSq WxntjdftjdftjdffD]N\}}| |¡sRq>x8|D]0}|| d¡ |¡}|dt|ƒ…|krXdSqXWq>WdS)N)séc@s@eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dS)Ú_BinaryPlistParsera Read or write a binary plist file, following the description of the binary format. Raise InvalidFileException in case of error, otherwise return the root object. see also: http://opensource.apple.com/source/CF/CF-744.18/CFBinaryPList.c cCs||_||_dS)N)rlrm)r*rrnrrrr+!sz_BinaryPlistParser.__init__c Cs¨y|||_|j dtj¡|j d¡}t|ƒdkr6tƒ‚t d|¡\}|_ }}}|j |¡|  ||¡|_ t g||_ | |¡Stttjttfk r¢tƒ‚YnXdS)Niàÿÿÿé z>6xBBQQQ)Ú_fpÚseekÚosÚSEEK_ENDÚreadrBrÚstructÚunpackÚ _ref_sizeÚ _read_intsÚ_object_offsetsÚ _undefinedÚ_objectsÚ _read_objectÚOSErrorÚ IndexErrorÚerrorr¦rc)r*rÚtrailerÚ offset_sizeÚ num_objectsÚ top_objectÚoffset_table_offsetrrrrt%s      z_BinaryPlistParser.parsecCsL|dkrH|j d¡dd@}d|>}dt|}t ||j |¡¡dS|S)z$ return the size of the next object.ér•r r?r`)rËrÏÚ_BINARY_FORMATrÐrÑ)r*ÚtokenLrfrFr'rrrÚ _get_size>s  z_BinaryPlistParser._get_sizecst|j ˆ|¡‰ˆtkr2t d|›tˆ›�ˆ¡SˆrFtˆƒˆ|krLtƒ‚t‡‡fdd„tdˆ|ˆƒDƒƒSdS)Nr`c3s&|]}t ˆ||ˆ…d¡VqdS)ÚbigN)rTÚ from_bytes)Ú.0rH)r%Úsizerrú Osz0_BinaryPlistParser._read_ints..r ) rËrÏrárÐrÑrBrr¬rA)r*Únrçr)r%rçrrÓHsz_BinaryPlistParser._read_intscCs| ||j¡S)N)rÓrÒ)r*rérrrÚ _read_refsRsz_BinaryPlistParser._read_refscsøˆj|}|tk r|Sˆj|}ˆj |¡ˆj d¡d}|d@|d@}}|dkr^d}�nŒ|dkrnd}�n||dkr~d }�nl|dkrŽd }�n\|d krºtjˆj d|>¡d |d kd�}�n0|dkrÞt  dˆj d¡¡d}�n |dk�rt  dˆj d¡¡d}�næ|dk�rDt  dˆj d¡¡d}t   ddd¡t j |d�}�n¦|dk�rŒˆ  |¡}ˆj |¡}t |ƒ|k�rxtƒ‚ˆj�sêt|ƒ}�n^|dk�rΈ  |¡}ˆj |¡} t | ƒ|k�rÀtƒ‚|  d¡}�n|dk�rˆ  |¡d}ˆj |¡} t | ƒ|k�rtƒ‚|  d¡}nØ|dk�rXˆ  |¡}ˆ |¡} g}|ˆj|<| ‡fdd„| Dƒ¡n’|d k�r䈠 |¡}ˆ |¡} ˆ |¡} ˆ ¡}|ˆj|<y2x,t| | ƒD]\} } ˆ | ¡|ˆ | ¡<�q WWntk �ràtƒ‚YnXntƒ‚|ˆj|<|S)!zx read the object by reference. May recursively read sub-objects (content of an array/dict/set) r•r éðràNrÈFé Tr@r¯rär?)Úsignedé"z>fr>é#z>dé3iÑ)Zsecondsé@éPrµé`rzutf-16beé c3s|]}ˆ |¡VqdS)N)r×)ræÚx)r*rrrè¢sz2_BinaryPlistParser._read_object..éÐ)rÖrÕrÔrËrÌrÏrTrårÐrÑrUZ timedeltarãrBrrlrr»rêÚextendrmÚzipr×r))r*ÚrefÚresultÚoffsetÚtokenZtokenHrâr'rFr%Zobj_refsZkey_refsÚkÚor)r*rr×Us‚                          z_BinaryPlistParser._read_objectN) r7r:r;r<r+rtrãrÓrêr×rrrrrÉs  rÉcCs0|dkr dS|dkrdS|d>d>r(dSdSdS)Nér•irrÊr>rÈr)ÚcountrrrÚ_count_to_size»s rc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)Ú_BinaryPlistWritercCs||_||_||_dS)N)rËr r¡)r*rr"r#rrrr+Ësz_BinaryPlistWriter.__init__c Csäg|_i|_i|_| |¡t|jƒ}dg||_t|ƒ|_t|j|_ |j   d¡x|jD]}|  |¡q\W|  |¡}|j  ¡}t|ƒ}dt||}|j   tj|f|jžŽ¡d}|||j|||f} |j   tjd| žŽ¡dS)Nr sbplist00r`ú >5xBBBQQQ)r)Ú_objlistÚ _objtableÚ _objidtableÚ_flattenrBrÔrrÒráÚ _ref_formatrËr›Ú _write_objectÚ _getrefnumÚtellrÐÚpack) r*r$rÝÚobjrÞrßrÜZ offset_formatZ sort_versionrÛrrrr›Ðs(          z_BinaryPlistWriter.writec Cs~t|tƒr"t|ƒ|f|jkrZdSn8t|tƒrHt|jƒ|jf|jkrZdSnt|ƒ|jkrZdSt|j ƒ}|j   |¡t|tƒrŽ||jt|ƒ|f<n0t|tƒr°||jt|jƒ|jf<n||jt|ƒ<t|t ƒ�rPg}g}|  ¡}|j rèt|ƒ}xB|D]:\}}t|tƒ�s|j�r qîtdƒ‚|  |¡|  |¡qîWxLt ||¡D]}| |¡�q:Wn*t|ttfƒ�rzx|D]}| |¡�qfWdS)Nzkeys must be strings)rÚ_scalarsr{rrr%ÚidrrBrrCr§r³r r²rr¡r)Ú itertoolsÚchainrr­r¬) r*r$ZrefnumÚkeysÚvaluesr³rýÚvrþrrrrýsB          z_BinaryPlistWriter._flattencCsNt|tƒr|jt|ƒ|fSt|tƒr<|jt|jƒ|jfS|jt|ƒSdS)N)rrrr{rr%rr)r*r$rrrr -s   z_BinaryPlistWriter._getrefnumcCs´|dkr"|j t d||B¡¡nŽ|dkrH|j t d|dBd|¡¡nh|dkrn|j t d|dBd|¡¡nB|d kr”|j t d |dBd |¡¡n|j t d |dBd |¡¡dS)Nràz>Brÿz>BBBr¯iz>BBHélz>BBLéz>BBQé)rËr›rÐr )r*rürçrrrÚ _write_size5sz_BinaryPlistWriter._write_sizec s舠|¡}ˆj ¡ˆj|<|dkr2ˆj d¡�n²|dkrJˆj d¡�nš|dkrbˆj d¡�n‚t|tƒ�rl|dkr´yˆj t dd|¡¡Wn tj k r°t |ƒd‚YnXn´|d krÔˆj t d d |¡¡n”|d krôˆj t d d|¡¡nt|dk�rˆj t dd|¡¡nR|dk�r8ˆj t dd|¡¡n0|dk�r`ˆj d|j d ddd�¡nt |ƒ‚�nxt|t ƒ�r’ˆj t dd|¡¡�nRt|t j ƒ�rÐ|t   ddd¡ ¡}ˆj t dd|¡¡�nt|tƒ�rˆ dt|jƒ¡ˆj |j¡�nät|ttfƒ�r0ˆ dt|ƒ¡ˆj |¡�n´t|tƒ�r y| d¡}ˆ dt|ƒ¡Wn4tk �rŽ| d ¡}ˆ d!t|ƒd"¡YnXˆj |¡�nDt|ttfƒ�rú‡fd#d$„|Dƒ}t|ƒ}ˆ d%|¡ˆj tjd&ˆj|f|žŽ¡nêt|tƒ�rÜgg}}ˆj�r&t| ¡ƒ} n| ¡} xR| D]J\} } t| tƒ�s\ˆj�rT�q4t d'ƒ‚| !ˆ | ¡¡| !ˆ | ¡¡�q4Wt|ƒ}ˆ d(|¡ˆj tjd&ˆj|f|žŽ¡ˆj tjd&ˆj|f|žŽ¡nt |ƒ‚dS))NóFóTržr z>Bqrrÿz>BBr¯iz>BHrlz>BLrlz>BQlórä)ríz>BdrïiÑr•rðrñrµròzutf-16berórcsg|]}ˆ |¡‘qSr)r )rærþ)r*rrú ~sz4_BinaryPlistWriter._write_object..rôr`zkeys must be stringsrö)"r rËr rÔr›rrTrÐr rÚr¦Úto_bytesrŠrUZ total_secondsrrrBr%r(rªrrJÚUnicodeEncodeErrorr­r¬rr§r r²r³r¡r)rC) r*r$rùr'ÚtZrefsrFZkeyRefsZvalRefsZ rootItemsrýrr)r*rr Es„            $    "$z _BinaryPlistWriter._write_objectN) r7r:r;r+r›rr rr rrrrrÊs -0rcCs|dd…dkS)NrÈsbplist00r)r¼rrrÚ_is_fmt_binaryœsr )ÚdetectroÚwriterT)rrrncCsn|dkrL| d¡}| d¡x:t ¡D]}|d|ƒr&|d}Pq&Wtƒ‚n t|d}|||d�}| |¡S)z�Read a .plist file. 'fp' should be a readable and binary file object. Return the unpacked root object (which usually is a dictionary). NrÊr r!ro)rrn)rÏrÌÚ_FORMATSrrrt)rrrrnr¼ÚinfoÚPÚprrrr ²s     cCst|ƒ}t||||d�S)zqRead a .plist file from a bytes object. Return the unpacked root object (which usually is a dictionary). )rrrn)rr )r$rrrnrrrrr ÈsF)rr"r#cCs:|tkrtd|fƒ‚t|d|||d�}| |¡dS)zWWrite 'value' to a .plist file. 'fp' should be a writable, binary file object. zUnsupported format: %rr")r"r#N)r#rcr›)r$rrr"r#r"rrrr Ñs)rr#r"cCs tƒ}t|||||d�| ¡S)z?Return a bytes object with the contents for a .plist file. )rr#r")rr r&)r$rr#r"rrrrr Üs)r/)Br<Ú__all__rDr·Ú contextlibrUÚenumÚiorrrÍÚrerÐÚwarningsrZxml.parsers.expatrÚEnumr7rÚglobalsÚupdateÚ __members__ÚcontextmanagerrrrrrrrŸÚcompilerar0r,ÚASCIIrQrYr[rgrhr�r�rÁrcrráÚobjectrÕrÉrrrTrŠr(rrr rr§rr#r r r r rrrrÚ/st          0    o&d!# S