§
   |	§$ –<Gã                   ó4  — d Z ddlZddlZddlmZmZ ddlmZm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dlmZ dZd	                     e¦  «        Zd
ZdZdZdZi dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d!“d#d$“d%d“d&d!“Zd'Zd(„ Zd)„ Z d*„ Z!d+„ Z"d,„ Z# G d-„ d.¦  «        Z$d/„ Z%d0„ Z&d1„ Z'd2„ Z(dWd4„Z)d5„ Z*dXd6„Z+dYd8„Z,dZd:„Z-d[d<„Z.d=„ Z/d>„ d?„ d@„ dA„ dB„ dC„ dD„ dEœZ0dF„ Z1d\dI„Z2dJ„ Z3d\dK„Z4dL„ Z5dM„ Z6d]dN„Z7d^dO„Z8dP„ Z9dQ„ Z:dR„ Z;dS„ Z<dT„ Z=dU„ Z>dV„ Z?dS )_uÅ  Home rows of My movies / My series / Continue from the addon's own data (docs/plan/milionar-library/070 Â§3).

`action=widget_row&row=<id>&limit=<n>&sort=<key>&hw=<0|1>&up=<0|1>` goes through the main.py fast path and reads only
the store and the `meta` cache (never the network). The old rows of MyTV, MyCinema, MilionÃ¡Å™, AI, Kraska and TMDb /
ÄŒSFD are the existing `widget_*` builders, addressed by the same parameter (`row=widget_mytv_channels`).
é    N)ÚdateÚ	timedelta)ÚquoteÚ
quote_plus)Úprovider_keys)ÚclicksÚmetaÚnext_upÚstoreÚurls)Úherozplugin.video.milionarzplugin://{}/zhttps://image.tmdb.org/t/p/w500zhttps://image.tmdb.org/t/p/w780é   )Údefault_movie_actionÚmenu_show_ai_chatÚmenu_show_mytvÚmenu_show_mycinemaÚmenu_show_my_collectionÚcont_movies)ÚcontÚ	landscapeÚcont_series)r   ÚepisodeÚrecent_played)r   ÚposterÚmy_movies_progress)Ú	my_moviesr   Úmy_movies_added)r   r   Úmy_movies_unwatchedÚmy_movies_genres)r   Ú
categoriesÚmy_movies_watchedÚmy_movies_allÚmy_series_next)Ú	my_seriesr   Úmy_series_newÚmy_series_added)r$   r   Úmy_series_unwatchedÚmy_series_genres)r$   r    Úmy_series_upcomingÚmy_series_all)Úsearch_my_moviesÚsearch_my_seriesc           	      ó¸   ‡— ddl Šd                     ˆfd„‰                     dt          | pd¦  «        ¦  «        D ¦   «         ¦  «                             ¦   «         S )z?Case and accent insensitive form of a text for matching titles.r   NÚ c              3   óF   •K  — | ]}‰                      |¦  «        °|V — Œd S ©N)Ú	combining)Ú.0ÚcÚunicodedatas     €ú_/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/library2/rows.pyú	<genexpr>zfold.<locals>.<genexpr>0   s8   øè è € ÐmÐm˜ÐT_×TiÒTiÐjkÑTlÔTlÐm�1ÐmÐmÐmÐmÐmÐmó    ÚNFKD)r4   ÚjoinÚ	normalizeÚstrÚlower)Útextr4   s    @r5   Úfoldr>   -   s\   ø€ àÐÐÐØ�7Š7ÐmÐmÐmÐm˜k×3Ò3°F½CÀÀ
È¹O¼OÑLÔLÐmÑmÔmÑmÔm×sÒsÑuÔuÐur7   c                 ól   — |sdS |                      d¦  «        r|                      d¦  «        s| |z   n|S )Nr.   ú/z/Users)Ú
startswith)ÚbaseÚpaths     r5   Ú_imagerD   3   s@   € Øð ØˆrØŸ/š/¨#Ñ.Ô.ÐZ°t·²ÀxÑ7PÔ7PÐZˆ4�$‰;ˆ;ÐVZÐZr7   c                 óR  ‡‡— d„ |                      ¦   «         D ¦   «         }	 ddlmŠm}  |¦   «         rMˆfd„t	          |                     ¦   «         ¦  «        D ¦   «         Šˆfd„|                      ¦   «         D ¦   «         }n# t          $ r Y nw xY w|                      |¦  «         d S )Nc                 ó   — i | ]
\  }}|¯||“ŒS © rG   ©r2   ÚkÚvs      r5   ú
<dictcomp>z_set_art.<locals>.<dictcomp>:   s#   € Ð
-Ð
-Ð
-‘D�A�q¨1Ð
-ˆ1ˆaÐ
-Ð
-Ð
-r7   r   )ÚartworkÚenabledc                 ó(   •— i | ]}| ‰|¦  «        “ŒS rG   rG   )r2   ÚurlrL   s     €r5   rK   z_set_art.<locals>.<dictcomp>>   s#   ø€ ÐEÐEÐE¨C�c˜7˜7 3™<œ<ÐEÐEÐEr7   c                 ó(   •— i | ]\  }}|‰|         “ŒS rG   rG   )r2   rI   rJ   Úmappeds      €r5   rK   z_set_art.<locals>.<dictcomp>?   s#   ø€ Ð8Ð8Ð8¡D A q�1�f˜Q”iÐ8Ð8Ð8r7   )ÚitemsÚwcs.skin.performancerL   rM   ÚsetÚvaluesÚImportErrorÚsetArt)ÚitemÚartrM   rL   rQ   s      @@r5   Ú_set_artrZ   9   sÍ   øø€ Ø
-Ð
-˜CŸIšI™KœKÐ
-Ñ
-Ô
-€CðØ9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Øˆ7‰9Œ9ð 	9ØEÐEÐEÐEµ3°s·z²z±|´|Ñ3DÔ3DÐEÑEÔEˆFØ8Ð8Ð8Ð8¨C¯IªI©K¬KÐ8Ñ8Ô8ˆCøøÝð ð ð Øˆðøøøà‡K‚K�ÑÔÐÐÐs   ¢AB Â
BÂBc                 óX   — | r't          j        dt          j        | ¦  «        ¦  «        ndS )Nz%Y-%m-%d %H:%M:%Sr.   )ÚtimeÚstrftimeÚ	localtime)Úepochs    r5   Ú_stampr`   E   s*   € ØHMÐU�4Œ=Ð,­d¬n¸UÑ.CÔ.CÑDÔDÐDÐSUÐUr7   c                 óV   — d                      t          t          | d¬¦  «        ¦  «        S )Nz{}?action=skin_run&run={}r.   )Úsafe)ÚformatÚBASEr   )Úquerys    r5   Ú_run_urlrf   I   s%   € Ø&×-Ò-­dµE¸%ÀbÐ4IÑ4IÔ4IÑJÔJÐJr7   c                   ón   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚDatazVEverything a row needs, loaded lazily and once (a handful of queries per widget call).Nc                 ó|   — |pt          j        ¦   «         | _        i | _        d| _        t	          ¦   «         | _        d S )NT)r   ÚtodayÚ_cacheÚcompleterT   Úmissing)Úselfrj   s     r5   Ú__init__zData.__init__R   s1   € ØÐ*�dœj™lœlˆŒ
ØˆŒØˆŒÝ‘u”uˆŒˆˆr7   c                 óR   — || j         vr |¦   «         | j         |<   | j         |         S r0   ©rk   )rn   ÚkeyÚmakes      r5   Ú_oncez
Data._onceX   s.   € Ø�d”kÐ!Ð!Ø#˜t™vœvˆDŒK˜ÑØŒ{˜3ÔÐr7   c                 ó>   ‡— ˆfd„}|                       d‰f|¦  «        S )Nc                  óò   •— t          j        ¦   «         } 	 |                      d‰f¦  «                             ¦   «         }|                      ¦   «          n# |                      ¦   «          w xY wd„ |D ¦   «         S )Nz'SELECT * FROM titles WHERE media_type=?c                 ó:   — i | ]}|d          t          |¦  «        “ŒS )Útmdb_id)Údict)r2   Úrs     r5   rK   z-Data.titles.<locals>.make.<locals>.<dictcomp>d   s$   € Ð8Ð8Ð8¨a�A�i”L¥$ q¡'¤'Ð8Ð8Ð8r7   )r   ÚconnectÚexecuteÚfetchallÚclose)ÚconnÚrowsÚ
media_types     €r5   rs   zData.titles.<locals>.make^   sk   ø€ Ý”=‘?”?ˆDðØ—|’|Ð$MÐPZÈ}Ñ]Ô]×fÒfÑhÔh�à—
’
‘”��ø�—
’
‘”��øøøØ8Ð8°4Ð8Ñ8Ô8Ð8s   –)A ÁA*Útitles©rt   )rn   r�   rs   s    ` r5   r‚   zData.titles]   s7   ø€ ð	9ð 	9ð 	9ð 	9ð 	9ð �zŠz˜8 ZÐ0°$Ñ7Ô7Ð7r7   c                 ó>   ‡ ‡— ‰                       d‰fˆˆ fd„¦  «        S )NÚlistc                  ó†   •— d„ t          ‰                     ‰ ¦  «                             ¦   «         d„ ¬¦  «        D ¦   «         S )Nc                 ó(   — g | ]\  }}|d          ¯|‘ŒS )Úin_listrG   ©r2   Úirz   s      r5   ú
<listcomp>z3Data.list_ids.<locals>.<lambda>.<locals>.<listcomp>h   s4   € ð 9!ð 9!ð 9!¹t¸qÀ!à�Y”<ð9!¸ð 9!ð 9!ð 9!r7   c                 óN   — | d         d         �| d         d         nd| d         fS )Né   Úlist_posi Êš;r   rG   )Úkvs    r5   ú<lambda>z1Data.list_ids.<locals>.<lambda>.<locals>.<lambda>i   s0   € È"ÈQÌ%ÐPZÔJ[ÐJg°R¸´U¸:Ô5FÐ5FÐmtÐvxÐyzÔv{Ð4|€ r7   ©rr   )Úsortedr‚   rR   )r�   rn   s   €€r5   r�   zData.list_ids.<locals>.<lambda>h   sV   ø€ ð 9!ð 9!ÅvÈdÏkÊkÐZdÑNeÔNe×NkÒNkÑNmÔNmØ)|Ð)|ðH~ñ H~ô H~ð 9!ñ 9!ô 9!€ r7   rƒ   ©rn   r�   s   ``r5   Úlist_idszData.list_idsg   s:   øø€ Ø�zŠz˜6 :Ð.ð 1!ð 1!ð 1!ð 1!ð 1!ñ "ô "ð 	"r7   c                 óB   — |                       dt          j        ¦  «        S )NÚmstates)rt   r   Úget_movie_states©rn   s    r5   Úmovie_stateszData.movie_statesl   s   € Ø�zŠz˜)¥UÔ%;Ñ<Ô<Ð<r7   c                 óB   — |                       dt          j        ¦  «        S )NÚestates)rt   r   Úget_all_episode_statesr˜   s    r5   Úepisode_stateszData.episode_stateso   s   € Ø�zŠz˜)¥UÔ%AÑBÔBÐBr7   c                 óH   ‡ ‡‡— ˆˆ ˆfd„}‰                       d‰‰f|¦  «        S )Nc                  óø   •— ‰                      ‰¦  «                             ‰¦  «        pi } 	 dd l}|                      d¦  «        r|                     | d         ¦  «        ni S # t          t
          f$ r i cY S w xY w)Nr   Úlegacy_json)r‚   ÚgetÚjsonÚloadsÚ
ValueErrorÚKeyError)Úrowr¢   r�   rn   rx   s     €€€r5   rs   zData.snapshot.<locals>.makes   sŒ   ø€ Ø—+’+˜jÑ)Ô)×-Ò-¨gÑ6Ô6Ð<¸"ˆCðØ���Ø9<¿ºÀÑ9OÔ9OÐW�t—z’z # mÔ"4Ñ5Ô5Ð5ÐUWÐWøÝ¥Ð)ð ð ð Ø�	�	�	ðøøøs   ­5A# Á#A9Á8A9Úsnapshotrƒ   )rn   r�   rx   rs   s   ``` r5   r§   zData.snapshotr   sE   øøø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	ð �zŠz˜: z°7Ð;¸TÑBÔBÐBr7   c                 ó&  ‡ — t          t                               |¦  «        ¦  «        }ˆ fd„|D ¦   «         }|rÌt          j        |¦  «        }|D ]µ}|                     |¦  «        pi ‰ j        |<   |                     d¦  «        d d…         \  }}ddddœ                     |¦  «        }‰ j        |         r|rL|‰ j        |         vr=d‰ _        ‰ j	         
                    d	                     |d
