tzh
2024-08-22 c7d0944258c7d0943aa7b2211498fd612971ce27
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
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
L\¬QcC@s/dZdddgZdZdZdZdefd„ƒYZdd    lmZ    d
„Z
ed d d dde
ddƒZ d„Z ed dd dde ddƒZ d„Zed dd ddeddƒZeed„Zed dd ededdƒZd„Zed dd ededdƒZd „Zed d!d ededd"ƒZd#„Zed d$d ededd%ƒZd&„Zed d'd ededd(ƒZd)„Zed d*d ededd+ƒZd,„Zed d-d ededd.ƒZd/„Zd0„Z ed d1d ededd2ƒZ!ed d3d ede dd4ƒZ"d5„Z#ed d6d ede#dd7ƒZ$d8„Z%ed d9d d:de%dd;ƒZ&dd<l'm(Z(d=„Z)ed d>d ede)dd?ƒZ*d@„Z+ed dAd ede+ddBƒZ,dCefdD„ƒYZ-e-d dEdFe.ddGƒZ/e-d dHdFe0ddIƒZ1e-d dJdFe.e0e2fddKƒZ3e-d dLdFe2fddMƒZ4e-d dNdFe5ddOƒZ6e-d dPdFe7ddQƒZ8e-d dRdFe9ddSƒZ:e-d dTdFe;dƒddUƒZ=e-d dVdFe>ddWƒZ?e-d dXdFe@ddYƒZAe-d dZdFeBdd[ƒZCe-d d\dFedd]ƒZDe-d d^dFe-dd_ƒZEe-d d`dFe-ddaƒZFdbefdc„ƒYZGeGZHeHd dddedfdge!dhgdie3gdjdkddlƒeHd dmdedndgedhgdie/gdjdddoƒeHd dpdedqdge dhgdie/gdjdddrƒeHd dsdedtdge dhgdie/gdjddduƒeHd dvdedwdge"dhgdie1gdjdkddxƒeHd dydedzdge*dhgdie1gdjddd{ƒeHd d|ded}dge,dhgdie1gdjddd~ƒeHd dded€dgedhgdie8gdjdkddƒeHd d‚dedƒdgedhgdie8gdjddd„ƒeHd d…ded†dgedhgdie8gdjddd‡ƒeHd dˆded‰dgddhgdie=gdjdkddŠƒeHd d‹dedŒdgddhgdie4gdjdddƒeHd dŽdeddgddhgdie4gdjdddƒeHd d‘ded’dgedhgdie:gdjdkdd“ƒeHd d”ded•dgedhgdie:gdjddd–ƒeHd d—ded˜dge$dhgdie6gdjdkdd™ƒeHd dšded›dge&dhgdie6gdjdddœƒeHd ddedždgddhgdieAgdjdddŸƒeHd d ded¡dgddheAeDgdieAgdjdkdd¢ƒeHd d£ded¤dgddheAeEeFgdieAgdjddd¥ƒeHd d¦ded§dgddheEeFgdieAgdjdkdd¨ƒeHd d©dedªdgddhgdie?gdjddd«ƒeHd d¬ded­dgddheEeFgdie?gdjdkdd®ƒeHd d¯ded°dgddheDgdie?gdjddd±ƒeHd d²ded³dgddheDeDgdie?gdjddd´ƒeHd dµded¶dgddheDeDeDgdie?gdjddd·ƒeHd d¸ded¹dgddhgdieCgdjdddºƒeHd d»ded¼dgddheEeFgdieCgdjdkdd½ƒeHd d¾ded¿dgddheCeDeDgdieCgdjdkddÀƒeHd dÁdedÂdgddheCeEeFgdieCgdjdddÃeHd dÄdedÅdgddheDgdigdjdkddƃeHd dÇdedÈdgddheDgdieDeDgdjdkddɃeHd dÊdedËdgddhgdieEgdjdkdd̃eHd dÍdedÎdgddheEeFgdigdjdddσeHd dÐdedÑdge!dhgdieDgdjdkdd҃eHd dÓdedÔdge dhgdieDgdjdddՃeHd dÖded×dgedhgdieDgdjddd؃eHd dÙdedÚdge!dhgdigdjdkddۃeHd dÜdedÝdge dhgdigdjdddރeHd dßdedàdgedhgdigdjdddáƒeHd dâdedãdge dhgdieDgdjdddäƒeHd dådedædge dhgdieDgdjdddçƒeHd dèdedédgedhgdieDgdjdddêƒeHd dëdedìdgedhgdieDgdjdkddíƒeHd dîdedïdgddheDeDgdieDgdjdkddðƒeHd dñdedòdgddheDeDgdieDgdjdkddóƒeHd dôdedõdgedheEeFgdieDgdjdkddöƒeHd d÷dedødgddheEeDeFgdieDgdjdddùƒeHd dúdedûdgddheDeDgdieDgdjdddüƒeHd dýdedþdge dhgdigdjdddÿƒeHd ddeddgddheDgdigdjdkddƒeHd ddeddgedhgdieDgdjdkddƒeHd ddeddgddheDgdieDgdjdddƒg5ZI[HiZJiZKxžeLeIƒD]\ZMZNeNjOeJkrePd    eNjOeJeNjOeMfƒ‚neNjQeKkrNePd
eNjQeKeNjQeMfƒ‚neMeJeNjO<eMeKeNjQ<qØW[J[K[M[NiZRxeID]ZNeNeReNjQ<q…W[NeSd „ZTeTƒ[Td „ZUd „ZVdddd„ZWddd„ƒYZXdZYdZZieYd6eZd6Z[d„Z\e]dkr+e\ƒndS(sr"Executable documentation" for the pickle module.
 
Extensive comments about the pickle protocols and pickle-machine opcodes
can be found here.  Some functions meant for external use:
 
genops(pickle)
   Generate all the opcodes in a pickle, as (opcode, arg, position) triples.
 
dis(pickle, out=None, memo=None, indentlevel=4)
   Print a symbolic disassembly of a pickle.
tdistgenopstoptimizeiÿÿÿÿiþÿÿÿiýÿÿÿtArgumentDescriptorcBseZdZd„ZRS(tnametntreadertdoccCsˆt|tƒst‚||_t|tƒrN|dksT|tttfksTt‚||_||_    t|tƒs{t‚||_
dS(Ni( t
isinstancetstrtAssertionErrorRtintt UP_TO_NEWLINEtTAKEN_FROM_ARGUMENT1tTAKEN_FROM_ARGUMENT4RRR(tselfRRRR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt__init__¸s            (snameRsreadersdoc(t__name__t
__module__t    __slots__R(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyR¥s
(tunpackcCs/|jdƒ}|rt|ƒStdƒ‚dS(sS
    >>> import StringIO
    >>> read_uint1(StringIO.StringIO('\xff'))
    255
    is'not enough data in stream to read uint1N(treadtordt
ValueError(tftdata((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt
read_uint1És
Rtuint1RiRRsOne-byte unsigned integer.cCsB|jdƒ}t|ƒdkr2td|ƒdStdƒ‚dS(s“
    >>> import StringIO
    >>> read_uint2(StringIO.StringIO('\xff\x00'))
    255
    >>> read_uint2(StringIO.StringIO('\xff\xff'))
    65535
    is<His'not enough data in stream to read uint2N(Rtlent_unpackR(RR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt
read_uint2Üs    tuint2is)Two-byte unsigned integer, little-endian.cCsB|jdƒ}t|ƒdkr2td|ƒdStdƒ‚dS(s¬
    >>> import StringIO
    >>> read_int4(StringIO.StringIO('\xff\x00\x00\x00'))
    255
    >>> read_int4(StringIO.StringIO('\x00\x00\x00\x80')) == -(2**31)
    True
    is<iis&not enough data in stream to read int4N(RRRR(RR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt    read_int4ñs    tint4is8Four-byte signed integer, little-endian, 2's complement.cCsÂ|jƒ}|jdƒs*tdƒ‚n|d }|r¦xidD]N}|j|ƒrA|j|ƒs~td||fƒ‚n|dd!}PqAqAWtd|ƒ‚n|r¾|jdƒ}n|S(    s
    >>> import StringIO
    >>> read_stringnl(StringIO.StringIO("'abcd'\nefg\n"))
    'abcd'
 
    >>> read_stringnl(StringIO.StringIO("\n"))
    Traceback (most recent call last):
    ...
    ValueError: no string quotes around ''
 
    >>> read_stringnl(StringIO.StringIO("\n"), stripquotes=False)
    ''
 
    >>> read_stringnl(StringIO.StringIO("''\n"))
    ''
 
    >>> read_stringnl(StringIO.StringIO('"abcd"'))
    Traceback (most recent call last):
    ...
    ValueError: no newline found when trying to read stringnl
 
    Embedded escapes are undone in the result.
    >>> read_stringnl(StringIO.StringIO(r"'a\n\\b\x00c\td'" + "\n'e'"))
    'a\n\\b\x00c\td'
    s
s-no newline found when trying to read stringnliÿÿÿÿs'"s,strinq quote %r not found at both ends of %risno string quotes around %rt string_escape(treadlinetendswithRt
startswithtdecode(RR&t stripquotesRtq((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt read_stringnls  
  tstringnls¢A newline-terminated string.
 
                   This is a repr-style string, with embedded escapes, and
                   bracketing quotes.
                   cCst|dtdtƒS(NR&R'(R)tFalse(R((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pytread_stringnl_noescapeAststringnl_noescapesA newline-terminated string.
 
                        This is a str-style string, without embedded escapes,
                        or bracketing quotes.  It should consist solely of
                        printable ASCII characters.
                        cCsdt|ƒt|ƒfS(s|
    >>> import StringIO
    >>> read_stringnl_noescape_pair(StringIO.StringIO("Queue\nEmpty\njunk"))
    'Queue Empty'
    s%s %s(R,(R((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pytread_stringnl_noescape_pairOststringnl_noescape_pairs¶A pair of newline-terminated strings.
 
                             These are str-style strings, without embedded
                             escapes, or bracketing quotes.  They should
                             consist solely of printable ASCII characters.
                             The pair is returned as a single string, with
                             a single blank separating the two strings.
                             cCspt|ƒ}|dkr+td|ƒ‚n|j|ƒ}t|ƒ|krP|Std|t|ƒfƒ‚dS(sh
    >>> import StringIO
    >>> read_string4(StringIO.StringIO("\x00\x00\x00\x00abc"))
    ''
    >>> read_string4(StringIO.StringIO("\x03\x00\x00\x00abcdef"))
    'abc'
    >>> read_string4(StringIO.StringIO("\x00\x00\x00\x03abcdef"))
    Traceback (most recent call last):
    ...
    ValueError: expected 50331648 bytes in a string4, but only 6 remain
    isstring4 byte count < 0: %ds2expected %d bytes in a string4, but only %d remainN(R RRR(RRR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt read_string4es  tstring4sÙA counted string.
 
              The first argument is a 4-byte little-endian signed int giving
              the number of bytes in the string, and the second argument is
              that many bytes.
              cCsct|ƒ}|dkst‚|j|ƒ}t|ƒ|krC|Std|t|ƒfƒ‚dS(s”
    >>> import StringIO
    >>> read_string1(StringIO.StringIO("\x00"))
    ''
    >>> read_string1(StringIO.StringIO("\x03abcdef"))
    'abc'
    is2expected %d bytes in a string1, but only %d remainN(RR
RRR(RRR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt read_string1‡s     tstring1sÍA counted string.
 
              The first argument is a 1-byte unsigned int giving the number
              of bytes in the string, and the second argument is that many
              bytes.
              cCsA|jƒ}|jdƒs*tdƒ‚n|d }t|dƒS(sq
    >>> import StringIO
    >>> read_unicodestringnl(StringIO.StringIO("abc\uabcd\njunk"))
    u'abc\uabcd'
    s
s4no newline found when trying to read unicodestringnliÿÿÿÿsraw-unicode-escape(R#R$Rtunicode(RR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pytread_unicodestringnl¤s
 
tunicodestringnlsøA newline-terminated Unicode string.
 
                      This is raw-unicode-escape encoded, so consists of
                      printable ASCII characters, and may contain embedded
                      escape sequences.
                      cCsyt|ƒ}|dkr+td|ƒ‚n|j|ƒ}t|ƒ|krYt|dƒStd|t|ƒfƒ‚dS(sÒ
    >>> import StringIO
    >>> s = u'abcd\uabcd'
    >>> enc = s.encode('utf-8')
    >>> enc
    'abcd\xea\xaf\x8d'
    >>> n = chr(len(enc)) + chr(0) * 3  # little-endian 4-byte length
    >>> t = read_unicodestring4(StringIO.StringIO(n + enc + 'junk'))
    >>> s == t
    True
 
    >>> read_unicodestring4(StringIO.StringIO(n + enc[:-1]))
    Traceback (most recent call last):
    ...
    ValueError: expected 7 bytes in a unicodestring4, but only 6 remain
    is!unicodestring4 byte count < 0: %dsutf-8s9expected %d bytes in a unicodestring4, but only %d remainN(R RRRR4(RRR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pytread_unicodestring4½s   tunicodestring4sAA counted Unicode string.
 
                    The first argument is a 4-byte little-endian signed int
                    giving the number of bytes in the string, and the second
                    argument-- the UTF-8 encoding of the Unicode string --
                    contains that many bytes.
                    cCs‡t|dtdtƒ}|jdƒr:td|ƒ‚n|dkrJtS|dkrZtSyt|ƒSWntk
r‚t|ƒSXdS(s
    >>> import StringIO
    >>> read_decimalnl_short(StringIO.StringIO("1234\n56"))
    1234
 
    >>> read_decimalnl_short(StringIO.StringIO("1234L\n56"))
    Traceback (most recent call last):
    ...
    ValueError: trailing 'L' not allowed in '1234L'
    R&R'tLstrailing 'L' not allowed in %rt00t01N(R)R+R$RtTrueR t OverflowErrortlong(Rts((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pytread_decimalnl_shortås    cCsDt|dtdtƒ}|jdƒs:td|ƒ‚nt|ƒS(s³
    >>> import StringIO
 
    >>> read_decimalnl_long(StringIO.StringIO("1234\n56"))
    Traceback (most recent call last):
    ...
    ValueError: trailing 'L' required in '1234'
 
    Someday the trailing 'L' will probably go away from this output.
 
    >>> read_decimalnl_long(StringIO.StringIO("1234L\n56"))
    1234L
 
    >>> read_decimalnl_long(StringIO.StringIO("123456789012345678901234L\n6"))
    123456789012345678901234L
    R&R'R9strailing 'L' required in %r(R)R+R$RR>(RR?((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pytread_decimalnl_longstdecimalnl_shortsŸA newline-terminated decimal integer literal.
 
                          This never has a trailing 'L', and the integer fit
                          in a short Python int on the box where the pickle
                          was written -- but there's no guarantee it will fit
                          in a short Python int on the box where the pickle
                          is read.
                          tdecimalnl_longs»A newline-terminated decimal integer literal.
 
                         This has a trailing 'L', and can represent integers
                         of any size.
                         cCs"t|dtdtƒ}t|ƒS(s[
    >>> import StringIO
    >>> read_floatnl(StringIO.StringIO("-1.25\n6"))
    -1.25
    R&R'(R)R+tfloat(RR?((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt read_floatnl2stfloatnlsA newline-terminated decimal floating literal.
 
              In general this requires 17 significant digits for roundtrip
              identity, and pickling then unpickling infinities, NaNs, and
              minus zero doesn't work across boxes, or on some boxes even
              on itself (e.g., Windows can't read the strings it produces
              for infinities or NaNs).
              cCsB|jdƒ}t|ƒdkr2td|ƒdStdƒ‚dS(s¼
    >>> import StringIO, struct
    >>> raw = struct.pack(">d", -1.25)
    >>> raw
    '\xbf\xf4\x00\x00\x00\x00\x00\x00'
    >>> read_float8(StringIO.StringIO(raw + "\n"))
    -1.25
    is>dis(not enough data in stream to read float8N(RRRR(RR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt read_float8Hs
tfloat8isAn 8-byte binary representation of a float, big-endian.
 
             The format is unique to Python, and shared with the struct
             module (format string '>d') "in theory" (the struct and cPickle
             implementations don't share the code -- they should).  It's
             strongly related to the IEEE-754 double format, and, in normal
             cases, is in fact identical to the big-endian 754 double format.
             On other boxes the dynamic range is limited to that of a 754
             double, and "add a half and chop" rounding is used to reduce
             the precision to 53 bits.  However, even on a 754 box,
             infinities, NaNs, and minus zero may not be handled correctly
             (may not survive roundtrip pickling intact).
             (t decode_longcCsFt|ƒ}|j|ƒ}t|ƒ|kr<tdƒ‚nt|ƒS(sT
    >>> import StringIO
    >>> read_long1(StringIO.StringIO("\x00"))
    0L
    >>> read_long1(StringIO.StringIO("\x02\xff\x00"))
    255L
    >>> read_long1(StringIO.StringIO("\x02\xff\x7f"))
    32767L
    >>> read_long1(StringIO.StringIO("\x02\x00\xff"))
    -256L
    >>> read_long1(StringIO.StringIO("\x02\x00\x80"))
    -32768L
    s'not enough data in stream to read long1(RRRRRI(RRR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt
read_long1ns
 tlong1sA binary long, little-endian, using 1-byte size.
 
    This first reads one byte as an unsigned size, then reads that
    many bytes and interprets them as a little-endian 2's-complement long.
    If the size is 0, that's taken as a shortcut for the long 0L.
    cCset|ƒ}|dkr+td|ƒ‚n|j|ƒ}t|ƒ|kr[tdƒ‚nt|ƒS(s
    >>> import StringIO
    >>> read_long4(StringIO.StringIO("\x02\x00\x00\x00\xff\x00"))
    255L
    >>> read_long4(StringIO.StringIO("\x02\x00\x00\x00\xff\x7f"))
    32767L
    >>> read_long4(StringIO.StringIO("\x02\x00\x00\x00\x00\xff"))
    -256L
    >>> read_long4(StringIO.StringIO("\x02\x00\x00\x00\x00\x80"))
    -32768L
    >>> read_long1(StringIO.StringIO("\x00\x00\x00\x00"))
    0L
    islong4 byte count < 0: %ds'not enough data in stream to read long4(R RRRRI(RRR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt
read_long4Žs  tlong4sŽA binary representation of a long, little-endian.
 
    This first reads four bytes as a signed size (but requires the
    size to be >= 0), then reads that many bytes and interprets them
    as a little-endian 2's-complement long.  If the size is 0, that's taken
    as a shortcut for the long 0L, although LONG1 should really be used
    then instead (and in any case where # of bytes < 256).
    t StackObjectcBs eZdZd„Zd„ZRS(RtobtypeRcCs¥t|tƒst‚||_t|tƒsBt|tƒsBt‚t|tƒrzx&|D]}t|tƒsXt‚qXWn||_t|tƒs˜t‚||_dS(N(RR    R
RttypettupleROR(RRRORt    contained((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyRÆs    $     cCs|jS(N(R(R((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt__repr__Ós(snamesobtypesdoc(RRRRRS(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyRN¹s
     R ROs3A short (as opposed to long) Python integer object.R>s3A long (as opposed to short) Python integer object.t int_or_bools:A Python integer object (short or long), or a Python bool.tboolsA Python bool object.RDsA Python float object.R    sA Python string object.R4sA Python Unicode string object.tNonesThe Python None object.RQsA Python tuple object.tlistsA Python list object.tdictsA Python dict object.tanysAny kind of object whatsoever.tmarks'The mark' is a unique object.
 
                 Opcodes that operate on a variable number of objects
                 generally don't embed the count of objects in the opcode,
                 or pull it off the stack.  Instead the MARK opcode is used
                 to push a special marker object on the stack, and then
                 some other opcodes grab all the objects from the top of
                 the stack down to (but not including) the topmost marker
                 object.
                 t
stackslicesKAn object representing a contiguous slice of the stack.
 
                 This is used in conjuction with markobject, to represent all
                 of the stack following the topmost markobject.  For example,
                 the POP_MARK opcode changes the stack from
 
                     [..., markobject, stackslice]
                 to
                     [...]
 
                 No matter how many object are on the stack after the topmost
                 markobject, POP_MARK gets rid of all of them (including the
                 topmost markobject too).
                 t
OpcodeInfocBseZdZd„ZRS(    Rtcodetargt stack_beforet stack_aftertprotoRc    Csbt|tƒst‚||_t|tƒs3t‚t|ƒdksKt‚||_|dksut|tƒsut‚||_t|t    ƒs“t‚x#|D]}t|t
ƒsšt‚qšW||_ t|t    ƒs×t‚x#|D]}t|t
ƒsÞt‚qÞW||_ t|t ƒr1d|ko,dkns7t‚||_t|tƒsUt‚||_dS(Niii(RR    R
RRR]RVRR^RWRNR_R`R RaR(    RRR]R^R_R`RaRtx((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyRVs&        !              1    (snamescodesargs stack_befores stack_aftersprotosdoc(RRRR(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyR\7stINTR]tIR^R_R`Rais¤Push an integer or bool.
 
      The argument is a newline-terminated decimal literal string.
 
      The intent may have been that this always fit in a short Python int,
      but INT can be generated in pickles written on a 64-bit box that
      require a Python long on a 32-bit box.  The difference between this
      and LONG then is that INT skips a trailing 'L', and produces a short
      int whenever possible.
 
      Another difference is due to that, when bool was introduced as a
      distinct type in 2.3, builtin names True and False were also added to
      2.2.2, mapping to ints 1 and 0.  For compatibility in both directions,
      True gets pickled as INT + "I01\n", and False as INT + "I00\n".
      Leading zeroes are never produced for a genuine integer.  The 2.3
      (and later) unpicklers special-case these and return bool instead;
      earlier unpicklers ignore the leading "0" and return the int.
      tBININTtJs1Push a four-byte signed integer.
 
      This handles the full range of Python (short) integers on a 32-bit
      box, directly as binary bytes (1 for the opcode and 4 for the integer).
      If the integer is non-negative and fits in 1 or 2 bytes, pickling via
      BININT1 or BININT2 saves space.
      tBININT1tKsŒPush a one-byte unsigned integer.
 
      This is a space optimization for pickling very small non-negative ints,
      in range(256).
      tBININT2tMsëPush a two-byte unsigned integer.
 
      This is a space optimization for pickling small positive ints, in
      range(256, 2**16).  Integers in range(256) can also be pickled via
      BININT2, but BININT1 instead saves a byte.
      tLONGR9sÇPush a long integer.
 
      The same as INT, except that the literal ends with 'L', and always
      unpickles to a Python long.  There doesn't seem a real purpose to the
      trailing 'L'.
 
      Note that LONG takes time quadratic in the number of digits when
      unpickling (this is simply due to the nature of decimal->binary
      conversion).  Proto 2 added linear-time (in C; still quadratic-time
      in Python) LONG1 and LONG4 opcodes.
      tLONG1sŠs|Long integer using one-byte length.
 
      A more efficient encoding of a Python long; the long1 encoding
      says it all.tLONG4s‹s~Long integer using found-byte length.
 
      A more efficient encoding of a Python long; the long4 encoding
      says it all.tSTRINGtSsÓPush a Python string object.
 
      The argument is a repr-style string, with bracketing quote characters,
      and perhaps embedded escapes.  The argument extends until the next
      newline character.
      t    BINSTRINGtTsýPush a Python string object.
 
      There are two arguments:  the first is a 4-byte little-endian signed int
      giving the number of bytes in the string, and the second is that many
      bytes, which are taken literally as the string content.
      tSHORT_BINSTRINGtUsñPush a Python string object.
 
      There are two arguments:  the first is a 1-byte unsigned int giving
      the number of bytes in the string, and the second is that many bytes,
      which are taken literally as the string content.
      tNONEtNsPush None on the stack.tNEWTRUEsˆs&True.
 
      Push True onto the stack.tNEWFALSEs‰s'True.
 
      Push False onto the stack.tUNICODEtVsçPush a Python Unicode string object.
 
      The argument is a raw-unicode-escape encoding of a Unicode string,
      and so may contain embedded escape sequences.  The argument extends
      until the next newline character.
      t
BINUNICODEtXsPush a Python Unicode string object.
 
      There are two arguments:  the first is a 4-byte little-endian signed int
      giving the number of bytes in the string.  The second is that many
      bytes, and is the UTF-8 encoding of the Unicode string.
      tFLOATtFsNewline-terminated decimal float literal.
 
      The argument is repr(a_float), and in general requires 17 significant
      digits for roundtrip conversion to be an identity (this is so for
      IEEE-754 double precision values, which is what Python float maps to
      on most boxes).
 
      In general, FLOAT cannot be used to transport infinities, NaNs, or
      minus zero across boxes (or even on a single box, if the platform C
      library can't read the strings it produces for such things -- Windows
      is like that), but may do less damage than BINFLOAT on boxes with
      greater precision or dynamic range than IEEE-754 double.
      tBINFLOATtGsÜFloat stored in binary form, with 8 bytes of data.
 
      This generally requires less than half the space of FLOAT encoding.
      In general, BINFLOAT cannot be used to transport infinities, NaNs, or
      minus zero, raises an exception if the exponent exceeds the range of
      an IEEE-754 double, and retains no more than 53 bits of precision (if
      there are more than that, "add a half and chop" rounding is used to
      cut it back to 53 significant bits).
      t
EMPTY_LISTt]sPush an empty list.tAPPENDtas­Append an object to a list.
 
      Stack before:  ... pylist anyobject
      Stack after:   ... pylist+[anyobject]
 
      although pylist is really extended in-place.
      tAPPENDStesÇExtend a list by a slice of stack objects.
 
      Stack before:  ... pylist markobject stackslice
      Stack after:   ... pylist+stackslice
 
      although pylist is really extended in-place.
      tLISTtlssBuild a list out of the topmost stack slice, after markobject.
 
      All the stack entries following the topmost markobject are placed into
      a single Python list, which single list object replaces all of the
      stack from the topmost markobject onward.  For example,
 
      Stack before: ... markobject 1 2 3 'abc'
      Stack after:  ... [1, 2, 3, 'abc']
      t EMPTY_TUPLEt)sPush an empty tuple.tTUPLEttsvBuild a tuple out of the topmost stack slice, after markobject.
 
      All the stack entries following the topmost markobject are placed into
      a single Python tuple, which single tuple object replaces all of the
      stack from the topmost markobject onward.  For example,
 
      Stack before: ... markobject 1 2 3 'abc'
      Stack after:  ... (1, 2, 3, 'abc')
      tTUPLE1s…süBuild a one-tuple out of the topmost item on the stack.
 
      This code pops one value off the stack and pushes a tuple of
      length 1 whose one item is that value back onto it.  In other
      words:
 
          stack[-1] = tuple(stack[-1:])
      tTUPLE2s†sBuild a two-tuple out of the top two items on the stack.
 
      This code pops two values off the stack and pushes a tuple of
      length 2 whose items are those values back onto it.  In other
      words:
 
          stack[-2:] = [tuple(stack[-2:])]
      tTUPLE3s‡sBuild a three-tuple out of the top three items on the stack.
 
      This code pops three values off the stack and pushes a tuple of
      length 3 whose items are those values back onto it.  In other
      words:
 
          stack[-3:] = [tuple(stack[-3:])]
      t
EMPTY_DICTt}sPush an empty dict.tDICTtds²Build a dict out of the topmost stack slice, after markobject.
 
      All the stack entries following the topmost markobject are placed into
      a single Python dict, which single dict object replaces all of the
      stack from the topmost markobject onward.  The stack slice alternates
      key, value, key, value, ....  For example,
 
      Stack before: ... markobject 1 2 3 'abc'
      Stack after:  ... {1: 2, 3: 'abc'}
      tSETITEMR?sºAdd a key+value pair to an existing dict.
 
      Stack before:  ... pydict key value
      Stack after:   ... pydict
 
      where pydict has been modified via pydict[key] = value.
      tSETITEMStus\Add an arbitrary number of key+value pairs to an existing dict.
 
      The slice of the stack following the topmost markobject is taken as
      an alternating sequence of keys and values, added to the dict
      immediately under the topmost markobject.  Everything at and after the
      topmost markobject is popped, leaving the mutated dict at the top
      of the stack.
 
      Stack before:  ... pydict markobject key_1 value_1 ... key_n value_n
      Stack after:   ... pydict
 
      where pydict has been modified via pydict[key_i] = value_i for i in
      1, 2, ..., n, and in that order.
      tPOPt0s<Discard the top stack item, shrinking the stack by one item.tDUPt2s=Push the top stack item onto the stack again, duplicating it.tMARKt(sòPush markobject onto the stack.
 
      markobject is a unique object, used by other opcodes to identify a
      region of the stack containing a variable number of objects for them
      to work on.  See markobject.doc for more detail.
      tPOP_MARKt1sPop all the stack objects at and above the topmost markobject.
 
      When an opcode using a variable number of stack objects is done,
      POP_MARK is used to remove those objects, and to remove the markobject
      that delimited their starting position on the stack.
      tGETtgsèRead an object from the memo and push it on the stack.
 
      The index of the memo object to push is given by the newline-terminated
      decimal string following.  BINGET and LONG_BINGET are space-optimized
      versions.
      tBINGETths¢Read an object from the memo and push it on the stack.
 
      The index of the memo object to push is given by the 1-byte unsigned
      integer following.
      t LONG_BINGETtjs®Read an object from the memo and push it on the stack.
 
      The index of the memo object to push is given by the 4-byte signed
      little-endian integer following.
      tPUTtps÷Store the stack top into the memo.  The stack is not popped.
 
      The index of the memo location to write into is given by the newline-
      terminated decimal string following.  BINPUT and LONG_BINPUT are
      space-optimized versions.
      tBINPUTR(s°Store the stack top into the memo.  The stack is not popped.
 
      The index of the memo location to write into is given by the 1-byte
      unsigned integer following.
      t LONG_BINPUTtrs¼Store the stack top into the memo.  The stack is not popped.
 
      The index of the memo location to write into is given by the 4-byte
      signed little-endian integer following.
      tEXT1s‚sŒExtension code.
 
      This code and the similar EXT2 and EXT4 allow using a registry
      of popular objects that are pickled by name, typically classes.
      It is envisioned that through a global negotiation and
      registration process, third parties can set up a mapping between
      ints and object names.
 
      In order to guarantee pickle interchangeability, the extension
      code registry ought to be global, although a range of codes may
      be reserved for private use.
 
      EXT1 has a 1-byte integer argument.  This is used to index into the
      extension registry, and the object at that index is pushed on the stack.
      tEXT2sƒsNExtension code.
 
      See EXT1.  EXT2 has a two-byte integer argument.
      tEXT4s„sOExtension code.
 
      See EXT1.  EXT4 has a four-byte integer argument.
      tGLOBALtcs§Push a global object (module.attr) on the stack.
 
      Two newline-terminated strings follow the GLOBAL opcode.  The first is
      taken as a module name, and the second as a class name.  The class
      object module.class is pushed on the stack.  More accurately, the
      object returned by self.find_class(module, class) is pushed on the
      stack, so unpickling subclasses can override this form of lookup.
      tREDUCEtRsNPush an object built from a callable and an argument tuple.
 
      The opcode is named to remind of the __reduce__() method.
 
      Stack before: ... callable pytuple
      Stack after:  ... callable(*pytuple)
 
      The callable and the argument tuple are the first two items returned
      by a __reduce__ method.  Applying the callable to the argtuple is
      supposed to reproduce the original object, or at least get it started.
      If the __reduce__ method returns a 3-tuple, the last component is an
      argument to be passed to the object's __setstate__, and then the REDUCE
      opcode is followed by code to create setstate's argument, and then a
      BUILD opcode to apply  __setstate__ to that argument.
 
      If type(callable) is not ClassType, REDUCE complains unless the
      callable has been registered with the copy_reg module's
      safe_constructors dict, or the callable has a magic
      '__safe_for_unpickling__' attribute with a true value.  I'm not sure
      why it does this, but I've sure seen this complaint often enough when
      I didn't want to <wink>.
      tBUILDtbsÈFinish building an object, via __setstate__ or dict update.
 
      Stack before: ... anyobject argument
      Stack after:  ... anyobject
 
      where anyobject may have been mutated, as follows:
 
      If the object has a __setstate__ method,
 
          anyobject.__setstate__(argument)
 
      is called.
 
      Else the argument must be a dict, the object must have a __dict__, and
      the object is updated via
 
          anyobject.__dict__.update(argument)
 
      This may raise RuntimeError in restricted execution mode (which
      disallows access to __dict__ directly); in that case, the object
      is updated instead via
 
          for k, v in argument.items():
              anyobject[k] = v
      tINSTtis“    Build a class instance.
 
      This is the protocol 0 version of protocol 1's OBJ opcode.
      INST is followed by two newline-terminated strings, giving a
      module and class name, just as for the GLOBAL opcode (and see
      GLOBAL for more details about that).  self.find_class(module, name)
      is used to get a class object.
 
      In addition, all the objects on the stack following the topmost
      markobject are gathered into a tuple and popped (along with the
      topmost markobject), just as for the TUPLE opcode.
 
      Now it gets complicated.  If all of these are true:
 
        + The argtuple is empty (markobject was at the top of the stack
          at the start).
 
        + It's an old-style class object (the type of the class object is
          ClassType).
 
        + The class object does not have a __getinitargs__ attribute.
 
      then we want to create an old-style class instance without invoking
      its __init__() method (pickle has waffled on this over the years; not
      calling __init__() is current wisdom).  In this case, an instance of
      an old-style dummy class is created, and then we try to rebind its
      __class__ attribute to the desired class object.  If this succeeds,
      the new instance object is pushed on the stack, and we're done.  In
      restricted execution mode it can fail (assignment to __class__ is
      disallowed), and I'm not really sure what happens then -- it looks
      like the code ends up calling the class object's __init__ anyway,
      via falling into the next case.
 
      Else (the argtuple is not empty, it's not an old-style class object,
      or the class object does have a __getinitargs__ attribute), the code
      first insists that the class object have a __safe_for_unpickling__
      attribute.  Unlike as for the __safe_for_unpickling__ check in REDUCE,
      it doesn't matter whether this attribute has a true or false value, it
      only matters whether it exists (XXX this is a bug; cPickle
      requires the attribute to be true).  If __safe_for_unpickling__
      doesn't exist, UnpicklingError is raised.
 
      Else (the class object does have a __safe_for_unpickling__ attr),
      the class object obtained from INST's arguments is applied to the
      argtuple obtained from the stack, and the resulting instance object
      is pushed on the stack.
 
      NOTE:  checks for __safe_for_unpickling__ went away in Python 2.3.
      tOBJtosØBuild a class instance.
 
      This is the protocol 1 version of protocol 0's INST opcode, and is
      very much like it.  The major difference is that the class object
      is taken off the stack, allowing it to be retrieved from the memo
      repeatedly if several instances of the same class are created.  This
      can be much more efficient (in both time and space) than repeatedly
      embedding the module and class names in INST opcodes.
 
      Unlike INST, OBJ takes no arguments from the opcode stream.  Instead
      the class object is taken off the stack, immediately above the
      topmost markobject:
 
      Stack before: ... markobject classobject stackslice
      Stack after:  ... new_instance_object
 
      As for INST, the remainder of the stack above the markobject is
      gathered into an argument tuple, and then the logic seems identical,
      except that no __safe_for_unpickling__ check is done (XXX this is
      a bug; cPickle does test __safe_for_unpickling__).  See INST for
      the gory details.
 
      NOTE:  In Python 2.3, INST and OBJ are identical except for how they
      get the class object.  That was always the intent; the implementations
      had diverged for accidental reasons.
      tNEWOBJssLBuild an object instance.
 
      The stack before should be thought of as containing a class
      object followed by an argument tuple (the tuple being the stack
      top).  Call these cls and args.  They are popped off the stack,
      and the value returned by cls.__new__(cls, *args) is pushed back
      onto the stack.
      tPROTOs€s®Protocol version indicator.
 
      For protocol 2 and above, a pickle must start with this opcode.
      The argument is the protocol version, an int in range(2, 256).
      tSTOPt.sÏStop the unpickling machine.
 
      Every pickle ends with this opcode.  The object at the top of the stack
      is popped, and that's the result of unpickling.  The stack should be
      empty then.
      tPERSIDtPsPush an object identified by a persistent ID.
 
      The pickle module doesn't define what a persistent ID means.  PERSID's
      argument is a newline-terminated str-style (no embedded escapes, no
      bracketing quote characters) string, which *is* "the persistent ID".
      The unpickler passes this string to self.persistent_load().  Whatever
      object that returns is pushed on the stack.  There is no implementation
      of persistent_load() in Python's unpickler:  it must be supplied by an
      unpickler subclass.
      t    BINPERSIDtQsXPush an object identified by a persistent ID.
 
      Like PERSID, except the persistent ID is popped off the stack (instead
      of being a string embedded in the opcode bytestream).  The persistent
      ID is passed to self.persistent_load(), and whatever object that
      returns is pushed on the stack.  See PERSID for more detail.
      s%repeated name %r at indices %d and %ds%repeated code %r at indices %d and %dc    Csddl}ddl}tjƒ}x|jD]û}|jd|ƒs^|r.d|GHq.q.nt||ƒ}t|tƒ st    |ƒdkr­|r.d||fGHq.q.n||kr|rÑd||fGHn||}|j
|kr    t d|||j
fƒ‚n||=q.t d||fƒ‚q.W|r‹d    g}x4|j ƒD]&\}}|j d
|j
|fƒqIWt d j|ƒƒ‚ndS( Niÿÿÿÿs[A-Z][A-Z0-9_]+$s0skipping %r: it doesn't look like an opcode nameis5skipping %r: value %r doesn't look like a pickle codes+checking name %r w/ code %r for consistencysBfor pickle code %r, pickle.py uses name %r but we're using name %rsPpickle.py appears to have a pickle opcode with name %r and code %r, but we don'ts=we appear to have pickle opcodes that pickle.py doesn't have:s    name %r with code %rs
(tpickletretcode2optcopyt__all__tmatchtgetattrRR    RRRtitemstappendtjoin(    tverboseR¾R¿RÁRt
picklecodeR’tmsgR]((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pytassure_pickle_consistencyãs>  " 
 
    ccs8ddl}t|tƒr-|j|ƒ}nt|dƒrH|j}n    d„}xàtr3|ƒ}|jdƒ}tj    |ƒ}|dkrÓ|dkr¨t dƒ‚qÓt d|dkrÀd    pÃ||fƒ‚n|j dkrëd}n|j j |ƒ}|||fV|d
krT|jd ks,t‚PqTqTWdS( szGenerate all the opcodes in a pickle.
 
    'pickle' is a file-like object, or string, containing the pickle.
 
    Each opcode in the pickle is generated, from the current pickle position,
    stopping after a STOP opcode is delivered.  A triple is generated for
    each opcode:
 
        opcode, arg, pos
 
    opcode is an OpcodeInfo record, describing the current opcode.
 
    If the opcode has an argument embedded in the pickle, arg is its decoded
    value, as a Python object.  If the opcode doesn't have an argument, arg
    is None.
 
    If the pickle has a tell() method, pos was the value of pickle.tell()
    before reading the current opcode.  If the pickle is a string object,
    it's wrapped in a StringIO object, and the latter's tell() result is
    used.  Else (the pickle doesn't have a tell(), and it's not obvious how
    to query its current position) pos is None.
    iÿÿÿÿNttellcSsdS(N(RV(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt<lambda>/sits#pickle exhausted before seeing STOPs!at position %s, opcode %r unknowns    <unknown>R¹R¸(t    cStringIORR    tStringIOthasattrRÌR<RRÀtgetRVRR^RRR
(R¾RÐtgetpostposR]topcodeR^((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyRs.                     c Cstƒ}g}d}x†t|ƒD]x\}}}|dk    r\|j|||fƒd}nd|jkr{||}}q"d|jkr"|j|ƒq"q"Wg}d}    xI|D]A\}}
} ||krÒ| n|
} |j||    | !ƒ| }    q±W|j||    ƒdj|ƒS(s7Optimize a pickle string by removing unused PUT opcodesR¤RžiRÎN(tsetRVRRÆRtaddRÇ( R¥tgetstputstprevposRÕR^RÔtprevargR?R³tstarttstopR£((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyRHs&         
c
Csæg}|dkri}nd}g}d|}d}xt|ƒD]q\}    }
} | dk    rp|d| Indt|    jƒdd!|t|ƒ|    jf} t||    jƒ}|    j} |    j    }t| ƒ}d}t
| ks|    jdkrì|rì|dt
krìt
|kst ‚t
| kr>| dt ks>t ‚n|rß|j ƒ}|dkred}n
d|}x|dt
k    r|j ƒqrW|j ƒy| jt
ƒ}Wqétk
rÛ|    jdksÒt ‚d    }qéXqìd
}}n|    jdkr_|
dk    s t ‚|
|kr&d|
}q¯|s5d}q¯|dt
krNd}q¯|d||
<nP|    jdkr¯|
|kr¢t|ƒdks’t ‚||
g}q¯d|
}n|
dk    sÁ|r| ddt|    jƒ7} |
dk    rÿ| dt|
ƒ7} n|r| d|7} qn|| IJ|r8t|ƒ‚nt|ƒ|kritd|t|ƒfƒ‚n|rz|| 3nt
|kr¨t
| ks˜t ‚|j| ƒn|j|ƒqDW|dI|IJ|râtd|ƒ‚ndS(sProduce a symbolic disassembly of a pickle.
 
    'pickle' is a file-like object, or string, containing a (at least one)
    pickle.  The pickle is disassembled from the current position, through
    the first STOP opcode encountered.
 
    Optional arg 'out' is a file-like object to which the disassembly is
    printed.  It defaults to sys.stdout.
 
    Optional arg 'memo' is a Python dict, used as the pickle's memo.  It
    may be mutated by dis(), if the pickle contains PUT or BINPUT opcodes.
    Passing the same memo object to another dis() call then allows disassembly
    to proceed across multiple pickles that were all created by the same
    pickler with the same memo.  Ordinarily you don't need to worry about this.
 
    Optional arg indentlevel is the number of blanks by which to indent
    a new MARK level.  It defaults to 4.
 
    In addition to printing the disassembly, some sanity checks are made:
 
    + All embedded opcode arguments "make sense".
 
    + Explicit and implicit pop operations have enough items on the stack.
 
    + When an opcode implicitly refers to a markobject, a markobject is
      actually on the stack.
 
    + A memo entry isn't referenced before it's defined.
 
    + The markobject isn't stored in the memo.
 
    + A memo entry isn't redefined.
    iÿÿÿÿt s%5d:s    %-4s %s%siR–s(MARK at unknown opcode offset)s (MARK at %d)isno MARK exists on stackR¤R¦R§smemo key %r already defineds'stack is empty -- can't store into memos"can't store markobject in the memoRžR R¢s&memo key %r has never been stored intoi
s3tries to pop %d items from stack with only %d itemss highest protocol among opcodes =sstack not empty after STOP: %rN(sPUTR¦R§(sGETR R¢(RVRtreprR]RRtmaxRaR_R`t
markobjectR
R[tpoptindexRRÆtextend(R¾touttmemot indentleveltstacktmaxprotot    markstackt indentchunkterrormsgRÕR^RÔtlinetbeforetaftertnumtopoptmarkmsgtmarkpos((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyRcs’'     
                   
 
                
  t_ExamplecBseZd„ZRS(cCs ||_dS(N(tvalue(RRô((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyRís(RRR(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyRóìss
>>> import pickle
>>> x = [1, 2, (3, 4), {'abc': u"def"}]
>>> pkl = pickle.dumps(x, 0)
>>> dis(pkl)
    0: (    MARK
    1: l        LIST       (MARK at 0)
    2: p    PUT        0
    5: I    INT        1
    8: a    APPEND
    9: I    INT        2
   12: a    APPEND
   13: (    MARK
   14: I        INT        3
   17: I        INT        4
   20: t        TUPLE      (MARK at 13)
   21: p    PUT        1
   24: a    APPEND
   25: (    MARK
   26: d        DICT       (MARK at 25)
   27: p    PUT        2
   30: S    STRING     'abc'
   37: p    PUT        3
   40: V    UNICODE    u'def'
   45: p    PUT        4
   48: s    SETITEM
   49: a    APPEND
   50: .    STOP
highest protocol among opcodes = 0
 
Try again with a "binary" pickle.
 
>>> pkl = pickle.dumps(x, 1)
>>> dis(pkl)
    0: ]    EMPTY_LIST
    1: q    BINPUT     0
    3: (    MARK
    4: K        BININT1    1
    6: K        BININT1    2
    8: (        MARK
    9: K            BININT1    3
   11: K            BININT1    4
   13: t            TUPLE      (MARK at 8)
   14: q        BINPUT     1
   16: }        EMPTY_DICT
   17: q        BINPUT     2
   19: U        SHORT_BINSTRING 'abc'
   24: q        BINPUT     3
   26: X        BINUNICODE u'def'
   34: q        BINPUT     4
   36: s        SETITEM
   37: e        APPENDS    (MARK at 3)
   38: .    STOP
highest protocol among opcodes = 1
 
Exercise the INST/OBJ/BUILD family.
 
>>> import pickletools
>>> dis(pickle.dumps(pickletools.dis, 0))
    0: c    GLOBAL     'pickletools dis'
   17: p    PUT        0
   20: .    STOP
highest protocol among opcodes = 0
 
>>> from pickletools import _Example
>>> x = [_Example(42)] * 2
>>> dis(pickle.dumps(x, 0))
    0: (    MARK
    1: l        LIST       (MARK at 0)
    2: p    PUT        0
    5: (    MARK
    6: i        INST       'pickletools _Example' (MARK at 5)
   28: p    PUT        1
   31: (    MARK
   32: d        DICT       (MARK at 31)
   33: p    PUT        2
   36: S    STRING     'value'
   45: p    PUT        3
   48: I    INT        42
   52: s    SETITEM
   53: b    BUILD
   54: a    APPEND
   55: g    GET        1
   58: a    APPEND
   59: .    STOP
highest protocol among opcodes = 0
 
>>> dis(pickle.dumps(x, 1))
    0: ]    EMPTY_LIST
    1: q    BINPUT     0
    3: (    MARK
    4: (        MARK
    5: c            GLOBAL     'pickletools _Example'
   27: q            BINPUT     1
   29: o            OBJ        (MARK at 4)
   30: q        BINPUT     2
   32: }        EMPTY_DICT
   33: q        BINPUT     3
   35: U        SHORT_BINSTRING 'value'
   42: q        BINPUT     4
   44: K        BININT1    42
   46: s        SETITEM
   47: b        BUILD
   48: h        BINGET     2
   50: e        APPENDS    (MARK at 3)
   51: .    STOP
highest protocol among opcodes = 1
 
Try "the canonical" recursive-object test.
 
>>> L = []
>>> T = L,
>>> L.append(T)
>>> L[0] is T
True
>>> T[0] is L
True
>>> L[0][0] is L
True
>>> T[0][0] is T
True
>>> dis(pickle.dumps(L, 0))
    0: (    MARK
    1: l        LIST       (MARK at 0)
    2: p    PUT        0
    5: (    MARK
    6: g        GET        0
    9: t        TUPLE      (MARK at 5)
   10: p    PUT        1
   13: a    APPEND
   14: .    STOP
highest protocol among opcodes = 0
 
>>> dis(pickle.dumps(L, 1))
    0: ]    EMPTY_LIST
    1: q    BINPUT     0
    3: (    MARK
    4: h        BINGET     0
    6: t        TUPLE      (MARK at 3)
    7: q    BINPUT     1
    9: a    APPEND
   10: .    STOP
highest protocol among opcodes = 1
 
Note that, in the protocol 0 pickle of the recursive tuple, the disassembler
has to emulate the stack in order to realize that the POP opcode at 16 gets
rid of the MARK at 0.
 
>>> dis(pickle.dumps(T, 0))
    0: (    MARK
    1: (        MARK
    2: l            LIST       (MARK at 1)
    3: p        PUT        0
    6: (        MARK
    7: g            GET        0
   10: t            TUPLE      (MARK at 6)
   11: p        PUT        1
   14: a        APPEND
   15: 0        POP
   16: 0        POP        (MARK at 0)
   17: g    GET        1
   20: .    STOP
highest protocol among opcodes = 0
 
>>> dis(pickle.dumps(T, 1))
    0: (    MARK
    1: ]        EMPTY_LIST
    2: q        BINPUT     0
    4: (        MARK
    5: h            BINGET     0
    7: t            TUPLE      (MARK at 4)
    8: q        BINPUT     1
   10: a        APPEND
   11: 1        POP_MARK   (MARK at 0)
   12: h    BINGET     1
   14: .    STOP
highest protocol among opcodes = 1
 
Try protocol 2.
 
>>> dis(pickle.dumps(L, 2))
    0: \x80 PROTO      2
    2: ]    EMPTY_LIST
    3: q    BINPUT     0
    5: h    BINGET     0
    7: \x85 TUPLE1
    8: q    BINPUT     1
   10: a    APPEND
   11: .    STOP
highest protocol among opcodes = 2
 
>>> dis(pickle.dumps(T, 2))
    0: \x80 PROTO      2
    2: ]    EMPTY_LIST
    3: q    BINPUT     0
    5: h    BINGET     0
    7: \x85 TUPLE1
    8: q    BINPUT     1
   10: a    APPEND
   11: 0    POP
   12: h    BINGET     1
   14: .    STOP
highest protocol among opcodes = 2
sM
>>> import pickle
>>> from StringIO import StringIO
>>> f = StringIO()
>>> p = pickle.Pickler(f, 2)
>>> x = [1, 2, 3]
>>> p.dump(x)
>>> p.dump(x)
>>> f.seek(0)
>>> memo = {}
>>> dis(f, memo=memo)
    0: \x80 PROTO      2
    2: ]    EMPTY_LIST
    3: q    BINPUT     0
    5: (    MARK
    6: K        BININT1    1
    8: K        BININT1    2
   10: K        BININT1    3
   12: e        APPENDS    (MARK at 5)
   13: .    STOP
highest protocol among opcodes = 2
>>> dis(f, memo=memo)
   14: \x80 PROTO      2
   16: h    BINGET     0
   18: .    STOP
highest protocol among opcodes = 2
tdisassembler_testtdisassembler_memo_testcCsddl}|jƒS(Niÿÿÿÿ(tdoctestttestmod(R÷((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt_testÝs t__main__N((^t__doc__RÂR R RtobjectRtstructRRRRRRR R!R<R)R*R,R-R.R/R0R1R2R3R5R6R7R8R@RARBRCRERFRGRHR¾RIRJRKRLRMRNR tpyintR>tpylongRUtpyinteger_or_booltpyboolRDtpyfloatR    tpystringR4t    pyunicodeRPRVtpynoneRQtpytupleRWtpylistRXtpydictt    anyobjectRáR[R\Rdtopcodestname2itcode2it    enumerateR³R’RRR]RÀR+RËRRRRót    _dis_testt
_memo_testt__test__RùR(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/pickletools.pyt<module> sh‘"                         1                                                                                                                                                                     
       ;                                                                                                                                                                   
                                                                                    1                      
                &    9    ‰Ï