ó
    ÂÞåjÒz  ã                   ó¬  • S SK r S SKrS SKrS SKr/ SQrSrS r\R                  " S\R                  5      r	\R                  " S\R                  5      r
\R                  " S\R                  5      r/ SQ/ S	Q/ S
Q/ SQS.r/ SQr/ SQr/ SQr\R                  " S\R                  5      rS rS rS rS rS rS rS rS rS rS r\S:X  a  \" 5         gg)é    N)zehttp://wb9xxxwh.k34zyer.xyz/get.php?username=Syrge0913T&password=Pwpetpafe121&type=m3u_plus&output=tszbhttp://ktivguth.msostvip.com/get.php?username=9LVMAQVJ&password=W62VGURD&type=m3u_plus&output=m3u8zPhttps://drive.google.com/uc?export=download&id=1FutBqDBBVka99fevlRpbQgidH1hlx9CNz!/mnt/nvme/iptv/lista_filtrada.m3uc                 óÈ  •  0 n[        SSSS9 nU H1  nSU;   d  M  UR                  5       R                  SS5      u  pEXQU'   M3     S S S 5        UR                  S5      nUR                  S5      nU(       a  U(       d  [	        S	5      e[
        R                  " S
U S3UU S.SS9nUR                  5         g! , (       d  f       Nw= f! [         a    [        S5         gf = f)Nz/mnt/nvme/iptv/telegram.envÚrúutf-8©ÚencodingÚ=é   ÚTELEGRAM_BOT_TOKENÚTELEGRAM_CHAT_IDu   ConfiguraciÃ³n incompletazhttps://api.telegram.org/botz/sendMessage)Úchat_idÚtexté
   )ÚdataÚtimeoutTu6   AVISO: No se pudo enviar la notificaciÃ³n de Telegram.F)