k    rdn||¦  «        ¦  «         Œ¶ˆ fd„|D ¦   «         S )Nc                 ó&   •— g | ]}|‰j         v¯|‘ŒS rG   rq   ©r2   rI   rn   s     €r5   r‹   z"Data.meta_many.<locals>.<listcomp>~   s%   ø€ Ð:Ð:Ð:˜ Q¨d¬kÐ%9Ð%9�!Ð%9Ð%9Ð%9r7   ú:é   ÚgenresÚseasonsÚepisodes)ÚmovieÚtvÚseasonFúlibrary:{}:{}r²   r±   c                 ó,   •— i | ]}|‰j         |         “ŒS rG   rq   rª   s     €r5   rK   z"Data.meta_many.<locals>.<dictcomp>ˆ   s!   ø€ Ð0Ð0Ð0 a��4”;˜q”>Ð0Ð0Ð0r7   )r…   ry   Úfromkeysr	   Úget_manyr¡   rk   Úsplitrl   rm   Úaddrc   )rn   ÚkeysÚwantedÚfoundrr   Úmediarx   Úrequireds   `       r5   Ú	meta_manyzData.meta_many|   s5  ø€ Ý•D—M’M $Ñ'Ô'Ñ(Ô(ˆØ:Ð:Ð:Ð:˜TÐ:Ñ:Ô:ˆØð 	lÝ”M &Ñ)Ô)ˆEØð lð l�Ø#(§9¢9¨S¡>¤>Ð#7°R�”˜CÑ Ø!$§¢¨3¡¤°°°Ô!3‘��wØ%-°YÈ*ÐUÐU×YÒYÐZ_Ñ`Ô`�Ø”{ 3Ô'ð l¨Hð l¸ÈÌÐUXÔIYÐ9YÐ9YØ$)�D”MØ”L×$Ò$ _×%;Ò%;ÀEÈXÒDUÐDU¸D¸DÐ[`ÐbiÑ%jÔ%jÑkÔkÐkøØ0Ð0Ð0Ð0¨4Ð0Ñ0Ô0Ð0r7   c                 ó‚   — |                       t          j        |¦  «        g¦  «        t          j        |¦  «                 S r0   )r¾   r	   Ú	key_movie©rn   rx   s     r5   r°   z
Data.movieŠ   s0   € Ø�~Š~�tœ~¨gÑ6Ô6Ð7Ñ8Ô8½¼ÈÑ9PÔ9PÔQÐQr7   c                 ó‚   — |                       t          j        |¦  «        g¦  «        t          j        |¦  «                 S r0   )r¾   r	   Úkey_tvrÁ   s     r5   Úshowz	Data.show�   s0   € Ø�~Š~�tœ{¨7Ñ3Ô3Ð4Ñ5Ô5µd´kÀ'Ñ6JÔ6JÔKÐKr7   c                 óD   — |                       d„ |D ¦   «         ¦  «         d S )Nc              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S r0   )r	   rÀ   ©r2   rŠ   s     r5   r6   z&Data.preload_movies.<locals>.<genexpr>‘   s,   è è € Ð6Ð6¨Q•t”~ aÑ(Ô(Ð6Ð6Ð6Ð6Ð6Ð6r7   ©r¾   )rn   Úidss     r5   Úpreload_movieszData.preload_movies�   s)   € Ø�ŠÐ6Ð6°#Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6r7   c                 ó<  ‡— |                       |¦  «        Št          d„ ‰                     ¦   «         D ¦   «         ˆfd„¬¦  «        }g }|D ]P}t          |                      ||¦  «        ¦  «        }|                     d|¦  «         |                     |¦  «         ŒQ|S )Nc              3   ó0   K  — | ]\  }}|d          ¯|V — ŒdS )rˆ   NrG   r‰   s      r5   r6   zData.entries.<locals>.<genexpr>–   s/   è è € ÐCÐC™D˜A˜q°a¸	´lÐC�aÐCÐCÐCÐCÐCÐCr7   c                 ó‚   •— ‰|          d         d u‰|          d         pd‰|          d         d u‰|          d         pd| fS )NrŽ   r   Úlist_added_atrG   )rŠ   r‚   s    €r5   r�   zData.entries.<locals>.<lambda>—   sT   ø€  F¨1¤I¨jÔ$9ÀÐ$EÀvÈaÄyÐQ[ÔG\ÐGaÐ`aØ$*¨1¤I¨oÔ$>ÀdÐ$JÈFÐSTÌIÐVeÔLfÐLkÐjkÐmnð$p€ r7   r‘   Úid)r‚   r’   rR   ry   r§   Ú
setdefaultÚappend)rn   r�   rÉ   Úentriesrx   Úentryr‚   s         @r5   rÒ   zData.entries“   s½   ø€ Ø—’˜ZÑ(Ô(ˆåÐCÐC F§L¢L¡N¤NÐCÑCÔCðpð pð pð pðqñ qô qˆð ˆØð 	"ð 	"ˆGÝ˜Ÿš z°7Ñ;Ô;Ñ<Ô<ˆEØ×Ò˜T 7Ñ+Ô+Ð+Ø�NŠN˜5Ñ!Ô!Ð!Ð!Øˆr7   c                 ód   — d„ |                       |¦  «                             ¦   «         D ¦   «         S )Nc                 óH   — i | ]\  }}|d          ¯||d         |d         dœ“Œ S )rˆ   rÎ   Úlast_activity_at)ÚaddedÚactivityrG   r‰   s      r5   rK   z#Data.list_times.<locals>.<dictcomp>¡   sP   € ð Mð Mð MÙ�A�q¸qÀ¼|ðM�˜Q˜Ô/¸QÐ?QÔ=RÐSÐSð Mð Mð Mr7   )r‚   rR   r“   s     r5   Ú
list_timeszData.list_times    sA   € ðMð MØ ŸKšK¨
Ñ3Ô3×9Ò9Ñ;Ô;ðMñ Mô Mð 	Mr7   c                 óˆ   ‡— |                       d„ |D ¦   «         ¦  «        Š|                       ˆfd„|D ¦   «         ¦  «         d S )Nc                 ó6   — g | ]}t          j        |¦  «        ‘ŒS rG   ©r	   rÃ   rÇ   s     r5   r‹   z'Data.preload_series.<locals>.<listcomp>¥   s    € Ð<Ð<Ð<°1¥¤¨A¡¤Ð<Ð<Ð<r7   c           
      ó  •— g | ]ƒ}‰t          j        |¦  «                                      d ¦  «        pg D ]Q}t          |                     dd¦  «        ¦  «        dk    ¯)t          j        |t          |d         ¦  «        ¦  «        ‘ŒRŒ„S )r®   Úseason_numberr   )r	   rÃ   r¡   ÚintÚ
key_season)r2   rŠ   ÚsÚshowss      €r5   r‹   z'Data.preload_series.<locals>.<listcomp>¦   s™   ø€ ð sð sð sÈØ!&¥t¤{°1¡~¤~Ô!6×!:Ò!:¸9Ñ!EÔ!EÐ!KÈðsð sØÍsÐST×SXÒSXÐYhÐjkÑSlÔSlÑOmÔOmÐpqÒOqÐOqõ œ¨­3¨q°Ô/AÑ+BÔ+BÑCÔCØOqÐOqÐOqÐOqr7   rÈ   )rn   rÉ   râ   s     @r5   Úpreload_serieszData.preload_series¤   st   ø€ Ø—’Ð<Ð<¸Ð<Ñ<Ô<Ñ=Ô=ˆØ�Šð sð sð sð sÈSð sñ sô sñ 	tô 	tð 	tð 	tð 	tr7   c                 óB   ‡ ‡— ˆ ˆfd„}‰                       d‰f|¦  «        S )zd(show, order, next_up result) of a series from the cache; order is [] when no season data is cached.c            	      óN  •— ‰                      ‰¦  «        } i }|                      d¦  «        pg D ]v}t          |                     dd¦  «        ¦  «        }|dk    rK‰                     t	          j        ‰|¦  «        g¦  «        t	          j        ‰|¦  «                 }d|v r|||<   Œw| rt          j        | |‰j        ¦  «        ng }‰ 	                    ¦   «                              ‰i ¦  «        }| ||r/t          j        |||                      d¦  «        ‰j        ¦  «        nd d dœfS )Nr®   rÞ   r   r¯   Ústatus)Úkindr   )
rÄ   r¡   rß   r¾   r	   rà   r
   Úepisode_orderrj   r�   )	rÄ   r®   rÓ   ÚnumberÚdataÚorderÚstatesrn   rx   s	          €€r5   rs   zData.series_state.<locals>.make«   s.  ø€ Ø—9’9˜WÑ%Ô%ˆDØˆGØŸš )Ñ,Ô,Ð2°ð /ð /�Ý˜UŸYšY ¸Ñ:Ô:Ñ;Ô;�Ø˜A’:�:ØŸ>š>­4¬?¸7ÀFÑ+KÔ+KÐ*LÑMÔMÍdÌoÐ^eÐgmÑNnÔNnÔo�DØ! TÐ)Ð)Ø*.˜ ™øØHLÐT•GÔ)¨$°¸¼ÑDÔDÐDÐRTˆEØ×(Ò(Ñ*Ô*×.Ò.¨w¸Ñ;Ô;ˆFØ˜Ðbgð !0¥¤°°v¸t¿xºxÈÑ?QÔ?QÐSWÔS]Ñ ^Ô ^Ð ^Ø¨$Ð/Ð/ð0ð 0r7   Úseriesrƒ   )rn   rx   rs   s   `` r5   Úseries_statezData.series_state©   s=   øø€ ð	0ð 	0ð 	0ð 	0ð 	0ð 	0ð �zŠz˜8 WÐ-¨tÑ4Ô4Ð4r7   r0   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ro   rt   r‚   r”   r™   r�   r§   r¾   r°   rÄ   rÊ   rÒ   rÙ   rã   rî   rG   r7   r5   rh   rh   O   s  € € € € € Ø`Ð`ðð ð ð ð ð  ð  ð
