hyb
2026-01-30 7657e1b2fa251a2ea372710ad75cb395a3c0e374
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
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
Ë
@ñúh˧ã ó¤—dZdZdZdZddlmZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl Z ddlZddlZddlmZ    ddlZ    ddlZeeefZgd    ¢Zd
Zd Zed zZd ZdZdZdZ dZ!dZ"d
Z#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3e3Z4e"e#e$e%e(e)e*e&e'e+e,e-f Z5e"e#e*e-fZ6e+e,e-fZ7d Z8hd!£Z9e:e:e:e;e;e;d"œZ<ejzd#k(rd$Z>nej~«Z>d%„Z@d&„ZAd'„ZBd(e4fd)„ZCd*„ZDdedfd+„ZEd,„ZFGd-„d.eG«ZHGd/„d0eH«ZIGd1„d2eH«ZJGd3„d4eH«ZKGd5„d6eH«ZLGd7„d8eH«ZMGd9„d:eM«ZNGd;„d<eM«ZOGd=„d>eM«ZPGd?„d@eM«ZQGdA„dBeM«ZRGdC„dD«ZSGdE„dF«ZTGdG„dHeU«ZVGdI„dJeU«ZWGdK„dLe    j°«ZYGdM„dNeH«ZZGdO„dPeZ«Z[GdQ„dReZ«Z\GdS„dTeZ«Z]GdU„dVeZ«Z^GdW„dXeZ«Z_dedY„Z`dZ„Zad[„Zbd\„Zceaebecd]œZdeU«ZeGd^„d_eU«ZfGd`„daeU«Zgdb„Zhegj
Zdc„Ziejddk(rei«yy#e$rdZYŒwxYw#e$rdZYŒ wxYw)fz,Read from and write to tar format archives.
z0.9.0u"Lars Gustäbel (lars@gustaebel.de)u4Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.é)ÚopenNé)Ú removesuffix)ÚTarFileÚTarInfoÚ
is_tarfileÚTarErrorÚ    ReadErrorÚCompressionErrorÚ StreamErrorÚ ExtractErrorÚ HeaderErrorÚENCODINGÚ USTAR_FORMATÚ
GNU_FORMATÚ
PAX_FORMATÚDEFAULT_FORMATrÚfully_trusted_filterÚ data_filterÚ
tar_filterÚ FilterErrorÚAbsoluteLinkErrorÚOutsideDestinationErrorÚSpecialFileErrorÚAbsolutePathErrorÚLinkOutsideDestinationErroróiésustar  sustar00édé›ó0ó1ó2ó3ó4ó5ó6ó7óLóKóSóxógóXé)ÚpathÚlinkpathÚsizeÚmtimeÚuidÚgidÚunameÚgname>r0r7r6r1)ÚatimeÚctimer3r4r5r2Úntúutf-8cóv—|€ td«‚|j||«}|d||t|«z
tzzS)z8Convert a string to a null-terminated bytes object.
    Nzmetadata cannot contain None)Ú
