ELF>@+@8 @POPOPPPPPPtthh)h)xx)x) $$Std Ptd888QtdRtdhh)h)GNUGNU RɓW4Og6 ('  @UDJ@(0C   a@HF& H4 ($ DP)@.$3`ST Ri"\xzӰU 2|r [񫮦): )KL baַaD0qcxKzow'!`m28{4KVE*tk [ϟGZcbBD,CE`qJ;[Ma|:{["=JYu DZOI1#}+wdE7Q>{f*i8Є {eY/! [^nq|Zmfg,1y_M7ȤASnG#3wi8ʬaO ęU?$-!D]^::4Y9<6 p,wXU^ ^ 66&.x98p2+ 3[  b3x/ <l C 0+/  _p-=F zS:8  ]? 0  O) @*9 z ~: yPt }6 5 : @)a6&Ff# B: 09Y 0 `0:6y (zA  {Hpu ` f`  l XE e }< @13 `Wu:?0-=</Ep4h(:  9 @ J: ?pe #L  @v;0F`s e M  : `Epn :  ::'B<g0 9-Z`d:lk+-+ A  \ w@5__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizedo_curl_traverse_Py_Dealloccurl_easy_setoptg_pycurl_useragent__assert_failPyExc_TypeErrorPyErr_SetStringdo_curl_newempty_keywords_PyArg_ParseTupleAndKeywords_SizeTp_Curl_Typecurl_easy_initErrorObject_Py_BuildValue_SizeTkhkey_typePyObject_Call_Py_NoneStructPyMem_FreePyList_NewPyTuple_NewPyList_SetItemstrchrPyUnicode_FromStringPyBytes_FromStringdo_global_init_PyArg_ParseTuple_SizeTcurl_global_initPyExc_ValueError__stack_chk_faildo_global_cleanupcurl_global_cleanupdo_version_infocurl_version_infoPyLong_FromLongPyDict_GetItemPyDict_SetItemstderr__fprintf_chkutil_curl_xdecrefcurl_multi_remove_handlePyEval_SaveThreadcurl_easy_cleanupPyEval_RestoreThreadPyObject_ClearWeakRefscurl_formfreecurl_slist_free_alldo_curl_deallocPyObject_GC_UnTrackPyThreadState_Get_PyTrash_begin_PyTrash_endcurl_easy_resetPyInit_pycurlcurl_global_sslset__snprintf_chkPyExc_ImportErrorPyErr_Formatcurlobject_constantscurlmultiobject_constantscurlshareobject_constantsbytesiostringiocurl_sockaddr_typePyErr_Occurredp_CurlMulti_Typep_CurlShare_TypePyType_TypePyType_ReadyPyModule_Create2PyModule_GetDictPyErr_NewExceptionPyDict_SetItemStringPyDict_Newcurl_versionstrlenPyMem_MallocmemcpyPyImport_ImportModulePyObject_GetAttrStringassert_curl_statecheck_curl_statedo_curl_errstrdo_curl_errstr_rawdo_curl_pausecurl_easy_pausePyErr_SetObjectdo_curl_cleardo_curl_getattroPyObject_GenericGetAttrPyExc_AttributeErrorPyErr_ExceptionMatchesPyErr_Clearcurlobject_methodsdo_curl_setattroPyErr_PrintPyLong_AsLongwrite_callbackheader_callbackopensocket_callbackinet_ntopPyObject_HasAttrString_PyObject_CallMethod_SizeTdupPyErr_SetFromErrnoPyErr_NoMemoryseek_callbackread_callbackPyBytes_AsStringAndSizePyUnicode_AsEncodedStringprogress_callbackPyObject_IsTruexferinfo_callbackdebug_callbackioctl_callbacksockopt_cbPyObject_Reprclosesocket_callbackssh_key_cbdo_curl_getinfo_rawcurl_easy_getinfoPyList_AppendPyFloat_FromDoubledo_curl_getinfoPyList_SizePyUnicode_FromEncodedObjectdo_curl_unsetoptdo_curl_performcurl_easy_performdo_curl_setopt_stringdo_curl_setoptcurl_slist_appendPyLong_AsLongLongPyFunction_TypePyCFunction_TypePyType_IsSubtypecurl_formaddPyCallable_CheckPyMethod_Typedo_curl_setopt_filelikedo_curl_perform_rbdo_curl_perform_rspycurl_version_info_docpycurl_global_cleanup_docpycurl_global_init_docshare_setopt_docshare_close_docmulti_select_docmulti_remove_handle_docmulti_assign_docmulti_timeout_docmulti_setopt_docmulti_socket_all_docmulti_socket_action_docmulti_perform_docmulti_info_read_docmulti_fdset_docmulti_close_docmulti_add_handle_docpycurl_module_doccurlshareobject_methodsshare_doccurlmultiobject_methodsmulti_doccurl_reset_doccurl_unsetopt_doccurl_setopt_string_doccurl_setopt_doccurl_perform_rs_doccurl_perform_rb_doccurl_perform_doccurl_pause_doccurl_getinfo_raw_doccurl_getinfo_doccurl_errstr_raw_doccurl_errstr_doccurl_close_doccurl_docPyType_GenericAllocPyObject_GC_Deldo_multi_traversedo_share_traversedo_multi_newcurl_multi_initdo_multi_cleardo_share_clearcurl_multi_cleanupdo_multi_dealloccurl_multi_timeoutcurl_multi_assigncurl_multi_socket_actioncurl_multi_socket_allcurl_multi_performcurl_multi_fdset__fdelt_chkcurl_multi_info_readPyUnicode_DecodeLocaleselectPyExc_OverflowErrorcurl_share_setoptcurl_share_cleanupmy_getattrodo_multi_getattrodo_share_getattromy_setattroPyDict_DelItemPyExc_KeyErrordo_multi_setattrodo_share_setattroPyListOrTuple_CheckPyListOrTuple_SizePyTuple_SizePyListOrTuple_GetItemPyTuple_GetItemPyList_GetItemPyText_AsStringAndSizePyText_AsString_NoNULPyText_Checkcurl_multi_setoptmemsetPyText_FromString_Ignorepycurl_get_thread_statepycurl_get_thread_state_multipycurl_acquire_threadPyEval_AcquireThreadpycurl_acquire_thread_multipycurl_release_threadPyEval_ReleaseThreadshare_lock_lockPyThread_acquire_lockshare_lock_callbackshare_lock_unlockPyThread_release_lockshare_unlock_callbackshare_lock_newPyThread_allocate_lockPyThread_free_lockdo_share_newcurl_share_initshare_lock_destroydo_share_dealloccreate_and_set_error_object_Py_TrueStructcurl_multi_add_handlecurl_set_ca_certs_doclibcurl-gnutls.so.4libc.so.6CURL_GNUTLS_3GLIBC_2.14GLIBC_2.15GLIBC_2.4GLIBC_2.3.4GLIBC_2.2.5 #= (ii 3ti =ui Ih)p^p)0^00 0P(0e@0xH0f`0Ph0f0v0(0x0p&0x01x1@1pH1 >`1vh11x1110 1x1 11P2x2 2x(20/@2xH2p`2h2p22@2W2#2x202x2`H3x`3 03c3x3<04@*84p,X4`449X5yp55@)5+5`6x66v6@7v7 7y(7@7wH7`7wh7p7v77x77$y707/y78x8p 8:y(8@8 xH80`8Hyh8v8x8a8x8a8Ny9pup9x99^90: b..(6..////4 /(/0/8/@/H/9P/X/`/h/3p/6x/;/>/L/[//\//d//g///t/x/|//80X0x000X1x11111282X2x222P3P44Pp6P:P46 :56787X7x77777888X8x89+++++++ + + + + +++++,,,, ,(,0,8,@,H,P, X,!`,"h,#p,$x,%,&,',(,),*,+,,,-,.,/,0,1,2,4,5,7-8-9-:-< -=(-?0-@8-A@-BH-CP-DX-E`-Fh-Gp-Hx-I-J-K-M-N-O-Q-R-S-T-U-V-W-X-Y-Z-].^._.`.a .b(.c0.e8.f@.hH.iP.jX.k`.lh.mp.nx.o.p.q.r.s.u.v.w.y.z.{.}.~HHaHtH5J%Khhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1%D%uD%mD%eD%]D%UD%MD%ED%=D%5D%-D%%D%D%D% D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%}D%uD%mD%eD%]D%UD%MD%ED%=D%5D%-D%%D%D%D% D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%}D%uD%mD%eD%]D%UD%MD%ED%=D%5D%-D%%D%D%D% D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%D%}D%uD%mD%eD%]D%UD%MD%ED%=D%5D%-D%%D%DH=HH9tH&Ht H=H5zH)HH?HHHtHHtfD==u+UH=Ht H=d]wATIUHSHHHt HՅH{0Ht LՅH{8Ht LՅHHt LՅHHt LՅkHHt LՅRHHt LՅ9HHt LՅ HHt LՅHHt LՅHHt LՅHHt LՅHHt LՅHHt LՅHHt LՅuuHHt LՅu`HHt LՅuKHHt LՅu6HHt LՅu!H 1Ht[LH]A\[]A\ff.ff.@ff.@H/t fff.UH1'SH(HHH ]H01HDž(HHw'HDž!H)HH} u^H} +uGH} 1Ҿ)u3HHHt+H} 1"'H[]fH NH5VH=Zf.HHiH5H81Hff.HH9H5H8b1Hff.ATH +H1HH_H1HH0IHtgH@I$0H9sfuZHH9uID$ HtLxLA\I,$tH"H5cH8E1LA\LH ikH5 H=$HUHHWOH7HuCH=!1HHtAH$1HH8GHmt0H]f.H=1HHuH1]fHHD$CHD$H]HH@SH4H;H[AWAVAUATUSH(H|$Hc?#HD$H"HD$D$L57HD$Hc\$H@L$M.L1H@HuHcIHH|$HL1^g@:LHHHLD)tZH=1dHtVIWMd$HcӃIDMM,$MuHH1LHuHt$HHD$HHt{HD$HD$H([]A\A]A^A_fDLt[J1HtH|$HHRfHL$D$D$;H0xH DlH5H=ff.HHH5dH%(HD$1HT$t@Hc|$u;uRHkHHT$dH+%(uQHf.1@HH5/H81fDHqH5-H81fHcHHHAUHH5ATUSHdH%(HD$1HT$D$ &g|$EIHH@@1H8tDHH<uHH%ID$@H8Ht`f.< ufGH< t< tHHUqHDID$@H<HHu @IHA<$HuIUI|$IEH< t< u@GH< t< tH%IU IE A|$3HIUI|$IE(HG< t< u@GH< t< tHIUuIE0Ic|$ HIU.I|$(IE8HufDH< t< t4H>IUfIE@I|$0LHIUI|$8IEHHuoH< t< tHIUI|$HIEPImXHD< t< uGH< t< ttH~IUIE`Ic|$PHtZIUI|$XIEhHu H< t< t HtIU IEpMImuL~Hmt%E1HD$dH+%(HL[]A\A]HJHHHAH5)H8HHHHHH6HHHH:H H5H=H zH5H=rH [H5H=SH <H5zH=4H H5[H=zH H5<H=[H ߂H5H=<H H5H=cH H5H=H }H5H=uH ^H5H=VH ?H5}H=7HAVH AUATUSIHHHIIHHHt&HHHLHH|uXMt+L9t&HLHLHLLu(HmtYI,$At4[D]A\A]A^HmtIA[]DA\A]A^Lh[D]A\A]A^@HAJI,$uѐH8HWLHsH81FH πH5H=RH H5H= AVIAUIATIHUHTHt?HLLLHKx1H]A\A]A^HmuHzf.fAUIATUSHHt%HHtHCH/2f.@t3Lc0Mt*I|$ HC0Ht MtLI,$@HHtHǃH/DHHtHǃH/3HHtHǃH/"HHtHǃH/HHtHǃH/@HHtHǃH//HHtHǃH/HHtHǃH/ HHtHǃH/HHtHǃH/HHtHǃH/HHtHǃH/@tjHHtHǃH/HHtHǃH/HHtHǃH/@@t*HHtHǃH/f@t6Lc8Mt-I|$ HC8tMt1Ҿt'L1I,$t\@ tH{HHtHCHH/kt!H HtHǃ H/OH[]A\A]@LfDLfDfDfDfDfD fDfD.fDsfDcfDSfDCfD3fD#fD.fDNfDfDfDH[]A\A]fATUSHHHHH9GHo HG HoHG(HHHHIBL1ҾHH{tHH{@Ht HC@H{PHt XHCPH{XHt BHCXH{`Ht ,HC`H{hHt HChH{pHt HCpH{xHt HCxHHtHǃHHtHǃHHtHǃHHt}Hǃ[]A\DH(uoH0H8tH hzH5H=H IzH5H=BH *zH5H=H zH5H=!cH yH5H=D@ATUHH-HHIJuFH}HtHEH/t?HWHعH@MtHL]A\H]A\fUHH ?HU HNH}@Ht PHE@H}PHt HEPH}XHt HEXH}`Ht HE`H}hHt HEhH}pHt HEpH}xHt lHExHHtSHDžHHt7HDžHHtHDžHHtHDžHxHIH]Hmt!HH5NH8 1]HXfDAWAVAUATUSH8H-dH%(H$(1HD$XHXL5CIWL=&IW FIHxPL-HT$XL\HT$X11Ld$`L=oL5HHtaHwBMMOHp1H)I<,HL0Y^HHT$XHŃHcHHuLLH5HڶE1E1H81E1E1HH-&HǶHD$8HHD$0H׶HD$(HHD$ HHD$H#HD$H_HD$H}Ht H/H;Ht H/HD$0H8Ht H/HD$8H8Ht H/OMt I*(Mt I) Mt I,$HD$ H8Ht H/HD$H8Ht H/Mt Im{HD$H8Ht H/THD$H8Ht H/-HD$(H8H3IHE1H$(dH+%(rUH8L[]A\A]A^A_H9HH(HL0HL8HȴHEIFIGOLLwOH=#IHHIHT11H=^HHHD$8HH*H5L>H-IHEHMkH<IHHPH IHL$0HHcHIxHIHHE1E1E1E1HD$(H"@HPH H5nfHH-HHD$8HHD$0HHD$(E1E1E1E1DcfDSfDL@x3[fD#4fDL LLLL$0LL$0LL$8LT$0LL$8LT$0fLL$@LT$0LL$@LT$0\fLL$HLT$@LL$HLT$@%fLL$HLT$@qLT$@LL$HfH9H5FH8DHH5E1H8E1E18@H!H-ZHHD$8HHD$0H HD$(cD$`noneLd$`D$dHҰH- HHD$8HȰHD$0HHD$(fHH-ҰHsHD$8HHD$0HHD$(HrH-H<HD$0HXHD$(HGH-pHHD$0H-HD$(HE1E1E1HHD$0HHD$(HHD$ H HD$HLHD$HHD$7HE1E1E1H}HD$0HHD$(HbHD$ HƯHD$HHD$H.HD$HH\HD$(H FHL$(HHHPycURL/71@.44.H0H LfP LA HyHL$MHL$BD!HL$(H9%IH;1HHLU1O 3IH 1LHL#NQIH1HHLNH21HLHH1HELHuHl1HLHRHuHL2HuHLHuHLHu1HLHuHLkHuHLKHu1HL.xHuHLXHuHHL9Hu1H~LHuHlLHuH_LHuHSLrHuHDLRHuH6L2|HuH+L\Hu1HInL?HuQHLHuHLHu,HLHu.HLuHu$HLUHuHL5HuHL_Hu HL?HuHLHu-HLHuHLHuHLuHu!HoLUHu H]L5HuFHTL_HuIHGL?HuH<LHuH,LHu@H!LHuHLuHuH LUHuHL5HuHL_HuHL?HuHLHuHLHuHLHu HLuHu HLUHu HL5Hu HL_Hu HL?HuH}LHuHtLHuHhLHuH]LuHuHVLUHuHEL5HuH=L_HuH/L?HuH!LHuHLHuHLHuHLuHuHLUHuHL5HuHL_HuHL?HuHLHuHLHu HLHu!HLuHu"HLUHu<HL5HuMHoL_Hu:HdL?Hu;HVLHu#HCLHuRH7LHuBH)LuHu5H!LUHu6HL5Hu[HL_HuSHL?Hu<HLHuZHLHuPHLHu$HLuHu%HLUHu&HL5Hu'HL_Hu(HL?Hu)HLHu*HLHu+HLHu-HLuHu/HLUHu0HwL5Hu0HhL_Hu1H`L?Hu4HWLHu7HELHu8H2LHu9HLuHu=HLUHu>HL5Hu?HL_Hu@HL?HuAHLHuCHLHu<HLHuDHLuHuEHLUHuFHL5HuGHL_HuHHuL?HuIHfLHuJHTLHuKHFLHuLH4LuHuNH LUHuOHL5HuTHL_HuUHL?HuVHLHuXHLHuWHLHu HLuHuYHLUHuHL5Hu1HLbHuHLBHuHvL"HuHgLHuHYLHuHJLxHuHHBLVHuHH-L4~HuHL^HuH L>HuHLHuHLHuHLHuHLtHu HLTHu1HL7HuHLaHuHLAHu1HL$HuHLHuHLHu1H{L}HuHgL]HuHRL=HuHALgHu1H/LJHuHL*HuH L Hu HLHu HLHuHL`Hu HL@HuHL jHuHLJHu1HL-HuH~L HuHqLHuHaLHu2HLcHu`H5LCHu0H#L#mHu'HLMHu!'HL-Hu'HL HuuHLHu*'H LHuHLcHuHyLCHuHL#mHu'H.LMHu'HwL-Hu'HL Hu'HLHu'HLHu'HOLcHu,NHLCHu 'HuL#mHuuH~LMHuV'HjL-Hu H&L Hu'HLHuwHLHu"'HLcHu'HLCHu+NHL#mHuHLMHuHL-HuHL Hu'HLHu'HLHu'H{LcHu'HLCHu'HmL#mHu'H.LMHu'HL-Hu;HL Hu=HLHu)HLHu*HLcHu+HLCHu,HL#mHu-HuLMHu.HL-Hu/HL Hu0H!LHu2H LHu3HLcHu4HLCHu5HL#mHu6HLMHuuHL-Hu&'HL Hu''HkLHu'HVLHuHBLcHuH,LCHuHL#mHu('HLMHu)'HL-Hu*'HL HuHLHu,'HLHu7'H|LcHum'HfLCHu-'HOL#mHuoNH;LMHuNH*L-Hu/'HL Hu HLHu!HLHu"HLcHu4'HLCHu5'HL#mHuN'HLMHuO'HL-HuO'HnL HuXNHWLHuNHHLHuH9LcHu'H&LCHuHL#mHu'HLMHu@HL-Huq'HdL HuQ'HQLHuEHLHuDHxLcHuGHLCHu HBL#mHuJH.LMHuKHL-Hu\'H L Hu]'HLHuNH߿LHuPHοLcHuQH[LCHub'HL#mHuc'HLMHuTH;L-HuUHPL Huf'HvLHug'HhLHuh'HULcHu*'HݾLCHui'HʾL#mHuZHLMHu\HL-Hu[HL Hu~NHLHubHLHuH[LcHucHMLCHut'H7L#mHueHLMHuv'HL-Huv'HL HuHнLHux'H½LHuiHLcHujHLCHukHL#mHunHyLMHuoHqL-HupH[L HuqHPLHuuH:LHuuH&LcHuuHLCHuuH L#mHu'HLMHuwHL-HuuHμL HuyH¼LHuHLHuNHLcHuNHLCHuNHzL#mHuNHnLMHu'H^L-HuHJL Hu'HLHu'H LHuHLcHuHLCHuHL#mHuHܻLMHuHƻL-Hu'HL HuuHLHuuHLHuHLcHuHLCHuH|L#mHu'HkLMHu'H^L-Hu'HRL HuNHALHuH1LHuH$LcHuHLCHuHL#mHuHLMHuHֺL-HuHĺL HuHLHuHLHuHLcHuHLCHuH{L#mHuHoLMHuHWL-Hu'HQL Hu'H+LHu(HLHu(H LcHu(HLCHu(HL#mHu(HйLMHu(H¹L-Hu(HL HuHLHuHLHu'HLcHu'HyLCHu:HqL#mHu'H]LMHu'HEL-HuH0L Hu'HRLHuHLHuHLcHu'HոLCHuHøL#mHuHLMHuHL-HuHxLÿ HuHdL裿HuHNL胿HuH9LcHu H#LCHu@HL#mHuHLMHuHL-HuHҷLþ HuHL裾HuHL胾HuHLcHu H~LCHu@HjL#mHuHULMHuHAL-HuH,Lý HuHL製HuHL能HuHLcHu HڶLCHu@HƶL#mHuHLMHuHL-HuHLü HuHyL裼HuHcL胼HuHHOLdHuH9LDHu'H&L$nHuHLNHu'HL.Hu'HLĻHu'HL褻Hu'H̵L脻HuHLdHu'HLDHuHL$nHuHLNHuHzL.HuHiLĺHuHUL褺HuHHL脺Hu'H9LdHu'H&LDHu'HL$nHu'HLNHu'(HL.H3$NHLŹH3!NHӴL覹H3HŴL臹H3HLhH3HLIH3 HL*tH3HL UH39uHL6H3:uHL͸H3'HL许H3'H|L菸H3HtLpH31HqLTH3H_L5H3HKL`Hu1H=LCHuH0Lٷ#HuHL蹷Hu1H L蜷HuHL|HuHL\HuHL<HuHLfHuHڳLFHuHLܶ&HuHL輶HuHL蜶HuHL|Hu1HL_HuHuL?Hu1HgL"lHuHZLLHuHKL,HuH<Lµ HuH-L袵HuH L肵HuHLbHuHLBHuHL"lHuHLLHuHL,HuH޲L´ HuHղL袴HuH̲L肴Hu1HLeHuHLEHuHL%oHuHLOHuHHL0Hu1HLɳHuH{L詳HuHnL艳HuH`LiHuHNLIHuHHAL*tHuH2L THu1H$L7HuHLͲHuHL譲HuHL荲Hu1HLpHu1HܱLSHuH˱L3}HuHL]HuHL=Hu1HLֱ HuH{L趱HuHlL薱Hu1H_LyÿHuHWLYHuHCL9HuH1LcHuHLCHu1HLܰ&Hu1HL述 HuHL蟰HuHڰLɾHuHɰL_HuHL?Hu HLiHu HLIHu0HzL߯)Hu0HeL迯 Hu0HXL蟯Hu!0H5LɽHu0H%L_Hu0HL?Hu0HLiHu 0HLIHu 0H߯L߮)Hu H̯L迮 Hu HL蟮Hu HLɼHu HL_Hu0HL?Hu0H|LiHu0HrLIHuHeL߭)Hu0HRL迭 Hu H@L蟭HuH/LɻHu HL_Hu( HL?Hu)HLiHu* HݮLIHu HȮL߬)Hu HL迬 Hu HL蟬Hu HLɺHu HL_Hu@HnL?Hu@HZLiHu HJLIHuH5L߫)Hu"@H$L迫 Hu# HL蟫Hu% HLɹHu' HL_Hu& HL?Hu$HLiHu1HڭLLHuHǭL,HuHLª HuHL袪HuHL肪̸HuHLbHuHtLBHuHbL"lHuHSLLHu HIL,Hu H?L© Hu H.L袩Hu HL肩̷HuH LbHuHLBHuHL"lHu1HάLOHu1HL2HuHLȨHuHL訨Hu'HL舨ҶHuHtLhHuHcLHHuHRL(rHuHALRHu(H0L2Hu. HLȧ1HL誧1HL茧ֵ1HLn11H۫LS1H̫L51HLa1HLC1HLۦ%1HL车H1HzL蠦11HnL腦ϴ1HZLg1HDLI1H/L+u1HL W1H L91HLѥ1HL賥1HL蕥߳1HϪLw1HLY1 HL;1@HLg1 HLI1HL+1H|Lä 1HmL襤1HaL臤Ѳ1HOLi1H>LK1H/L-w1@HLY1HL;1HLӣ1HL赣1HL藣1 H۩Lyñ1@H֩L[1HϩL=1HũLi1HLK1HL-1HLŢ1HL觢1 HL艢ӰH3HHLkH3HH{LMH31HzL1{H3HfL\H3HZL=H3HSLԡH3HHHL趡H3HCL藡H3H:Lx¯H3H2LYH3H*L:Ll$0HLIu_IuHL?IuHLՠIuHL赠IuHΨL蕠߮IuHĨLuH=IHH5HIHaHD$ LMwH5L̉IH:aHD$LM*H=g襌IHH5[HHD$腉LT$HIHD$H<1H5?H=>賎LT$LL$HI1LHLT$@LL$LL$LT$@H `HHL$HlLLL$@LT$HD$H5ƧLHk1HH5ҧH=LT$LL$@HI1LHLT$HLL$@rLL$@LT$HH y`HHL$HLXHL$H5cLHI,$LE1E1SE1E1閩H ]H5OH= H \H50H=GH [H5H=ˈvH H5H=Ӂ览E1HM_HD$H_HD$%H0_E1E1HD$Hf_HD$E1E1ӨfHHtH\_HH9Gu(HZdH  H5gH= H H5HH=ff.ATIUHS{tH} t>u 1[]A\HcHtLH5iH]H81踋LH5DUHHwA1EuH襡H^H]SHVH7uƃ(H([1[@SHHuƃ(H([1[@AUATUSHHH5ҤHdH%(HD$1HT$ۈHHukLc(‡HC(HH{ t$I@LLc(uH\H#HnH=|1YHHu!1HT$dH+%(u1H[]A\A]HH[H8HmuHτXH gH5֣H=艅fUHaHuHU H1]H 7H5|H=G:f.AUIATUH|IHt L]A\A]H\H8ytHULHHO[Lp[]A\HA]Tff.ATIUHSHZH{L[H]A\WAWE1AVIAUALATIUHSLH(dH%(HD$1Ht$#bteLELDMtDHtsMtnAEExMc1LHL9tbH;ZH54E1H8蹃TH|$bHD$dH+%(H(L[]A\A]A^A_@H|$E1aǐDLH=$1LD$IHtoH|$1H`I,$HtFHtQH;-BZtHELAtDHIuAI,$H|$qQHD$dH+%(H D]A\A]vAHHtHt$HHHHH2JH810wH|$HtH/tXHmtAI,$AmLq`HqM(AA@HqfDqrA rff.AWLAAVIAUATMUHH dH%(HD$1Ht$OH^|HkLIJ|IHHDL1H=̐7vHH<I$1HuHmItID$LsAImtKI.tuDMtI,$tTH|$OHD$dH+%(H D]A\A]A^A_DLXpI.u HHptL8pfDL(pfDtAHHWHt$HFHHHHH81 uH|$HtH/t:Hmt)AApE1AHoopImALmoAUATUHHH5 SH(dH%(HD$1HT$ krHHit$ !00)3{H1FH5E1H8_of.,wH zHsH} 1HT$HD$qH|$ pIfHHnH} 1HT$HD$}q}H|$HpIof.@~X"@H} "@HT$1HD$qƅH|$HV1yI @H} 1HT$HD$p1Ld$lIH3MJLADoHHHLoHmH[HH;HuH-DHEfDp@HH} 1HT$HD$puD$3nIfDH~QE1HD$dH+%(H(L[]A\A]fHhlJL%DI$fHmu HAlImtLE1~l@MtLlfDLXlMelff.AVAUATIUHH5؋SHH dH%(HD$1HT$ nk|$ "@0LH5IHFD$ =)-@LDoHIjHHtaM~^E11DLH2nLcM9~H`,`!@H('~fDHL$HT$LHt$ 7umHT$I|$ H~bu1Vgƅu0HT$ HujH GH5H=bH|$HtH/t LxF1 <fft$ wat$ aI|$ '1fƅuHl$Ht+IT$ @LwH8I$HIELfDATUHHH5dH(dH%(HD$1HL$HT$ dtSHHu;Ld$L7tt$ LH}H7H5H8"a1HT$dH+%(uH(]A\`AWAVAUIHH5ATUSHdH%(H$1HL$hHT$d\cHЀLD|$dAG=jvIcDHihH,)Di');wLt$hL;5c7%L6InL4$A('Ax' y A7'  AV' Am't IExHD$4$Lm4HD$HBLl$ L$D,$D|$,H H8 HH9\$.HLDH=4HI5 LL?5HHH KcH$HtH/uH$O^H$vfDH5H5~H8^E1H$dH+%(HL[]A\A]A^A_A'+ A/uLbI} HD15c Hn5HIDH;-q5t&H55H9tH{bKLt$hD|$dANU AoN_A,NAXNIIHtIDžH/MI} XNH@A~N+AN" IIHtIDžH/MI} N1H bI} L1'aAN~yANdAN IIHtIDžH/MI} NH 1aI} L1I'qa?@ANAN" IIHtIDžH/?MI} N1H aI} L1'`DLIFA+N IIHtIDžH/I IHtIDžH/2 MI} +N1Hl`I} L1'Y`'@LDLIf.IIHtIDžH/ MI} ~N1H_I} L1o'_DIIHtIDžH/ MI} N1Hb_I} L1'z_HDIIHtIDžH/k MI} N1H-_I} L1'_DHD$pLHD$x.HD$HHHD$0H$Lt$8HD$@H$HD$HD$ Ll$X$Ht$HDŽ$H|$8HDŽ$HDŽ$HDŽ$.HH.Aą H8.H 1DHa.HL$@H$H$H.O DH,.HI/ÅH$H$LH$7. H|$pHt$xHjA1$j$jL$H$[H$H0Ht H/Q H$Ht H/HD$HD$H9D$HLl$XI} HT$p('1]ƅS I}@HC(uT$ 1H=^1D"HH= ^1CHHu!1HT$dH+%(u1H []A\DHHH8>HmuH_>>H 1H5H=q]?fAUATUSHHdH%(HD$1D$Lc MLc(M3@HC(HQBH{ Ht$IP@LV=EHC(w>T$H=d]1BIHD$dH+%(HL[]A\A]DHH=\1BHHtHHOH8w=HmuH(=H/H%^H5qE1H81BpHH]H5"H81ALf=H H5uH=[=AUATUSHHdH%(HD$1D$Lc MLc(M>HC(H@H{ Ht$I>L;EHC(w>T$H=[1RAIHD$dH+%(HL[]A\A]DH H=4[1AHHtHHH8;HmuH;HH[H5E1H81@pHH[H5H81p@L;H 2H5H=oZ<AWH*\AVAUATUHSH8dH%(HD$(1D$$Hu0H}81HE0HHLHDžH)HL8L0HLHHDžHDž(HH)HLLLD$$HDž0HHDžH)HLH} 9Aą1c9IH/1E1M9HD$H189HD$HD$$Rf.L:HH#ŰLo:H#0!D$$AD9McL=:DHHH#T0tL;IHHL>;I/lL49_HH=tX1Q>HHt!HHH879Hm6@E1HD$(dH+%(+H8L[]A\A]A^A_LP:IHtfH|$H:uOI/L8L:IHt.H|$HS:uI/LM8I/tRE1Ht$HHD$HHt-HT$HHD$HHt0I.$L8H|$7LE17H7HL$HT$L1H=HHH5 QH8 11HT$dH+%(u*H [f1@HH5XH8010H H5H=70H H5H=_)0H H5H=0ff.HHt@H,HH9GunH(tHLG MtHG L#4H4HHH , H55H=(40H H5H=0H H5H=C/fDATIUHHHt*H0Hu HuHt(HH]A\HtLHp0HuHLH5H813H1]A\fDAUATUHHHHH9GH(It H LH0IHtL]A\A]fDHH8/t/HULHHL]A\HA]H  H5H=H'.H H5sH=.H H5TH=Yv.fDAUATUHtwHHHH9GH(txI/IHt L]A\A]H1H8.t/HULHH?L`]A\HA]H H5H=`&-H H5H=-H H5H=-ff.ATUHSHHH?Ht6HHtH[]A\1.Aąu4HD[]A\HT$f0HT$HHHuAHH8-tHHH5H811HHt+H\HH9Gu:H(tH tKHH(H H5gH=%,H H5HH=j,H H5)H=.K,ff.HHt$HHH9GuRH(t,HHH H5H=$+H H5H=+H H5H=+fHGAHu HDDDtu/Dc.PH lH5cH="C+tum+D/PH +zH5#H=~"+ATIUHSHHHGHuYHIH5I*HHHt`LHU/tH;Ht HH/t$H[]A\HH[]A\/@D$ )D$ fH H5]H=i**f.HH1dH%(HD$1HH$uH$HtHT$dH+%(u HÐ1w)H `+H5H=)HGHfDAWAVAUATUSHHH5HHXdH%(HD$H1HL$8HT$4+HIHl$4E=?uHcʼnHihH,)Љi')ƒH|$8HGAŅHl$8H}H;=tH5H9t,t?Hl$8D$4=!NS=$NHH5H8"(f1D@H|$8+Hl$8uHH9EtHH5GH8'1HT$HdH+%(HX[]A\A]A^A_D)Hƒ3~ !Hr.HTH5eOH8}'1fNJwH{ 1'HiHpH{ H$N1'H{ H1'v'HEHHH"f.H{ He!N19'H{ H1'&'HEHD$4Lt$8D$$-'EHD$@DLAHHpH@HH<HHHD$(s+HD$HHH<HD$(LxLG+IHrL1HE1&HD$@HD$9Ht$HQHL$JHD$@KIL99DLLHHD$KH|$uH H5H8%11fDHH9~GI None Corresponds to `curl_multi_remove_handle`_ in libcurl. This method removes an existing and valid Curl object from the CurlMulti object. .. _curl_multi_remove_handle: https://curl.haxx.se/libcurl/c/curl_multi_remove_handle.htmlassign(sock_fd, object) -> None Creates an association in the multi handle between the given socket and a private object in the application. Corresponds to `curl_multi_assign`_ in libcurl. .. _curl_multi_assign: https://curl.haxx.se/libcurl/c/curl_multi_assign.htmltimeout() -> int Returns how long to wait for action before proceeding. Corresponds to `curl_multi_timeout`_ in libcurl. .. _curl_multi_timeout: https://curl.haxx.se/libcurl/c/curl_multi_timeout.htmlsetopt(option, value) -> None Set curl multi option. Corresponds to `curl_multi_setopt`_ in libcurl. *option* specifies which option to set. PycURL defines constants corresponding to ``CURLMOPT_*`` constants in libcurl, except that the ``CURLMOPT_`` prefix is replaced with ``M_`` prefix. For example, ``CURLMOPT_PIPELINING`` is exposed in PycURL as ``pycurl.M_PIPELINING``. For convenience, ``CURLMOPT_*`` constants are also exposed on CurlMulti objects:: import pycurl m = pycurl.CurlMulti() m.setopt(pycurl.M_PIPELINING, 1) # Same as: m.setopt(m.M_PIPELINING, 1) *value* specifies the value to set the option to. Different options accept values of different types: - Options specified by `curl_multi_setopt`_ as accepting ``1`` or an integer value accept Python integers, long integers (on Python 2.x) and booleans:: m.setopt(pycurl.M_PIPELINING, True) m.setopt(pycurl.M_PIPELINING, 1) # Python 2.x only: m.setopt(pycurl.M_PIPELINING, 1L) - ``*FUNCTION`` options accept a function. Supported callbacks are ``CURLMOPT_SOCKETFUNCTION`` AND ``CURLMOPT_TIMERFUNCTION``. Please refer to the PycURL test suite for examples on using the callbacks. Raises TypeError when the option value is not of a type accepted by the respective option, and pycurl.error exception when libcurl rejects the option or its value. .. _curl_multi_setopt: https://curl.haxx.se/libcurl/c/curl_multi_setopt.htmlsocket_all() -> tuple Returns result from doing a socket_all() on the curl multi file descriptor with the given timeout.socket_action(sock_fd, ev_bitmask) -> (result, num_running_handles) Returns result from doing a socket_action() on the curl multi file descriptor with the given timeout. Corresponds to `curl_multi_socket_action`_ in libcurl. The return value is a two-element tuple. The first element is the return value of the underlying ``curl_multi_socket_action`` function, and it is always zero (``CURLE_OK``) because any other return value would cause ``socket_action`` to raise an exception. The second element is the number of running easy handles within this multi handle. When the number of running handles reaches zero, all transfers have completed. Note that if the number of running handles has decreased by one compared to the previous invocation, this is not mean the handle corresponding to the ``sock_fd`` provided as the argument to this function was the completed handle. .. _curl_multi_socket_action: https://curl.haxx.se/libcurl/c/curl_multi_socket_action.htmlperform() -> tuple of status and the number of active Curl objects Corresponds to `curl_multi_perform`_ in libcurl. .. _curl_multi_perform: https://curl.haxx.se/libcurl/c/curl_multi_perform.htmlinfo_read([max_objects]) -> tuple(number of queued messages, a list of successful objects, a list of failed objects) Corresponds to the `curl_multi_info_read`_ function in libcurl. This method extracts at most *max* messages from the multi stack and returns them in two lists. The first list contains the handles which completed successfully and the second list contains a tuple *(curl object, curl error number, curl error message)* for each failed curl object. The curl error message is returned as a Python string which is decoded from the curl error string using the `surrogateescape`_ error handler. The number of queued messages after this method has been called is also returned. .. _curl_multi_info_read: https://curl.haxx.se/libcurl/c/curl_multi_info_read.html .. _surrogateescape: https://www.python.org/dev/peps/pep-0383/fdset() -> tuple of lists with active file descriptors, readable, writeable, exceptions Returns a tuple of three lists that can be passed to the select.select() method. Corresponds to `curl_multi_fdset`_ in libcurl. This method extracts the file descriptor information from a CurlMulti object. The returned lists can be used with the ``select`` module to poll for events. Example usage:: import pycurl c = pycurl.Curl() c.setopt(pycurl.URL, "https://curl.haxx.se") m = pycurl.CurlMulti() m.add_handle(c) while 1: ret, num_handles = m.perform() if ret != pycurl.E_CALL_MULTI_PERFORM: break while num_handles: apply(select.select, m.fdset() + (1,)) while 1: ret, num_handles = m.perform() if ret != pycurl.E_CALL_MULTI_PERFORM: break .. _curl_multi_fdset: https://curl.haxx.se/libcurl/c/curl_multi_fdset.htmlclose() -> None Corresponds to `curl_multi_cleanup`_ in libcurl. This method is automatically called by pycurl when a CurlMulti object no longer has any references to it, but can also be called explicitly. .. _curl_multi_cleanup: https://curl.haxx.se/libcurl/c/curl_multi_cleanup.htmladd_handle(Curl object) -> None Corresponds to `curl_multi_add_handle`_ in libcurl. This method adds an existing and valid Curl object to the CurlMulti object. *Changed in version 7.43.0.2:* add_handle now ensures that the Curl object is not garbage collected while it is being used by a CurlMulti object. Previously application had to maintain an outstanding reference to the Curl object to keep it from being garbage collected. .. _curl_multi_add_handle: https://curl.haxx.se/libcurl/c/curl_multi_add_handle.htmlThis module implements an interface to the cURL library. Types: Curl() -> New object. Create a new curl object. CurlMulti() -> New object. Create a new curl multi object. CurlShare() -> New object. Create a new curl share object. Functions: global_init(option) -> None. Initialize curl environment. global_cleanup() -> None. Cleanup curl environment. version_info() -> tuple. Return version information.CurlShare() -> New CurlShare object Creates a new :ref:`curlshareobject` which corresponds to a ``CURLSH`` handle in libcurl. CurlShare objects is what you pass as an argument to the SHARE option on :ref:`Curl objects `.CurlMulti() -> New CurlMulti object Creates a new :ref:`curlmultiobject` which corresponds to a ``CURLM`` handle in libcurl.reset() -> None Reset all options set on curl handle to default values, but preserves live connections, session ID cache, DNS cache, cookies, and shares. Corresponds to `curl_easy_reset`_ in libcurl. .. _curl_easy_reset: https://curl.haxx.se/libcurl/c/curl_easy_reset.htmlunsetopt(option) -> None Reset curl session option to its default value. Only some curl options may be reset via this method. libcurl does not provide a general way to reset a single option to its default value; :py:meth:`pycurl.Curl.reset` resets all options to their default values, otherwise :py:meth:`pycurl.Curl.setopt` must be called with whatever value is the default. For convenience, PycURL provides this unsetopt method to reset some of the options to their default values. Raises pycurl.error exception on failure. ``c.unsetopt(option)`` is equivalent to ``c.setopt(option, None)``.setopt_string(option, value) -> None Set curl session option to a string value. This method allows setting string options that are not officially supported by PycURL, for example because they did not exist when the version of PycURL being used was released. :py:meth:`pycurl.Curl.setopt` should be used for setting options that PycURL knows about. **Warning:** No checking is performed that *option* does, in fact, expect a string value. Using this method incorrectly can crash the program and may lead to a security vulnerability. Furthermore, it is on the application to ensure that the *value* object does not get garbage collected while libcurl is using it. libcurl copies most string options but not all; one option whose value is not copied by libcurl is `CURLOPT_POSTFIELDS`_. *option* would generally need to be given as an integer literal rather than a symbolic constant. *value* can be a binary string or a Unicode string using ASCII code points, same as with string options given to PycURL elsewhere. Example setting URL via ``setopt_string``:: import pycurl c = pycurl.Curl() c.setopt_string(10002, "http://www.python.org/") .. _CURLOPT_POSTFIELDS: https://curl.haxx.se/libcurl/c/CURLOPT_POSTFIELDS.htmlsetopt(option, value) -> None Set curl session option. Corresponds to `curl_easy_setopt`_ in libcurl. *option* specifies which option to set. PycURL defines constants corresponding to ``CURLOPT_*`` constants in libcurl, except that the ``CURLOPT_`` prefix is removed. For example, ``CURLOPT_URL`` is exposed in PycURL as ``pycurl.URL``, with some exceptions as detailed below. For convenience, ``CURLOPT_*`` constants are also exposed on the Curl objects themselves:: import pycurl c = pycurl.Curl() c.setopt(pycurl.URL, "http://www.python.org/") # Same as: c.setopt(c.URL, "http://www.python.org/") The following are exceptions to option constant naming convention: - ``CURLOPT_FILETIME`` is mapped as ``pycurl.OPT_FILETIME`` - ``CURLOPT_CERTINFO`` is mapped as ``pycurl.OPT_CERTINFO`` - ``CURLOPT_COOKIELIST`` is mapped as ``pycurl.COOKIELIST`` and, as of PycURL 7.43.0.2, also as ``pycurl.OPT_COOKIELIST`` - ``CURLOPT_RTSP_CLIENT_CSEQ`` is mapped as ``pycurl.OPT_RTSP_CLIENT_CSEQ`` - ``CURLOPT_RTSP_REQUEST`` is mapped as ``pycurl.OPT_RTSP_REQUEST`` - ``CURLOPT_RTSP_SERVER_CSEQ`` is mapped as ``pycurl.OPT_RTSP_SERVER_CSEQ`` - ``CURLOPT_RTSP_SESSION_ID`` is mapped as ``pycurl.OPT_RTSP_SESSION_ID`` - ``CURLOPT_RTSP_STREAM_URI`` is mapped as ``pycurl.OPT_RTSP_STREAM_URI`` - ``CURLOPT_RTSP_TRANSPORT`` is mapped as ``pycurl.OPT_RTSP_TRANSPORT`` *value* specifies the value to set the option to. Different options accept values of different types: - Options specified by `curl_easy_setopt`_ as accepting ``1`` or an integer value accept Python integers, long integers (on Python 2.x) and booleans:: c.setopt(pycurl.FOLLOWLOCATION, True) c.setopt(pycurl.FOLLOWLOCATION, 1) # Python 2.x only: c.setopt(pycurl.FOLLOWLOCATION, 1L) - Options specified as accepting strings by ``curl_easy_setopt`` accept byte strings (``str`` on Python 2, ``bytes`` on Python 3) and Unicode strings with ASCII code points only. For more information, please refer to :ref:`unicode`. Example:: c.setopt(pycurl.URL, "http://www.python.org/") c.setopt(pycurl.URL, u"http://www.python.org/") # Python 3.x only: c.setopt(pycurl.URL, b"http://www.python.org/") - ``HTTP200ALIASES``, ``HTTPHEADER``, ``POSTQUOTE``, ``PREQUOTE``, ``PROXYHEADER`` and ``QUOTE`` accept a list or tuple of strings. The same rules apply to these strings as do to string option values. Example:: c.setopt(pycurl.HTTPHEADER, ["Accept:"]) c.setopt(pycurl.HTTPHEADER, ("Accept:",)) - ``READDATA`` accepts a file object or any Python object which has a ``read`` method. On Python 2, a file object will be passed directly to libcurl and may result in greater transfer efficiency, unless PycURL has been compiled with ``AVOID_STDIO`` option. On Python 3 and on Python 2 when the value is not a true file object, ``READDATA`` is emulated in PycURL via ``READFUNCTION``. The file should generally be opened in binary mode. Example:: f = open('file.txt', 'rb') c.setopt(c.READDATA, f) - ``WRITEDATA`` and ``WRITEHEADER`` accept a file object or any Python object which has a ``write`` method. On Python 2, a file object will be passed directly to libcurl and may result in greater transfer efficiency, unless PycURL has been compiled with ``AVOID_STDIO`` option. On Python 3 and on Python 2 when the value is not a true file object, ``WRITEDATA`` is emulated in PycURL via ``WRITEFUNCTION``. The file should generally be opened in binary mode. Example:: f = open('/dev/null', 'wb') c.setopt(c.WRITEDATA, f) - ``*FUNCTION`` options accept a function. Supported callbacks are documented in :ref:`callbacks`. Example:: # Python 2 import StringIO b = StringIO.StringIO() c.setopt(pycurl.WRITEFUNCTION, b.write) - ``SHARE`` option accepts a :ref:`curlshareobject`. It is possible to set integer options - and only them - that PycURL does not know about by using the numeric value of the option constant directly. For example, ``pycurl.VERBOSE`` has the value 42, and may be set as follows:: c.setopt(42, 1) *setopt* can reset some options to their default value, performing the job of :py:meth:`pycurl.Curl.unsetopt`, if ``None`` is passed for the option value. The following two calls are equivalent:: c.setopt(c.URL, None) c.unsetopt(c.URL) Raises TypeError when the option value is not of a type accepted by the respective option, and pycurl.error exception when libcurl rejects the option or its value. .. _curl_easy_setopt: https://curl.haxx.se/libcurl/c/curl_easy_setopt.htmlperform_rs() -> response_body Perform a file transfer and return response body as a string. On Python 2, this method arranges for response body to be saved in a StringIO instance, then invokes :ref:`perform ` to perform the file transfer, then returns the value of the StringIO instance. This behavior is identical to :ref:`perform_rb `. On Python 3, this method arranges for response body to be saved in a BytesIO instance, then invokes :ref:`perform ` to perform the file transfer, then decodes the response body in Python's default encoding and returns the decoded body as a Unicode string (``str`` instance). *Note:* decoding happens after the transfer finishes, thus an encoding error implies the transfer/network operation succeeded. Any transfer errors raise ``pycurl.error`` exception, just like in :ref:`perform `. Use :ref:`perform_rb ` to retrieve response body as a byte string (``bytes`` instance on Python 3) without attempting to decode it. Raises ``pycurl.error`` exception upon failure. *Added in version 7.43.0.2.*perform_rb() -> response_body Perform a file transfer and return response body as a byte string. This method arranges for response body to be saved in a StringIO (Python 2) or BytesIO (Python 3) instance, then invokes :ref:`perform ` to perform the file transfer, then returns the value of the StringIO/BytesIO instance which is a ``str`` instance on Python 2 and ``bytes`` instance on Python 3. Errors during transfer raise ``pycurl.error`` exceptions just like in :ref:`perform `. Use :ref:`perform_rs ` to retrieve response body as a string (``str`` instance on both Python 2 and 3). Raises ``pycurl.error`` exception upon failure. *Added in version 7.43.0.2.*perform() -> None Perform a file transfer. Corresponds to `curl_easy_perform`_ in libcurl. Raises pycurl.error exception upon failure. .. _curl_easy_perform: https://curl.haxx.se/libcurl/c/curl_easy_perform.htmlpause(bitmask) -> None Pause or unpause a curl handle. Bitmask should be a value such as PAUSE_RECV or PAUSE_CONT. Corresponds to `curl_easy_pause`_ in libcurl. The argument should be derived from the ``PAUSE_RECV``, ``PAUSE_SEND``, ``PAUSE_ALL`` and ``PAUSE_CONT`` constants. Raises pycurl.error exception upon failure. .. _curl_easy_pause: https://curl.haxx.se/libcurl/c/curl_easy_pause.htmlgetinfo_raw(option) -> Result Extract and return information from a curl session, returning string data as byte strings. Corresponds to `curl_easy_getinfo`_ in libcurl. The ``getinfo_raw`` method should not be called unless ``perform`` has been called and finished. *option* is a constant corresponding to one of the ``CURLINFO_*`` constants in libcurl. Most option constant names match the respective ``CURLINFO_*`` constant names with the ``CURLINFO_`` prefix removed, for example ``CURLINFO_CONTENT_TYPE`` is accessible as ``pycurl.CONTENT_TYPE``. Exceptions to this rule are as follows: - ``CURLINFO_FILETIME`` is mapped as ``pycurl.INFO_FILETIME`` - ``CURLINFO_COOKIELIST`` is mapped as ``pycurl.INFO_COOKIELIST`` - ``CURLINFO_CERTINFO`` is mapped as ``pycurl.INFO_CERTINFO`` - ``CURLINFO_RTSP_CLIENT_CSEQ`` is mapped as ``pycurl.INFO_RTSP_CLIENT_CSEQ`` - ``CURLINFO_RTSP_CSEQ_RECV`` is mapped as ``pycurl.INFO_RTSP_CSEQ_RECV`` - ``CURLINFO_RTSP_SERVER_CSEQ`` is mapped as ``pycurl.INFO_RTSP_SERVER_CSEQ`` - ``CURLINFO_RTSP_SESSION_ID`` is mapped as ``pycurl.INFO_RTSP_SESSION_ID`` The type of return value depends on the option, as follows: - Options documented by libcurl to return an integer value return a Python integer (``long`` on Python 2, ``int`` on Python 3). - Options documented by libcurl to return a floating point value return a Python ``float``. - Options documented by libcurl to return a string value return a Python byte string (``str`` on Python 2, ``bytes`` on Python 3). The string contains whatever data libcurl returned. Use :ref:`getinfo ` to retrieve this data as a Unicode string on Python 3. - ``SSL_ENGINES`` and ``INFO_COOKIELIST`` return a list of byte strings. The same encoding caveats apply; use :ref:`getinfo ` to retrieve the data as a list of potentially Unicode strings. - ``INFO_CERTINFO`` returns a list with one element per certificate in the chain, starting with the leaf; each element is a sequence of *(key, value)* tuples where both ``key`` and ``value`` are byte strings. String encoding caveats apply; use :ref:`getinfo ` to retrieve certificate data as potentially Unicode strings. On Python 2, ``getinfo`` and ``getinfo_raw`` behave identically. Example usage:: import pycurl c = pycurl.Curl() c.setopt(pycurl.OPT_CERTINFO, 1) c.setopt(pycurl.URL, "https://python.org") c.setopt(pycurl.FOLLOWLOCATION, 1) c.perform() print(c.getinfo_raw(pycurl.HTTP_CODE)) # --> 200 print(c.getinfo_raw(pycurl.EFFECTIVE_URL)) # --> b"https://www.python.org/" certinfo = c.getinfo_raw(pycurl.INFO_CERTINFO) print(certinfo) # --> [((b'Subject', b'C = AU, ST = Some-State, O = PycURL test suite, CN = localhost'), (b'Issuer', b'C = AU, ST = Some-State, O = PycURL test suite, OU = localhost, CN = localhost'), (b'Version', b'0'), ...)] Raises pycurl.error exception upon failure. *Added in version 7.43.0.2.* .. _curl_easy_getinfo: https://curl.haxx.se/libcurl/c/curl_easy_getinfo.htmlgetinfo(option) -> Result Extract and return information from a curl session, decoding string data in Python's default encoding at the time of the call. Corresponds to `curl_easy_getinfo`_ in libcurl. The ``getinfo`` method should not be called unless ``perform`` has been called and finished. *option* is a constant corresponding to one of the ``CURLINFO_*`` constants in libcurl. Most option constant names match the respective ``CURLINFO_*`` constant names with the ``CURLINFO_`` prefix removed, for example ``CURLINFO_CONTENT_TYPE`` is accessible as ``pycurl.CONTENT_TYPE``. Exceptions to this rule are as follows: - ``CURLINFO_FILETIME`` is mapped as ``pycurl.INFO_FILETIME`` - ``CURLINFO_COOKIELIST`` is mapped as ``pycurl.INFO_COOKIELIST`` - ``CURLINFO_CERTINFO`` is mapped as ``pycurl.INFO_CERTINFO`` - ``CURLINFO_RTSP_CLIENT_CSEQ`` is mapped as ``pycurl.INFO_RTSP_CLIENT_CSEQ`` - ``CURLINFO_RTSP_CSEQ_RECV`` is mapped as ``pycurl.INFO_RTSP_CSEQ_RECV`` - ``CURLINFO_RTSP_SERVER_CSEQ`` is mapped as ``pycurl.INFO_RTSP_SERVER_CSEQ`` - ``CURLINFO_RTSP_SESSION_ID`` is mapped as ``pycurl.INFO_RTSP_SESSION_ID`` The type of return value depends on the option, as follows: - Options documented by libcurl to return an integer value return a Python integer (``long`` on Python 2, ``int`` on Python 3). - Options documented by libcurl to return a floating point value return a Python ``float``. - Options documented by libcurl to return a string value return a Python string (``str`` on Python 2 and Python 3). On Python 2, the string contains whatever data libcurl returned. On Python 3, the data returned by libcurl is decoded using the default string encoding at the time of the call. If the data cannot be decoded using the default encoding, ``UnicodeDecodeError`` is raised. Use :ref:`getinfo_raw ` to retrieve the data as ``bytes`` in these cases. - ``SSL_ENGINES`` and ``INFO_COOKIELIST`` return a list of strings. The same encoding caveats apply; use :ref:`getinfo_raw ` to retrieve the data as a list of byte strings. - ``INFO_CERTINFO`` returns a list with one element per certificate in the chain, starting with the leaf; each element is a sequence of *(key, value)* tuples where both ``key`` and ``value`` are strings. String encoding caveats apply; use :ref:`getinfo_raw ` to retrieve certificate data as byte strings. On Python 2, ``getinfo`` and ``getinfo_raw`` behave identically. Example usage:: import pycurl c = pycurl.Curl() c.setopt(pycurl.OPT_CERTINFO, 1) c.setopt(pycurl.URL, "https://python.org") c.setopt(pycurl.FOLLOWLOCATION, 1) c.perform() print(c.getinfo(pycurl.HTTP_CODE)) # --> 200 print(c.getinfo(pycurl.EFFECTIVE_URL)) # --> "https://www.python.org/" certinfo = c.getinfo(pycurl.INFO_CERTINFO) print(certinfo) # --> [(('Subject', 'C = AU, ST = Some-State, O = PycURL test suite, CN = localhost'), ('Issuer', 'C = AU, ST = Some-State, O = PycURL test suite, OU = localhost, CN = localhost'), ('Version', '0'), ...)] Raises pycurl.error exception upon failure. .. _curl_easy_getinfo: https://curl.haxx.se/libcurl/c/curl_easy_getinfo.htmlerrstr_raw() -> byte string Return the internal libcurl error buffer of this handle as a byte string. Return value is a ``str`` instance on Python 2 and ``bytes`` instance on Python 3. Unlike :ref:`errstr_raw `, ``errstr_raw`` allows reading libcurl error buffer in Python 3 when its contents is not valid in Python's default encoding. On Python 2, ``errstr`` and ``errstr_raw`` behave identically. *Added in version 7.43.0.2.*errstr() -> string Return the internal libcurl error buffer of this handle as a string. Return value is a ``str`` instance on all Python versions. On Python 3, error buffer data is decoded using Python's default encoding at the time of the call. If this decoding fails, ``UnicodeDecodeError`` is raised. Use :ref:`errstr_raw ` to retrieve the error buffer as a byte string in this case. On Python 2, ``errstr`` and ``errstr_raw`` behave identically.close() -> None Close handle and end curl session. Corresponds to `curl_easy_cleanup`_ in libcurl. This method is automatically called by pycurl when a Curl object no longer has any references to it, but can also be called explicitly. .. _curl_easy_cleanup: https://curl.haxx.se/libcurl/c/curl_easy_cleanup.htmlCurl() -> New Curl object Creates a new :ref:`curlobject` which corresponds to a ``CURL`` handle in libcurl. Curl objects automatically set CURLOPT_VERBOSE to 0, CURLOPT_NOPROGRESS to 1, provide a default CURLOPT_USERAGENT and setup CURLOPT_ERRORBUFFER to point to a private error buffer. Implicitly calls :py:func:`pycurl.global_init` if the latter has not yet been called.PyInit_pycurlinsobj2do_version_infodo_curl_pausedo_curl_performdo_curl_setopt_string_implconvert_certinfodecode_string_listdo_curl_clearutil_curl_closedo_curl_newutil_curl_initassert_curl_statesrc/multi.cself->multi_handle != NULLtimeout failediO:assignassign failedii:socket_actionmulti_socket_action failedperform failed(OOO)|i:info_readPy_TYPE(co) == p_Curl_Typesurrogateescape(OiO)(iOO)d:selectinvalid timeout periodtimeout >= 0.0timeout < 1.0multi_fdset failedsrc/share.cself->lock != NULLsrc/pythoncompat.csrc/stringcompat.cPyUnicode_Check(obj)s != NULLreplacesrc/threadsupport.cself->handle != NULL(iiOO)res == CURLE_OKlocklock->locks[i] != NULLO!:add_handlecurl object already closedobj->multi_stack == NULLO!:remove_handleobj->multi_stack == selfPy_TYPE(self) == p_CurlMulti_Typecannot invoke %s() - no multi handlecannot invoke %s() - multi_perform() is currently runningCurlMulti objects do not support serializationCurlMulti objects do not support deserializationCurlShare objects do not support serializationCurlShare objects do not support deserializationinitializing curl-multi failedcurl_multi_fdset() failed due to internal errorsargument to info_read must be greater than zeroUnable to fetch curl handle from curl objectPy_TYPE(self) == p_CurlShare_Typetrying to obtain a non-existing attribute: %Utrying to delete a non-existing attribute: %Ulist/tuple items must be stringslists/tuples are not supported for this optioncallables are not supported for this optionself->multi_stack->state == NULLself->multi_stack->multi_handle != NULLinitializing curl-share failedcannot add/remove handle - multi-stack is closedcannot add/remove handle - multi_perform() already runningcannot add/remove handle - perform() of curl object already runningcannot add/remove handle - curl object already on another multi-stackcurl object already on this multi-stackcurl_multi_add_handle() failed due to internal errorscurl object not on this multi-stackcurl_multi_remove_handle() failed due to internal errorsset_ca_certs() -> None Load ca certs from provided unicode string. Note that certificates will be added only when cURL starts new connection.share_lock_destroypycurl_get_thread_state_multipycurl_get_thread_statePyText_AsString_NoNULPyText_AsStringAndSizeassert_share_statedo_share_newPyListOrTuple_GetItemPyListOrTuple_Sizedo_multi_selectdo_multi_info_readdo_multi_remove_handledo_multi_add_handledo_multi_performdo_multi_socket_alldo_multi_socket_actionutil_multi_closedo_multi_newassert_multi_state8~A?.A;rU\\HdHfHXf\hfpfggghxi8iTkXlxlHrst8tx8{0{hH}(4HPpH L  HH H  P  ( 88 t  xD x 8 x((x8L(h(Xx,DXth88,h` h"%$)t8,-./,0h018222083Dx3XX4448::P;tH<x<<<=>L>`>t>>?HAA$xB\CCEzRx $(RFJ w?:*3$"DX\X4t0`FDD  GBI AABaaa(aAKN  AAJ b%H\,b%H\ DcF A e A 0hcJD F AK Z CC VAI8dEWHvx0 x Pxx0/xpp@W#x0x`x 0cx0<@*p,@9y@)+@`v@vywwpvx$y0/yxp:y x0HyvxaxaNy0pu@^0 bdae15283c99357abff34fa91814feaab673694.debugW.shstrtab.note.gnu.property.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.data.bss.gnu_debuglink  $1o ;   C UKo22Xo44g44qB0E0E {PPv P PVVWW]]EBB PP8 88h)hp)px)xh+h0 x x:x*x*4*