8ð 8ð 8ð"ð "ð "ð
=ð =ð =ðCð Cð CðCð Cð Cð1ð 1ð 1ðRð Rð RðLð Lð Lð7ð 7ð 7ðð ð ðMð Mð Mðtð tð tð
5ð 5ð 5ð 5ð 5r7   rh   c                 ó`   — t          d„ |                      d¦  «        pg D ¦   «         d¦  «        S )z)Name of the first genre of a TMDb detail.c              3   ój   K  — | ].}|                      d ¦  «        ¯|                      d ¦  «        V — Œ/dS )ÚnameN©r¡   ©r2   Úgs     r5   r6   z_genre.<locals>.<genexpr>¿   s;   è è € ÐTÐT 1ÀaÇeÂeÈFÁmÄmÐT�—’�v‘”ÐTÐTÐTÐTÐTÐTr7   r­   r.   )Únextr¡   )Údetails    r5   Ú_genrerû   ½   s3   € åÐTÐT¨¯
ª
°8Ñ(<Ô(<Ð(BÀÐTÑTÔTÐVXÑYÔYÐYr7   c           
      óœ  — |                       |¦  «        |                      d|¦  «        }}|                      ¦   «                              |¦  «        pi }|                     d¦  «        p>|                     d¦  «        p)|                     d¦  «        pd                     |¦  «        }|                      d¦  «                             |¦  «        pi }i dd“d|“d|“d|                     d¦  «        p|“d	|                     d
¦  «        pdd d…         p#t          |                     d	¦  «        pd¦  «        “dt          |                     d¦  «        p|                     d¦  «        pd¦  «        “d|                     d¦  «        p|                     d¦  «        pd“dt          t          |                     d¦  «        p)|                     d¦  «        p|                     d¦  «        ¦  «        “dt          t          |                     d¦  «        p|                     d¦  «        ¦  «        “d|                     d¦  «        p|                     d¦  «        pd“dt          |                     d¦  «        pd¦  «        “dt          |¦  «        “dd„ |                     d¦  «        pg D ¦   «         “dd„ |                     d¦  «        pg D ¦   «         “dt          |                     d¦  «        pd¦  «        “dt          |                     d¦  «        pd¦  «        “d t          |                     d ¦  «        pd¦  «        “|                     d!¦  «        pd|                     d"¦  «        pd|                     d#¦  «        pdt          |                     d$¦  «        ¦  «        t          |                     d!¦  «        ¦  «        d%œ¥S )&Nr°   Útitlerõ   úFilm {}rç   rÏ   ÚoriginalÚoriginal_titleÚyearÚrelease_dater.   é   ÚratingÚvote_averager   ÚplotÚoverviewr   Úposter_pathÚfanartÚbackdrop_pathÚbackdropÚruntimeÚgenrer­   c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS ©rÏ   rö   r÷   s     r5   r‹   zmovie_card.<locals>.<listcomp>Î   s"   € ÐGÐGÐG q�q—u’u˜T‘{”{ÐGÐGÐGr7   Úgenre_namesc                 ó`   — i | ]+}|                      d ¦  «        |                      d¦  «        “Œ,S ©rÏ   rõ   rö   r÷   s     r5   rK   zmovie_card.<locals>.<dictcomp>Î   sS   € ð  YYð  YYð  YYÐxyÐYZ×Y^ÒY^Ð_cÑYdÔYdÐfg×fkÒfkÐlrÑfsÔfsð  YYð  YYð  YYr7   Ú	playcountÚresumeÚ
resume_posÚresume_totalÚlast_played_atrÎ   rÖ   Úhidden_from_continue_at)r\   r×   rØ   ÚhiddenÚplayed)r°   r§   r™   r¡   rc   r‚   r;   ÚfloatrD   ÚPOSTERÚBACKDROPrß   rû   Úbool)rê   rx   rú   ÚsnapÚstaterý   r¦   s          r5   Ú
movie_cardr!  Â   s—  € Ø—:’:˜gÑ&Ô&¨¯ª°g¸wÑ(GÔ(GˆD€FØ×ÒÑÔ×#Ò# GÑ,Ô,Ð2°€EØ�JŠJ�wÑÔÐe 4§8¢8¨GÑ#4Ô#4Ðe¸¿ºÀÑ8HÔ8HÐeÈI×L\ÒL\Ð]dÑLeÔLe€EØ
�+Š+�gÑ
Ô
×
"Ò
" 7Ñ
+Ô
+Ð
1¨r€CðmˆF�Gð m˜T 7ð m¨G°Uð m¸JÈÏ
Ê
ÐScÑHdÔHdÐHmÐhmð mÐouÐx~÷  yCò  yCð  DRñ  ySô  ySð  yYð  WYð  []ð  \]ð  []ô  x^ð  x}õ  beð  fj÷  fnò  fnð  ouñ  fvô  fvð  f|ð  z|ñ  b}ô  b}ð mØ•e˜FŸJšJ ~Ñ6Ô6ÐW¸$¿(º(À>Ñ:RÔ:RÐWÐVWÑXÔXðmà�F—J’J˜zÑ*Ô*ÐH¨d¯hªh°zÑ.BÔ.BÐHÀbðmð •f�V V§Z¢Z°Ñ%>Ô%>Ð%oÀ$Ç(Â(È=ÑBYÔBYÐ%oÐ]a×]eÒ]eÐfnÑ]oÔ]oÑpÔpðmð •f�X v§z¢z°/Ñ'BÔ'BÐ'_ÀdÇhÂhÈÑF_ÔF_Ñ`Ô`ð	mð
 ˜Ÿ
š
 ?Ñ3Ô3ÐV°t·x²xÀÑ7PÔ7PÐVÐTVðmð
 YbÕcfÐgm×gqÒgqÐr{Ñg|Ôg|ð  hBð  ABñ  dCô  dCðmð •V˜F‘^”^ðmð ÐGÐG¨F¯JªJ°xÑ,@Ô,@Ð,FÀBÐGÑGÔGðmð JWð  YYð  YYð  ~D÷  ~Hò  ~Hð  IQñ  ~Rô  ~Rð  ~Xð  VXð  YYñ  YYô  YYðmð �˜UŸYšY {Ñ3Ô3Ð8°qÑ9Ô9ðmð <DÅUÈ5Ï9Ê9ÐUaÑKbÔKbÐKgÐfgÑEhÔEhðmð �E %§)¢)¨NÑ";Ô";Ð"@¸qÑAÔAðmð LQÏ9Ê9ÐUeÑKfÔKfÐKkÐjkØ—W’W˜_Ñ-Ô-Ð2°ÀÇÂÐHZÑ@[Ô@[Ð@`Ð_`Ý˜3Ÿ7š7Ð#<Ñ=Ô=Ñ>Ô>Í$ÈuÏyÊyÐYiÑOjÔOjÑJkÔJkðmð mð mð mr7   c                 óZ  — |                       d¦  «        p>|                      d¦  «        p)|                      d¦  «        pd                     |¦  «        }|                       d¦  «        p|                      d¦  «        pd}|||                       d¦  «        p||                       d¦  «        pddd	…         p#t          |                      d