ValueErrorÚencodeÚlenÚNUL)ÚsÚlengthÚencodingÚerrorss    ú`H:\Change_password\venv_build\Lib\site-packages\setuptools/_vendor/backports/tarfile/__init__.pyÚstnrFŸsC€ð    €yÜÐ7Ó8Ð8Ø    ‰˜6Ó"€AØ ˆWˆfˆ:˜¤# a£&™¬CÑ/Ñ /Ð/ócó\—|jd«}|dk7r|d|}|j||«S)z8Convert a null-terminated bytes object to a string.
    réÿÿÿÿN)ÚfindÚdecode)rArCrDÚps    rEÚntsrM§s4€ð    
‰ˆu‹ €A؈B‚wØ ˆbˆqˆEˆØ 8‰8H˜fÓ %Ð%rGcó6—|ddvrMd}tt|«dz
«D]}|dz}|||dzz }Œ|ddk(rdt|«dz
z|z
}|S    t|dd«}t|j    «xsd    d«}|S#t
$r t d
«‚wxYw) z/Convert a number field to a python number.
    r)é€éÿrérPéÚasciiÚstrictÚ0úinvalid header)Úranger?rMÚintÚstripr=ÚInvalidHeaderError)rAÚnÚis   rEÚntir]¯sǀð
    ˆtˆ~ÑØ ˆÜ”s˜1“v ‘zÓ"ò    ˆAØ !‰GˆAØ 1q‘5‘‰M‰Að    ð ˆQ‰45Š=Øœ#˜a›& 1™*Ñ%¨Ñ)Ð*ˆAð €Hð     7ܐAw Ó)ˆAܐA—G‘G“IÒ$  aÓ(ˆAð €Høôò    7Ü$Ð%5Ó6Ð 6ð    7ús Á+BÂBrQcóš—|}t|«}d|cxkr d|dz
zkr nntd|dz
|fzd«tz}|S|tk(rzd|dz
z |cxkr d|dz
zkrbn td    «‚|dk\r t    dg«}nt    dg«}d|z|z}t |dz
«D]}|j d|dz«|dz}Œ|Std    «‚)
z/Convert a python number to a number field.
    rrQrz%0*orSrRrOrPzoverflow in number field)rXÚbytesr@rÚ    bytearrayrWÚinsertr=)r[ÚdigitsÚformatÚ
original_nrAr\s      rEÚitnreÃsý€ð€JÜ ˆA‹€A؈AÔ!f˜q‘jÑ!Õ!Ü &˜F Q™J¨˜?Ñ*¨GÓ 4´sÑ :ˆð €Hð
”:Ò     3¨6°A©:Ñ#6Ð"6¸!Ô"Q¸cÀfÈqÁjÑ>QÔ"QôÐ3Ó4Ð4𠐊6ܘ5˜'Ó"‰Aä˜5˜'Ó"ˆAؐv‘  Ñ!ˆAäv ‘zÓ"ò    ˆAØ H‰HQ˜˜E™    Ô "Ø !‰G‰Að    ð €HôÐ3Ó4Ð4rGcó’—dttjd|««z}dttjd|««z}||fS)a¨Calculate the checksum for a member's header by summing up all
       characters except for the chksum field which is treated as if
       it was filled with spaces. According to the GNU tar sources,
       some tars (Sun and NeXT) calculate chksum with signed char,
       which will be different if there are chars in the buffer with
       the high bit set. So we calculate two checksums, unsigned and
       signed.
    rRÚ
148B8x356BÚ
148b8x356b)ÚsumÚstructÚ unpack_from)ÚbufÚunsigned_chksumÚ signed_chksums   rEÚ calc_chksumsroásG€ðœC¤× 2Ñ 2°<ÀÓ EÓFÑF€OØœ#œf×0Ñ0°¸sÓCÓDÑD€MØ ˜MÐ )Ð)rGcóx—|xsd}|dk(ry|€tj|||«yt||«\}}t|«D]:}|j    |«}t |«|kr|d«‚|j |«Œ<|dk7r8|j    |«}t |«|kr|d«‚|j |«y)zjCopy length bytes from fileobj src to fileobj dst.
       If length is None, copy the entire content.
    i@rNúunexpected end of data)ÚshutilÚ copyfileobjÚdivmodrWÚreadr?Úwrite)    ÚsrcÚdstrBÚ    exceptionÚbufsizeÚblocksÚ    remainderÚbrls             rErsrsîsĀðÒ"˜€GØ ‚{ØØ €~Ü×ј3  WÔ-Øä˜v wÓ/Ñ€FˆIÜ 6‹]òˆØh‰hwÓˆÜ ˆs‹8gÒ ÙÐ4Ó5Ð 5Ø     ‰    #ð    ð A‚~؏h‰hyÓ!ˆÜ ˆs‹8iÒ ÙÐ4Ó5Ð 5Ø     ‰    #ŒØ
rGcóš—ttjdd«}|!|j|d«j    |«}t |d¬«y)NrCÚbackslashreplaceú )Úend)ÚgetattrÚsysÚstdoutr>rKÚprint)rArCs  rEÚ _safe_printr†s@€Ü”s—z‘z :¨tÓ4€HØÐØ H‰HXÐ1Ó 2× 9Ñ 9¸(Ó CˆÜ    ˆ!ÖrGcó—eZdZdZy)r    zBase exception.N©Ú__name__Ú
__module__Ú __qualname__Ú__doc__©rGrEr    r    s„ÙØrGr    có—eZdZdZy)r z%General exception for extract errors.NrˆrrGrEr r s„Ù/ØrGr có—eZdZdZy)r
z&Exception for unreadable tar archives.NrˆrrGrEr
r
s„Ù0ØrGr
có—eZdZdZy)r z.Exception for unavailable compression methods.NrˆrrGrEr r s„Ù8ØrGr có—eZdZdZy)r z=Exception for unsupported operations on stream-like TarFiles.NrˆrrGrEr r s„ÙGØrGr có—eZdZdZy)rz!Base exception for header errors.NrˆrrGrErrs„Ù+ØrGrcó—eZdZdZy)ÚEmptyHeaderErrorzException for empty headers.NrˆrrGrEr”r” s„Ù&ØrGr”có—eZdZdZy)ÚTruncatedHeaderErrorz Exception for truncated headers.NrˆrrGrEr–r–#s„Ù*ØrGr–có—eZdZdZy)ÚEOFHeaderErrorz"Exception for end of file headers.NrˆrrGrEr˜r˜&s„Ù,ØrGr˜có—eZdZdZy)rZzException for invalid headers.NrˆrrGrErZrZ)s„Ù(ØrGrZcó—eZdZdZy)ÚSubsequentHeaderErrorz3Exception for missing and invalid extended headers.NrˆrrGrEr›r›,s„Ù=ØrGr›có(—eZdZdZd„Zd„Zd„Zd„Zy)Ú _LowLevelFilez‰Low-level file object. Supports reading and writing.
       It is used instead of a regular file object for streaming
       access.
    có—tjtjtjztjzdœ|}t td«r|tj z}tj||d«|_y)N©ÚrÚwÚO_BINARYi¶)    ÚosÚO_RDONLYÚO_WRONLYÚO_CREATÚO_TRUNCÚhasattrr¢rÚfd)ÚselfÚnameÚmodes   rEÚ__init__z_LowLevelFile.__init__9sa€ä—‘Ü—‘œrŸz™zÑ)¬B¯J©JÑ6ñ
ð ñˆô ”2zÔ "Ø ”B—K‘KÑ ˆDÜ—'‘'˜$  eÓ,ˆrGcóB—tj|j«y©N)r£Úcloser©©rªs rEr°z_LowLevelFile.closeBs€Ü
‰—‘ÕrGcóB—tj|j|«Sr¯)r£rur©©rªr2s  rEruz_LowLevelFile.readEs€Üw‰wt—w‘w Ó%Ð%rGcóD—tj|j|«yr¯)r£rvr©©rªrAs  rErvz_LowLevelFile.writeHs€Ü
‰—‘˜!ÕrGN)r‰rŠr‹rŒr­r°rurvrrGrErr3s„ñò
-òò&órGrcóZ—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z    d„Z
d    „Z dd
„Z d „Z d „Zd „Zy)Ú_StreamaÎClass that serves as an adapter between TarFile and
       a stream-like object.  The stream-like object only
       needs to have a read() or write() method that works with bytes,
       and the method is accessed blockwise.
       Use of gzip or bzip2 compression is possible.
       A stream-like object could be for example: sys.stdin.buffer,
       sys.stdout.buffer, a socket, a tape device etc.
 
       _Stream is intended to be used only internally.
    có—d|_|€t||«}d|_|dk(rt|«}|j«}|xsd|_||_||_||_||_d|_    d|_
d|_     |dk(r[    ddl }||_ |jd«|_|d
k(r"|j"|_|j'«y|j)|«y|d k(rI    ddl}|d
k(r(d|_|j/«|_t2|_y|j5|«|_y|d k(rN    ddl}    |d
k(r.d|_|    j9«|_|    j:|_y|    j=«|_y|dk7rtd|z«‚y#t$r td    «d‚wxYw#t$r td «d‚wxYw#t$r td«d‚wxYw#|js|jj?«d|_ ‚xYw)z$Construct a _Stream object.
        TNFÚ*ÚrGrÚgzzzlib module is not availabler Úbz2úbz2 module is not availableÚxzúlzma module is not availableÚtarúunknown compression type %r) Ú _extfileobjrÚ _StreamProxyÚ getcomptyper«r¬ÚcomptypeÚfileobjrzrlÚposÚclosedÚzlibÚ ImportErrorr Úcrc32ÚcrcÚerrorryÚ _init_read_gzÚ_init_write_gzr¼ÚdbufÚBZ2DecompressorÚcmpÚOSErrorÚ BZ2CompressorÚlzmaÚLZMADecompressorÚ    LZMAErrorÚLZMACompressorr°)
rªr«r¬rÅrÆrzÚ compresslevelrÉr¼rÕs
          rEr­z_Stream.__init__Ws€ð ˆÔØ ˆ?Ü# D¨$Ó/ˆGØ$ˆDÔ à sŠ?ô# 7Ó+ˆGØ×*Ñ*Ó,ˆHàš
 ˆŒ    ØˆŒ    Ø ˆŒ ؈Œ ؈Œ ؈ŒØˆŒØˆŒ ð-    Ø˜4ÒðUÛð!”    ØŸ:™: c›?”ؘ3’;Ø%)§Z¡ZD”NØ×&Ñ&Õ(à×'Ñ'¨ Õ6à˜UÒ"ðTÛð˜3’;Ø #D”IØ"×2Ñ2Ó4D”HÜ%,D•Nà"×0Ñ0°Ó?D•Hà˜TÒ!ðUÛð˜3’;Ø #D”IØ#×4Ñ4Ó6D”HØ%)§^¡^D•Nà#×2Ñ2Ó4D•Hà˜UÒ"Ü&Ð'DÀxÑ'OÓPÐPð#øôE#òUÜ*Ð+IÓJÐPTÐTðUûô#òTÜ*Ð+HÓIÈtÐSðTûô#òUÜ*Ð+IÓJÐPTÐTðUûð    Ø×#Ò#Ø— ‘ ×"Ñ"Ô$؈DŒKØ úsyÁ:GÂFÂAGÃGÃGàF(Ã$,GÄGÄ(GÄ.GÄ22GÅ%GÅ;GÆF%Æ%GÆ(F>Æ>GÇGÇGÇ0H
cóX—t|d«r|js|j«yyy)NrÈ)r¨rÈr°r±s rEÚ__del__z_Stream.__del__žs#€Ü 4˜Ô "¨4¯;ª;Ø J‰JLð,7Ð "rGcót—|jj||jj|jj |jjd«|_t jdttj«««}|jd|zdz«|jjd«r|jdd|_ tjj|j«|_ |j|jj!dd    «t"z«y)
z6Initialize for writing with gzip compression.
        rú<Ls‹sÿú.gzNéýÿÿÿz
iso-8859-1Úreplace)rÉÚ compressobjÚDEFLATEDÚ    MAX_WBITSÚ DEF_MEM_LEVELrÒrjÚpackrXÚtimeÚ_Stream__writer«Úendswithr£r0Úbasenamer>r@)rªrÙÚ    timestamps   rErÏz_Stream._init_write_gz¢s܀ð—9‘9×(Ñ(¨Ø)-¯©×);Ñ);Ø*.¯)©)×*=Ñ*=Ð)=Ø)-¯©×)@Ñ)@Ø)*ó    ,ˆŒô
—K‘K ¤c¬$¯)©)«+Ó&6Ó7ˆ    Ø  ‰ Ð(¨9Ñ4°{ÑBÔCØ 9‰9× Ñ ˜eÔ $ØŸ    ™     # 2˜ˆDŒIä—G‘G×$Ñ$ T§Y¡YÓ/ˆŒ    à  ‰ T—Y‘Y×%Ñ% l°IÓ>ÄÑDÕErGcó*—|jdk(r+|jj||j«|_|xjt |«z c_|jdk7r|j j|«}|j|«y)z&Write string s to the stream.
        r»rÀN)    rÅrÉrËrÌrÇr?rÒÚcompressrçrµs  rErvz _Stream.write³sg€ð =‰=˜DÒ  Ø—y‘y—‘ q¨$¯(©(Ó3ˆDŒHØ Š”C˜“FÑØ =‰=˜EÒ !Ø—‘×!Ñ! !Ó$ˆAØ  ‰ QrGcóZ—|xj|z c_t|j«|jkDrt|jj    |jd|j«|j|jd|_t|j«|jkDrŒsyy)z]Write string s to the stream if a whole new block
           is ready to be written.
        N)rlr?rzrÆrvrµs  rEÚ__writez_Stream.__write½sr€ð     ŠA‰ Ü$—(‘(‹m˜dŸl™lÒ*Ø L‰L× Ñ ˜tŸx™x¨ ¨¯©Ð6Ô 7Ø—x‘x § ¡   Ð.ˆDŒHô$—(‘(‹m˜dŸl™lÕ*rGcó—|jryd|_    |jdk(r<|jdk7r-|xj|jj «z c_|jdk(r¼|jr°|j j|j«d|_|jdk(ru|j jtjd|j««|j jtjd|jdz««|js|j j«yy#|js|j j«wwxYw)    z[Close the _Stream object. No operation should be
           done on it afterwards.
        NTr¡rÀrGr»rÝlÿÿ)rÈr¬rÅrlrÒÚflushrÆrvrjrårÌrÇrÂr°r±s rEr°z _Stream.closeÆs    €ð ;Š;Ø àˆŒ ð     %؏y‰y˜CÒ D§M¡M°UÒ$:Ø—’˜DŸH™HŸN™NÓ,Ñ,•ày‰y˜CÒ D§H¢HØ— ‘ ×"Ñ" 4§8¡8Ô,ؐ”Ø—=‘= DÒ(Ø—L‘L×&Ñ&¤v§{¡{°4¸¿¹Ó'BÔCØ—L‘L×&Ñ&¤v§{¡{°4¸¿¹ÀJÑ9NÓ'OÔPà×#Ò#Ø— ‘ ×"Ñ"Õ$ð$ø4×#Ò#Ø— ‘ ×"Ñ"Õ$ð$ús –DEÅ)E=có¨—|jj|jj «|_d|_|j d«dk7r t d«‚|j d«dk7r td«‚t|j d««}|j d«|d    zrIt|j d««d
t|j d««zz}|j|«|d zr    |j d«}|r    |tk(rnŒ|d zr    |j d«}|r    |tk(rnŒ|dzr|j d«y y )z:Initialize for reading a gzip compressed fileobj.
        rGr/s‹únot a gzip filerózunsupported compression methodéérRrQéN) rÉÚ decompressobjrãrÒrÐÚ _Stream__readr
r Úordrur@)rªÚflagÚxlenrAs    rErÎz_Stream._init_read_gzÜs+€ð—9‘9×*Ñ*¨D¯I©I×,?Ñ,?Ð+?Ó@ˆŒØˆŒ    ð ;‰;q‹>˜[Ò (ÜÐ-Ó.Ð .Ø ;‰;q‹>˜WÒ $Ü"Ð#CÓDÐ Dä4—;‘;˜q“>Ó"ˆØ  ‰ AŒà !Š8ܐt—{‘{ 1“~Ó&¨¬s°4·;±;¸q³>Ó/BÑ)BÑBˆDØ I‰IdŒOØ !Š8ØØ—K‘K “NÙ˜A¤šHØðð "Š9ØØ—K‘K “NÙ˜A¤šHØðð !Š8Ø K‰K˜Nð rGcó—|jS)z3Return the stream's file pointer position.
        )rÇr±s rEÚtellz _Stream.tellûs €ðx‰xˆrGcó—||jz
dk\rnt||jz
|j«\}}t|«D]}|j    |j«Œ|j    |«|jSt d«‚)zXSet the stream's file pointer to pos. Negative seeking
           is forbidden.
        rz seeking backwards is not allowed)rÇrtrzrWrur )rªrÇr{r|r\s     rEÚseekz _Stream.seeksy€ð —‘‰>˜QÒ Ü & s¨T¯X©X¡~°t·|±|Ó DÑ ˆFIܘ6“]ò (Ø—    ‘    ˜$Ÿ,™,Õ'ð (à I‰IiÔ  ðx‰xˆôÐ@ÓAÐ ArGcól—|€J‚|j|«}|xjt|«z c_|S)z5Return the next size number of bytes from the stream.)Ú_readrÇr?)rªr2rls   rEruz _Stream.read s3€àÐÐÐØj‰j˜ÓˆØ Š”C˜“Hэ؈
rGcó(—|jdk(r|j|«St|j«}|jg}||kr‰|jr|j}d|_n(|j
j |j«}|snA    |jj|«}|j|«|t|«z }||krŒ‰dj|«}||d|_|d|S#|j$r}td«|‚d}~wwxYw)z+Return size bytes from the stream.
        rÀrGzinvalid compressed dataN)rÅrør?rÐrlrÆrurzrÒÚ
decompressryr
ÚappendÚjoin)rªr2ÚcÚtrlÚes      rErz _Stream._readsý€ð =‰=˜EÒ !Ø—;‘;˜tÓ$Ð $ä —    ‘    ‹NˆØ Y‰YˆKˆØ$ŠhàxŠxØ—h‘hØ•à—l‘l×'Ñ'¨¯ © Ó5ÙØð BØ—h‘h×)Ñ)¨#Ó.ð H‰HSŒMØ ”S“‰MˆAð$‹hð H‰HQ‹KˆØdeHˆŒ    Ø$ˆxˆøð —>‘>ò BÜР9Ó:ÀÐAûð BúsÂC1Ã1DÄ D Ä Dcó*—t|j«}|jg}||krM|jj|j«}|sn%|j |«|t|«z }||krŒMdj |«}||d|_|d|S)zsReturn size bytes from stream. If internal buffer is empty,
           read another block from the stream.
        rGN)r?rlrÆrurzrr)rªr2rrrls     rEÚ__readz_Stream.__read/s‰€ô —‘‹MˆØ X‰XˆJˆØ$ŠhØ—,‘,×#Ñ# D§L¡LÓ1ˆCÙØØ H‰HSŒMØ ”S“‰MˆAð $‹hð H‰HQ‹KˆØTU8ˆŒØ$ˆxˆrGN)r)r‰rŠr‹rŒr­rÛrÏrvrçr°rÎrýrÿrurrørrGrEr·r·KsF„ñ    òEòNòFò"ò/ò%ò,ò>ó
òòó6rGr·có(—eZdZdZd„Zd„Zd„Zd„Zy)rÃzsSmall proxy class that enables transparent compression
       detection for the Stream interface (mode 'r|*').
    cóZ—||_|jjt«|_yr¯)rÆruÚ    BLOCKSIZErl)rªrÆs  rEr­z_StreamProxy.__init__Es€ØˆŒ Ø—<‘<×$Ñ$¤YÓ/ˆrGcóP—|jj|_|jSr¯)rÆrurlr³s  rEruz_StreamProxy.readIs€Ø—L‘L×%Ñ%ˆŒ    Øx‰xˆrGcó¾—|jjd«ry|jdddk(r|jdddk(ry    |jjd
«ry y ) Ns‹r»résBZhrõé
s1AY&SYr¼)s]€sý7zXZr¾rÀ)rlÚ
startswithr±s rErÄz_StreamProxy.getcomptypeMsV€Ø 8‰8× Ñ ˜Ô /ØØ X‰Xa˜ˆ]˜fÒ $¨¯©°!°B¨¸9Ò)DØØ X‰X×  Ñ  Ð!CÔ DØàrGcó8—|jj«yr¯)rÆr°r±s rEr°z_StreamProxy.closeWs€Ø  ‰ ×ÑÕrGN)r‰rŠr‹rŒr­rurÄr°rrGrErÃrÃ@s„ñò0òòórGrÃcóx—eZdZdZdd„Zd„Zed„«Zd„Zd„Z    d„Z
d    „Z e jfd
„Zdd „Zd „Zd „Zy)Ú _FileInFilezA thin wrapper around an existing file object that
       provides a part of its data as an individual file
       object.
    NcóÄ—||_||_||_d|_||_d|_|€d|fg}d|_g|_d}|j}|D]U\}}||kDr|jjd||df«|jjd|||z|f«||z }||z}ŒW||jkr*|jjd||jdf«yy)NrFT)    rÆÚoffsetr2Úpositionr«rÈÚ    map_indexÚmapr)rªrÆrr2r«Ú    blockinfoÚlastposÚrealposs        rEr­z_FileInFile.__init__dsî€ØˆŒ ؈Œ ؈Œ    ØˆŒ ؈Œ    ØˆŒ à РؘT˜˜ ˆIðˆŒØˆŒØˆØ—+‘+ˆØ%ò    $‰LˆFDØ˜ÒØ—‘—‘ ¨°¸Р>Ô?Ø H‰HO‰O˜T 6¨6°D©=¸'ÐBÔ CØ t‰OˆGؘt‘m‰Gð     $ð T—Y‘YÒ Ø H‰HO‰O˜U G¨T¯Y©Y¸Ð=Õ >ð rGcó—yr¯rr±s rErðz_FileInFile.flush}s€Ø rGcó—y)NÚrbrr±s rEr¬z_FileInFile.mode€s€àrGcó—y©NTrr±s rEÚreadablez_FileInFile.readable„s€ØrGcó—y©NFrr±s rEÚwritablez_FileInFile.writable‡s€ØrGcó6—|jj«Sr¯)rÆÚseekabler±s rEr(z_FileInFile.seekableŠs€Ø|‰|×$Ñ$Ó&Ð&rGcó—|jS)z*Return the current file position.
        )rr±s rErýz_FileInFile.telló€ð}‰}ÐrGcó.—|tjk(r1tt|d«|j«|_|j
S|tj k(rc|dkr*t|j
|zd«|_|j
St|j
|z|j«|_|j
S|tjk(r>tt|j|z|j«d«|_|j
Std«‚)z(Seek to a position in the file.
        rzInvalid argument)    ÚioÚSEEK_SETÚminÚmaxr2rÚSEEK_CURÚSEEK_ENDr=)rªrÚwhences   rErÿz_FileInFile.seek’sà€ð ”R—[‘[Ò  Ü¤ H¨aÓ 0°$·)±)Ó<ˆDŒMð}‰}Ðð”r—{‘{Ò "ؘ!Š|Ü # D§M¡M°HÑ$<¸aÓ @” ð}‰}Ðô !$ D§M¡M°HÑ$<¸d¿i¹iÓ H” ð
}‰}Ðð    ”r—{‘{Ò "ܤ D§I¡I°Ñ$8¸$¿)¹)Ó DÀaÓHˆDŒMð}‰}ÐôÐ/Ó0Ð 0rGcóÜ—|€|j|jz
}n#t||j|jz
«}d}|dkDr$    |j|j\}}}}||jcxkr|krnnn?|xjdz c_|jt |j«k(rd|_Œvt|||jz
«}|re|j j||j|z
z«|j j|«}t |«|k7r td«‚||z }n |t|zz }||z}|xj|z c_|dkDrŒ$|S)z!Read data from the file.
        rGrrrq) r2rr.rrr?rÆrÿrur
r@)    rªr2rlÚdataÚstartÚstoprrBr}s             rEruz_FileInFile.read¢sD€ð ˆ<Ø—9‘9˜tŸ}™}Ñ,‰Dät˜TŸY™Y¨¯©Ñ6Ó7ˆDàˆØQ‹hØØ,0¯H©H°T·^±^Ñ,DÑ)e˜T 6ؘDŸM™MÔ0¨DÕ0Øà—N’N aÑ'•NØ—~‘~¬¨T¯X©X«Ò6Ø)*˜œðô˜˜t d§m¡mÑ3Ó4ˆFÙØ— ‘ ×!Ñ! &¨D¯M©M¸EÑ,AÑ"BÔCØ—L‘L×%Ñ% fÓ-Üq“6˜VÒ#Ü#Ð$<Ó=Ð=ؐq‘‘à”s˜V‘|Ñ#Ø F‰NˆDØ MŠM˜VÑ #Mð'QŒhð(ˆ
rGcóh—|jt|««}||dt|«t|«Sr¯)rur?)rªr}rls   rEÚreadintoz_FileInFile.readintoÁs,€Øi‰iœ˜A›ÓˆØˆˆ)Œ3ˆs‹8ˆ ܐ3‹xˆrGcó—d|_yr")rÈr±s rEr°z_FileInFile.closeÆs    €Øˆ rGr¯)r‰rŠr‹rŒr­rðÚpropertyr¬r#r&r(rýr,r-rÿrur8r°rrGrErr^sV„ñó
?ò2 ðñóðòòò'òð
%'§K¡Kóó ò>ó
rGrcó‡—eZdZˆfd„ZˆxZS)Ú ExFileObjectc󦕗t|j|j|j|j|j
«}t ‰||«yr¯)rrÆÚ offset_datar2r«ÚsparseÚsuperr­)rªÚtarfileÚtarinforÆÚ    __class__s    €rEr­zExFileObject.__init__Ìs;ø€Ü˜gŸo™o¨w×/BÑ/BØ— ‘ ˜gŸl™l¨G¯N©Nó<ˆä ‰Ñ˜Õ!rG©r‰rŠr‹r­Ú __classcell__©rCs@rEr<r<Ês ø„÷"ð"rGr<có —eZdZy)rN)r‰rŠr‹rrGrErr×s„ØrGrcó‡—eZdZˆfd„ZˆxZS)rcóN•—||_t‰|    d|j›d«y)Nzmember z has an absolute path©rBr@r­r«©rªrBrCs  €rEr­zAbsolutePathError.__init__Ûs&ø€ØˆŒ Ü ‰Ñ˜7 7§<¡<Ð"2Ð2GÐHÕIrGrDrFs@rErrÚsø„÷JðJrGrcó‡—eZdZˆfd„ZˆxZS)rcóf•—||_||_t‰| |j›d|›ddz«y)Nz would be extracted to ú, ú which is outside the destination©rBÚ_pathr@r­r«©rªrBr0rCs   €rEr­z OutsideDestinationError.__init__às;ø€ØˆŒ ؈Œ
Ü ‰Ñ˜GŸL™LÐ+Ð+BÀ4À(È"ÐMØ=ñ>õ    ?rGrDrFs@rErrßó ø„÷?ð?rGrcó‡—eZdZˆfd„ZˆxZS)rcóL•—||_t‰|    |j›d«y)Nz is a special filerJrKs  €rEr­zSpecialFileError.__init__çs$ø€ØˆŒ Ü ‰Ñ˜GŸL™LÐ+Ð+=Ð>Õ?rGrDrFs@rErræsø„÷@ð@rGrcó‡—eZdZˆfd„ZˆxZS)rcóL•—||_t‰|    |j›d«y)Nz is a link to an absolute pathrJrKs  €rEr­zAbsoluteLinkError.__init__ìs$ø€ØˆŒ Ü ‰Ñ˜GŸL™LÐ+Ð+IÐJÕKrGrDrFs@rErrësø„÷LðLrGrcó‡—eZdZˆfd„ZˆxZS)rcóf•—||_||_t‰| |j›d|›ddz«y)Nz would link to rNrOrPrRs   €rEr­z$LinkOutsideDestinationError.__init__ñs:ø€ØˆŒ ؈Œ
Ü ‰Ñ˜GŸL™LÐ+¨?¸4¸(À"ÐEØ=ñ>õ    ?rGrDrFs@rErrðrSrGrcó—i}|j}tjj|«}|j    dtj
f«r1|jj dtj
z«x}|d<tjj|«r t|«‚tjjtjj||««}tjj||g«|k7r t||«‚|j}|y|dz}|r^|j«s|j«r|dzs|dz}|dz}n.|j«s|j!«rd}n t#|«‚||jk7r||d<|rk|j$d|d<|j&d|d    <|j(d|d
<|j*d|d <|j«s|j!«rtjj|j,«r t/|«‚|j!«rItjj|tjj1|«|j,«}n*tjj||j,«}tjj|«}tjj||g«|k7r t3||«‚|S) Nú/r«iíé@i¶ÿÿÿé€r¬r4r5r6r7)r«r£r0ÚrealpathrÚsepÚlstripÚisabsrrÚ
commonpathrr¬ÚisregÚislnkÚisdirÚissymrr4r5r6r7ÚlinknamerÚdirnamer)ÚmemberÚ    dest_pathÚfor_dataÚ    new_attrsr«Ú target_pathr¬s       rEÚ_get_filtered_attrsrn÷s^€Ø€IØ ;‰;€DÜ—‘× Ñ  Ó+€I𠇁˜œRŸV™V}Ô%Ø#)§;¡;×#5Ñ#5°c¼B¿F¹F±lÓ#CÐCˆˆy˜Ñ Ü    ‡ww‡}}TÔô  Ó'Ð'ä—'‘'×"Ñ"¤2§7¡7§<¡<°    ¸4Ó#@ÓA€KÜ    ‡ww×ј;¨    Ð2Ó3°yÒ@Ü% f¨kÓ:Ð:à ;‰;€DØ Ðàe‰|ˆÙ à|‰|Œ~ §¡¤Ø˜e’|à˜F‘NDà˜‘ ‘Ø—‘” 6§<¡<¤>à‘ô' vÓ.Ð.Ø 6—;‘;Ò Ø $ˆIfÑ Úà :‰:Ð !Ø#ˆIeÑ Ø :‰:Ð !Ø#ˆIeÑ Ø <‰<Ð #Ø!%ˆIgÑ Ø <‰<Ð #Ø!%ˆIgÑ à <‰<Œ>˜VŸ\™\^܏w‰w}‰}˜VŸ_™_Ô-Ü'¨Ó/Ð/؏|‰|Œ~Ü Ÿg™gŸl™l¨9Ü+-¯7©7¯?©?¸4Ó+@Ø+1¯?©?ó<‘ ô!Ÿg™gŸl™l¨9Ø+1¯?©?ó< äŸ'™'×*Ñ*¨;Ó7ˆK܏w‰w×!Ñ! ;°    Ð":Ó;¸yÒHÜ1°&¸+ÓFÐFØ ÐrGcó—|Sr¯r)rirjs  rErr6s€Ø €MrGcóP—t||d«}|r|jdi|¤ddi¤ŽS|S)NFÚdeepr©rnrà©rirjrls   rErr9s1€Ü# F¨I°uÓ=€IÙØˆv~‰~Ñ6     Ñ6°Ò6Ð6Ø €MrGcóP—t||d«}|r|jdi|¤ddi¤ŽS|S)NTrqFrrrrss   rErr?s1€Ü# F¨I°tÓ<€IÙØˆv~‰~Ñ6     Ñ6°Ò6Ð6Ø €MrG)Ú fully_trustedrÀr4c óv—eZdZdZedVidd“dd“dd“dd    “d
d “d d “dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d%“d&d%“d'd%“ŽZdWd(„Zed)„«Zejd*„«Zed+„«Z
e
jd,„«Z
ed-„«Z e jd.„«Z d/„Z e e e e e e e e d0e d1œ
d2„Zd3„Zeed4fd5„Zd6„Zd7„Zd8„Zed9„«Zd:„Zed;„«Zed<„«Zed=„«Zed>„«Zed?„«Zed@„«ZdA„Z dB„Z!dC„Z"dD„Z#dE„Z$dF„Z%dG„Z&dH„Z'dI„Z(dJ„Z)dK„Z*dL„Z+dM„Z,dN„Z-dO„Z.dP„Z/dQ„Z0dR„Z1dS„Z2dT„Z3dU„Z4y%)XraInformational class which holds the details about an
       archive member given by a tar header block.
       TarInfo objects are returned by TarFile.getmember(),
       TarFile.getmembers() and TarFile.gettarinfo() and are
       usually created internally.
    r«zName of the archive member.r¬zPermission bits.r4z6User ID of the user who originally stored this member.r5z7Group ID of the user who originally stored this member.r2zSize in bytes.r3zTime of last modification.ÚchksumzHeader checksum.Útypez–File type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.rgzcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.r6z
User name.r7z Group name.ÚdevmajorzDevice major number.ÚdevminorzDevice minor number.rzThe tar header starts here.r>zThe file's data starts here.Ú pax_headerszMA dictionary containing key-value pairs of an associated pax extended header.r?zSparse member information.Ú_tarfileNÚ_sparse_structsÚ _link_targetcóú—||_d|_d|_d|_d|_d|_d|_t|_d|_    d|_
d|_ d|_ d|_ d|_d|_d|_i|_y)zXConstruct a TarInfo object. name is the optional name
           of the member.
        i¤rrºN)r«r¬r4r5r2r3rwÚREGTYPErxrgr6r7ryrzrr>r?r{©rªr«s  rEr­zTarInfo.__init__us}€ðˆŒ    ØˆŒ    ØˆŒØˆŒØˆŒ    ØˆŒ
؈Œ ܈Œ    ØˆŒ ؈Œ
؈Œ
؈Œ ؈Œ àˆŒ ؈ÔàˆŒ ؈ÕrGcóR—ddl}|jdtd¬«|jS©NrzhThe undocumented "tarfile" attribute of TarInfo objects is deprecated and will be removed in Python 3.16r/©Ú
stacklevel©ÚwarningsÚwarnÚDeprecationWarningr|)rªr‡s  rErAzTarInfo.tarfiles-€ã؏ ‰ ð Aä ¨1ð    ô    .ð}‰}ÐrGcóJ—ddl}|jdtd¬«||_yrƒr†)rªrAr‡s   rErAzTarInfo.tarfile–s*€ã؏ ‰ ð Aä ¨1ð    ô    .𠈍 rGcó—|jS)z(In pax headers, "name" is called "path".©r«r±s rEr0z TarInfo.pathŸs€ðy‰yÐrGcó—||_yr¯rŒrs  rEr0z TarInfo.path¤s    €àˆ    rGcó—|jS)z0In pax headers, "linkname" is called "linkpath".©rgr±s rEr1zTarInfo.linkpath¨r*rGcó—||_yr¯r)rªrgs  rEr1zTarInfo.linkpath­s    €à ˆ rGcó`—d|jj|jt|«fzS)Nz<%s %r at %#x>)rCr‰r«Úidr±s rEÚ__repr__zTarInfo.__repr__±s&€Ø 4§>¡>×#:Ñ#:¸4¿9¹9ÄRÈÃXÐ"NÑNÐNrGT)
r«r3r¬rgr4r5r6r7rqÚ_KEEPc
ó—|    rtj|«} ntj|«} ||
ur|| _||
ur|| _||
ur|| _||
ur|| _||
ur|| _||
ur|| _||
ur|| _||
ur|| _    | S)zGReturn a deep copy of self with the given attributes replaced.
        )
