
    uDjލ                     ,   S SK r S SKrS SKJr  S SKJrJr  S SKJr  S SK	J
r
  S SKJrJrJrJr  S SKJr  S SKJrJr  S S	KJrJrJrJrJrJrJrJr  \R<                  \R>                  \R@                  \RB                  4u  rrr r!\RD                  \RF                  \RH                  sr"r#r$\RJ                  \RL                  \RN                  sr%r&r'\RP                  \RR                  \RT                  sr(r)r*\RV                  \RX                  \RZ                  \R\                  4u  r+r,r-r.\R^                  \R`                  sr/r0\Rb                  \Rd                  sr1r2\Rf                  \Rh                  \Rj                  \Rl                  4u  r3r4r5r6\Rn                  \Rp                  \Rr                  sr7r8r9\Rt                  \Rv                  \Rx                  \Rz                  4u  r:r;r<r=\R|                  \R~                  \R                  sr>r?r@\R                  \R                  srArB\R                  \R                  \R                  srCrDrE\R                  \R                  srFrG/ S
QrHSrISSSSSSSS.rJSrKSrLSrMSrNSrOSSSSSSS.rPSSS S!SSS".rQ " S# S$5      rRg)%    N)Thread)open_windowcreate_window)episode_groups_cacheget_setting)
kodi_utilssettingsmetadatawatched_status)FenLightPlayer)get_cache_expirymake_alias_dict)clean_file_namestring_to_floatsafe_stringremove_accentsget_datetimeappend_module_to_syspathmanual_function_importmanual_module_importeasynewsfilepursuitgdrive	plexshare
torrserver)SDCAMTELESYNC               )4K1080p720pr   SCRr   r    )folder1folder2folder3folder4folder5)r   r   r   r   r   foldersz%s[CR]%s[CR]%sz&ultimate_nondebrid.internal_results.%s   [B]HEVC[/B]z	[B]3D[/B]
[B]HDR[/B][B]D/VISION[/B]z
[B]AV1[/B]z[B]AI ENHANCED/UPSCALED[/B])hevc3dhdrdvav1enhanced_upscaledd   2      
   )r   r"   r#   r$   r%   r&   c                      \ rS rSrS rS?S jrS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS@S jrS rS rS rS rS rS rS rS rS rS rS rS r S  r!S! r"S" r#S# r$S$ r%S% r&S& r'S' r(S( r)S) r*S* r+S+ r,S, r-S- r.S. r/S/ r0SAS0 jr1S1 r20 4S2 jr3S3 r4S4 r5S5 r6S6 r7S7 r8S8 r9S9 r:S?S: jr;S; r<S< r=S= r>S>r?g)BSources'   c                 $   0 U l         S U l        / / / / 4u  U l        U l        U l        U l        / / / / / 4u  U l        U l        U l        U l	        U l
        Su  U l        U l        Su  U l        U l        U l        U l        U l        S=U l        =U l        =U l        =U l        U l        SU l        Su  U l        U l        SU l        SSU R6                  4S	S