¦  «        pd¦  «        t          |                       d¦  «        p|                      d¦  «        pd¦  «        |                       d¦  «        p|                      d¦  «        pdt	          t
          |                       d¦  «        p)|                      d¦  «        p|                      d¦  «        ¦  «        t	          t          |¦  «        |t          | ¦  «        t          |                       d¦  «        pd¦  «        |                       d¦  «        pddd	…         |                       d¦  «        r!|                       d¦  «        t          j
        v nddœS )zdWhat a series shows on a card and in the hero: its TMDb detail `show`, else the stored entry `snap`.rõ   rý   õ
   SeriÃ¡l {}r
  r.   Úoriginal_nameÚfirst_air_dateNr  r  r  r   r  r  r   Únumber_of_seasonsÚlast_air_dateræ   )rÏ   rý   rÿ   r  r  r  r   r	  r  r  r®   Úend_yearÚended)r¡   rc   r;   r  rD   r  r  rû   rß   r
   ÚENDED_STATUSES)rÄ   r  rx   rõ   r  s        r5   Úseries_factsr+  Õ   sñ  € à�8Š8�FÑÔÐd˜tŸxšx¨Ñ/Ô/Ðd°4·8²8¸GÑ3DÔ3DÐdÈ×H[ÒH[Ð\cÑHdÔHd€DØ�xŠx˜Ñ(Ô(ÐK¨D¯HªH°_Ñ,EÔ,EÐKÈ€HØ D°d·h²h¸Ñ6OÔ6OÐ6WÐSWØ—X’XÐ.Ñ/Ô/Ð5°2°r¸°rÔ:ÐY½cÀ$Ç(Â(È6ÑBRÔBRÐBXÐVXÑ>YÔ>YÝ˜DŸHšH ^Ñ4Ô4ÐU¸¿ºÀÑ8PÔ8PÐUÐTUÑVÔVØ—H’H˜ZÑ(Ô(ÐF¨D¯HªH°ZÑ,@Ô,@ÐFÀBÝ�V T§X¢X¨mÑ%<Ô%<Ð%mÀÇÂÈÑ@WÔ@WÐ%mÐ[_×[cÒ[cÐdlÑ[mÔ[mÑnÔnÝ�X xÑ0Ô0¸hÕQWÐX\ÑQ]ÔQ]Ý˜4Ÿ8š8Ð$7Ñ8Ô8Ð=¸AÑ>Ô>ÈTÏXÊXÐVeÑMfÔMfÐMlÐjlÐnpÐopÐnpÔLqØEIÇXÂXÈhÑEWÔEWÐa�T—X’X˜hÑ'Ô'­7Ô+AÐAÐAÐ]aðcð cð cr7   c                 ó  — |                       |¦  «        |                      d|¦  «        }}|                      d¦  «                             |¦  «        pi }|                      |¦  «        \  }}}|                      ¦   «                              |i ¦  «        }t          t          |||¦  «        fi dd„ |                     d¦  «        pg D ¦   «         d„ |                     d¦  «        pg D ¦   «         |                     d¦  «        pd|                     d¦  «        pdt          |                     d¦  «        ¦  «        t          |¦  «        p!t          |                     d¦  «        ¦  «        |rt          j
        ||¦  «        nd	||||d
œ¤ŽS )Nr±   c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS r  rö   r÷   s     r5   r‹   zseries_card.<locals>.<listcomp>ê   s"   € ÐEÐEÐE q�q—u’u˜T‘{”{ÐEÐEÐEr7   r­   c                 ó`   — i | ]+}|                      d ¦  «        |                      d¦  «        “Œ,S r  rö   r÷   s     r5   rK   zseries_card.<locals>.<dictcomp>ê   sS   € ð  WUð  WUð  WUÐvwÐWX×W\ÒW\Ð]aÑWbÔWbÐde×diÒdiÐjpÑdqÔdqð  WUð  WUð  WUr7   rÎ   r   rÖ   r  F)rç   r­   r  r×   rØ   r  ÚstartedÚwatchedrë   r   rÄ   rì   )rÄ   r§   r‚   r¡   rî   r�   ry   r+  r  r
   Úseries_watched)	rê   rx   rÄ   r  r¦   Ú_showrë   r   rì   s	            r5   Úseries_cardr3  ã   sÁ  € Ø—’˜7Ñ#Ô# T§]¢]°4¸Ñ%AÔ%Aˆ$€DØ
�+Š+�dÑ
Ô
×
Ò
 Ñ
(Ô
(Ð
.¨B€CØ×+Ò+¨GÑ4Ô4Ñ€Eˆ5�%Ø× Ò Ñ"Ô"×&Ò& w°Ñ3Ô3€FÝ•˜T 4¨Ñ1Ô1ð -ð -ØØEÐE¨D¯HªH°XÑ,>Ô,>Ð,DÀ"ÐEÑEÔEð  WUð  WUÐ{÷  |Dò  |Dð  EMñ  |Nô  |Nð  |Tð  RTð  WUñ  WUô  WUØ—W’W˜_Ñ-Ô-Ð2°ÀÇÂÐHZÑ@[Ô@[Ð@`Ð_`Ý˜3Ÿ7š7Ð#<Ñ=Ô=Ñ>Ô>Í4ÐPVÉ<Ì<ÐK|Õ[_Ð`c×`gÒ`gÐhzÑ`{Ô`{Ñ[|Ô[|Ø@EÐP•wÔ-¨e°VÑ<Ô<Ð<È5Ð[`ÐkpØ Fð6,ð 6,ð -ð -ð -r7   Fc                 ó‚  — |                      d¦  «        |                      d¦  «        |                      d¦  «        |                      d¦  «        p|                      d¦  «        dœ}|rD|                      d¦  «        p|                      d¦  «        }|                     ||||dœ¦  «         t          | |¦  «         d S )Nr   r	  )r   ÚthumbÚiconr	  )r   r5  r6  r   )r¡   ÚupdaterZ   )rX   Úcardr   rY   Úwides        r5   Ú_artr:  ó   s¹   € Ø—X’X˜hÑ'Ô'°$·(²(¸8Ñ2DÔ2DÈdÏhÊhÐW_ÑN`ÔN`Ø—X’X˜hÑ'Ô'Ð=¨4¯8ª8°HÑ+=Ô+=ð?ð ?€Càð UØ�xŠx˜Ñ!Ô!Ð7 T§X¢X¨hÑ%7Ô%7ˆØ�
Š
˜d¨T¸4ÈdÐSÐSÑTÔTÐTÝˆT�3ÑÔÐÐÐr7   c                 ó‚   — | d         |                       d¦  «        | d         | d         |                       d¦  «        dœS )Nrý   rÿ   r  r   r	  )rý   rÿ   r  r   r	  rö   )r8  s    r5   Ú_metar<  ü   sE   € Ø˜'”]°·²¸Ñ0DÔ0DÈdÐSYÌlÐfjÐksÔftØ—h’h˜xÑ(Ô(ð*ð *ð *r7   c                 ó0   ‡ ‡‡‡‡— ˆˆˆ ˆˆfd„dD ¦   «         S )zbBuiltins of the two hero buttons: play (resume, or a series' next episode) and the details dialog.c                 ó‚   •— g | ];}t          j        t          j        ‰‰d          |‰‰t          ‰¦  «        ‰¦  «        Ž ‘Œ<S r  )r   Úexec_forÚ
title_pathr<  )r2   Úoptionr8  r   r¼   r²   Úunaired_texts     €€€€€r5   r‹   z!_hero_buttons.<locals>.<listcomp>  sW   ø€ ð .ð .ð .Øõ ŒO�VÔ.¨u°d¸4´jÀ&È&ÐRYÕ[`ÐaeÑ[fÔ[fÐhtÑuÔuÐvð .ð .ð .r7   )Úplayrú   rG   )r¼   r8  r²   r   rB  s   `````r5   Ú_hero_buttonsrD    sF   øøøøø€ ð.ð .ð .ð .ð .ð .ð .ð .Ø,ð.ñ .ô .ð .r7   rú   c                 ó´  — t          j        d| d         |t          | ¦  «        ¬¦  «        \  }}t          j        | d         |d¬¦  «        }|s|                     dd¦  «         |                     ¦   «         }|                     d¦  «         |                     | d         ¦  «         t          | d	         ¦  «         
                    ¦   «         r(|                     t          | d	         ¦  «        ¦  «         |                     | d
         ¦  «         | d         r|                     | d         ¦  «         |                     | d         ¦  «         | d         r"|                     | d         | d         ¦  «         | d         r(|                     t%          | d         ¦  «        ¦  «         t'          || |¦  «         |                     dd¦  «         |                     dt          | d         ¦  «        ¦  «         t)          j        |t)          j        | ¦  «        gt/          d| ¦  «        ¢R dt1          | d         ¦  «        iŽ |                     ¦   «         ||fS )zEMovie card -> item; `click` is the widget's click option (clicks.py).r°   rÏ   ©r	   rý   T©ÚlabelrC   Ú	offscreenÚ
IsPlayableÚtruer  r  r  r  r  r  r\   úmilionar.typeúmilionar.tmdbÚ	resumable)r   r@  r<  ÚxbmcguiÚListItemÚsetPropertyÚgetVideoInfoTagÚsetMediaTypeÚsetTitler;   ÚisdigitÚsetYearrß   ÚsetPlotÚ	setRatingÚsetPlaycountÚsetResumePointÚsetLastPlayedr`   r:  r   Úapplyr°   rD  r  ÚgetPath)r8  r   ÚclickrC   ÚfolderrX   Útags          r5   Ú
movie_itemra    s'  € åÔ$ W¨d°4¬j¸%ÅeÈDÁkÄkÐRÑRÔR�L€Dˆ&ÝÔ $ w¤-°dÀdÐKÑKÔK€DØð /Ø×Ò˜ vÑ.Ô.Ð.Ø
×
Ò
Ñ
 Ô
 €CØ×Ò�WÑÔÐØ‡L‚L��g”ÑÔÐÝ
ˆ4�Œ<ÑÔ× Ò Ñ"Ô"ð 'Ø�Š•C˜˜VœÑ%Ô%Ñ&Ô&Ð&Ø‡K‚K��V”ÑÔÐØˆH„~ð &Ø�Š�d˜8”nÑ%Ô%Ð%Ø×Ò�T˜+Ô&Ñ'Ô'Ð'ØˆH„~ð AØ×Ò˜4 œ>¨4°Ô+?Ñ@Ô@Ð@ØˆF„|ð 0Ø×Ò�&  f¤Ñ.Ô.Ñ/Ô/Ð/Ýˆˆt�YÑÔÐØ×Ò�_ gÑ.Ô.Ð.Ø×Ò�_¥c¨$¨t¬*¡o¤oÑ6Ô6Ð6Ý„Jˆt•T”Z Ñ%Ô%Ðe­°g¸tÑ(DÔ(DÐeÐeÐeÕPTÐUYÐZbÔUcÑPdÔPdÐeÐeÐeØ�<Š<‰>Œ>˜4 Ð'Ð'r7   r_  c                 óš  ‡ — t          j        d‰ d         |t          ‰ ¦  «        ¬¦  «        \  }}t          j        ‰ d         |d¬¦  «        }|s|                     dd¦  «         |                     ¦   «         }|                     d	¦  «         |                     ‰ d         ¦  «         | 	                    ‰ d         ¦  «         t          ‰ d
         ¦  «                             ¦   «         r(|                     t          ‰ d
         ¦  «        ¦  «         |                     ‰ d         ¦  «         ‰ d         r|                     ‰ d         ¦  «         t!          |‰ |¦  «         d‰ v r‰ d         \  }}nfd„ ‰ d         D ¦   «         }	t#          |	¦  «        p)t          ‰ d                              d¦  «        pd¦  «        }t'          ˆ fd„|	D ¦   «         ¦  «        }|                     |r||k    rdnd¦  «         |rHd|fd|fd|fdt+          ||z
  d¦  «        ffD ](\  }
}|                     |
t          |¦  «        ¦  «         Œ)|                     dd¦  «         |                     dt          ‰ d         ¦  «        ¦  «         t-          j        |t-          j        ‰ ¦  «        gt3          d‰ ¦  «        ¢R ddiŽ |                     ¦   «         ||fS )Nr±   rÏ   rF  rý   TrG  rJ  rK  Útvshowr  r  r  Úcountsc                 ó"   — g | ]}|d          ¯
|‘ŒS ©ÚairedrG   ©r2   Úes     r5   r‹   zseries_item.<locals>.<listcomp>3  ó!   € Ð8Ð8Ð8�q¨Q¨w¬ZÐ8�Ð8Ð8Ð8r7   rë   rÄ   Únumber_of_episodesr   c              3   ó¾   •K  — | ]W}t          ‰d                               |d         |d         f¦  «        pi                      d¦  «        pd¦  «        dk    ¯SdV — ŒXdS ©rì   rá   ri  r  r   r�   N©rß   r¡   ©r2   ri  r8  s     €r5   r6   zseries_item.<locals>.<genexpr>5  sp   øè è € ÐvÐv˜A­#¨t°H¬~×/AÒ/AÀ1ÀSÄ6È1ÈSÌ6ÐBRÑ/SÔ/SÐ/YÐWY×.^Ò.^Ð_jÑ.kÔ.kÐ.pÐopÑ*qÔ*qÐtuÒ*uÐ*u�aÐ*uÐ*uÐ*uÐ*uÐvÐvr7   r�   ÚTotalEpisodesÚNumEpisodesÚWatchedEpisodesÚUnWatchedEpisodesrL  rM  rÉ   )rù   rú   )r   r@  r<  rO  rP  rQ  rR  rS  rT  ÚsetTvShowTitler;   rU  rV  rß   rW  rX  r:  Úlenr¡   ÚsumrY  Úmaxr   r\  rí   rD  r]  )r8  r   r^  rC   r_  rX   r`  Útotalr0  rg  rr   Úvalues   `           r5   Úseries_itemrz  !  sÕ  ø€ ÝÔ$ T¨4°¬:°uÅ5ÈÁ;Ä;ÐOÑOÔO�L€Dˆ&ÝÔ $ w¤-°dÀdÐKÑKÔK€DØð /Ø×Ò˜ vÑ.Ô.Ð.Ø
×
Ò
Ñ
 Ô
 €CØ×Ò�XÑÔÐØ‡L‚L��g”ÑÔÐØ×Ò�t˜G”}Ñ%Ô%Ð%Ý
ˆ4�Œ<ÑÔ× Ò Ñ"Ô"ð 'Ø�Š•C˜˜VœÑ%Ô%Ñ&Ô&Ð&Ø‡K‚K��V”ÑÔÐØˆH„~ð &Ø�Š�d˜8”nÑ%Ô%Ð%Ýˆˆt�YÑÔÐØ�4ÐÐØ˜hœ‰ˆˆwˆwà8Ð8˜D œMÐ8Ñ8Ô8ˆÝ�E‘
”
ÐN�c $ v¤,×"2Ò"2Ð3GÑ"HÔ"HÐ"MÈAÑNÔNˆÝÐvÐvÐvÐv ÐvÑvÔvÑvÔvˆØ×Ò˜%Ð; G¨uÒ$4Ð$4�Q�Q¸!Ñ<Ô<Ð<Øð .Ø+¨UÐ3°mÀUÐ5KÐN_ÐahÐMiØ/µ°U¸W±_ÀaÑ1HÔ1HÐIðKð 	.ð 	.‰JˆC�à×Ò˜S¥# e¡*¤*Ñ-Ô-Ð-Ð-Ø×Ò�_ dÑ+Ô+Ð+Ø×Ò�_¥c¨$¨t¬*¡o¤oÑ6Ô6Ð6Ý„Jˆt•T”[ Ñ&Ô&Ð[­°t¸TÑ)BÔ)BÐ[Ð[Ð[ÐHZÐ[Ð[Ð[Ø�<Š<‰>Œ>˜4 Ð'Ð'r7   rC  c           
      ó°  — |d         |d         }}|                       d¦  «        p,|                       di ¦  «                              ||f¦  «        pi }|dk    }t          j        |                      d¦  «        ¦  «        }|r|rd                     |¦  «        n+dn)|                      d	¦  «        pd
                     |¦  «        }	|rd                     | d         |||¦  «        nd}
t	          j        d| d         |||t          | ¦  «        |
¬¦  «        \  }}t          j        |	|d¬¦  «        }|s| 	                    dd¦  «         | 
                    ¦   «         }|                     d¦  «         |                     |	¦  «         |                     | d         ¦  «         |                     |¦  «         |                     |¦  «         |                      d¦  «        rK|                     t#          |d         ¦  «        t#          |                      d¦  «        pd¦  «        ¦  «         |                      d¦  «        r(|                     t'          |d         ¦  «        ¦  «         t)          t*          |                      d¦  «        ¦  «        }|p| d         p| d         |p| d         | d         | d         p| d         |p| d         dœ}t-          ||¦  «         | 	                    dd¦  «         | 	                    dt/          | d         ¦  «        ¦  «         | 	                    dt/          |¦  «        ¦  «         | 	                    d t/          |¦  «        ¦  «         t1          j        |t1          j        | |||r|	nd!¬"¦  «        gt7          d| |||
¦  «        ¢R d#t9          |                      d¦  «        ¦  «        iŽ |                     ¦   «         ||fS )$znItem for an episode of a series card; `kind` resume | next | upcoming | new | recent; `click` as in clicks.py.rá   ri  Úepisode_staterì   ÚupcomingÚair_datezvyjde {}Úvyjderõ   z
Epizoda {}z{} S{:02d}E{:02d} vyjde {}rý   Nr   rÏ   )rB  TrG  rJ  rK  r  r  r   r  Ústillr	  r   )r5  r6  r   r	  r   rL  rM  z
milionar.sz
milionar.er.   )ræ   rN  )r¡   r
   Ú	air_labelrc   r   r@  r<  rO  rP  rQ  rR  rS  rT  rt  Ú	setSeasonÚ
setEpisoderZ  r  rY  rß   rD   r  rZ   r;   r   r\  r   rD  r  r]  )r8  r   rç   r^  ré   Úep_nor   r}  Úwhenrý   ÚnoterC   r_  rX   r`  r€  rY   s                    r5   Úepisode_itemr‡  A  sÉ  € à˜C”L '¨#¤,ˆE€FØ�HŠH�_Ñ%Ô%ÐZ¨¯ª°(¸BÑ)?Ô)?×)CÒ)CÀVÈUÀOÑ)TÔ)TÐZÐXZ€EØ�zÒ!€HÝÔ˜WŸ[š[¨Ñ4Ô4Ñ5Ô5€DØ>FÐ¨Ð9ˆZ×Ò˜tÑ$Ô$Ð$°'°'ÈWÏ[Ê[ÐY_ÑM`ÔM`ÐM~Ðdp×dwÒdwÐx}Ñd~Ôd~€EØV^ÐhÐ'×.Ò.¨t°G¬}¸fÀeÈTÑRÔRÐRÐdh€DÝÔ$ Y°°T´
¸EÀ6È5ÕRWÐX\ÑR]ÔR]ÐlpÐqÑqÔq�L€Dˆ&ÝÔ %¨d¸dÐCÑCÔC€DØð /Ø×Ò˜ vÑ.Ô.Ð.Ø
×
Ò
Ñ
 Ô
 €CØ×Ò�YÑÔÐØ‡L‚L�ÑÔÐØ×Ò�t˜G”}Ñ%Ô%Ð%Ø‡M‚M�&ÑÔÐØ‡N‚N�5ÑÔÐØ‡y‚y�ÑÔð ^Ø×Ò�5  |Ô!4Ñ5Ô5µu¸U¿YºYÀ~Ñ=VÔ=VÐ=[ÐZ[Ñ7\Ô7\Ñ]Ô]Ð]Ø‡y‚y�ÑÔð 2Ø×Ò�˜U ;Ô/Ñ0Ô0Ñ1Ô1Ð1Ý•8˜WŸ[š[¨Ñ1Ô1Ñ2Ô2€EØÐ=˜T (œ^Ð=¨t°H¬~ÀuÐG^ÐPTÐU]ÔP^ÐjnÐowÔjxØ˜(”^Ð5 t¨H¤~ÀEÐD[ÈTÐRZÌ^ð]ð ]€CåˆT�3ÑÔÐØ×Ò�_ iÑ0Ô0Ð0Ø×Ò�_¥c¨$¨t¬*¡o¤oÑ6Ô6Ð6Ø×Ò�\¥3 v¡;¤;Ñ/Ô/Ð/Ø×Ò�\¥3 u¡:¤:Ñ.Ô.Ð.Ý„Jˆt•T”\ $¨°ÈÐ?X¸u¸uÐVXÐYÑYÔYð nÝ˜i¨¨v°u¸dÑCÔCðnð nð nÝOSÐTY×T]ÒT]Ð^jÑTkÔTkÑOlÔOlðnð nð nà�<Š<‰>Œ>˜4 Ð'Ð'r7   c                 ó8  — t          j        d                     ||¦  «        d                     t          | |¦  «        d¬¦  «        }|                     ¦   «                              |¦  «         |                     dddœ¦  «         |                     ¦   «         |dfS )Nz{} ({})z'{}?action=mlist&kind={}&genre={}&skin=1TrG  zDefaultGenre.png)r6  r5  )rO  rP  rc   rd   rR  rT  rW   r]  )rç   Úgenre_idrõ   ÚcountrX   s        r5   Ú