ÚcopyÚdeepcopyr«r3r¬rgr4r5r6r7) rªr«r3r¬rgr4r5r6r7rqr”Úresults             rEràzTarInfo.replace´sŸ€ñ Ü—]‘] 4Ó(‰Fä—Y‘Y˜t“_ˆFØ uÑ ØˆFŒKØ ˜Ñ Ø ˆFŒLØ uÑ ØˆFŒKØ ˜5Ñ  Ø&ˆFŒOØ eÑ ØˆFŒJØ eÑ ØˆFŒJØ ˜Ñ Ø ˆFŒLØ ˜Ñ Ø ˆFŒL؈ rGcó¬—|j€d}n|jdz}|j||j|j|j|j
|j |j|j|j|j|j|jdœ }|dtk(r!|djd«s |dxxdz cc<|S)z9Return the TarInfo's attributes as a dictionary.
        Néÿ) r«r¬r4r5r2r3rwrxrgr6r7ryrzrxr«r[)r¬r«r4r5r2r3rwrxrgr6r7ryrzÚDIRTYPErè)rªr¬Úinfos   rEÚget_infozTarInfo.get_infoÐs±€ð 9‰9Р؉Dà—9‘9˜vÑ%ˆDàŸ    ™    ØØŸ™ØŸ™ØŸ    ™    ØŸ
™
ØŸ ™ ØŸ    ™    ØŸ ™ ØŸ
™
ØŸ
™
ØŸ ™ ØŸ ™ ñ
ˆð  ‰<œ7Ò "¨4°©<×+@Ñ+@ÀÔ+EØ ‹L˜CÑ ‹Làˆ rGÚsurrogateescapecó.—|j«}|j«D]\}}|Œ    td|z«‚|tk(r|j    |||«S|t
k(r|j |||«S|tk(r|j||«Std«‚)z<Return a tar header as a string of 512 byte blocks.
        z%s may not be Nonezinvalid format)    rÚitemsr=rÚcreate_ustar_headerrÚcreate_gnu_headerrÚcreate_pax_header)rªrcrCrDrœr«Úvalues       rEÚtobufz TarInfo.tobufìs¡€ð}‰}‹ˆØŸ:™:›<ò    >‰KˆD%؉}Ü Ð!5¸Ñ!<Ó=Ð=ð    >ð ”\Ò !Ø×+Ñ+¨D°(¸FÓCÐ CØ ”zÒ !Ø×)Ñ)¨$°¸&ÓAÐ AØ ”zÒ !Ø×)Ñ)¨$°Ó9Ð 9äÐ-Ó.Ð .rGcó,—t|d<t|dj||««tkDr t    d«‚t|dj||««t
kDr|j |d||«\|d<|d<|j|t||«S)z3Return the object as a ustar header block.
        Úmagicrgzlinkname is too longr«Úprefix)    Ú POSIX_MAGICr?r>Ú LENGTH_LINKr=Ú LENGTH_NAMEÚ_posix_split_nameÚ_create_headerr)rªrœrCrDs    rEr¡zTarInfo.create_ustar_headerýs”€ô$ˆˆW‰ ä ˆtJÑ×&Ñ& x°Ó8Ó 9¼KÒ GÜÐ3Ó4Ð 4ä ˆtF‰|×"Ñ" 8¨VÓ4Ó 5¼ Ò CØ+/×+AÑ+AÀ$ÀvÁ,ÐPXÐZ`Ó+aÑ (ˆD‰N˜D ™Là×"Ñ" 4¬°xÀÓHÐHrGcóZ—t|d<d}t|dj||««tkDr||j    |dt
||«z }t|dj||««t kDr||j    |dt||«z }||j|t||«zS)z:Return the object as a GNU header block sequence.
        r§rGrgr«)
Ú    GNU_MAGICr?r>rªÚ_create_gnu_long_headerÚGNUTYPE_LONGLINKr«ÚGNUTYPE_LONGNAMEr­r)rªrœrCrDrls     rEr¢zTarInfo.create_gnu_header
s°€ô"ˆˆW‰ àˆÜ ˆtJÑ×&Ñ& x°Ó8Ó 9¼KÒ GØ 4×/Ñ/°°ZÑ0@ÔBRÐT\Ð^dÓeÑ eˆCä ˆtF‰|×"Ñ" 8¨VÓ4Ó 5¼ Ò CØ 4×/Ñ/°°V± Ô>NÐPXÐZ`ÓaÑ aˆCàT×(Ñ(¨¬z¸8ÀVÓLÑLÐLrGcó\—t|d<|jj«}ddtfddtfddfD];\}}}||vrŒ     ||j dd    «t||«|kDsŒ4||||<Œ=d
D]e\}}d }||}    t|    t«}
|
r t|    «n|    } d | cxkr d |dz
zks
nd ||<d}n    |
r| ||<d}|sŒS||vsŒXt|    «||<Œg|r|j|t|«} nd} | |j|tdd«zS#t $r ||||<YŒòwxYw)z³Return the object as a ustar header block. If it cannot be
           represented this way, prepend a pax extended header sequence
           with supplement information.
        r§r«r0rgr1)r6r6é )r7r7r´rSrT))r4rQ)r5rQ)r2é )r3rµFrrQrTrGrà)r©r{r–r«rªr>ÚUnicodeEncodeErrorr?Ú
isinstanceÚfloatÚroundÚstrÚ_create_pax_generic_headerÚXHDTYPEr­r) rªrœrCr{r«ÚhnamerBrbÚ    needs_paxÚvalÚ val_is_floatÚval_intrls              rEr£zTarInfo.create_pax_headers†€ô
$ˆˆW‰ Ø×&Ñ&×+Ñ+Ó-ˆ ð
˜¤Ð-°
¸JÌ Ð/TØ&Ð(>ð$@ò    0Ñ ˆD%˜ð˜ Ñ#àð ØT‘
×!Ñ! '¨8Ô4ô
4˜‘:‹ Ó'Ø%)¨$¡Z ˜EÒ"ð!    0ð(Rò    -‰LˆD&؈Iàt‘*ˆCÜ% c¬5Ó1ˆLÙ$0”e˜C”j°cˆGؘÔ3 !¨°©
Ñ"3Ô3àT‘
Ø ‘    Ùð%T‘
Ø     ò˜T¨Ò4Ü$'¨£H ˜DÒ!ð%    -ñ* Ø×1Ñ1°+¼wÈÓQ‰CàˆCàT×(Ñ(¨¬|¸WÀiÓPÑPÐPøôG&ò Ø%)¨$¡Z ˜EÑ"Ùð úsÁDÄD+Ä*D+có0—|j|td«S)zAReturn the object as a pax global header block sequence.
        r;)r»ÚXGLTYPE)Úclsr{s  rEÚcreate_pax_global_headerz TarInfo.create_pax_global_headerRs€ð×-Ñ-¨k¼7ÀGÓLÐLrGcóR—|jd«}tdt|««D]t}dj|d|«}dj||d«}t|j    ||««t
ksŒNt|j    ||««t ksŒq||fStd«‚)zUSplit a name longer than 100 chars into a prefix
           and a name part.
        r[rNzname is too long)ÚsplitrWr?rr>Ú LENGTH_PREFIXr«r=)rªr«rCrDÚ
componentsr\r¨s       rEr¬zTarInfo._posix_split_nameXs €ð—Z‘Z “_ˆ
ܐqœ#˜j›/Ó*ò    1ˆAØ—X‘X˜j¨¨!˜nÓ-ˆFØ—8‘8˜J q r˜NÓ+ˆDܐ6—=‘= ¨6Ó2Ó3´}ÓDܘŸ ™  H¨fÓ5Ó6¼+ÓEØðtˆ|Ðð    1ôÐ/Ó0Ð 0rGcóh—|jd«ttfv}|r;t|jdd«d|«}t|jdd«d|«}nt    dd||«}t    dd||«}|jdt
«}|€ t d«‚t    |jd    d«d
||«t|jd d«d zd|«t|jd d«d|«t|jdd«d|«t|jdd«d|«t|jdd«d|«d|t    |jdd«d
||«|jdt«t    |jdd«d||«t    |jdd«d||«||t    |jdd«d||«g}tjdtzdj|««}    t|    t d«d}
|    ddtd|
zd«z|    ddz}    |    S) z„Return a header block. info is a dictionary with file
           information, format must be one of the *_FORMAT constants.
        rxryrrQrzrºNzTarInfo.type must not be Noner«rr¬ršr4r5r2rµr3s        rgr§r6r´r7r¨r z%dsrGi”þÿÿz%06orSi›þÿÿ)ÚgetÚCHRTYPEÚBLKTYPErerFr€r=r©rjrår rror_) rœrcrCrDÚhas_device_fieldsryrzÚfiletypeÚpartsrlrws            rEr­zTarInfo._create_headerhs€ð
