+
    âCëi  ã                   óT  € ^ RI t  ^ RIHtHt ^ RIt^ RIt^ RIt^ RIt^ RI	t
^ RIt
 ^ RIHt ^ RIt ! R R] P                   4      t]R8X  Ed1   ]
P&                  P)                  4       t]P+                  ]
P,                  P/                  4       4       ]P0                  ! R4      t]P5                  4       P7                  4       t] P:                  ! 4       t]P?                  4        R]P@                  PB                  : R	]P@                  PD                  ^ ,          PB                  : R
]: R2t#]! ]$! ]P@                  PJ                  PM                  4       4      ]#] P:                  ! 4       ]4      t']'PQ                  4        R# R#   ] d    ^ RIHtHt  EL„i ; i  ] d    ^ RIHt  ELyi ; i)é    N)ÚEmptyÚQueue)Úurlopenc                   óˆ   a € ] tR t^t o Rt ! R R]P                  4      tRR ltR t	RR lt
R tRR	 ltRR
 ltR tRtV tR# )Ú
MirrorTestz@Determines the best mirrors by perfoming ping and download test.c                   ó4   a € ] tR t^t o RtRR ltR tRtV tR# )ÚMirrorTest.PingWorkerzŒUse the command line command ping to determine the server's
response time. Using multiple threads allows to run several
test simultaneously.c                óÂ   € WPn         W`n        W@n        W0n        Wn        W n        \        P                  ! R 4      V n        \        P                  P                  V 4       R# )z^rtt .* = [\.\d]+/([\.\d]+)/.*N)ÚbordersÚmodÚparentÚidÚjobsÚresultsÚreÚcompileÚmatch_resultÚ	threadingÚThreadÚ__init__)Úselfr   r   r   r   r   r   s   &&&&&&&Ú?/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.pyr   ÚMirrorTest.PingWorker.__init__   sF   € Ø"ŒLØŒHØ ŒKØŒGØŒIØ"ŒLÜ "§
¢
Ð+LÓ MˆDÔÜ×Ñ×%Ñ% dÖ+ó    c                ón  € R pV P                   P                  4       '       EgÛ   V P                  P                  P	                  4       '       Ed®    V P                   P                  R4      pVP                  pV P                  P                  RV,          4       \        P                  ! RRRRRV.\        P                  \        P                  RR	7      P                  p VP                  4       pV'       g   M#\        P                  ! V P                   V4      pK=  \$        P&                  P)                  4        \$        ;P*                  ^,          un        V P                  P-                  \$        P*                  \$        P.                  V P0                  V P2                  4       V'       d/   V P4                  P7                  \9        V^ ,          4      VX.4       \$        P&                  P;                  4        EKù  R # R #   \"         d     R #  T P                  P                  R
X,          4        EL; i)NFzPinging %s...Úpingz-qz-c 2z-W 1z-i 0.5T)ÚstdoutÚstderrÚuniversal_newlineszSkipping %s)r   Úemptyr   ÚrunningÚisSetÚgetÚhostnameÚreport_actionÚ
subprocessÚPopenÚPIPEÚSTDOUTr   Úreadliner   Úfindallr   r   r   Úcompleted_lockÚacquireÚ	completedÚreport_progressÚtodor   r   r   ÚappendÚfloatÚrelease)r   ÚresultÚmirrorÚhostÚcommandoÚlines   &     r   ÚrunÚMirrorTest.PingWorker.run#   s™  € ØˆFØ—i‘i—o‘o×'Ó'¨D¯K©K×,?Ñ,?×,EÑ,E×,GÓ,GðDØ!ŸY™YŸ]™]¨5Ó1�FØ!Ÿ?™?�Dà—K‘K×-Ñ-¨oÀÕ.DÔEÜ)×/Ò/°¸¸vÀvÈxÐY]Ð0^Ü7A·±Ü7A×7HÑ7HØCGô I÷ JPÉð ð Ø'×0Ñ0Ó2˜ß#Ø!Ü!#§¢¨D×,=Ñ,=¸tÓ!Dšô ×)Ñ)×1Ñ1Ô3Ü×$Ò$¨Õ)Õ$Ø—‘×+Ñ+¬J×,@Ñ,@Ü,6¯O©OØ,0¯L©LØ,0¯H©Hô6÷ Ø—L‘L×'Ñ'¬¨v°a­yÓ)9¸4ÀÐ(HÔIÜ×)Ñ)×1Ñ1×3ñ9 -HÑ'øô ô ÚðDØ—K‘K×-Ñ-¨m¸dÕ.B×Cús   ÁB'H  Ã9#H  È H4È#H4)r   r   r   r   r   r   r   N)©r   é   ©r   r   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r9   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   Ú
PingWorkerr	      s   ø‡ € ñ	#ô	,÷	4ð 	4r   rG   Nc                ón  € \         P                  P                  V 4       R V n        RV n        W0n        RV n        W n        . V n        ^ \        n
        \         P                  ! 4       \        n        \        V4      \        n        Wn        V'       g   \         P                   ! 4       V n        R# W@n        R# )Ú N)r   r   g        )r   r   r   ÚactionÚprogressÚeventÚbestÚ	test_fileÚthreadsr   r.   ÚLockr,   Úlenr0   ÚmirrorsÚEventr!   )r   rR   rN   rL   r!   s   &&&&&r   r   ÚMirrorTest.__init__C   sy   € Ü×Ñ×!Ñ! $Ô'ØˆŒØ#ˆŒØŒ
ØˆŒ	Ø"ŒØˆŒØ Œ
ÔÜ$-§N¢NÓ$4Œ
Ô!Ü˜g›,Œ
ŒØŒßÜ$Ÿ?š?Ó,ˆDŽLà"ŽLr   c                ón   € Wn         V P                  '       d   V P                  P                  4        R # R # ©N)rJ   rL   Úset)r   Útexts   &&r   r%   ÚMirrorTest.report_actionT   s#   € ØŒØ�:�:ˆ:Ø�J‰J�N‰NÖñ r   c                ó  € W^ ,          ,           W$^,          ,           V^ ,          V^,          V^ ,          ,
          V,          V,          ,           3V n         V P                  '       d   V P                  P                  4        R# R# )zISubclasses should override this method to receive
progress status updatesN)rK   rL   rW   )r   ÚcurrentÚmaxr   r   s   &&&&&r   r/   ÚMirrorTest.report_progressY   sb   € ð ! q¥6Õ)Ø 1�v�Ø  � w¨q¥z°G¸AµJÕ'>À#Õ&EÈÕ&OÕOðQˆŒð �:�:ˆ:Ø�J‰J�N‰NÖñ r   c           
     óÀ  € V P                  ^RRR7      p\        V P                  4      pV^8”  dƒ   VP                  ^ ^ V P                  \        P
                  ! ^V^,
          4      ,          .4       VP                  ^ ^ V P                  \        P
                  ! ^V^,
          4      ,          .4       T P                  V Uu. uF  q3^,          NK  	  upR	\        P                  \        P                  3R7      pV F"  w  rV\        RVP                  : RV: 24       K$  	  V'       g   R# V^ ,          ^,          P                  p\        RV,          4       V# u upi )
é   )r\   r   r   )r   r   zmirror: z	 - time: Nzand the winner is: %s)r   ç      à?)r   é   ©r`   r<   )Úrun_ping_testrQ   rR   r1   ÚrandomÚrandintÚrun_download_testr   r0   Úprintr$   )r   Úresults_pingÚsizeÚrr   ÚtÚhÚwinners   &       r   Úrun_full_testÚMirrorTest.run_full_testb   s  € à×)Ñ)¨a¸ÀuÐ)ÓMˆä�4—<‘<Ó ˆØ�!Œ8Ø×Ñ  A t§|¡|´F·N²NÀ1ÀdÈ1ÅfÓ4MÕ'NÐ OÔPØ×Ñ  A t§|¡|´F·N²NÀ1ÀdÈ1ÅfÓ4MÕ'NÐ OÔPØ×(Ñ(¹Ó)E¹°1¨A¯$¨$¹Ñ)EØ19Ü.8¯o©oÜ.8¯o©oð.?ð )ó @ˆó ‰FˆQÝ¨Q¯Z¬ZºÐ;Ö<ñ çÙà˜Q•Z •]×+Ñ+ˆFÜÐ)¨FÕ2Ô3ØˆMùò *Fs   ÃEc           	     óŒ  € VR8X  d   V P                   p\        4       pV F  pVP                  V4       K  	  . p\        ^4       FE  p\        P                  WWW€W44      p	V P                  P                  V	4       V	P                  4        KG  	  V P                   F  p	V	P                  4        K  	  VP                  4        V^ V # )zÔPerforms ping tests of the given mirrors and returns the
best results (specified by max).
Mod and borders could be used to tweak the reported result if
the download test is only a part of a whole series of tests.N)rR   r   ÚputÚranger   rG   rO   r1   ÚstartÚjoinÚsort)
r   rR   r\   r   r   r   Úmr   Úirk   s
   &&&&&     r   rc   ÚMirrorTest.run_ping_testw   s¢   € ð
 �dŒ?Ø—l‘lˆGÜ‹wˆÛˆAØ�H‰H�QŽKñ àˆä�r–ˆAÜ×%Ñ% d°Q¸gÓKˆAØ�L‰L×Ñ Ô"Ø�G‰GŽIñ ð
 —”ˆAØ�F‰FŽHñ ð 	�‰ŒØ�q˜ˆ~Ðr   c                ób  a € V 3R lpVR8X  d   S P                   p. pV Fy  pS P                  P                  4       '       g    MXV! V4      pV^ 8”  d   VP                  W‡.4       S P	                  VP                  V4      ^,           \        V4      RV4       K{  	  VP                  4        V^ V # )zØPerforms download tests of the given mirrors and returns the
