Ë
    òMÑjã†  ã                   óp  — U d Z ddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZmZmZmZmZ dZdZdZdZg d	¢Z	 ddlZdd
lmZ dZdZdZ dZ!dZ"dZ#e#fde$de$ddfd„Z%ejL                  jO                  ejL                  jQ                  e)«      «      Z*e*ejL                  vrejL                  jW                  de*«       ejL                  jY                  e*d«      Z-ejL                  jY                  e*d«      Z.	 ddl/Z/i Z2da3d„ Z4i a5da6d„ Z7dede8fd„Z9dJd e:d!e;de;fd"„Z<d#e:de:fd$„Z=dKd%ee:   d&e$de:fd'„Z>i a?ee$ee$ee$ef   f   f   e@d(<   dee$   fd)„ZAdLd*e$d+e$d,eee$e$f      deee$   ee$ef   f   fd-„ZBdKd.e$d/e$d0e:d1e$de:f
d2„ZCdMd.e$d!e;d3e;de;fd4„ZDd5e$deEfd6„ZFdaGeej�                     e@d7<   dej�                  fd8„ZId.e$de;fd9„ZJd:„ ZKd;„ ZLd<„ ZMd=„ ZNd>„ ZOd?„ ZPd@„ ZQeRdAk(  r¸dBZS e%dCeS› dD�e!«        e4«         eN«       \  ZTZUdZVejL                  j¯                  eT«      r]ejL                  j¯                  eU«      rB	  e	j°                  e	j²                  j´                  «      ZVeVj·                  eTeU«        e%dEe«       	  ej¸                   eQ«       dGeSeVd¬H«       yy# e$ r   edd¬«        ej:                  d«       Y �Œrw xY w# e0$ rZ1dZ/ e%de1› �e«       Y dZ1[1�ŒÜdZ1[1ww xY w# e0$ rZ1 e%dFe1› �e «       dZVY dZ1[1Œ€dZ1[1ww xY w# e]$ r  e%dIe«        ej:                  d«       Y yw xY w)Naì  
====================================================================
 DAZN - Local HTTPS Proxy (aiohttp)
 Proxy locale ad alte prestazioni:
 - MPD caldo in RAM (~2s) solo sui canali in play
 - Token CDN sticky: stesso edge fino a scadenza/403 (niente swap ogni 200s)
 - Live delay 8s, 404 restano 404 (niente 50202 sul player)
 - Segmenti in streaming + retry su timeout/401
 - Patch ClearKey per VLC, mpv, Kodi, TiviMate