!ŸH™H VÓ,´¼'Ð0BÐBÐ٠ܘ4Ÿ8™8 J°Ó2°A°vÓ>ˆHܘ4Ÿ8™8 J°Ó2°A°vÓ>‰Hä˜2˜q (¨FÓ3ˆHܘ2˜q (¨FÓ3ˆHð—8‘8˜F¤GÓ,ˆØ Ð ÜÐ<Ó=Ð =ô —‘˜ Ó$ c¨8°VÓ <Ü —‘˜ Ó# fÑ,¨a°Ó 8Ü —‘˜ Ó" A vÓ .Ü —‘˜ Ó" A vÓ .Ü —‘˜ Ó# R¨Ó 0Ü —‘˜ !Ó$ b¨&Ó 1Ø Ø Ü —‘˜ RÓ(¨#¨x¸Ó @Ø H‰HWœkÓ *Ü —‘˜ "Ó% r¨8°VÓ <Ü —‘˜ "Ó% r¨8°VÓ <Ø Ø Ü —‘˜ 2Ó&¨¨X°vÓ >ð
ˆô$k‰k˜%¤)Ñ+¨S¯X©X°e«_Ó=ˆÜ˜c¤9 * +Ð.Ó/°Ñ2ˆØ%4ˆjœ5 ¨FÑ!2°GÓ<Ñ<¸sÀ4À5¸zÑIˆØˆ
rGcón—tt|«t«\}}|dkDr|t|z
tzz }|S)zdReturn the string payload filled with zero bytes
           up to the next 512 byte border.
        r)rtr?r r@)Úpayloadr{r|s   rEÚ_create_payloadzTarInfo._create_payload’s9€ô
#¤3 w£<´Ó;ш    Ø qŠ=Ø œ     IÑ-´Ñ4Ñ 4ˆG؈rGcóΗ|j||«tz}i}d|d<||d<t|«|d<t|d<|j    |t
||«|j |«zS)zTReturn a GNUTYPE_LONGNAME or GNUTYPE_LONGLINK sequence
           for name.
        z ././@LongLinkr«rxr2r§)r>r@r?r¯r­rrÓ)rÄr«rxrCrDrœs      rEr°zTarInfo._create_gnu_long_headerœst€ð
{‰{˜8 VÓ,¬sÑ2ˆàˆØ&ˆˆV‰ ؈ˆV‰ ܘ4“yˆˆV‰ Ü!ˆˆW‰ ð×!Ñ! $¬ °hÀÓGØ×#Ñ# DÓ)ñ*ð    *rGcó˜—d}|j«D]\}}    |jdd«Œd}|r|dz }|j«D]¢\}}|jd«}|r|j|d«}n|jd«}t|«t|«zdz}d    x}    }
    |tt    |
««z}    |    |
k(rn|    }
Œ |t t    |
«d
«d z|zd z|zd zz }Œ¤i} d| d<|| d<t|«| d<t | d<|j| td
d«|j|«zS#t$rd}YŒwxYw)z¡Return a POSIX.1-2008 extended or global header sequence
           that contains a list of keyword, value pairs. The values
           must be strings.
        Fr;rTTrGs21 hdrcharset=BINARY
ržrrrSó ó=ó
z././@PaxHeaderr«rxr2r§rà)
r r>r¶r?rºr_r©r­rrÓ) rÄr{rxrCÚbinaryÚkeywordr¤ÚrecordsÚlr[rLrœs             rEr»z"TarInfo._create_pax_generic_header­s€ðˆØ)×/Ñ/Ó1ò    ‰NˆGUð Ø— ‘ ˜W hÕ/ð    ðˆÙ à Ð0Ñ 0ˆGà)×/Ñ/Ó1ò    V‰NˆGUØ—n‘n WÓ-ˆGÙ🠙  XÐ/@ÓA‘àŸ ™  WÓ-äG“ œs 5›zÑ)¨AÑ-ˆA؈IˆAØØœœC ›F› ‘OØ˜’6ØØð    ð
”uœS ›V WÓ-°Ñ4°wÑ>ÀÑEÈÑMÐPUÑUÑ U‰Gð!    Vð(ˆØ'ˆˆV‰ ؈ˆV‰ ܘ7“|ˆˆV‰ Ü#ˆˆW‰ ð×!Ñ! $¬ °g¸yÓIØ×#Ñ# GÓ,ñ-ð    -øôI&ò ؐÛð úsšD9Ä9 E    ÅE    cól—t|«dk(r td«‚t|«tk7r td«‚|j    t
«tk(r t d«‚t|dd«}|t|«vr td«‚|«}t|dd||«|_ t|dd    «|_ t|d    d
«|_ t|d
d «|_t|d d «|_t|d d«|_||_|dd |_t|d d||«|_t|dd||«|_t|dd||«|_t|dd«|_t|dd«|_t|dd||«}|j$t0k(r&|jj3d«r t4|_|j$t6k(rxd}g}t9d«D]@}        t|||dz«}
t||dz|dz«} |j=|
| f«|dz }ŒBt?|d«} t|dd«} || | f|_ |jC«r |jjEd«|_ |r)|j$tFvr|dz|jz|_ |S#t:$rYŒwxYw)zAConstruct a TarInfo object from a 512 byte bytes object.
        rz empty headerztruncated headerzend of file headeré”éœz bad checksumrélété|éˆéii    i)iIiQiYiôr[i‚rõrµéiâiãiï)$r?r”r r–Úcountr@r˜r]rorZrMr«r¬r4r5r2r3rwrxrgr6r7ryrzÚAREGTYPErèr›ÚGNUTYPE_SPARSErWr=rÚboolr}reÚrstripÚ    GNU_TYPES)rÄrlrCrDrwÚobjr¨rÇÚstructsr\rÚnumbytesÚ
isextendedÚorigsizes              rEÚfrombufzTarInfo.frombufàs¥€ô ˆs‹8qŠ=Ü" >Ó2Ð 2Ü ˆs‹8”yÒ  Ü&Ð'9Ó:Ð :Ø 9‰9”S‹>œYÒ &Ü Ð!5Ó6Ð 6äS˜˜S\Ó"ˆØ œ cÓ*Ñ *Ü$ ^Ó4Ð 4á‹eˆÜs˜1˜Sz 8¨VÓ4ˆŒÜs˜3˜s|Ó$ˆŒÜc˜#˜clÓ#ˆŒÜc˜#˜clÓ#ˆŒÜs˜3˜s|Ó$ˆŒÜ˜˜C ˜ Ó%ˆŒ    ØˆŒ
ؐs˜3<ˆŒÜ˜3˜s 3˜<¨°6Ó:ˆŒ ܘ˜C ˜  h°Ó7ˆŒ    Ü˜˜C ˜  h°Ó7ˆŒ    Ü˜3˜s 3˜<Ó(ˆŒ ܘ3˜s 3˜<Ó(ˆŒ ܐS˜˜S\ 8¨VÓ4ˆð 8‰8”xÒ  C§H¡H×$5Ñ$5°cÔ$:܈CŒHð
8‰8”~Ò %؈C؈Gܘ1“Xò ðÜ   S¨¨r©Ð!2Ó3FÜ" 3 s¨R¡x°°b±Ð#9Ó:Hð—‘ ¨Ð1Ô2ؐr‘    ‘ð ô˜c #™h›ˆJܘ3˜s 3˜<Ó(ˆHØ#*¨J¸Ð"AˆCÔ ð 9‰9Œ;Ø—x‘x—‘ sÓ+ˆCŒHñ c—h‘h¤iÑ/Ø ‘| c§h¡hÑ.ˆCŒH؈
øô"òÚðúsÇ$%J&Ê&    J3Ê2J3cóü—|jjt«}|j||j|j
«}|jj «tz
|_|j|«S)zOReturn the next TarInfo object from TarFile object
           tarfile.
        )    rÆrur rñrCrDrýrÚ _proc_member)rÄrArlrìs    rEÚ fromtarfilezTarInfo.fromtarfiles^€ð
o‰o×"Ñ"¤9Ó-ˆØk‰k˜#˜w×/Ñ/°·±Ó@ˆØ—_‘_×)Ñ)Ó+¬iÑ7ˆŒ
Ø×Ñ Ó(Ð(rGcó—|jttfvr|j|«S|jtk(r|j |«S|jt ttfvr|j|«S|j|«S)zYChoose the right processing method depending on
           the type and call it.
        ) rxr²r±Ú _proc_gnulongrèÚ _proc_sparser¼rÃÚSOLARIS_XHDTYPEÚ    _proc_paxÚ _proc_builtin)rªrAs  rErózTarInfo._proc_member4sx€ð 9‰9Ô)Ô+;Ð<Ñ <Ø×%Ñ% gÓ.Ð .Ø Y‰Yœ.Ò (Ø×$Ñ$ WÓ-Ð -Ø Y‰Yœ7¤G¬_Ð=Ñ =Ø—>‘> 'Ó*Ð *à×%Ñ% gÓ.Ð .rGcó¬—|jj«|_|j}|j«s|jt
vr||j |j«z }||_|j|j|j|j«|j«r |jjd«|_|S)zfProcess a builtin type or an unknown type which
           will be treated as a regular file.
        r[)rÆrýr>rcrxÚSUPPORTED_TYPESÚ_blockr2rÚ_apply_pax_infor{rCrDrer«rê)rªrArs   rErúzTarInfo._proc_builtinAs €ð#Ÿ?™?×/Ñ/Ó1ˆÔØ×!Ñ!ˆØ :‰:Œ<˜4Ÿ9™9¬OÑ;à d—k‘k $§)¡)Ó,Ñ ,ˆF؈Œð     ×јW×0Ñ0°'×2BÑ2BÀGÇNÁNÔSð :‰:Œ<ØŸ    ™    ×(Ñ(¨Ó-ˆDŒIàˆ rGcó<—|jj|j|j««}    |j    |«}|j|_|jtk(r't||j|j«|_n9|jtk(r&t||j|j«|_|j#«rt%|jd«|_|S#t
$r}t t|««d‚d}~wwxYw)zSProcess the blocks that hold a GNU longname
           or longlink member.
        Nr[)rÆrurýr2rôrr›rºrrxr²rMrCrDr«r±rgrer)rªrArlÚnextrs     rErözTarInfo._proc_gnulongWsڀðo‰o×"Ñ" 4§;¡;¨t¯y©yÓ#9Ó:ˆð    :Ø×#Ñ# GÓ,ˆDð —k‘kˆŒ Ø 9‰9Ô(Ò (ܘC ×!1Ñ!1°7·>±>ÓBˆDIØ Y‰YÔ*Ò *Ü  W×%5Ñ%5°w·~±~ÓFˆDŒMð :‰:Œ<Ü$ T§Y¡Y°Ó4ˆDŒIàˆ øô!ò    :Ü'¬¨A«Ó/°TÐ 9ûð    :ús¶C8Ã8    DÄDÄDcó