genre_itemr‹  d  sš   € ÝÔ )×"2Ò"2°4¸Ñ"?Ô"?Ø!J×!QÒ!QÕRVÐX\Ð^fÑ!gÔ!gÐswðyñ yô y€Dà×ÒÑÔ×#Ò# DÑ)Ô)Ð)Ø‡K‚KÐ+Ð6HÐIÐIÑJÔJÐJØ�<Š<‰>Œ>˜4 Ð%Ð%r7   c                 ó0   — |                       dd¦  «         S )NrØ   r   rö   ©r3   s    r5   r�   r�   o  s   € ˜AŸEšE *¨aÑ0Ô0Ð0€ r7   c                 ó0   — |                       dd¦  «         S )Nr×   r   rö   r�  s    r5   r�   r�   o  s   € ÈÏÊÈgÐWXÑHYÔHYÐGY€ r7   c                 óX   — |                       d|                       dd¦  «        ¦  «         S )Nr\   rØ   r   rö   r�  s    r5   r�   r�   p  s%   € ˜Ÿš˜f a§e¢e¨J¸Ñ&:Ô&:Ñ;Ô;Ð;€ r7   c                 ó6   — | d                               ¦   «         S )Nrý   ©r<   r�  s    r5   r�   r�   p  s   € ÐRSÐT[ÔR\×RbÒRbÑRdÔRd€ r7   c                 óœ   — t          |                      dd¦  «        ¦  «                             ¦   «         rt          | d         ¦  «        nd S )Nr  r.   r   )r;   r¡   rU  rß   r�  s    r5   r�   r�   q  s?   € ­3¨q¯uªu°V¸RÑ/@Ô/@Ñ+AÔ+A×+IÒ+IÑ+KÔ+KÐR�˜Q˜vœY™œ˜ÐQRÐS€ r7   c                 ó0   — |                       dd¦  «         S )Nr  r   rö   r�  s    r5   r�   r�   q  s   € Ðlm×lqÒlqÐrzÐ|}Ñl~Ôl~Ðk~€ r7   c                 ó.   — |                       dd¦  «        S )NÚairÚ9999rö   r�  s    r5   r�   r�   r  s   € �a—e’e˜E 6Ñ*Ô*€ r7   )rØ   r×   r\   rý   r  r  r•  c                 ó¶   — |t           v s|dk    r|n|}|dk    r%t          | ¦  «        } t          j        | ¦  «         | S t	          | t           |         ¬¦  «        S )NÚrandomr‘   )Ú	SORT_KEYSr…   r˜  Úshuffler’   )ÚcardsÚsortÚdefaults      r5   Ú_sortedrž  v  sa   € Ø�9Ð$Ð$¨°Ò(8Ð(8ˆ4ˆ4¸g€DØˆxÒÐÝ�U‘”ˆÝŒ�uÑÔÐØˆÝ�%�Y tœ_Ð-Ñ-Ô-Ð-r7   r.   é   c                 óF  ‡ ‡‡‡
— ‰                      d¦  «        }‰ dk    r0d„ ‰                     ¦   «                              ¦   «         D ¦   «         }‰                     |¦  «         ˆfd„|D ¦   «         }‰ dv rˆ fd„|D ¦   «         }d}	n5‰ dk    rd	}	n,‰ d
k    rd„ |D ¦   «         d	}	}n‰ dk    rd„ |D ¦   «         d}	}nd}	|r‰ dvrd„ |D ¦   «         }|pt          ‰          d         dk    Š
t          j        ‰ ‰¦  «        Šˆˆ
fd„t          |||	¦  «        d |…         D ¦   «         S )Nr°   r   c                 óh   — g | ]/\  }}t          |                     d ¦  «        pd¦  «        dk    ¯-|‘Œ0S )r  r   )r  r¡   )r2   rŠ   Ústs      r5   r‹   z_movie_row.<locals>.<listcomp>‚  sA   € ÐbÐbÐb‘U�Q˜½UÀ2Ç6Â6È,ÑCWÔCWÐC\Ð[\Ñ=]Ô=]Ð`aÒ=aÐ=aˆqÐ=aÐ=aÐ=ar7   c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS rG   )r!  ©r2   rŠ   rê   s     €r5   r‹   z_movie_row.<locals>.<listcomp>„  s#   ø€ Ð.Ð.Ð. Q�Z˜˜aÑ Ô Ð.Ð.Ð.r7   )r   r   c                 ó`   •— g | ]*}|d          dk    ¯|d         dk    ¯‰dk    r|d         °(|‘Œ+S )r  r   r  r   r  rG   )r2   r3   r¦   s     €r5   r‹   z_movie_row.<locals>.<listcomp>†  sK   ø€ Ð|Ð|Ð|�q Q x¤[°1¢_ _¸¸;¼È1Ò9LÐ9LÐVYÐ]jÒVjÐVjÐopÐqyÔozÐVj�ÐVjÐVjÐVjr7   rØ   r   r×   r   c                 ó:   — g | ]}|d          dk    ¯|d         °|‘ŒS )r  r   r  rG   ©r2   r3   s     r5   r‹   z_movie_row.<locals>.<listcomp>‹  s/   € ÐVÐVÐV ¨a°¬nÀÒ.AÐ.AÈ!ÈHÌ+Ð.A˜!Ð.AÐ.AÐ.Ar7   r!   c                 ó*   — g | ]}|d          dk    ¯|‘ŒS ©r  r   rG   r§  s     r5   r‹   z_movie_row.<locals>.<listcomp>�  s&   € ÐAÐAÐA ¨a°¬n¸qÒ.@Ð.@˜!Ð.@Ð.@Ð.@r7   r\   rý   )r!   c                 ó*   — g | ]}|d          dk    ¯|‘ŒS r©  rG   r§  s     r5   r‹   z_movie_row.<locals>.<listcomp>‘  s&   € Ð9Ð9Ð9�q Q {¤^°qÒ%8Ð%8�Ð%8Ð%8Ð%8r7   r�   r   c                 ó4   •— g | ]}t          d |‰‰¦  «        ‘ŒS )r°   ©Ú_descriptor)r2   r3   r^  r   s     €€r5   r‹   z_movie_row.<locals>.<listcomp>”  s'   ø€ ÐeÐeÐe¸!�K˜  E¨9Ñ5Ô5ÐeÐeÐer7   )r”   r™   rR   rÊ   Ú	CATALOGUEr   Úresolverž  )r¦   rê   rœ  Úhide_watchedÚstyler^  ÚlimitrÉ   r›  r�  r   s   ``   `    @r5   Ú
_movie_rowr³    sŽ  øøøø€ Ø
�-Š-˜Ñ
 Ô
 €CØ
ˆmÒÐØbÐb˜d×/Ò/Ñ1Ô1×7Ò7Ñ9Ô9ÐbÑbÔbˆØ×Ò˜ÑÔÐØ.Ð.Ð.Ð.¨#Ð.Ñ.Ô.€EØ
Ð3Ð3Ð3Ø|Ð|Ð|Ð|˜EÐ|Ñ|Ô|ˆØˆˆØ	Ð!Ò	!Ð	!ØˆˆØ	Ð%Ò	%Ð	%ØVÐV UÐVÑVÔVÐX_ˆwˆˆØ	Ð#Ò	#Ð	#ØAÐA UÐAÑAÔAÀ6ˆwˆˆàˆØð :˜Ð#9Ð9Ð9Ø9Ð9˜EÐ9Ñ9Ô9ˆØÐ+�) Cœ.¨Ô+°Ò;€IÝŒN˜3 Ñ&Ô&€EØeÐeÐeÐeÐe½wÀuÈdÐT[Ñ?\Ô?\Ð]cÐ^cÐ]cÔ?dÐeÑeÔeÐer7   c                 óJ   ‡ — ‰                       |¦  «         ˆ fd„|D ¦   «         S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS rG   )r3  r¤  s     €r5   r‹   z!_series_cards.<locals>.<listcomp>™  s#   ø€ Ð.Ð.Ð. Q�K˜˜aÑ Ô Ð.Ð.Ð.r7   )rã   )rê   rÉ   s   ` r5   Ú_series_cardsr¶  —  s1   ø€ Ø×Ò˜ÑÔÐØ.Ð.Ð.Ð.¨#Ð.Ñ.Ô.Ð.r7   c                 ó’  ‡ ‡‡‡‡— t          j        ‰ ‰¦  «        Š‰ dk    r2d„ |                     d¦  «                             ¦   «         D ¦   «         }n|                     d¦  «        }t          ||¦  «        }	|j        }
‰ dv �rpg }|	D �]Š‰d         r‰ dk    rŒ‰d         }‰ dv r=|d         d	v s|d         d
k    r&|r$|                     ‰|d         |d         f¦  «         Œ[‰ dk    rj|
t          t          ¬¦  «        z
   
                    ¦   «         Šˆˆfd„‰d         D ¦   «         }|r(|                     ‰t          |d„ ¬¦  «        df¦  «         ŒËd„ ‰d         D ¦   «         }|r(|                     ‰t          |d„ ¬¦  «        d
f¦  «         �Œ	‰ dk    r|                     d„ ¬¦  «         n/‰ dk    r|                     d„ d¬¦  «         nt          ||¦  «        }ˆfd„|d |…         D ¦   «         S ‰ dk    rd„ |	D ¦   «         d}}	n‰ dk    rd}nd}|rd „ |	D ¦   «         }	ˆˆ ˆfd!„t          |	||¦  «        d |…         D ¦   «         S )"Nr   c                 óB   — g | ]\  }}|                      d ¦  «        ¯|‘ŒS )rÖ   rö   r‰   s      r5   r‹   z_series_row.<locals>.<listcomp>Ÿ  s.   € ÐTÐTÐT‘T�Q˜¸!¿%º%Ð@RÑ:SÔ:SÐTˆqÐTÐTÐTr7   r±   )r   r#   r%   r)   r  r   )r   r#   rç   )r  rù   r}  r   r%   )Údaysc           	      óÞ   •— g | ]i}|d          r_|d         ‰k    rSt          ‰d                              |d         |d         f¦  «        pi                      d¦  «        pd¦  «        dk    ¯g|‘ŒjS )rg  r~  rì   rá   ri  r  r   rn  )r2   ri  r8  Úcutoffs     €€r5   r‹   z_series_row.<locals>.<listcomp>¯  s�   ø€ ð kð kð k˜q°Q°w´Zð kÀAÀjÄMÐU[ÒD[ÐD[Ý  $ x¤.×"4Ò"4°a¸´f¸aÀ¼fÐ5EÑ"FÔ"FÐ"LÈ"×!QÒ!QÐR]Ñ!^Ô!^Ð!cÐbcÑdÔdÐhiÒiÐið ØiÐiÐir7   rë   c                 ó   — | d         S ©Nr~  rG   ©ri  s    r5   r�   z_series_row.<locals>.<lambda>²  ó
   € ÀÀ:Ä€ r7   r‘   Únewc                 ó2   — g | ]}|d          °