U R6                  4SSU R6                  4SSU R8                  4SSU R:                  44U l        g )NFF)TFFFFr   trueNN 
sources_4kr'   sources_1080pr(   sources_720pr)   
sources_sdsources_total)paramsnum_episodesprescrape_scrapersprescrape_threadsprescrape_sourcesuncached_resultsthreads	providerssourcesinternal_scraper_namesremove_scrapersrescrape_with_allrescrape_with_episode_groupclear_propertiesfilters_ignoredactive_foldersresolve_dialog_madeepisode_group_usedrK   rG   rH   rI   rJ   	prescrapeprogress_dialogprogress_threadplaying_filename_quality_length_quality_length_sd_quality_length_finalcount_tupleselfs    S/home/rurouni/addon-audit/build/ultimate-nondebrid/resources/lib/modules/sources.py__init__Sources.__init__(   sR   $+$cegikmoqcq`$4143I4K`bdfhjlnprtbt_$,d.I4K_=I:$$: yYu$-t/BDD\^b^udee$ete);ed>ORVRa$./9,$,$#T4+?+?@?T[]a]q]qBr  vD  FL  NR  Nb  Nb  ucb$112_b$JdJd4eg$    Nc                 |   [        5         U(       a  Xl        UR                  SS 5      U l        U R                  R                  nUR                  S0 5      R                  SUR                  SS 5      5      U l        U" SS5      U" SS5      S:H  U" SU R                  5      S:H  sU l        U l        U l        U" S	S5      S:H  U" S
S 5      sU l        U l        U" SS5      S:H  U" SS5      S:H  sU l	        U l
        U R
                  (       aP  U R
                  S:X  a  Su  U l        U l        OOU R
                  S:X  a  Su  U l        U l        O/Su  U l        U l        O[        5       [        5       sU l        U l        U R                  =(       a7    U R                  =(       a$    U R                  =(       d    U R                  (       + U l        [!        5       [#        5       sU l        U l        U" S0 5      U" SS5      S:H  sU l        U l        U" SS5      S:H  U l        [+        SS5      S:H  U l        [/        [+        SS5      5      U l        U" S5      U" S5      sU l        U l        U" SS 5      U" SS 5      sU l        U l        U" SS5      U l        U R2                  S:X  a[  [/        U" S5      5      [/        U" S5      5      sU l        U l        U" SS 5      U" SS 5      sU l         U l!        U RE                  5         OSu  U l        U l        U l         U l!        S U R                  ;   a  U" S S5      S:H  U l#        O[I        U R2                  5      U l#        U RK                  5         U RM                  5         S![O        5       [Q        5       sU l)        U l'        U l*        [W        5       [Y        5       [[        5       sU l+        U l,        U l-        []        5       U R_                  5       sU l0        U l1        [+        S"S5      S:H  U l2        U Rg                  5         U R                  (       a  U Ri                  5         g U Rk                  5       $ )#NrM   nextep_settings	play_typerF   
backgroundfalserD   r^   device_listplay_selectedrandomrandom_continualautoplay_nextepTFrC   )FTdisable_autoplay_next_episodeignore_scrape_filtersz1ultimate_nondebrid.results.folders_ignore_filtersz-ultimate_nondebrid.results.filter_size_method0
media_typetmdb_idcustom_titlecustom_yearepisode_group_labelepisodeseasoncustom_seasoncustom_episode)rF   rF   rF   rF   autoplayr;   z'ultimate_nondebrid.results.size_unknown)6hide_busy_dialogrL   getrM   r^   rn   ro   rq   rr   rs   rt   ru   autoscrape_nextepautoplay_next_episodeautoscrape_next_episode
autoscrapeauto_rescrape_with_allauto_episode_grouprm   rw   rx   r   folders_ignore_filtersintfilter_size_methodrz   r{   r|   r}   r~   r   r   r   r   check_episode_groupr   	auto_playget_metadetermine_scrapers_statusprovider_sort_ranksscraping_settings
sleep_timescraper_settingsinclude_prerelease_resultsignore_results_filterlimit_resolveresults_sort_order_quality_filtersort_functionquality_filterinclude_unknown_sizemake_search_infoautoscrape_nextep_handlerget_sources)rg   rL   
params_gets      rh   playback_prepSources.playback_prep6   s   ;zz.$74{{*jj!2B7;;NFJJWegkLlm$4>{B4OQ[\hjqQrv|Q|  I  JU  W[  We  We  f  jp  p1$.$/4>)3M7)Kv)UWabqswWx&$D&'1(G'D'NPZ[movPw  |B  QB$$+t$	^^
nn))Ze+W4+?AW,,]i.Zd.BDDZ8C	5	t57L7NPgPi4d4**otoHXHXHn\`\n\nCo$/9O9QSeSg6$t6=GHY[]=^`j  lK  MT  aU  Y_  a_:$:)*A7KvU$ +,_ah ims s$,[]` ab$",\":Jy<Q$/4<(2>4(H*UbdhJi%$T%'(=rB$	__	!":h#78#j>S:T4;-7-NPZ[kmqPr*4t*M[JT\4#5t7J4;;
:w0OSY0Y!$//2--/  "EHJ]J_aratB$/4+T-BTnTp  sH  sJ  LY  L[Q$!4#=t?Q,>,@$BVBVBX)$d))*SU\]agg$	__d446!!rk   c                      [        U R                  U R                  /5      (       d  SU R                  ;   a  g [        R
                  " U R                  5      nU(       d  g [        R                  " [        R                  " US   5      S U R                  U R                  5      nU(       a=  US   US   SsU l        U l        U l        SU R                  U R                  4-  U l        g g !   Su  U l        U l         g = f)Nskip_episode_group_checkidr   r   T[B]CUSTOM GROUP: S%02dE%02d[/B]rE   )anyr   r   rL   r   r   r{   r   group_episode_datagroup_detailsr   r   r]   r~   )rg   
group_infor   s      rh   r   Sources.check_episode_group_   s    ?	4t22
3448RVZVaVa8aci$((6:
f..x/E/EjQUFV/WY]_c_j_jlplxlxy=GTU]G^`mnw`xz~DD+T-D@DDVDVX\XkXkCllD  ?J
1$
d1s   6C* 'C* !BC* *C=c                 "    [        5       U l         g Nactive_internal_scrapersrf   s    rh   r   !Sources.determine_scrapers_statusj   s    ":"<$rk   c                 X  ^  T R                   (       a  SSKJn  U" T 5      $ T R                  (       d!  T R                  (       d  T R                  5         / nT R                  (       a[  [        U 4S j[         5       5      (       a=  T R                  5       (       a(  T R                  5       nU(       a  T R                  U5      nU(       d  ST l        T R                  5         T R                  (       d  T R                  5         T R                  5       T l        T R                  (       d  T R                  5         T R                  T R                  5      nT R                   (       a  SSKJn  U" T U5      $ U(       d  T R%                  5       $ T R&                  (       a  U$ T R)                  U5      $ )Nr   )play_selected_sourcec              3   @   >#    U  H  oTR                   ;   v   M     g 7fr   r   ).0xrg   s     rh   	<genexpr>&Sources.get_sources.<locals>.<genexpr>t   s     bHa1!>!>>Has   F)output_sources_directory)rr   modules.device_selectr   r_   ro   _make_progress_dialogr^   r   default_internal_scrapersprepare_internal_scraperscollect_prescrape_resultsprocess_resultsr   _kill_progress_dialogcollect_resultsorig_resultsrq   r   _process_post_resultsr   play_source)rg   r   resultsr   s   `   rh   r   Sources.get_sourcesn   s+   	9
t
$$			doot7Q7Q7S'	^^bHabbb
$$&&,,.G$..w7	4>!!#

'
')C)C)E++-4


T779!!$"3"347	=
"4
11	3355	__Wn((rk   c           	         U R                   R                  U R                  5        U R                  R                  nU R
                  (       a  U R                  U R                  5        U R                  R                  U R                  5       5        U R                  (       ab  U R                   H)  o!" [        U R                  US   US   S4US   S95        M+     U R                   Vs/ s H  o"R                  5       PM       nU R                  (       a5  U R                   Vs/ s H  o"R                  5       PM       nU R                   $ U R                  (       a  U R                  5         U R                   $ s  snf s  snf )Nr   r"   Fr#   targetargsname)rT   extendrP   rR   appendr[   append_folder_scrapersrS   internal_sourcesr   activate_providersstartro   joinr   scrapers_dialogrg   threads_appendis      rh   r   Sources.collect_results   s   ,,d,,-<<&&.	$55dnnE..--/0	^^NNqN69P9PXYZ[X\^_`a^bdiWjqrstqu+vwN||$|!GGI|$	__ll#lFFHl#	 $$d&:&:&<		 %#s   )E7#E<c           	         U R                   R                  nU R                  (       ab  U R                  (       d  [	        SU R
                  5      (       a6  U R                  U R                  5        U R                  R                  S5        U R                  R                  U R                  S5      5        U R                  (       d  / $ U R                   H)  o!" [        U R                  US   US   S4US   S95        M+     U R                    Vs/ s H  o"R                  5       PM       nU R                  R                  S U R                   5       5        U R                  (       a5  U R                    Vs/ s H  o"R                  5       PM       nU R"                  $ U R!                  5         U R"                  $ s  snf s  snf )Nr0   Tr   r"   r#   r   c              3   *   #    U  H	  oS    v   M     g7f)r#   N )r   r   s     rh   r   4Sources.collect_prescrape_results.<locals>.<genexpr>   s     D,Cqd,Cs   )rO   r   r[   r   check_prescrape_sourcesrz   r   rN   rV   r   r   r   r   r   ro   r   r   rP   r   s      rh   r   !Sources.collect_prescrape_results   sY   ))00.	
mm.y$//JJ 7 78	*  !6!6t!<=		 	 )""aN6AXAX`abc`dfghifjlp_qxyz{x|3}$~",,-,779,-DD,C,CDD	__)?)?@)?Avvx)?@			 					 .@s   F74F<c                    U R                   (       a  U R                  U l        O;[        [	        U R                  U R
                  -   5      5      U l        [        S5        U R                  (       a  SU l        U R                  U5      nOPU R                  U5      nU R                  U5      nU R                  U5      n[         H  o R                  X5      nM     U R                  U5      nU R                  U5      nU$ )Nfs_filterless_searchT)r^   r   all_scraperslistsetrV   clear_propertyrx   rZ   sort_resultsfilter_resultsfilter_audiofilter_keysspecial_filtersort_preferred_autoplay
sort_first)rg   r   	file_types      rh   r   Sources.process_results   s    	^^)F)FT&C = =@T@T TUV4()	4w'7w'7  )7w'7y+>+>w+RK((1'OOG$'	.rk   c                     U HP  nUS   nUR                  5       nU R                  U5      US'   U R                  UR                  SS5      5      US'   MR     UR	                  U R
                  S9  U$ )Nscrape_providerprovider_rankqualityr   quality_rankkey)lower_get_provider_rank_get_quality_rankr   sortr   )rg   r   itemprovideraccount_types        rh   r   Sources.sort_results   ss    d$%8.."<22<@400)T1JK4	 
 
,,4%%,&	.rk   c                 :   U R                   (       a6  U Vs/ s H  o"S   S:X  d  M  UPM     nnU Vs/ s H  o"U;  d  M
  UPM     nnO/ nU Vs/ s H  o"S   U R                  ;   d  M  UPM     nnU R                  (       Ga  [        [	        SU R
                  -  S5      S5      S-  nUS:X  a  U R                  (       d  SnU R                  S	:X  aM  U R                  S
   =(       d    U R
                  S:X  a  SOSnSS[        [	        SS5      S5      -  -  U-  S-  nO6U R                  S:X  a&  [        [	        SU R
                  -  S5      S5      S-  nU Vs/ s H"  o"S   S:X  d  XBS   s=::  a  W::  d  M  O  M   UPM$     nnX-  nU$ s  snf s  snf s  snf s  snf )Nr   r0   r   z&ultimate_nondebrid.results.%s_size_minry             g{Gz?r"   durationmoviei  i`	  g      ?g?zresults.line_speed25r#   z&ultimate_nondebrid.results.%s_size_max10000size)r   r   r   r   r   rz   r   meta)rg   r   r   folder_resultsmin_sizer   max_sizes          rh   r   Sources.filter_results   s   	   'M1->+?9+LQ>M <A^(;a7<7G1Y<43F3F#FQ'G	k*RUYUdUd*dfijlopsww8#od77D
"yy$VG1KQUH$=QSW1XZ^!__`dllnrrH1${+SVZVeVe+egnoqxy  }A  AH kA&7$8I$EW]U^IjbjIjaIja7k	'	. N<G ls2   F	F		FFF(FF7F;Fc                 ~   ^ U V^s/ s H)  m[        U4S j[        5        5       5      (       a  M'  TPM+     sn$ s  snf )Nc              3   2   >#    U  H  oTS    ;   v   M     g7f	extraInfoNr   r   r   r   s     rh   r   'Sources.filter_audio.<locals>.<genexpr>   s     'U_Q{^(;_   )r   audio_filters)rg   r   r   s     `rh   r   Sources.filter_audio   s*    	VWC'U]_'U$U!W	VV	Vs   &::c                   ^ [        U5      [        U   pCUS:X  a\  US:X  aV  U R                  [        SU R                  (       a  SOS-  S5      5      nU Vs/ s H  odUS   ;  d  US   U:  d  M  UPM     nnUS	:X  am  US
:X  aK  [        S5      S:X  a<  U V^s/ s H,  m[        U4S jUS4 5       5      (       d  UTS   ;  d  M*  TPM.     nnU$ U Vs/ s H  odUS   ;  d  M  UPM     nnU$ s  snf s  snf s  snf )Nr2   r   z!ultimate_nondebrid.filter.hevc.%smax_autoplay_qualitymax_qualityr'   r  r   r"   r4   r7   c              3   2   >#    U  H  oTS    ;   v   M     g7fr  r   r  s     rh   r   )Sources.special_filter.<locals>.<genexpr>   s     (ZFYan)<FYr  r3   )filter_statusr   r   r   r   all)rg   r   r   enable_settingr   hevc_max_qualityr   s         `rh   r   Sources.special_filter   s   %i0+i2H#Mn1,,[9\z~  {H  {H`v  N[  :\  ^b  .c  d gAq~(=>ARVfAfa7gq	=#71#<!x'QS(ZsLFY(Z%Z%Zbeijkviwbwq'Gx	.  'Dw!Q{^.CAwD	. h yDs$   C,/C,)C1C1C6"C6c                 >  ^   / nST R                   ;   a!  [        S5      (       a  UR                  S5        U(       d  U$ U Vs/ s H  o3S   U;   d  M  UPM     nnUR                  U 4S jS9  U Vs/ s H  o3U;  d  M
  UPM     nnXE-   nU$ s  snf s  snf !    U$ = f)Nr0   r   c                 6   > TR                  U S   5      U S   4$ )Nr   r   )_sort_folder_to_top)krg   s    rh   <lambda>$Sources.sort_first.<locals>.<lambda>   s"    $":":1=N;O"PRSTbRc!drk   r   )r   sort_to_topr   r   )rg   r   sort_first_scrapersr   r   	sort_lasts   `     rh   r   Sources.sort_first   s    4$$$Y)?)?ATA[A[\eAf
g~#SGq):';?R'RG:S??d?e":7az/79:#7	. T:$	.s:   ;B B BBB 2	B?BB 
B Bc                 4  ^ U R                   (       d  U$  [        5       nU(       d  U$ U V^s/ s H!  m[        U4S jU 5       5      (       d  M  TPM#     nnU(       d  U$ U Vs/ s H  o3U;  d  M
  UPM     nn[        U VVVs/ s H\  n[	        U40 S[        U Vs/ s H  o3US   ;   d  M  UPM     sn Vs/ s H  n[        UR                  U5         PM     sn5      0D6PM^     snnnS SS9nXA-   $ s  snf s  snf s  snf s  snf s  snnnf !   Us $ = f)Nc              3   2   >#    U  H  oTS    ;   v   M     g7fr  r   r  s     rh   r   2Sources.sort_preferred_autoplay.<locals>.<genexpr>   s     2\P[1+3FP[r  pref_includesr  c                     U S   $ )Nr*  r   )r   s    rh   r!  1Sources.sort_preferred_autoplay.<locals>.<lambda>   s	    Q5Grk   T)r   reverse)r   preferred_autoplayr   sorteddictsumpreference_valuesindex)rg   r   preferencesr   preference_resultsr   r   s      `   rh   r   Sources.sort_preferred_autoplay   s]   	w	#%;
g~$+]Gqs2\P[2\/\G]
Wn @A-?(?a7@$ &$$ !%T  !los  BM  vh  BM|}  VZ  [f  Vg  Qgvw  BM  vh  Di  vhpqDUVaVgVghiVjDk  vh  Di  @j  .k  !l$ &+GQUW

&& ^@ vh  Di  & .su   D D C6C6
D !D %	C;2C;8D D
D  -D  3D
8"D D
(D 6
D  
D

D Dc           	         U R                    Vs/ s H  oU R                  ;  d  M  UPM     nnU R                  (       a5  [        U Vs/ s H  n[	        XR
                  5      PM     sn5      (       a  gSU;   a  U R                  5        Vs/ s H%  n[        U R
                  US   5      (       d  M#  UPM'     snU l        U R                  (       aG  SU l	        U Vs/ s H  oS:X  a  M
  UPM     snU R                   Vs/ s H  oS   PM	     sn-   U l
        O1U Vs/ s H  oS:X  a  M
  UPM     snU l
        O/ U l        US S  U l
        X l         U R                  (       a  U R                  5         gs  snf s  snf s  snf s  snf s  snf s  snf )NFr0   r"   Tr   )r   rV   r^   r  r   rz   get_folderscraper_infosource_folders_directoryfolder_infor[   rU   rY   _clear_properties)rg   r   r   s      rh   r   !Sources.prepare_internal_scrapers   sg   )-)F)Fh)FASWSgSgNga)Fh	^^RjkRjQ4QHRjklluz**"&"="="?s"?QC[\`\k\kmnopmqCrq"?s4
D.F"].FS\n1.F"]osoo  aAojkcdaeo  aA  #AD3K'b3KaXaSa3K'b	$4!9!!<4":	D224	 iks #^  aA'bs:   E1E1E6"E;2E;	F )F ?F	F
)F
c                     U R                  X5      R                  U R                  5      nU(       d  g U(       a  U R                  R	                  U5        g U R
                  R	                  U5        g r   )_get_moduler   search_inforP   r   rT   )rg   module_typefunctionr^   rT   s        rh   r   Sources.activate_providers  sP    [3;;D<L<LM'	&&&--g6G$rk   c                 .   U R                    Vs/ s H  o"[        ;   d  M  UPM     nn / nU HU  nU(       a  [        X R                  5      (       d  M&  SSSSSS.nX%;   d  M5  UR	                  S[        XR   S5      U45        MW     U$ s  snf !   / n U$ = f)	Nzscrapers.easynewszscrapers.filepursuitzscrapers.gdrivezscrapers.plexsharezscrapers.torrserverr   internalsource)r   internal_include_listr   rz   r   r   )rg   r^   r   active_sources
sourceDictscraper_module_maps         rh   r   Sources.internal_sources  s    #<<[<!EZ@ZA<.[:q0OODDh$* &( 	
$:;M;PRZ$[]^_`  
 \ r*	s   BB5B "$B Bc                 h   ^  U 4S jn[        U" 5       5      n[        U" 5       5      nU$ !   / n U$ = f)Nc               3   v   >#    TR                    H$  n U S   n[        SS5      nSX S   XS   44U4v   M&     g 7f)Nr   zscrapers.foldersrE  r0   r"   r#   )r:  r   )r   scraper_namemodulerg   s      rh   import_info+Sources.folder_sources.<locals>.import_info  sI     t7L#$6AFvQAw?@,
OO  s   69)r   )rg   rO  rH  s   `  rh   folder_sourcesSources.folder_sources  s:    P
 KM"*'z	 r*	s   * 1c                     U R                   (       d  U R                  (       a  U R                  U5      $ U R                  U5      $ r   )ro   r   	play_filedisplay_resultsrg   r   s     rh   r   Sources.play_source(  s.    	__dnnW.E'E			g	&&rk   c                 B    UR                  U R                  5       5        g r   )r   rQ  )rg   current_lists     rh   r   Sources.append_folder_scrapers,  s    d))+,rk   c           	          [          Vs/ s H(  n[        SU-  5      U[        U R                  U5      4PM*     nnU Vs/ s H  oS   S;  d  M  US   (       d  M  UPM     sn$ s  snf s  snf )Nz"ultimate_nondebrid.%s.display_namer   )NNonerF   r#   )folder_scrapersr   r9  rz   )rg   r   r:  s      rh   r8  Sources.get_folderscraper_info/  s}     DS  T  DS~+BQFGLdeietetvwLxy  DS+  T 	L[!0B(B!qt![	LL T	Ls   /A#A(A(A(c                   ^ ^ UU 4S jnT R                   (       a  T R                  T R                  snmOT R                  T R                  snmT R                  U5      T l        T R                  (       d  g U" 5         Ag !    g = f)Nc            	        > [        5       n [        R                  " 5       nTR                  R                  5       (       Gds  U R	                  5       (       Gd\   T Vs/ s H'  o"R                  5       SL d  M  UR                  5       PM)     nnTR                  5         [        [        R                  " 5       U-
  S5      nSR                  U5      R                  5       n[        U[        [        5      -  S-  5      nTR                  R                  TR                  TR                   TR"                  TR$                  TR&                  XV5        [)        TR*                  5        [-        U5      S:X  a  g US:  a  g  TR                  R                  5       (       d  U R	                  5       (       d  GMZ  g g g g s  snf !   TR/                  5       s $ = f)NTr   z, r;   )xbmc_monitortimer_   
iscanceledabortRequestedis_alivegetName_process_internal_resultsmaxr   upperr   floatscraper_timeoutupdate_scraperrJ   rI   rH   rG   rK   sleepr   lenr   )	monitor
start_timer   remaining_providerscurrent_progressline1percent_threadsrg   s	          rh   _scraperDialog/Sources.scrapers_dialog.<locals>._scraperDialog4  st   ^7		:!!,,..w7M7M7O7O
019RAZZ\T=QKAIIKR	##%TYY[:5:YY*+113U$U?%;;S@AW	(($:K:KTM_M_aeapaprv  sE  sE  GL  V
4?? A%u3 !!,,..w7M7M7O7O.7O.R 04--//s+   F: F56F5
C'F: 2F: 5F: :G)r^   rN   rO   rS   rR   _get_active_scraper_namesinternal_scrapers)rg   rv  scraper_listro  ru  s   `   @rh   r   Sources.scrapers_dialog3  sj    0 
^^d.E.EtG]G]+\8!%h99,G$			$s   =A? ?Bc                    [        5       u  p#[        SSX#XR                  U R                  U R                  U R
                  U R                  U R                  S9u  pEU(       d  U R                  5         g US:X  a  U R                  X5      $ U R
                  (       a&  US:X  a  Su  U l        U l
        U R                  5       $ g g )N)windows.sourcesSourcesResultszsources_results.xml)	window_format	window_idr   r  r~   r   r^   rZ   rQ   playperform_full_searchrC   )results_formatr   r  r~   r   r^   rZ   rQ   r   rT  rY   r   )rg   r   r  window_numberactionchosen_items         rh   rU  Sources.display_resultsK  s    !/!1-#$IK`'PYPYos  pH  pH**dnnVZVjVj  ~B  ~S  ~ST& 
++-w DD~~&$99+7(4>4(



 :~rk   c                 6    U Vs/ s H  o"S   PM	     sn$ s  snf )Nr#   r   )rg   rz  r   s      rh   rx  !Sources._get_active_scraper_namesV  s    $	%1A$	%%	%s   c                 L   U R                   S:X  Ga  U R                  S;   Ga  U R                  (       Gd  SU l        U R                  S:X  d*  [        U R                  R                  SS5      SS9(       Gaw  U R                  (       a_  U R                  R                  S S S	U R                  U R                  4-  SS
.5        / SSsU l        U l        U l        U R                  5       $ U R                  S:X  a  SSKJn  U" U R                  U R                  S   S.5      n["        R$                  " U R&                  5      S   S   nU(       a  ["        R(                  " ["        R*                  " U5      S U R                  U R                  5      nU(       aZ  US   US   pTU R                  R                  XES	XE4-  S.5        / SSS4u  U l        U l        U l        U l        U R                  5       $ U R,                  (       az  U R.                  (       di  U R0                  S:X  a  U R3                  5       $ U R0                  S:X  d)  [        U R                  R                  SS5      SS9(       a  U R5                  5       $ U R3                  5       $ !   S n GNK= f!   S n GNU= f!   S n GN= f)Nr   )r"   r#   Tr"   rootnamerF   z;No results.[CR]Retry With Custom Episode Group if Possible?)headingtextr   )r   r   r~   r   Fr#   r   )episode_groups_choiceposter)r  r  r   r   )r   r   r~   z$No results. Access Filtered Results?)rz   r   rX   confirm_dialogr  r   r]   rL   updater   r   rR   rW   r^   r   indexers.dialogsr  r   episode_groupsr{   r   r   r   ro   r   _no_results_process_ignore_filters)rg   r  group_idr   r   r   s         rh   r   Sources._process_post_resultsY  s   	__	!d&=&=&GPTPpPpPp&*4#
"nTYY]]:WY=Z  b_  '`  '`	[[$$  `A  EI  EP  EP  RV  R^  R^  D_  `_&*, -<>e9T\4)4>  !#7*DIIS[I\+]^( --dll;A>tD8#66x7M7Mh7WY]_c_j_jlplxlxy=	&x0-	2Jw{{F  gH  LR  K\  g\  ]  ^`bdhjnpu`u]t|T5t7Mt~  ""	t
  A%d.>.>.@'@
  A%		jZ\@]  eK  *L''))				 h X #dms%   <"J &J AJ JJJ#c                     U R                   (       a  [        S5        Su  U l        U l         U R                  U R                  5      nU R                  U5      nU R                  U5      nU R                  U5      $ )Nz#Filters Ignored & Autoplay Disabledrv   )r   notificationrZ   r   r   r   r   r   rV  s     rh   r  Sources._process_ignore_filtersw  se    	]]L!FG(3%$d//0'((1'OOG$'			'	""rk   c                     U R                  5         [        5         U R                  (       a  [        SS5      $ [        SS5        g )Nz[B]Next Up:[/B] No Resultsi  z
No Resultsi  )r   r   ro   r  rf   s    rh   r  Sources._no_results  s2    	__\*FMM|T"rk   c                     U R                   R                  SS 5      =(       d=    U R                   R                  S5      =(       d    U R                   R                  S5      nU$ )Nr|   english_titletitler  r   )rg   search_titles     rh   get_search_titleSources.get_search_title  sF    ~t4p		o8VpZ^ZcZcZgZghoZp,	rk   c                     U R                   R                  SS 5      =(       d    U R                   R                  S5      nU$ )Nr}   yearr  )rg   r  s     rh   get_search_yearSources.get_search_year  s-    	}d	+	Dtyy}}V/D$	+rk   c                     U R                   R                  SS 5      =(       d    U R                   R                  S5      n[        U5      nU$ !   S n U$ = f)Nr   r   r  r   r   )rg   r   s     rh   
get_seasonSources.get_season  sF    99==$/J499==3J&Fv	- 4&	-   A Ac                     U R                   R                  SS 5      =(       d    U R                   R                  S5      n[        U5      nU$ !   S n U$ = f)Nr   r   r  )rg   r   s     rh   get_episodeSources.get_episode  sG    IIMM*D1MTYY]]95M'Ww	. D'	.r  c                     S nU R                   S   S:X  a1  U R                   R                  S5      n[        [        U5      5      nU$ U$ !   [        U5      n U$ = f)Nrz   r   ep_name)r  r   r   r   )rg   r  s     rh   get_ep_nameSources.get_ep_name  sW    '	YY|	)YY]]9%7nW56	.. *[)7	.s   A	 	Ac                     U R                    HW  n[        [        U-  5      nUS;   a  M  [        R                  " U5      n[        [        U-  S5        U R                  U5        MY     g !    Ma  = f)N)checkedrF   Nr  )ry  get_propertyint_window_propjsonloadsset_property_sources_quality_count)rg   r   win_propertyrT   s       rh   rg  !Sources._process_internal_results  s`    !!a23<++X**\*!#Y/w' " 8s   A))A.c                 ~    U R                    H-  n[        XS   [        XS   5      US   " XS   5      -   5        M/     g )Nr   r#   r"   )re   setattrgetattr)rg   rT   r   s      rh   r  Sources._sources_quality_count  s>    d1gwt!W7MPTUVPWX_fgahPi7i jrk   c                     U R                   (       d  SU R                  -  OSU R                  -  n[        U5      nU R                  (       a  SU;   a  U/ SQ-  nU$ )Nzresults_quality_%szautoplay_quality_%sr   )r*   r   r    )r   rz   r   r   )rg   settingfilter_lists      rh   r   Sources._quality_filter  sP    :>-- 4??2MbeietetMt'w'+	$$)<kMc>ck	rk   c                     [         U   $ r   )quality_ranks)rg   r   s     rh   r   Sources._get_quality_rank  s    	w	rk   c                 :    U R                   R                  US5      $ )N   )r   r   )rg   r   s     rh   r   Sources._get_provider_rank  s    		!	!	%	%lB	77rk   c                     US:X  a  ggNr0   r   r"   r   )rg   r   s     rh   r  Sources._sort_folder_to_top  s    1rk   c                    U R                   S:X  aC  [        R                  " SU R                  [	        5       [        5       [        5       5      U l        GO; [        R                  " SU R                  [	        5       [        5       [        5       5      U l        [        R                  " U R                  U R                  5      nU Vs/ s H  o"S   U R                  :X  d  M  UPM     snS   nUR                  SS 5      =(       d$    U R                  R                  S5      =(       d    SnUR                  SS5      nU R                  R                  US	   US   US
   UUS   XCS   U R                  S   U R                  U R                  S.
5        U R                  R                  U R                   U R                   U R"                  U R$                  S.5        g s  snf !    NR= f)Nr  r{   r   r   thumbfanartrF   episode_typer   	premieredr  plot)
r   r   r  r  r  ep_thumbr  tvshow_plotr   r   )rz   ro   r|   r}   )rz   r   
movie_metar{   tmdb_api_keympaa_regionr   r  tvshow_metaepisodes_metar   r   r   r  r   r   ro   r|   r}   )rg   episodes_datar   episode_datar  r  s         rh   r   Sources.get_meta  s   	__X-@-@DLLZfZhjujw  zF  zH  .I	$$Ylnkm]i]klDI**4;;		BM,M}!)0LA}MaPL.O$))--2IORH##NB7LIIX 6<PYCZiu  wB  jC  Ua(hU[H\mqmvmvw}m~++t?R?RT U ))$//bfbsbs  EI  EU  EU  V  W N 4s&   A0G GG%B*G G G!c                     U R                  5       U R                  5       U R                  5       p2n[        U R                  U5      n[        U R                  U R                  U R                  5      nU R                  XU R                  U R                  R                  S5      UU R                  5       U R                  5       U R                  R                  S5      X5U R                  R                  SS5      S.U l        g )Nimdb_idtvdb_idtotal_seasonsr"   )rz   r  r  r{   r  aliasesr   r   r  r  expiry_timesr  )r  r  r  r   r  r   rz   r   r{   r   r  r  r?  )rg   r  r  r  r  r  s         rh   r   Sources.make_search_info  s    ..0$2F2F2H$JZJZJ\w%DIIu-'!$//499dkkJ,$(OOe^b^j^jw{  xA  xA  xE  xE  FO  xP  ]d"t/?/?/Adiimm\eNfsz		oq9;$rk   c                 :    US:X  a  US   " US   6 nU$ U" 5       nU$ r  r   )rg   r@  rA  rN  s       rh   r>  Sources._get_module  s.    IXa[(Av	- 	-rk   c                     [          H  n[        [        U-  5        M     U R                  (       a)  U R                   H  n[        [        US   -  5        M     g g )Nr   )r   r   r  r[   r:  )rg   r   s     rh   r;  Sources._clear_properties  sB    'd$8N)O'	t$q'0I!J rk   c                     [        SSU R                  S9U l        [        U R                  R                  S9U l        U R
                  R                  5         g )N)r}  SourcesPlaybackzsources_playback.xml)r  )r   )r   r  r_   r   runr`   r   rf   s    rh   r   Sources._make_progress_dialog  sG    &'MOelpluluv$t';';'?'?@$rk   c                     SU l         U R                  (       d  U R                  5         U R                  R                  5         g )NT)r\   r_   r   enable_resolverrf   s    rh   _make_resolve_dialogSources._make_resolve_dialog  s0    !$			t99;&&(rk   c                     U R                   (       d  U R                  5         U R                   R                  U5        U R                   R                  $ r   )r_   r   enable_resumeresume_choicerg   rt  s     rh   _make_resume_dialogSources._make_resume_dialog  s<    			t99;$$W-				+	++rk   c                 F    [        SSU R                  US9nU$ !   Sn U$ = f)N)zwindows.next_episodeNextEpisodeznext_episode.xml)r  default_actioncancel)r   r  )rg   r  r  s      rh   _make_nextep_dialogSources._make_nextep_dialog  s8    CEW^b^g^g  yG  Hv	- 8&	-s     c                    Sn U R                   R                  5         US-  n U R                  R                  5         US-  nUS:X  d
  [	        5         U ? U ?Su  U l         U l        g !    NH= f!    N/= f!    N$= f!    N)= f)Nr   r"   r#   rE   )r_   closer`   r   close_all_dialog)rg   successs     rh   r   Sources._kill_progress_dialog  s    '