—|j\}}}|`|r„|jjt«}d}t    d«D]D}    t |||dz«}t ||dz|dz«}    |r|    r|j||    f«|dz }ŒFt|d«}|rŒ„||_    |jj«|_ |j|j|j«z|_||_ |S#t $rYŒywxYw)z8Process a GNU sparse header plus extra headers.
        rérµråiø)r}rÆrur rWr]r=rrér?rýr>rýr2r)
rªrArírïrðrlrÇr\rrîs
          rEr÷zTarInfo._proc_sparsers€ð)-×(<Ñ(<Ñ%ˆ˜XØ Ð  ñØ—/‘/×&Ñ&¤yÓ1ˆC؈Cܘ2“Yò ðÜ   S¨¨r©Ð!2Ó3FÜ" 3 s¨R¡x°°b±Ð#9Ó:Hñ™hØ—N‘N F¨HÐ#5Ô6ؐr‘    ‘ð ô˜c #™h›ˆJòðˆŒ à"Ÿ?™?×/Ñ/Ó1ˆÔØ×)Ñ)¨D¯K©K¸¿    ¹    Ó,BÑBˆŒØˆŒ    Øˆ øô"òÚðúsÁ%C5Ã5    DÄDcóV—|jj|j|j««}|jt
k(r |j }n|j j«}tjd|«}|#|jd«jd«|d<|jd«}|dk(r |j}nd}tjd«}d}|j||«x}ræ|j!«\}    }
t#|    «}    |    dk(r t%d    «‚||j'd
«dz|j)d«|    zdz
} |j+|
dd|j,«}
|
t.vr)|j+| ||j|j,«} n|j+| dd|j,«} | ||
<||    z }|j||«x}rŒæ    |j1|«} d |vr|j9| |«nSd |vr|j;| ||«n;|jd «dk(r'|jd«dk(r|j=| ||«|jt>t@fvr| jC||j|j,«|jD| _"d|vrS| jF}| jI«s| jtJvr|| j| j«z }||_"| S#t2$r} t5t7| ««d‚d} ~ wwxYw)zVProcess an extended or global header as described in
           POSIX.1-2008.
        s\d+ hdrcharset=([^\n]+)\nNrr;Ú
hdrcharsetÚBINARYs(\d+) ([^=]+)=rrVr/úGNU.sparse.mapúGNU.sparse.sizezGNU.sparse.majorÚ1zGNU.sparse.minorrUr2)&rÆrurýr2rxrÃr{r–ÚreÚsearchÚgrouprKrËrCÚcompileÚmatchÚgroupsrXrZrr5Ú_decode_pax_fieldrDÚPAX_NAME_FIELDSrôrr›rºÚ_proc_gnusparse_01Ú_proc_gnusparse_00Ú_proc_gnusparse_10r¼rørþrr>rcrü)rªrArlr{r rrCÚregexrÇrBrÚr¤rrrs               rErùzTarInfo._proc_paxŽsî€ð
o‰o×"Ñ" 4§;¡;¨t¯y©yÓ#9Ó:ˆð
9‰9œÒ Ø!×-Ñ-‰Kà!×-Ñ-×2Ñ2Ó4ˆKô—    ‘    Ð7¸Ó=ˆØ Ð Ø(-¯ © °A«×(=Ñ(=¸gÓ(FˆK˜ Ñ %ð
!—_‘_ \Ó2ˆ
Ø ˜Ò !Ø×'Ñ'‰HàˆHô —
‘
Ð-Ó.ˆØˆØ—{‘{ 3¨Ó,Ð,ˆeÐ,Ø#Ÿl™l›n‰OˆFGܘ“[ˆFؘŠ{Ü(Ð)9Ó:Ð:ؘŸ    ™     !›  qÑ(¨¯©°Q«¸&Ñ)@À1Ñ)DÐEˆEð×,Ñ,¨W°g¸wØ—N‘Nó$ˆGàœ/Ñ)Ø×.Ñ.¨u°hÀ×@PÑ@PØŸ™ó(‘ð×.Ñ.¨u°g¸wØŸ™ó(ð$)ˆK˜Ñ  Ø 6‰MˆCð1—{‘{ 3¨Ó,Ð,ˆeÑ,ð6    :Ø×#Ñ# GÓ,ˆDð
˜{Ñ *à × #Ñ # D¨+Õ 6à  +Ñ -à × #Ñ # D¨+°sÕ ;à _‰_Ð/Ó 0°CÒ 7¸K¿O¹OÐL^Ó<_ÐcfÒ<fà × #Ñ # D¨+°wÔ ?à 9‰9œ¤/Ð2Ñ 2à ×  Ñ   ¨g×.>Ñ.>ÀÇÁÔ OØŸ+™+ˆDŒKà˜Ñ$ð×)Ñ)Ø—:‘:”< 4§9¡9´OÑ#CؘdŸk™k¨$¯)©)Ó4Ñ4FØ!'”àˆ øô=ò    :Ü'¬¨A«Ó/°TÐ 9ûð    :úsÇ!LÌ    L(ÌL#Ì#L(cóP—g}tjd|«D]+}|jt|j    d«««Œ-g}tjd|«D]+}|jt|j    d«««Œ-t t ||««|_y)z?Process a GNU tar extended sparse header, version 0.0.
        s\d+ GNU.sparse.offset=(\d+)\nrs\d+ GNU.sparse.numbytes=(\d+)\nN)r    ÚfinditerrrXr ÚlistÚzipr?)rªrr{rlÚoffsetsr rîs       rErzTarInfo._proc_gnusparse_00òs‰€ðˆÜ—[‘[Ð!BÀCÓHò    0ˆEØ N‰Nœ3˜uŸ{™{¨1›~Ó.Õ /ð    0àˆÜ—[‘[Ð!DÀcÓJò    1ˆEØ O‰OœC § ¡ ¨A£Ó/Õ 0ð    1äœ3˜w¨Ó1Ó2ˆ rGc    ó®—|djd«Dcgc] }t|«‘Œ}}tt|ddd…|ddd…««|_ycc}w)z?Process a GNU tar extended sparse header, version 0.1.
        rú,Nr/r)rÇrXrrr?)rªrr{Úxr?s     rErzTarInfo._proc_gnusparse_01ýsW€ð#.Ð.>Ñ"?×"EÑ"EÀcÓ"JÖK˜Q”#a•&ÐKˆÐKÜœ3˜v¡c¨ c™{¨F°1°4°a°4©LÓ9Ó:ˆ ùòLs—Ac    ó—d}g}|jjt«}|jdd«\}}t    |«}t |«|dzkrgd|vr"||jjt«z }|jdd«\}}|j t    |««t |«|dzkrŒg|jj«|_tt|ddd…|ddd…««|_ y)z?Process a GNU tar extended sparse header, version 1.0.
        NrØrr/) rÆrur rÇrXr?rrýr>rrr?)rªrr{rAÚfieldsr?rlÚnumbers        rErzTarInfo._proc_gnusparse_10sâ€ðˆØˆØo‰o×"Ñ"¤9Ó-ˆØ—i‘i  qÓ)‰ ˆÜV“ˆÜ&‹k˜F Q™JÒ&ؘCÑØw—‘×+Ñ+¬IÓ6Ñ6ØŸ)™) E¨1Ó-‰KˆFCØ M‰Mœ#˜f›+Ô &ô    &‹k˜F Q™JÓ&ð
#Ÿ?™?×/Ñ/Ó1ˆÔÜœ3˜v¡c¨ c™{¨F°1°4°a°4©LÓ9Ó:ˆ rGcóœ—|j«D]“\}}|dk(rt|d|«Œ|dk(rt|dt|««Œ5|dk(rt|dt|««ŒQ|tvsŒZ|tvr    t    ||«}|dk(r|j d«}t|||«Œ•|j«|_y#t
$rd}YŒHwxYw)    zoReplace fields with supplemental information from a previous
           pax extended or global header.
        zGNU.sparse.namer0rr2zGNU.sparse.realsizerr[N)    r ÚsetattrrXÚ
PAX_FIELDSÚPAX_NUMBER_FIELDSr=rêr–r{)rªr{rCrDrÚr¤s      rErþzTarInfo._apply_pax_infosـð*×/Ñ/Ó1ò    .‰NˆGUØÐ+Ò+ܘ˜f eÕ,ØÐ-Ò-ܘ˜f¤c¨%£jÕ1ØÐ1Ò1ܘ˜f¤c¨%£jÕ1ØœJÒ&ØÔ/Ñ/ð"Ü 1°'Ñ :¸5Ó A˜ð˜fÒ$Ø!ŸL™L¨Ó-Eܘ˜g uÕ-ð    .ð"'×+Ñ+Ó-ˆÕøô &ò"Ø !šð"úsÁ4B=Â= C Ã
C cój—    |j|d«S#t$r|j||«cYSwxYw)z1Decode a single field from a pax record.
        rT)rKÚUnicodeDecodeError)rªr¤rCÚfallback_encodingÚfallback_errorss     rErzTarInfo._decode_pax_field*s<€ð    DØ—<‘< ¨(Ó3Ð 3øÜ!ò    DØ—<‘<Р1°?ÓCÒ Cð    Dús ‚”2±2cóH—t|t«\}}|r|dz }|tzS)z_Round up a byte count by BLOCKSIZE and return it,
           e.g. _block(834) => 1024.
        r)rtr )rªrær{r|s    rErýzTarInfo._block2s,€ô# 5¬)Ó4ш    Ù Ø a‰KˆFØœ    Ñ!Ð!rGcó&—|jtvS©z4Return True if the Tarinfo object is a regular file.)rxÚ REGULAR_TYPESr±s rErcz TarInfo.isreg;s€ày‰yœMÐ)Ð)rGcó"—|j«Sr*)rcr±s rEÚisfilezTarInfo.isfile?s€àz‰z‹|ÐrGcó(—|jtk(S)z!Return True if it is a directory.)rxr›r±s rErez TarInfo.isdirCó€ày‰yœGÑ#Ð#rGcó(—|jtk(S)z%Return True if it is a symbolic link.)rxÚSYMTYPEr±s rErfz TarInfo.issymGr/rGcó(—|jtk(S)z!Return True if it is a hard link.)rxÚLNKTYPEr±s rErdz TarInfo.islnkKr/rGcó(—|jtk(S)z(Return True if it is a character device.)rxrÌr±s rEÚischrz TarInfo.ischrOr/rGcó(—|jtk(S)z$Return True if it is a block device.)rxrÍr±s rEÚisblkz TarInfo.isblkSr/rGcó(—|jtk(S)zReturn True if it is a FIFO.)rxÚFIFOTYPEr±s rEÚisfifozTarInfo.isfifoWs€ày‰yœHÑ$Ð$rGcó—|jduSr¯)r?r±s rEÚissparsezTarInfo.issparse[s€Ø{‰{ $Ð&Ð&rGcó<—|jtttfvS)zCReturn True if it is one of character device, block device or FIFO.)rxrÌrÍr9r±s rEÚisdevz TarInfo.isdev^s€ày‰yœW¤g¬xÐ8Ð8Ð8rGr)rº)5r‰rŠr‹rŒÚdictÚ    __slots__r­r:rAÚsetterr0r1r“r”ràrrrr¥r¡r¢r£Ú classmethodrÅr¬Ú staticmethodr­rÓr°r»rñrôrórúrör÷rùrrrrþrrýrcr-rerfrdr5r7r:r<r>rrGrErrRs°„ññò
Ù,ð
á!ð
ñGð
ñHð    
ñ
 ð 
ñ -ð 
ñ$ð
ñ>ð
ñFð
ñð
ñð
ñ*ð
ñ *ð!
ñ"/ð#
ñ$5ð%
ñ&9ð'
ñ*.ð+
ñ,ð-
ñ.ð/
ñ0ð1
€Ió6ð0ñóðð ‡^^ñ óð ðñóðð
‡[[ñóððñóðð‡__ñ!óð!òOð %¨e¸eؘu¨E¸Ø ôò8ð8*°HÐEVó/ò" Iò Mò8QðtñMóðMò
ð ñ'óð'ðRñóððñ*óð*ð ñ0-óð0-ðdñ<óð<ð|ñ)óð)ò( /òò,ò6ò8bòH    3ò;ò ;ò .ò.Dò"ò*òò$ò$ò$ò$ò$ò%ò'ó9rGrcó¼—eZdZdZdZdZdZdZeZ    e
Z dZ e ZeZdZ                d8d„Zedddefd„«Zed9d    „«Zed:d
„«Zed:d „«Zed;d „«Zd ddddœZd„Zd„Zd„Zd„Zd<d„Zd=ddœd„Z d>ddœd„Z!d?d„Z"d„Z#d@dddœd„Z$dAdddœd„Z%d „Z&d!„Z'd"„Z(d#„Z)d$„Z*        dBd%„Z+d&„Z,d'„Z-d(„Z.d)„Z/d*„Z0d+„Z1d,„Z2d-„Z3d.„Z4d/„Z5dCd0„Z6d1„Z7d?d2„Z8d3„Z9d4„Z:d5„Z;d6„Z<d7„Z=y)Drz=The TarFile Class provides an interface to tar archives.
    rFrNr cóê—dddddœ}||vr td«‚||_|||_|sZ|jdk(r-tjj |«sd|_d|_t ||j«}d    |_n^|€8t|d «r,t|jttf«r |j}t|d «r|j|_d |_|rtjj|«nd
|_
||_||_|||_|||_|||_|||_|||_|    |_|
|j t,k(r|
|_ni|_| | |_| | |_| |_d    |_g|_d    |_|jj=«|_i|_     |jdk(rd
|_!|jE«|_!|jdk(r^    |jjG|j>«    |j"jI|«}|j8jK|«Œ]|jdvrd |_|j.rm|j"jS|j.jU««}|jjW|«|xj>tY|«z c_y
y
y
#tL$r(|jjG|j>«YŒÀtN$r}tQt|««d
‚d
}~wwxYw#|js|jj[«d |_‚xYw)aÖOpen an (uncompressed) tar archive 'name'. 'mode' is either 'r' to
           read from an existing archive, 'a' to append data to an existing
           file or 'w' to create a new file overwriting an existing one. 'mode'
           defaults to 'r'.
           If 'fileobj' is given, it is used for reading or writing data. If it
           can be determined, 'mode' is overridden by 'fileobj's mode.
           'fileobj' is not closed, when TarFile is closed.
        r zr+bÚwbÚxb©r Úar¡rú!mode must be 'r', 'a', 'w' or 'x'rIr¡FNr«r¬Tr ©rIr¡r).r=r¬Ú_moder£r0ÚexistsÚ    bltn_openrÂr¨r·r«rºr_ÚabspathrÆÚstreamrcrBÚ dereferenceÚ ignore_zerosrCrDrr{ÚdebugÚ
errorlevelÚ copybufsizerÈÚmembersÚ_loadedrýrÚinodesÚ firstmemberrrÿrôrr˜rr
rÅr–rvr?r°)rªr«r¬rÆrcrBrQrRrCrDr{rSrTrUrPÚmodesrrls                  rEr­zTarFile.__init__s€ð ¨T¸Ñ=ˆØ uÑ ÜÐ@ÓAÐ A؈Œ    Ø˜4‘[ˆŒ
áØy‰y˜CÒ¬¯©¯©°tÔ(<à”    Ø!”
Ü  d§j¡jÓ1ˆGØ$ˆDÕ à ¤¨°&Ô!9ܘ7Ÿ<™<¬#¬u¨Ô6Ø—|‘|Üw Ô'Ø$Ÿ\™\”
Ø#ˆDÔ Ù-1”B—G‘G—O‘O DÔ)°tˆŒ    ØˆŒ àˆŒ ð Ð Ø ˆDŒKØ Ð Ø"ˆDŒLØ Ð "Ø*ˆDÔ Ø Ð #Ø ,ˆDÔ Ø Ð Ø$ˆDŒM؈Œ à Ð " t§{¡{´jÒ'@Ø*ˆDÕ à!ˆDÔ à Р؈DŒJØ Ð !Ø(ˆDŒOð'ˆÔ؈Œ ؈Œ ؈Œ Ø—l‘l×'Ñ'Ó)ˆŒ àˆŒ ð    Øy‰y˜CÒØ#'Ô Ø#'§9¡9£;Ô ày‰y˜CÒðØ—L‘L×%Ñ% d§k¡kÔ2ð:Ø"&§,¡,×":Ñ":¸4Ó"@˜ØŸ ™ ×+Ñ+¨GÔ4ð    ðy‰y˜OÑ+Ø#” à×#Ò#ØŸ,™,×?Ñ?À×@PÑ@P×@UÑ@UÓ@WÓXCØ—L‘L×&Ñ& sÔ+Ø—K’K¤3 s£8Ñ+–Kð$ð,øô *òØŸ ™ ×)Ñ)¨$¯+©+Ô6ÙÜ&ò:Ü'¬¨A«Ó/°TÐ9ûð:ûð    Ø×#Ò#Ø— ‘ ×"Ñ"Ô$؈DŒKØ ús>ÇA MÈ&6K-ÉBMË-.L?ÌMÌL?Ì%L:Ì:L?Ì?MÍ0M2c ó‡—|s |s td«‚|dvrzˆfd„}g}t‰j|¬«D]:}t‰‰j|«}    ||j    «}
    |    |d|fi|¤ŽcSd    j|«} t d
| ›«‚d |vrb|jd d «\} }| xsd} |xsd }|‰jvrt‰‰j|«}    nt d|z«‚|    || |fi|¤ŽSd|vrg|jdd «\} }| xsd} |xsd }| dvr td«‚|jdd«}t|| ||||«}    ‰|| |fi|¤Ž}d|_|S|dvr‰j|||fi|¤ŽStd«‚#t
t f$r5} |jd|›d| ›«||j
«Yd} ~ Œd} ~ wwxYw#|j«‚xYw)a§Open a tar archive for reading, writing or appending. Return
           an appropriate TarFile class.
 
           mode:
           'r' or 'r:\*' open for reading with transparent compression
           'r:'         open for reading exclusively uncompressed
           'r:gz'       open for reading with gzip compression
           'r:bz2'      open for reading with bzip2 compression
           'r:xz'       open for reading with lzma compression
           'a' or 'a:'  open for appending, creating the file if necessary
           'w' or 'w:'  open for writing without compression
           'w:gz'       open for writing with gzip compression
           'w:bz2'      open for writing with bzip2 compression
           'w:xz'       open for writing with lzma compression
 
           'x' or 'x:'  create a tarfile exclusively without compression, raise
                        an exception if the file is already created
           'x:gz'       create a gzip compressed tarfile, raise an exception
                        if the file is already created
           'x:bz2'      create a bzip2 compressed tarfile, raise an exception
                        if the file is already created
           'x:xz'       create an lzma compressed tarfile, raise an exception
                        if the file is already created
 
           'r|\*'        open a stream of tar blocks with transparent compression
           'r|'         open an uncompressed stream of tar blocks for reading
           'r|gz'       open a gzip compressed stream of tar blocks
           'r|bz2'      open a bzip2 compressed stream of tar blocks
           'r|xz'       open an lzma compressed stream of tar blocks
           'w|'         open an uncompressed stream for writing
           'w|gz'       open a gzip compressed stream for writing
           'w|bz2'      open a bzip2 compressed stream for writing
           'w|xz'       open an lzma compressed stream for writing
        znothing to open)r úr:*có(•—‰j|dk(S)NÚtaropen)Ú    OPEN_METH)rÅrÄs €rEÚnot_compressedz$TarFile.open.<locals>.not_compressedsø€Ø—}‘} XÑ.°)Ñ;Ð;rG)ÚkeyNr z    - method z: ú
z'file could not be opened successfully:
ú:rrÀrÁú|rŸzmode must be 'r' or 'w'rÙé    FrKzundiscernible mode)r=Úsortedr_r‚rýr
r rrÿrrÇÚpopr·r°rÂr^)rÄr«r¬rÆrzÚkwargsr`Ú
error_msgsrÅÚfuncÚ    saved_posrÚerror_msgs_summaryÚfilemoderÙrPrs`                rErz TarFile.openðs9ø€ñJ™GÜÐ.Ó/Ð /à <Ñ ô <àˆJÜ" 3§=¡=°nÔEò
Ü˜s C§M¡M°(Ñ$;Ó<ØÐ&Ø '§ ¡ £IðÙ  c¨7Ñ=°fÑ=Ò=ð
ð"&§¡¨:Ó!6Ð ÜÐFÐGYÐFZÐ[Ó\Ð \à D‰[Ø!%§¡¨C°Ó!3Ñ ˆHhØ’ 3ˆHØÒ( 5ˆHð˜3Ÿ=™=Ñ(ܘs C§M¡M°(Ñ$;Ó<‘ä&Ð'DÀxÑ'OÓPÐPÙ˜˜h¨Ñ:°6Ñ:Ð :à D‰[Ø!%§¡¨C°Ó!3Ñ ˆHhØ’ 3ˆHØÒ( 5ˆHà˜zÑ)Ü Ð!:Ó;Ð;à"ŸJ™J ¸Ó:ˆMܘT 8¨X°wÀØ*ó,ˆFð Ù˜˜h¨Ñ9°&Ñ9ð"ˆAŒM؈Hà _Ñ $ؐ3—;‘;˜t T¨7Ñ=°fÑ=Ð =äÐ-Ó.Ð.øôW"Ô#3Ð4òØ×%Ñ%¨    °(°¸2¸a¸UÐ&CÔDØÐ*ØŸ ™  YÔ/Ýûð    ûðD Ø— ‘ ”Øús$Á"
FÅ G ÆGÆ*GÇGÇ Gc ó6—|dvr td«‚||||fi|¤ŽS)zCOpen uncompressed tar archive name for reading or writing.
        rHrJ)r=)rÄr«r¬rÆrhs     rEr^zTarFile.taropenPs-€ð Ð+Ñ +ÜÐ@ÓAÐ Aِ4˜˜wÑ1¨&Ñ1Ð1rGc óŽ—|dvr td«‚    ddlm}    |||dz||«}    |j|||fi|¤Ž}d
|_    |S#t$r t    d«d‚wxYw#t
$r}||dk(r t d    «|‚‚d}~wwxYw#t
$r'}|j«|dk(r t d    «|‚‚d}~w|j«‚xYw) zkOpen gzip compressed tar archive name for reading or writing.
           Appending is not allowed.
        ©r r¡rúmode must be 'r', 'w' or 'x'r)ÚGzipFilezgzip module is not availableNr}r ròF)
r=ÚgziprrrÊr rÓr
r^r°rÂ)    rÄr«r¬rÆrÙrhrrrrs             rEÚgzopenzTarFile.gzopenXsó€ð
Ñ &ÜÐ;Ó<Ð <ð    MÝ %ð    Ù˜t T¨C¡Z°ÀÓHˆGð         Ø— ‘ ˜D $¨Ñ:°6Ñ:ˆAðˆŒ Øˆøô+ò    MÜ"Ð#AÓBÈÐ Lð    Mûô
ò    ØÐ" t¨s¢{ÜР1Ó2¸Ð9Ø ûð    ûôò    Ø M‰MŒOؐsŠ{ÜР1Ó2¸Ð9Ø ûð    Ø M‰MŒOØ ús9‘A˜A§BÁAÁ    BÁ'A;Á;B    C "B.Â.Cc óP—|dvr td«‚    ddlm}||xs|||¬«}    |j
|||fi|¤Ž}d
|_
|S#t$r t    d«d‚wxYw#t tf$r'}|j«|dk(r td    «|‚‚d}~w|j«‚xYw) zlOpen bzip2 compressed tar archive name for reading or writing.
           Appending is not allowed.
        rprqr)ÚBZ2Filer½N)rÙr znot a bzip2 fileF) r=r¼rvrÊr r^rÓÚEOFErrorr°r
rÂ)    rÄr«r¬rÆrÙrhrvrrs             rEÚbz2openzTarFile.bz2openysŀð
Ñ &ÜÐ;Ó<Ð <ð    LÝ #ñ˜'š/ T¨4¸}ÔMˆð        Ø— ‘ ˜D $¨Ñ:°6Ñ:ˆAðˆŒ Øˆøô!ò    LÜ"Ð#@ÓAÀtÐ Kð    LûôœÐ"ò    Ø M‰MŒOؐsŠ{ÜР2Ó3¸Ð:Ø ûð    Ø M‰MŒOØ ús"‘A§AÁAÁB%Á-"BÂB%c óL—|dvr td«‚    ddlm}m}||xs|||¬«}    |j |||fi|¤Ž}d
|_
|S#t$r t d«d‚wxYw#|tf$r'}    |j«|dk(r td    «|    ‚‚d}    ~    w|j«‚xYw) zkOpen lzma compressed tar archive name for reading or writing.
           Appending is not allowed.
        rprqr)ÚLZMAFiler×r¿N)Úpresetr znot an lzma fileF) r=rÕrzr×rÊr r^rwr°r
rÂ)
rÄr«r¬rÆr{rhrzr×rrs
          rEÚxzopenzTarFile.xzopen•sŀð
Ñ &ÜÐ;Ó<Ð <ð    Mß 0ñ˜7š? d¨D¸Ô@ˆð        Ø— ‘ ˜D $¨Ñ:°6Ñ:ˆAðˆŒ Øˆøô!ò    MÜ"Ð#AÓBÈÐ Lð    Mûðœ8Ð$ò    Ø M‰MŒOؐsŠ{ÜР2Ó3¸Ð:Ø ûð    Ø M‰MŒOØ ús"‘A©A ÁAÁ  B#Á+"B  B#r^rtrxr|)rÀr»r¼r¾có—|jryd|_    |jdvr|jjtt
dzz«|xj t
dzz c_t|j t«\}}|dkDr)|jjtt|z
z«|js|jj«yy#|js|jj«wwxYw)zlClose the TarFile. In write-mode, two finishing zero blocks are
           appended to the archive.
        NTrKr/r) rÈr¬rÆrvr@r rrtÚ
RECORDSIZErÂr°)rªr{r|s   rEr°z TarFile.close¼sʀð ;Š;Ø àˆŒ ð     %؏y‰y˜OÑ+Ø— ‘ ×"Ñ"¤3¬)°a©-Ñ#8Ô9Ø— ’ ¤    ¨A¡ Ñ.• ô%+¨4¯;©;¼
Ó$CÑ!˜    Ø˜q’=Ø—L‘L×&Ñ&¤s¬j¸9Ñ.DÑ'EÔFà×#Ò#Ø— ‘ ×"Ñ"Õ$ð$ø4×#Ò#Ø— ‘ ×"Ñ"Õ$ð$ús –BCÃ)Dcóf—|j|jd««}|€td|z«‚|S)aReturn a TarInfo object for member 'name'. If 'name' can not be
           found in the archive, KeyError is raised. If a member occurs more
           than once in the archive, its last occurrence is assumed to be the
           most up-to-date version.
        r[zfilename %r not found)Ú
_getmemberrêÚKeyError)rªr«rBs   rEÚ    getmemberzTarFile.getmemberÑs6€ð —/‘/ $§+¡+¨cÓ"2Ó3ˆØ ˆ?ÜÐ2°TÑ9Ó:Ð :؈rGcór—|j«|js|j«|jS)zŽReturn the members of the archive as a list of TarInfo objects. The
           list has the same order as the members in the archive.
        )Ú_checkrWÚ_loadrVr±s rEÚ
getmemberszTarFile.getmembersÜs'€ð      ‰ Œ ؏|Š|Ø J‰JŒLà|‰|ÐrGcó\—|j«Dcgc]}|j‘Œc}Scc}w)z‹Return the members of the archive as a list of their names. It has
           the same order as the list returned by getmembers().
        )r†r«)rªrBs  rEÚgetnameszTarFile.getnamesæs#€ð-1¯O©OÓ,=Ö> — “ Ò>Ð>ùÒ>s“)có.—|jd«| |j}|€|}tjj    |«\}}|j tj d«}|jd«}|j«}||_    |€8|jstj|«}n9tj|«}n#tj|j««}d}|j}tj |«r„|j"|j$f}    |jsE|j&dkDr6|    |j(vr(||j(|    k7rt*}
|j(|    }n½t,}
|    dr²||j(|    <n¢tj.|«rt0}
n†tj2|«rt4}
njtj6|«rt8}
tj:|«}n9tj<|«rt>}
ntj@|«rtB}
ny||_||_"|jF|_$|jJ|_&|
t,k(r|jN|_(nd|_(|jR|_*|
|_+||_,tZr(    t[j\|jH«d|_/tbr(    tcjd|jL«d|_3|
t>tBfvrhtitd«rXtitd«rHtjj|jl«|_7tjp|jl«|_9|S#t`$rYŒ±wxYw#t`$rYŒ’wxYw)    aÒCreate a TarInfo object from the result of os.stat or equivalent
           on an existing file. The file is either named by 'name', or
           specified as a file object 'fileobj' with a file descriptor. If
           given, 'arcname' specifies an alternative name for the file in the
           archive, otherwise, the name is taken from the 'name' attribute of
           'fileobj', or the 'name' argument. The name should be a text
           string.
        ÚawxNr[rºrrÚmajorÚminor):r„r«r£r0Ú