best results (specified by max).
Mod and borders could be used to tweak the reported result if
the download test is only a part of a whole series of tests.c                 ó0  <€ V P                  4       ^ ,          : RSP                  : 2pSP                  RV,          4       \        P                  ! 4       p \	        V^R7      P                  R4       \        P                  ! 4       V,
          #     ^ # ; i)r   Ú/zDownloading %s...)Útimeouti � )Úget_repo_urlsrN   r%   Útimer   Úread)r5   Úurlrs   r   s   &  €r   Útest_download_speedÚ9MirrorTest.run_download_test.<locals>.test_download_speed”   sy   ø€ Ø#×1Ñ1Ó3°A×6Ð6Ø!Ÿ^›^ð-ˆCà×ÑÐ2°SÕ8Ô9Ü—I’I“KˆEðÜ˜ QÔ'×,Ñ,¨VÔ4Ü—y’y“{ UÕ*Ð*øðÚús   Á7B ÂBNrb   )rR   r!   r"   r1   r/   ÚindexrQ   ru   )	r   rR   r\   r   r   r�   r   rv   Údownload_times	   f&&&&    r   rf   ÚMirrorTest.run_download_testŽ   s�   ø€ õ		ð �dŒ?Ø—l‘lˆGØˆãˆAØ—<‘<×%Ñ%×'Ò'ÙÙ/°Ó2ˆMØ˜qÔ Ø—‘ Ð1Ô2Ø× Ñ  §¡¨qÓ!1°AÕ!5´s¸7³|ÀXÈsÖSñ ð 	�‰ŒØ�q˜ˆ~Ðr   c                ód   € V P                  4       V n        V P                  P                  4        R# )z/Complete test exercise, set self.best when doneN)rn   rM   r!   Úclear)r   s   &r   r9   ÚMirrorTest.run¬   s"   € à×&Ñ&Ó(ˆŒ	Ø�‰×ÑÖr   )rJ   rM   rL   rR   rK   r!   rN   rO   rV   ))r   éd   r=   )NNr;   r=   )r>   r?   r@   rA   rB   r   r   rG   r   r%   r/   rn   rc   rf   r9   rC   rD   rE   s   @r   r   r      sC   ø‡ € ÙJô+4�Y×%Ñ%ô +4ôZ#ò"ô