|d         ¯|‘ŒS )rg  r~  rG   rh  s     r5   r‹   z_series_row.<locals>.<listcomp>´  s*   € ÐVÐVÐV˜q¸¸7¼ÐVÈÈ*ÌÐV˜ÐVÐVÐVr7   c                 ó   — | d         S r½  rG   r¾  s    r5   r�   z_series_row.<locals>.<lambda>¶  r¿  r7   r)   c                 ó   — | d         d         S ©Nr�   r~  rG   ©Úts    r5   r�   z_series_row.<locals>.<lambda>¸  ó   €  Q q¤T¨*Ô%5€ r7   c                 ó   — | d         d         S rÄ  rG   rÅ  s    r5   r�   z_series_row.<locals>.<lambda>º  rÇ  r7   T)rr   Úreversec           	      ó@   •— g | ]\  }}}t          d |‰||¬¦  «        ‘ŒS )r   ©r   Úepisode_kindr¬  )r2   r3   ri  rI   r^  s       €r5   r‹   z_series_row.<locals>.<listcomp>½  s6   ø€ ÐiÐiÐiÑPWÐPQÐSTÐVW•˜I q¨%¸ÈÐKÑKÔKÐiÐiÐir7   r'   c                 ó"   — g | ]}|d          °
|‘ŒS )r/  rG   r§  s     r5   r‹   z_series_row.<locals>.<listcomp>¿  s!   € Ð?Ð?Ð? °!°I´,Ð?˜!Ð?Ð?Ð?r7   r×   r&   rý   c                 ó"   — g | ]}|d          °
|‘ŒS )r0  rG   r§  s     r5   r‹   z_series_row.<locals>.<listcomp>Å  s!   € Ð6Ð6Ð6�q¨¨9¬Ð6�Ð6Ð6Ð6r7   c           	      ób   •— g | ]+}t          d |‰‰pt          ‰         d         dk    ¦  «        ‘Œ,S )r±   r�   r   )r­  r®  )r2   r3   r^  r¦   r±  s     €€€r5   r‹   z_series_row.<locals>.<listcomp>Æ  sJ   ø€ ð <ð <ð <Øõ ˜˜a ¨Ð)Cµ)¸C´.ÀÔ2CÈÒ(SÑTÔTð <ð <ð <r7   )r   r¯  r‚   rR   r”   r¶  rj   rÑ   r   ÚNEW_DAYSÚ	isoformatrw  Úminrœ  Ú_sorted_pairsrž  )r¦   rê   rœ  r°  r}  r±  r^  r²  rÉ   r›  rj   rR   r   ÚfreshÚaheadr�  r8  r»  s   `    ``         @@r5   Ú_series_rowrÖ  œ  s  øøøøø€ ÝŒN˜3 Ñ&Ô&€EØ
ˆmÒÐØTÐT˜TŸ[š[¨Ñ.Ô.×4Ò4Ñ6Ô6ÐTÑTÔTˆˆà�mŠm˜DÑ!Ô!ˆÝ˜$ Ñ$Ô$€EØŒJ€EØ
ÐVÐVÑVØˆØð 	^ñ 	^ˆDØ�HŒ~ð  #¨Ò"6Ð"6ØØ˜”MˆEØÐ7Ð7Ð7Ø˜”=Ð$6Ð6Ð6¸5À¼=ÈJÒ;VÐ;VÐ[cÐ;VØ—L’L $¨¨iÔ(8¸%À¼-Ð!HÑIÔIÐIøØ˜Ò'Ð'Ø¥)µÐ":Ñ":Ô":Ñ:×EÒEÑGÔG�ðkð kð kð kð k D¨¤Mð kñ kô k�àð YØ—L’L $­¨EÐ7NÐ7NÐ(OÑ(OÔ(OÐQVÐ!WÑXÔXÐXøàVÐV D¨¤MÐVÑVÔV�Øð ^Ø—L’L $­¨EÐ7NÐ7NÐ(OÑ(OÔ(OÐQ[Ð!\Ñ]Ô]Ð]ùØÐ&Ò&Ð&Ø�JŠJÐ5Ð5ˆJÑ6Ô6Ð6Ð6Ø�OÒ#Ð#Ø�JŠJÐ5Ð5¸tˆJÑDÔDÐDÐDå! %¨Ñ.Ô.ˆEØiÐiÐiÐiÐ[`ÐagÐbgÐagÔ[hÐiÑiÔiÐiØ
Ð#Ò#Ð#Ø?Ð? UÐ?Ñ?Ô?ÀˆwˆˆØ	Ð!Ò	!Ð	!ØˆˆàˆØð 7Ø6Ð6˜EÐ6Ñ6Ô6ˆð<ð <ð <ð <ð <ð <Ý˜U D¨'Ñ2Ô2°6°E°6Ô:ð<ñ <ô <ð <r7   c                 ó”   ‡— t          d„ | D ¦   «         |d¦  «        }d„ t          |¦  «        D ¦   «         Št          | ˆfd„¬¦  «        S )Nc                 ó   — g | ]
}|d          ‘ŒS )r   rG   )r2   rÆ  s     r5   r‹   z!_sorted_pairs.<locals>.<listcomp>Ë  s   € Ð)Ð)Ð)˜a�Q�q”TÐ)Ð)Ð)r7   rØ   c                 ó4   — i | ]\  }}t          |¦  «        |“ŒS rG   r  )r2   rŠ   r3   s      r5   rK   z!_sorted_pairs.<locals>.<dictcomp>Ì  s$   € Ð3Ð3Ð3™$˜!˜Q�R�‰UŒU�AÐ3Ð3Ð3r7   c                 ó:   •— ‰t          | d         ¦  «                 S )Nr   r  )rÆ  rë   s    €r5   r�   z_sorted_pairs.<locals>.<lambda>Í  s   ø€  u­R°°!´©X¬X¤€ r7   r‘   )rž  Ú	enumerater’   )rR   rœ  r›  rë   s      @r5   rÓ  rÓ  Ê  s[   ø€ ÝÐ)Ð) 5Ð)Ñ)Ô)¨4°Ñ<Ô<€EØ3Ð3¥)¨EÑ"2Ô"2Ð3Ñ3Ô3€EÝ�%Ð6Ð6Ð6Ð6Ð7Ñ7Ô7Ð7r7   c           	      óÖ  ‡	‡
‡‡— |                       d¦  «        rdndŠ|                     ‰¦  «        }|                     ˆfd„|D ¦   «         ¦  «        }i i cŠ	Š|                     ¦   «         D ]É\  }}d|vrNd|_        |j                             d                     ‰|                     d¦  «        d	         ¦  «        ¦  «         | 	                    d¦  «        pg D ]Z}| 	                    d
¦  «        }‰	 	                    |d¦  «        d	z   ‰	|<   | 	                    d¦  «        pt          |¦  «        ‰|<   Œ[ŒÊ‰dk    rdndŠ
ˆ	ˆ
ˆfd„t          ‰	ˆfd„¬¦  «        d |…         D ¦   «         S )Nr   r°   r±   c              3   ót   •K  — | ]2}‰d k    rt          j        |¦  «        nt          j        |¦  «        V — Œ3dS )r°   N)r	   rÀ   rÃ   )r2   rŠ   r¼   s     €r5   r6   z_genre_row.<locals>.<genexpr>Ó  sF   øè è € ÐdÐdÐ[\°%¸7Ò2BÐ2B�Tœ^¨AÑ.Ô.Ð.ÍÌÐTUÉÌÐdÐdÐdÐdÐdÐdr7   r­   Fr³   r«   r�   rÏ   r   rõ   Úmoviesrí   c                 ó:   •— g | ]}d ‰|‰|         ‰|         gdœ‘ŒS )r  )rç   ÚargsrG   )r2   rø   rd  rç   Únamess     €€€r5   r‹   z_genre_row.<locals>.<listcomp>Þ  sH   ø€ ð Mð Mð MØð  t¨Q°°a´¸&À¼)Ð&DÐEÐEð Mð Mð Mr7   c                 ó8   •— ‰|                                ¦   «         S r0   r‘  )rø   rá  s    €r5   r�   z_genre_row.<locals>.<lambda>ß  s   ø€ °%¸´(·.².Ñ2BÔ2B€ r7   r‘   )rA   r”   r¾   rR   rl   rm   r¸   rc   r·   r¡   r;   r’   )r¦   rê   r²  rÉ   Údetailsrr   rú   r  rø   rd  rç   r¼   rá  s            @@@@r5   Ú
_genre_rowrä  Ð  s«  øøøø€ Ø—~’~ kÑ2Ô2Ð<ˆGˆG¸€EØ
�-Š-˜Ñ
Ô
€CØ�nŠnÐdÐdÐdÐdÐ`cÐdÑdÔdÑdÔd€GØ˜€M€FˆEØ—}’}‘”ð 3ð 3‰ˆˆVØ˜6Ð!Ð!Ø!ˆDŒMØŒL×Ò˜_×3Ò3°E¸3¿9º9ÀS¹>¼>È!Ô;LÑMÔMÑNÔNÐNØ—Z’Z Ñ)Ô)Ð/¨Rð 	3ð 	3ˆEØ—	’	˜$‘”ˆAØŸ
š
 1 aÑ(Ô(¨1Ñ,ˆF�1‰IØ—y’y Ñ(Ô(Ð2­C°©F¬FˆE�!‰HˆHð	3ð  Ò'Ð'ˆ8ˆ8¨X€DðMð Mð Mð Mð Mð MÝ˜FÐ(BÐ(BÐ(BÐ(BÐCÑCÔCÀFÀUÀFÔKðMñ Mô Mð Mr7   c                 ól  ‡	— t          j        d|¦  «        }t          ¦   «         g }}t          j        d¦  «        D ]VŠ	‰	d         ‰	d         f}||v s‰	                     d¦  «        sŒ,|                     |¦  «         |                     ‰	¦  «         ŒW|d|…         }|                      d„ |D ¦   «         ¦  «         |  	                    d„ |D ¦   «         ¦  «         g }|D ]ÕŠ	‰	d         d	k    r9|                     t          d	t          | ‰	d         ¦  «        |¦  «        ¦  «         ŒGt          | ‰	d         ¦  «        }t          ˆ	fd
„|d         D ¦   «         ‰	                     d¦  «        pd‰	                     d¦  «        pddddœ¦  «        }|                     t          d|||d¬¦  «        ¦  «         ŒÖ|S )zKLatest distinct titles of the play log (a series shows its latest episode).r   éP   r�   rx   Ú
started_atNc                 ó6   — g | ]}|d          dk    ¯|d         ‘ŒS ©r�   r°   rx   rG   ©r2   Úlogs     r5   r‹   z_recent_row.<locals>.<listcomp>í  ó,   € ÐXÐXÐX¨C¸3¸|Ô;LÐPWÒ;WÐ;W˜˜YœÐ;WÐ;WÐ;Wr7   c                 ó6   — g | ]}|d          dk    ¯|d         ‘ŒS ré  rG   rê  s     r5   r‹   z_recent_row.<locals>.<listcomp>î  rì  r7   r°   c              3   ó”   •K  — | ]B}|d          |d         f‰                      d¦  «        ‰                      d¦  «        fk    ¯>|V — ŒCdS )rá   ri  r²   r   Nrö   )r2   ri  rë  s     €r5   r6   z_recent_row.<locals>.<genexpr>õ  s\   øè è € ÐtÐt !¸¸3¼ÀÀ3ÄÐ8HÈSÏWÊWÐU]ÑM^ÔM^Ð`c×`gÒ`gÐhqÑ`rÔ`rÐLsÒ8sÐ8s˜AÐ8sÐ8sÐ8sÐ8sÐtÐtr7   rë   r²   r�   r   r.   )rá   ri  rõ   r~  ÚrecentrË  )r   r¯  rT   r   Úrecent_logsr¡   r¸   rÑ   rÊ   rã   r­  r!  r3  rù   )
rê   r^  r²  ÚseenÚlogsrr   rR   r8  r   rë  s
            @r5   Ú_recent_rowró  â  sØ  ø€ åŒN˜?¨EÑ2Ô2€EÝ‘”˜ˆ$€DÝÔ  Ñ$Ô$ð ð ˆØ�<Ô  # i¤.Ð1ˆØ�$ˆ;ˆ;˜cŸgšg lÑ3Ô3ˆ;ØØ�Š�‰ŒˆØ�Š�CÑÔÐÐØ���Œ<€DØ×ÒÐXÐX°4ÐXÑXÔXÑYÔYÐYØ×ÒÐXÐX°4ÐXÑXÔXÑYÔYÐYØ€EØð fð fˆØˆ|Ô Ò'Ð'Ø�LŠL� W­j¸¸sÀ9¼~Ñ.NÔ.NÐPUÑVÔVÑWÔWÐWÐWå˜t S¨¤^Ñ4Ô4ˆDÝÐtÐtÐtÐt t¨G¤}ÐtÑtÔtØ!$§¢¨Ñ!2Ô!2Ð!7°a¸c¿gºgÀiÑ>PÔ>PÐ>UÐTUÐ_aÐoqÐrÐrñtô tˆGà�LŠL� Y°°eÀWÐ[cÐdÑdÔdÑeÔeÐeÐeØ€Lr7   c                 ó®  ‡‡— d„ ‰                      ¦   «         D ¦   «         }| dk    rid„ ‰d         D ¦   «         }t          |¦  «        p)t          ‰d                              d¦  «        pd¦  «        t	          ˆfd„|D ¦   «         ¦  «        g|d	<   |�<‰d                              |d         |d         f¦  «        pi Šˆfd„dD ¦   «         |d<   | |||||dœS )zWRetain only display fields: no season payloads or tuple-keyed watch-state maps on disk.c                 ó"   — i | ]\  }}|d v¯	||“ŒS ))rë   rÄ   rì   r   r­   r  rG   rH   s      r5   rK   z_descriptor.<locals>.<dictcomp>ý  sA   € ð Lð Lð L‘d�a˜¨aØJð/Kð /KˆQ�ð /Kð /Kð /Kr7   r±   c                 ó"   — g | ]}|d          ¯