====================================================================
é    N)Údatetime)ÚOptionalÚDictÚListÚTupleÚAnyç       @zPT8.0Sg     €V@iÜ  )zdca-deit-livezdcb-deit-livezdca-de-livezdcb-de-livezdcg-de-liveÚdeitÚdezdca-fs-livezdcb-fs-livezdcs-fs-livezdct-fs-liveÚfszdca-ac-livezdcb-ac-livezdcs-ac-livezdct-ac-liveÚaczdcb-ak-livezdcs-ak-livezdct-ak-liveÚak)Úwebu>   ERRORE: aiohttp non Ã¨ installato. Esegui: pip install aiohttpT©Úflushé   z[32mz[33mz[31mz[36mz[35mz[0mÚmsgÚcolorÚreturnc                 ó`   — t        |› dt        j                  d«      › d| › t        › �d¬«       y )NÚ[z%H:%M:%Sz
] [PROXY] Tr   )ÚprintÚtimeÚstrftimeÚRESET)r   r   s     ú9C:\Users\Claud\Documents\ScriptNowTest\dazn\dazn_proxy.pyÚlogr   7   s+   € Ü	ˆUˆG�1”T—]‘] :Ó.Ð/¨z¸#¸¼u¸gÐ
FÈdÖSó    zdazn_proxy_data.jsonzdazn_config.jsonzAttenzione import dazn: c            	      ó�  — t         j                  j                  t        «      �rÌ	 t         j                  j	                  t        «      } | t
        kD  �r˜t        t        dd¬«      5 }t        j                  |«      }|j                  dg «      }|D �]M  }|j                  d«      }|sŒ|j                  d«      dk(  rŒ-|t        v�rµ|j                  d«      }d	}|r;	 t        j                  |«      }t        j                  «       |z
  j                  «       }t         j"                  j%                  |j                  d
d«      «      }	|	j                  r|	j                  j'                  dd«      d   nd}
|	j(                  r|	j*                  › d|	j(                  › |
› d�nd}i d|“d|j                  dd«      “d|“d
|j                  d
d«      “d|“d|	j,                  “d|j                  di «      “d|j                  dd«      “d|j                  dd«      “d|j                  dd«      “dt/        j.                  «       t1        d|«      z
  “dd “dd“dd“dd“dg “dd “d t3        j4                  «       i¥t        |<   �Œët        |   }|j                  d|d   «      |d<   |j                  d|d   «      |d<   |j                  d|j                  dd«      «      |d<   ||d<   �ŒP 	 d d d «       | at        S t        S # t        $ r Y �Œîw xY w# 1 sw Y   Œ'xY w# t        $ r)}t7        d!t        › d"|› �t8        «       Y d }~t        S d }~ww xY w)#NÚrúutf-8©ÚencodingÚchannelsÚidÚsourceÚseriea_radioÚextracted_atg     8�@Úbase_manifest_urlÚ Ú/r   r   ú://ÚnamezDAZN ChannelÚraw_channelÚbase_cdn_urlÚ
base_queryÚ	cdn_tokenÚcdn_nameÚ
key_stringÚlast_cdn_refreshç        Ú
cached_mpdÚcached_mpd_timeÚlast_sync_logÚlast_requestedÚcdn_alternatesÚ_refresh_taskÚlockzErrore lettura ú: )ÚosÚpathÚexistsÚCHANNELS_FILEÚgetmtimeÚ_channels_mtimeÚopenÚjsonÚloadÚgetÚCHANNEL_STATESr   ÚfromisoformatÚnowÚtotal_secondsÚ	ExceptionÚurllibÚparseÚurlparseÚrsplitÚnetlocÚschemeÚqueryr   ÚmaxÚasyncioÚLockr   ÚRED)ÚmtimeÚfÚdatar$   ÚchÚcidÚext_atÚinitial_ageÚdtÚparsed_baseÚ	base_pathÚbase_cdnÚstateÚes                 r   Úload_channels_from_diskre   M   so  € ä	‡w�w‡~�~”mÕ$ð8	=Ü—G‘G×$Ñ$¤]Ó3ˆEØ”Ó&Üœ-¨°wÕ?À1ÜŸ9™9 Q›<�DØ#Ÿx™x¨
°BÓ7�HÜ&˜Ø Ÿf™f T›l˜Ù"Ø$ØŸ6™6 (Ó+¨~Ò=Ø$Ø¤nÒ4à%'§V¡V¨NÓ%;˜FØ*/˜KÙ%ð!)Ü)1×)?Ñ)?ÀÓ)G BÜ3;·<±<³>ÀBÑ3F×2UÑ2UÓ2W Kô +1¯,©,×*?Ñ*?ÀÇÁÐGZÐ\^Ó@_Ó*`˜KØNY×N^ÒN^¨×(8Ñ(8×(?Ñ(?ÀÀQÓ(GÈÒ(JÐdf˜IØep×ewÒew¨+×*<Ñ*<Ð)=¸SÀ×ASÑASÐ@TÐU^ÐT_Ð_`Ñ'aÐ}˜Hð3Ø $ cð3à &¨¯©¨v°~Ó(Fð3ð !.¨rð3ð !4°R·V±VÐ<OÐQSÓ5Tð	3ð
 !/°ð3ð !-¨k×.?Ñ.?ð3ð !,¨R¯V©V°KÀÓ-Dð3ð !+¨B¯F©F°:¸rÓ,Bð3ð !)¨"¯&©&°¸2Ó*>ð3ð !-¨b¯f©f°\À2Ó.Fð3ð !3´D·I±I³KÄ#ÀcÈ;ÓBWÑ4Wð3ð !-¨dð3ð !2°3ð3ð !0°ð3ð !1°#ð3ð  !1°"ð!3ð" !0°ð#3ð$ !'¬¯©«ñ%3œN¨3Ó/ô, %3°3Ñ$7˜EØ,.¯F©F°6¸5À¹=Ó,I˜E &™MØ24·&±&¸ÀuÈ\ÑGZÓ2[˜E ,Ñ/Ø.0¯f©f°X¸u¿y¹yÈÐSUÓ?VÓ.W˜E (™OØ35˜E -Ó0ñ_ '÷ @ðf #(�ô ÐŒ>ÐøôK (1ò !)Ú$(ð!)ú÷# @Ð?ûôh ò 	=Ü�/¤- °°1°#Ð6¼×<Ð<ÜÐûð	=úsU   ¦?L Á%A5LÃ:K7ÄGLË!
L Ë7	LÌ LÌLÌLÌLÌL Ì	MÌM Í Mc                  óî  — dddddddœ} t         j                  j                  t        «      r¡	 t         j                  j	                  t        «      }|t
        kD  rtt        t        dd	¬
«      5 }t        j                  |«      }|j                  di «      j                  di «      }|j                  «       D ]
  \  }}|| |<   Œ 	 d d d «       | a|at        rt        S | S # 1 sw Y   ŒxY w# t        $ r Y Œ%w xY w)Nzhttps://www.dazn.comzhttps://www.dazn.com/z}Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36 Edg/154.0.0.0zB"Chromium";v="154", "Microsoft Edge";v="154", "Not A(Brand";v="99"z?0z	"Windows")ÚOriginÚRefererz
User-Agentz	sec-ch-uazsec-ch-ua-mobilezsec-ch-ua-platformr    r!   r"   ÚdaznÚheaders)r>   r?   r@   ÚCONFIG_FILErB   Ú_headers_mtimerD   rE   rF   rG   ÚitemsÚ_headers_cacherL   )Údefault_headersrX   rY   ÚcfgÚhÚkÚvs          r   Úload_headersrt   Ž   så   € ð )Ø*ð VØYØ Ø)ñ€Oô 
‡w�w‡~�~”kÔ"ð	Ü—G‘G×$Ñ$¤[Ó1ˆEØ”~Ò%Üœ+ s°WÕ=ÀÜŸ)™) A›,�CØŸ™ ¨Ó+×/Ñ/°	¸2Ó>�AØ !§¡¦	™˜˜1Ø-.˜¨Ò*ñ !*÷ >ð
 "1�Ø!&�õ ,Œ>Ð@°Ð@÷ >Ð=ûô ò 	Ùð	ús*   ®>C( Á,ACÃC( ÃC%Ã!C( Ã(	C4Ã3C4r1   c                 ó   — t        | t        «      syt        | j                  d«      xs d«      }t	        j                  «       }t        j                  d|«      }|r8|j                  d«      s't        dt        |j                  d«      «      |z
  «      S |j                  d«      r—	 |j                  d«      d   d	d
t        |j                  d«      d   «      d
z  z
  d
z  z  z   }t        j                  t        j                   |«      «      }t#        |j                  d«      xs d«      }|rt        d||z
  «      S 	 t        j                  d|«      }|r't        dt        |j                  d«      «      |z
  «      S | j                  d«      }t        |t        t"        f«      r|dkD  rt#        t'        |t(        «      «      S y# t$        $ r Y Œ�w xY w)zESecondi rimanenti del token CDN. Akamai exp=unix, JWT exp, tend:unix.g      ^@ÚValuer*   z(?:^|[~&])exp=(\d+)ÚeyJg      .@r   Ú.Ú=é   Úexpr   g      >@z
tend:(\d+)ÚExpirySecondsg     Àr@)Ú
isinstanceÚdictÚstrrG   r   ÚreÚsearchÚ
startswithrT   ÚintÚgroupÚsplitÚlenrE   ÚloadsÚbase64Úurlsafe_b64decodeÚfloatrL   ÚminÚMAX_REFRESH_AGE_S)r1   ÚvalrJ   ÚmÚpadÚpayloadr{   Úexp_ss           r   Ú_token_ttl_secondsr’   ¨   s‡  € ä�i¤Ô&ØÜ
ˆi�m‰m˜GÓ$Ò*¨Ó
+€CÜ
�)‰)‹+€CÜ
�	‰	Ð(¨#Ó.€AÙ�—‘ Ô&Ü�4œ˜QŸW™W Q›Z›¨3Ñ.Ó/Ð/Ø
‡~�~�eÔð	Ø—)‘)˜C“. Ñ# c¨a´#°c·i±iÀ³nÀQÑ6GÓ2HÈ1Ñ2LÑ.LÐPQÑ-QÑ&RÑRˆCÜ—j‘j¤×!9Ñ!9¸#Ó!>Ó?ˆGÜ˜Ÿ™ EÓ*Ò/¨aÓ0ˆCÙÜ˜4  s¡Ó+Ð+ð ô 	�	‰	�- Ó%€AÙÜ�4œ˜QŸW™W Q›Z›¨3Ñ.Ó/Ð/Ø�M‰M˜/Ó*€EÜ�%œ#œu˜Ô&¨5°1ª9Ü”S˜Ô 1Ó2Ó3Ð3Øøô ò 	Ùð	ús   Â&BG Ç	GÇGrc   Úforcec                 ó@  — |ry| j                  d«      xs i j                  d«      sy| j                  d«      syt        | j                  d«      xs i «      }t        j                  «       t        | j                  d«      xs d«      z
  }|t        k  xs	 |t
        k\  S )NTr1   rv   r/   r4   r   )rG   r’   r   rŠ   ÚTOKEN_REFRESH_MARGIN_SrŒ   )rc   r“   ÚttlÚages       r   Ú_needs_cdn_refreshr˜   Ã   s‰   € ÙØØ�I‰I�kÓ"Ò( b×-Ñ-¨gÔ6ØØ�9‰9�^Ô$ØÜ
˜UŸY™Y {Ó3Ò9°rÓ
:€CÜ
�)‰)‹+œ˜eŸi™iÐ(:Ó;Ò@¸qÓAÑ
A€CØÔ'Ñ'ÒC¨3Ô2CÑ+CÐCr   Údetailc                 ó‚  — | j                  dd«      }| j                  di «      xs i }t        j                  j                  |«      }|j                  r|j                  j                  dd«      d   nd}||j                  r|j                  › d|j                  › |› d�nd|j                  || j                  dd«      d	œS )
NÚManifestUrlr*   ÚCdnTokenr+   r   r   r,   ÚCdnName)r)   r/   r0   r1   r2   )	rG   rM   rN   rO   r?   rP   rQ   rR   rS   )r™   Úraw_manifest_urlr1   r`   ra   s        r   Ú_detail_to_packrŸ   Ï   s¹   € Ø—z‘z -°Ó4ÐØ—
‘
˜: rÓ*Ò0¨b€IÜ—,‘,×'Ñ'Ð(8Ó9€KØ6A×6FÒ6F�× Ñ ×'Ñ'¨¨QÓ/°Ò2ÈB€Ià-ØVa×VhÒVh˜;×-Ñ-Ð.¨c°+×2DÑ2DÐ1EÀiÀ[ÐPQÑRÐnpØ!×'Ñ'ØØ—J‘J˜y¨"Ó-ñð r   ÚdetailsÚ	preferredc                 ó   — |r>|j                  «       }| D ])  }|j                  dd«      j                  «       |k(  sŒ'|c S  t        D ]1  }| D ]*  }||j                  dd«      j                  «       v sŒ&|c c S  Œ3 | d   S )Nr�   r*   r   )ÚlowerrG   ÚCDN_PREF)r    r¡   ÚprefÚdr-   s        r   Ú_pick_detailr§   Ý   s   € ÙØ�‰Ó ˆÛˆAØ�u‰u�Y Ó#×)Ñ)Ó+¨tÓ3Ø’ð ÷ ˆÛˆAØ�q—u‘u˜Y¨Ó+×1Ñ1Ó3Ò3Ø”ñ ð ð �1‰:Ðr   Ú_proxy_alt_tokensc                  ól  — t         j                  j                  t        d«      } t         j                  j	                  | «      rN	 t        | dd¬«      5 }|D �cg c])  }d|v sŒ|j                  d«      rŒ|j                  «       ‘Œ+ c}cd d d «       S g S c c}w # 1 sw Y   g S xY w# t        $ r Y g S w xY w)Nzaccounts.txtr    r!   r"   Ú:Ú#)	r>   r?   ÚjoinÚ
SCRIPT_DIRr@   rD   r‚   ÚstriprL   )Úaccounts_filerY   Úls      r   Ú_load_accountsr±   í   sœ   € Ü—G‘G—L‘L¤¨^Ó<€MÜ	‡w�w‡~�~�mÔ$ð	Ü�m S°7Õ;¸qÙ+,ÓS©1 a°°q²ÀÇÁÈcÕAR˜Ÿ™�	¨1ÑS÷ <Ñ;ð €Iùò T÷ <ð €Iûô ò 	ØØ€Ið	úsN   ÁB& ÁBÁ	BÁ"BÁ4BÂBÂ	B& ÂBÂB#ÂB& Â#B& Â&	B3Â2B3ÚemailÚpasswordÚ
proxy_dictc                 ó  — | t         v r-t         |    \  }}|rt        j                  |«      \  }}}|r||fS t        j                  | ||«      \  }}	|dk(  r*|	r(t        j                  |	«      \  }}}|	|ft         | <   |	|fS di fS )z[Restituisce il token per l'account specificato, riutilizzando la cache in memoria se validaÚSUCCESSN)r¨   ri   Úcheck_token_statusÚ
dazn_login)
r²   r³   r´   Útokr�   r�   ÚremÚ_ÚstatusÚ	new_tokens
             r   Ú_get_account_tokenr¾   ÷   sœ   € ð Ô!Ñ!Ü(¨Ñ/‰ˆˆWÙÜ×1Ñ1°#Ó6‰KˆC��aÙØ˜G�|Ð#äŸ™¨¨x¸ÓDÑ€FˆIØ�Ò™yÜ×/Ñ/°	Ó:‰ˆˆ1ˆgØ$-¨wÐ#7Ô˜%Ñ Ø˜'Ð!Ð!Ø�ˆ8€Or   Ú
channel_idÚchannel_namer.   Úpreferred_cdnc           
      óÆ  — t         st        d«      ‚t        j                  «       }t         j                  j	                  «       }t        «       }g }t        j                  |«      }|r)t        j                  |«      }	|j                  d||	f«       |D ]+  }
