ELF>j@X@8@,Y,Y \\!\!X `\`\!`\!$$Ptd(&(&(&QtdRtd\\!\!GNUbga+'?]}@ C "’@ rAI *0 DHh BBF@ 90Rdf_&szTȬ{8QYx?ʆ%1nh"U).8('FBREomR} ͦ.X@1Ȋ]O\ YC =Z-C7rqEߚKI_e<`0>BEzGS9T¼gĸ/+$sд JPh|OpW|TF kVC8%"GO…Cm 9dyj!qX2 a& * 8x   ! 6I rWS   % rro)?  aWk   { S   Ft7  s v  @  Y    0  =a <f ~NO;   ~) <(] k  a[ rV j " 2 mc  L"  Z (  ! z(  : @!D d& Pi!\  f  0 `J!   `!  l   !w S !!9   p 0  @y  p L!   `=  P   !  a5  >  y  Fd  <C @! !4/ 0  Q!  g - p   ` `i!K  PQ!D `!  2 I   0;!9! `\ @ d! q @Lz  y![ `!  n( p   !@`!v P__gmon_start___fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClasses__stack_chk_failPyTuple_Type_Py_NoneStructPyObject_GC_Delng_as_flat_listPyList_NewPyList_AppendPyType_IsSubtypePyExc_SystemErrorPyErr_SetStringPyErr_OccurredPyDict_GetItemPyObject_SetItem_PyThreadState_Current_PyTrash_thread_deposit_object_PyTrash_thread_destroy_chainPyString_FromString_PyWeakref_RefTypePyExc_ValueErrorPyErr_FormatPyMem_Free_PyWeakref_ProxyType_PyWeakref_CallableProxyTypePyExc_TypeErrorPyTuple_NewPyExc_RuntimeErrorPyObject_CallFunctionObjArgsPyObject_RichCompareBoolPyDict_SetItemNyNodeTuple_Type_PyObject_GC_NewVarmemsetPyObject_GC_TrackPyObject_GC_UnTrackPy_FatalErrorPyInt_AsLongPyDict_Nextrootstate_traversePyInterpreterState_HeadPyInterpreterState_NextPyString_AsStringsscanfPyExc_AttributeErrorPyMember_GetabortPyObject_Hash__sprintf_chkPyFrame_TypePyDict_TypePyArg_ParseTuplemallocPyEval_InitThreadsPyThread_start_new_threadPyInt_FromLongPyErr_NoMemoryfreestderrfwritemalloc_statsqsortreallocng_iterNyNodeGraphIter_Type_PyObject_GC_New_Py_NotImplementedStruct_Py_ZeroStruct_Py_TrueStructPyMem_MallocPyWeakref_NewRefPyClass_TypePyClass_IsSubclassNyRelation_TypePyObject_RichCompareNyMutNodeSet_Newnodeset_exportsNyMutNodeSet_NewHidingNyMutNodeSet_NewFlagsNyNodeSet_setobjPyDict_NewNyNodeSet_clrobjNyNodeSet_hasobjNyNodeSet_iteratePyList_SizeNyNodeSet_NewImmCopyNyImmNodeSet_NewSingletonNyNodeSet_be_immutablegc_get_objectsPyImport_ImportModulePyObject_CallMethodxt_free_tablehv_default_classifyPyInstance_Typext_findout_sizext_findout_traversext_findout_relatePyArg_ParseTupleAndKeywordsPyType_ReadyPyList_AsTuplePyTuple_SetItemPyType_Typehv_mutnodeset_newNyNodeGraph_Typehv_update_referrershv_is_obj_hiddenNyRootState_Type_hiding_tag__nameNyHeapView_SubTypeNewPyObject_GetAttrStringNyStdTypes_HeapDefNyHvTypes_HeapDefPyTuple_GetItemPyCObject_AsVoidPtrPyTuple_Sizehv_cli_dictof_dictptr_PyObject_GetDictPtrdict_relate_kvNyRelation_SubTypeNewNyRelation_NewNyHeapView_iterateNyHeapView_TypePyObject_GetIterPyIter_NextPyObject_Sizehorizon_newng_add_edges_n1NyObjectClassifier_Comparecli_cmp_as_intstrcmpNyObjectClassifier_NewNyObjectClassifier_TypeNyNodeGraph_Clearhv_update_referrers_completelyng_clear_methodNyNodeGraph_AddEdgePyGC_CollectPySequence_Listhv_update_dictownersng_add_edgeNyNodeGraph_SubtypeNewNyNodeGraph_SiblingNewNyNodeGraph_InvertNyNodeGraph_RegionPyExc_NotImplementedErrorPyExc_KeyErrorPyErr_SetObjectNyNodeGraph_UpdatePyObject_IsTrueNyNodeGraph_Copyng_copyNyNodeGraph_InvertedNyNodeGraph_NewNyNodeGraph_initNy_NewInterpreterPyInterpreterState_NewPyThreadState_NewPyThreadState_Swap_PyImport_FindExtensionPyModule_GetDictPy_GetPathPySys_SetPathPyDict_SetItemString_PyImportHooks_InitPyImport_AddModulePyDict_GetItemStringPyErr_PrintPyThreadState_ClearPyThreadState_DeletePyInterpreterState_DeletePyEval_AcquireLockPyString_AsStringAndSizePyExc_SystemExitPyErr_ExceptionMatchesPySys_WriteStderrPySys_GetObjectPyFile_WriteObjectPyErr_PrintExPyRun_StringFlagsPyFloat_FromDoublePyObject_CallFunctionPy_EndInterpreterPyEval_ReleaseLockPyThread_exit_threadPyErr_ClearPyObject_PrintNyThreadState_SetAsyncExcPyLong_FromLonginitheapyc_Ny_RootStateStructNyHorizon_TypePy_InitModule4_64heapyc_docNyStdTypes_initPyCObject_ImportPyType_GenericNewrootstate_docPyObject_GenericGetAttrPyObject_SelfIterhorizon_doccli_docdummyPyType_GenericAllocPyObject_FreeNyNodeSet_TypePyList_TypePyFunction_TypePyModule_TypePyTraceBack_TypePyCell_TypePyCFunction_TypePyCode_TypePyUnicode_TypePyDictProxy_NewPyExc_WarningPyErr_WarnExlibpython2.7.so.1.0libpthread.so.0libc.so.6_edata__bss_start_end/opt/alt/python27/lib64GLIBC_2.3.4GLIBC_2.4GLIBC_2.2.5ti ii $ui .\!k\!Pk \!(\!z"0\!}"8\!"@\!"H\!"X\!X\!`!+!p!n!x!-!!5!!>!!I!ȸ!R!и!\!ظ!e!!s!!y!!s!!y!0!K#@!K#P!X!!!!!!!!!!!!!!!!!!e!!!!`!@e! !!(!Њ8!d!`!_%x!?!T!_!kغ!x!%!% !+%8!%P!!!!!$Ȼ!!!!0!8!@! `!!`!>!!!!м!!e"!!!@!j"!\!!Po!!!Ƚ! ؽ!!!o"!!!!!!!@!"H!nP! X!@!!!XȾ!"! !!!!8!@!"`!!"!!`nȿ!q!"!8!p!(!"0!l#8!@nH!Pnh!"p!#x!v!v!#!#!!!Pw!n!!-!h! p!`x!!w!w!"!!!w!`w!#!#!p!!@w(!"0!8!H!pwh!"p!x!m!m!. !#!p!m!> ! !!(! l0!Pl8!@l!k!!! !!!!! !!8!`!@!!X! !`!!x!!!!!!`!!"!`!!!"!Й!!!""!P! !!,"! !! !3"(!8!!@!<"H!pX!~!`!C"h! x!@~!!J"!!}!!R"!px!`o!u`!> h!x! !!"!!!!. !p!!! !!!!"!! !!"!!`! !(!8! !@!H!X!`!`!"h!x!!!!!@!!"!!!!"!p!I!!Z!t!@!!"!P!! ! #(!p8!@!@!H!X!`!`!:h!x!!!#!!!!#!!!!5#!!!!!!!!<"!й!! !*(!8!!@!I X!`!`!Ix!`!!P#!`!!0p!pp! !!#8!0mp!!x!m!x!#!x!!!!m !n(!@H!!P!!!!`0!X!t!|!p!#!!0!P!@x!X!o`!`!!!`!!!!@X!$p!@y(!!!3$!!!!@!!`!!!!@!!в!!s8!n@!oh!!p!@!0!@!p!! !!!p@!!!P!!@!`!!p!8!x!!!p!P^!X^!`^!h^! p^! x^!^!^!^!!^!^!^!$^!!^!(^!)^!H!^!.^!/^!2^!3^!^!:_!;_!<_!>_!K _!(_!M0_!8_!Q@_!H_!P_!\X_!k`_!lh_!op_!rx_!s_!_!z_!|_!_!_!_!_!_!_!_!_!_!_!!!(!H!h!P!PP!P!P0!P!Pp!P!P!+H!h!!!!"!"!" !"!"!b0!b!bp!b!b!b!@!?!?x!!x!0!`! `!(`!0`!8`!@`!H`! P`! X`! ``!h`!p`!x`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`! a!!a!"a!#a! a!(a!0a!8a!%@a!Ha!&Pa!'Xa!`a!*ha!,pa!-xa!0a!1a!4a!5a!6a!7a!8a!9a!a!a!=a!@a!Aa!a!Ba!a!Cb!Db!Eb!Fb!G b!H(b!I0b!J8b!L@b!Hb!Pb!MXb!N`b!Ohb!pb!Rxb!b!Sb!Tb!Ub!Vb!Wb!Xb!Yb!b!Zb![b!]b!^b!_b!`b!ab!c!cc!dc!ec! c!(c!0c!f8c!g@c!hHc!iPc!jXc!`c!hc!pc!mxc!nc!pc!qc!c!tc!uc!vc!c!wc!c!xc!yc!{c!}c!~c!c!d!d!d!d! d!(d!0d!8d!@d!Hd!Pd!Xd!`d!hd!pd!xd!d!d!d!d!d!d!HH HtH5b %d @%b h%Z h%R h%J h%B h%: h%2 h%* hp%" h`% h P% h @% h 0% h % h % h% h% h% h% h% h% h% h% h% hp% h`% hP% h@% h0% h %z h%r h%j h%b h %Z h!%R h"%J h#%B h$%: h%%2 h&%* h'p%" h(`% h)P% h*@% h+0% h, % h-% h.% h/% h0% h1% h2% h3% h4% h5% h6% h7p% h8`% h9P% h:@% h;0% h< %z h=%r h>%j h?%b h@%Z hA%R hB%J hC%B hD%: hE%2 hF%* hGp%" hH`% hIP% hJ@% hK0% hL % hM% hN% hO% hP% hQ% hR% hS% hT% hU% hV% hWp% hX`% hYP% hZ@% h[0% h\ %z h]%r h^%j h_%b h`%Z ha%R hb%J hc%B hd%: he%2 hf%* hgp%" hh`% hiP% hj@% hk0% hl % hm% hn% ho% hp% hq% hr% hs% ht% hu% hv% hwp% hx`% hyP% hz@% h{0% h| %z h}%r h~%j h%b h%Z h%R h%J h%B h%: h%2 h%* hp%" h`% hP% h@% h0% h % h% h% h% h% h% hHp!H=rp!UH)HHw]Ht Ht]@HIp!H=Bp!UH)HHHH?HHu]Ho Ht]H@= p!u'H=g UHt H= h]o!@f.H= t&H HtUH=j H]WKf.SHWHB(HJ Ht1)G\@tHHHtЅt [fDf.HGPHH@ f.f.1f.HHHHGHf.HHdH%(HD$81HG@HT$ HL$$Ht$HP HD$HGPHHT$(PHL$8dH3 %(uHHD+f.LGXHG@H@ J9tHG81f.HOHȃx8HTeCDHiCBHH3GH9uH1HHHDøeCfH HHW(HBH@ HtHzfHHHH1H9HHHt H1DSHGHHtHHQHHu HHGP0HC1[f.H H@f.HFHHFH9~t 1HF(1HtH.t HB(B0@HHFHHT$P0HT$B0HB(HHGHtHfHi H@HHHt H1DSHGHHtHHQHHu HHGP0HC1[f.HGHH@fHHHt H1DAVIAUIATIU1SG $L@ID$LH|AՅu$A9l$ ~*ID$HcLHH<AՅt[]A\A]A^I|$1Ht[]A\LLA]A^ff.H1H9Cff.USHHW_$Z @tHHHtЅtk H[]@HHHOH9H(tHOHPHp Hf.1f.1f.SHWHHGHGHHGHWHPHGHGHtHHQHHu HHGP0H[yfAUATI1USHHItYAD$ ~c1(ID$LHtnt'A9l$ ~7ID$HcLHH4GuImt+H1[]A\A]fDHL[]A\A]f.IELP0@H9HtHHHfATUHSHHHB(t~ w1LdI|$0HtPHE(H+t+E(H[]A\H H5H8H+uHCHP0;HHID$0u@|$ H¸HuH |$ HX@f.AUIATIUSHHLHPHxRHHtbI|$HHH~LHtHHP1HHt=H[]A\A]fHmH+u HCHP0H[]A\A]DHSD$ HR0D$ H[]A\A]1)HHtI|$HHtHmSHEHP0DfHEHP0lUSHHHWHGHGHHGHWHPH HGH(Ht1VHCHtHHQHHtEH=HtHt~+H[]@H[]DH{HGP0H[]EDH=4@UHSHHH~H5 H9t EL~CHU@HtHHHt#H9XHufDH9_Ht:HHx HuHH9uH H5oHH81r11fDHH HG HXH+u HCHP0H HH[]fDHCH; HH;h ;HPH' H5H811Hf.SHGH@ 9GBHttHKs9q u9y)t3HcSHHQH HH HHHJHHRHP C[H0HVHHu HPHR0HP H5yH81[DH0H H9tH9t 11"fHHUHSHHHGHPHxRHthHH;C HQHt(Hu HPHR0HZ HH[]HtH{(HH[]11DHPHR0@1@HHֺPHHֺ@HHֺ0HHֺ HHֺUHSHHH HtHH[]H} HHitH1ِf.UHSHHH HtHH[]sHt1f.H} HHtHUHcHSHH= hHHtHxH1MHHH[]Ðf.UHSHHc HHt1XHEHtHHQHHtGHEH@HtHt~(H[]ÐHH[]fH}HGP0H[]DAVAUATUHSH^b!H dH%(HD$1HCb!H9tfDHtsHHXH@H9uHEHH=b!tjHEHtHHQHHu H}HGP0HEH@HD$dH3%(H []A\A]A^ÐH=d|H=a!HtH$Ll$Ld$HDH|$Lt$QH=ra!IF0LLH(uHUa!H*tHDa!%H=8a!HGP0fAWAVAUATUSHHc Lg LwHoL8GHIA~8t M9oI}HtHAԅI}HtHAԅ|I} HtHAԅeI}0HtHAԅNI}8HtHAԅ7I}@HtHAԅ I]H.fDI~ H{8HtHAԅH{@HtHAԅH{HHtHAԅH{PHtHAԅH{XHtHAԅH{`Ht HAԅuwH{hHt HAԅudH{pHt HAԅuQH{xHt HAԅu>HHt HAԅu(HHt@L9I~HtHAԅH[]A\A]A^A_ÐH{HufLHI1ATHUSHĀdH%(HD$x1HIpHl$H5HH1H(GHT$H51HLuQHtGHXHt'Ht$H9unfDH9t_HHuHHuf.H H5L1H81#H|$xdH3<%(HH[]A\HT$H5o1HD$RHC1HHu kfDHRqHuT$9u5D9%H@HuHU H5n1H81rMD1Ht@HǃHuHt-S;$u~fDڃ;$tnHHuH H5{1H8@H5;!HHHHH H5HH81fH5iHt.CtuHCHMI9 tH(H;Hu1H[]A\A]@Lm gHHƿAՅtȸ@f.UHSHHHHHRtH[]fH}(HHGH[]f.AUIATUHHSHHHo@HUHt(H92uDH9HHB HuHj hHIHǾh@@1@Hue@uGu:LeMl$@HI$Iu0!HID$HLH[]A\A]D1HfGtH@tfDH HSH5VyH81H1[]A\A]H8Hx@g1HfW LD1M1AUHSHHH? HtHH[]@Ht1f.H}HHQtHUHSHHH?HtHH[]@cHt1f.H}HHtHUHSHHH?LHtHH[]@Ht1f.H}HHtHAWAVAUATIUSHHF!L~HGIIcH;PEDKHH1E$RfDHxHHtbHtHA9~0IFHcItHDHHHI HuHHtHA9I~ HHmtaH[]A\A]A^A_fHmu HEHP0H1[]A\A]A^A_fDH! H5:wH8H1[]A\A]A^A_ÐHUHD$HR0HD$H[]A\A]A^A_H H5vH8G1_AWAVIAUATIUSHLI_ HHtB~QC1L,fHDHL9t2ITLHBHzPHuHmtS1H[]A\A]A^A_fI~ HHMHQHHUuHUHD$HR0HD$H[]A\A]A^A_HEHP0@H9HtHHNt HBu1H; tÐH9JuHbfHxf.AUAATIUHSHHH H9t H5tAI|$H9t Ht+UAD$9tgAH ƍJc4HDH HH[]A\A]f.9uHHC0Hmt@1H[]uHEHP0@Hmu HEHP0H[];HHy@!tH{0dfDH HH@PUHSHH@@!Hu9fH[Ht'H{HuH=pH[HuڐHutHuH=?!HtHHH[]H=pHD$[HD$@H HH@XUHSHHHHHx1҅uH}H1҃H[]H HH@`USH8H|$1Ht$dH%(HD$(1)HHD$ H|$HT$H5JtEH|$ 1DHHrf.HH9t_HT$ H|$HRH4u۸HT$ HtH*uH|$ D$ HWR0D$ HL$(dH3 %(uH8[]1뾸H HH@0H HH@8HHw HAH HH@@SH=%HHHtGH H5 H1H HQHHuHSHD$HR0HD$H[fD1ff.AVHAUIATUSto~[FHLdH]Hu;DHxMt)LHSHLs H*uH{HHGP0HOMuHL9u[]A\LA]A^1[]A\A]A^AVHAUATUSLwLoLg Ho(H_0pLH@H@H@H@ H@(H@0H@@MtI.tzMtImt^MtI,$tBHtHmt&HtH+u HCHP0[]A\A]1A^fDHEHP0@ID$LP0IELP0@IFLP0wUHSHHc HHtc1HHHEH@Ht~=H[]fDHH[]fHHEHH@H[]fH[]DHGH; t HfDHGHDf.H(HGPHPHAHHEHGDHGPHxtHG`HGfHHtHG`HGHyG`HGf.HWPH%Hz HHDHGATHIHU%SHW@HHHuH@ HtH9u[]A\DHHtgLHH!!H9HLnHHHh(HEPHCP}`t`HHEHCHHCH[]A\HL"HHtUH!!HHCPHHDHE0HC0E`C`HEHCHE8HC8HEXHCX}H !ff.ATIUHSHHvx`t"t-HHL[]A\L@HAfD[]1A\fHCHH[]LHA\fDHH9t8H9~t2H9~t,H9~ t&H9~(t H9~tH;H~0HHHQ1f.HHNHH8H|'UHSHHH~HtNH[]fH{Ht1҅uH;HH[HH]ATE1UHSH~HH7t []DA\H{Hlt[DN]DA\HH;H[]A\H_Df.UHHH5zSHHdH%(HD$81HL$HT$tjHt$HNH'HH$Hl$HD$ D$0HD$(t%H|$(Ht$8dH34%(uHH[]@1wUHSHHH~HhtNH[]fH;HH[HH]UDUHSHHH?~&H~HtH[]@HuHUuH}HH[HH]@f.AU1ATUHSHHHF Lf(H9Dh tMH{(HHH;H3Lc(9t'HC D;h |H{HtH1҅H[]A\A]H1H;hfAVH G!AUIHHHxATUSHdH%(H$1LL$LD$IŻHH\$0H$$Ll$HD$ D$(HDHHH9uHD$LHpwIHD$LhL蓾t"L;l$LLAVtD$(tlE1HH9t*HHtHHHHH uH;HHGP0H9uLH$dH34%(HĐ[]A\A]A^ HItE1/fHtmLHLIDI cK|0Hu蛾fH=;wLl$ /LHƿAՅ@1?Im@IELP0fDAUH '!ATUSHHHHvHL dH%(HD$1I8L,$IXHLeME11A HDHPHHH0HL UvH(H0HLLuHhHLH-H&!H9P`HPHH@0HhX@`HXHP8H HH\$dH3%(u_H[]A\A]fDAIcL9HY H5jcH8ʺf.1H5 H5cH8覺1mf.SH h!HHHH"uHLU dH%(HD$1ItqH4$HH!H9tYP`t6H 7@`HHH HH\$dH3%(u%H[Hq H5bH8f1觹UHSHHHvHHPHcyH1HtHHH HQHHt H[]fDHSHD$HR0HD$H[]f.ATUHSHLfHwH;HPHI1Lc[]A\ATIUHSHvHt>DLHHt8HhPHH@XH0H舺HuHu[]1A\[]A\fDH 'UHHHH !SHL dH%(H$1H6 H\$@D$xHD$hHS8LK HH@HT$0HS(LD$ HT$(HSHD$H$1HT$HSHT$HrŵtqHD$hHl$@Ht@ t{HHHD$XtIH|$HH5=HŹtHD$X+fHT$XHtH*uH|$XHGP0@1H$dH3 %(uHĘ[]ÐHD$hw-f.UH  !HHHHrSHHdH%(HD$81H H\$LKHL@HCHD$1L$踴t|HHl$HHD$(teH|$H5Hɸt$Ht$(H|$tHD$(3fHD$(HtHHQHHuH|$(HGP01HL$8dH3 %(uHH[]*f.UH !HHHHqSHHdH%(HD$81H H\$LKHL@HCHD$1L$踳t|HHl$HHD$(teH|$H5Hɷt$Ht$(H|$tHD$(3fHD$(HtHHQHHuH|$(HGP01HL$8dH3 %(uHH[]*f.UHHH56pSHHH dH%(HD$81H HL$ LL$HL@1HH,$HHD$HT$HD$Ht~HtbH$HD$(HHxHL$HHPHHHL$HHPHHt{tVH HKfH*u H|$HGP0HD$Ht$H0HVHHuH|$HGP0f1Ht$8dH34%(u7HH[]H|$HGP0tH|$HGP0H貳fATIUSHnHHP`t*t=H> H9Ct@1H;- []A\H@XIL$ H9 []A\[]A\fDHI H{H0轴I;D$ UHHSHHH}XtH}H訴H[]fDAUHATIUHSH0HHHEHhH5mH@Hǭ HHC(CLCHHC HC0HC@HAHHC0HcCLH<;HHC@tbSL1Ʌ HC@HcH9KLdHHC(t+H5 HtH5x HE1uDH+th1H[]A\A]DHLHHtHHtAIcLH9|HH+HC@uHCHP0fDSHHHH !H0L HT$LD$ HD$dH%(HD$(1H$HRlHD$ 1tHT$Ht$ H辱HL$(dH3 %(uH0[ðHWH;m t+H;\ t"tHfHGATUHSHHHgt[]A\DH}7HItH0H;ut&Ht1ۅÉ[]A\fDH=`kH] бHHƿӅuI4$@UHSHH0Ht*HۉhtHXHH[]HѪ 1@SH !HHHHjH dH%(HD$1LL$LD$ Et1t$ Fw-HT$HHL$dH3 %(u3H [f1@H H5X H81虴1HH= 鿮Df.AUAATUHSHHHB(tiHC8DhHC8HhHs8H{@$HItlH{0L萮tC(HmtC(H[]A\A]HEHP0@裰H¸HuH-_ HEtDHD赭HItH{@HHI$t%HHI$XID$LP0H@HHI$KID$LP0;Df.HHdH%(HD$81H|$Ht$(HT$ 訳HHD$tTHD$Ht$Hx;HL$H1HVHHtHL$8dH3 %(u$HHfH|$D$ HWR0D$ Ӹ@f.AWAVIAUIATUHSHH HHHpH9I H}H5ާ H9(AHEE11H}+AIcH;EHULHHHAH HQHHuHSD$ HR0D$ DHHL[]A\A]LA^A_錯@SHuVfDHmuHEHP0HD[]A\A]A^A_fDHHL[]A\A]LA^A_̭@HmuHEHP0AHXHHufDtbHªHH>LHAH HQHHuHSD$ HR0D$ f.SHHH5]fH0dH%(HD$(1HT$t`H\$HHD$tLH|$HT$H5[tHD$,f.HT$HtH*uH|$HGP0@1HL$(dH3 %(uH0[SSHH dH%(HD$1H<$_HHD$t@H5HHtHt$H<$Pt HD$@HT$H*t1HL$dH3 %(uH [DH|$HGP0赩DSHH dH%(HD$1H<$迯HHD$t~H$HHxtPHt$H<$t=H{(4HtHD$CH|$H5H,uHD$HtHHQHHt1HL$dH3 %(uH [H|$HGP0ըDH(HH5H<$HHdH %(HL$1HD$t%H|$苭HL$dH3 %(uH(fD1gATUHSHH0H~dH%(HD$(1H7 HHpH9t 覭trHC HPHz H{HD$1HHD$1HtbLd$H5HLtfI|$ tWHt$H{8)IHi H5ZQH8ʧ1HL$(dH3 %(uNH0[]A\1HL$HHSHHuH|$HD$HWR0HD$fH{8H-f.ATIUSHH0dH%(HD$(1HG8HHD$ HHD$Hl$H5FLHt&H}tHt$H{0z 1HL$H1HVHHtHL$(dH3 %(u.H0[]A\ÐH|$HD$HWR0HD$1GSHH dH%(HD$1H<$HHD$tEH5HHtHD$)HT$HtH*uH|$HGP0@1HL$dH3 %(uH [賥UHSHH(H<$HdH%(HD$17HHD$tT{)tWH5$HHet HD$HL$dH3 %(u5H([]@HT$H*u H|$HGP01DH8H(HH5%H<$HHdH %(HL$1D$t>D$u&H HHL$dH3 %(uH(fDHٟ 1菤Df.SH HHHH_H dH%(HD$1LD$:u&1HL$dH3 %(H [f.H߾0HHtH!1H!HC1HHCt8H|$H5 HtHHtHsHHP1HHWHSHD$HR0HD$>}f.SHH0H\$HT$H|$dH4%(Ht$(1HKH5^H1dt@H|$H5Ht'H@ HH\$(dH3%(uH0[fD1w{H4cIHcHfDL9HGLHH@(fDL9tcHGHHLH@(1L91L9HH H5FLH8vH@1DATIUHSHHLHPHxRHHtaMHUHH}Ft9uHHP1HHtLH[]A\H}LtuH+u HCHP0H[]A\f.HSD$ HR0D$ H[]A\DAWAVIAUATUSH(HWHt$HBD$1&fIM9l$IVLcHt$ID$HTLjIV(L|IV0I}HDHHIEHL$PHHHL$t;LHLLcHHPHHoHCHP0Ie1H([]A\A]A^A_LxHHtHL%H3HVHHuHSHD$HR0HD$H([]A\A]A^A_Hc1USHHGto舢1HH=[f.H HH <@A9HD$(HcH\HChHCHxL9tL kH{(HGuH+ H5|CH8茘1I/u IGLP01HL$HdH3 %(jHX[]A\A]A^A_.HItHD$(IcHIGHD$(HHD$0IG HD$0HHIG(I(IG0l1EOHzHHNIG(IJtH{(踖Hc耜H'IW0A9JD~kHD$(LcJ\HSHs HBH@ HuHfDH H5SH8R1Hё H5AH821H54 L講IHQHIIWHD$LR0HD$軖f.UHHH5RSHxL HT$XHL$@LL$HdH%(HD$h1HT$HT$P1H$H 苙 iHHtyHhHD$@H5 HEHHC HHD$HHC(HHD$PHC0HHD$XHC8H赚H3HVHHt&HL$hdH3 %(u,Hx[]1@HSHD$HR0HD$襕DH5Y T@UHH5QSHHL Hҏ HL$(LL$0dH%(HD$811聘H=z mHT$(Hz~;H- 11DHDHxH9tH肚tvHT$(HcH;B|տHHtiHD$(H5 HHCHHD$0HC HrH HQHHu3HSHD$HR0HD$DHA H5?H8袔1HL$8dH3 %(uHH[]T@ATUSG LgG$HGG ~_LHIlf.HSH*t&HH9t1HH*uH;HGP0HSH*uH{HHGP0H9u[]LA\鐑SH_HG>HtH+u HCHP01[DAUATUHSHHd L(MtA1AHUHEHHEE1HHEHUHPHEhE "mHEHTH*t=AD9e ~MHEIcHHH*uHEH<HGP0HEHTH*uHEAH|HGP0D9e H}yHEH@MtAIAt~(H[]A\A]DH[]A\A]YfH[]A\A]AWAVIHH5=AUATUSHHH dH%(HD$81IF HL$Lt$HHD$H! IF HD$H$1 E`HH4H謕I0H|$6EAD$E1L$DHEN,8L9l$D$(tjI}H9taHuUHU I}HHpH9t tHD$I9E Ll$ H $H|$H8L@IM9rH# HHL$IN HmtHL$8dH3 %(uSHH[]A\A]A^A_HUH$HR0H$@Hы HD$ oHD$IF 11wHH HHATUHSHH*G utHwHcHHLH9)9C$[D`1DuAHT$AAExjIcH{HHHEΓHHCHT$tHDc$HEHHcC HHCH(HcC HHCHPC 1C)H[]A\ÐHCC$C 赎fDH9Q21f.ATIUHSHHHHPHxRHHtiI|$HHّt$HHP1HHt"H[]A\f.H HQHHu!HSD$ HR0D$ H[]A\fDH[]A\fAWAVAUATUSHHHHHt$HD$ dH%(HD$81HD$(蛒趌HIH{(!HH{(_HHHD$ nHG HH\HHPH(H HQHH5HHD$('IHD$L賑 ~l1HHD$@ID$L,LHIt2H0Ht*H|$LBI7LnHH;\$uHD$H|$E1H51L%a LHL9 HEL,M9euLLLD$蝌LD$uH H|$L萏LD$ufDIHPHIH|$ H\$(HtHHPHHHtHHPHHu HCHP0HL$8dH3 %(HH[]A\A]A^A_H5Y HHnHeHHQHHHPHR0IIu&I1HPHI9IFLP0*fJl< fDHSHD$HR0HD$HGP0"HD$Ld ffDSHHH5xGHHׅ dH%(HD$1H_t;H4$Ht*HC HHT$dH3%(uH[f1UHSHHHW(H 藍tH{HƊH[]@UHSHHHH9xt HuiHt{H~H/t 1H[]fH}HuYH HHH#uH}HH[].fDHHH[]'K~HU(H} HH[]鱌ATIUHHSH}t 1ۉ[]A\HUH}Lxt E[]A\É@SHHH5 EH dH%(HD$1HL$HT$菌t;HT$Ht$Ht$Hm HH\$dH3%(u H [1HHHVHH8ʋHf.HHGt/Hu(HHW HwH腋HDHY H5:4H8躈HHH0Ht*H@@ @$@)@(@*H@Hf.SHHHHtRHSHxHHPtHHtHHQHHtS(P(H[@HWHD$R0HD$D1@SHH dH%(HD$1H<$迋HHD$tGH5~HHHT$tHL$dH3 %(HuH [H*u H|$HGP01EDO 1HG~HHpHHpHH9W G)1@f.HtH HHf1ff.SHH )Lc[ LSLIMM9LIH9I9sHLH)HII?LHHHLI9uI9Is HxH9tfDH9xu HI9rIxI9vM@I9t DL9u HI9wHH9H 1[@LLH 1[fH9H:H 1[fHL$HT$Ht$HL$HT$Ht$ATIUSHH H~(dH%(HD$1HtHHv0HL$HT$覉tJHD$HT$H9sH9XtZH@HH9XtFH9wI|$H޽9t1t-HL$dH3 %(u]H []A\f.1@I|$Ht,t AD$8uIT$0I|$ H1蕇@땉豄AUATIUSHH8HdH%(HD$(1跊HHD$ I|$(HL$HT$H蒈Hl$1H;l$skL-t fHH9l$vUHuL9tID$ HPHxRHHH|$ HtkH+uHCHHP0H9l$wH|$ t9Ht$ I|$82HL$ H)uRH|$ HD$HWR0HD$:HtH+u HCHP0HD$ HtHHQHHt'1HL$(dH3 %(u#H8[]A\A]f.H|$ HGP0-f.AUIATUSHHhHdH%(HD$X1H%D$Ht$(H|$D$8HD$0IE8HD$PIE(HD$HHHD$@I} HL$HH͆txH$H;\$Ld$H-} s=HCH9t(HD$ I}HpeLHPt>D$8u6HH9\$wI|$0ztHt$@I}0H fH-I} 1HL$@HHPHHt+IU(HHjHL$XdH3 %(u"Hh[]A\A]DH|$@HWR01fD軁f.AUATUHSHH(dH%(HD$1H| H9Ft3HG0HHG0HL$dH3 %(H([]A\A]Ll$Ld$H LLg~HD$H;D$s"HpH;5G| tSHC(HPHxR@H{ 臇Hs H{Jt5H{ LLHtHD$H;D$rHC8HHC8:12褀@UHHSH(H}HL$HT$dH%(HD$1衄t1H\$H;\$r.fDHH9\$vHsH}Pu@1HT$dH3%(uH([]fATIHUHSH I<$HL$HT$dH%(HD$1 t8H\$H;\$r9fHH9\$v%HSI|$Htu߸ 1HL$dH3 %(u H []A\pSHHH H;HL$HT$dH%(HD$1st1Ht$H9t$t H\$dH3%(uH [f.CATUHSH0dH%(HD$(1He)HHL$ HT$HHT$HD$ H)H{(HMHM9~hDa1IIHHL9tCHT$HMHHxHHHBHHtH/uHGHHP0L9u1Ht$(dH34%(H0[]A\Ðu7HzHjHEH/uHGP0Ht$ޥHt$H]x H5)H8}HPx H5*H8}iHw H5I)H8}IR}fAUIATUHSH(dH%(HD$1)tzHL$HT$LHEHD$H\$H)H}(AtRH@HH|$dH3<%(H([]A\A]f.ˤ|fDHc~HtU~HL$1HIHHL$HqHHtHHL$A9zHAw LH8{1^Hv H5]8H8J|1:|@f.HHH5@f.SH H HHHH8H dH%(HD$1LL$LD$HD$HD$ytHW|HHtoH|$Ht ~u 0 and < %d.hv_cli_rcs_memoized_kind: nodeset object (immutable) expected.Invalid cmp argument to NyNyObjectClassifier_CompareCompare argument must be a string.Compare argument must be one of < <= == != > >=Invalid value of cmp argument.This classifier supports only equality selection.Tuple of triples with [0] a CLASSIFIER expected.Tuple of triples with [2] a STRING expected.cli_and: classifiers argument must contain classifier objects.O!:update_referrers_completelyupdate: right argument must be sequence of 2-tuplesItem deletion is not implemented for nodegraphs.ng_ass_sub: can not change number of edges (wants to always be fast); consider using .add_edge() etc. instead.ng_ass_sub: value to assign must be a tuplecan't add __builtins__ to __main__Unhandled exception in thread started by Error at initialization of module heapycThe hiding tag: if it is the the same object as the hiding tag of a HeapView object, the nodegraph will be hidden from that view.NG.is_mapping : boolean kind, read only True if NG is a 'mapping'. Then, only one edge is allowed for each source; indexing returns the actual target object instead of a tuple of targets.NG.is_sorted : boolean kind, read only True if NG is sorted. It will become unsorted after any update. It will need to be sorted to make it possible to find edges (implementation uses binary search). Any indexing operation will automatically sort it if it was not already sorted. The flag is currently used from Python to see if the nodegraph has been used at least once after update, so that it will not be cleared too early.HV._hiding_tag_ The hiding tag defining what objects are hidden from the view defined by HV. Objects that contain a _hiding_tag_ object which is identical to HV._hiding_tag_, will be hidden from view, in the following cases: o The object is of a type that has been registered for hiding via _hiding_tag, or is of a subtype of such a type. o The object is of instance type. Such an object will be checked for a _hiding_tag_ item in its __dict__. HV.is_hiding_calling_interpreter : boolean kind If True, the data of the interpreter using the HV will be hidden from the heap view as seen from RootState. This is used when multiple Python interpreters are used. One interpreter will be monitoring the operation of the other interpreter(s). It would set is_hiding_calling_interpreter to True in the HV it is using. Its own data will then be hidden from view, making memory leak detection more practical.is_using_traversing_owner_updateHV.is_using_traversing_owner_update : boolean kind True if update_dictowners is using a recursive traversal algorithm to find the dicts in the heap. When False, the normal case, it will use the dicts found in the gc collection structure, by gc.get_objects(). This was found to be much faster in usual cases, but the old version is available by setting this flag. -- It may be removed in a later release! --HV.root An object that is used as the starting point when traversing the heap. It is normally set to the special RootState object, which has special functionality for finding the objects in the internals of the Python interpreter structures. It can be set to any other object, especially for test purposes. See also: RootStateHV.static_types : NodeSet, read only The 'static types' that have been found. The static types are the type objects that are not heap allocated, but are defined directly in C code. HeapView searches for these among all reachable objects (at a suitable time or as needed).classifier returning object typeclassifier returning object classclassifier returning index of matching kindclassifier returning object sizeclassifier returning singleton set containing object itselfclassifier returning the object itselfclassifier based on a combination of other subclassifiersguppy.heapy.heapyc.RootStateTypeguppy.heapy.heapyc.ObjectClassifierRootStatei%d_%50st%lu_%50sedges[%d].srcedges[%d].tgtmodulesi%d_%ssysdictcodec_search_pathcodec_search_cachecodec_error_registryt%lu_f%dc_profileobjt%lu_%sc_traceobjcurexc_typecurexc_valuecurexc_tracebackO|O!:interpretercan't start new thread Output from malloc_stats gcget_objectsOO:numedgesOO:relateob_typeO!:register_hiding_type_hiding_tag_O!O!O!|O!i:shpathstepO!O!:reachableO!O!:update_referrersdelete_extra_typeOO!:hv_new__dict__iO:rel_newO:partitionO:Horizon.__new__OO:<OOO:selectO!OOO:user_definedO!O!O!:cli_rcsO!O!O!:cli_inrelO!:cli_indisizeO!O!:cli_findexTuple of TUPLES expected.O!O!OO:cli_dictofO!O!:cli_andO!:update_dictownersAmbiguos mapping|OO:NodeGraph.__new____builtin__sys__main__can't create __main__ module__builtins__stderrtimesleepOOheapycNyNodeSet_Exportsguppy.sets.setsc__doc__ObjectClassifierRootStateTypeXrelatoriterableis_mappingcond_clicond_kindclassifymemoized_kindstartavoidGUSAvoidEdgesfind_onerootheapdefsset_async_excxmemstatsis_sortedadd_edgeadd_edges_n1as_flat_listclearcopydomain_coversdomain_restrictedget_domainget_rangeinvertinvertedrelimgupdateupdatednodegraph-iteratornewsselfepartition<===!=>>=limitframeis_hiding_calling_interpreterstatic_typescli_classcli_idcli_idsetcli_nonecli_typecli_user_definedindisize_sumheapreachable_xregister_hidden_exact_typeregister__hiding_tag__typeupdate_referrers_completelyclassifier returning Noneuser defined classifierhv_cli_rcsclassifier returning ...guppy.heapy.heapyc.NodeTupleguppy.heapy.heapyc.Relationguppy.heapy.heapyc.NodeGraphguppy.heapy.heapyc.Horizonguppy.heapy.heapyc.HeapViewkkpk`k@kkrrtrrhrr 0?tp_cache__mro____bases____base__tp_subclasses__slots__?f_backf_codef_builtinsf_globalsf_localsf_tracef_exc_typef_exc_valuef_exc_traceback__self____module__ob_reftb_nexttb_framefunc_codefunc_globalsfunc_defaultsfunc_closurefunc_docfunc_namefunc_dict__name____class__arrayArrayTypeheapyc.NyStdtTypes_init: Can not size array objects in this Python version;x;EEFF((F@8FXHFphFFGXGhGG G G8 GP Hp (H 8H HH hH H H H (I8 8IP XIh I J HJ J J( JH K K L MH N N O XP P Q@ (QX 8Qp HQ XQ hQ Q RhR@ShTVXYPhYhYZhc(dPepefhgg(gXhxijj@hll(mm no p88qHqXqhqxqqq(hrh(ss(t(uP8uhuu8vHv8w Hw8XwPhwhxwwxxhy8zHzXzxzzz(|@||}h}}8~h~H`X؄0xh؆؇؈H@؊8x0hh(X8H (0 P ؖ H !x8!`!!ț!!؝X"x""H"X#h0#x`#x##x##$HX$X$h$$8%h %%%% &Xp&&&X'`'h'''x'ȵ(88(`(x(((H(H)غH)H)X))0*X****+(0+h++++H+X,0,H,,,8 -H---H-x. .xX.H..x.P/X//00h0h0081011(11x02Hh222zRx $3@ FJ w?;*3$"D=JAHd=|= =====eDPV A (>#,@>NDx>\p>(t>> x>>3Aq> > > $><>=\ `T>l>>3Aq>>L>BEE D(C0F (A BBBH M(A BHB$(?$<0?<AAD qCAdH?3|p?h?WAQL?BBF A(D0j (C ABBG D (D ABBK @'QQ4 @BAD G0z  AABD \T@BED A(D@W (A ABBC _ (F ABBF V (A ABBD <hAAAG  AAE D AAJ TAAA , AADG  AAG <BAc D r\`C(4txCADG B AAH M DAN CCCC C,$CEADG V AAD ,TCYADG V AAD $CEAGD sDA< DADD s AAB D DAG TAADDNBBB A(D0KP 0A(A BBBB L4E(BBB B(A0A8D@ 8A0A(B BBBB 4xGBDA D  AABA J DI+AiLJ&BBE B(A0A8F 8A0A(B BBBA LDJBBB B(A0A8J 8A0A(B BBBC $8S5AN0 AE PTeAc<TBBE D(D0(A BBB U2<4 HUHBUB D(A0] (A BBBF t XVAS, XVdAAG ~ AAG  VD| H L WgBED D(D0 (A ABBC O (A ABBK <4 (XBBA D(G0E (A ABBE 4t xXCADG Z FAC OAAL XBEA G(M0 (A ABBF X (C ABBA , YYADG U AAE ,, ZYADG U AAE ,\ 0ZYADG U AAE `Z`BBB B(D0A8DP 8A0A(B BBBC U 8C0A(B BBBG Z 8C0A(B BBBB X 8A0A(B BBBA d$ ([BBE B(D0A8DP_ 8A0A(B BBBC u 8A0A(B BBBA  [V\ [BED D(D0l (A ABBK [ (A ABBG M (A ABEJ  \ \4 \L \d x\"GU| \/< \AGD0 AAC e AAI DFA, \ADG E AAE <]BAD O ABG A AEI <D]BAD N ABH A AEI 4^AAG  AAH m FAD ^,^ADD0 DAB H_$@_@ADG oCADX_,\P_AADP AAD ```_$_dAK L AG L8`BEE A(A0b (A BEBE A(A BBB<dx`BEB A(A0 (A BBDG L(aADD ^ AAG D DAG Z AAD DAAa! a$a<aSTa <la$BKF d ABF o ABA DbjBDD c ABP A ADJ KALcC @c4$Hc]ADG ] CAC YDKD\pcaBDD T AED R EED JAB,cAND` AAE 4dKADG _ AAC GDK4 0dbADG e AAE VDK<DhdBDA D(G0b (C ABBD Dd BIR A(A0G 0A(A BBBD <fBIA A(T@" (A ABBG $ gA[ w AD 44hsADG0C AAG XAA,lh0BAD eAB4hjBDD H ADI AAGi ,iCAQG AAB , jAXD` AAA ,LjAXD` AAA ,|knAND`# AAH DmBDA v ABH N ABG A AGG $Hm:AGG hAA<`mBED I(D0 (A ABBF $\nAT@q AA o=4@oBAD ` ABF v ABG ,oLAKG _ AAD $oA[0P AC ,@p<DHp!BEA D(G0W (A ABBH 8qDPi C |qBBE E(A0D8DP 8G0A(B BEBI l 8D0A(B BBBG D 8G0A(B BEBI $$8sAQ@ AA $LsAG0y AF $t8tAG0 AH tiD0U G 4@u3BAD GP  AABH 4HvBDA GP  AABB $,vAG0~ AA ,TXwADG@] AAE wD0] G $8xA[0x AK $ yAG@p AG y_L  zBDD D0J  AABD l  FABK V AABd\zIBBE B(A0A8D` 8A0A(B BBBH B 8A0A(B BBBD 4x{AAD P AAH Z FAA ,{AAQ` AAF ,,@};BDK fAB$\P}AQ AF 8~ ,0~ AND AAD  ,#AND AAD ,AND@ AAD D \ LtBLB B(A0A8D" 8A0A(B BBBD , AND AAH ȃ , <AKD`$ AAA ,<ЄBAA AEl0+Ai\@OBBA D(D0 (A ABBF D (A ABBN D(A ABBL0BBO B(A0A8DZ 8A0A(B BBBA <DT4TBAD G0  AABB LBDD D0C  AABK e  AABG D FABL:BBB B(A0A8JN 8A0A(B BBBD $,ЋyAQ S AJ $T(<ADG mAAL|@ADG o AAC x DAK D GAL UDA4LBDG T ABD \ ABA $ ȌyAQ0Y AD , &GYD 8`Dq K _d xFG~$| lAG B AE $ {AG0V AA  P2 x$DY C 4!AG0 CE J CC J CC 4 int Create a new interpreter structure with a new thread and return the thread identity number. The arguments are: command A command that will be exec'd in the new environment. locals Local variables passed to the command when exec'd. The new interpreter and thread is started in a new environment. This environment consists of a new '__main__' module, with the optional locals dict as local variables. The site-specific initializations are not automatically made. To do that, 'import site' could be used as the first statement in the command string. The interpreter() function will return after the new thread structure has been created. The command will execute sooner or later. The thread will terminate, and the interpreter structure be deallocated, when the command has been executed, and dependent threads have terminated.The type of an object with special functionality that gives access to internals of the Python interpreter and thread structures. It is used as a top level root when traversing the heap to to make sure to find some special objects that may otherwise be hidden. There are no references from the RootState object to the special objects. But the heap traversal and related functions defined for RootStateType look into the Python interpreter and thread structures. The visibility is controlled by options set in the HeapView object which is passed to the traversal function. This makes it possible to hide an interpreter and/or some frames referring to system objects that should not be traversed. (See the attributes 'is_hiding_calling_interpreter' and 'limitframe' in HeapView.) The objects found in interpreter and thread structures are related to the RootState object via attributes with special names. These names have a special form which will be described below. The name starts with either an interpreter designator or a thread designator. It is then followed by the name of a member in the corresponding interpreter or thread structure. These names are the same as the names of the members in the C structures defining them. Some of the names may be dependent on the Python interpreter version used. The attribute names are used for two purposes: o To be the name used in the result of the 'relate' operation between the RootState object and some object that is referred to via an internal Python interpreter or thread structure. o To be used as attribute names when selecting objects from the RootState object. This may be used to get at such an object knowing only its attribute name. An attribute name is of one of the following two forms. i_ t_ The interpreter number identifies a particular interpreter structure. Often there is only one interpreter used, in which case the number is 0. It is possible to use more than one interpreter. The interpreters are then numbered from 0 and up in the order they were started. [This applies as long as no interpreter is terminated while there is still a newer interpreter running. Then the newer interpreters will be renumbered. If this is found to be a problem, a solution may be devised for a newer release.] The interpreter attribute is a member with PyObject pointer type in the PyInterpreterState structure and is one of the following: modules sysdict builtins -- In Python versions from 2.3.3: codec_search_path codec_search_cache codec_error_registry The thread numbers are taken from the thread identity number assigned by Python. [ In older versions without thread identity numbers the hex address will be used.] The thread attribute is a member with PyObject pointer type in the PyThreadState structure and is one of the following: c_profileobj c_traceobj curexc_type curexc_value curexc_traceback exc_type exc_value exc_traceback dict -- In Python versions from 2.3.3: async_exc -- Special attribute: f The frame list is treated specially. The frame list is continually changed and the object that the frame member points to is not valid for long enough to be useful. Therefore frames are referred to by a special designator using the format shown above with a frame number. The frame number is the number of the frame starting from 0 but counting in the reversed order of the frame list. Thus the first started frame is 0, and in general the most recent frame has a number that is the number of frames it has before it in call order. NodeGraph([iterable [,is_mapping]]) Construct a new NodeGraph object. The arguments are: iterable An iterable object that will be used to initialize the new nodegraph. It should yield a sequence of edges of the form (source, target). is_mapping A boolean which, if True, will cause the nodegraph to be treated like a 'mapping'. It will then, for the purpose of indexing, be expected to contain a single target for each source node. A NodeGraph object contains pairs of nodes (edges) and can be indexed on the first node of the pair (the source of an edge) to find all second nodes of such pairs (the targets of those edges). NodeGraph objects are used internally in the heapy system, for example to record dict ownership and shortest-path graphs. They may be used generally for mapping and dict-like purposes, but differ in the following: o The mapping is based on object identity - no equality or hashing is assumed, so any object can be used as a key. Only the address is used. To distinguish this usage from that of ordinary dicts and sets, such objects are called 'nodes'. o There may be any number of targets associated with each source. o Performance characteristics differ from dicts, in somewhat subtle ways. NG.updated(X:iterable) -> NodeGraph Return a copy of NG updated with the edges from X, specified as pairs of the form (source, target).NG.update(X:iterable) Update NG with the edges from X, specified as pairs of the form (source, target).NG.relimg(X:iterable) -> NodeSet Return the relational image of NG wrt X. That is, the set of nodes that are the target of some edge that have its source in X.NG.inverted() -> NodeGraph Return a copy of NG with the edges inverted.NG.invert() Invert the edges of NG.NG.get_range() -> NodeSet Return the set of nodes that are the target of some edge in NG.NG.get_domain() -> NodeSet Return the set of nodes that are the source of some edge in NG.NG.domain_restricted(X:iterable) -> NodeGraph Return a new NodeGraph, containing those edges in NG that have source in X.NG.domain_covers(X:iterable) -> bool Return True if each node in X is the source of some edge in NG, False otherwise.NG.copy() -> NodeGraph Return a copy of NG.NG.clear() Remove all items from NG.NG.as_flat_list() -> list Return the edges of NG in the form [src0, tgt0, src1, tgt1 ...].NG.add_edges_n1(srcs:iterable, tgt) Add to NG, for each src in srcs, an edge from src to tgt.NG.add_edge(source, target) Add to NG, an edge from source to target.H.news(X:iterable) -> NodeSet Return the set of objects in X that is not in the set of objects of H. If H was created from the contents of the heap at a particular time, H.news(X) will return the set of objects in X that were allocated after H was created. Horizon(X:iterable) Create a new Horizon object from X. The objects in X will be used to initialize a set of objects within the Horizon object. There are no official references to these objects, but as some of these objects become deallocated, they will be removed from the set of objects within the Horizon object. The objects within the set of objects within the Horizon object can be compared to another set of objects via the news() method. This can be used to see what objects have been allocated but not deallocated since the Horizon object was created. C.select(X:iterable, kind:object, cmp:string) -> list Select objects of a particular kind. Each object in X is classified by C to get its kind and this is compared with the kind argument to determine if the object will be returned in the return list. The cmp argumt tells how the kind of the object OK is compared to the kind argument AK and can be one of < <= == != > >= . The comparison '<=' used depends on the classifier. Not all classifier may have such a comparison available. The common cases where it is available are: For the type classifier: A <= B means A is a subtype of B. For the size classifier: A <= B means that the size A is less or equal than B. For the referenced-by classifier: A <= B means that A is a subset of B. C.partition(X:iterable) -> dict Return a partition of a set of objects. Each object in X is classified by C to get its kind. The partition returned is a mapping from each different kind to a list containing the objects of that kind.C.classify(object) -> object Return the kind of an object. The object is classified by C, to get its kind which is then returned.This is the type of objects created by the hv_cli_* factory methods of HeapView objects. See HeapView.__doc__ and the factory methods for the different kinds of classifiers that are supported. HV.update_referrers_completely(X:nodegraph) Update referrer graph X 'completely'. [Experimental algorithm that updates X with the referrers to all objects in the heap (of visible nodes as defined in HV). It is not normally used.]HV.update_referrers(X:NodeGraph, Y:NodeSet) Update referrer graph X for Y. The visible heap defined by HV will be traversed from the root of HV so that the edges of every path from the root to nodes in Y will be represented, inverted, in X.HV.update_dictowners(owners:NodeGraph) Update owners with ownership edges. The dict owners graph will be updated with an edge from each dict object in the heap, to either its owner or to None.HV.limitframe : frame | None The traversal limiting frame. If limitframe is set to a frame object, the frames that are more recently entered than limitframe will be hidden when traversing the heap from the root RootState. It will start traversing from limitframe rather than from the most recent frame as it would otherwise do.HV.shpathstep(G:NodeGraph, U:NodeSet, S:NodeSet [,AvoidEdges:NodeGraph [,find_one:bool]]) -> NodeSet This method implements one step of a shortest path algorithm. The arguments are: G Updated by the method, with the edges from nodes in the source set to the new nodes visited. U The source set for this step. S The set of already visited nodes. AvoidEdges Edges to avoid. find_one If True, at most one edge will be found from each node in the source set. Normally, all edges will be found. Return value: The new nodes visited. This may be used for the U argument the next time the method is called. See also: shpgraph_algorithm in Path.py.HV.relimg(S:iterable) -> NodeSet Return the 'relational image of HV wrt S'. That is, the set of nodes that are directly referred to from the nodes in S via the visible heap reachability relation as defined by HV.HV.relate(src, tgt) -> relation structure Return a description of the relation between src and tgt. This is used for descriptions of edges in paths. [The result is in a special format that I choose to not define here since it is for special low-level use and subject to change.]HV.register_hidden_exact_type(type) Register a type of objects that should be hidden from the heap view defined by HV. Objects of the exact type registered -- not including subtypes -- will be hidden. See also: register__hiding_tag__type.HV.register__hiding_tag__type(type) Register a type of objects that may be hidden from the heap view defined by HV. The type must have a slot named _hiding_tag_. An object that is an instance of the type, or of a subtype, is hidden when its _hiding_tag_ is HV._hiding_tag_.HV.reachable_x(X:NodeSet, Y:NodeSet) -> NodeSet Return the set of objects reached via a path in the visible heap as defined by HV, from some object in X, avoiding any object in Y except at the end of the path.HV.reachable(X:NodeSet, Y:NodeSet) -> NodeSet Return the set of objects reached via a path in the visible heap as defined by HV, from some object in X, avoiding any object in Y.HV.numedges(src, tgt) -> int Return the number of edges from src to tgt.HV.indisize_sum(S:iterable) -> int Return the sum of the 'individual size' of the objects in S. See also HeapView.__doc.HV.heap() -> NodeSet Return a set containing all 'visible objects' in the heap view defined by HV. See also HeapView.__doc__.HV.cli_type() -> ObjectClassifier Return a classifier that classifies by type. The classification of each object is the type, as given by its C-level member 'ob_type'. (This is the same as the type returned by the Python-level builtin 'type'.)HV.cli_class() -> ObjectClassifier Return a classifier that classifies by "class". If an object is of instance type, its classification will be its class, as given in its C-level member 'in_class', otherwise it will be its type, as given in 'ob_type'. [This is like classifying by the Python-level '__class__' attribute in newer versions of Python, except that even though the '__class__' attribute may be redefined via the class definition, the classification as made by cli_class isn't affected.]HV.cli_none() -> ObjectClassifier Return a classifier that classifies all objects the same. The classification of each object is None. HV.cli_inrel(referrers, memo) -> ObjectClassifier Return a classifier that classifes by "incoming relations". The classification of an object is the set of incoming relations. referrers A NodeGraph object used to map each object to its referrers. memo A dict object used to memoize the classification sets. HV.cli_findex(tuple, memo) -> ObjectClassifier HV.cli_indisize(memo) -> ObjectClassifier Return a classifier that classifies by "individual size". The classification of each object is an int, containing the object's individual memory size. The argument is: memo A dict used to memoize the classification objects.HV.cli_rcs(referrers, classifier, memo) -> ObjectClassifier Return a classifier that classifies by "Referrer Classification Set". The classification of an object is the classifications of its referrers, collected in an immutable NodeSet object. Arguments: referrers A NodeGraph object used to map each object to its referrers. classifier A ObjectClassifier object used to classify each referrer. memo A dict object used to memoize the classification sets. HV.cli_id() -> ObjectClassifier Return a classifier that classifies by set of identity. The classification of an object is a singleton immnodeset containing the object itself.HV.cli_id() -> ObjectClassifier Return a classifier that classifies by identity. The classification of an object is the object itself.HV.cli_dictof(owners, ownerclassifier, notdictkind, notownedkind) -> ObjectClassifier Return a classifier, that classifies by "Dict Owner". The classification of an object is the notdictkind, unless the object is a dict object. If the dict is 'owned' by some owner, the classification will be the class (as by the ownerclass argument ) of its owner. If it is not owned, the returned kind will be notowned argument. Arguments: owners A NodeGraph object used to map each dict object to its owner, or to None if it has no owner. The graph will be automatically updated, from heap information defined by HV, whenever an attempt is made to classify a dict that maps to nothing. ownerclassifier notdictkind notownedkind Tuple with comparison based on addresses on the elements. HV.cli_and(classifiers, memo) -> ObjectClassifier Return a classifier that combines the classifications of other classifiers. The classification returned from the returned classifier is a tuple containing the classifications from the classifiers in the classifiers argument. HV.delete_extra_type(weakref) Delete extra type information. For internal use as a weak-ref callback.HeapView(root, heapdefs:tuple) Create a new HeapView object with arguments: root The initial value of the root member. heapdefs Definitions of specially treated extension types. A HeapView object provides methods to get memory related information about the system heap and about individual objects. It implements much of the low-level functionality for the Heapy system. It is intended to provide what can not be done at all or would be much slower if programmed directly in Python. It is not intended to be used directly by a user, but to be wrapped in higher level objects. Some terms that are referred to in the method descriptions: Visible objects. The HeapView object attempts to restrict its view of the heap to only the 'visible objects'. This is to make it possible to analyse the heap via a Python library that inevitably itself is continually allocating and deallocating objects. These should be hidden from the heap view presented. This is primarily done via a special tag attribute, see '_hiding_tag_' and 'register__hiding_tag__type'. Frames can be hidden with another mechanism, see 'limitframe'. For hiding all objects of a special type, 'register_hidden_exact_type' may be used. It is also possible to use a separate interpreter and hide its root objects, see 'is_hiding_calling_interpreter'. Classifiers. The methods named cli_* are factory methods that create objects of type ObjectClassifier. The principal difference between classifiers is how a single object is classified. The single-object classification function is available in classifier objects; it is the classify method. There are also methods that operate on collections of objects, namely partition and select. These eliminate the per-object Python-level function call overhead that would occur if the classify method were to be called from Python for each object in a collection. See also the ObjectClassifier type. Individual size. The individual size of an object is its individually allocated memory size. It includes: o The basic object size, as can be found out in a standard way. o The extra memory for variable size objects. o For GC collected objects, the size of the GC information. o An alignment to the next highest multiple of a pointer size. o The size of any other memory allocated that belongs to the object. Some types of objects have extra memory allocated that can not be accounted for in the standard way. This memory should nevertheless be included in the individual size. To determine the size of these objects, special functions are needed. These are defined for standard builtin types, such as lists and dicts. Other types should be defined via the heapdefs argument to the HeapView constructor. The individual size does not include: o Subobjects that are accounted for separately. o Overhead for the memory allocation system. This varies depending on the kind of memory allocator, the requested size, etc. This module contains low level functionality for the heapy system. It is intended to be wrapped in higher level library classes. Summary of module content. Classes HeapView Gives a parameterized view of the heap. Horizon Limits the view back to some moment in time. NodeGraph Graph of nodes (address-treated objects). ObjectClassifier Classifies objects on various criteria. RootStateType Root of heap traversal using Python internals. Functions interpreter Start a new interpreter. set_async_exc Raise an exception in another thread. xmemstats Print system-dependent memory statistics. Object RootState The single instance of RootStateType. +!n!-!5!>!I!R!\!e!s!y!s!y!K#K#!!!!!!!e!!`@e!!Њd!_%?8T@_HkPxX%`%h+%p%x!$ 08!@ `>! (! )e"!j"\!Po! !o"!!"n @! X" 8  8!"(0"`nq0"8p0"l#@nPn0"#vv0##Pwn!-!0 `ww0"w`w0##p@w0"pw0"mm0. #pm0>   lPl@lk! !!!!`!! !!!!`!"`!"Й!""P !," !3"!<"p~!C" @~!J"}!R" pA`ou>  !"!. p! !" !"`! !`!"!@!"!"pI!Zt@!"P! #p@!`!:!#!#!5#!!<"й!*!I `!I`!P#`!0ppp#0mE!m# xA!mn@!!`t|p#00!E@x!o`!`!!@$ @y!3$PE!@`!!@!в sAno!@! pP`ppheapyc.so.debugЊ7zXZִF!t/0O ]?Eh=ڊ2NӮcS~t&4Ⱥ0eslv #J&dx}R' !]VIb a w/XS } ݏnVv xVlI7}&j$^B{sB e}]+Du I)A/>:CktQY-R>r`쨹Pr|xrWǸ9+ț*=Y{#uwC?6͌6 C^_)F}0BZԢgS/ꜘܠ6Xؼ #x?N̂0ė2¨$cyPQ}5Jop+*p1f|8Tr*x(^٤P_P/CLx&跣O:"\KKo[a K!y- e@F,oq4E6&OO{i%bc۩SZ᷽lg6Rޛ162OI%c0%PuL'0rRYnʏiT54һժ0w}(;jו+hZZV>qǟM-!ˤO&$raϡyi*DuI|e{e#2x-cΛ ̸oI6Tt0wXM,-jp'CAOA}3JXU.65.Ĕ L\vsv EnC}<YXB{^ 9M5>)Q#gfx G0e`Q4W'",|rG BϝH.Q&ϯ:a/ZJ.Ϋ4!+zO+GTCBˉLG}!@tMBin-NSI=᝾<jO!rT4 )~7so= M}065k8>卷鏪kHmq򿐏.`zMOtBڶRGB~aIuZmMgKK݂,ۗm1vb,6!E\i)PJb !/OHq2nng1L~Ȓ@ P Y9NnŦ=! #h{g`ܒGIaUd1zh0յ|~~j g;W ot73Y)WD_ݝK.~TQxg'ƣ_J:³%Gѐ^h.DyA),}.= Hf^̈́Q;'y2 ~jn9- 9,_/0JQyaWG'Nd5 6( 5#ʒW^<⑍hzEZ ::L9cvukO-5䒧32b2[gLqZ…ۧDRQ$趾̮,#W:d('Ӂ{yTI+="?,SiEDiVf0:M~0(lܖiIX!PO04acO}n?T!Bێ%:E֕E*&58Hq( 86ZV*NXKD-.V,U13Gmo@ker\H)1 aq}43r^urm0 ||kp_,I%w0?^Mg&FTs z6T$7w6@~LG} ΤޢCV~\I)Y/6[<,?ڬ"Д2H!0a1S%63i~zl,Bؐ`:8UN!Z6%ͰN v >o*9':"»PQs}1. /9t~P5P ʰkN (Ò2@HٶR㣖JK&+"m.}S E=K$r}aCFb&y4a '&y.0SOQ|q[iPv]euP6?'`!F'ݞK)) '/@ՌYa$rk{=8,d1R"N{iq_rgLu?l/IBV6vre.ܯYTBz'p@27Ч[3gxWHPPٰGXeM:*GބuhQER)^kV^@ ]qu}羓zўiڲ".G; ^]q-HY,G[R &L9 v>=>9O9 D4?nVލvrՙeήl$h=>M ωb!>~ڢ`b-a|f%n*QEn5w͟a's ʞ&r> I.ע0ihN,*8NGGWʔPxd 5J jĹg ^<-12)&&,