+
    ü³j–  ã                   ó6  € R t ^ RIt^ RIt^ RIt^ RIHtHt ^ RIHt ^ RI	H
t
 ^ RIHtHt ]P                  ! ]4      t]! ]4      P$                  t ! R R]4      tR tR	 t]R
8X  d3   ]P.                  ! ]P0                  R7       ]! R]
 R24       ]! 4        R# R# )uÛ   
HTTP-Ñ�ÐµÑ€Ð²ÐµÑ€ Ð´Ð»Ñ� Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ð¸Ð³Ñ€Ñ‹ Ð¸ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð².
Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½ÑƒÑŽ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ Python (http.server).
N)Ú
HTTPServerÚSimpleHTTPRequestHandler)ÚPath)ÚSERVER_PORT)Úsave_score_syncÚinit_db_syncc                   óT   a a€ ] tR t^t oRtV 3R ltR tR tV 3R ltR t	Rt
VtV ;t# )ÚCORSHandleru^   SimpleHTTPRequestHandler Ñ� CORS-Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ°Ð¼Ð¸, Ñ€Ð°Ð·Ð´Ð°Ñ‡ÐµÐ¹ Ñ„Ð°Ð¹Ð»Ð¾Ð² Ð¸ API.c                óF   <€ \         SV `  ! VR \        \        4      /VB  R# )Ú	directoryN)ÚsuperÚ__init__ÚstrÚGAME_DIR)ÚselfÚargsÚkwargsÚ	__class__s   &*,€Ú	server.pyr   ÚCORSHandler.__init__   s   ø€ Ü‰Ò˜$ÐB¬#¬h«-ÐB¸6ÔBó    c                ó´   € V P                  ^È4       V P                  RR4       V P                  RR4       V P                  RR4       V P                  4        R# )u3   ÐžÐ±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° CORS preflight Ð·Ð°Ð¿Ñ€Ð¾Ñ�Ð¾Ð².úAccess-Control-Allow-OriginÚ*úAccess-Control-Allow-MethodsúGET, POST, OPTIONSúAccess-Control-Allow-HeadersúContent-TypeN)Úsend_responseÚsend_headerÚend_headers)r   s   &r   Ú
do_OPTIONSÚCORSHandler.do_OPTIONS   sP   € à×Ñ˜3ÔØ×ÑÐ6¸Ô<Ø×ÑÐ7Ð9MÔNØ×ÑÐ7¸ÔHØ×ÑÖr   c           	     ó^  € V P                   P                  R4      '       Ed¦    \        V P                  P	                  R^ 4      4      pV P
                  P                  V4      P                  R4      p\        P                  ! V4      p\        VP	                  R4      4      p\        VP	                  RR4      ;'       g    R4      p\        VP	                  RR4      ;'       g    R4      p\        VP	                  R^ 4      4      p\        WEWg4       \        P                  R	WEWg4       \        P                  ! R
RRR/4      P                  R4      pV P!                  ^È4       V P#                  RR4       V P#                  R\        \%        V4      4      4       V P'                  4        V P(                  P+                  V4       R# V P1                  RR4       R#   \,         dÆ   p	\        P/                  RT	4       \        P                  ! R
RR\        T	4      /4      P                  R4      p
T P!                  R4       T P#                  RR4       T P#                  R\        \%        T
4      4      4       T P'                  4        T P(                  P+                  T
4        Rp	?	R# Rp	?	ii ; i)uP   ÐžÐ±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° POST Ð·Ð°Ð¿Ñ€Ð¾Ñ�Ð¾Ð² Ð´Ð»Ñ� Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� Ð¾Ñ‡ÐºÐ¾Ð².z/api/save_scorezContent-Lengthzutf-8Úuser_idÚusernameÚ Ú
first_nameÚscoreuN   Ð¡Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½ Ñ€ÐµÐºÐ¾Ñ€Ð´ Ð¸Ð³Ñ€Ð¾ÐºÐ° user_id=%s (@%s, %s): %s Ð¾Ñ‡ÐºÐ¾Ð²ÚokTÚsavedr   zapplication/json; charset=utf-8u7   ÐžÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ð¸ Ð¾Ñ‡ÐºÐ¾Ð²: %sFÚerrori�  Ni”  z	Not Found)ÚpathÚ
startswithÚintÚheadersÚgetÚrfileÚreadÚdecodeÚjsonÚloadsr   r   ÚloggerÚinfoÚdumpsÚencoder   r   Úlenr    ÚwfileÚwriteÚ	Exceptionr+   Ú
send_error)r   Úcontent_lengthÚ	post_bodyÚdatar$   r%   r'   r(   Úresponse_bytesÚeÚ	err_bytess   &          r   Údo_POSTÚCORSHandler.do_POST!   s  € à�9‰9×ÑÐ 1×2Ó2ð,Ü!$ T§\¡\×%5Ñ%5Ð6FÈÓ%JÓ!K�Ø ŸJ™JŸO™O¨NÓ;×BÑBÀ7ÓK�	Ü—z’z )Ó,�ä˜dŸh™h yÓ1Ó2�Ü˜tŸx™x¨
°BÓ7×=Ð=¸2Ó>�Ü  §¡¨,¸Ó!;×!AÐ!A¸rÓB�
Ü˜DŸH™H W¨aÓ0Ó1�ä °:ÔEÜ—‘ØdØ zôô
 "&§¢¨T°4¸À$Ð,GÓ!H×!OÑ!OÐPWÓ!X�Ø×"Ñ" 3Ô'Ø× Ñ  Ð1RÔSØ× Ñ Ð!1´3´s¸>Ó7JÓ3KÔLØ× Ñ Ô"Ø—