òô*ô.÷<ð r   r   Ú__main__zdpkg --print-architecturezdists/r{   z/binary-z/Packages.gz))r   Úqueuer   r   ÚImportErrorr~   r   r&   ÚosÚaptsources.distroÚ
aptsourcesÚaptsources.sourceslistÚurllib.requestr   Úurllib2rd   r   r   r>   ÚdistroÚ
get_distroÚget_sourcesÚsourceslistÚSourcesListÚpopenÚpiper   ÚstripÚarchrS   r!   rW   Úsource_templateÚnameÚ
componentsrN   ÚlistÚ
mirror_setÚvaluesÚapprn   © r   r   Ú<module>r¤      sc  ðó ð#ß"ó Û 	Û Û 	Û Û ð Ý&ó ô[�×!Ñ!ô [ðz ˆzÕØ×Ñ×)Ñ)Ó+€FØ
×Ñ�z×-Ñ-×9Ñ9Ó;Ô<Ø�8Š8Ð/Ó0€DØ�9‰9‹;×ÑÓ€DØ�oŠoÓ€GØ‡K�K…Mà×'Ñ'×,Ô,Ø×'Ñ'×2Ñ2°1Õ5×:Ô:Ûð€Iñ ‘T˜&×0Ñ0×;Ñ;×BÑBÓDÓEØ 	§¢Ó 1°7ó<€Cà×ÑÖñ øðW ô #ß"Ò"ð#ûð ô  ßÐð ús"   †F  §F Æ FÆFÆF'Æ&F'