ÚopenÚstripÚsplitÚgetÚ
ValueErrorÚrequestsÚpostÚraise_for_statusÚ	ExceptionÚprint)	ÚmensajeÚconfiguracionÚfÚlineaÚclaveÚvalorÚtokenr   Ú	respuestas	            Ú/mnt/nvme/iptv/filtrar_iptv.pyÚenviar_telegramr$      sñ   € ð!ØˆäØ)ØØò
ð Û�Ø˜%•<Ø#(§;¡;£=×#6Ñ#6°s¸AÓ#>‘L�EØ+0 %Ó(ñ ÷
ð ×!Ñ!Ð"6Ó7ˆØ×#Ñ#Ð$6Ó7ˆæžGÜÐ8Ó9Ð9ä—M’MØ*¨5¨'°Ð>à"Øñð ñ
ˆ	ð 	×"Ñ"Ô$Ø÷5
õ 
ûô8 ó ÜÐFÔGÙðús.   ‚C	 �
B8�*B8ÁA0C	 Â8
CÃC	 Ã	C!Ã C!a  \b(FOOTBALL|FUTBOL|SOCCER|LALIGA|LA\s+LIGA|PREMIER|CHAMPIONS|UEFA|FIFA|DAZN|BEIN|ESPN|EUROSPORT|SKY\s+SPORT|BT\s+SPORT|TNT\s+SPORT|ELEVEN\s+SPORT|MOVISTAR\s+LIGA|MOVISTAR\s+SPORT|GOL\s+TV|GOL\s+PLAY|SETANTA|GO3\s+SPORT|ARENA\s+SPORT|SPORT\s+KLUB|SWISS\s+SPORT|RTS\s+SPORT|SRF\s+SPORT)\bzk\b(FORMULA\s*1|FORMULA\s+ONE|F1|MOTORSPORT|MOTORSPORTS|F1\s+TV|F1TV|SKY\s+SPORTS\s+F1|SKY\s+F1|F1\s+LIVE)\bu›   \b(Ð’Ð—Ð ÐžÐ¡Ð›Ð«Ð•|ADULT|XXX|PENTHOUSE|PLAYBOY|EROTIC|EROTICA|BLUE\s+HUSTLER|HUSTLER|DORCEL|BABELAND|VIVID|WICKED|PRIVATE|SEX|SEXTV|PORNO|PORN|HARDCORE)\b)z	\bSPAIN\bz
\bESPANA\bu   \bESPAÃ‘A\bz(^|[, ])ES:z\|ES\bz\bES\s*:)z
\bPOLAND\bz
\bPOLSKA\bz
\bPOLISH\bz(^|[, ])PL:z\|PL\bz\bPL\s*:)z\bUNITED KINGDOM\bz\bUK\bz\bENGLAND\bz\bBRITAIN\bz(^|[, ])UK:z(^|[, ])GB:z\|UK\bz\|GB\b)	z
\bLATINO\bz	\bLATAM\bz	\bLATIN\bz
\bMEXICO\bz\bARGENTINA\bz\bCOLOMBIA\bz	\bCHILE\bz\bPERU\bz\bVENEZUELA\b)ÚEspanaÚPoloniaúUnited KingdomÚLatino)gzLA 1zLA 1 CANARIASzTVE 1ÚTVE1ÚLA1zLA 2zTVE 2ÚTVE2ÚLA2zANTENA 3ÚANTENA3ÚCUATROÚ	TELECINCOzTELE 5ÚTELE5zLA SEXTAÚLASEXTAÚLA6ÚNEOXÚNOVAÚMEGAÚ
ATRESERIESÚFDFzFACTORIA DE FICCIONÚDIVINITYÚENERGYzBE MADÚBEMADÚTRECEÚDMAXÚ	PARAMOUNTÚTV3ÚETBÚTVGz	CANAL SURz	ARAGON TVÚ
TELEMADRIDu   Ã€ PUNTÚCMMz
TV CANARIAÚIB3ÚTPAÚ7TVzCANAL 24 HORASz24 HORASÚCNNÚEURONEWSÚ	BLOOMBERGz	FRANCE 24úSKY NEWSÚMOVISTARzM+z	M. LALIGAz	LALIGA TVz	AXN WHITEÚAXNzCALLE 13ÚSYFYÚWARNERzCOMEDY CENTRALÚAMCÚFOXÚTCMÚ	HOLLYWOODÚSUNDANCEÚSOMOSÚCINEMAXÚCOSMOÚDARKÚXTRMzPARAMOUNT NETWORKzNATIONAL GEOGRAPHICzNAT GEOÚ	DISCOVERYÚODISEAzHISTORY CHANNELÚHISTORYzANIMAL PLANETzCRIME INVESTIGATIONÚBLAZEzCANAL HISTORIAzCANAL COCINAÚCOCINAÚDECASAzCANAL DECASAÚVIAJARÚTRAVELr8   ÚCLANzDISNEY CHANNELzDISNEY JUNIORÚBOINGzBABY TVzNICK JRÚNICKELODEONÚTELEDEPORTEÚ	EUROSPORTzGOL PLAYzGOL TVÚDAZNzSPORT TVzREAL MADRID TVzBARCA TV)zTVP 1zTVP 2zTVP 3ÚTVPzTVN 24ÚTVN7ÚTVNzPOLSAT NEWSzPOLSAT SPORTÚPOLSATÚTTVÚTV4ÚTV6)zBBC ONEzBBC TWOz	BBC THREEzBBC FOURzBBC NEWSÚBBCzITV 1zITV 2zITV 3zITV 4ÚITVz	CHANNEL 4z	CHANNEL 5rI   zSKY ONEzSKY ATLANTICzSKY MAXÚSKYz(group-title=")[^"]*(")c                 óš   • [         R                  U 5      (       a  [         R                  SU-   S-   U SS9$ U R                  SSU S3S5      $ )Nz\g<1>z\g<2>r	   )Úcountz
#EXTINF:-1z#EXTINF:-1 group-title="Ú")ÚRE_GROUPÚsearchÚsubÚreplace)Úextinf_lineÚnombre_grupos     r#   Únormalizar_grupory   H  sa   € ä‡��{×#Ñ#ä�|‰|Ø�|Ñ# hÑ.ØØð ð 
ð 	
ð ×ÑØØ
" < .°Ð2Ø	óð ó    c                 ón   • U R                  5       nSU;   a  gSU;   a  gUR                  S5      (       a  gg)Nz/movie/Fz/series/)z.mp4z.mkvz.aviz.mp3z.movz.flvT)ÚlowerÚendswith)ÚurlÚ	url_lowers     r#   Úes_canal_en_vivor€   ]  sC   € à—	‘	“€Ià�IÓØà�YÓØà×Ñð	
÷	ñ 	ð àrz   c                 óü  • U R                  5       n[        R                  U5      (       a  gSU ;   a$  U R                  SS5      S   R	                  5       nOU R	                  5       n[
        R                  " SU[
        R                  5      (       a_  [
        R                  " SSU[
        R                  S9R	                  5       n[
        R                  " SU[
        R                  5      (       a  g[        R                  U5      (       a  g	[        R                  U5      (       a  g
[        R                  5        H?  u  p4U H4  n[
        R                  " UU[
        R                  5      (       d  M0  Us  s  $    MA     g )NÚMotorÚ,r	   ú^ES\s*[:|]\s*Ú ©ÚflagszH\bMOVISTAR\b|M\+|^M\.\s*(?:LALIGA|DEPORTES|VAMOS|ESTRENOS|CINE|SERIES)\búMovistar Plus+ÚF1ÚFutbol)ÚupperÚPATRON_ADULTrt   Úrsplitr   ÚreÚmatchÚ
IGNORECASEru   Ú	PATRON_F1ÚPATRON_FUTBOLÚGRUPOS_PAISÚitems)rw   ÚtextoÚnombre_movistarrx   ÚpatronesÚpatrons         r#   Úobtener_categoriar™   z  s@  € à×ÑÓ€Eô ×Ñ˜5×!Ñ!Øð ˆkÓØ%×,Ñ,¨S°!Ó4°QÑ7×=Ñ=Ó?‰à%×+Ñ+Ó-ˆô 
‡x‚xÐ  /´2·=±=×AÑAäŸ&š&ØØØÜ—-‘-ñ	
÷
 ‰%‹'ð 	ô �9Š9ØWØÜ�M‰M÷
ñ 
ð
 $ô
 ×Ñ˜×ÑØô ×Ñ˜E×"Ñ"Øô #.×"3Ñ"3Ö"5ÑˆãˆFä�yŠyØØÜ—‘÷ó ð
 $Ô#ó ñ #6ð rz   c                 ó²  • SU ;   a$  U R                  SS5      S   R                  5       nOU R                  5       nUR                  5       n[        R                  " SSU5      R                  5       n[        U5       HX  u  pEUR                  5       nX6:X  a  Us  $ [        R                  " S[        R                  " U5      -   S-   U5      (       d  MV  Us  $    g)Nrƒ   r	   r„   r…   Ú^z"(?:\s+(?:FHD|UHD|HD|SD|4K|HEVC))?$éç  )r�   r   r‹   rŽ   ru   Ú	enumerater�   Úescape)rw   Úlista_prioridadesÚnombre_canalÚnombre_upperÚindicer˜   Úpatron_uppers          r#   Úobtener_peso_ordenr¤   Ã  sÔ   € ð
 ˆkÓØ"×)Ñ)¨#¨qÓ1°!Ñ4×:Ñ:Ó<‰à"×(Ñ(Ó*ˆà×%Ñ%Ó'€Lô —6’6ØØ
Øó÷ �eƒgð	 ô $Ð$5Ö6‰ˆà—|‘|“~ˆð Ó'ØŠMô �8Š8Ø”2—9’9˜\Ó*Ñ*Ø1ñ2à÷
ó 
ð
 ŠMñ) 7ð. rz   c                 óº  • U S   nUR                  SS5      S   R                  5       R                  5       n[        R                  " SSU[        R
                  S9R                  5       nSR                  S [        R                  " S	U5       5       5      n/ S
Qn[        R                  " SU5      (       a  SSSU4$ [        U5       H(  u  pE[        R                  " XR5      (       d  M"  USSU4s  $    [        R                  " SU5      (       Ga  [        R                  " SU5      (       a  SSSU4$ [        R                  " SU5      (       aV  [        R                  " SU5      nU(       a0  UR                  S5      (       a  [        UR                  S5      5      OSnSUSU4$ [        R                  " SU5      (       a  SSSU4$ [        R                  " SU5      nU(       a!  SS[        UR                  S5      5      -   SU4$ [        R                  " SU5      (       a  SSSU4$ SSSU4$ [        R                  " SU5      (       a@  [        R                  " SU5      nU(       a  [        UR                  S5      5      OSnSUSU4$ [        R                  " SU5      (       a  SSSU4$ [        R                  " SU5      (       a  SSSU4$ [        R                  " SU5      (       aV  [        R                  " SU5      nU(       a0  UR                  S5      (       a  [        UR                  S5      5      OSnSUSU4$ [        R                  " S U5      (       aV  [        R                  " S!U5      nU(       a0  UR                  S5      (       a  [        UR                  S5      5      OSnS"USU4$ [        R                  " S#U5      (       aV  [        R                  " S$U5      nU(       a0  UR                  S5      (       a  [        UR                  S5      5      OSnS%USU4$ [        R                  " S&U5      (       aV  [        R                  " S'U5      nU(       a0  UR                  S5      (       a  [        UR                  S5      5      OSnS(USU4$ [        R                  " S)U5      (       aV  [        R                  " S*U5      nU(       a0  UR                  S5      (       a  [        UR                  S5      5      OSnS+USU4$ [        R                  " SU5      (       aV  [        R                  " SU5      nU(       a0  UR                  S5      (       a  [        UR                  S5      5      OSnSUSU4$ [        R                  " S,U5      (       a  S-SSU4$ / S.Qn[        U5       H(  u  pE[        R                  " XR5      (       d  M"  S/USU4s  $    S0SSU4$ )1Nr   rƒ   r	   éÿÿÿÿr„   r…   r†   c              3   ó^   #   • U  H#  n[         R                  " U5      S :w  d  M  Uv •  M%     g7f)ÚMnN)ÚunicodedataÚcategory)Ú.0Úcs     r#   Ú	<genexpr>Ú'clave_orden_movistar.<locals>.<genexpr>ó  s,   é € ð Ú7ˆaÜ×Ò Ó" dÑ*÷ 	
‰Ò7ùs   ‚-¤	-ÚNFD)z(\bM\+\s*PLUS(?!\s*2)\+?\b|\bM\.\s*PLUS\bz\bORIGINALES?\bz\bESTRENOS?(?:\s+2)?\bz\bDOCUMENTALES?\bz	\bINDIE\bz
\bACCION\bz\bCOMEDIA\bz\bCINE\s+ESPANOL\bz	\bDRAMA\bz\bCLASICOS?\bz	\bHITS?\bz\bROMANCE\bz
\bOTROS?\bz\bM\+\s*PLUS\+?\s*2\bz!\bLALIGA\b|\bLA\s+LIGA\b|\bLIGA\bz\bHYPERMOTION\bé   z5\bLIGA\s+DE\s+CAMPEONES\b|\bCHAMPIONS\b|\bLCAMPEONS\bz6(?:LIGA\s+DE\s+CAMPEONES|CHAMPIONS|LCAMPEONS)\s*(\d+)?é(   z-\bLALIGA\s*2\b|\bLA\s+LIGA\s*2\b|\bLIGA\s*2\bé   z\bLALIGA\s*TV\s*(\d+)r   z\bLALIGA\s*TV\b|\bLALIGATV\bé   z\bM\s*(\d+)\bz\bCOPA\s+DEL\s+REY\bé   z\bPRIMERA\s+FEDERACION\bé   z\bCOPA\s+AMERICA\bz\bCOPA\s+AMERICA\s*(\d+)?é   z\bGOLF\bz\bGOLF\s*(\d+)?é   z	\bVAMOS\bz\bVAMOS\s*(\d+)?é   z\bBALONCESTO\bz\bBALONCESTO\s*(\d+)?é   z\bDEPORTES?\bz\bDEPORTES?\s*(\d+)?é   z\bCERO\bé   )	z\bDAZN\bz2\bMOVISTAR\s+(?:SPORT|DEPORTES|LALIGA|CHAMPIONS)\bú
\bFUTBOL\br¼   z	\bMOTOR\bz\bFORMULA\s*1\b|\bF1\bz\bEUROSPORT\bz\bLALIGA(?:TV)?\s*BAR\bz\bVAMOS\s*BAR\bé2   rœ   )r�   r   r‹   rŽ   ru   r�   Újoinr©   Ú	normalizert   r�   ÚgroupÚint)	Úcanalrw   ÚnombreÚ	tematicosÚ	prioridadr˜   ÚmÚnÚotros_deportess	            r#   Úclave_orden_movistarrÉ   ï  sØ  € Ø˜‘(€KØ×Ñ  QÓ'¨Ñ+×1Ñ1Ó3×9Ñ9Ó;€FÜ�VŠVÐ$ b¨&¼¿¹ÑF×LÑLÓN€FØ�W‰Wñ Ü×(Ò(¨°Ô7óó €Fò€Iô" 
‡y‚yÐ)¨6×2Ñ2Ø�1�a˜Ð Ð ä& yÖ1Ñˆ	Ü�9Š9�V×$Ó$Ø˜q ! VÐ,Ò,ñ 2ô
 
‡y‚yÐ5°v×>Ò>Ü�9Š9Ð'¨×0Ñ0Ø˜˜1˜fÐ%Ð%ä�9Š9ÐMÈv×VÑVÜ—	’	ÐSÐU[Ó\ˆAÞ#$¨¯©°¯©”�A—G‘G˜A“J”¸ˆAØ˜˜1˜fÐ%Ð%ä�9Š9ÐEÀv×NÑNØ˜˜1˜fÐ%Ð%ä�IŠIÐ.°Ó7ˆÞØ˜œS §¡¨£›_Ñ,¨a°Ð8Ð8ä�9Š9Ð4°f×=Ñ=Ø˜˜1˜fÐ%Ð%à�A�q˜&Ð!Ð!ô 
‡y‚yÐ# V×,Ñ,Ü�IŠIÐ&¨Ó/ˆÞ ŒC�—‘˜“
ŒO aˆØ�A�q˜&Ð!Ð!ô 
‡y‚yÐ(¨&×1Ñ1Ø�A�q˜&Ð!Ð!ä	‡y‚yÐ,¨f×5Ñ5Ø�A�q˜&Ð!Ð!ä	‡y‚yÐ&¨×/Ñ/Ü�IŠIÐ2°FÓ;ˆÞ  Q§W¡W¨Q§Z¡ZŒC�—‘˜“
ŒO°QˆØ�A�q˜&Ð!Ð!ô 
‡y‚y�˜f×%Ñ%Ü�IŠIÐ(¨&Ó1ˆÞ  Q§W¡W¨Q§Z¡ZŒC�—‘˜“
ŒO°QˆØ�A�q˜&Ð!Ð!ô 
‡y‚y�˜v×&Ñ&Ü�IŠIÐ)¨6Ó2ˆÞ  Q§W¡W¨Q§Z¡ZŒC�—‘˜“
ŒO°QˆØ�A�q˜&Ð!Ð!ô 
‡y‚yÐ" F×+Ñ+Ü�IŠIÐ.°Ó7ˆÞ  Q§W¡W¨Q§Z¡ZŒC�—‘˜“
ŒO°QˆØ�A�q˜&Ð!Ð!ô 
‡y‚yÐ! 6×*Ñ*Ü�IŠIÐ-¨vÓ6ˆÞ  Q§W¡W¨Q§Z¡ZŒC�—‘˜“
ŒO°QˆØ�A�q˜&Ð!Ð!ô 
‡y‚yÐIÈ6×RÑRÜ�IŠIÐOÐQWÓXˆÞ  Q§W¡W¨Q§Z¡ZŒC�—‘˜“
ŒO°QˆØ�A�q˜&Ð!Ð!ä	‡y‚y�˜f×%Ñ%Ø�A�q˜&Ð!Ð!ò
€Nô ' ~Ö6Ñˆ	Ü�9Š9�V×$Ó$Ø˜	 1 fÐ-Ò-ñ 7ð
 ��A�vÐÐrz   c                 óx  • SU ;   a$  U R                  SS5      S   R                  5       nOU R                  5       n[        R                  " SSU[        R                  S9R                  5       n[        R                  " SSU5      n[        R                  " SS	 U[        R                  S9nUR                  5       $ )
zµ
Genera una clave normalizada para detectar duplicados.

Mantiene separadas las distintas calidades:
LA 1 FHD
LA 1 HD
LA 1 SD

Pero elimina duplicados exactos como:
LA 1 HD
LA 1 HD
rƒ   r	   z^(ES|PL|UK|GB)\s*:\s*r…   r†   z\s+Ú z\s+(FHD|UHD|HD|SD|4K|HEVC)\s*$c                 óF   • SU R                  S5      R                  5       -   $ )NrË   r	   )rÀ   r‹   )rÆ   s    r#   Ú<lambda>Ú!clave_duplicado.<locals>.<lambda>“  s   € �#˜Ÿ™ ›
×(Ñ(Ó*Ò*rz   )r�   r   rŽ   ru   r�   r‹   )rw   rÃ   s     r#   Úclave_duplicadorÏ   n  s­   € ð ˆkÓØ×#Ñ# C¨Ó+¨AÑ.×4Ñ4Ó6‰à×"Ñ"Ó$ˆô �VŠVØ Ø
ØÜ�m‰mñ	÷
 �eƒgð ô �VŠVØØØó€Fô �VŠVØ)Ù*ØÜ�m‰mñ	€Fð �<‰<‹>Ðrz   c                 óì   • SnU R                  5        H]  u  p#[        5       n/ nU HB  u  pgn[        U5      n	X”;   a  US-  nM  UR                  U	5        UR	                  UUU45        MD     XPU'   M_     U$ )Nr   r	   )r”   ÚsetrÏ   ÚaddÚappend)
Úcanales_por_categoriaÚeliminados_totalÚ	categoriaÚlista_canalesÚvistosÚcanales_limpiosÚextinfr~   Úfuenter   s
             r#   Úeliminar_duplicadosrÜ   š  s‘   € àÐà$9×$?Ñ$?Ö$AÑ ˆ	ä“ˆØˆã#0ÑˆF˜ä# FÓ+ˆEà‹Ø  AÑ%Ð Ùà�J‰J�uÔà×"Ñ"àØØðöñ $1ð$ ,;˜iÓ(ñ/ %Bð2 Ðrz   c                 ó  • US:w  a  [        U 5      $ [        R                  " SU [        R                  5      nU(       d  g UR	                  S5      R                  5       R                  5       nSSSSSSS.nUR                  U5      $ )Nr³   zgroup-title="([^"]*)"r	   r%   r&   r‚   )u   Ð¸Ñ�Ð¿Ð°Ð½Ð¸Ñ� | spainu   Ð¸Ñ�Ð¿Ð°Ð½Ð¸Ñ�|spainu   Ð¿Ð¾Ð»ÑŒÑˆÐ° | polandu   Ð¿Ð¾Ð»ÑŒÑˆÐ°|polandu   Ð²Ð·Ñ€Ð¾Ñ�Ð»Ñ‹ÐµÚxxx)r™   rŽ   rt   r�   rÀ   r   Úcasefoldr   )rw   Úindice_fuenterÆ   ÚgrupoÚ
categoriass        r#   Úobtener_categoria_fuenterã   ¹  s‡   € ð ˜ÓÜ  Ó-Ð-ô 	�	Š	Ø ØÜ
�‰ó	€Aö Øà�G‰G�A‹J×ÑÓ×'Ñ'Ó)€Eð #+Ø (Ø!*Ø(Ø#Øñ€Jð �>‰>˜%Ó Ð rz   c                 ób  • S nSnSnSnSnU R                  5        HÚ  n	U	(       d  M   U	R                  S5      R                  5       n
U
R	                  S5      (       a	  U
nUS-  nMK  U
R	                  S5      (       a  Mc  U
R	                  S	5      (       a  M{  U(       d  M„  US-  n[        U
5      (       a?  [        UU5      nX±;   a)  [        UU5      nUU   R                  UU
U45        US-  nOUS-  nS nMÜ     UUUUS
.X#'   g ! [         a!    U	R                  SSS9R                  5       n
 Næf = f)Nr   r   zlatin-1rv   )Úerrorsz#EXTINFr	   z
#EXTVLCOPTÚ#©rÚ   ÚurlsÚ	guardadosÚdescartados)	Ú
iter_linesÚdecoder   ÚUnicodeDecodeErrorÚ
startswithr€   rã   ry   rÓ   )r   rÔ   Úcontador_por_fuenterà   Úpending_extinfÚtotal_extinfÚ
total_urlsÚtotal_guardadosÚtotal_descartadosÚlineÚline_strrÖ   Úextinf_modificados                r#   Úprocesar_respuestarø   Û  s{  € ð €Nà€LØ€JØ€OØÐà—‘–ˆæÙð	à—{‘{Øóç‰e‹gð ð ×Ñ˜y×)Ñ)à%ˆNà˜AÑˆLáð ×Ñ˜|×,Ñ,áð ×#Ñ# C×(Ó(ß�ð ˜!‰OˆJä ×)Ñ)ä4Ø"Ø!ó�	ð
 Ó5ä(8Ø&Ø!ó)Ð%ð
 *Ø!ñç‘fà-Ø$Ø)ðôð $ qÑ(‘Oð &¨Ñ*Ð%à!ŠNñg ðv ØØ$Ø(ñ*ÐÒ&øôU "ó 	à—{‘{ØØ ð #ð ÷ ‰e‹gò ð	ús   ¨DÄ(D.Ä-D.c            
      ó   • [         R                  " 5       n / nSSS.n/ / / / / / / / S.n0 n/ n[        5         [        S5        [        S5        [        S5        [        [        SS9 GH©  u  pg[        5         [        S	5        [        S
U 35        [        S	5        Sn[        SS5       GH8  n	U H%  n
X:    Vs/ s H  nUS   U:w  d  M  UPM     snX:'   M'     SSSSS.XF'    [        SU SU	 S35        [        R                  " USSUS9 nUR                  5         [        SUR                   35        [        SUR                  R                  SS5      5        [        UUUU5        S S S 5        XF   n[        5         [        SUS    35        [        SUS    35        [        SUS    35        [        S US!    35        SnU	S:”  a  UR                  S"U S#U	 S$35          O   U(       a  GM‰  UR                  U5        [        S+U S,35        GM¬     [        5         [        S-5        [        U5      n[        S.U 35        US/   R!                  S0 S19  US2   R!                  ["        S19  US3   R!                  S4 S19  US5   R!                  S6 S19  U(       a`  [        5         [        S7U5        [        S85        [%        [         R                  " 5       U -
  5      nS9U S:US;-   S<US;-   S=3n['        U5        g Sn[        5         [        S>5        [)        [*        S?S@SA9 nUR-                  SB5        UR/                  5        H@  u  n
nU H4  u  nnnUR-                  USC-   5        UR-                  USC-   5        US-  nM6     MB     S S S 5        [        5         [        S5        [        SD5        [        SE[*         35        [        SFU 35        [        S5        [        5         [        SG5        [        S	5        [        [        SS9 Hy  u  pgUR                  USSSSS.5      n[        5         [        S"U SH35        [        SIUS    35        [        SJUS    35        [        SKUS    35        [        SLUS!    35        M{     [        5         [        SM5        [        S	5        UR/                  5        H"  u  n
n[        U
SN SO[1        U5      SP SQ35        M$     [        5         [        SR5        [        S	5        UR/                  5        H@  u  n
n[3        SS U 5       5      n[3        ST U 5       5      n[        U
SN SUUSV SWUSV 35        MB     [        5         [        S5        [%        [         R                  " 5       U -
  5      nSXSYU 3S.U 3SZUS;-   S<US;-   S=3S[SG/n[        S[1        [        5      S-   5       H=  nUR                  U0 5      nUR                  S"U SOUR                  SS5       S\35        M?     U(       a$  UR5                  S[S]/5        UR5                  U5        ['        S^R7                  U5      5        g s  snf ! , (       d  f       GNå= f! [         a›  n[        5         [        S%U S&U	 S'35        [        U5        U H+  n
X:    Vs/ s H  nUS   U:w  d  M  UPM     Os  snf snX:'   M-     SSSSS.XF'   U	S(:  a(  [        S)5        [         R                  " S*5         S nAGMH   S nAGMO  S nAff = f! , (       d  f       GN‚= f)_NzkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0 Safari/537.36z*/*)z
User-AgentÚAccept)r%   rˆ   r&   r'   r(   rŠ   r‰   r‚   zA=================================================================u&    IPTV - PROCESANDO MÃšLTIPLES FUENTES r	   )ÚstartzA-----------------------------------------------------------------zFUENTE Fé   é   r   rç   zDescargando fuente z
 (intento z/3)...T)é   é´   )Ústreamr   ÚheaderszHTTP: zContent-Type:zcontent-typeÚdesconocidou   EXTINF leÃ­dos:     rÚ   zURLs encontradas:  rè   zCanales guardados: ré   zDescartados:       rê   zFuente z
: intento z/3zERROR en fuente z
, intento z/3:r³   zNuevo intento en 10 segundos...r   zERROR: fuente u    fallÃ³ tras 3 intentos.zEliminando duplicados...zDuplicados eliminados: r%   c                 óN   • [        U S   [        5      U S   R                  5       4$ ©Nr   )r¤   ÚORDEN_ESPANAr‹   ©rÂ   s    r#   rÍ   Úfiltrar.<locals>.<lambda>  s)   € ÜØ�a‘Üóð �!‰H�N‰NÓñ
rz   )Úkeyrˆ   r&   c                 óN   • [        U S   [        5      U S   R                  5       4$ r  )r¤   ÚORDEN_POLONIAr‹   r  s    r#   rÍ   r    s)   € ÜØ�a‘Üóð �!‰H�N‰NÓñ
rz   r'   c                 óN   • [        U S   [        5      U S   R                  5       4$ r  )r¤   ÚORDEN_UKr‹   r  s    r#   rÍ   r  /  s)   € ÜØ�a‘Üóð �!‰H�N‰NÓñ
rz   z!ERROR: Han fallado estas fuentes:zSe conserva la lista anterior.u5   â�Œ IPTV - ERROR DE ACTUALIZACIÃ“N
Fuentes fallidas: u+   
Se conserva la lista anterior.
DuraciÃ³n: é<   z min z szEscribiendo lista final...Úwr   r   z#EXTM3U
Ú
zLISTA GENERADA CORRECTAMENTEz	Archivo: zTotal de canales: zRESUMEN POR FUENTEÚ:z  EXTINF:       z  URLs:         z  Guardados:    z  Descartados:  u   RESUMEN POR CATEGORÃ�AÚ20sz: Ú6dz canalesu    DESGLOSE POR CATEGORÃ�A Y FUENTEc              3   ó<   #   • U  H  u    pUS :X  d  M  S v •  M     g7f)r	   N© ©r«   Ú_rÛ   s      r#   r­   Úfiltrar.<locals>.<genexpr>Ï  ó$   é € ð 
â %‘��1Ø˜‰{÷ ‰AÚ %ùó   ‚“	c              3   ó<   #   • U  H  u    pUS :X  d  M  Sv •  M     g7f)rý   r	   Nr  r  s      r#   r­   r  Õ  r  r  z: Fuente 1 = Ú5dz | Fuente 2 = u"   âœ… IPTV - ACTUALIZACIÃ“N CORRECTAzCanales totales: u   DuraciÃ³n: r…   z canales guardadosu+   âš ï¸� Fuentes recuperadas tras reintentos:z\n)ÚtimeÚ	monotonicr   r�   ÚFUENTESÚranger   r   r   Ústatus_coder  rø   rÓ   r   ÚsleeprÜ   ÚsortrÉ   rÁ   r$   r   ÚARCHIVO_SALIDAÚwriter”   ÚlenÚsumÚextendr¾   )ÚinicioÚreintentos_fuentesr  rÔ   rï   Úfallos_fuentesÚiÚ
url_fuenteÚexitoÚintentorÖ   rÂ   r   ÚdatosÚeÚduplicados_eliminadosÚduracionr   Útotalr   r×   rÚ   r~   rÛ   ÚlistaÚfuente_1Úfuente_2s                              r#   Úfiltrarr7  P  s  € ä�^Š^Ó€FØÐð
)ð ñ€Gð( ØØØØØØØñÐð ÐØ€Nô 
„GÜ	ˆ(„OÜ	Ð
2Ô3Ü	ˆ(„Oô #ÜØõ‰ˆô
 	ŒÜˆhŒÜ�˜�sˆmÔÜˆhŒàˆä˜Q —{ˆGó 3�	à'<Ò'Gó4Ú'G˜eØ˜Q‘x 1‘}÷ Ñ'Gñ4Ð%Ó0ñ 3ð ØØØ ñ	&ÐÑ"ðC#ÜØ)¨!¨ð - Ø '˜y¨ð0ôô
 —\’\ØØØ%Ø#ò	ð
 à×&Ñ&Ô(ä˜F 1§=¡= /Ð2Ô3ÜØ'ØŸ	™	Ÿ™ n°mÓDôô
 'ØØ-Ø+Øô	÷ð, ,Ñ.�ä”ÜÐ,¨U°8©_Ð,=Ð>Ô?ÜÐ+¨E°&©M¨?Ð;Ô<ÜÐ+¨E°+Ñ,>Ð+?Ð@ÔAÜÐ+¨E°-Ñ,@Ð+AÐBÔCà�Ø˜Q“;Ø&×-Ñ-Ø! !  J¨w¨i°rÐ:ôñ ñs #÷j ‰uØ×!Ñ! !Ô$Ü�N 1 #Ð%=Ð>×?ñGôP 
„GÜ	Ð
$Ô%ä/ØóÐô 
Ø
!Ð"7Ð!8Ð9ôð Øñç
�dñ
ð ñ ð  Ð*Ñ+×0Ñ0Ü ð 1ñ ð Øñç
�dñ
ð ñ ð Øñç
�dñ
ð ñ ö ÜŒÜÐ1°>ÔBÜÐ.Ô/ä”t—~’~Ó'¨&Ñ0Ó1ˆð!Ø!/Ð 0ð 1à" b™.Ð)¨¨x¸"©}¨o¸RðAð 	ô 	˜Ô Øð
 €Eä	„GÜ	Ø$ôô 
ÜØØò
ð 
à	�‰Øô	
ð
 "×'Ñ'Ö)ñ %ˆI�}ó (5Ñ#�˜˜Và—‘Ø˜T‘Môð —‘Ø˜$‘Jôð ˜‘
’ó (5ñ *÷
ô> 
„GÜ	ˆ(„Oä	Ø&ôô 
Ø
”NÐ#Ð$ôô 
Ø
˜U˜GÐ$ôô 
ˆ(„Oô 
„GÜ	Ð
ÔÜ	ˆ(„Oä"ÜØô‰ˆð
 $×'Ñ'ØàØØØ ñ	ó
ˆô 	ŒÜØ�a�S˜ˆNô	
ô 	Ø˜u X™Ð/Ð0ô	
ô 	Ø˜u V™}˜oÐ.ô	
ô 	Ø˜u [Ñ1Ð2Ð3ô	
ô 	Ø˜u ]Ñ3Ð4Ð5ö	
ñAôR 
„GÜ	Ð
"Ô#Ü	ˆ(„Oð 	×#Ñ#Ö%ñ 	ˆ	�5ô 	Ø˜ˆo˜RÜ�5‹z˜"ˆo˜Xð'ö	
ñ 	&ô 
„GÜ	Ð
,Ô-Ü	ˆ(„Oð 	×#Ñ#Ö%ñ 	ˆ	�5ô ñ 
á %ó
ó 
ˆô ñ 
á %ó
ó 
ˆô 	Ø˜ˆoð Ø" 2˜ð 'Ø" 2˜ð(ö	
ñ 	&ô, 
„GÜ	ˆ(„Oô ”4—>’>Ó# fÑ,Ó-€Hð 	-Ø
˜E˜7Ð#Ø
!Ð"7Ð!8Ð9Ø
�h "‘nÐ% U¨8°b©=¨/¸Ð<Ø
Øð€Gô �1”cœ'“l QÑ&Ö'ˆØ#×'Ñ'¨¨2Ó.ˆØ�‰Ø�a�S˜˜5Ÿ9™9 [°!Ó4Ð5Ð5GÐHö	
ñ (ö Ø�‰ØØ9ð
ô 	ð 	�‰Ð)Ô*ä�E—J‘J˜wÓ'Õ(ùòW4÷$ö ûôJ ó #Ü”ÜØ& q cð *Ø&˜i sð,ôô �a”ó "7�Ià+@Ò+Kó8Ú+K %Ø  ™8 q™=÷ Ò+Kùô8Ð)Ó4ñ "7ð  ØØ!"Ø#$ñ	*Ð#Ñ&ð ˜Q“;ÜÐ;Ô<Ü—J’J˜r—N“Nö ûð-#ú÷J
ö 
ús]   Â6X?
ÃX?
Ã )YÄ	AYÅ&A:YÌA&[>Ù
YÙYÙ
[;Ù 2[6ÚZ*Ú#Z*Ú)?[6Û6[;Û>
\Ú__main__)r   r©   rŽ   r  r  r#  r$   Úcompiler�   r’   r‘   rŒ   r“   r  r
  r  rs   ry   r€   r™   r¤   rÉ   rÏ   rÜ   rã   rø   r7  Ú__name__r  rz   r#   Ú<module>r;     s  ðã Û Û 	Û ò€ð 5€ò#ðV —
’
ðKð ‡M�Mó€ð �JŠJð/à‡M�Mó€	ð �zŠzðMà‡M�Mó€òòò	ò
ñ?*€òhz€ò~€ò*€ð4 �:Š:ØØ‡M�Mó€òò*ò:BòR*òX}ò~*òXò>!òDnòjr)ðr ˆzÓá…Ið rz   