|
j                  dd«      \  }}|j                  ||df«       Œ- d}d}d}|D ]Å  \  }}}|�|}|}nt        |||«      \  }}|sŒ!|r|j                  dd	«      nd	}t        j                  |||«      }t        j                  ||||«      \  }}|rA|}d
t        |«      v rt        d|› d|› d�t         «       Œ’t        d|› d|› d|› �t         «       Œ¬|sŒ¯|j                  d«      sŒÁ|}|} n |st        d|› �«      ‚|j                  dg «      }|st        d«      ‚t#        ||«      }t%        |«      }|d   }|d   }|d   }|d   }t&        j(                  j+                  |«      } |D �!cg c]  }!|!|usŒt%        |!«      ‘Œ }"}!	 t,        j.                  j1                  t2        «      �rt5        t2        dd¬«      5 }#t7        j8                  |#«      }$ddd«       d}%$j                  dg «      D ]ˆ  }&|&j                  d«      | k(  sŒ||&d<   ||&d<   ||&d<   d|v rdnd}'|j                  d d!«      }(|j                  d"d	«      })|› |'› |(› d#|)› �|&d$<   t;        j<                  «       j?                  «       |&d%<   d&}% n |%r4t5        t2        d'd¬«      5 }#t7        j@                  |$|#d(d¬)«       ddd«       ||| jD                  ||||"tG        |«      xr% |jI                  «       |xs d	jI                  «       k7  d+œS c c}!w # 1 sw Y   �Œ)xY w# 1 sw Y   Œ`xY w# tB        $ r$}*t        d*t2        › d|*› �t         «       Y d}*~*Œ‹d}*~*ww xY w),zfEsegue la chiamata Playback alle API DAZN per ottenere il nuovo CDN e token con fallback multi-accountz*Modulo dazn non disponibile per il rinnovozAccount Principalerª   r   NzNessun account disponibilezN/AÚviewerIdr*   ÚConcurrencyu   â�³ [z] Concurrency su z, provo account successivo...õ   âš ï¸� [z] Errore Playback su r=   ÚPlaybackDetailszErrore Playback DAZN: z6Nessun PlaybackDetails disponibile nella risposta DAZNr)   r1   r2   r/   r    r!   r"   Fr$   r%   Ú?Ú&ÚNameú
dazn-tokenrv   ry   Úmanifest_urlr(   TÚwé   )ÚindentÚensure_asciizAvviso salvataggio )r)   r/   r0   r1   r2   Úaccount_usedÚ
alternatesÚcdn_changed)%ri   ÚRuntimeErrorÚload_configÚproxy_managerÚget_dictr±   Ú	get_tokenÚdecode_jwt_payloadÚappendr…   r¾   rG   Úbuild_playback_urlÚrequest_playback_infor   r   ÚYELLOWr§   rŸ   rM   rN   rO   r>   r?   r@   rA   rD   rE   rF   r   rJ   Ú	isoformatÚdumprL   rS   Úboolr£   )+r¿   rÀ   r.   rÁ   Úconfigr´   ÚaccountsÚ
candidatesÚ
main_tokenÚ	m_payloadÚ	acct_lineÚemÚpwÚplayback_dataÚlast_errrÐ   ÚlabelÚtoken_or_pwÚpayload_candÚtokenÚtokens_payloadÚ	viewer_idÚplayback_urlÚp_dataÚerrÚdetails_listÚchosen_detailÚpackrž   r1   r2   r/   r`   r¦   rÑ   rY   rZ   Úupdatedr[   ÚsepÚt_nameÚt_valrd   s+                                              r   Ú_refresh_cdn_syncrú     s  € åÜÐGÓHÐHä×ÑÓ€FÜ×#Ñ#×,Ñ,Ó.€Jô Ó€HØ€JÜ—‘ Ó'€JÙÜ×+Ñ+¨JÓ7ˆ	Ø×ÑÐ/°¸YÐGÔHãˆ	Ø—‘  aÓ(‰ˆˆBØ×Ñ˜2˜r 4˜.Õ)ð ð €MØ+€HØ€Lã,6Ñ(ˆˆ{˜LØÐ#ØˆEØ)‰Nä$6°u¸kÈ:Ó$VÑ!ˆE�>ÙØá:H�N×&Ñ& z°2Ô6Èbˆ	Ü×.Ñ.¨{¸FÀIÓNˆÜ×0Ñ0°¸uÀfÈjÓY‰ˆ�áØˆHØ¤ C£Ñ(Ü�e˜L˜>Ð):¸5¸'ÐA^Ð_ÔagÔhØä�h˜|˜nÐ,AÀ%ÀÈÈ3È%ÐPÔRXÔYØâ�f—j‘jÐ!2Õ3Ø"ˆMØ ˆLÙð3 -7ñ6 ÜÐ3°H°:Ð>Ó?Ð?à ×$Ñ$Ð%6¸Ó;€LÙÜÐSÓTÐTä  ¨}Ó=€MÜ˜=Ó)€DØÐ/Ñ0ÐØ�[Ñ!€IØ�JÑ€HØ˜Ñ'€LÜ—,‘,×'Ñ'Ð(8Ó9€KÙ.:ÓU©l¨¸aÀ}Ò>T”/ !Õ$¨l€JÐUð@Ü�7‰7�>‰>œ-Õ(Ü”m S°7Õ;¸qÜ—y‘y “|�÷ <àˆGØ—h‘h˜z¨2Ö.�Ø—6‘6˜$“< :Ó-Ø.>�BÐ*Ñ+Ø&/�B�{‘OØ%-�B�z‘NØ!$Ð(8Ñ!8™#¸c�CØ&Ÿ]™]¨6°<Ó@�FØ%ŸM™M¨'°2Ó6�EØ,<Ð+=¸c¸UÀ6À(È!ÈEÈ7Ð)S�B�~Ñ&Ü)1¯©«×)AÑ)AÓ)C�B�~Ñ&Ø"�GÙð /ñ Üœ-¨°wÕ?À1Ü—I‘I˜d A¨a¸eÕD÷ @ð .Ø$Ø!×'Ñ'ØØØ$Ø Ü˜MÓ*Ò`¨}×/BÑ/BÓ/DÈÊÐUW×H^ÑH^ÓH`Ñ/`ñ	ð 	ùò5 V÷
 <Ñ;ú÷  @Ð?ûäò @ÜÐ!¤- °°1°#Ð6¼×?Ñ?ûð@ús[   È	NÈNÈ'6N3 ÉNÉ33N3 Ê'BN3 Ì.N'ÍN3 ÎN$ÎN3 Î'N0Î,N3 Î3	O Î<OÏO Úwaitc              ƒ   ó‚  ‡ ‡K  — t         j                  ‰ «      Š‰syt        ‰|¬«      sy‰j                  d«      }|r)|j                  «       s|s|r	 t	        |ƒ d{  –—† «      S ydt        fˆ ˆfd„}t        j                   |«       «      ‰d<   |s|rt	        ‰d   ƒ d{  –—† «      S y7 ŒN# t
        $ r Y yw xY w7 Œ­w)zPRinnova il token restando sullo stesso CDN. Non blocca i segmenti se wait=False.F©r“   Tr;   Nr   c               “   óÐ  •K  — t        j                   «       t        ‰j                  d«      xs d«      z
  } ‰j                  d«      xs d}t        d‰d   › d|xs d› d	t	        | «      › d