|‘ŒS rf  rG   rh  s     r5   r‹   z_descriptor.<locals>.<listcomp>   rj  r7   rë   rÄ   rk  r   c              3   ó¾   •K  — | ]W}t          ‰d                               |d         |d         f¦  «        pi                      d¦  «        pd¦  «        dk    ¯SdV — ŒXdS rm  rn  ro  s     €r5   r6   z_descriptor.<locals>.<genexpr>  ss   øè è € ÐÐ Qµ3¸¸X¼×8JÒ8JÈAÈcÌFÐTUÐVYÔTZÐK[Ñ8\Ô8\Ð8bÐ`b×7gÒ7gÐhsÑ7tÔ7tÐ7yÐxyÑ3zÔ3zÐ}~Ò3~Ð3~˜qÐ3~Ð3~Ð3~Ð3~ÐÐr7   rd  Nrì   rá   ri  c                 ó<   •— i | ]}|‰                      |¦  «        “ŒS rG   rö   )r2   rI   r   s     €r5   rK   z_descriptor.<locals>.<dictcomp>  s%   ø€ Ð!gÐ!gÐ!g°a ! U§Y¢Y¨q¡\¤\Ð!gÐ!gÐ!gr7   )r  r  r  r|  )rç   r8  r^  r   r   rÌ  )rR   ru  rß   r¡   rv  )	rç   r8  r^  r   r   rÌ  Úplainrg  r   s	    `      @r5   r­  r­  û  s  øø€ ðLð L˜dŸjšj™lœlð Lñ Lô L€Eàˆt‚|€|Ø8Ð8˜D œMÐ8Ñ8Ô8ˆÝ˜u™:œ:ÐY­¨T°&¬\×-=Ò-=Ð>RÑ-SÔ-SÐ-XÐWXÑ)YÔ)YÝÐÐÐÐ¨%ÐÑÔÑÔðAˆˆh‰àÐØ�X”×"Ò" G¨C¤L°'¸#´,Ð#?Ñ@Ô@ÐFÀBˆØ!gÐ!gÐ!gÐ!gÐ;fÐ!gÑ!gÔ!gˆˆoÑØ %°%ÀiØ°ð>ð >ð >r7   c           	      óB  — ddl m} d }| D �]}|d         }|dk    rŒ|d         dk    r|d         t          j        v rŒ3|                     d¦  «        pi }	 |€|                     |¦  «        }|                     ||d	         d
         |                     d¦  «        |                     d¦  «        ¦  «        |d<   Œ°# t          $ rW}d|_        t          j
        d                     t          |¦  «        j        |¦  «        t          j        ¦  «         Y d }~�Œd }~ww xY w| S )Nr   )Úmenurç   r  rÌ  r}  r^  r   r8  rÏ   rá   ri  rû  Fu0   [MilionÃ¡Å™ Library] context menu failed: {}: {})Úwcs.library2rû  r   ÚUNAIRED_NOTEr¡   ÚMenuÚbuildÚ	Exceptionrl   Úxbmcrë  rc   Útyperï   Ú
LOGWARNING)Údescriptorsrê   rû  ÚmodelrÓ   rç   ÚepÚexcs           r5   Ú_preparer  
  sF  € Ø!Ð!Ð!Ð!Ð!Ð!Ø€EØð zñ zˆØ�VŒ}ˆØ�7Š?ˆ?Øà�Ô  JÒ.Ð.°5¸´>ÅVÔEXÐ3XÐ3XØØ�YŠY�yÑ!Ô!Ð' Rˆð	zØˆ}ØŸ	š	 $™œ�Ø!ŸKšK¨¨e°F¬m¸DÔ.AÀ2Ç6Â6È#Á;Ä;ÐPR×PVÒPVÐWZÑP[ÔP[Ñ\Ô\ˆE�&‰MˆMøÝð 	zð 	zð 	zØ!ˆDŒMÝŒHÐG×NÒNÍtÐTWÉyÌyÔOaÐcfÑgÔgÕimÔixÑyÔyÐyÐyÐyÐyÐyÑyøøøøð	zøøøð Ðs   ÁA$B;Â;
DÃADÄDc                 ó,  — g }| D �]}|d         }|dk    rt          |d         Ž \  }}}nl|dk    r/t          |d         |d         |d         |d         ¦  «        \  }}}n7|dk    rt          nt          } ||d         |d	         |d         ¦  «        \  }}}|                     d
¦  «        r&|                     d„ |d
         D ¦   «         d¦  «         |                     dt          j        ||¦  «        ¦  «         | 	                    |||f¦  «         �Œ|S )Nrç   r  rà  r   r8  rÌ  r^  r°   r   rû  c                 ó,   — g | ]}t          |¦  «        ‘ŒS rG   )Útuple)r2   Úpairs     r5   r‹   z_render.<locals>.<listcomp>+  s   € Ð%LÐ%LÐ%L°d¥e¨D¡k¤kÐ%LÐ%LÐ%Lr7   Tzmilionar.exec)
r‹  r‡  ra  rz  r¡   ÚaddContextMenuItemsrQ  r   r?  rÑ   )r  rR   rÓ   rç   rC   rX   r_  Úfactorys           r5   Ú_renderr    s6  € Ø€EØð +ñ +ˆØ�VŒ}ˆØ�7Š?ˆ?Ý!+¨U°6¬]Ð!;ÑˆD�$˜˜Ø�YÒÐÝ!-¨e°F¬m¸UÀ9Ô=MÈuÐUcÔOdÐfkÐlsÔftÑ!uÔ!uÑˆD�$˜˜à$(¨G¢O O•j�j½ˆGØ!( ¨¨v¬¸¸kÔ8JÈEÐRYÌNÑ![Ô![ÑˆD�$˜Ø�9Š9�VÑÔð 	TØ×$Ò$Ð%LÐ%L¸eÀF¼mÐ%LÑ%LÔ%LÈdÑSÔSÐSØ×Ò˜­&¬/¸$ÀÑ*GÔ*GÑHÔHÐHØ�Š�d˜D &Ð)Ñ*Ô*Ð*Ñ*Ø€Lr7   c           	      ó˜  ‡
— ddl m} ddl}t          ¦   «         }|                     t
          ¦  «        Š
t          |t          t          |¦  «        ¦  «        ¬¦  «        }t          j
        ¦   «         |j                             ¦   «         t          j        t          j        ¦  «        ‰
                     d¦  «        ˆ