‘
× Ñ  Ö0ð �O‰O˜C Ö-øô ô ,Ü—‘ÐVÐXYÔZÜ ŸJšJ¨¨e°W¼cÀ!»fÐ'EÓF×MÑMÈgÓV�	Ø×"Ñ" 3Ô'Ø× Ñ  Ð1RÔSØ× Ñ Ð!1´3´s¸9³~Ó3FÔGØ× Ñ Ô"Ø—
‘
× Ñ  ×+Ò+ûð,ús    ¤CG Ã&C G ÇJ,Ç'B:J'Ê'J,c                óü   <€ V P                  R R4       V P                  RR4       V P                  RR4       V P                  RR4       V P                  RR	4       V P                  R
R4       \        SV `	  4        R# )r   r   r   r   r   r   zCache-Controlz.no-cache, no-store, must-revalidate, max-age=0ÚPragmazno-cacheÚExpiresÚ0N)r   r   r    )r   r   s   &€r   r    ÚCORSHandler.end_headersE   ss   ø€ à×ÑÐ6¸Ô<Ø×ÑÐ7Ð9MÔNØ×ÑÐ7¸ÔHØ×Ñ˜Ð*ZÔ[Ø×Ñ˜ :Ô.Ø×Ñ˜ CÔ(Ü‰ÑÖr   c                ó6   € \         P                  ! V.VO5!   R # )N)r6   r7   )r   Úfmtr   s   &&*r   Úlog_messageÚCORSHandler.log_messageO   s   € ä�Š�CÐ˜$Ör   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r!   rE   r    rN   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r   Ú__classdict__s   @@r   r	   r	      s(   ù‡ € ÙhõCòò".õH÷ ò  r   r	   c                 ó¤   € \        4        \        R\        3\        4      p \        P                  R\        \        4       V P                  4        R# )ui   Ð—Ð°Ð¿ÑƒÑ�ÐºÐ°ÐµÑ‚ HTTP-Ñ�ÐµÑ€Ð²ÐµÑ€ Ð² Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾Ð¼ Ð¿Ð¾Ñ‚Ð¾ÐºÐµ (Ð´Ð»Ñ� Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð·Ð° Nginx).z0.0.0.0uj   Ð¡Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�ÐµÑ€Ð²ÐµÑ€ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½ Ð½Ð° Ð¿Ð¾Ñ€Ñ‚Ñƒ %s: http://127.0.0.1:%s/game/index.htmlN)r   r   r   r	   r6   r7   Úserve_forever)Úhttpds    r   Ú_run_http_serverr]   T   sB   € ä„NÜ˜	¤;Ð/´Ó=€EÜ
‡K�KÐ|ô  Jô  LWô  XØ	×ÑÖr   c                 óˆ   € \         P                  ! \        RR7      p V P                  4        \        P                  R4       V # )uD   Ð—Ð°Ð¿ÑƒÑ�ÐºÐ°ÐµÑ‚ HTTP-Ñ�ÐµÑ€Ð²ÐµÑ€ Ð² Ñ„Ð¾Ð½Ð¾Ð²Ð¾Ð¼ Ð¿Ð¾Ñ‚Ð¾ÐºÐµ.T)ÚtargetÚdaemonu:   Ð¡ÐµÑ€Ð²ÐµÑ€ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½ Ð² Ñ„Ð¾Ð½Ð¾Ð²Ð¾Ð¼ Ð¿Ð¾Ñ‚Ð¾ÐºÐµ)Ú	threadingÚThreadr]   Ústartr6   r7   )Úthreads    r   Ú
run_serverre   \   s0   € ä×ÒÔ%5¸dÔC€FØ
‡L�L„NÜ
‡K�KÐLÔMØ€Mr   Ú__main__)Úlevelu   Ð¡ÐµÑ€Ð²ÐµÑ€: http://localhost:z/game/index.html)rU   r4   Úloggingra   Úhttp.serverr   r   Úpathlibr   Úconfigr   Údbr   r   Ú	getLoggerrQ   r6   Ú__file__Úparentr   r	   r]   re   ÚbasicConfigÚINFOÚprintrP   r   r   Ú<module>rs      s’   ðñó Û Û ß <Ý å ß ,à	×	Ò	˜8Ó	$€á�‹>× Ñ €ô> Ð*ô > òBòð ˆzÔØ×Ò˜gŸl™lÕ+Ù	Ð+¨K¨=Ð8HÐ
IÔJÙÖñ r   