�t
        «       	 t        j                  t        ‰‰d   ‰j                  di «      |«      ƒ d {  –—† }‰j                  d«      }|d   ‰d<   |d   ‰d<   |d   ‰d<   |d   ‰d<   |d   ‰d<   |j                  d«      xs g ‰d<   t        j                   «       ‰d<   |r1||d   k7  r)d ‰d<   d‰d<   t        d‰d   › d|› d|d   › �t        «       t	        t        |d   «      «      }|j                  d«      rd|d   › �nd}t        d‰d   › d|› d|d   › d|› d�	t        «       	 d ‰d<   y 7 Œû# t        $ r(}t        d!‰d   › d"|› �t        «       Y d }~d ‰d<   y#d }~ww xY w# d ‰d<   w xY w­w)$Nr4   r   r2   r*   u   ðŸ”„ [r-   z] Rinnovo token (CDN sticky=Úautou   , etÃ  zs)...r.   r/   r)   r0   r1   rÑ   r:   r6   r5   r7   rÅ   z] CDN cambiato u    â†’ rÐ   z via u   ðŸ”‘ [z
] Token OKu    Â· u    Â· valido ~Úsr;   Tu   â�Œ [z] Errore rinnovo CDN: F)r   rŠ   rG   r   rƒ   ÚCYANrU   Ú	to_threadrú   rÜ   r’   ÚGREENrL   rW   )	Úelapsedr¡   ÚresÚold_cdnr–   Úacct_strrd   r¿   rc   s	          €€r   Ú_runz!refresh_channel_cdn.<locals>._run  s>  øè ø€ Ü—)‘)“+¤ e§i¡iÐ0BÓ&CÒ&HÀqÓ IÑIˆØ—I‘I˜jÓ)Ò/¨Rˆ	Üˆf�U˜6‘]�OÐ#?À	Ò@SÈVÐ?TÐT[Ô\_Ð`gÓ\hÐ[iÐinÐoÔquÔvð	*Ü×)Ñ)Ü! :¨u°V©}¸e¿i¹iÈÐWYÓ>ZÐ\eó÷ ˆCð —i‘i Ó/ˆGØ),Ð-@Ñ)AˆEÐ%Ñ&Ø$'¨Ñ$7ˆE�.Ñ!Ø"% lÑ"3ˆE�,ÑØ!$ [Ñ!1ˆE�+ÑØ # J¡ˆE�*ÑØ&)§g¡g¨lÓ&;Ò&A¸rˆEÐ"Ñ#Ü(,¯	©	«ˆEÐ$Ñ%Ù˜7 c¨.Ñ&9Ò9Ø&*��lÑ#Ø+.�Ð'Ñ(Ü�h˜u V™}˜o¨_¸W¸IÀUÈ3È~ÑK^ÐJ_Ð`ÔbhÔiÜÔ(¨¨[Ñ)9Ó:Ó;ˆCØ8;¿¹ÀÔ8O˜˜s >Ñ2Ð3Ñ4ÐUWˆHÜ�&˜˜v™˜ z°(°¸4ÀÀJÁÐ?PÐP\Ð]`Ð\aÐabÐcÔejÔkØð
 &*ˆE�/Ò"ð/ùô& ò 	Ü�%˜˜f™�Ð&<¸Q¸CÐ@Ä#ÔFÛà%)ˆE�/Ò"ûð		ûð &*ˆE�/Ò"üsU   ƒA3G&Á73F( Â*F&Â+C4F( Æ G&Æ&F( Æ(	GÆ1GÇ
G ÇG&ÇGÇG ÇG#Ç#G&)rH   rG   r˜   Údonerß   rL   rU   Úcreate_task)r¿   r“   rû   Útaskr  rc   s   `    @r   Úrefresh_channel_cdnr  n  s½   ùè ø€ ä×Ñ˜zÓ*€EÙØÜ˜e¨5Õ1Øà�9‰9�_Ó%€DÙ�D—I‘I”KÙ‘5ðÜ $ŸJÓ'Ð'ð ð*œö *ô< %×0Ñ0±³Ó8€Eˆ/ÑÙ‰uÜ˜% Ñ0×0Ó1Ð1ØðM 'ùÜò ÙðúðH 1úsH   „AB?Á
B. ÁB,ÁB. Á%=B?Â"B=Â#	B?Â,B. Â.	B:Â7B?Â9B:Â:B?Úmpd_textc                 óˆ  — t        j                  dd| t         j                  ¬«      } t        j                  dd| t         j                  ¬«      } t        j                  dd| t         j                  ¬«      } d}t        j                  dd|z   | «      } t        j                  d	d| t         j                  ¬«      } d
| v r t        j                  ddt        › d�| «      } n!t        j                  ddt        › d�| d¬«      } d| v rt        j                  dd| «      } nt        j                  dd| d¬«      } | j	                  d«      S )u  
    Rimuove Widevine/PlayReady, inietta ClearKey per player standard (VLC, mpv, Kodi, TiviMate),
    rimuove BaseURL per instradare i segmenti sul proxy locale e ottimizza i parametri di buffer
    per garantire fluiditÃ  assoluta senza lag nÃ© buffering.
    zo<ContentProtection[^>]*schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"[^>]*>.*?</ContentProtection>r*   )ÚflagszY<ContentProtection[^>]*schemeIdUri="urn:microsoft:playready"[^>]*>.*?</ContentProtection>zo<ContentProtection[^>]*schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"[^>]*>.*?</ContentProtection>zQ<ContentProtection schemeIdUri="urn:uuid:e2719d58-a985-b3c9-781a-214f90116bb0" />z,(<ContentProtection[^>]*value="cenc"[^>]*/>)z\1z<BaseURL>.*?</BaseURL>zsuggestedPresentationDelay=z$suggestedPresentationDelay="PT[^"]+"zsuggestedPresentationDelay="Ú"z(<MPD\b[^>]*)z\1 suggestedPresentationDelay="r   )ÚcountzminimumUpdatePeriod=zminimumUpdatePeriod="PT[^"]+"zminimumUpdatePeriod="PT2.0S"z\1 minimumUpdatePeriod="PT2.0S"r!   )r€   ÚsubÚDOTALLÚ