splitdriveràr_r`rBr|rQÚlstatÚstatÚfstatÚfilenoÚst_modeÚS_ISREGÚst_inoÚst_devÚst_nlinkrXr3r€ÚS_ISDIRr›ÚS_ISFIFOr9ÚS_ISLNKr1ÚreadlinkÚS_ISCHRrÌÚS_ISBLKrÍr¬Úst_uidr4Úst_gidr5Úst_sizer2Úst_mtimer3rxrgÚpwdÚgetpwuidr6rÚgrpÚgetgrgidr7r¨r‹Úst_rdevryrŒrz) rªr«ÚarcnamerÆÚdrvrBÚstatresrgÚstmdÚinoderxs            rEÚ
gettarinfozTarFile.gettarinfoìsǀ𠠠   ‰ EÔð Ð Ø—<‘<ˆDð
ˆ?؈GÜ—w‘w×)Ñ)¨'Ó2‰ ˆˆWØ—/‘/¤"§&¡&¨#Ó.ˆØ—.‘. Ó%ˆð—,‘,“.ˆØˆÔð ˆ?Ø×#Ò#ÜŸ(™( 4›.‘äŸ'™' $›-‘ä—h‘h˜wŸ~™~Ó/Ó0ˆGØˆà‰ˆÜ <‰<˜Ô Ø—^‘^ W§^¡^Ð4ˆEØ×#Ò#¨×(8Ñ(8¸1Ò(<ؘTŸ[™[Ñ(¨W¸¿ ¹ ÀEÑ8JÒ-JôØŸ;™; uÑ-‘ôØ˜’8Ø)0D—K‘K Ò&Ü \‰\˜$Ô Ü‰DÜ ]‰]˜4Ô  Ü‰DÜ \‰\˜$Ô ÜˆDÜ—{‘{ 4Ó(‰HÜ \‰\˜$Ô Ü‰DÜ \‰\˜$Ô Ü‰DàðˆŒ ØˆŒ Ø—n‘nˆŒ Ø—n‘nˆŒ Ø ”7Š?Ø"Ÿ?™?ˆGLàˆGŒLØ×(Ñ(ˆŒ ؈Œ Ø#ˆÔÝ ð Ü #§ ¡ ¨W¯[©[Ó 9¸!Ñ <” õ ð Ü #§ ¡ ¨W¯[©[Ó 9¸!Ñ <” ð ”GœWÐ%Ñ %Ü”r˜7Ô#¬´°GÔ(<Ü#%§8¡8¨G¯O©OÓ#<Ô Ü#%§8¡8¨G¯O©OÓ#<Ô Øˆøôò Ùð ûô
ò Ùð ús$Ê,'M9Ë'NÍ9    NÎNΠ   NÎN)rVc óΗttjttjt
tj ttjttjttji}|j«|€|}|D]Ñ}|rE|j€ td«nG|j!|j"d«}ttj$||jz««t|j&xs |j(›d|j*xs |j,›«|j/«s|j1«r(tdd|j2|j4fzz«ntd|j6z«|j8€ td«n.td    t;j<|j8«dd
z«t|j>|jA«rdnd z«|rP|jC«rtd |jDz«|jG«rtd |jDz«tI«ŒÔy)aPrint a table of contents to sys.stdout. If 'verbose' is False, only
           the names of the members are printed. If it is True, an 'ls -l'-like
           output is produced. 'members' is optional and must be a subset of the
           list returned by getmembers().
        Nz
??????????rr[z%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02drôrºz-> zlink to )%r€rÚS_IFREGr1ÚS_IFLNKr9ÚS_IFIFOrÌÚS_IFCHRr›ÚS_IFDIRrÍÚS_IFBLKr„r¬r†rËrxrmr6r4r7r5r5r7ryrzr2r3ræÚ    localtimer«rerfrgrdr…)rªÚverboserVÚ    type2moderBÚmodetypes      rErz TarFile.listOsÁ€ôœdŸl™l¬G´T·\±\ÜœtŸ|™|¬W´d·l±lÜœdŸl™l¬G´T·\±\ðCˆ    ð      ‰ Œ à ˆ?؈GØó    ˆGÚØ—<‘<Ð'Ü  Õ-à(Ÿ}™}¨W¯\©\¸1Ó=Hܤ§ ¡ ¨h¸¿¹Ñ.EÓ FÔGÜ w§}¡}Ò'C¸¿ ¹ Ñ'CØ'.§}¡}Ò'C¸¿ ¹ Ð'CðEôFà—=‘=”? g§m¡m¤oÜ Ø$¨×(8Ñ(8¸'×:JÑ:JÐ'KÑKñ!MõNô  ¨¯©Ñ 5Ô6Ø—=‘=Ð(ÜР5Õ6äР=Ü"&§.¡.°·±Ó"?ÀÀÐ"Cñ!DôEô ˜Ÿ ™ ¨w¯}©}¬©ÀBÑGÔ HáØ—=‘=”?Ü ¨×(8Ñ(8Ñ 8Ô9Ø—=‘=”?Ü 
¨W×-=Ñ-=Ñ =Ô>Ü ŽGñ7    rG©Úfiltercób—|jd«|€|}|jBtjj    |«|jk(r|j dd|z«y|j d|«|j ||«}|€|j dd|z«y| ||«}|€|j dd|z«y|j«r(t|d«5}|j||«ddd«y|j«r‰|j|«|ruttj|««D]S}|jtjj||«tjj||«||¬    «ŒUyy|j|«y#1swYyxYw)
a!Add the file 'name' to the archive. 'name' may be any type of file
           (directory, fifo, symbolic link, etc.). If given, 'arcname'
           specifies an alternative name for the file in the archive.
           Directories are added recursively by default. This can be avoided by
           setting 'recursive' to False. 'filter' is a function
           that expects a TarInfo object argument and returns the changed
           TarInfo object, if it returns None the TarInfo object will be
           excluded from the archive.
        rŠNr/ztarfile: Skipped %rrztarfile: Unsupported type %rútarfile: Excluded %rr r·)r„r«r£r0rOÚ_dbgr«rcrNÚaddfilererfÚlistdirÚaddr)rªr«r¦Ú    recursiver¸rBÚfs       rEr¾z TarFile.addzs€ð      ‰ EÔà ˆ?؈Gð 9‰9Ð  ¤R§W¡W§_¡_°TÓ%:¸d¿i¹iÒ%GØ I‰IaÐ.°Ñ5Ô 6Ø à     ‰    !TÔð—/‘/ $¨Ó0ˆà ˆ?Ø I‰IaÐ7¸$Ñ>Ô ?Ø ð Ð Ù˜W“oˆG؈ؗ    ‘    ˜!Ð3°dÑ:Ô;Øð =‰=Œ?ܘ4 Ó&ð )¨!Ø— ‘ ˜W aÔ(÷ )ð )ð]‰]Œ_Ø L‰L˜Ô !Ùܤ§
¡
¨4Ó 0Ó1ò6AØ—H‘HœRŸW™WŸ\™\¨$°Ó2´B·G±G·L±LÀÈ!Ó4LØ%¨fðõ6ñ6ðð L‰L˜Õ !÷ )ð )ús ÃF%Æ%F.cóì—|jd«|€*|j«r|jdk7r td«‚t    j|«}|j |j |j|j«}|jj|«|xjt|«z c_ |j}|t||j|j|¬«t|jt «\}}|dkDr.|jjt"t |z
z«|dz }|xj|t zz c_ |j$j'|«y)aEAdd the TarInfo object 'tarinfo' to the archive. If 'tarinfo' represents
           a non zero-size regular file, the 'fileobj' argument should be a binary file,
           and tarinfo.size bytes are read from it and added to the archive.
           You can create TarInfo objects directly, or by using gettarinfo().
        rŠNrz3fileobj not provided for non zero-size regular file)rzr)r„rcr2r=r–r¥rcrCrDrÆrvrr?rUrsrtr r@rVr)rªrBrÆrlrzr{r|s       rEr¼zTarFile.addfile­s€ð       ‰ EÔà ˆ?˜wŸ}™}œ°7·<±<À1Ò3DÜÐRÓSÐ Sä—)‘)˜GÓ$ˆàm‰m˜DŸK™K¨¯©¸¿ ¹ ÓDˆØ  ‰ ×ј3ÔØ  Š ”s˜3“xэ Ø× Ñ ˆà Ð Ü ˜ §¡¨w¯|©|ÀWÕ MÜ & w§|¡|´YÓ ?Ñ ˆFIؘ1Š}Ø— ‘ ×"Ñ"¤3¬)°iÑ*?Ñ#@ÔAؘ!‘ Ø KŠK˜6¤IÑ-Ñ -Kà  ‰ ×јGÕ$rGcó—|€M|j}|€"ddl}|jdtd¬«tSt |t «r td«‚|St|«r|S    t|S#t$rtd|›d«d‚wxYw)Nrz˜Python 3.14 will, by default, filter extracted tar archives and reject files or modify their metadata. Use the filter argument to control this behavior.rr„zrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.zfilter z
 not found) Úextraction_filterr‡rˆr‰rr·rºÚ    TypeErrorÚcallableÚ_NAMED_FILTERSrr=)rªr¸r‡s   rEÚ_get_filter_functionzTarFile._get_filter_functionÉs¨€Ø ˆ>Ø×+Ñ+ˆF؈~ÛØ— ‘ ðJô'°1ð    ô6ô
,Ð+ܘ&¤#Ô&Üð6ó7ð7ðˆMÜ FÔ ØˆMð    GÜ! &Ñ)Ð )øÜò    Gܘw v j°
Ð;Ó<À$Ð Fð    Gús ÁA'Á'B)Ú numeric_ownerr¸có@—g}|j|«}|€|}|D]]}|j|||«}|€Œ|j«r|j|«|j    |||j« |¬«Œ_|j d„d¬«|D]e}t jj||j«}        |j||    |¬«|j||    «|j||    «Œgy#t$r}
|j|
«Yd}
~
Œˆd}
~
wwxYw)a˜Extract all members from the archive to the current working
           directory and set owner, modification time and permissions on
           directories afterwards. 'path' specifies a different directory
           to extract to. 'members' is optional and must be a subset of the
           list returned by getmembers(). If 'numeric_owner' is True, only
           the numbers for user/group names are used and not the names.
 
           The 'filter' function will be called on each member just
           before extraction.
           It can return a changed TarInfo or None to skip the member.
           String names of common filters are accepted.
        N©Ú    set_attrsrÈcó—|jSr¯rŒ)rIs rEú<lambda>z$TarFile.extractall.<locals>.<lambda>    s
€ q§v¡v€rGT)raÚreverse)rÈ)rÇÚ_get_extract_tarinforerÚ _extract_oneÚsortr£r0rr«ÚchownÚutimeÚchmodr Ú_handle_nonfatal_error) rªr0rVrÈr¸Ú directoriesÚfilter_functionrirBÚdirpathrs            rEÚ
extractallzTarFile.extractallás!€ðˆ à×3Ñ3°FÓ;ˆØ ˆ?؈Gàò
    ;ˆFØ×/Ñ/°¸ÈÓNˆGØˆØØ}‰}Œð×"Ñ" 7Ô+Ø × Ñ ˜g t¸7¿=¹=»?Ð7JØ,9ð õ ;ð
    ;ð    ×ÑÑ-°tÐÔ<ð#ò    /ˆGÜ—g‘g—l‘l 4¨¯©Ó6ˆGð /Ø—
‘
˜7 G¸=
ÔIØ—
‘
˜7 GÔ,Ø—
‘
˜7 GÕ,ñ     /øô  ò /Ø×+Ñ+¨A×.Ñ.ûð /úsÂ>8C9Ã9    DÄDÄDcóz—|j|«}|j|||«}||j||||«yy)a¯Extract a member from the archive to the current working directory,
           using its full name. Its file information is extracted as accurately
           as possible. 'member' may be a filename or a TarInfo object. You can
           specify a different directory using 'path'. File attributes (owner,
           mtime, mode) are set unless 'set_attrs' is False. If 'numeric_owner'
           is True, only the numbers for user/group names are used and not
           the names.
 
           The 'filter' function will be called before extraction.
           It can return a changed TarInfo or None to skip the member.
           String names of common filters are accepted.
        N)rÇrÏrÐ)rªrir0rËrÈr¸r×rBs        rEÚextractzTarFile.extract    sG€ð×3Ñ3°FÓ;ˆØ×+Ñ+¨F°OÀTÓJˆØ Ð Ø × Ñ ˜g t¨Y¸ Õ Fð rGcóð—t|t«r|j|«}n|}|}    |||«}|€ |jdd|jz«y|j«rDtj|«}tjj||j«|_|S#ttf$r}|j |«Yd}~Œd}~wt $r}|j|«Yd}~Œ¿d}~wwxYw)z@Get filtered TarInfo (or None) from member, which might be a strNr/rº)r·rºr‚rÓrÚ_handle_fatal_errorr rÕr»r«rdr–r£r0rrgr~)rªrir×r0rBÚ
unfilteredrs       rErÏzTarFile._get_extract_tarinfo!    sҀä fœcÔ "Ø—n‘n VÓ,‰GàˆGàˆ
ð    +Ù% g¨tÓ4ˆGð
ˆ?Ø I‰IaÐ/°*·/±/ÑAÔ BØà =‰=Œ?Ü—i‘i Ó(ˆGÜ#%§7¡7§<¡<°°g×6FÑ6FÓ#GˆGÔ  ØˆøôœÐ%ò    (Ø × $Ñ $ Q× 'Ñ 'ûÜò    +Ø × 'Ñ '¨× *Ñ *ûð    +ús#¨    B)Â)C5Â8Cà C5ÃC0Ã0C5có4—|jd«    |j|tjj    ||j
«||¬«y#t $r}|j|«Yd}~yd}~wt$r}|j|«Yd}~yd}~wwxYw)z%Extract from filtered tarinfo to diskr rÊN)
r„Ú_extract_memberr£r0rr«rÓrÝr rÕ)rªrBr0rËrÈrs      rErÐzTarFile._extract_one8    s€€à  ‰ CÔð    +Ø ×  Ñ   ¬"¯'©'¯,©,°t¸W¿\¹\Ó*JØ+4Ø/<ð !õ >øôò    (Ø × $Ñ $ Q× 'Ñ 'ûÜò    +Ø × 'Ñ '¨× *Ñ *ûð    +ús#“=AÁ    BÁA0Á0 BÁ<BÂBcóN—|jdkDr‚|jdd|z«y)z=Handle non-fatal error (ExtractError) according to errorlevelrú tarfile: %sN)rTr»©rªrs  rErÕzTarFile._handle_nonfatal_errorE    s$€à ?‰?˜QÒ Ø à I‰Ia˜¨Ñ*Õ +rGcóL—|jdkDr‚t|t«rY|j€ |j    dd|j
z«y|j    dd|j
›d|j›«y|j    ddt |«j›d|›«y)z1Handle "fatal" error according to self.errorlevelrNrrâz    tarfile: r€)rTr·rÓÚfilenamer»Ústrerrorrxr‰rãs  rErÝzTarFile._handle_fatal_errorL    st€à ?‰?˜QÒ Ø Ü ˜œ7Ô #؏z‰zÐ!Ø—    ‘    ˜!˜]¨Q¯Z©ZÑ7Õ8à—    ‘    ™!°·³¸Q¿ZºZÐHÕIà I‰I‘a¬T°!«W×-=Ó-=¹qÐAÕ BrGcó —|jd«t|t«r|j|«}n|}|j    «s|j
t vr|j||«S|j«s|j«rEt|jt«r td«‚|j|j|««Sy)a\Extract a member from the archive as a file object. 'member' may be
           a filename or a TarInfo object. If 'member' is a regular file or
           a link, an io.BufferedReader object is returned. For all other
           existing members, None is returned. If 'member' does not appear
           in the archive, KeyError is raised.
        r z'cannot extract (sym)link as file objectN)r„r·rºr‚rcrxrüÚ
fileobjectrdrfrÆr·r Ú extractfileÚ_find_link_target)rªrirBs   rErézTarFile.extractfileX    s¢€ð      ‰ CÔä fœcÔ "Ø—n‘n VÓ,‰GàˆGà =‰=Œ?˜gŸl™l´/ÑAà—?‘? 4¨Ó1Ð 1à ]‰]Œ_ § ¡ ¤Ü˜$Ÿ,™,¬Ô0ô"Ð"KÓLÐLð×'Ñ'¨×(>Ñ(>¸wÓ(GÓHÐHðrGcó†—|jd«}|jdtj«}tjj |«}|r6tjj |«stj|d¬«|j«s|j«r,|jd|j›d|j›«n|jd|j«|j«r|j||«nã|j«r|j!||«nÀ|j#«r|j%||«n|j'«s|j)«r|j+||«nj|j«s|j«r|j-||«n7|j.t0vr|j3||«n|j||«|rI|j5|||«|j«s%|j7||«|j9||«yyy)z\Extract the TarInfo object tarinfo to a physical
           file called targetpath.
        r[T)Úexist_okrz -> N)rêràr£r_r0rhrMÚmakedirsrdrfr»r«rgrcÚmakefilereÚmakedirr:Úmakefifor5r7ÚmakedevÚmakelinkrxrüÚ makeunknownrÒrÔrÓ)rªrBÚ
targetpathrËrÈÚ    upperdirss      rEràzTarFile._extract_memberx    s€ð ×&Ñ& sÓ+ˆ
Ø×'Ñ'¨¬R¯V©VÓ4ˆ
ô—G‘G—O‘O JÓ/ˆ    Ù œRŸW™WŸ^™^¨IÔ6ô K‰K˜    ¨DÕ 1à =‰=Œ?˜gŸm™mœoØ I‰Ia w§|£|°W×5EÒ5EÐFÕ Gà I‰Ia˜Ÿ™Ô &à =‰=Œ?Ø M‰M˜' :Õ .Ø ]‰]Œ_Ø L‰L˜ *Õ -Ø ^‰^Ô Ø M‰M˜' :Õ .Ø ]‰]Œ_ § ¡ ¤Ø L‰L˜ *Õ -Ø ]‰]Œ_ § ¡ ¤Ø M‰M˜' :Õ .Ø \‰\¤Ñ 0Ø × Ñ ˜W jÕ 1à M‰M˜' :Ô .á Ø J‰Jw 
¨MÔ :Ø—=‘=”?Ø—
‘
˜7 JÔ/Ø—
‘
˜7 JÕ/ð#ð rGcóԗ    |j€tj|«ytj|d«y#t$r#tjj |«s‚YywxYw)z,Make a directory called targetpath.
        NiÀ)r¬r£ÚmkdirÚFileExistsErrorr0re©rªrBrôs   rErïzTarFile.makedir©    sT€ð
    Ø|‰|Ð#ä—‘˜Õ$ô—‘˜ UÕ+øÜò    Ü—7‘7—=‘= Ô,Øñ-ð    ús‚!;¤;»)A'Á&A'c    óÆ—|j}|j|j«|j}t    |d«5}|j
d|j
D])\}}|j|«t |||t|«Œ+|j|j«|j«nt |||jt|«ddd«y#1swYyxYw)z'Make a file called targetpath.
        rFN)
rÆrÿr>rUrNr?rsr
r2Útruncate)rªrBrôÚsourcerzÚtargetrr2s        rErîzTarFile.makefile¸    s¾€ð—‘ˆØ ‰ G×'Ñ'Ô(Ø×"Ñ"ˆÜ z 4Ó (ð    N¨F؏~‰~Ð)Ø$+§N¡NòJ‘LF˜DØ—K‘K Ô'Ü ¨°´iÀÕIðJð— ‘ ˜GŸL™LÔ)Ø—‘Õ!ä˜F F¨G¯L©L¼)ÀWÔM÷    N÷    Nñ    Nús ÁBCÃC cóf—|j||«|jdd|jz«y)zYMake a file from a TarInfo object with an unknown type
           at targetpath.
        rz9tarfile: Unknown file type %r, extracted as regular file.N)rîr»rxrùs   rErózTarFile.makeunknownÈ    s3€ð      ‰ g˜zÔ*Ø     ‰    !ð2Ø4;·L±LñAõ    BrGcód—ttd«rtj|«ytd«‚)z'Make a fifo called targetpath.
        Úmkfifozfifo not supported by systemN)r¨r£rr rùs   rErðzTarFile.makefifoР   s&€ô ”2xÔ  Ü I‰IjÕ !äÐ=Ó>Ð >rGcóf—ttd«rttd«s td«‚|j}|€d}|j    «r|t
j z}n|t
jz}tj||tj|j|j««y)z<Make a character or block device called targetpath.
        Úmknodrñz'special devices not supported by systemNr]) r¨r£r r¬r7rr²r°rrñryrz)rªrBrôr¬s    rErñzTarFile.makedevØ    s†€ô”r˜7Ô#¬7´2°yÔ+AÜÐHÓIÐ Ià|‰|ˆØ ˆ<àˆDØ =‰=Œ?Ø ”D—L‘LÑ  ‰Dà ”D—L‘LÑ  ˆDä
‰˜TÜ—‘˜G×,Ñ,¨g×.>Ñ.>Ó?õ    ArGcó:—    |j«rUtjj|«rtj|«tj
|j |«ytjj|j«r!tj|j|«y|j|j|«|«y#t$r>    |j|j|«|«Yy#t$r td«d‚wxYwwxYw)zµMake a (symbolic) link called targetpath. If it cannot be created
          (platform limitation), we try to make a copy of the referenced file
          instead of a link.
        z%unable to resolve link inside archiveN)rfr£r0ÚlexistsÚunlinkÚsymlinkrgrMr~ÚlinkràrêÚsymlink_exceptionrr rùs   rEròzTarFile.makelinkê    sހð
    Và}‰}ŒÜ—7‘7—?‘? :Ô.ä—I‘I˜jÔ)Ü—
‘
˜7×+Ñ+¨ZÕ8ä—7‘7—>‘> '×"6Ñ"6Ô7Ü—G‘G˜G×0Ñ0°*Õ=à×(Ñ(¨×)?Ñ)?ÀÓ)HØ)3õ5øä ò    Vð VØ×$Ñ$ T×%;Ñ%;¸GÓ%DØ%/ö1øäò VÜ"Ð#JÓKÐQUÐUð Vúð        Vús+‚A$CÁ'A    CÂ1!Cà   DÃ!DÄDÄDcó—ttd«rõtj«dk(rÝ|j}|j}|sj    t
r.|j r"t j|j «d}    tr.|jr"tj|j«d}|€d}|€d}    |j«r(ttd«rtj|||«ytj|||«yyy#t$rYŒ›wxYw#t$rYŒuwxYw#tt f$r}t#d«|‚d}~wwxYw)zðSet owner of targetpath according to tarinfo. If numeric_owner
           is True, use .gid/.uid instead of .gname/.uname. If numeric_owner
           is False, fall back to .gid/.uid when the search based on name
           fails.
        Úgeteuidrr/NrIÚlchownzcould not change owner)r¨r£r
r5r4r£r7Úgetgrnamrr¡r6Úgetpwnamrfr rÒrÓÚ OverflowErrorr )rªrBrôrÈÚgÚurs       rErÒz TarFile.chown
s€ô ”2yÔ !¤b§j¡j£l°aÒ&7à— ‘ ˆAØ— ‘ ˆAÙ ðݘwŸ}š}ÜŸL™L¨¯©Ó7¸Ñ:˜ðݘwŸ}š}ÜŸL™L¨¯©Ó7¸Ñ:˜ðˆyؐ؈yؐð DØ—=‘=”?¤w¬r°8Ô'<Ü—I‘I˜j¨!¨QÕ/ä—H‘H˜Z¨¨AÕ.ð/'8Ð !øô òÙðûô
 òÙðûôœ]Ð+ò Dä"Ð#;Ó<À!ÐCûð DúsBÁ4DÁ84DÂ57D%Ã-D%Ä    DÄDÄ    D"Ä!D"Ä%EÄ4 EÅEcóš—|j€y    tj||j«y#t$r}t    d«|‚d}~wwxYw)zASet file permissions of targetpath according to tarinfo.
        Nzcould not change mode)r¬r£rÔrÓr )rªrBrôrs    rErÔz TarFile.chmod%
sF€ð <‰<Ð Ø ð    ?Ü H‰HZ §¡Õ .øÜò    ?ÜÐ6Ó7¸QÐ >ûð    ?ús 0°    A
¹ AÁA
có°—|j}|€yttd«sy    tj|||f«y#t$r}t d«|‚d}~wwxYw)zBSet modification time of targetpath according to tarinfo.
        NrÓz"could not change modification time)r3r¨r£rÓrÓr )rªrBrôr3rs     rErÓz TarFile.utime/
sZ€ð— ‘ ˆØ ˆ=Ø Ü”r˜7Ô#Ø ð    LÜ H‰HZ %¨ Õ 0øÜò    LÜÐCÓDÈ!Ð Kûð    Lús¢;»    AÁ AÁAcóf—|jd«|j|j}d|_|S|j|jj    «k7r^|jdk(ry|jj |jdz
«|jj d«s td«‚d}        |jj|«}    |)|j0s|j2j5|«|Sd|_|S#t$rU}|jr?|jdd|j|fz«|xjtz c_Yd}~Œ¦Yd}~ŒŽd}~wt$r{}|jr@|jdd|j|fz«|xjtz c_Yd}~Œ|jdk(rtt|««d‚Yd}~Œd}~wt $r|jdk(r td    «d‚YŒ:t"$r/}|jdk(rtt|««d‚Yd}~Œld}~wt$$r}tt|««d‚d}~wt&$r@}    ddl}t+||j,«rtd
|›«d‚|‚#t.$r|‚wxYwd}~wwxYw) z¨Return the next member of the archive as a TarInfo object, when
           TarFile is opened for reading. Return None if there is no more
           available.
        ÚraNrrrqTr/z0x%X: %sz
empty filez zlib error: )r„rYrrÆrýrÿrur
rBrôr˜rRr»r rZrºr”r–r›Ú    ExceptionrÉr·rÍrÊrPrVrrW)rªÚmrBrrÉs     rErz TarFile.next=
sY€ð
      ‰ DÔØ × Ñ Ð 'Ø× Ñ ˆAØ#ˆDÔ ØˆHð ;‰;˜$Ÿ,™,×+Ñ+Ó-Ò -؏{‰{˜aÒØØ L‰L× Ñ ˜dŸk™k¨A™oÔ .Ø—<‘<×$Ñ$ QÔ'ÜР8Ó9Ð9ðˆØð ØŸ,™,×2Ñ2°4Ó8ð< à Ð à—;’;Ø— ‘ ×#Ñ# GÔ,ðˆð ˆDŒLàˆøôM"ò Ø×$Ò$Ø—I‘I˜a ¨t¯{©{¸AÐ.>Ñ!>Ô?Ø—K’K¤9Ñ,•KÜô%ûô&ò 6Ø×$Ò$Ø—I‘I˜a ¨t¯{©{¸AÐ.>Ñ!>Ô?Ø—K’K¤9Ñ,•KÝØ—[‘[ AÒ%Ü#¤C¨£FÓ+°Ð5õ&ûä#ò <Ø—;‘; !Ò#Ü# LÓ1°tÐ;ò$ä'ò 6Ø—;‘; !Ò#Ü#¤C¨£FÓ+°Ð5õ$ûä(ò 2ܤ A£Ó'¨TÐ1ûÜò ðÛÜ! ! T§Z¡ZÔ0Ü'¨,°q°cÐ(:Ó;ÀÐEà˜øÜ"òؐGðþð úsbÂ<D Ä     J0ÄAE%Å% J0Å1AG'Æ=$G'Ç''J0ÈJ0È$IÉ J0ÉI$É$ J0É1+JÊ J(Ê(J+Ê+J0có¶—|j«}d}|    |j|«}|d|}|rtjj |«}t |«D]a}|r|j|jk(rd}Œ!|r*tjj |j«}n |j}||k(sŒ_|cS|r t|«‚y#t$rd}YŒ«wxYw)z}Find an archive member by name from bottom to top.
           If tarinfo is given, it is used as the starting point.
        FNT)    r†Úindexr=r£r0ÚnormpathÚreversedrr«)    rªr«rBÚ    normalizerVÚskippingrriÚ member_names             rEr€zTarFile._getmember€
sá€ð
—/‘/Ó#ˆðˆØ Ð ð *ØŸ ™  gÓ.ð" & 5˜/á Ü—7‘7×#Ñ# DÓ)ˆDä˜wÓ'ò     ˆFÙØ—>‘> V§]¡]Ò2Ø$HØÙÜ Ÿg™g×.Ñ.¨v¯{©{Ó;‘ à$Ÿk™k à{Ó"Ø’ ð     ñ ä˜WÓ%Ð %ð øô1ò  ð ’ð  ús–C
Ã
CÃCcóp—|js*|j«    |j«Œd|_yy)z‰Read through the entire archive file and look for readable
           members. This should not run if the file is set to stream.
        NT)rPrrWr±s rEr…z TarFile._load¨
s4€ð{Š{Ø—)‘)“+Ð)Øð—)‘)“+Ñ)àˆDLðrGcó²—|jr"td|jjz«‚|'|j|vrtd|jz«‚yy)znCheck if TarFile is still open, and if the operation's mode
           corresponds to TarFile's mode.
        z %s is closedNzbad operation for mode %r)rÈrÓrCr‰r¬)rªr¬s  rEr„zTarFile._check±
sS€ð ;Š;ܘ.¨4¯>©>×+BÑ+BÑBÓCÐ CØ Ð  §    ¡    °Ñ 5ÜÐ5¸¿    ¹    ÑAÓBÐ Bð!6Ð rGcó,—|j«rQdjtdtjj |j «|jf««}d}n|j}|}|j||d¬«}|€td|z«‚|S)zZFind the target member of a symlink or hardlink member in the
           archive.
        r[NT)rBrzlinkname %r not found)
rfrr¸r£r0rhr«rgr€r)rªrBrgÚlimitris     rErêzTarFile._find_link_targetº
s„€ð =‰=Œ?à—x‘x¤ t¬b¯g©g¯o©o¸g¿l¹lÓ.KÈW×M]ÑM]Ð-^Ó _Ó`ˆH؉Eð×'Ñ'ˆH؈Eà—‘ °5ÀDÓIˆØ ˆ>ÜÐ2°XÑ=Ó>Ð >؈ rGc#óRK—|jr|jEd{–—†yd}|j|j«}|dz }|–—    |t    |j«kr|j|}n'|js|j«}|s    d|_yy|dz }|–—ŒY7Œ†­w)z$Provide an iterator object.
        NrrT)rWrVrYrr?)rªrrBs   rEÚ__iter__zTarFile.__iter__Í
