+
    Ki-  c                   s   ^ RI t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 . RmOtR.t/ RR	bR
RbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbR RbR!R"bR#R"bR$R%bR&R'b/ R(R'bR)R*bR+R,bR-R.bR/R.bR0R1bR2R1bR3R4bR5R6bR7R8bR9R:bR;R<bR=R>bR?R@bRARBbRCRDbRERFbC/ RGRFbRHRIbRJRKbRLRMbRNRObRPRQbRRRSbRTRUbRVRWbRXRYbRZR[bR\R]bR^R_bR`R_bRaRbbRcRbbRdRebCRfReRgRh/CtRi tRnRj ltRk tRl tR# )oi    N)settings)http)extract_archive)logger)get_md5_hashz.srmZ3DOZ3doz
Amiga CD32z
amiga-cd32ZAmigaZamigazMaster SystemZsmsZGenesisZmdz	Game GearZggzSega CDZsegacdZSaturnZsaturnZ	DreamcastZdcZPICOZpicoZColecoVisionZcolecovisionz
Atari 8bitZatari800zAtari - 8-bitz
Atari 2600Z	atari2600zAtari - 2600z
Atari LynxZlynxzAtari STzatari-stz
Atari - STzAtari JaguarZjaguarzNintendo DSZdsz#Super Nintendo Entertainment SystemZsneszSuper FamicomzNintendo FamicomZneszNintendo Entertainment SystemzNintendo 64Zn64zGame Boy AdvanceZgbazGame BoyZgbZGameCubeZgamecubeZWiiZwiiZSwitchZswitchzPlayStation 2Zps2zPlayStation 3Zps3zPlayStation VitaZpsvitaZPlayStationPortableZpspzPlayStation PortableZPlayStationZps1zCD-iZcdiZMSX2ZmsxZ
ArchimedesZ
archimedesz	Acorn BBCZbbczAcorn ElectronZelectronZBallyZ	astrocadezWonderSwan ColorZwonderswancolorZ
WonderSwanZ
wonderswanzAmstrad CPC - Games - [DSK]Zcpc6128diskzAmstrad CPC - Games - [CPR]Zgx4000zCommodore C64 - Games - [PRG]Zc64prgz&Commodore C64 - Games - Arcade - [PRG]zCommodore C64 - Games - [G64]Zc64g64z&Commodore C64 - Games - Arcade - [G64]zZX Spectrum - Games - [TZX]ZspectrumcasszZX Spectrum - Games - [TAP]zApple IIZapple2c                sF   V '       g   . # \         P                  R,           V ,           p\        P                  ! VRR/R7      p VP	                  4        TP                  pTR,          #   \        P
                   d#   p\        P                  ! RT4        Rp?R# Rp?ii ; i)z%Retrieve a lutris bundle from the APIz/api/tosec/games?md5=zContent-Typezapplication/json)Zheadersz!Unable to get bundle from API: %sNZresults)	r    ZSITE_URLr   ZRequestZgetZ	HTTPErrorr   errorZjson)md5sumZurlZresponseZexZresponse_data   &    :/usr/lib/python3.14/site-packages/lutris/scanners/tosec.pysearch_tosec_by_md5r	   D   s    	


5
5
>C||C.:L)MNH MMM##	 >> 8"=s   A) )B >BB c           
      sZ   / p. p/ p/ p. pV'       d   \         P                  ! V 4       F  p\         P                  P                  V4      w  rV	\        9  d   K1  \        \         P                  P                  W4      \         P                  P                  W4      R R7       \         P                  ! \         P                  P                  W4      4       F  p
VP                  V: RV
: 24       K  	  K  	  \         P                  ! V 4      V,            F  p\         P                  P                  V4      w  rV	\        9   d   VP                  V4       KB  V	\        9   d   WtV&   KS  \         P                  P                  \         P                  P                  W4      4      '       d   K  \        \         P                  P                  W4      4      p\        V4      W'&   WuV&   K  	  VP                  4        EF  w  rV'       g   \        RV,          4       K"  \        V4      ^8  d   \        RV4       K@  \        RV^ ,          R,          ,          4       ^ p/ pV^ ,          R,           F*  pVVR,          ,          pVR,          pVVV&   V^,          pK,  	  V\        V^ ,          R,          4      8X  g   K  VP                  4        EF+  w  pp\         P                  P                  V4      w  pp\         P                  P                  V4      w  ppVV9   d   VV,          p\         P                  P                  V4      w  pp	\         P                  ! \         P                  P                  V V4      \         P                  P                  V VV	,           4      4        \         P                  ! \         P                  P                  V V4      \         P                  P                  V V4      4       EK.  	  EK  	  R
#   \          d    \"        P$                  ! R	TT4        EK^  i ; i)F)Zmerge_singleZ/zno result for %szMore than 1 match for %sz	Found: %snameromsZmd5zFailed to rename %s to %sN)osZlistdirZpathZsplitextarchive_formatsr   ZjoinZappendsave_formatsZisdirr   r	   itemsZprintlenZrenameZFileNotFoundErrorr   r   )ZfolderZextract_archivesr   ZarchivesZsavesZ	checksumsZarchive_contentsZfilenameZbasenameZextZarchive_filer   ZromZresultZroms_matchedZrenamesZgame_romZsource_fileZ	dest_fileZsourceZdestZ	base_nameZ_extZdest_base_nameZ	save_fileZ
_base_names   &&                        r   scan_folderr   S   s   DHEI

6*HGG,,X6MH/)BGGLL:BGGLL<Zino "

277<<+I J ''8\(JK !K + JJv&)999((2/!OOH%,&(O77==f788bggll6<=,V4$& : zz|$s*+v;?,c2kF1If--.q	&))H#HUO4K (I#,GK AL	 *
 3vay011 '"$''"2"26":	4')ww'7'7'=$% %i 0I&(gg&6&6y&AOJIIbggll69=rww||FTbehTh?ijLIIbggll66:BGGLLQU<VW !0! $2 ) LLL!<fdKKLs   #AP#P*)P*c                 st    V R ,          R,          p\         P                  4        F  w  r#W!9   g   K  Vu # 	  R# )categoryr
   N)PLATFORM_PATTERNSr   )Zgamer   ZpatternZplatforms   &   r   guess_platformr      s2    J'H.446O 7    c                 s   R p^ p\        V RRR1,          ^R7       F#  w  r4VR9   d   RpV'       d   TpVR9   g   K!  R pK%  	  V R\        V 4      V,
           P                  4       p V P                  R4      '       d   RV RR	 ,           p V # )
FN)ZstartTz, ThezThe i)Z)])Z(r   i)Z	enumerater   ZstripZendswith)r
   Z	in_parensZ
good_indexZiZcr   r   clean_rom_namer      s    IJ$tt*A.
?IJ
?I / (#d)j()//1D}}WSb	!Kr   )z.zipz.7zz.rarz.gz)F)r   Zlutrisr    Zlutris.utilr   Zlutris.util.extractr   Zlutris.util.logr   Zlutris.util.systemr   r   r   r   r	   r   r   r   ) r   r   <module>r      s   	   / " +0x6	56,6 W6 U	6
 t6 6 x6 h6 6 F6 N6 *6 Z6 +6 K6  &!6" 
#6$ *%6& H'6( 4)6* *6+6, V-6. /60 $U162 5364 566 768 
96: 
5;6< h=6> U?6@ UA6B C6D 5E6F EG6H 5I6J EK6L EM6N ,O6P Q6R jS6T [U6V )W6X ,Y6Z "=[6\ "8]6^ $X_6` -ha6b $Xc6d -he6f ">g6h ">k6 r$8Lvr   