a<7
a<7	A')/9,$, $ $ $$s.   A' A. A5 A< 'A+.A25A9<B c                 v   Su  U l         U l         [        5         S nU(       d  US   nU/nU R                  (       dB  UR	                  U5      nUR                  U5        US U nUR                  5         XS  nXG-   U-   n/ nUR                  n	[        US5       H  u  p[        U5      nUS   nUS:X  a  US   nUR                  5       nSUS   < S	US
   < SUS   < 3nUS   R                  5       nSXUU4-  US'   U	" U5        US:X  d  Mu  [        SS5       H"  n[        U5      nSXUUU4-  US'   U	" U5        M$     M     [        U5      nU R                  5       (       d  U R                  5       $ [        5         U R                  5       U l        U R                   S :X  a  U R                  5       $ U R"                  (       d  U R%                  5         U R&                  (       a  [)        S5        [+        5       n[        US5       GH  u  p [        5         U R,                  (       d    GOU R,                  R/                  5         U R,                  R1                  US   S9  U R,                  R3                  5         U
S:  a  [)        S5        ASu  o0l         U l        US   U l        Xl        [9        5       n U R,                  R;                  5       (       d  UR=                  5       (       a    OU R?                  U5      nU(       a\  SnU R,                  R3                  S5        U R,                  R1                  US9  [)        S5        URA                  X0U RB                  S9  OGM^  U R                  (       a    OAU R                   (       a    O.U
[E        U5      :X  a  SU l        URG                  5           OGM      U R                  (       a  U R                  5       $ U R                   (       a  W(       d  U RI                  5         Ag !    GN{= f!    GM  = f!    GM  = f!   U R                  5          Ny= f!    g = f)NNFr   r"   r   r0   rE  z[B]r   z
[/B] | [B]
size_labelz[/B] | r  display_namez%02d. [B]%s[/B][CR]%s[CR]%sresolve_displayr   r#   z&%02d. [B]%s (RETRYx%s)[/B][CR]%s[CR]%sr   )r     )NNFr   rp   )rt  )rM   T)%playback_successfulcancel_all_playbackr   r   r3  remover-  r   	enumerater0  ri  ranger   continue_resolve_checkr   get_playback_percentplayback_percentr\   r  ro   rm  ra  r_   reset_is_cancelledupdate_resolverbusy_spinnerra   playing_itemr   rc  rd  resolve_sourcesr  rM   rn  stopplayback_failed_action)rg   r   rE  urlitemssource_index
items_prev
items_nextprocessed_itemsprocessed_items_appendcountr   resolve_itemr   provider_text
extra_infor  retryro  playerresolve_percents                        rh   rT  Sources.play_file  s   7B4$D4E'	3
71:&85


==(LNN6,'J'J+E?+22q){u:L%&H9hhNN$M26y/4CUW[\gWhiJ'--/L&Cu]giuFv&vL"#<(:1+$Zl(PTYjoq{  ~J  TK  )Kl$%\*  *  5

%
%
'
'0J0J0L)L4464
t#D,F,F,H%H

"
"D$=$=$?
oouT{^7q){u  %	,,.	))t4E/F)G	&&(	Cj?P<S
"D$<!&\TV				(	(	*	*g.D.D.F.F  &c	((1++O+DSzzz#$*;*;z<		!	!5		!	!5	#e*	"&t{{} 
7 *D 
d&@&@&BB		!	!d.I.I.K5 d* TD&$
$
$
& $s   C9P A%P 4>P 3AP P(P +A!PP)P74P+P -A4P!P $P5P 7PP 
&P0P 2P P4 PPPPP PPP P14P8c                    U R                   S:X  a(  [        [        5       [        U R                  5      5      nO[[        U R                  U R                  45      (       a  g[        [        U R                  U R                  5      U R                  5      nU(       d  gU R                  U5      nUS:X  a  g US:X  a7  [        U R                   U R                  U R                  U R                  5        g[        U5      $ )Nr  r   r  
start_over)rz   get_progress_status_movieget_bookmarks_moviestrr{   r   rs   rt   get_progress_status_episodeget_bookmarks_episoder   r   get_resume_statuserase_bookmarkrj  )rg   rt  r  s      rh   r  Sources.get_playback_percentP  s    	__+DEXEZ\_`d`l`l\m+n
DKK../00-.CDLLRVR]R].^`d`l`lm	!!'*&x|$//4<<dllK
	wrk   c                 n    [        U R                  5      (       a  [        U5      $ U R                  U5      $ r   )auto_resumerz   rj  r  r  s     rh   r.  Sources.get_resume_status\  s+    !!%.#8		!	!'	**rk   c                     U R                  5         U R                  (       a9  U R                  (       a'  SS/ sU l        U l        U l        U R                  5         g g g r  )r   r^   r   r\   rP   r   rf   s    rh   r  Sources.playback_failed_action`  sG    	^^FKUTVC4T^T-C &^rk   c                 .    U R                   (       a  U R                  (       a  gU R                  (       a)  [        U R                  5      S:  a  U R	                  5       $ U R
                  (       a  U R	                  5       $ U R                  5       $ !    g= f)NTr"   F)ro   r   rM   r   autoplay_nextep_handlerru   random_continual_handlerrf   s    rh   r  Sources.continue_resolve_checkf  so    
//T33D
C 1 12Q6''))
4#?#?#AA

'
'
))s   "B 9B  B  B Bc                    [        SU R                  R                  S5      U R                  R                  S5      U R                  R                  S5      4-  SU R                  R                  S5      5        [        5       nUR	                  5       (       a"  [        S5        UR	                  5       (       a  M"  U R                  5         g)	N[B]Next Up:[/B] %s S%02dE%02dr  r   r   d  r  r;   T)r  r  r   xbmc_playerisPlayingVideorm  r  )rg   r$  s     rh   r8   Sources.random_continual_handlero  s    .$))--2H$))--X`Jacgclclcpcpqzc{1||  C  EI  EN  EN  ER  ER  S[  E\  ]=&s	rk   c                    U R                   (       d  U R                  (       d  g[        5       nUR                  5       (       Ga  UR	                  5       nU R                   S   U R                   S   U R                   S   pTnU(       a  S OSnSnUR                  5       (       aF   [        X!R                  5       -
  5      nX::  a  SnO"[        S5        UR                  5       (       a  MF  U(       Ga  U R                  (       a  [        U R                  5      S:  an  UR                  5       (       a"  [        S5        UR                  5       (       a  M"  [        [        U R                  5      S-
  5      U l        U R                  5         gU(       a  U R                  S	S
9nOgU(       a  U R                  US
9nOw[        SU R                  R                  S5      U R                  R                  S5      U R                  R                  S5      4-  SU R                  R                  S5      5        U(       d  UnUS	:X  a  gUS:X  a  UR                  5         gUS:X  a!  U R                  5         UR                  5         gUR                  5       (       a"  [        S5        UR                  5       (       a  M"  U R                  5         ggg!    GN= f)NF
use_windowwindow_timer  r  Tr;   r"   r  )r  r;  r  r   r   r<  r  pauser  )rm   rM   r=  r>  getTotalTimeroundgetTimerm  r   r+  r  r  r  r  r   r  )	rg   r$  
total_timerA  rB  r  r  continue_nextepremaining_times	            rh   r7  Sources.autoplay_nextep_handlerv  s   			d&7&7=&##%:-1-A-A,-OQUQeQefsQtvz  wK  wK  L\  w]N:DG6?				 	 J)99:^%o
3Z 
			 	  D"!!##U3ZF!!##c$"3"34q89d
!
t77x7Pf	d66n6UV
6$))--:PRVR[R[R_R_`hRikoktktkxkx  zC  lD  :E  E  GK  MQ  MV  MV  MZ  MZ  [c  Md  eN6%	7	[[]	6		 [[]  ""E#J6  ""	 5 Ds   #"K K Kc                    [        5       nUR                  5       (       a  U R                  5       nU(       d  [        SS5      $ [        SU R                  R                  S5      U R                  R                  S5      U R                  R                  S5      4-  SU R                  R                  S5      5        UR                  5       (       a"  [        S	5        UR                  5       (       a  M"  U R                  U5        g g )
NiD  i  z([B]Next Episode Ready:[/B] %s S%02dE%02dr  r   r   r<  r  r;   )r=  r>  r   r  r  r   rm  rU  )rg   r$  r   s      rh   r   !Sources.autoscrape_nextep_handler  s    =&7
,ud33;tyy}}W?UW[W`W`WdWdemWnptpypyp}p}  H  qI  ?J  J  LP  RV  R[  R[  R_  R_  `h  Ri  j



!
!5:&


!
! rk   c                 L   U(       a  X l         S n UR                  SS5      nUS:X  a_  UR                  S5      (       aI  SSKJn  U" SS5      nU" S	S
5      nU" SS5      nU" SS5      n	SSKJn
  U
R                  XgXUS   S5      nU$ US:X  a&  SSKJn  U" UR                  SUS   5      SS.5      nU$ US:X  a  UR                  SUS   5      nU$ US;   a#  UR                  SUR                  S5      5      nU$ UR                  SUR                  S5      5      n U$ !    U$ = f)Nr   rF   r   hashr   r   z"ultimate_nondebrid.torrserver_hostz	127.0.0.1z"ultimate_nondebrid.torrserver_port8090z"ultimate_nondebrid.torrserver_userz"ultimate_nondebrid.torrserver_pass)resolverr   )resolve_easynewsurl_dlr  rp   )rR  r  r0   )r   r   r   )	r  r   caches.settings_cacher   scrapers.torrserverrP  resolveindexers.easynewsrQ  )rg   r   r  r  r   r   ts_hostts_portts_userts_passrP  rQ  s               rh   r  Sources.resolve_sources  sH   	t9#XX/4? %$((6*:*:1>LG>GG>CG>CG,


7WtF|Q
OCJ #2
dhhxe&EwW
XC 
* 	9$
((8T%[
)C 
* 	AA
((5$((8,
-C
 
* ((5$((8,
-C 
*	*s$   A6D *D 4D 'D :!D D#c                 X    [        U Vs/ s H  o3S   U:X  d  M  UPM     sn5      $ s  snf Nr   rn  )rg   r  r   r   s       rh   rb   Sources._quality_length  s(    	:AI,'"9a:	;;:s   ''c                 `    [        U Vs/ s H  o3S   [        ;   d  M  UPM     sn5      $ s  snf r]  )rn  sd_check)rg   r  dummyr   s       rh   rc   Sources._quality_length_sd  s(    	;AI,(":a;	<<;s   ++c                     [        U5      $ r   r^  )rg   r  rb  s      rh   rd   Sources._quality_length_final  s    	Urk   )Jr[   r   r   r   r   r   ru   r   r   ro   r
  rY   re   r   r   r|   r}   rq   rw   r   r~   r]   r   rZ   r:  r   r   rx   r   r   rU   ry  r   rz   r  rm   rM   r   rL   rr   rn   r  r	  ra   r  r^   rN   rP   rO   r_   r`   r   rS   r   rs   rt   rV   rW   rX   r\   r   r?  r   r   r   rT   rH   rG   rI   rJ   rK   rR   r{   rQ   r   )F)r  )@__name__
__module____qualname____firstlineno__ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rQ  r   r   r8  r   rU  rx  r   r  r  r  r  r  r  r  rg  r  r   r   r   r  r   r   r>  r;  r   r  r  r  r   rT  r  r.  r  r  r8  r7  r   r  rb   rc   rd   __static_attributes__r   rk   rh   r@   r@   '   s8   g'"R	?=)0 "$W	
 %$	'-M0	&<##(k 8W;
K

)
,

:" &( KZ
+)V	><=rk   r@   )Sr  rb  	threadingr   windows.base_windowr   r   caches.episode_groups_cacher   rS  r   modulesr	   r
   r   r   modules.playerr   modules.source_utilsr   r   modules.utilsr   r   r   r   r   r   r   r   get_iconr  rm  ra  select_dialogr  r   show_busy_dialogr   r=  r  r  r   r   r   r   r  r   r9  store_resolved_to_cloudwatched_indicatorsr   r#  r  r  r   r   r   r   r   r  r  r   r   r   r   r.  r)  r*  r/  r,  r-  rF  ra  r  r]  r   	main_liner  rk  r   r2  r@   r   rk   rh   <module>rx     sm      : < - B B ) B n  n  n.8.A.A:CZCZ\f\l\lnx  oF  oF  /F +,|2<2J2JJLeLegq  hC  hC /~/2<2M2MzOjOjlv  mC  mC / "K-7-D-DjF]F]_i_x_x *lNJRJ\J\^f^^  BJ  B^  B^  `h  `v  `v  Kv G	#%8-4<4T4TV^VwVw 1 1.6.N.NPXPkPk + +9A9P9PRZRfRfhph}h}  @H  @T  @T  :T 6\;HPHbHbdl  eH  eH  JR  Ji  Ji E -/EKSKiKiks  lG  lG  IQ  I`  I`  bj  bx  bx  Lx H )>=@H@^@^`h  aA  aA  CK  CY  CY = .)1)D)DhFaFa & &AOAiAiky  lN  lN  P^  Pm  Pm > .5C5_5_ao  bF  bF 2 2X (1aq1VWXIg 	:$KTenz  Ro  pbB"Q7 k
 k
rk   