s©èø€ð <Š<Ø—|‘|× #Ð #Ø ðˆð × Ñ Ð 'Ø—i‘i“kˆGØ Q‰JˆEØŠMàØ”s˜4Ÿ<™<Ó(Ò(ØŸ,™, uÑ-‘Ø—\’\ØŸ)™)›+ÙØ#'D”LØàØ Q‰JˆEØŠMðð $ús‚B'žB%ŸBB'cóZ—||jkrt|tj¬«yy)z.Write debugging output to sys.stderr.
        ©ÚfileN)rSr…rƒÚstderr)rªÚlevelÚmsgs   rEr»z TarFile._dbgì
s#€ð D—J‘JÒ Ü #œCŸJ™JÖ 'ð rGcó&—|j«|Sr¯)r„r±s rEÚ    __enter__zTarFile.__enter__ò
s€Ø  ‰ Œ ؈ rGcó„—|€|j«y|js|jj«d|_yr")r°rÂrÆrÈ)rªrxr¤Ú    tracebacks    rEÚ__exit__zTarFile.__exit__ö
s2€Ø ˆ<Ø J‰JLð×#Ò#Ø— ‘ ×"Ñ"Ô$؈DKrG)Nr NNNNNNržNNNNF)r N)r Nre)r NN)NNN©Tr"r¯)ú.N)rºT)TFr%)>r‰rŠr‹rŒrSrQrRrTrrcrrCrDrrBr<rèrÃr­rBr~rr^rtrxr|r_r°r‚r†rˆr«rr¾r¼rÇrÙrÛrÏrÐrÕrÝréràrïrîrórðrñròrÒrÔrÓrr€r…r„rêr#r»r+r.rrGrErrcsÊ„ñð €Eà€Kð€Lð€Jð€Fà€Hà €Fà€Gà€JàÐàAEØHLØ>BØ6;ódðbØ #¨t¸Zò]/óð]/ð~ò2óð2ðòóðð@òóðð6òóðð:ØØØñ    €Iò%ò*    òò?ó aðF)¨Dô)ðV1"Àô1"óf%ò8Gð0+/À%Øô+/ðZGÈØôGò&ò. +ò,ò
Còð@>BØ&+ó*0òb òNò Bò?òAò$Vò2 DòD?ò Lò>óF&&òP óCòò&ò>(ò órGrcóΗ    t|d«r.|j«}t|¬«}|j|«n t|«}|j    «y#t
$rYywxYw)z¤Return True if name points to a tar archive that we
       are able to handle, else return False.
 
       'name' should be a string, file, or file-like object.
    ru)rÆTF)r¨rýrrÿr°r    )r«rÇrs   rErr sX€ð