LIVE_DELAYÚencode)r  Úclearkey_cps     r   Úpatch_mpd_contentr  £  so  € ô �v‰vð  Ið  KMð  OWô  _a÷  _hñ  _hô  i€HÜ�v‰vÐrÐtvð  yAô  IK÷  IRñ  IRô  S€HÜ�v‰vð  Ið  KMð  OWô  _a÷  _hñ  _hô  i€Hàe€KÜ�v‰vÐEÀuÈ{ÑGZÐ\dÓe€Hô �v‰vÐ/°°XÄRÇYÁYÔO€Hð %¨Ñ0Ü—6‘6ÐAÐEaÔblÐamÐmnÐCoÐqyÓz‰ä—6‘6Ð*Ð/NÌzÈlÐZ[Ð,\Ð^fÐnoÔpˆØ Ñ)Ü—6‘6Ð:Ð<ZÐ\dÓe‰ä—6‘6Ð*Ð,NÐPXÐ`aÔbˆà�?‰?˜7Ó#Ð#r   ÚHTTP_SESSIONc               ƒ   óÖ   K  — t         �t         j                  rJt        j                  ddddd¬«      } t        j                  d ddd¬	«      }t        j
                  | |¬
«      a t         S ­w)NéÈ   é    éx   i,  T)ÚlimitÚlimit_per_hostÚkeepalive_timeoutÚttl_dns_cacheÚenable_cleanup_closedrz   é   )ÚtotalÚconnectÚsock_connectÚ	sock_read©Ú	connectorÚtimeout)r  ÚclosedÚaiohttpÚTCPConnectorÚClientTimeoutÚClientSessionr'  s     r   Úget_http_sessionr/  Ã  sd   è ø€ äÐœ|×2Ò2Ü×(Ñ(ØØØ!ØØ"&ô
ˆ	ô ×'Ñ'¨d¸AÈAÐY[Ô\ˆÜ×,Ñ,°yÈ'ÔRˆÜÐùs   ‚A'A)c              ƒ   ón  K  — t         j                  | «      }|syt        |«      rt        | d¬«      ƒ d{  –—†  |j                  d«      }|j                  di «      }|j                  dd«      }|j                  d	d
«      }|r|syd|v rdnd}|› |› |› d|› �}t	        «       j                  «       }|› d|› �|d<   d|v r|d= t        «       ƒ d{  –—† }		 |	j                  ||¬«      4 ƒd{  –—† }
|
j                  dv �rBt        d|d   › d|
j                  › d�t        «       t        | d¬«      ƒ d{  –—† }|rõ|j                  di «      }|j                  dd«      }|j                  d	d
«      }d|d   v rdnd}|d   › |› |› d|› �}|› d|› �|d<   |	j                  ||¬«      4 ƒd{  –—† }|j                  dk(  ra|j                  d¬«      ƒ d{  –—† }t        |«      |d<   t        j                  «       |d<   	 ddd«      ƒd{  –—†  ddd«      ƒd{  –—†  yddd«      ƒd{  –—†  	 ddd«      ƒd{  –—†  y|
j                  dk(  r©|
j                  d¬«      ƒ d{  –—† }t        |«      |d<   t        j                  «       |d<   t        j                  «       |j                  dd«      z
  dkD  r.t        d|d   › d �t        «       t        j                  «       |d<   	 ddd«      ƒd{  –—†  y|j                  d!d«      }t        j                  «       |z
  dkD  r:t        d"|
j                  › d#|d   › �t        «       t        j                  «       |d!<   	 ddd«      ƒd{  –—†  y7 �Œ=7 �Œ¦7 �ŒŒ7 �ŒG7 �ŒÓ7 �Œ­7 �Œz7 �Œm7 �Œ_# 1 ƒd{  –—†7  sw Y   �ŒpxY w7 �Œg7 �Œ@7 Œ´7 Œ># 1 ƒd{  –—†7  sw Y   yxY w# t        $ rf}|j                  d!d«      }t        j                  «       |z
  dkD  r0t        d$|d   › d%|› �t        «       t        j                  «       |d!<   Y d}~yd}~ww xY w­w)&zJScarica il manifesto MPD on-demand dal CDN DAZN e lo salva in cache localeFT©rû   Nr)   r1   rÉ   rÊ   rv   r*   rÇ   rÈ   ry   ÚCookieÚHost©rj   ©i‘  i“  rÅ   r-   z] CDN ha restituito z su MPD. Rinnovo token...rý   r  Úignore)Úerrorsr6   r7   r8   r   ç      N@u   âš¡ [z6] Flusso proxato e sincronizzato in RAM (Live Edge OK)Úlast_err_logzAvviso CDN (z) scaricando MPD per zEccezione scaricando MPD per r=   )rH   rG   r˜   r  rt   Úcopyr/  r¼   r   rÜ   Útextr  r   r  rL   rW   )r¿   rc   r)   r1   rø   rù   r÷   Ú
target_urlrj   ÚsessionÚrespÚokÚ
retry_respÚraw_textÚlast_err_timerd   s                   r   Údownload_and_cache_mpdrC  Ñ  sû  è ø€ ä×Ñ˜zÓ*€EÙØä˜%Ô Ü! *°4Ô8×8Ð8àŸ	™	Ð"5Ó6ÐØ—	‘	˜+ rÓ*€IØ�]‰]˜6 <Ó0€FØ�M‰M˜' 2Ó&€Eá¡EØàÐ)Ñ)‰#¨s€CØ%Ð& s e¨F¨8°1°U°GÐ<€JÜ‹n×!Ñ!Ó#€GØ!˜( ! E 7Ð+€GˆHÑØ�ÑØ�FˆOä$Ó&×&€Gð(Ø—;‘;˜z°7�;×;Ô;¸tØ�{‰{˜jÒ(Ü�h˜u V™}˜oÐ-AÀ$Ç+Á+ÀÐNgÐhÔjpÔqÜ.¨zÀÔF×F�ÙØ %§	¡	¨+°rÓ :�IØ&Ÿ]™]¨6°<Ó@�FØ%ŸM™M¨'°2Ó6�EØ!$¨Ð.AÑ(BÑ!B™#È�CØ$)Ð*=Ñ$>Ð#?À¸uÀVÀHÈAÈeÈWÐ!U�JØ+1¨(°!°E°7Ð(;�G˜HÑ%Ø&Ÿ{™{¨:¸w˜{×GÔGÈ:Ø%×,Ñ,°Ò3Ø-7¯_©_ÀH¨_Ó-M×'M˜HÜ2CÀHÓ2M˜E ,Ñ/Ü7;·y±y³{˜EÐ"3Ñ4Ø#'÷  H×G÷ <×;Ð;÷  H×Gð ÷# <×;Ð;ð& �{‰{˜cÒ!Ø!%§¡°( Ó!;×;�Ü&7¸Ó&A��lÑ#Ü+/¯9©9«;�Ð'Ñ(ä—I‘I“K %§)¡)¨O¸QÓ"?Ñ?À4ÒGÜ˜%  f¡˜Ð.dÐeÔglÔmÜ-1¯Y©Y«[�E˜/Ñ*Ø÷7 <×;Ð;ð: !&§	¡	¨.¸!Ó <�Ü—I‘I“K -Ñ/°4Ò7Ü˜, t§{¡{ mÐ3HÈÈvÉÈÐXÔZ`ÔaÜ,0¯I©I«K�E˜.Ñ)Ø÷C <×;Ð;ð' 	9ùð" 'ùà;ùð Gùð  Hùà'Mùð  Hùð <ùð  Hù×G×GÒGúð <ùð( <ùð) <øÐ;ø×;×;Ñ;ûôD ò ØŸ	™	 .°!Ó4ˆÜ�I‰I‹K˜-Ñ'¨4Ò/ÜÐ/°°f±¨¸bÀÀÐDÄcÔJÜ$(§I¡I£KˆE�.Ñ!Üûðüs¡  ‚4P5¶M3·BP5ÃM6ÃP5ÃO Ã-M9Ã.O Ã1AN.Ä5M<Ä6A6N.Æ,M?Æ-N.Æ0%NÇNÇ*NÈ N.ÈNÈN.ÈO ÈNÈO È P5È!N.È,NÈ-N.È2O È=N$È>O ÉP5É$N.É'N'É(BN.Ë*O Ë5N*Ë6O Ë:P5Ë;A'N.Í"O Í-N,Í.O Í2P5Í6P5Í9O Í<N.Í?N.ÎNÎN.ÎO ÎN.ÎN!	ÎNÎN!	ÎN.Î$O Î'N.Î*O Î,O Î.O Î4N7Î5O Î<O Î?P5Ï O Ï	P2ÏAP-Ð(P5Ð-P2Ð2P5c            	   ƒ   ó(  ‡K  — t        dt        «       t        j                  d«      ƒ d{  –—†  d} 	 	 t	        j                  «       }|| z
  dkD  rt        «        |} t        t        j                  «       «      D ��cg c]  \  }}||j                  dd«      z
  d	k  r|‘Œ! }}}|rRt        j                  d