fd„t"          D ¦   «         t%          j        | ¦  «        t)          j        d¦  «        dœ}|                     | ||¦  «        }|                     |¦  «        }|� 	 t1          |¦  «        S # t2          $ r Y nw xY wt5          t7          | ||¦  «        |¦  «        }t1          |¦  «        }|j        r5	 dd	lm}	  |	t?          |j        ¦  «        ¦  «         n# t2          $ r Y nw xY w|j         r| !                    ||¦  «         |S )
zXUse a persistent plain snapshot, then construct only the selected fresh offscreen items.r   )Ú	row_cacheN©r²  Úprofilec                 ó<   •— i | ]}|‰                      |¦  «        “ŒS rG   )Ú
getSetting)r2   rõ   Úaddons     €r5   rK   zbuild.<locals>.<dictcomp>;  s)   ø€ ÐNÐNÐN¸˜˜e×.Ò.¨tÑ4Ô4ÐNÐNÐNr7   Úai)Údbr   Úlanguager  ÚconfigÚdefault_clickÚai_available)Úrequest)"Úwcs.skinr  Ú	xbmcaddonrh   ÚAddonÚADDON_IDry   r;   Ú_limitr   Údb_pathrj   rÑ  r  ÚgetLanguageÚ	ISO_639_1ÚgetAddonInfoÚROW_SETTINGSr   r�  r   Úflagrr   Úreadr  r   r  Ú_buildrm   Úwcs.skin.refreshr  r’   rl   Úwrite)r¦   Úparamsr  r  rê   Úscoperr   r§   rR   r  r  s             @r5   rÿ  rÿ  1  sÝ  ø€ à"Ð"Ð"Ð"Ð"Ð"ØÐÐÐÝ‰6Œ6€DØ�OŠO�HÑ%Ô%€EÝ�&¥¥F¨6¡N¤NÑ 3Ô 3Ð4Ñ4Ô4€FÝ”=‘?”?¨D¬J×,@Ò,@Ñ,BÔ,BÝÔ)­$¬.Ñ9Ô9Ø×*Ò*¨9Ñ5Ô5ØNÐNÐNÐNÅÐNÑNÔNÝ$œn¨SÑ1Ô1Ý*Ô/°Ñ5Ô5ð7ð 7€Eð �-Š-˜˜V UÑ
+Ô
+€CØ�~Š~˜cÑ"Ô"€HØÐð	Ý˜8Ñ$Ô$Ð$øÝð 	ð 	ð 	ØˆDð	øøøå�˜s F¨DÑ1Ô1°4Ñ8Ô8€HÝ�HÑÔ€EØ„|ð ð	Ø0Ð0Ð0Ð0Ð0Ð0ØˆG•F˜4œ<Ñ(Ô(Ñ)Ô)Ð)Ð)øÝð 	ð 	ð 	ØˆDð	øøøà„}ð 'Ø�Š˜˜XÑ&Ô&Ð&Ø€Ls$   Ä$D3 Ä3
E Ä?E Å9#F Æ
F*Æ)F*c                 ó  ‡‡— t          |                     d¦  «        ¦  «        }|sg S | dk    Š‰                     ‰rdnd¦  «        }‰r‰                     |¦  «         n‰                     d„ |D ¦   «         ¦  «         g }|D �]V}‰r‰                     |¦  «        n‰                     |¦  «        }‰                     ‰rdnd|¦  «        }	‰rT|                     d¦  «        p>|	                     d¦  «        p)|	                     d¦  «        pd                     |¦  «        nS|                     d¦  «        p>|	                     d¦  «        p)|	                     d¦  «        pd	                     |¦  «        }
‰r|                     d
¦  «        n|                     d¦  «        }|t          |
¦  «        v s|t          |¦  «        v r| 	                    |¦  «         �ŒX|d |…         }‰s‰ 
                    |¦  «         ˆˆfd„|D ¦   «         S )NÚqr+   r°   r±   c              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S r0   rÜ   rÇ   s     r5   r6   z_search_row.<locals>.<genexpr>[  s*   è è € Ð3Ð3¨!•t”{ 1‘~”~Ð3Ð3Ð3Ð3Ð3Ð3r7   rý   rõ   rþ   r#  r   r$  c           	      ó‚   •— g | ];}t          ‰rd nd‰rt          ‰|¦  «        nt          ‰|¦  «        ‰rdnd¦  «        ‘Œ<S )r°   r±   rú   r_  )r­  r!  r3  )r2   rŠ   rê   r°   s     €€r5   r‹   z_search_row.<locals>.<listcomp>i  ss   ø€ ð Ið Ið IØ=>õ  5Ð2˜˜¨dÈ5Ð4jµJ¸tÀQÑ4GÔ4GÐ4GÕVaÐbfÐhiÑVjÔVjØ$)Ð7˜˜¨xñ9ô 9ð Ið Ið Ir7   )r>   r¡   r”   rÊ   r¾   r°   rÄ   r§   rc   rÑ   rã   )r¦   r-  rê   r²  re   rÉ   r»   rx   rú   r  rý   rÿ   r°   s     `         @r5   Ú_search_rowr3  R  s<  øø€ Ý�—’˜C‘”Ñ!Ô!€EØð Øˆ	ØÐ%Ò%€EØ
�-Š- 5Ð2˜˜¨dÑ
3Ô
3€CØð 4Ø×Ò˜CÑ Ô Ð Ð à�ŠÐ3Ð3¨sÐ3Ñ3Ô3Ñ3Ô3Ð3à€EØð "ñ "ˆØ(-ÐE�—’˜GÑ$Ô$Ð$°4·9²9¸WÑ3EÔ3EˆØ�}Š}¨Ð7˜W˜W°4¸ÑAÔAˆØpuð t�&—*’*˜WÑ%Ô%Ðk¨¯ª°'Ñ):Ô):Ðk¸d¿hºhÀvÑ>NÔ>NÐkÐR[×RbÒRbÐcjÑRkÔRkøØ—z’z &Ñ)Ô)Ðr¨T¯XªX°fÑ-=Ô-=ÐrÀÇÂÈ'ÑARÔARÐrÐVb×ViÒViÐjqÑVrÔVrð 	à38ÐY�6—:’:Ð.Ñ/Ô/Ð/¸f¿jºjÈÑ>YÔ>YˆØ•D˜‘K”KÐÐ 5­D°©N¬NÐ#:Ð#:Ø�LŠL˜Ñ!Ô!Ð!ùØ�&�5�&ŒM€EØð #Ø×Ò˜EÑ"Ô"Ð"ðIð Ið Ið Ið IØBGðIñ Iô Ið Ir7   c                 óð   — 	 |                       d¦  «        }t          dt          |dv rdn|¦  «        ¦  «        }n# t          t          f$ r d}Y nw xY w	 ddlm}  ||¦  «        S # t          $ r |cY S w xY w)Nr²  r   )Nr.   rŸ  r  )r¡   rw  rß   Ú	TypeErrorr¤   rS   r²  rV   )r-  Úrawry  r²  s       r5   r"  r"  m  s±   € ðØ�jŠj˜Ñ!Ô!ˆÝ�A•s ¨
Ð!2Ð!2˜2˜2¸Ñ<Ô<Ñ=Ô=ˆˆøÝ•zÐ"ð ð ð ØˆˆˆðøøøðØ.Ð.Ð.Ð.Ð.Ð.Øˆu�U‰|Œ|ÐøÝð ð ð Øˆˆˆðøøøs!   ‚8; »AÁAÁA& Á&A5Á4A5c                 óŽ  — t          |d         ¦  «        }|dk    rg S | t          v rt          | |||¦  «        S |                     d¦  «        pd}|                     d¦  «        dk    }|                     dd¦  «        dk    }| d	v r?t	          | ||||                     d
¦  «        pd|                     d¦  «        pd|¦  «        S | dv rt          | ||¦  «        S | dk    r&t          ||                     d¦  «        pd|¦  «        S t          | |||||                     d
¦  «        pd|                     d¦  «        pd|¦  «        S )Nr²  r   rœ  r.   ÚhwÚ1ÚupÚ0)r   r   r   r   r!   r"   r±  r^  )r   r(   r   )rß   ÚSEARCH_ROWSr3  r¡   r³  rä  ró  rÖ  )r¦   r-  rê   r²  rœ  r°  r}  s          r5   r*  r*  z  sm  € Ý��w”Ñ Ô €EØ�‚z€zØˆ	Ø
�kÐÐÝ˜3 ¨¨eÑ4Ô4Ð4Ø�:Š:�fÑÔÐ# €DØ—:’:˜dÑ#Ô# sÒ*€LØ�zŠz˜$ Ñ$Ô$¨Ò+€HØ
ð  Dð  Dð  DÝ˜#˜t T¨<¸¿ºÀGÑ9LÔ9LÐ9RÐPRÐTZ×T^ÒT^Ð_fÑTgÔTgÐTmÐkmÐotÑuÔuÐuØ
Ð6Ð6Ð6Ý˜#˜t UÑ+Ô+Ð+Ø
ˆoÒÐÝ˜4 §¢¨GÑ!4Ô!4Ð!:¸¸EÑBÔBÐBÝ�s˜D $¨°hÀÇ
Â
È7Ñ@SÔ@SÐ@YÐWYÐ[a×[eÒ[eÐfmÑ[nÔ[nÐ[tÐrtÐv{Ñ|Ô|Ð|r7   c           	      óP  — t          j        ¦   «         }|                     dd¦  «        }ddlm} ||j        v r|                     | ||¦  «        S |                     d¦  «        r%ddlm	} ||j
        v r|                     | |¦  «        S |                     d¦  «        r%ddlm	} ||j        v r|                     | |¦  «        S |t          vrV|t          vrMddlm	} ||j        v r%|                     | t!          ||¬¦  «        ¦  «        S t#          j        | d	d
¬¦  «         d S g }	 t'          ||¦  «        }n]# t(          $ rP}	t+          j        d                     |t1          |	¦  «        j        |	¦  «        t*          j        ¦  «         Y d }	~	nd }	~	ww xY wt#          j        | |t9          |¦  «        ¦  «         t#          j        | d	d
¬¦  «         t+          j        d                     |t9          |¦  «        t          j        ¦   «         |z
  dz  ¦  «        t*          j        ¦  «         d S )Nr¦   r.   r   )Ú
navigationÚfy_)ÚwidgetsÚvinyl_)ÚactionTF)Ú	succeededÚcacheToDiscu*   [MilionÃ¡Å™ Library] row {} failed: {}: {}u;   [MilionÃ¡Å™ Library] widget_row {} -> {} items in {:.0f} msiè  )r\   Úperf_counterr¡   r  r>  ÚROWSÚwidgetrA   Ú
wcs.foryour@  ÚALL_ROWSÚrunÚ	wcs.vinylr®  r<  ÚWIDGETSry   Ú
xbmcpluginÚendOfDirectoryrÿ  r   r  rë  rc   r  rï   ÚLOGERRORÚaddDirectoryItemsru  ÚLOGDEBUG)
Úhandler-  r/  r¦   r>  Úforyou_widgetsÚvinyl_widgetsr@  rR   r  s
             r5   rJ  rJ  Œ  sq  € ÝÔÑ!Ô!€GØ
�*Š*�U˜BÑ
Ô
€CØ#Ð#Ð#Ð#Ð#Ð#Ø
ˆjŒoÐÐØ× Ò  ¨¨fÑ5Ô5Ð5Ø
‡~‚~�eÑÔð 6Ø8Ð8Ð8Ð8Ð8Ð8Ø�.Ô)Ð)Ð)Ø!×%Ò% f¨fÑ5Ô5Ð5Ø
‡~‚~�hÑÔð 5Ø6Ð6Ð6Ð6Ð6Ð6Ø�-Ô$Ð$Ð$Ø ×$Ò$ V¨VÑ4Ô4Ð4Ø
•)ÐÐ ­;Ð 6Ð 6Ø$Ð$Ð$Ð$Ð$Ð$Ø�'”/Ð!Ð!Ø—;’;˜v¥t¨F¸3Ð'?Ñ'?Ô'?Ñ@Ô@Ð@ÝÔ! &°DÀeÐLÑLÔLÐLØˆØ€EðsÝ�c˜6Ñ"Ô"ˆˆøÝð sð sð sÝŒÐ=×DÒDÀSÍ$ÈsÉ)Ì)ÔJ\Ð^aÑbÔbÕdhÔdqÑrÔrÐrÐrÐrÐrÐrÐrøøøøðsøøøåÔ  ¨µ°E±
´
Ñ;Ô;Ð;ÝÔ˜f°À%ÐHÑHÔHÐHÝ„HÐJ×QÒQØ�S�‰ZŒZ�$Ô+Ñ-Ô-°Ñ7¸4Ñ?ñAô AÝBFÄ-ñQô Qð Qð Qð Qs   Ä&D7 Ä7
FÅAFÆF)F)NNN)Frú   )Fr_  )rC  )r.   r.   rŸ  )r.   rŸ  )FNr.   )@rò   r˜  r\   Údatetimer   r   Úurllib.parser   r   r  rO  rM  Úwcsr   rü  r   r	   r
   r   r   r  r   r!  rc   rd   r  r  rÐ  r'  r®  r<  r>   rD   rZ   r`   rf   rh   rû   r!  r+  r3  r:  r<  rD  ra  rz  r‡  r‹  r™  rž  r³  r¶  rÖ  rÓ  rä  ró  r­  r  r  rÿ  r3  r"  r*  rJ  rG   r7   r5   ú<module>rX     sc  ððð ð €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à €€€Ø €€€Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø Ð Ð Ð Ð Ð à"€Ø×Ò˜XÑ&Ô&€Ø	*€Ø,€Ø€ðA€ð	ØÐ(ð	Ø*7Ð9Lð	ØN]Ð_qð	àÐ4ð	à6GÐI`ð	ð Ð2ð	ð 5GÐHcð	ð Ð0ð		ð 3BÐCZð		ð
 Ð.ð	ð
 1@ÐAYð	ð Ð.ð	ð 1FÐG^ð	ð Ð3ð	ð 6JÐKcð	ð Ð,ð	€	ð 7€ðvð vð vð[ð [ð [ð	ð 	ð 	ðVð Vð VðKð Kð Kði5ð i5ð i5ð i5ð i5ñ i5ô i5ð i5ð\Zð Zð Zð
mð mð mð&cð cð cð-ð -ð -ð ð ð ð ð*ð *ð *ð
.ð .ð .ð .ð(ð (ð (ð (ð4(ð (ð (ð (ð@ (ð  (ð  (ð  (ðF&ð &ð &ð 1Ð0Ð=YÐ=YØ;Ð;ÐHdÐHdØSÐSÐa~Ða~Ø*Ð*ð	ð €	ð.ð .ð .ðfð fð fð fð0/ð /ð /ð
+<ð +<ð +<ð +<ð\8ð 8ð 8ðMð Mð Mð$ð ð ð ð2>ð >ð >ð >ðð ð ð*ð ð ð$ð ð ðBIð Ið Ið6
ð 
ð 
ð}ð }ð }ð$Qð Qð Qð Qð Qr7   