Ü 4˜Ô  Ø—)‘)“+ˆCܘTÔ"ˆAØ I‰IcNäT“
ˆAØ    ‰Œ    ØøÜ òÙðús‚AAÁ    A$Á#A$c    ó¾—ddl}d}|j|¬«}|jddddd¬    «|jd
d td ¬ «|j    d¬«}|jdddd¬«|jddddd¬«|jddddd¬«|jdd dd!¬«|j «}|j r|j€|jd"d#«|j¯|j}t|«rut|d$«5}|j«t|j«tj¬%«ddd«|j r=td&j#|««y|jd"d'j#|««yy|j$u|j$}t|«r<t&j|d(«5}|j%|j ¬)«ddd«y|jd"d'j#|««y|j+t)|j«d"k(r |jd}t*j,}nHt)|j«d*k(r|j\}}n |jd"|j/««t«r}t&j|d(«5}|j1|j ¬+«ddd«|j rWd,k(rd-j#|«}    nd.j#||«}    t|    «y|jd"d'j#|««yy|j2Â|j2j5d«}
t*j6j9|
«\} } d/d/d0d0d1d1d1d1d2œ} | | vrd3| | znd4}|j2}t&j|
|«5}|D]}|j;|«Œ    ddd«|j rtd5j#|
««yyy#1swYŒÜxYw#1swYyxYw#1swYŒVxYw#1swYŒXxYw)6Nrz3A simple command-line interface for tarfile module.)Ú descriptionz-vz    --verboseÚ
store_trueFzVerbose output)ÚactionÚdefaultÚhelpz--filterz <filtername>zFilter for extraction)ÚmetavarÚchoicesr7T)Úrequiredz-lz--listú    <tarfile>zShow listing of a tarfile)r8r7z-ez    --extractú+)r;z <output_dir>zExtract tarfile into target dir)Únargsr8r7z-cz--create)z<name>z<file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validrz&--filter is only valid for extraction
r r%z{!r} is a tar archive.z{!r} is not a tar archive.
r\)r´r/)r0r¸r0z{!r} file is extracted.z+{!r} file is extracted into {!r} directory.r»r¾r¼)rÞz.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:r¡z{!r} file created.)ÚargparseÚArgumentParserÚ add_argumentrÆÚadd_mutually_exclusive_groupÚ
parse_argsr¸rÛÚexitÚtestrrr†r…rƒr'r´rcrrr?r£ÚcurdirÚ format_helprÙÚcreatergr0Úsplitextr¾)r>r3Úparserr ÚargsrwrÀÚtfrEr)Útar_nameÚ_ÚextÚ compressionsÚtar_modeÚ    tar_filesÚ    file_names                 rEÚmainrS s€ÛàG€KØ × $Ñ $°Ð $Ó =€FØ
×ј˜k°,ÈØ-ðô/à
×ј
¨NÜ .Ø4ðô6ð × /Ñ /¸Ð /Ó >€EØ    ×ѐt˜X¨{Ø7ðô9à    ×ѐt˜[°Ø<Ø=ðô?ð
×ѐt˜Z¨sØ3Ø9ðô;ð
×ѐt˜X¨{Ø8ðô:ð × Ñ Ó €Dà ‡{‚{t—|‘|Ð+؏ ‰ AÐ@ÔAà ‡yyÐØi‰iˆÜ cŒ?ܐc˜3“ð 9 3Ø—‘Ԡܐc—n‘nÓ&¬S¯Z©ZÕ8÷ 9ð|Š|ÜÐ.×5Ñ5°cÓ:Õ;à K‰K˜Ð9×@Ñ@ÀÓEÕ Fðð
 
‰Р   Øi‰iˆÜ cŒ?Ü—‘˜c 5Ó)ð .¨RØ—‘ § ¡ Ô-÷ .ð .ð K‰K˜Ð9×@Ñ@ÀÓEÕ Fà     ‰Ñ    !Ü ˆt|‰|Ó  Ò !Ø—,‘,˜q‘/ˆCÜ—Y‘Y‰FÜ —‘Ó  !Ò #ØŸ,™,‰KˆC‘à K‰K˜˜6×-Ñ-Ó/Ô 0ä cŒ?Ü—‘˜c 5Ó)ð ?¨RØ— ‘  6°$·+±+ Ô>÷ ?à|Š|ؘS’=Ø3×:Ñ:¸3Ó?‘Cð2ß39±6¸#¸vÓ3Fðäc•
à K‰K˜Ð9×@Ñ@ÀÓEÕ Fðð
‰Р    Ø—;‘;—?‘? 1Ó%ˆÜ—‘×!Ñ! (Ó+‰ˆˆ3ðØàØàØØØñ 
ˆ ð03°lÑ/B4˜, sÑ+Ò+ȈؗK‘Kˆ    ä \‰\˜( HÓ -ð    "°Ø&ò "    Ø—‘yÕ!ñ "÷    "ð <Š<Ü Ð&×-Ñ-¨hÓ7Õ 8ð ð/
!÷M 9ñ 9ú÷ .ð .ú÷ ?ñ ?ú÷>    "ð    "ús0Ä:P-ÇP:ËQÏ"QÐ-P7Ð:QÑQÑQÚ__main__r/)krŒÚversionÚ
__author__Ú __credits__ÚbuiltinsrrNrƒr£r,rrrrærjr–r    Ú compat.py38rr¡rÊr£ÚAttributeErrorÚNotImplementedErrorrÓrÚ__all__r@r r~r¯r©r«rªrÈr€rçr3r1rÌrÍr›r9ÚCONTTYPEr²r±rèr¼rÃrørrrrrür+rër"rr¸rXr#r«rÚgetfilesystemencodingrFrMr]rerorsr†rr    r r
r r rr”r–r˜rZr›rr·ÚobjectrÃrÚBufferedReaderr<rrrrrrrnrrrrÆr”rrrrSr‰rrGrEú<module>ras{ðñ8ð€Ø6€
ØH€ õ
'Û
Û    Û    Û Û Û Û Û Û    å%ðÛðÛð$Ð%8¸'ÐBÐò *€ð €Ø €    Ø ˜‰^€
Ø €    Ø€ à€ Ø€ Ø€ à
ۯ ۯ
ۯ
ۯ
ۯ
ۯ
€Ø €Ø €àÐØÐØ€à
ۯ
€Ø€à€ Ø €
Ø €
Ø€ð ˜H gؘG XؘW gØ#Ð%5Ø!ð    #€ð˜(ؘ>ð+€ ðÐ/Ø ð €    ð.€
ò9€ð
Ø Ø Ø Ø Ø ñ Ðð‡77ˆd‚?؁Hà(ˆs×(Ñ(Ó*€Hò 0ò&ò ð(˜Nó ò< *ð"&°À$ó ò2ô    ˆyô    ô    8ô    ô    ô    ô    xô    ô    (ô    ô    (ô    ô    {ô    ô    ˜;ô    ô    [ô    ô    ˜ô    ô    ˜Kô    ÷ñ÷0rñrôj6ôô<i&ôiôX"2×$Ñ$ô"ô    (ô    ôJ˜ ôJô
?˜kô?ô@{ô@ô
L˜ ôLô
? +ô?ó=ò~òò ð*Ø Ø ñ€ñ    ‹€ôN 9ˆfôN 9ôb[ˆfô[òB%ð$‡||€ò]9ð~ ˆzÒÙ…FðøðGZòØ
ƒCðûðòØ
ƒCðús"ºH6¿IÈ6IÉIÉIÉI