«      Šdt        fˆfd„}t        j                  |D �cg c]
  } ||«      ‘Œ c}ddiŽƒ d{  –—†  t        j                  d«      ƒ d{  –—†  Œâ7 Œéc c}}w c c}w 7 Œ/7 Œ# t        j                  $ r t        dt        «       Y yt        $ r;}t        d|› �t         «       t        j                  d«      ƒ d{  –—†7   Y d}~Œud}~ww xY w­w)zHMPD caldo ogni ~2s sui canali attivi. Token solo a scadenza, stesso CDN.uJ   ðŸš€ Poller on-demand: MPD caldo, token sticky (niente swap CDN ogni 200s)r   Nr5   Tg      $@r9   r   r8  rz   r\   c              “   ó  •K  — ‰4 ƒd {  –—†  t         j                  | «      }|r t        |«      rt        | d¬«      ƒ d {  –—†  t	        | «      ƒ d {  –—†  d d d «      ƒd {  –—†  y 7 Œ_7 Œ*7 Œ7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)NFr1  )rH   rG   r˜   r  rC  )r\   ÚstÚsems     €r   Ú_warmz background_poller.<locals>._warm(  sf   øè ø€ ß"šsÜ+×/Ñ/°Ó4˜ÙÔ"4°RÔ"8Ü"5°cÀÔ"F×FÐFÜ4°SÓ9×9Ð9÷	  #Ÿs™søð GøØ9øð	  #øŸsŸs™süsh   ƒBŠA*‹BŽ3A2ÁA,ÁA2ÁA.ÁA2ÁBÁ$A0Á%BÁ,A2Á.A2Á0BÁ2BÁ8A;Á9BÂ BÚreturn_exceptionsr	   u$   ðŸ›‘ Poller di background arrestato.zErrore poller background: é   )r   r  rU   Úsleepr   re   ÚlistrH   rm   rG   Ú	Semaphorer   ÚgatherÚCancelledErrorrÜ   rL   rW   )Úlast_disk_checkrJ   r\   rc   ÚactiverH  rd   rG  s          @r   Úbackground_pollerrR    sm  øè ø€ äÐTÔVZÔ[Ü
�-‰-˜Ó
×ÐØ€OØ
ð	#Ü—)‘)“+ˆCØ�oÑ%¨Ò-Ü'Ô)Ø"%�ô '+¬>×+?Ñ+?Ó+AÔ&BôÙ&B™
˜˜UØ˜%Ÿ)™)Ð$4°aÓ8Ñ8¸TÒAò Ð&Bð ñ ñ Ü×'Ñ'¨Ó*�ð:¤Sõ :ô —n‘n¹VÓ&D¹V°c¡u¨S¥z¸VÑ&DÐ]ÐX\Ñ]×]Ð]ä—-‘- Ó$×$Ð$ð/ ð úóùò 'EÐ]øà$ùÜ×%Ñ%ò 	ÜÐ6¼Ô?ÙÜò 	#ÜÐ,¨Q¨CÐ0´#Ô6Ü—-‘- Ó"×"Ö"ûð	#üs�   ƒ)F¬D­FµAD' Á=$DÂ!9D' ÃDÃ)
D' Ã3D#Ã4D' ÄD%ÄD' ÄFÄD' Ä%D' Ä'#FÅ
FÅFÅ+F
Å?FÆ F
ÆFÆ
FÆFc              ƒ   ó>  K  — t        «        dg}| j                  }|sd}t        j                  «       D �]7  \  }}|j	                  di «      }|j	                  d«      xs |j	                  d«      dk(  rŒA|j	                  d«      dk(  s|j	                  d«      sŒg|j	                  d	d
«      }|rd|› d�nd
}t        |j	                  d«      «      }|rd}	nd}	|j                  d|› d|d   › d|› d|	› d|d   › �
«       |j                  d«       |j                  d«       |j                  d«       |j                  d|j	                  d«      › �«       |j                  d|› d|› d�«       �Œ: dj                  |«      dz   }
t        j                  |
dddi¬ «      S ­w)!Nz#EXTM3U x-tvg-url=""zaddictedbytheproject.nl:8443r.   r&   r'   r¼   ÚOKr3   Úlogor*   z tvg-logo="r  ÚepgzDAZN Eventi LivezDAZN Canaliz#EXTINF:-1 tvg-id="z" tvg-name="r-   z group-title="z",z*#KODIPROP:inputstream=inputstream.adaptivez0#KODIPROP:inputstream.adaptive.manifest_type=mpdz4#KODIPROP:inputstream.adaptive.license_type=clearkeyz+#KODIPROP:inputstream.adaptive.license_key=zhttps://z/play/z/stream.mpdÚ
zaudio/mpegurlúAccess-Control-Allow-OriginÚ*)r;  Úcontent_typerj   )
re   ÚhostrH   rm   rG   rß   rÙ   r¬   r   ÚResponse)ÚrequestÚlinesr[  r\   rc   r[   rU  Ú	logo_attrÚis_liver„   Úbodys              r   Úhandle_playlistrb  :  s¢  è ø€ ÜÔØ%Ð&€Eà�<‰<€DÙØ-ˆä$×*Ñ*×,‰
ˆˆUØ�Y‰Y�} bÓ)ˆØ�I‰I�hÓÒ3 2§6¡6¨(Ó#3¸ÒFØØ�6‰6�(Ó˜tÒ# u§y¡y°Õ'>Ø—6‘6˜& "Ó%ˆDÙ15˜+ d V¨1Ñ-¸2ˆIÜ˜2Ÿ6™6 %›=Ó)ˆGÙØ*‘à%�Ø�L‰LÐ.¨s¨e°<ÀÀfÁ¸ÈaÐPYÈ{ÐZhÐinÐhoÐoqÐrwÐx~Ñrð  rAð  Bô  CØ�L‰LÐEÔFØ�L‰LÐKÔLØ�L‰LÐOÔPØ�L‰LÐFÀuÇyÁyÐQ]ÓG^ÐF_Ð`ÔaØ�L‰L˜8 D 6¨°¨u°KÐ@ÖAð# -ð& �I‰I�eÓ˜tÑ#€DÜ�<‰<˜T°ÐJgÐilÐImÔnÐnùs   ‚BFÂDFc              ƒ   ó4
  ‡ ‡‡‡K  — ‰ j                   j                  d«      }‰ j                   j                  d«      }|r|st        j                  d¬«      ‚t        j                  |«      Š‰st        «        t        j                  |«      Š‰st        j                  d¬«      ‚t        j                  «       ‰d<   |j                  d«      }dd	iŠ|r¬‰j                  d
«      }t        j                  «       t        ‰j                  d«      xs d«      z
  }|r	|t        kD  r$t        |«      ƒ d {  –—†  ‰j                  d
«      }|st        j                  d¬«      ‚t        j                  |ddi ‰¥ddddœ¥¬«      S t        ‰«      r t        j                   t#        |d¬«      «       |j%                  d«      d   Št'        «       ƒ d {  –—† }dt(        t*        t,        t*        t*        f   t*        t*        f   fˆˆ ˆfd„}dt        j.                  fˆˆ fd„} |«       \  }	}
}}‰j                  d«      r|st        j0                  d¬«      ‚	 t3        d«      D �]�  } |«       \  }	}
}}	 |j                  |	|
¬«      4 ƒd {  –—† }|j4                  dv rT|dk(  rOt7        d ‰d!   › d"|j4                  › d#‰› d$�t8        «       t#        |d%d%¬&«      ƒ d {  –—†  	 d d d «      ƒd {  –—†  Œ�|j4                  d'k(  r_|dk(  r/t        j:                  d(«      ƒ d {  –—†  	 d d d «      ƒd {  –—†  ŒÒt        j                  d'd)‰¬*«      cd d d «      ƒd {  –—†  c S |j4                  d+vrbt7        d,|j4                  › d-‰› �t8        «       t        j                  |j4                  d,|j4                  › �‰¬*«      cd d d «      ƒd {  –—†  c S  ||«      ƒ d {  –—† cd d d «      ƒd {  –—†  c S  t        j                  d'd)‰¬*«      S 7 �ŒÓ7 �Œ;7 �Œ‡7 �Œ:7 �Œ,7 Œü7 Œí7 ŒÆ7 ŒX7 ŒG7 Œ9# 1 ƒd {  –—†7  sw Y   nxY w�ŒÛ# t        j<                  t>        j@                  f$ ry}|dk(  r:t7        d.‰› d/|› �t8        «       t        j:                  d0«      ƒ d {  –—†7   Y d }~�Œ=t7        d1‰› d/|› �tB        «       t        j                  d2d3‰¬*«      cY d }~c S d }~ww xY w# tD        $ r8}t7        d4‰› d/|› �tB        «       t        j                  d2d5‰¬*«      cY d }~S d }~ww xY w­w)6Nr%   ÚfilenamezBad Request)r;  zChannel Not Foundr9   z
stream.mpdrX  rY  r6   r7   r   z Impossibile ottenere MPD dal CDNr  zapplication/dash+xmlz.no-cache, no-store, must-revalidate, max-age=0zno-cacheÚ0)zCache-ControlÚPragmaÚExpires)ra  r¼   rZ  rj   Fr1  rÇ   r   c                  óv  •— ‰j                  d«      xs i } | j                  dd«      }| j                  dd«      }‰j                  d«      xs d}g }‰j                  d«      xs d}|r?|j                  d«      D ]+  }|sŒ|j                  |› d	�«      rŒ|j                  |«       Œ- |r|j                  |› d	|› �«       |› ‰	› �}|r|d
dj	                  |«      z   z  }t        «       j                  «       }|r
|› d	|› �|d<   |j                  dd «       d‰
j                  v r‰
j                  d   |d<   ||||fS )Nr1   rÉ   rÊ   rv   r*   r/   r0   rÈ   ry   rÇ   r2  r3  ÚRange)	rG   r…   r‚   rÙ   r¬   rt   r:  Úpoprj   )r1   rø   rù   r/   Úpartsr0   ÚqpÚurlÚhdrsÚclean_filenamer]  rc   s            €€€r   Ú_build_targetz"handle_play.<locals>._build_target†  s@  ø€ Ø—I‘I˜kÓ*Ò0¨bˆ	Ø—‘˜v |Ó4ˆØ—‘˜g rÓ*ˆØ—y‘y Ó0Ò6°BˆØˆØ—Y‘Y˜|Ó,Ò2°ˆ
ÙØ ×&Ñ& sÖ+�Ú˜bŸm™m¨v¨h°a¨LÕ9Ø—L‘L Õ$ð ,ñ Ø�L‰L˜F˜8 1 U GÐ,Ô-Ø�˜~Ð.Ð/ˆÙØ�3˜Ÿ™ %›Ñ(Ñ(ˆCÜ‹~×"Ñ"Ó$ˆÙØ &˜x q¨¨Ð0ˆD�‰NØ�‰�˜ÔØ�g—o‘oÑ%Ø#ŸO™O¨GÑ4ˆD�‰MØ�D˜& %Ð'Ð'r   c              “   óV  •K  — t        ‰«      }d| j                  v r| j                  d   |d<   d| j                  v r| j                  d   |d<   d| j                  v r| j                  d   |d<   d| j                  v r| j                  d   |d<   t        j                  | j                  |¬«      }|j                  ‰«      ƒ d {  –—†  | j                  j                  d«      2 3 d {  –—† }|j                  |«      ƒ d {  –—†  Œ#7 ŒB7 Œ 7 Œ	6 |j                  «       ƒ d {  –—†7   |S ­w)NzContent-TypezContent-LengthzContent-RangezAccept-Ranges)r¼   rj   i   )
r~   rj   r   ÚStreamResponser¼   ÚprepareÚcontentÚiter_chunkedÚwriteÚ	write_eof)Úcdn_respÚoutr>  ÚchunkÚcorsr]  s       €€r   Ú_stream_cdnz handle_play.<locals>._stream_cdnž  s  øè ø€ Ü�4‹jˆØ˜X×-Ñ-Ñ-Ø"*×"2Ñ"2°>Ñ"BˆC�ÑØ˜x×/Ñ/Ñ/Ø$,×$4Ñ$4Ð5EÑ$FˆCÐ Ñ!Ø˜h×.Ñ.Ñ.Ø#+×#3Ñ#3°OÑ#DˆC�Ñ Ø˜h×.Ñ.Ñ.Ø#+×#3Ñ#3°OÑ#DˆC�Ñ Ü×!Ñ!¨¯©À#ÔFˆØ�l‰l˜7Ó#×#Ð#Ø#×+Ñ+×8Ñ8¸ÔC÷ 	$�%Ø—*‘*˜UÓ#×#Ñ#ð 	$øð	$øØ#øð Dà�n‰nÓ×ÑØˆùsT   ƒCD)ÃDÃD)Ã$DÃ(D	Ã)DÃ,D)ÄDÄD)Ä	DÄD)ÄD)Ä!D$Ä"D)r/   z Dati CDN del canale non completirÍ   r4  r5  rÅ   r-   z] CDN z su z, rinnovo sticky...T)r“   rû   i”  gš™™™™™É?z	Not Found)r¼   r;  rj   )r  éÎ   zCDN z
 segmento zRetry segmento r=   g333333Ã?zTimeout/CDN down iø  zCDN timeoutzProxy Error per zProxy error)#Ú
match_inforG   r   ÚHTTPBadRequestrH   re   ÚHTTPNotFoundr   r‚   rŠ   Ú	MPD_TTL_SrC  ÚHTTPBadGatewayr\  r˜   rU   r
  r  r…   r/  r   r   r   rr  ÚHTTPServiceUnavailableÚranger¼   r   rÜ   rK  ÚTimeoutErrorr+  ÚClientErrorrW   rL   )r]  r¿   rd  Úis_mpdÚcached_bytesr—   r=  rp  r|  r<  Úreq_headersr»   rù   Úattemptrx  rd   ro  r{  rc   s   `               @@@r   Úhandle_playr‹  X  sŒ  ûè ø€ Ø×#Ñ#×'Ñ'¨Ó-€JØ×!Ñ!×%Ñ% jÓ1€Há™XÜ× Ñ  mÔ4Ð4ä×Ñ˜zÓ*€EÙÜÔ!Ü×"Ñ" :Ó.ˆáÜ×ÑÐ$7Ô8Ð8ä"Ÿi™i›k€EÐ
ÑØ× Ñ  Ó.€FØ)¨3Ð/€DáØ—y‘y Ó.ˆÜ�i‰i‹kœE %§)¡)Ð,=Ó">Ò"CÀ!ÓDÑDˆÙ˜s¤YšÜ(¨Ó4×4Ð4Ø Ÿ9™9 \Ó2ˆLÙÜ×$Ñ$Ð*LÔMÐMÜ�|‰|ØØØ/ðØðà!QØ$Øò	ô	

ð 
	
ô ˜%Ô Ü×ÑÔ/°
ÀÔGÔHà—^‘^ CÓ(¨Ñ+€NÜ$Ó&×&€Gð(œ5¤¤d¬3´¨8¡n´c¼3Ð!>Ñ?÷ (ð0¤s×'9Ñ'9ö ñ" )6«Ñ%€J�˜Q Ø�9‰9�^Ô$©EÜ×(Ñ(Ð.PÔQÐQðJÜ˜Q—xˆGÙ,9«OÑ)ˆJ˜ Q¨ðRØ"Ÿ;™; z¸;˜;×GÔGÈ8Ø—‘¨*Ñ4¸ÀAºÜ˜h u¨V¡} o°V¸H¿O¹OÐ;LÈDÐQ_ÐP`Ð`sÐtÔv|Ô}Ü1°*ÀDÈtÔT×TÐTØ ÷	 H×GÐGð
  —‘¨#Ò-Ø" aš<Ü")§-¡-°Ó"4×4Ð4Ø$÷ H×GÐGô  #Ÿ|™|°3¸[ÐRVÔW÷ H×GÓGð  —‘¨jÑ8Ü˜d 8§?¡?Ð"3°:¸nÐ=MÐNÔPVÔWÜ"Ÿ|™|°8·?±?È4ÐPX×P_ÑP_ÐO`ÐIaÐkoÔp÷ H×GÓGñ "-¨XÓ!6×6÷ H×GÓGð  ô0 �|‰| 3¨[À$ÔGÐGð{ 5ùð* 'ùðf Hùð Uùð Hùð 5øð HøÐGøÐGøð 7øð Hø×G×GÑGúÑGøô ×(Ñ(¬'×*=Ñ*=Ð>ò RØ˜a’<Ü˜/¨.Ð)9¸¸A¸3Ð?ÄÔHÜ!Ÿ-™-¨Ó-×-Ñ-ÝÜÐ'¨Ð'7°r¸!¸Ð=¼sÔCÜ—|‘|¨3°]ÈDÔQ×QûðRûô ò JÜÐ˜~Ð.¨b°°Ð4´cÔ:Ü�|‰| 3¨]ÀDÔIÕIûðJüsÒ  †D*TÄ0PÄ1BTÇPÇBTÉS É+P5ÊP	ÊP5ÊAPËPËPËP5Ë#PË$P5Ë(S Ë),PÌPÌPÌP5Ì&PÌ'P5Ì+S Ì,PÍP5ÍPÍP5ÍS ÍTÍAPÎ3P5Î?PÏ P5ÏS ÏTÏPÏPÏPÏP5Ï"PÏ#P5Ï'S Ï)TÏ*S ÐTÐTÐ	P5ÐPÐP5ÐPÐP5ÐP5ÐP5ÐPÐP5ÐP0	Ð$P'Ð%P0	Ð,P5Ð3S Ð5#SÑ3SÒRÒSÒS Ò-SÓSÓS ÓTÓSÓS Ó	TÓ-TÔ
TÔTÔTÔTc                  ó  — t         j                  j                  t        d«      } t         j                  j                  t        d«      }t         j                  j	                  | «      rt         j                  j	                  |«      sLt        dt        «       	 t        j                  dddddd	d
|d| ddddddgd¬«       t        dt        «       | |fS | |fS # t        $ r }t        d|› �t        «       Y d }~| |fS d }~ww xY w)Nzcert.pemzkey.pemzBGenerazione di un nuovo certificato SSL self-signed via OpenSSL...ÚopensslÚreqz-x509z-newkeyzrsa:2048z-nodesz-keyoutz-outz-daysÚ365z-subjz/CN=localhostz-addextz8subjectAltName=DNS:addictedbytheproject.nl,DNS:localhostT)Úcheckz&Certificato SSL generato con successo.z3Errore durante la generazione del certificato SSL: )r>   r?   r¬   r­   r@   r   rÜ   Ú
subprocessÚrunr  rL   rW   )Ú	cert_pathÚkey_pathrd   s      r   Úgenerate_certr•  Ò  sî   € Ü—‘—‘œZ¨Ó4€IÜ�w‰w�|‰|œJ¨	Ó2€HÜ�7‰7�>‰>˜)Ô$¬B¯G©G¯N©N¸8Ô,DÜÐPÔRXÔYð	PÜ�N‰N˜I u¨g°yÀ*ÈhØ˜x¨°¸GÀUØ˜_ØÐYð[ð õ	 ô
 Ð8¼%Ô@ð �hÐÐˆ9�hÐÐøô ò 	PÜÐEÀaÀSÐIÌ3×OÐOØ�hÐÐûð	Pús   Â7C Ã	D Ã C;Ã;D c              ƒ   óx   K  — t         r.t         j                  st         j                  «       ƒ d {  –—†  y y y 7 Œ­w©N)r  r*  Úclose©Úapps    r   Úcleanup_appr›  â  s-   è ø€ åœL×/Ò/Ü× Ñ Ó"×"Ñ"ð 0€|Ø"ús   ‚.:°8±:c                óÎ   K  — t        j                  t        «       «      | d<   d ­–— | d   j                  «        	 | d   ƒ d {  –—†  y 7 Œ# t         j                  $ r Y y w xY w­w)NÚpoller)rU   r
  rR  ÚcancelrO  r™  s    r   Ústart_background_tasksrŸ  ç  sZ   è ø€ Ü×'Ñ'Ô(9Ó(;Ó<€Cˆ�MÜ	Øˆ�M×ÑÔðØ�(‰m×ÒùÜ×!Ñ!ò Ùðüs:   ‚9A%¼A ÁA
ÁA Á	A%Á
A ÁA"ÁA%Á!A"Á"A%c                  ón  — t        j                  d¬«      } | j                  j                  t        «       | j
                  j                  dt        «       | j
                  j                  dt        «       | j
                  j                  dt        «       | j                  j                  t        «       | S )Ni   )Úclient_max_sizer+   z/playlist.m3uz/play/{id}/{filename:.*})r   ÚApplicationÚcleanup_ctxrÙ   rŸ  ÚrouterÚadd_getrb  r‹  Ú
on_cleanupr›  r™  s    r   Úinit_appr§  ð  sx   € Ü
�/‰/Ð*:Ô
;€CØ‡O�O×ÑÔ1Ô2Ø‡J�J×Ñ�sœOÔ,Ø‡J�J×Ñ�¬Ô8Ø‡J�J×ÑÐ1´;Ô?Ø‡N�N×Ñœ+Ô&Ø€Jr   Ú__main__iû   z*Avvio DAZN HTTPS Proxy Server sulla porta z...z)Contesto SSL inizializzato correttamente.zErrore inizializzazione SSL: z0.0.0.0)r[  ÚportÚssl_contextr   z
Arresto Proxy Server...)F)r*   r—  )FF)^Ú__doc__r>   ÚsysrE   r   rˆ   Úurllib.parserM   ÚsocketÚsslr‘  rU   r€   r   Útypingr   r   r   r   r   r�  r  r•   rŒ   r¤   r+  r   ÚImportErrorr   Úexitr  rÜ   rW   r  ÚMAGENTAr   r   r   r?   ÚdirnameÚabspathÚ__file__r­   Úinsertr¬   rA   rk   ri   rL   rd   rH   rC   re   rn   rl   rt   rŠ   r’   r~   rß   r˜   rŸ   r§   r¨   Ú__annotations__r±   r¾   rú   r  Úbytesr  r  r.  r/  rC  rR  rb  r‹  r•  r›  rŸ  r§  Ú__name__r©  r“  r”  rª  r@   Úcreate_default_contextÚPurposeÚCLIENT_AUTHÚload_cert_chainÚrun_appÚKeyboardInterrupt© r   r   Ú<module>rÂ     sc  ðò
ó 
Û 
Û Û Û Û Û Û 
Û Û Û 	Ý ß 3Õ 3ð €	Ø€
ØÐ ØÐ ò€ðÛÝð €Ø
€Ø
€Ø
€Ø
€Ø
€à$ñ TˆSð T˜ð T¨ó Tð �W‰W�_‰_˜RŸW™WŸ_™_¨XÓ6Ó7€
Ø�S—X‘XÑØ‡H�H‡O�O�A�zÔ"à—‘—‘˜ZÐ)?Ó@€Ø—‘—‘˜ZÐ);Ó<€ð0Ûð €Ø€ò<ð| €Ø€òAð4 #ð ¨%ó ñ6	D˜dð 	D¨4ð 	D¸Dó 	Dð˜Dð  Tó ñ
˜$˜t™*ð 
°ð 
¸dó 
ð <>Ð �4˜˜U 3¨¨S°#¨X©Ð#6Ñ7Ð7Ñ8Ó =ð˜˜S™	ó ñ˜cð ¨Sð ¸hÀtÈCÐQTÈHÁ~Ñ>Vð ÐbgÐhpÐqtÑhuÐw{Ð|ð  BEð  }Eñ  xFð  iFñ  cGó ñ"d #ð d°Sð dÀtð dÐ\_ð dÐimó dñL2¨#ð 2°dð 2È$ð 2Ð[_ó 2ðj$ ð $¨ó $ð< 15€ˆh�w×,Ñ,Ñ-Ó 4ð × 5Ñ 5ó ðA¨Sð A°Tó AòH"#òJoò<wJòtò #ò
òð ˆzÒØ€DÙÐ
4°T°F¸#Ð>ÀÔEñ Ôá'›/Ñ€IˆxØ€KØ	‡w�w‡~�~�iÔ  R§W¡W§^¡^°HÔ%=ð	Ø4˜#×4Ñ4°S·[±[×5LÑ5LÓMˆKØ×'Ñ'¨	°8Ô<ÙÐ;¸UÔCð
Øˆ�‰‘H“J Y°TÀ{ÐZ^Ö_ð' øð] ò Ù	Ð
JÐRVÕWØ€C‡H�HˆQ‡Kðûð2 ò 0Ø€DÙÐ
" 1 #Ð&¨×/Ò/ûð0ûðF ò 	ÙÐ/°¨sÐ3°SÔ9Ø�Kûð	ûð ò ÙÐ'¨Ô0Øˆ�‰�ŽðúsU   Á
J) Ä
K É	AK2 ÊL Ê)!KËKËK/ËK*Ë*K/Ë2LË7L
Ì
LÌ L5Ì4L5