ó
    Úë�jpß  ã                   ó  • S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
rS SKrS SKrS SKrS SKrS SKJr  \" \5      R&                  r\ R*                  R-                  S\R.                  5      rSr\" \ R*                  R-                  SS5      5      r\S-  r\S-  rS	S
0rSS/rSr Sq!S r"S r#\RH                  " 5       r%S r&S r'S r(S r)\RT                  " S5      r+S r,STS jr-S r.S r/S r0S r1S r2S r3SUS jr4S r5SVS jr6S  r7S! r8\ Rr                  Ru                  \ Rr                  Rw                  \ Rr                  Ry                  \5      5      S"5      r=Sq>S#q?S#q@\RH                  " 5       rAS$qBS%rCSWS& jrDS' rES( rFS) rGS* rHS+ rISXS, jrJ \F" 5       (       d  \R–                  " \GS-S.9R™                  5         S 0 S/.rNS0 rOS1 rPS2 rQSYS3 jrRSZS4 jrS\RH                  " 5       rTS$/rUS[S5 jrVS\S6 jrWS]S7 jrXS8 rYS9 rZS: r[S; r\S< r]S= r^S^S> jr_S? r`S@ raSA rbSB rcSC rd/ SDQre/ SEQrfS_SF jrgSG rhSH riSI rjSJ rkSK rlSL rm " SM SN\RÜ                  RÞ                  5      rp\qSO:X  a…  \)" 5         \R–                  " \'S-S.9R™                  5         \ Rä                  " \5        \prsS-\	Rè                  lu        \	Rì                  " SP\4\s5       rw\x" SQ\ SR3S-SS9  \wRó                  5         SSS5        gg! \M a     GN4f = f! , (       d  f       g= f)`é    N)ÚPathÚSTOCK_PYiK  ÚSTOCK_INTERVALÚ60úwatchlist.jsonzstock.dbú
User-Agentz'Mozilla/5.0 (compatible; stocklive/1.0)))é	   é   )é   é   ))é   r   )r
   r   )é   r   c                 ó|   • U R                   U R                  4U:¬  =(       a    U R                   U R                  4U:*  $ ©N)ÚhourÚminute)ÚnowÚh1m1Úh2m2s      Ú /home/pi/stocklive/serve_live.pyÚ
_in_windowr   *   s1   € Ø�H‰H�c—j‘jÐ! TÑ)×L¨s¯x©x¸¿¹Ð.DÈÑ.LÐLó    c                  ó$  • [         R                   R                  5       n U R                  5       S:¼  a  gU R                  U R                  4[
        :¼  a  [        U R                  S5      :w  a  gg[         H  u  p[        XU5      (       d  M    g   g)ua   è¿”å›žæœ¬æ¬¡åº”æ‰§è¡Œçš„ modeï¼›é�žäº¤æ˜“æ—¶æ®µè¿”å›ž Noneï¼ˆè·³è¿‡ï¼Œä¸�è¦†ç›– latest.htmlï¼‰ã€‚é   Nú%Y-%m-%dÚcloseÚintraday)
Údatetimer   Úweekdayr   r   ÚCLOSE_STARTÚ_last_close_dateÚstrftimeÚTRADING_SESSIONSr   )r   ÚaÚbs      r   Úupdate_planr&   .   st   € ä
×
Ñ
×
Ñ
Ó
!€CØ
‡{�{ƒ}˜ÓØà�‰�#—*‘*Ð¤Ó,ä˜sŸ|™|¨JÓ7Ó7ØØç ‰ˆÜ�c˜a× Ó Ùñ !ð r   c                  ób  • [         R                  SS9(       d,  [        S[        R                  R	                  5       S S3SS9  g  [        5       n U cA  [        S[        R                  R	                  5       S S3SS9   [         R                  5         g [        R                  " [        [        [        S	-  5      U /SSS
S9n[        S[        R                  R	                  5       S SU  SUR                   3SS9  U S:X  a=  UR                  S:X  a-  [        R                  R	                  5       R                  S5      q[         R                  5         g ! [         a7  n[        S[        R                  R	                  5       S SU 3SS9   S nANQS nAff = f! [         R                  5         f = f)NF)ÚblockingÚ[z%H:%M:%Su)   ] ä¸Šæ¬¡æŠ“å�–ä»�åœ¨è¿›è¡Œï¼Œè·³è¿‡æœ¬æ¬¡T©Úflushu    ] é�žäº¤æ˜“æ—¶æ®µï¼Œè·³è¿‡æ›´æ–°zrun_live.pyé–   )Úcapture_outputÚtextÚtimeoutú%Y-%m-%d %H:%M:%Su   ] æŠ“å�–å®Œæˆ� mode=z rc=r   r   r   u   ] æŠ“å�–å¼‚å¸¸: )Ú_fetch_lockÚacquireÚprintr   r   r&   ÚreleaseÚ
subprocessÚrunÚPYÚstrÚBASEÚ
returncoder"   r!   Ú	Exception)ÚplanÚrÚes      r   Úrun_oncer?   C   s}  € Ü×Ñ¨ÐÖ.Ü�”(×#Ñ#×'Ñ'Ó)¨(Ð3Ð3\Ð]ÐeiÒjØðÜ‹}ˆØ‰<Ü�A”h×'Ñ'×+Ñ+Ó-¨hÐ7Ð7WÐXÐ`dÒeØô 	×ÑÕô �NŠNÜ””T˜MÑ)Ó*¨DÐ1Ø d°Cñ
ˆô 	�”(×#Ñ#×'Ñ'Ó)Ð*;Ð<Ð<PÐQUÐPVÐVZÐ[\×[gÑ[gÐZhÐiÐquÒvØ�7‹?˜qŸ|™|¨qÓ0ä'×0Ñ0×4Ñ4Ó6×?Ñ?À
ÓKÐô 	×ÑÕøô ó UÜ�”(×#Ñ#×'Ñ'Ó)¨(Ð3Ð3CÀAÀ3ÐGÈt×TûðUûô 	×ÑÕús1   Á8E ÂB+E Å
FÅ-FÆF ÆFÆF ÆF.c                  ód   • [        5          [        R                  " [        5        [        5         M&  r   )r?   ÚtimeÚsleepÚINTERVAL© r   r   Ú	schedulerrE   Z   s    € Ü„JØ
Ü�
Š
”8ÔÜŒ
ñ r   c                  ó\   • [         R                   R                  5       R                  S5      $ )Nr0   )r   r   r"   rD   r   r   Ú_nowrG   g   s#   € Ü×Ñ× Ñ Ó"×+Ñ+Ð,?Ó@Ð@r   c            	      ó^  • [         R                  " [        5      n U R                  5       nUR	                  S5        UR	                  S5        U R                  5         [        S-  nUR                  5       (       aä   [        R                  " UR                  SS95      R                  S/ 5      nU(       aˆ  UR	                  SS[        5       [        5       45        [        U5       H"  u  pEUR	                  S	SXT[        5       45        M$     U R                  5         [        S
[        5        S[        U5       S3SS9   UR#                  UR%                  S5      5        U R'                  5         g ! [          a"  n[        S
[        5        SU 3SS9   S nANYS nAff = f! [          a     NLf = f)NzbCREATE TABLE IF NOT EXISTS devices(
        uid TEXT PRIMARY KEY, created_at TEXT, last_seen TEXT)a   CREATE TABLE IF NOT EXISTS watchlists(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        uid TEXT NOT NULL,
        code TEXT NOT NULL,
        sort_order INTEGER NOT NULL DEFAULT 0,
        created_at TEXT,
        UNIQUE(uid, code),
        FOREIGN KEY(uid) REFERENCES devices(uid))r   úutf-8©ÚencodingÚcodesúEINSERT OR IGNORE INTO devices(uid,created_at,last_seen) VALUES(?,?,?)Ú
__legacy__zPINSERT OR IGNORE INTO watchlists(uid,code,sort_order,created_at) VALUES(?,?,?,?)r)   u"   ] å·²è¿�ç§»æ—§ watchlist.json çš„ u    å�ªåˆ° __legacy__Tr*   u    ] è¿�ç§» watchlist.json å¤±è´¥: z	.json.bak)Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚcommitr9   ÚexistsÚjsonÚloadsÚ	read_textÚgetrG   Ú	enumerater3   Úlenr;   ÚrenameÚwith_suffixr   )ÚconnÚcÚlegacyÚoldÚiÚcoder>   s          r   Úinit_dbrd   k   so  € Ü�?Š?œ7Ó#€DØ�‰‹€AØ‡I�Ið Bô Cà‡I�Ið 5ô 6ð 	‡K�K„MäÐ$Ñ$€FØ‡}�}‡�ð	OÜ—*’*˜V×-Ñ-°wÐ-Ð?Ó@×DÑDÀWÈbÓQˆCÞØ—	‘	ÐaØ'¬«´³Ð8ô:ä(¨ž~‘G�AØ—I‘IÐpØ+¨T´d³fÐ=ö?ñ  .ð —‘”Ü˜œ$›&˜Ð!CÄCÈÃHÀ:ÐM_Ð`ÐhlÒmð	Ø�M‰M˜&×,Ñ,¨[Ó9Ô:ð 	‡J�J…Løô ó 	OÜ�A”d“f�XÐ=¸a¸SÐAÈ×Nûð	Oûô ó 	Ùð	ús+   Á<CE0 Ä? F Å0
FÅ:FÆFÆ
F,Æ+F,z^[0-9a-f]{32,64}$c                 ój  • U R                   R                  S5      =(       d$    U R                   R                  S5      =(       d    SnU=(       d    SR                  5       nUR                  5       R	                  S5      (       a  USS R                  5       n[
        R                  U5      (       a  U$ S$ )uf   ä»Ž Authorization: Bearer <token> æˆ– X-User-Token å¤´å�–å‡ºä»¤ç‰Œï¼›æ ¼å¼�é�žæ³•/ç¼ºå¤±è¿”å›ž Noneã€‚ÚAuthorizationzX-User-TokenÚ zbearer é   N)ÚheadersrY   ÚstripÚlowerÚ
startswithÚ	_TOKEN_REÚmatch)ÚhandlerÚauths     r   Úget_uidrq   ’   s„   € à�?‰?×Ñ˜Ó/×\°7·?±?×3FÑ3FÀ~Ó3V×\ÐZ\€DØ�J�B×ÑÓ€DØ‡z�zƒ|×Ñ˜y×)Ñ)Ø�A�Bˆx�~‰~ÓˆÜ—?‘? 4×(Ñ(ˆ4Ð2¨dÐ2r   c           
      ó  • U (       a  U S S S-   OSnS[        5        SU SU SU SU 3
n[        US	S
9   [        [        S-  SSS9 nUR	                  US-   5        S S S 5        g ! , (       d  f       g = f! [
         a     g f = f)Né   z...Ú-r)   z] WATCH uid=z action=z ok=Ú Tr*   zwatch_audit.logr$   rI   rJ   Ú
)rG   r3   Úopenr9   Úwriter;   )ÚuidÚactionÚokÚdetailÚmaskÚmsgÚfs          r   Úauditr€   ›   sŒ   € Þ #ˆC��ˆG�eŠO¨€DØŒd‹fˆX�\ $  x°¨x°t¸B¸4¸qÀÀÐ
I€CÜ	ˆ#�TÒðÜ”$Ð*Ñ*¨C¸'ÒBÀaØ�G‰G�C˜$‘JÔ÷ C×BÖBûäó Ùðús/   ¶A7 ÁA&ÁA7 Á&
A4Á0A7 Á4A7 Á7
BÂBc                 ó  •  [         R                  " [        5      nUR                  SU [	        5       [	        5       45        UR                  S[	        5       U 45        UR                  5         UR                  5         g ! [         a     g f = f)NrM   z*UPDATE devices SET last_seen=? WHERE uid=?)rO   rP   rQ   rS   rG   rT   r   r;   )ry   r^   s     r   Útouch_devicer‚   ¦   sl   € ðÜ�ŠœwÓ'ˆØ�‰Ð\Ð_bÔdhÓdjÔlpÓlrÐ^sÔtØ�‰ÐAÄDÃFÈCÀ=ÔQØ�‰Œ�t—z‘z•|øÜó Ùðús   ‚A;A> Á>
BÂ
Bc                 óÐ   • [         R                  " [        5      nUR                  SU 45      R	                  5       nUR                  5         SU Vs/ s H  o3S   PM	     sn0$ s  snf )Nz?SELECT code FROM watchlists WHERE uid=? ORDER BY sort_order, idrL   r   )rO   rP   rQ   rS   Úfetchallr   )ry   r^   Úrowsr=   s       r   Ú
list_watchr†   °   sV   € Ü�?Š?œ7Ó#€DØ�<‰<ÐYÐ\_Ð[aÓb×kÑkÓm€DØ‡J�J„LØ¡DÓ)¢D˜q˜”d¡DÑ)Ð*Ð*ùÒ)s   ÁA#c                 ó:  • [         R                  " [        5      nUR                  SU 45      R	                  5       S   n UR                  SXU[        5       45        UR                  5         SnUR                  5         U$ ! [         R                   a    Sn N*f = f)Nz+SELECT COUNT(*) FROM watchlists WHERE uid=?r   zFINSERT INTO watchlists(uid,code,sort_order,created_at) VALUES(?,?,?,?)TF)	rO   rP   rQ   rS   ÚfetchonerG   rT   ÚIntegrityErrorr   )ry   rc   r^   ÚnÚaddeds        r   Ú	add_watchrŒ   ·   s‹   € Ü�?Š?œ7Ó#€DØ�‰ÐBÀSÀFÓK×TÑTÓVÐWXÑY€AðØ�‰Ð]Ø ¤D£FÐ+ô	-à�‰Œ˜t�uð 	‡J�J„LØ€Løô ×!Ñ!ó ØŠðús   Á /B ÂBÂBc                 ó¾   • [         R                  " [        5      nUR                  SX45      nUR                  nUR                  5         UR                  5         US:„  $ )uY   ä»…åˆ é™¤å±žäºŽè¯¥ uid çš„è®°å½•ï¼ˆWHERE å·²é™�å®šå½’å±žï¼‰ã€‚è¿”å›žæ˜¯å�¦çœŸçš„åˆ åˆ°ã€‚z-DELETE FROM watchlists WHERE uid=? AND code=?r   )rO   rP   rQ   rS   ÚrowcountrT   r   )ry   rc   r^   ÚcurrŠ   s        r   Ú	del_watchr�   Ä   sF   € ä�?Š?œ7Ó#€DØ
�,‰,ÐFÈÈÓ
T€CØ�‰€AØ‡K�K„M�4—:‘:”<Øˆq‰5€Lr   c                 óÈ   • [         R                  " [        5      n[        U5       H  u  p4UR	                  SX0U45        M     UR                  5         UR                  5         g )Nz9UPDATE watchlists SET sort_order=? WHERE uid=? AND code=?)rO   rP   rQ   rZ   rS   rT   r   )ry   rL   r^   rb   rc   s        r   Úorder_watchr’   Í   sH   € Ü�?Š?œ7Ó#€DÜ˜UÖ#‰ˆØ�‰ÐPÐSTÐ[_ÐR`Öañ $à‡K�K„M�4—:‘:•<r   c                 óT  • U =(       d    SR                  5       R                  5       n U (       d  gU S S S;   a,  U SS  R                  5       (       a  [        U SS  5      S:X  a  U $ U R                  5       (       a/  [        U 5      S:X  a   U S   nUS;   a  SU -   $ US;   a  S	U -   $ S
U -   $ g)Nrg   é   )ÚshÚszÚbjé   r   ©Ú0Ú3r–   ©Ú8Ú4r—   r•   )rj   rk   Úisdigitr[   )Úsr$   s     r   Únormalize_coder¡   Ô   sŸ   € Ø	
�ˆb�‰Ó×ÑÓ!€AÞØØˆˆ!€uÐ"Ó" q¨¨ u§}¡}§¡¼3¸qÀÀ¸u»:È»?ØˆØ‡y�y‡{�{”s˜1“v “{Øˆa‰DˆØ�
‹?Ø˜!‘8ˆOØ�
‹?Ø˜!‘8ˆOØ�a‰xˆØr   c                 ó(  • [         R                  R                  U [        S9n[         R                  R	                  X2S9 nUR                  5       nS S S 5        U(       a  WR                  U5      $ WR                  SS5      $ ! , (       d  f       N8= f)N©ri   ©r/   rI   Úreplace)ÚurllibÚrequestÚRequestÚUAÚurlopenÚreadÚdecode)ÚurlrK   r/   ÚreqÚrespÚraws         r   Úhttp_getr±   ä   sl   € Ü
�.‰.×
 Ñ
  ¬bÐ
 Ð
1€CÜ	�‰×	Ñ	 Ð	Ñ	5¸Ø�i‰i‹kˆ÷ 
6æ#+ˆ3�:‰:�hÓÐO°·±¸GÀYÓ1OÐO÷ 
6Õ	5ús   Á BÂ
Bc                 óP  ^• U =(       d    SR                  S5       Vs/ s H   n[        U5      (       d  M  [        U5      PM"     nnU(       d  / $ SSR                  U5      -   n [        USS9nSS Kn/ nUR                  " SU5       Hš  nUR                  S	5      n	UR                  S
5      R                  S5      mU4S jn
UR                  U	[        T5      S	:”  a  TS	   OSU
" S5      U
" S5      U
" S5      U
" S5      U
" S5      [        T5      S:”  a  TS   OSS.5        Mœ     U Vs1 s H  o»S   iM	     nnU H   nX;  d  M
  UR                  USSSS.5        M"     U$ s  snf ! [         a/  nU Vs/ s H  oS[        U5      S.PM     Os  snf sns S nA$ S nAff = fs  snf )Nrg   Ú,úhttps://qt.gtimg.cn/q=ÚgbkrJ   )rc   ÚnameÚerrorr   zv_(\w+)="([^"]*)"é   r”   Ú~c                 óB   >•  [        TU    5      $ ! [         a     gf = f)Nç        ©Úfloatr;   ©rb   r   s    €r   ÚnumÚfetch_quotes.<locals>.numù   s(   ø€ ðÜ˜Q˜q™T“{Ð"øÜó Ùðúó   ƒ ‘
�é   é   r   é   é    r   )rc   r¶   ÚpriceÚ
prev_closerw   ÚchangeÚ
change_pctrA   rc   )rc   r¶   rÆ   rÉ   )Úsplitr¡   Újoinr±   r;   r8   ÚreÚfinditerÚgroupÚappendr[   )Ú	codes_strr_   rL   r­   Útxtr>   rÌ   ÚoutÚmrc   r¿   ÚxÚgotr   s                @r   Úfetch_quotesrÖ   ë   s�  ø€ Ø)2¯°b×(?Ñ(?ÀÔ(DÓZÒ(D 1ÌÐWX×HYÓŒ^˜AÖÑ(D€EÐZÞØˆ	Ø
" S§X¡X¨e£_Ñ
4€CðIÜ�s UÑ+ˆó Ø
€CØ�[Š[Ð-¨sÖ3ˆØ�w‰w�q‹zˆØ�G‰G�A‹J×Ñ˜SÓ!ˆõ	ð
 	�
‰
ØÜ ›F Q›J�A�a’D¨BÙ˜“VÙ˜a›&Ù˜“FÙ˜"“gÙ˜b›'Ü  ›V b›[�A�b’E¨bñ	
ö 		ñ 4ñ& "Ó
"šc˜ˆVŒ9™c€CÐ
"ÛˆØ�<Ø�J‰J ¨2¸ÈÑKÖLñ ð €JùòC [øô ó IÙBGÓHÂ%¸Q B´°Q³Ô8Â%ùÔHÕHûðIüò. #s:   žE"¶E"Á%
E' Ä*F#Å'
F Å1FÅ5FÆFÆF ÆF c                 óÀ  • [        U 5      n U (       d  U S/ S.$ SU  SU S3n [        R                  " [        U5      5      nUR	                  S0 5      R	                  U 0 5      nSnS H  nXd;   d  M
  Un  O   U(       a  UR	                  U/ 5      O/ n/ nU H‰  n	 [        U	5      S	:”  a  U	S	   OS
n
[        U
5      S;  a  [        U
5      OSnUR                  [        U	S   5      [        U	S   5      [        U	S   5      [        U	S   5      [        U	S   5      U/5        M‹     XUS.$ ! [         a     MŸ  f = f! [         a  nU [        U5      / S.s SnA$ SnAff = f)u\   è…¾è®¯æ—¥Kçº¿ã€‚è¿”å›ž bars: [[date, open, close, high, low, volume], ...]ï¼ˆè¿‘160æ ¹ï¼‰ã€‚úinvalid code)rc   r·   Úbarsz9https://web.ifzq.gtimg.cn/appstock/app/kline/kline?param=r³   z,,,160ÚdataN)ÚqfqdayÚdayÚqfqweekÚweekÚqfqmonthÚmonthr   rg   )rg   rt   ÚNoner»   r   r¸   r”   rÂ   rÃ   )rc   ÚktyperÙ   )
r¡   rV   rW   r±   rY   r[   r8   r½   rÏ   r;   )rc   râ   r­   ÚdÚnodeÚkeyÚkÚarrrÙ   ÚrowÚraw_volÚvolr>   s                r   Úfetch_klinerë     sd  € ä˜$Ó€DÞØ ~¸rÑBÐBØEÀdÀVÈ1ÈUÈGÐSYÐ
Z€Cð;Ü�JŠJ”x “}Ó%ˆØ�u‰u�V˜RÓ ×$Ñ$ T¨2Ó.ˆØˆÛJˆAØ�yØ�Ùñ Kö $'ˆd�h‰h�s˜BÔ¨BˆØˆÛˆCðÜ$'¨£H¨q£L˜#˜aš&°b�Ü(+¨G«Ð<MÓ(M”e˜G”nÐSV�Ø—‘Ü˜˜A™“KÜ˜#˜a™&“M¤5¨¨Q©£=´%¸¸A¹³-ÄÀsÈ1ÁvÃÐPSðö ñ	 ð °dÑ;Ð;øô ó Úðûô ó ;Ø¤s¨1£v°rÑ:Õ:ûð;úsI   £AD: Á2(D: ÂBD)Ä D: Ä)
D7Ä3D: Ä6D7Ä7D: Ä:
EÅEÅEÅEc                 óh  • U (       a6  [        U 5      R                  5       (       a  [        [        U 5      5      S:w  a  g[        U5      R                  5       (       a  [        U5      OSnUS:X  a  SU -   $ US:X  a  SU -   $ US;   a  S	U -   $ [        U 5      S   nUS
;   a  SU -   $ US;   a  S	U -   $ SU -   $ )uJ   ç”±ä¸œè´¢ f12(6ä½�ä»£ç �) + f13(å¸‚åœºå�·) æ‹¼æˆ� sh/sz/bj æ ‡å‡†ä»£ç �ã€‚r˜   rg   Nr¸   r•   r   r–   )ét   rs   rÃ   r—   r™   rœ   )r8   rŸ   r[   Úint)r_   ÚmktrÓ   r$   s       r   Ú	_mkt_coderð   0  s¦   € æ”C˜“F—N‘N×$Ñ$¬¬C°«F«°qÓ(8ØÜ˜“H×$Ñ$×&Ñ&ŒˆCŒ¨D€AØˆAƒv�d˜Q‘hˆØˆAƒv�d˜Q‘hˆØˆKÓ  q¡˜ÜˆA‹ˆq‰	€AØˆJƒ˜t a™x˜ØˆJƒ˜t a™x˜Ø�!‰8€Or   c                 óˆ   • [        U 5      R                  5       (       a  [        U 5      OS nSSSSSS.R                  US5      $ )Nu   æ²ªu   æ·±u   äº¬)r¸   r   rí   rs   rÃ   rg   )r8   rŸ   rî   rY   )rï   rÓ   s     r   Ú	_mkt_namerò   =  s=   € Ü˜“H×$Ñ$×&Ñ&ŒˆCŒ¨D€AØ˜ U¨u¸Ñ?×CÑCÀAÀrÓJÐJr   zstock_index.jsonFr»   i`T  c                 ó  • / SQnSnU GHh  n [        5         [        R                  R                  [	        U 5      [	        U5      SSSSUSS.5      nSU S3U-   n[
        R                  " [        U5      5      nUR                  S	5      =(       d    0 R                  S
5      =(       d    / n/ n	U H¼  n
[	        U
R                  S5      =(       d    S5      R                  5       n[	        U
R                  S5      =(       d    S5      R                  5       n[        XºR                  S5      5      nU(       d  Mˆ  U(       d  M‘  U	R                  XÍ[        U
R                  S5      5      45        M¾     U	s  $    g! [         a     GM|  f = f)ux   æ‹‰ clist å�•é¡µï¼ˆå…¨å¸‚åœºï¼ŒæŒ‰ä»£ç �å�‡åº�ï¼‰ï¼Œå¤š host è½®è¯¢ã€‚è¿”å›ž [(name,code,market)] æˆ– None(å…¨å¤±è´¥)ã€‚)Úpush2Ú
push2delayz7.push2z14.push2z1m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048Ú1Ú2zf12,f13,f14)ÚpnÚpzÚpoÚnpÚflÚinvtÚfsÚfieldszhttps://z .eastmoney.com/api/qt/clist/get?rÚ   ÚdiffÚf12rg   Úf14Úf13N)Ú_em_rate_limitr¦   ÚparseÚ	urlencoder8   rV   rW   r±   rY   rj   rð   rÏ   rò   r;   )rø   rù   Úhostsrþ   ÚhostÚqsr­   rã   ÚitemsrÒ   Úitr_   r¶   rc   s                 r   Ú_clist_pager  N  sF  € â:€EØ	<€BÜˆð	ÜÔÜ—‘×'Ñ'Ü˜"“g¤S¨£W°C¸sØ 3¨b¸Mñ)ó ˆBð ˜T˜FÐ"BÐCÀbÑHˆCÜ—
’
œ8 C›=Ó)ˆAØ—U‘U˜6“]×( b×-Ñ-¨fÓ5×;¸ˆEØˆCÛ�Ü˜Ÿ™˜u›×+¨Ó,×2Ñ2Ó4�Ü˜2Ÿ6™6 %›=×.¨BÓ/×5Ñ5Ó7�Ü  §F¡F¨5£MÓ2�ß�4ŸD˜DØ—J‘J ¬I°b·f±f¸U³mÓ,DÐEÖFñ ð ŠJñ# ð( øô ó 	Ûð	ús   ŽD&E7Ä8E7Å0E7Å7
FÆFc                 óø   •  [        [        SSS9 n[        R                  " S[	        [
        R
                  " 5       5      [        U 5      U S.USS9  S S S 5        g ! , (       d  f       g = f! [         a     g f = f)NÚwrI   rJ   r¸   )ÚverÚtsrŠ   ÚlistF©Úensure_ascii)rw   Ú	_IDX_PATHrV   Údumprî   rA   r[   r;   )Úlstr   s     r   Ú_save_indexr  h  s]   € ðÜ”)˜S¨7Ò3°qÜ�IŠI˜a¤s¬4¯9ª9«;Ó'7¼cÀ#»hÐPSÑTÐVWÐfkÒl÷ 4×3Ö3ûäó Ùðús/   ‚A, ‘AAÁA, Á
A)Á%A, Á)A, Á,
A9Á8A9c                  óÖ  •  [         R                  R                  [        5      (       aŽ  [	        [        SSS9 n [
        R                  " U 5      nS S S 5        WR                  S5      =(       d    / n[        U5      S:¼  a7  [           Uq
Sq[         R                  R                  [        5      qS S S 5        gg! , (       d  f       No= f! , (       d  f       g= f! [         a     gf = f)Nr=   rI   rJ   r  é2   TF)ÚosÚpathrU   r  rw   rV   ÚloadrY   r[   Ú	_IDX_LOCKÚ_IDXÚ
_IDX_READYÚgetmtimeÚ_IDX_TSr;   )r   rã   r  s      r   Ú_load_index_diskr"  o  s±   € ðÜ�7‰7�>‰>œ)×$Ñ$Ü”i ¨wÒ7¸1Ü—I’I˜a“L�÷ 8à—%‘%˜“-×% 2ˆCÜ�3‹x˜2‹~Þà�DØ!%�Jä Ÿg™g×.Ñ.¬yÓ9�G÷ ð ð ÷ 8Õ7ú÷ ”Yð ûÜó ØØðúsF   ‚7C ¹B9Á7C Â(C
Â/C Â9
CÃC Ã

CÃC ÃC Ã
C(Ã'C(c                  óÚ  • [            [        (       a
   SSS5        gSqSSS5        [        (       a  [        [        5      O/ n  SnUS::  a�  Sn[	        S5       H)  n[        U5      nUb    O[        R                  " S5        M+     Uc  US-  nMJ  U(       d  OCU R                  U5        [            U qSSS5        US-  S:X  a  [        U 5        US-  nUS::  a  M�  [        U 5        [            U qSq
[        R                  " 5       nSSS5        [        S	[        U 5       S
3SS9  [        (       aY  [        5       / pv[         H3  nUS   U;  d  M  UR                  US   5        UR!                  U5        M5     [            UqSSS5        [            SqSSS5        g! , (       d  f       GNƒ= f! , (       d  f       GN= f! , (       d  f       N¿= f! [         aQ  n[        SUSS9  [            U q[        R                  " 5       nSSS5         SnAMì  ! , (       d  f        SnANþ= fSnAff = f! , (       d  f       N³= f! , (       d  f       g= f! [        (       ak  [        5       / pv[         H3  nUS   U;  d  M  UR                  US   5        UR!                  U5        M5     [            UqSSS5        O! , (       d  f       O= f[            SqSSS5        f ! , (       d  f       f = f= f)ur   å�Žå�°æž„å»ºå…¨å¸‚åœºç´¢å¼•ï¼šåˆ†é¡µæ‹‰å�–ã€�è¾¹æ‹‰è¾¹ç”¨ã€�å‘¨æœŸè�½ç›˜ã€‚æž„å»ºä¸­ç´¢å¼•å�³å�¯ç”¨ï¼ˆéƒ¨åˆ†ï¼‰ã€‚NTr¸   éP   rÂ   g      à?rs   r   u   [index] æž„å»ºå®Œæˆ�ï¼Œå…± u
    å�ªè‚¡ç¥¨r*   u   [index] æž„å»ºå¼‚å¸¸:F)r  Ú_IDX_BUILDINGr  r  Úranger  rA   rB   Úextendr  r  r3   r[   r;   ÚsetÚaddrÏ   )	Úaccrø   ÚpageÚ_r!  r>   ÚseenÚdeduprÔ   s	            r   Ú_build_indexr/  �  s1  € ö 
ßŠ=Ø÷ 
ˆð ˆ÷ 
÷ šŒ$ŒtŒ* "€Cð)"ØˆØ�B‹hØˆDÜ˜1–X�Ü" 2“�ØÑ#ÙÜ—
’
˜3–ñ	 ð
 ‰|Ø�a‘�ÙÞØØ�J‰J�tÔÞØ�÷ à�A‰v˜‹{Ü˜CÔ Ø�!‰GˆBð# �B�hô$ 	�CÔÞØˆDØˆJÜ—i’i“kˆG÷ ô 	Ð+¬C°«H¨:°ZÐ@ÈÒM÷ Š4Ü›% �%ß�Ø�Q‘4˜tÕ#Ø—H‘H˜Q˜q™T”N E§L¡L°¦Oñ ö Ø�÷ æØ!ˆM÷ ˆY÷[ 
Žú÷( –ú÷ �Yûô
 ó "ÜÐ% q°Ò5ÞØˆDÜ—i’i“kˆG÷ �Y�Y�Yþð"ú÷ •úç�Yû÷ Š4Ü›% �%ß�Ø�Q‘4˜tÕ#Ø—H‘H˜Q˜q™T”N E§L¡L°¦Oñ ö Ø�÷ —–úæØ!ˆM÷ �YŽYýsã   ‡F�FÁA+G Â/F-Â2'G ÃG Ã,F?ÄG Å>H.ÆH?Æ
F*Æ-
F<Æ7G Æ?
GÇ	G Ç
H+ÇH&Ç+HÈH&ÈI È
H#	ÈH&ÈI È#H&È&H+È+I È.
H<È?
IÉ'K*É;/K*Ê*J6Ê-	K*Ê6
KË K*ËKË	K*Ë
K'Ë#K*c                  ó’   • [            [        S L =(       d    [        (       + =(       a    [        sS S S 5        $ ! , (       d  f       g = fr   )r  r  r  r%  rD   r   r   Ú_index_buildingr1  ´  s"   € Þ	Ü˜�×.¤J¤×A´M÷ 
��ús	   ‡'8¸
Ac                  óÞ  • [            [        b{  [        (       aa  [        (       dV  [        (       aK  [
        R
                  " 5       [        -
  [        :”  a'  [        R                  " [        SS9R                  5         [        sSSS5        $  SSS5        [        5       (       a‚  [            [        (       aa  [        (       dV  [        (       aK  [
        R
                  " 5       [        -
  [        :”  a'  [        R                  " [        SS9R                  5         [        sSSS5        $ [        R                  " [        SS9R                  5         / $ ! , (       d  f       NÈ= f! , (       d  f       NH= f)u>   è¿”å›žå½“å‰�å�¯ç”¨ç´¢å¼• listï¼›å¿…è¦�æ—¶å�Žå�°è§¦å�‘æž„å»ºã€‚NT©ÚtargetÚdaemon)r  r  r  r%  r!  rA   Ú_IDX_TTLÚ	threadingÚThreadr/  Ústartr"  rD   r   r   Ú_ensure_indexr:  ¸  s×   € æ	ÜÑçŠz§-¢-·G²GÄÇÂÃÌwÑAVÔZbÓ@bÜ× Ò ¬¸TÑB×HÑHÔJÜ÷ 
‰Ø÷ 
ô ×ÑÞçŠz§-¢-·G²GÄÇÂÃÌwÑAVÔZbÓ@bÜ× Ò ¬¸TÑB×HÑHÔJÜ÷	 ‰Yô
 ×ÒœL°Ñ6×<Ñ<Ô>Ø€I÷ 
�ú÷ �Yús   ‡A9EÂ(A2EÅ
EÅ
E,c           
      ó¸  • U =(       d    SR                  5       n U (       d  / $ [        5       nU(       d  / $ U R                  5       n[        U 5      n/ nU HÉ  u  pgnUR                  5       n	U(       a  Xt:X  a  UR	                  SXvU45        M8  X9;   a6  X“:X  a  SOU	R                  U5      (       a  SOSn
UR	                  X§Xh45        Ms  UR                  U5      (       d,  [        U5      S:”  d  Mš  USS R                  U5      (       d  Mµ  UR	                  SXvU45        MË     UR                  S S	9  USU  VVVVs/ s H  u  p¼pÞXÍUS
.PM     snnnn$ s  snnnnf )u×   è‚¡ç¥¨å��ç§°/ä»£ç �æ¨¡ç³Šæ�œç´¢ï¼Œè¿”å›ž [{code, name, market}]ï¼ˆcode ä¸º sh/sz/bj æ ‡å‡†æ ¼å¼�ï¼‰ã€‚
å��ç§°åŒ…å�«åŒ¹é…�ï¼›å�Œæ—¶æ”¯æŒ�ä»£ç �å‰�ç¼€åŒ¹é…�ï¼ˆå�«å®Œæ•´ 6 ä½�ä»£ç �ï¼Œå¦‚ 688/688981 â†’ ç§‘åˆ›æ�¿ï¼‰ã€‚rg   r   r¸   r”   rÂ   NrÃ   c                 ó   • U S   U S   4$ )Nr   r¸   rD   )rÔ   s    r   Ú<lambda>Úsearch_stock.<locals>.<lambda>Þ  s   € ˜q ™t Q q¡T™lr   )rå   )rc   r¶   Úmarket)rj   r:  rk   r¡   rÏ   rl   r[   Úsort)ÚqÚlimitÚidxÚqlÚncÚscoredr¶   rc   r?  ÚnlÚscr,  r_   rŠ   rÓ   s                  r   Úsearch_stockrI  É  s&  € ð 
�ˆb�‰Ó€AÞØˆ	Ü
‹/€CÞØˆ	Ø	
�‰‹€BÜ	˜Ó	€BØ€FÛ!Ñˆ�FØ�Z‰Z‹\ˆÞ�$“*Ø�M‰M˜1˜d¨&Ð1Ô2±HØ‹8Ø“h‘¨"¯-©-¸×*;Ñ*;¡QÀˆBØ�M‰M˜2 TÐ2Ö3Ø�_‰_˜R× Ñ ¤S¨£Y°¥]°t¸A¸B°x×7JÑ7JÈ2×7NÓ7NØ�M‰M˜1˜d¨&Ð1Ö2ñ "ð ‡K�KÑ*€KÑ+ØBHÈÈ%Á.ÖQÂ.±J°A¸!�Q¨QÔ/Á.ÔQÐQùÕQs   Ä<E
Tr3  )r  rÚ   c                  ó²  • [         R                   " 5       n [        S   (       a  U [        S   -
  S:  a	  [        S   $  [        R                  R	                  SSS0S9n[
        R                  " [        R                  R                  USS	9R                  5       R                  S
5      5      n[        U[        5      (       a  UR                  S/ 5      OUnU Vs0 s HD  o3R                  S5      (       d  M  [        UR                  S5      5      UR                  S5      _MF     nnU[        S'   U [        S'   U$ s  snf ! [         a    [        S   s $ f = f)uX   å·¨æ½®æ·±äº¤æ‰€è‚¡ç¥¨ä¸»æ•°æ�® code->orgIdï¼ˆç¼“å­˜ 24hï¼‰ã€‚å�«åˆ›ä¸šæ�¿çœŸå®ž orgIdã€‚rÚ   r  i€Q z2https://www.cninfo.com.cn/new/data/szse_stock.jsonr   úMozilla/5.0r£   é   r¤   z	utf-8-sigÚ	stockListrc   ÚorgId)rA   Ú_CNINFO_SZ_MAPr¦   r§   r¨   rV   rW   rª   r«   r¬   Ú
isinstanceÚdictrY   r8   r;   )r   r®   rç   rÔ   rÓ   s        r   Ú_cninfo_sz_maprR  î  s$  € ä
�)Š)‹+€CÜ�f× #¬°tÑ(<Ñ"<¸uÓ"DÜ˜fÑ%Ð%ð&Ü�n‰n×$Ñ$Ø@Ø! =Ð1ð %ð 3ˆô �jŠjœŸ™×/Ñ/°¸RÐ/Ð@×EÑEÓG×NÑNÈ{Ó[Ó\ˆÜ*4°S¼$×*?Ñ*?ˆc�g‰g�k 2Ô&ÀSˆÙ9<ÓNº°AÇÁÀfÇÓ/ŒS�—‘�v“Ó §¡ w£Ò/¹ˆÐNØ!"Œ�vÑØ"Œ�tÑØˆùò Oøô ó &Ü˜fÑ%Ò%ð&ús*   ¾BE  ÃD;Ã7.D;Ä%E  Ä;E  Å EÅEc                 óÜ   • U R                  S5      (       a  SU -   $ U R                  S5      (       d  U R                  S5      (       a  SU -   $ [        5       nX;   a  X   (       a  X   $ SU -   $ )NÚ6Úgssh0r�   rž   Úgsbj0Úgssz0)rl   rR  )Ú	six_digitrÓ   s     r   Ú_cninfo_org_idrY     sn   € Ø×Ñ˜C× Ñ Ø˜Ñ"Ð"Ø×Ñ˜C× Ñ  I×$8Ñ$8¸×$=Ñ$=Ø˜Ñ"Ð"ÜÓ€AØƒ~˜!Ÿ,Ø‰|ÐØ�YÑÐr   c                 ó–   • U R                  S5      nU(       a  SUR                  S5      -   $ S[        U R                  SS5      5      -   $ )uÅ   å…¬å‘Šç›´è¾¾é“¾æŽ¥ã€‚å·¨æ½®è¯¦æƒ…é¡µ(/new/disclosure/detail?annoId=) åœ¨éƒ¨åˆ†çŽ¯å¢ƒè¿”å›ž 500 ç©ºç™½ï¼Œ
æ”¹ç”¨ static.cninfo.com.cn çš„ PDF/æ–‡ä»¶ç›´é“¾(ç”± adjunctUrl æ‹¼æŽ¥)æ‰�ç¨³å®šå�¯æ¸²æŸ“ã€‚Ú
adjunctUrlzhttps://static.cninfo.com.cn/Ú/z7https://www.cninfo.com.cn/new/disclosure/detail?annoId=ÚannouncementIdrg   )rY   Úlstripr8   )r  Úaus     r   Ú_cninfo_ann_urlr`  
  sE   € ð 
�‰�Ó	€BÞ	Ø.°·±¸3³Ñ?Ð?ØDÄsÈ2Ï6É6ÐRbÐdfÓKgÓGhÑhÐhr   c                 ó  • [        U 5      nU(       d  U S/ S.$ [        R                  " SSU5      n[        U5      nSnU SU 3S[	        U5      SSSSSSSSSS	S
.n[
        R                  R                  U5      R                  S5      nSSSSS.n [
        R                  R                  XWUS9n	[        R                  " [
        R                  R                  U	SS9R                  5       R                  S5      5      n
/ nU
R!                  S5      =(       d    /  H¸  nUR!                  S5      nSn[#        U[$        [&        45      (       a8  U(       a1  [(        R(                  R+                  US-  5      R-                  S5      nUR/                  UR!                  S5      =(       d    SUR!                  S5      =(       d    SU[1        U5      S.5        Mº     X+S.$ ! [2         a  nU[	        U5      / S.s SnA$ SnAff = f)uX   å·¨æ½®èµ„è®¯ä¸ªè‚¡æœ€æ–°å…¬å‘Šã€‚è¿”å›ž {code, announcements:[{title,type,date,url}]}ã€‚rØ   )rc   r·   Úannouncementsú^(sh|sz|bj)rg   z3https://www.cninfo.com.cn/new/hisAnnouncement/queryr³   Úfulltextrö   Útrue)ÚstockÚtabNameÚpageSizeÚpageNumÚcolumnÚcategoryÚplateÚseDateÚ	searchkeyÚsecidÚsortNameÚsortTypeÚ	isHLtitlerI   rK  z!application/x-www-form-urlencodedz(https://www.cninfo.com.cn/new/disclosurezhttps://www.cninfo.com.cn)r   úContent-TypeÚRefererÚOrigin)rÚ   ri   rL  r¤   rb  ÚannouncementTimeiè  r   ÚannouncementTitleÚannouncementTypeName)ÚtitleÚtypeÚdater­   )rc   rb  N)r¡   rÌ   ÚsubrY  r8   r¦   r  r  Úencoder§   r¨   rV   rW   rª   r«   r¬   rY   rP  rî   r½   r   Úfromtimestampr"   rÏ   r`  r;   )rc   rB  rE  ÚsixÚorgr­   ÚpayloadrÚ   ri   r®   rã   r…   r  r  Údtr>   s                   r   Úfetch_announcementsrƒ    sÖ  € ä	˜Ó	€BÞØ ~ÈÑKÐKÜ
�&Š&�  RÓ
(€CÜ
˜Ó
€CØ
?€Cà�5˜˜#˜�ØÜ˜“JØØ "¨rØ 2°Ø B°Vñ€Gô �<‰<×!Ñ! 'Ó*×1Ñ1°'Ó:€Dà#Ø;Ø=Ø-ñ	€GðBÜ�n‰n×$Ñ$ S¸WÐ$ÐEˆÜ�JŠJ”v—~‘~×-Ñ-¨c¸2Ð-Ð>×CÑCÓE×LÑLÈWÓUÓVˆØˆØ—5‘5˜Ó)×/¨RÒ/ˆBØ—‘Ð*Ó+ˆBØˆBÜ˜"œs¤E˜l×+Ñ+¶Ü×&Ñ&×4Ñ4°R¸$±YÓ?×HÑHÈÓT�Ø�K‰KØŸ™Ð 3Ó4×:¸ØŸ™Ð5Ó6×<¸"ØÜ& rÓ*ñ	ö ñ 0ð Ñ2Ð2øÜó BØ¤S¨£V¸bÑAÕAûðBús   ÂEG Ç
G>Ç%G9Ç3G>Ç9G>c           	      ó$  • [        U 5      nU(       d  U S/ S.$ [        R                  " SSU5      n[        R                  R                  0 SS_S[        U5      _SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SU_SS_SS_SS_SS_5      nSU-   n[        [        5      nUR                  SSS.5         [        R                  R                  XVS9n[        R                  " [        R                  R                  USS 9R                  5       R!                  S!5      5      nUR#                  S"5      =(       d    / n	/ n
U	S#U  H¥  nUR#                  S$5      =(       d    SnUR#                  S%5      =(       d    SS#S& nU
R%                  UR#                  S'5      =(       d    SUUR#                  S(5      =(       d    SUR#                  S)5      =(       d    SU(       a  S*U-  OSS+.5        M§     X*S,.$ ! [&         a  nU[        U5      / S.s S#nA$ S#nAff = f)-uX   ä¸œæ–¹è´¢å¯Œä¸ªè‚¡ç ”æŠ¥åˆ—è¡¨ã€‚è¿”å›ž {code, reports:[{title,date,org,rating,url}]}ã€‚rØ   )rc   r·   Úreportsrc  rg   ÚindustryCodeÚ*rh  ÚindustryÚratingÚratingChangeÚ	beginTimez
2000-01-01ÚendTimez
2030-01-01ÚpageNorö   rÿ   ÚqTyperš   ÚorgCoderc   ÚrcodeÚpri  Ú
pageNumberz,https://reportapi.eastmoney.com/report/list?zhttps://data.eastmoney.com/zhttps://data.eastmoney.com)rt  ru  r£   rL  r¤   rI   rÚ   NÚinfoCodeÚpublishDateé
   ry  ÚorgSNameÚemRatingNamez%https://pdf.dfcfw.com/pdf/H3_%s_1.pdf)ry  r{  r€  r‰  r­   )rc   r…  )r¡   rÌ   r|  r¦   r  r  r8   rQ  r©   Úupdater§   r¨   rV   rW   rª   r«   r¬   rY   rÏ   r;   )rc   rB  rE  r  r	  r­   Úhr®   rã   r…   rÒ   r  Úicr‚  r>   s                  r   Úfetch_reportsr›  >  sO  € ä	˜Ó	€BÞØ ~À"ÑEÐEÜ
�&Š&�  RÓ
(€CÜ	�‰×	Ñ	ð !Ø˜ð!Ø'¬¨U«ð!Ø5?Àð!à�#ð!à% sð!ð 	�\ð!ð $-¨lð!ð 	�#ð	!ð   ð	!ð &-¨cð	!ð
 	�2ð!ð
 ˜sð!ð
 %,¨Rð!ð 	ˆSð!ð ˜Sð!ð #/°ð!ó 
€Bð 9¸2Ñ
=€CÜŒR‹€AØ‡H�HÐ6ÐB^Ñ_Ô`ð<Ü�n‰n×$Ñ$ SÐ$Ð4ˆÜ�JŠJ”v—~‘~×-Ñ-¨c¸2Ð-Ð>×CÑCÓE×LÑLÈWÓUÓVˆØ—‘�f“×# ˆØˆØ�v˜“,ˆBØ—‘˜
Ó#×) rˆBØ—&‘&˜Ó'×-¨2¨s°Ð3ˆBØ�J‰JØŸ™ ›×.¨BØØ—v‘v˜jÓ)×/¨RØŸ&™& Ó0×6°BÞIKÐ?À"ÒDÐQSñö ñ ð Ñ+Ð+øÜó <Ø¤S¨£V¸Ñ;Õ;ûð<ús   Â2D9G, Ç,
HÇ6H
ÈHÈ
Hc                 óô   • [            [        R                  " 5       [        S   -
  nX:  a  [        R                  " X-
  5        [        R                  " 5       [        S'   SSS5        g! , (       d  f       g= f)uX   ä¸œè´¢ç³»æŽ¥å�£é£ŽæŽ§ï¼šä¿�è¯�ç›¸é‚»è¯·æ±‚æœ€å°�é—´éš”ï¼Œé�¿å…�å�• IP è¢«ä¸´æ—¶é™�æµ�ã€‚r   N)Ú_EM_LOCKrA   Ú_EM_LASTrB   )ÚgapÚelapseds     r   r  r  g  sE   € æ	Ü—)’)“+¤¨¡Ñ+ˆØ‹=Ü�JŠJ�s‘}Ô%Ü—i’i“kŒ�‰÷	 
�Žús   ‡AA)Á)
A7c                 óü  • [        U 5      nU(       d  U S/ S.$ [        R                  " SSU5      n[        R                  " SUS/SSSSSSS	[        U5      SSS
.0S.SS9nS[        R                  R                  SUS.5      -   n[        [        5      ofR                  SS05         [        5         [        R                  R                  XVS9n[        R                  R                  USS9R!                  5       R#                  S5      nUR%                  S5      o˜R'                  S5      n
U	S:  d  X©::  a  U/ S.$ [        R(                  " X‰S	-   U
 5      nUR+                  S5      =(       d    0 R+                  S5      =(       d    / n/ nUSU  HÁ  nUR-                  [        R                  " SSUR+                  S5      =(       d    S5      [        R                  " SSUR+                  S5      =(       d    S5      SS  UR+                  S!5      =(       d    SUR+                  S"5      =(       d    SUR+                  S#5      =(       d    SS$.5        MÃ     X-S.$ ! [.         a  nU[        U5      / S.s SnA$ SnAff = f)%u—   ä¸œæ–¹è´¢å¯Œä¸ªè‚¡æ–°é—»ï¼ˆsearch-api-web JSONPï¼‰ã€‚è¿”å›ž {code, news:[{title,content,time,source,url}]}ã€‚æ¯�æ¬¡å¤�ç›˜å®žæ—¶æ‹‰å�–ï¼Œå¤©ç„¶æœ€æ–°ã€‚rØ   )rc   r·   Únewsrc  rg   ÚcmsArticleWebOldÚwebÚcurrÚdefaultr¸   )ÚsearchScoper@  Ú	pageIndexrh  ÚpreTagÚpostTag)ry   Úkeywordrz  ÚclientÚ
clientTypeÚclientVersionÚparam)r³   Ú:)Ú
separatorsz2https://search-api-web.eastmoney.com/search/jsonp?ÚjQuery_news)Úcbr¯  rt  zhttps://so.eastmoney.com/r£   r
   r¤   rI   Ú(Ú)r   )rc   r¢  ÚresultNz<[^>]+>ry  ÚcontentéÈ   r{  Ú	mediaNamer­   )ry  r·  rA   Úsourcer­   )r¡   rÌ   r|  rV   Údumpsr8   r¦   r  r  rQ  r©   r˜  r  r§   r¨   rª   r«   r¬   ÚfindÚrfindrW   rY   rÏ   r;   )rc   rB  rE  r  Úinnerr­   ri   r®   r.   r    r>   rã   Úarticlesr…   r$   Úexs                   r   Úfetch_stock_newsrÁ  p  s.  € ä	˜Ó	€BÞØ ~¸rÑBÐBÜ
�&Š&�  RÓ
(€CÜ�JŠJØ˜cÐ,>Ð+?Ø u¸vØ$°iÈØ ¬c°%«jÀBÐSUñ'Wð Xñð
 ñ€Eð ?ÄÇÁ×AWÑAWÐ_lÐw|ÑX}ÓA~Ñ
~€CÜ”2‹h€GŸ™¨	Ð3NÐ'OÔPð:ÜÔÜ�n‰n×$Ñ$ SÐ$Ð:ˆÜ�~‰~×%Ñ% c°2Ð%Ð6×;Ñ;Ó=×DÑDÀWÓMˆØ�I‰I�c‹Nˆ§
¡
¨3£˜AØˆq‹5�A“FØ¨Ñ+Ð+Ü�JŠJ�t˜a™C �{Ó#ˆà—E‘E˜(“O×) r×.Ñ.Ð/AÓB×HÀbˆØˆØ˜&˜5Ó!ˆAØ�K‰KÜŸš 
¨B°·±°g³×0DÀ"ÓEÜŸ6š6 *¨b°!·%±%¸	Ó2B×2HÀbÓIÈ$È3ÐOØŸ™˜f›×+¨ØŸ%™% Ó,×2°Ø—u‘u˜U“|×) rñö ñ "ð Ñ)Ð)øÜó :Ø¤S¨£W°bÑ9Õ9ûð:ús&   Â(BI Ä;DI É
I;É"I6É0I;É6I;c                 óV  • S[         R                  R                  SSSS[        U 5      [        [        R
                  " 5       5      S.5      -   n[        [        5      o"R                  SS05         [        5         [         R                  R                  XS	9n[        R                  " [         R                  R                  US
S9R                  5       R!                  S5      5      n/ nUR#                  S5      =(       d    0 R#                  S5      =(       d    /  Hc  nUR%                  UR#                  S5      =(       d    SUR#                  S5      =(       d    SSS UR#                  S5      =(       d    SS.5        Me     SU0$ ! [&         a  n[        U5      / S.s SnA$ SnAff = f)u›   ä¸œæ–¹è´¢å¯Œå…¨ç�ƒè´¢ç»�èµ„è®¯ï¼ˆ7x24 æ»šåŠ¨å¿«è®¯ï¼Œè´¢è�”ç¤¾æ›¿ä»£ï¼‰ã€‚è¿”å›ž {news:[{title,summary,time}]}ã€‚æ¯�æ¬¡å¤�ç›˜å®žæ—¶æ‹‰å�–ï¼Œå¤©ç„¶æœ€æ–°ã€‚z:https://np-weblist.eastmoney.com/comm/web/getFastNewsList?r¤  Úweb_724Ú102rg   )r¬  ÚbizÚ
fastColumnÚsortEndrh  Ú	req_tracert  zhttps://kuaixun.eastmoney.com/r£   r•  r¤   rI   rÚ   ÚfastNewsListry  ÚsummaryNr¸  ÚshowTime)ry  rÊ  rA   r¢  )r·   r¢  )r¦   r  r  r8   ÚuuidÚuuid4rQ  r©   r˜  r  r§   r¨   rV   rW   rª   r«   r¬   rY   rÏ   r;   )rB  r­   ri   r®   rã   r…   r  rÀ  s           r   Úfetch_macro_newsrÎ  –  sX  € à
FÌÏÉ×I_ÑI_Ø 	¸Ø¤3 u£:¼CÄÇ
Â
ÃÓ<Mñaó Jñ €Cô ”2‹h€GŸ™¨	Ð3SÐ'TÔUð.ÜÔÜ�n‰n×$Ñ$ SÐ$Ð:ˆÜ�JŠJ”v—~‘~×-Ñ-¨c¸2Ð-Ð>×CÑCÓE×LÑLÈWÓUÓVˆØˆØ—5‘5˜“=×& B×+Ñ+¨NÓ;×A¸rÒAˆBØ�K‰KØŸ™ ›×.¨BØŸF™F 9Ó-×3°°T°cÐ:ØŸ™˜zÓ*×0¨bñö ñ Bð ˜ˆ~ÐøÜó .Ü˜R›¨"Ñ-Õ-ûð.ús   Á1DF Æ
F(ÆF#ÆF(Æ#F(c                 ó<   • U S:¼  a  gU S:¼  a  gU S::  a  gU S::  a  gg	)
Né(   u   å¼ºå¤šr
   õ   å¤šéØÿÿÿu   å¼ºç©ºéñÿÿÿõ   ç©ºõ   ä¸­æ€§rD   ©r    s    r   Ú_vlabelr×  ´  s)   € ØˆBƒw�xØˆBƒw�uØˆCƒx˜ØˆCƒx˜Ør   c                 ó    • U S:”  a  gU S:  a  gg)Nr
   rÑ  rÓ  rÔ  rÕ  rD   rÖ  s    r   Ú	_dir_wordrÙ  »  s   € Øˆ2ƒv�eØˆ3ƒw�uØr   c                 óª   •  [        U 5      n [        U 5      nUS:¼  a	  U S-  S S3$ US:¼  a	  U S-  S S3$ U S $ ! [         a    [        U 5      s $ f = f)Nç    „×—Aú.2fu   äº¿g     ˆÃ@u   ä¸‡ú.0f)r½   r;   r8   Úabs)Úvr$   s     r   Ú_fmt_yirà  À  sq   € ðÜ�!‹Hˆô 	ˆA‹€AØˆCƒx˜1˜S™5 ˜+ SÐ)Ð)ØˆCƒx˜1˜S™5 ˜+ SÐ)Ð)Ø�ˆWÐøô ó Ü�1‹vŠðús   ‚: ºAÁAc                 óä   • U (       d  gS HQ  n [         R                   R                  X5      n[         R                   R                  5       U-
  R                  U:*  s  $    g! [         a     Mc  f = f)uX   åˆ¤æ–­æ—¶é—´å­—ç¬¦ä¸²æ˜¯å�¦åœ¨æœ€è¿‘ days å¤©å†…ï¼ˆå…¼å®¹ 'YYYY-MM-DD' / å¸¦æ—¶åˆ†ï¼‰ã€‚F)r0   z%Y-%m-%d %H:%Mr   )r   Ústrptimer   Údaysr;   )r    rã  Úfmtr‚  s       r   Ú_within_daysrå  Ê  sl   € æØÛBˆð	Ü×"Ñ"×+Ñ+¨AÓ3ˆBÜ×%Ñ%×)Ñ)Ó+¨bÑ0×6Ñ6¸$Ñ>Ò>ñ Cð øô ó 	Úð	ús   �AA!Á!
A/Á.A/c                 óP   • [        U 5      U:  d  US::  a  g [        X* S  5      U-  $ )Nr   )r[   Úsum)rç   rŠ   s     r   Ú_ma_pyrè  Ö  s*   € Ü
ˆ3ƒx�!ƒ|�q˜A“v dÜˆs�2�3ˆx‹=˜1ÑÐr   c                 ó”  • [        U 5      S:  a  gSnU S   /n[        S[        U 5      5       H%  nUR                  X   U-  US   SU-
  -  -   5        M'     SnU S   /n[        S[        U 5      5       H%  nUR                  X   U-  US   SU-
  -  -   5        M'     [        [        U 5      5       Vs/ s H  o2U   XC   -
  PM     nnSnUS   /n[        S[        U5      5       H%  nUR                  XS   U-  US   SU-
  -  -   5        M'     [        [        U5      5       Vs/ s H  o5U   Xc   -
  S	-  PM     nnXVU4$ s  snf s  snf )
Né   ©NNNg;±;±Ã?r   r¸   éÿÿÿÿg;±;±³?gš™™™™™É?r”   )r[   r&  rÏ   )r   ræ   Úefrb   ÚesÚdifÚdeaÚbars           r   Ú_macd_pyrò  Ú  sL  € Ü
ˆ5ƒz�BƒÐ/Ø€AØ
�‰(ˆ€BÜ�1”c˜%“jÖ!ˆØ
�	‰	�%‘(˜1‘*˜r "™v q¨¡s™|Ñ+Ö,ñ "à€AØ
�‰(ˆ€BÜ�1”c˜%“jÖ!ˆØ
�	‰	�%‘(˜1‘*˜r "™v q¨¡s™|Ñ+Ö,ñ "ä %¤c¨%£jÔ 1Ó
2Ò 1˜1ˆa‰5�‘Œ;Ñ 1€CÐ
2Ø€AØˆq‰6ˆ(€CÜ�1”c˜#“hÖˆØ�
‰
�3‘6˜!‘8˜c "™g q¨¡s™mÑ+Ö,ñ  ä&+¬C°«H¤oÓ
6¢o �‰F�3‘6‰M˜1Ô¡o€CÐ
6Ø�Sˆ=Ðùò 3ùò
 7s   Â3E Ä$Ec                 óÒ  • [        U5      U:  a  g/ n[        [        U5      5       Ho  nXSS-
  :  a  UR                  S 5        M  [        XU-
  S-   US-    5      n[	        XU-
  S-   US-    5      nUR                  Xg:X  a  SOX%   U-
  Xg-
  -  S-  5        Mq     S/nS/n	[        [        U5      5       Hw  nXE   c*  UR                  US   5        U	R                  U	S   5        M2  UR                  US   S-  S-  XE   S-  -   5        U	R                  U	S   S-  S-  US   S-  -   5        My     [        [        U5      5       Vs/ s H  nSX…   -  SX•   -  -
  PM     n
nX‰U
4$ s  snf )Nrë  r¸   g      I@éd   rì  r”   rÂ   )r[   r&  rÏ   ÚmaxÚmin)ÚhighÚlowr   rŠ   Úrsvrb   ÚhhÚllÚKÚDÚJs              r   Ú_kdj_pyrÿ  ì  sa  € Ü
ˆ5ƒz�Aƒ~Ð.Ø
€CÜ”3�u“:ÖˆØ�‰s‹7Ø�J‰J�tÔ™hÜ�˜‘c˜!‘e˜A˜a™C�Ó!ˆ¬¨C°!±°A±°a¸±c¨NÓ(; 2Ø�
‰
˜2›8‘4¨%©(°2©+¸¹Ñ)>¸sÑ)BÖCñ	 ð
 
ˆ€A�T�F�Ü”3�s“8Ž_ˆØ‰6‰>Ø�H‰H�Q�r‘UŒO˜QŸX™X a¨¡eœ_©hØ	�‰��2‘�q‘˜‘˜S™V A™XÑ%Ô&Ø	�‰��2‘�q‘˜‘˜Q˜r™U 1™WÑ$Ö%ñ	 ô
 !&¤c¨!£f¤Ó.¢˜1ˆˆ1‰4‰��!‘$‘Œ¡€AÐ.Ø�ˆ7€Nùò 	/s   ÅE$c                 ó@  • [         R                  R                  S5      nU(       d  U $  [        R                  " XS.SS9R                  S5      n[        R                  R                  X#SS0SS	9n[        R                  R                  US
S9 n[        R                  " UR                  5       R                  S5      5      nSSS5        WR                  S5      =(       d    UR                  S5      =(       d    U $ ! , (       d  f       N@= f! [         a    U s $ f = f)uÙ   å�¯é€‰ LLM æ¶¦è‰²ï¼šè‹¥ Pi ä¸Šè®¾ç½®äº† REVIEW_LLM_URLï¼Œåˆ™æŠŠè§„åˆ™æ–‡æœ¬äº¤ç»™è¯¥ç«¯ç‚¹æ¶¦è‰²ï¼›
é»˜è®¤æœªè®¾ç½®ï¼Œç›´æŽ¥è¿”å›žè§„åˆ™æ–‡æœ¬ï¼ˆæ··å�ˆç‰ˆçš„â€œè§„åˆ™ç®—æ•°â€�éƒ¨åˆ†å§‹ç»ˆç”Ÿæ•ˆã€�é›¶å¤–éƒ¨ä¾�èµ–ï¼‰ã€‚ÚREVIEW_LLM_URL)Úcontextr.   Fr  rI   rs  zapplication/jsonÚPOST)rÚ   ri   Úmethodrs   r¤   Nr¶  r.   )r  ÚenvironrY   rV   r»  r}  r¦   r§   r¨   rª   rW   r«   r¬   r;   )Ú	rule_textr  r­   r�  r®   r=   rã   s          r   Ú_llm_polishr  ý  sá   € ô �*‰*�.‰.Ð)Ó
*€CÞØÐðÜ—*’*¨ÑDÐSXÑY×`Ñ`ÐahÓiˆÜ�n‰n×$Ñ$ SÀÐQcÐ@dÐmsÐ$ÐtˆÜ�^‰^×#Ñ# C°Ð#Ñ3°qÜ—
’
˜1Ÿ6™6›8Ÿ?™?¨7Ó3Ó4ˆA÷ 4à—‘�h“×= 1§5¡5¨£=×=°IÐ>÷ 4Õ3ûô ó ØÒðús*   ªA%D Â4C=Ã9D Ã=
DÄD ÄDÄDc                 óÀ   • [        U5      nSU  SU SUS S3nU(       a  SR                  U5      OSnSnUS	:¼  a  S
nOUS::  a  SnOSUs=:  a  S:  a  O  OSnXE-   U-   $ )Nu   ã€�u   ã€‘ç»¼å�ˆåˆ¤æ–­ã€Œu   ã€�ï¼ˆç»¼å�ˆå¾—åˆ† Ú+u   ï¼‰ã€‚u   ï¼›u   æš‚æ— æ˜Žæ˜¾å¤šç©ºä¿¡å�·ã€‚rg   rÐ  u1    å¤šé¡¹ä¿¡å�·å…±æŒ¯å�‘ä¸Šï¼Œå€¾å�‘é¡ºåŠ¿çœ‹å¤šã€‚rÒ  u4    å¤šé¡¹ä¿¡å�·å…±æŒ¯å�‘ä¸‹ï¼Œéœ€é˜²èŒƒç»§ç»­ä¸‹æŽ¢ã€‚rÓ  r
   u1    ä¿¡å�·åˆ†æ­§ï¼Œå»ºè®®è§‚æœ›ç­‰å¾…æ–¹å�‘ç¡®è®¤ã€‚)r×  rË   )ÚroleÚfactsÚscorerß  ÚheadÚbodyÚtails          r   Ú_rule_narrativer    sx   € Ü�‹€AØ��Ð(¨¨Ð+>¸uÀQ¸iÀvÐN€DÞ %ˆ5�:‰:�eÔÐ+H€DØ€DØ�ƒ{ØB‰Ø	�#‹ØE‰Ø	ˆuÕ	�rÖ	ØBˆØ‰;˜ÑÐr   c                 ó4   • [        [        XU5      XUS.5      $ )N©r
  r  r  )r  r  r  s      r   Ú_polishr    s   € Ü” t°EÓ:ÀTÐdiÑ<jÓkÐkr   c                 óþ  • U (       a  [        U 5      S:  a  SSS/SS.$ U  Vs/ s H  o"S   PM	     nnU  Vs/ s H  o"S   PM	     nnU  Vs/ s H  o"S	   PM	     nnU  Vs/ s H  o"S
   PM	     nn[        US
5      n[        US5      n[        US5      n	US   n
/ nSnS XxU	4;  ak  X§s=:”  a  Us=:”  a  U	:”  a  O  OUR                  S5        US-  nO>X§s=:  a  Us=:  a  U	:  a  O  OUR                  S5        US-  nOUR                  S5        [        U5      S:”  aZ  US   (       aP  X£S   -  S-
  S-  nUS
:”  a  UR                  SUS S35        US-  nO!US:  a  UR                  SUS S35        US-  n[        U5      S:”  aZ  US   (       aP  X£S   -  S-
  S-  nUS:”  a  UR                  SUS S 35        US!-  nO!US":  a  UR                  S#US S$35        US!-  n[        U5      u  nnnU(       ax  [        U5      S:¼  ai  US   US   :”  a   US   S:”  a  UR                  S%5        US-  nO=US   US   :  a   US   S:  a  UR                  S&5        US-  nOUR                  S'5        [	        XEU5      u  nnnU(       a(  US   S(:”  a  UR                  S)US   S* S+35        US
-  nO.U(       a'  US   S:  a  UR                  S)US   S* S,35        US
-  n[        US5      nU(       a  US   U-  OSnUS-:”  a  UR                  S.US S/35        US
-  nO!US0:  a  UR                  S1US S235        US-  n[        S3[        SU5      5      n[        U5      XË[        S4X¼5      S.$ s  snf s  snf s  snf s  snf )5Nr   rÕ  r   u1   Kçº¿æ•°æ�®ä¸�è¶³ï¼Œæ— æ³•ç»™å‡ºæœ‰æ•ˆæŠ€æœ¯ç ”åˆ¤u6   æŠ€æœ¯é�¢æ•°æ�®ä¸�è¶³ï¼Œæš‚æ— æ³•ç»™å‡ºæœ‰æ•ˆç ”åˆ¤ã€‚©Úverdictr  r  Ú	narrativer”   rÂ   rÃ   r   r•  rL  rì  u3   ä»·æ ¼ä½�äºŽ MA5>MA10>MA20 ä¹‹ä¸Šï¼Œå‘ˆå¤šå¤´æŽ’åˆ—é   u3   ä»·æ ¼ä½�äºŽ MA5<MA10<MA20 ä¹‹ä¸‹ï¼Œå‘ˆç©ºå¤´æŽ’åˆ—u$   å�‡çº¿äº¤é”™ï¼Œæ— æ˜Žç¡®æŽ’åˆ—æ–¹å�‘é   iëÿÿÿr¸   rô  u   è¿‘20æ—¥æ¶¨å¹… +ú.1fu   %ï¼ŒçŸ­æœŸå��å¼ºéûÿÿÿu   è¿‘20æ—¥è·Œå¹… u   %ï¼ŒçŸ­æœŸå��å¼±é=   iÃÿÿÿr
   u   è¿‘60æ—¥æ¶¨å¹… +u   %ï¼Œä¸­æœŸä¸Šè¡Œrs   rÓ  u   è¿‘60æ—¥è·Œå¹… u   %ï¼Œä¸­æœŸä¸‹è¡Œu#   MACD é‡‘å�‰å�Žçº¢æŸ±ï¼ŒåŠ¨èƒ½è½¬å¼ºu#   MACD æ­»å�‰å�Žç»¿æŸ±ï¼ŒåŠ¨èƒ½è½¬å¼±u    MACD è¿›é€€äº¤é”™ï¼ŒåŠ¨èƒ½ä¸­æ€§r$  zKDJ J=rÝ  u%    è¿›å…¥è¶…ä¹°åŒºï¼Œæ³¨æ„�çŸ­çº¿å›žæ’¤u%    è¿›å…¥è¶…å�–åŒºï¼Œå­˜åœ¨å��å¼¹éœ€æ±‚g      ø?u   é‡�èƒ½æ”¾å¤§è‡³20æ—¥å�‡é‡�çš„ u    å€�ï¼Œèµ„é‡‘æ´»è·ƒç333333ã?u   é‡�èƒ½è�Žç¼©è‡³20æ—¥å�‡é‡�çš„ u    å€�ï¼Œäº¤æŠ•æ¸…æ·¡éœÿÿÿu	   æŠ€æœ¯é�¢)	r[   rè  rÏ   rò  rÿ  rõ  rö  r×  r  )rÙ   Úquoter%   r   r÷  rø  rê   Úma5Úma10Úma20Úlastr  r  Úr20Úr60rï  Úderñ  rü  rý  rþ  Úv20Úvrs                          r   Ú_analyst_technicalr)    sÔ  € Þ”3�t“9˜r“>Ø#¨aÐ;nÐ:oð  wñ  xð  	xÙÓ š4�aˆqŒT™4€EÐ ¹Ó)=º°1¨A¬$¹ $Ð)=ÑTXÓEYÒTXÈqÈÄdÑTX¸sÐEYÑptÓauÒptÐklÐdeÔbfÑptÐ[^ÐauÜ
�˜Ó
€C¤6¨%°Ó#4˜D¼VÀEÈ2Ó=N°dØ�‰9€D˜b�e¨! %Ø�C˜tÐ$Ó$ØÕ#˜Õ#˜tÖ#Ø�L‰LÐNÔOÐQVÐZ\ÑQ\ÑQVØÕ%˜$Õ% Ö%Ø�L‰LÐNÔOÐQVÐZ\ÑQ\ÑQVà�L‰LÐ?Ô@Ü
ˆ5ƒz�Bƒ˜5 Ÿ:Ø˜#‘J‰˜qÑ  #Ñ%ˆØ�‹7�E—L‘LÐ#3°C¸°9Ð<LÐ!MÔNÐPUÐY[ÑP[ÑPUØ�2‹X�u—|‘| o°c¸#°YÐ>NÐ$OÔPÐRWÐ[]ÑR]ÐRWÜ
ˆ5ƒz�Bƒ˜5 Ÿ:Ø˜#‘J‰˜qÑ  #Ñ%ˆØ�‹8�U—\‘\Ð$4°S¸°IÐ=MÐ"NÔOÐQVÐZ[ÑQ[ÑQVØ�3‹Y˜Ÿ™ °s¸3°iÐ?OÐ%PÔQÐSXÐ\]ÑS]ÐSXÜ˜E“?�L€CˆˆSÞ
Œs�3‹x˜1‹}Øˆr‰7�R˜‘VÓ  B¡¨!£Ø�L‰LÐ>Ô?ÀÈ"ÁÁØ�‰W�r˜"‘vÓ # b¡'¨A£+Ø�L‰LÐ>Ô?ÀÈ"ÁÁà�L‰LÐ;Ô<Ü�d Ó'�G€A€qˆ!ÞˆQˆr‰U�R‹ZØ�‰�v˜a ™e C˜[Ð(MÐNÔOÐQVÐZ[ÑQ[ÑQVÞ	
ˆq�‰u�r‹zØ�‰�v˜a ™e C˜[Ð(MÐNÔOÐQVÐZ[ÑQ[ÐQVÜ
��b‹/€CÞˆ#ˆb‰'�#Š+ 1€BØ	ˆCƒxØ�‰Ð5°b¸°XÐ=PÐQÔRÐTYÐ]^ÑT^ÑTYØ	ˆc‹Ø�‰Ð5°b¸°XÐ=PÐQÔRÐTYÐ]^ÑT^ÐTYÜ�”c˜#˜u“oÓ&€EÜ˜u“~°ÔT[Ð\gÐinÓTvÑwÐwùòM !ùÒ)=ùÒEYùÒaus   £M+·M0ÁM5ÁM:c                 óN  • / nSnSnU(       a'  US   (       a  US   R                  S5      =(       d    SnUS:”  a  UR                  SUS S35        US-  nOUUS:”  a  UR                  SUS S	35        US
-  nO3US:  a  UR                  SUS S35        US
-  nOUR                  S5        U (       a  U  Vs/ s H  ofS   PM	     snO/ n[        U5      S:”  a^  US   (       aT  US   US   -  S-
  S-  nUS
:”  a  UR                  SUS S35        US-  nO!US:  a  UR                  SUS S35        US-  n[        U5      S:”  a–   SS Kn	[	        S[        U5      5       V
s/ s H  o§U
   XzS-
     -  S-
  PM     sn
SS  nU(       a  U	R                  U5      S-  OSnUS:”  a  UR                  SUS S35        US-  nOUS :  a  UR                  S!US S"35        U(       aé  UR                  S#5      (       aÓ  UR                  S$5      nUR                  S%5      nUbV  US:”  a$  UR                  S&[        U5       S'35        US(-  nO,UR                  S)[        [        U5      5       S*35        US(-  nUbT  US:”  a#  UR                  S+[        U5       35        US-  nO=UR                  S,[        [        U5      5       35        US-  nOUR                  S-5        [        S.[        SU5      5      n[        U5      XC[        S/X45      S0.$ s  snf s  sn
f ! [         a     GNGf = f)1Nr   rÉ   rÂ   u   å½“æ—¥å¤§æ¶¨ +r  u   %ï¼Œå¸‚åœºæƒ…ç»ªäº¢å¥‹é   u   å½“æ—¥ä¸Šæ¶¨ +u   %ï¼Œæƒ…ç»ªå��æš–rs   u   å½“æ—¥ä¸‹è·Œ u   %ï¼Œæƒ…ç»ªå��å†·u   å½“æ—¥å¹³ç›˜ï¼Œæƒ…ç»ªè§‚æœ›r”   r˜   iúÿÿÿrì  r¸   rô  u	   è¿‘5æ—¥ +u   %ï¼Œèµšé’±æ•ˆåº”å¼ºé   iøÿÿÿu   è¿‘5æ—¥ u   %ï¼Œäº�é’±æ•ˆåº”æ˜Žæ˜¾r  iìÿÿÿg      @u   è¿‘20æ—¥æ—¥æ”¶ç›Šæ³¢åŠ¨ u   %ï¼Œåˆ†æ­§å‰§çƒˆã€�æƒ…ç»ªä¸�ç¨³r   g333333ó?u   è¿‘20æ—¥æ³¢åŠ¨ä»… u   %ï¼Œæƒ…ç»ªåŽ‹æŠ‘å¾…å�˜r{   Únet_main_todayÚnet_mainu   å½“æ—¥ä¸»åŠ›å‡€æµ�å…¥ u   ï¼Œèµ„é‡‘çœ‹å¥½r•  u   å½“æ—¥ä¸»åŠ›å‡€æµ�å‡º u   ï¼Œèµ„é‡‘æ’¤ç¦»u   è¿‘5æ—¥ä¸»åŠ›ç´¯è®¡å‡€æµ�å…¥ u   è¿‘5æ—¥ä¸»åŠ›ç´¯è®¡å‡€æµ�å‡º u0   èµ„é‡‘æµ�æ•°æ�®ç¼ºå¤±ï¼Œæƒ…ç»ªä»…ä»¥ä»·é‡�æŽ¨æ–­r  u	   æƒ…ç»ªé�¢r  )rY   rÏ   r[   Ú
statisticsr&  Úpstdevr;   rà  rÞ  rõ  rö  r×  r  )rÙ   r  Ú	moneyflowr  r  Úchgr%   r   Úr5r/  rb   ÚretsÚsdÚtodayÚmfs                  r   Ú_analyst_sentimentr8  G  s<  € Ø€E˜�Ø
€CÞ��q—Ø�A‰h�l‰l˜<Ó(×-¨AˆØ
ˆQƒw�—‘˜~¨c°#¨YÐ6LÐMÔNÐPUÐY[ÑP[ÑPUØ	ˆq‹�%—,‘, °°C¨yÐ8HÐIÔJÈEÐUVÉJÉEØ	ˆq‹�%—,‘, ¨s°3¨iÐ7GÐHÔIÈ5ÐTUÉ:É5Ø
�,‰,Ð4Ô
5Þ$(™4Ó š4�aˆqŒT™4Ò ¨b€EÜ
ˆ5ƒz�Aƒ~˜% Ÿ)Ø�B‰i˜˜b™	Ñ! !Ñ# SÑ(ˆØ�‹6�5—<‘< )¨B¨s¨8Ð3FÐ GÔHÈ%ÐSUÉ+É%Ø�"‹W�e—l‘l X¨b°¨XÐ5KÐ#LÔMÈuÐXZÉ{ÈuÜ
ˆ5ƒz�Bƒð	ÛÜ38¸¼CÀ»JÔ3GÓHÒ3G¨a˜!‘H˜U Q¡3™ZÑ'¨Ô)Ñ3GÑHÈÈÐNˆDÞ04�×"Ñ" 4Ó(¨Ò,¸!ˆBØ�C‹x˜Ÿ™Ð(@ÀÀCÀÐHgÐ&hÔiÐkpÐtuÑkuÑkpØ�c“˜5Ÿ<™<Ð*<¸RÀ¸HÐDZÐ([Ô\ö �Y—]‘] 4×(Ñ(Ø—‘Ð.Ó/ˆØ�]‰]˜:Ó&ˆØÑØ�q‹y˜%Ÿ,™,Ð)?ÄÈÃÐ?OÈÐ'_Ô`ÐbgÐkmÑbmÑbgØ—,‘,Ð!7¼ÄÀEÃ
Ó8KÐ7LÈOÐ\Ô]Ð_dÐhjÑ_jÐ_dØ‰>Ø�A‹v�u—|‘|Ð&CÄGÈBÃKÀ=Ð$QÔRÐTYÐ]^ÑT^ÑTYØ—,‘,Ð!>¼wÄsÈ2ÃwÓ?OÐ>PÐQÔRÐTYÐ]^ÑT^ÐTYøà�‰ÐGÔHÜ�”c˜#˜u“oÓ&€EÜ˜u“~°ÔT[Ð\gÐinÓTvÑwÐwùò5 !ùò Iøô ó 	Úð	ús1   Â7LÅL Å"LÅ;AL Ç L ÌL Ì
L$Ì#L$)õ   é¢„å¢žu   ä¸­æ ‡õ   å›žè´­õ   å¢žæŒ�õ   åˆ†çº¢õ	   é«˜é€�è½¬u   å¹¶è´­u   é‡�ç»„u   ç­¾çº¦u   èŽ·æ‰¹õ   æ‰­äº�u   æ¿€åŠ±è®¡åˆ’)õ   å‡�æŒ�u   è¯‰è®¼õ   å¤„ç½šõ   ç«‹æ¡ˆu   é—®è¯¢u   é¢„å‡�u   ä¸‹æ»‘u   é€€å¸‚u   å•†èª‰å‡�å€¼u   è´¨æŠ¼u   å�œç‰Œc                 ó|	  ^^• / nSnU =(       d    0 R                  S5      =(       d    / nU=(       d    0 R                  S5      =(       d    / n[        S U 5       5      n[        S U 5       5      n	U(       a'  UR                  SU S35        U[        SUS	-  5      -  nU	(       a'  UR                  SU	 S
35        U[        SU	S	-  5      -  nU(       d  UR                  S5        U(       Ga
  U V
s/ s H  oªR                  S5      =(       d    SPM     nn
[        S U 5       5      n[        S U 5       5      n[        S U 5       5      nUR                  S[	        U5       SU SU SU S3	5        U[        S[        [	        U5      S-  5      5      :¼  a  US-  oTR                  S5        O US:”  a  Xì:¼  a  US-  oTR                  S5        U(       a!  US   (       a  UR                  SUS    35        OUR                  S5        U=(       d    0 R                  S5      =(       d    / nU(       Ga/  [        S U 5       5      n[        S  U 5       5      nU Vs/ s H'  n[        UR                  S!5      S"5      (       d  M%  UPM)     nnU(       a'  UR                  S#U S$35        U[        SUS%-  5      -  nU(       a'  UR                  S#U S&35        U[        SUS%-  5      -  nU(       aU  US   nUR                  S'[	        U5       S(UR                  S)5      =(       d    SS S*  S+UR                  S!S5       S35        O0UR                  S#[	        U5       S,35        OUR                  S-5        U=(       d    0 R                  S5      =(       d    / n/ S.Qm/ S/QmU(       aÏ  [        U4S0 jU 5       5      n[        U4S1 jU 5       5      nU(       a'  UR                  S2U S335        U[        SUS4-  5      -  nU(       a'  UR                  S5U S635        U[        SUS4-  5      -  nUS   nUR                  S7UR                  S)5      =(       d    SS S*  S+UR                  S!S5       S35        OUR                  S85        [        S9[        S:U5      5      n[        U5      XT[        S;XE5      S<.$ s  sn
f s  snf )=Nr   rb  r…  c              3   óh   ^#   • U  H'  m[        U4S  j[         5       5      (       d  M#  Sv •  M)     g7f)c              3   ó\   >#   • U  H!  oTR                  S 5      =(       d    S;   v •  M#     g7f©ry  rg   N©rY   ©Ú.0Úgr$   s     €r   Ú	<genexpr>Ú*_analyst_news.<locals>.<genexpr>.<genexpr>s  s#   øé € Ð*VÒPUÈ1°·±°w³×1EÀ2Ö+FÒPUùó   ƒ),r¸   N©ÚanyÚ_GOOD©rH  r$   s    @r   rJ  Ú _analyst_news.<locals>.<genexpr>s  s!   øé € ÐWš8�a¤sÔ*VÕPUÓ*V×'V—‘š8ùó   ƒ"2©	2c              3   óh   ^#   • U  H'  m[        U4S  j[         5       5      (       d  M#  Sv •  M)     g7f)c              3   ó\   >#   • U  H!  oTR                  S 5      =(       d    S;   v •  M#     g7frE  rF  )rH  r%   r$   s     €r   rJ  rK  t  s!   øé € Ð)TÊtÈ!°·±°g³×0DÀ"Ö*EÊtùrL  r¸   N©rN  Ú_BADrP  s    @r   rJ  rQ  t  s    øé € ÐUš(�Q¤cÔ)TÍtÓ)T×&T�q‰qš(ùrR  u
   å…¬å‘Šå�« u-    æ�¡æ½œåœ¨åˆ©å¥½ï¼ˆå›žè´­/ä¸­æ ‡/åˆ†çº¢ç­‰ï¼‰r
   r   u-    æ�¡æ½œåœ¨åˆ©ç©ºï¼ˆå‡�æŒ�/å¤„ç½š/é—®è¯¢ç­‰ï¼‰u   è¿‘é˜¶æ®µæ— é‡�å¤§å…¬å‘ŠæŠ«éœ²r‰  rg   c              3   óB   #   • U  H  nS U;   d  SU;   d  M  Sv •  M     g7f©u   ä¹°å…¥r;  r¸   NrD   ©rH  rÔ   s     r   rJ  rQ  z  ó   é € ÐIšW˜¨°Q«¸(Àa¹-—!‘!šWùó   ‚–	c              3   óB   #   • U  H  nS U;   d  SU;   d  M  Sv •  M     g7f)rÕ  u   æŒ�æœ‰r¸   NrD   rY  s     r   rJ  rQ  {  s   é € ÐM¢˜A¨X¸«]¸hÈ!¹m—a‘a¢ùr[  c              3   óB   #   • U  H  nS U;   d  SU;   d  M  Sv •  M     g7f)r?  u   å�–å‡ºr¸   NrD   rY  s     r   rJ  rQ  |  rZ  r[  u   è¿‘ u!    ä»½æœºæž„ç ”æŠ¥ï¼ˆä¹°å…¥/å¢žæŒ� u
   ã€�ä¸­æ€§ u
   ã€�è´Ÿé�¢ u   ï¼‰r¸   r  r,  u   æœºæž„è§‚ç‚¹æ•´ä½“å��æ­£é�¢r•  u   æœºæž„è§‚ç‚¹å‡ºçŽ°è´Ÿé�¢è¯„çº§u   æœ€æ–°ç ”æŠ¥è¯„çº§ï¼šu   è¿‘æœŸæ— æœºæž„ç ”æŠ¥è¦†ç›–r¢  c              3   óh   ^#   • U  H'  m[        U4S  j[         5       5      (       d  M#  Sv •  M)     g7f)c              3   ó\   >#   • U  H!  oTR                  S 5      =(       d    S;   v •  M#     g7frE  rF  )rH  rI  rŠ   s     €r   rJ  rK  ˆ  s#   øé € Ð-YÒSXÈa°A·E±E¸'³N×4HÀbÖ.IÒSXùrL  r¸   NrM  ©rH  rŠ   s    @r   rJ  rQ  ˆ  s!   øé € ÐZšw˜!¬#Ô-YÕSXÓ-Y×*Y—A‘AšwùrR  c              3   óh   ^#   • U  H'  m[        U4S  j[         5       5      (       d  M#  Sv •  M)     g7f)c              3   ó\   >#   • U  H!  oTR                  S 5      =(       d    S;   v •  M#     g7frE  rF  )rH  r_   rŠ   s     €r   rJ  rK  ‰  s#   øé € Ð,WÒRVÈQ°1·5±5¸³>×3GÀRÖ-HÒRVùrL  r¸   NrU  r`  s    @r   rJ  rQ  ‰  s!   øé € ÐXšg˜¬Ô,WÕRVÓ,W×)W—1‘1šgùrR  rA   rh   u   ä¸ªè‚¡æ–°é—» u-    æ�¡åˆ©å¥½é¢˜æ��ï¼ˆå›žè´­/ä¸­æ ‡/ç­¾çº¦ç­‰ï¼‰rÃ   u'    æ�¡åˆ©ç©ºï¼ˆå‡�æŒ�/å¤„ç½š/é—®è¯¢ç­‰ï¼‰u   è¿‘7å¤©ä¸ªè‚¡æ–°é—» u    æ�¡ï¼Œæœ€æ–°ï¼šã€Œry  rÐ  u   ã€�ï¼ˆu    æ�¡ï¼Œä½†å¤šä¸ºåŽ†å�²æŠ¥é�“u   æœªè§�ä¸ªè‚¡ç›¸å…³æ–°é—»)u   é™�å‡†u   é™�æ�¯u	   ç¨³å¢žé•¿u   å®½æ�¾u   æ”¾æ°´u   åˆºæ¿€u	   æ‰©å†…éœ€u   æ”¿ç­–åˆ©å¥½u   å›žè´­æ–°è§„u   å¢žæŒ�è®¡åˆ’u   åˆ©å¥½u   åŠ ä»“u   æ‰˜åº•)u   åŠ æ�¯u   ç¼©è¡¨u   æš´è·Œu   å¤§è·Œu   åœ°ç¼˜u   å…³ç¨Žu   åˆ¶è£�u   æ”¶ç´§u   åˆ©ç©ºu   æš´é›·u   é€€å¸‚é£Žé™©u   é£Žé™©é¢„è­¦rA  r@  c              3   ób   >^#   • U  H#  m[        U4S  jT 5       5      (       d  M  Sv •  M%     g7f)c              3   ó’   >#   • U  H<  oTR                  S 5      =(       d    STR                  S5      =(       d    S-   ;   v •  M>     g7f©ry  rg   rÊ  NrF  ©rH  ræ   rŠ   s     €r   rJ  rK  ™  ó8   øé € Ð*wÒkvÐfg°!·%±%¸³.×2FÀBÈÏÉÈyÓIY×I_Ð]_Ñ1`Ö+aÒkvùó   ƒAAr¸   N©rN  )rH  rŠ   Ú_MACRO_BULLs    @€r   rJ  rQ  ™  ó!   ùé € ÐxšG�q¤sÔ*wÑkvÓ*w×'w—‘šGùó   „/¦	/c              3   ób   >^#   • U  H#  m[        U4S  jT 5       5      (       d  M  Sv •  M%     g7f)c              3   ó’   >#   • U  H<  oTR                  S 5      =(       d    STR                  S5      =(       d    S-   ;   v •  M>     g7fre  rF  rf  s     €r   rJ  rK  š  rg  rh  r¸   Nri  )rH  rŠ   Ú_MACRO_BEARs    @€r   rJ  rQ  š  rk  rl  u   å®�è§‚å¿«è®¯å��æš– u'    æ�¡ï¼ˆé™�å‡†/é™�æ�¯/æ”¿ç­–åˆ©å¥½ç­‰ï¼‰rÂ   u   å®�è§‚å¿«è®¯å��å†· u(    æ�¡ï¼ˆåŠ æ�¯/åœ°ç¼˜/å…³ç¨Ž/é£Žé™©ç­‰ï¼‰u   æœ€æ–°å®�è§‚å¿«è®¯ï¼šã€Œu   å®�è§‚é�¢æš‚æ— é‡�å¤§å¿«è®¯r  rô  u	   æ–°é—»é�¢r  )
rY   rç  rÏ   rö  r[   rõ  rî   rå  r×  r  )ÚannÚrepÚsnÚmnr  r  Úann_listÚrep_listÚtgoodÚtbadr=   ÚratingsÚbuyÚneutralÚnegÚsn_listÚsgoodÚsbadrŠ   ÚrecÚr0Úmn_listÚmbÚmrÚtopro  rj  s                            @@r   Ú_analyst_newsr…  o  sz  ù€ Ø€E˜�Ø—	�r�‰˜Ó/×5°2€HØ—	�r�‰˜yÓ)×/¨R€HÜÑW™8ÓWÓW€EÜÑU™(ÓUÓU€DÞˆe�l‰l˜Z¨ wÐ.[Ð\Ô]Ð_dÔhkÐlnÐpuÐvwÑpwÓhxÑ_xÐ_dÞˆU�\‰\˜J t fÐ,YÐZÔ[Ð]bÔfiÐjlÐnrÐstÑntÓfuÑ]uÐ]bÞ�U—\‘\Ð"BÔCßÙ2:Ó;²(¨Q—5‘5˜“?×( bÒ(±(ˆÐ;ÜÑI™WÓIÓIˆÜÑM¡ÓMÓMˆÜÑI™WÓIÓIˆØ�‰�tœC ›M˜?Ð*KÈCÈ5ÐPZÐ[bÐZcÐcmÐnqÐmrÐruÐvÔwØ”#�aœœS ›]¨3Ñ.Ó/Ó0Ó0Ø�R‰KˆEŸ™Ð&CÕDØ�1‹W˜›Ø�R‰KˆEŸ™Ð&FÔGÞ�w˜q—z 5§<¡<Ð2GÈÐPQÉ
À|Ð0TÔ#Uøà�‰Ð2Ô3à�x�R�n‰n˜VÓ$×*¨€GßÜÑZ™wÓZÓZˆÜÑX™gÓXÓXˆÙ!ÓDš'�Q¤\°!·%±%¸³-À×%C�q™'ˆÐDÞ�%—,‘, ¨u¨gÐ5bÐcÔdÐfkÔorÐsuÐw|Ð}~Ñw~ÓoÑfÐfkÞ�—‘ ¨d¨VÐ3ZÐ[Ô\Ð^cÔgjÐkmÐosÐtuÑouÓgvÑ^vÐ^cÞØ�Q‘ˆBØ�L‰LÐ/´°C³¨zÐ9LÈbÏfÉfÐU\Ëo×NcÐacÐehÐfhÐMiÐLjÐjpÐqs×qwÑqwÐx~ð  @Bó  rCð  qDð  DGð  Hõ  Ià�L‰L˜=¬¨W«¨Ð6RÐSÕTà�‰Ð/Ô0à�x�R�n‰n˜VÓ$×*¨€Gò a€Kò ^€KÞÜÔx™GÓxÓxˆÜÔx™GÓxÓxˆÞˆu�|‰|Ð1°"°Ð5\Ð]Ô^Ð`eÔilÐmoÐqsÐtuÑquÓivÑ`vÐ`eÞˆu�|‰|Ð1°"°Ð5]Ð^Ô_ÐafÔjmÐnpÐrtÐuvÑrvÓjwÑawÐafØ�a‰jˆØ�‰Ð/°·±¸Ó1A×1GÀRÈÈ"Ð0MÐ/NÈfÐUX×U\ÑU\Ð]cÐdfÓUgÐThÐhkÐlÕmà�‰Ð2Ô3Ü�”c˜#˜u“oÓ&€EÜ˜u“~°ÔT[Ð\gÐinÓTvÑwÐwùòS <ùò" Es   Ã1#R4É$R9ÊR9c                 ór	  • / nSnU (       Ga‘  U R                  S5      (       Gaz  U R                  S5      oPR                  S5      o`R                  S5      nU R                  S5      o€R                  S5      o�R                  S5      n
U R                  S	5      o°R                  S
5      oÀR                  S5      nU R                  S5      oàR                  S5      oðR                  S5      nU(       a  UR                  SU 35        Ub�  US:¼  a  UR                  SUS S35        US-  nO_US:¼  a  UR                  SUS S35        US-  nO=US:  a  UR                  SUS S35        US-  nOUR                  SUS S35        US-  nUbe  US:”  a  UR                  SUS S35        US-  nOCUS:”  a  UR                  SUS S 35        US!-  nO!US:  a  UR                  S"US S#35        US-  nU	b.  Ub+  [        X‰-
  5      S$:”  a  UR                  S%US S&U	S S'35        U
bZ  U
S(:¼  a  UR                  S)U
S* S+35        US!-  nO8U
S:¼  a  UR                  S)U
S* S,35        US--  nOUR                  S)U
S* S.35        Ub  UR                  S/US S035        Ub  UR                  S1US S035        Ub  UR                  S2[        U5       35        Ub  UR                  S3[        U5       35        Ubr  US:  a  UR                  S45        OZUS:  a  UR                  S5US* S635        US-  nO8US(:”  a  UR                  S5US* S735        US-  nOUR                  S5US* S835        Ub  UR                  S9US* S:35        Ub  UR                  S;[        U5       35        OUR                  S<5        U=(       d    0 R                  S=5      =(       d    / nU(       a\  U Vs/ s H  nUR                  S>5      =(       d    S?PM     nn[	        S@ U 5       5      nUSA:¼  a  UR                  SBU SC35        US-  nU=(       d    0 R                  SD5      =(       d    / n[        SE U 5       5      (       a  UR                  SF5        US!-  n[        SG[        SHU5      5      n[        U5      XC[        SIX45      SJ.$ s  snf )KNr   r{   ÚroeÚpe_ttmÚpbÚnet_profit_yoyÚoperate_income_yoyÚgross_profit_ratioÚtotal_mvÚepsÚbpsÚ
net_profitÚoperate_incomeÚreport_dateu
   æŠ¥å‘ŠæœŸ r
   zROE rÜ  u   %ï¼Œç›ˆåˆ©èƒ½åŠ›å¼ºr,  rs   u   %ï¼Œç›ˆåˆ©å°šå�¯r˜   u   %ï¼Œå·²é™·å…¥äº�æ�Ÿu   %ï¼Œç›ˆåˆ©å��å¼±rÂ   r   u   å‡€åˆ©æ¶¦å�Œæ¯” +rÝ  u   %ï¼Œé«˜æˆ�é•¿r•  u   %ï¼Œæ­£å¢žé•¿rÃ   u   å‡€åˆ©æ¶¦å�Œæ¯” u   %ï¼Œä¸šç»©æ‰¿åŽ‹rL  u   åˆ©æ¶¦å¢žé€Ÿ(u   %)ä¸Žè�¥æ”¶å¢žé€Ÿ(u#   %)æ˜Žæ˜¾èƒŒç¦»ï¼Œå…³æ³¨ç›ˆåˆ©è´¨é‡�r  u   é”€å”®æ¯›åˆ©çŽ‡ r  u   %ï¼ŒæŠ¤åŸŽæ²³æ·±åŽšu   %ï¼Œç›ˆåˆ©ç©ºé—´è‰¯å¥½r”   u
   %ï¼Œå��ä½Žu   æ¯�è‚¡æ”¶ç›Š u    å…ƒu   æ¯�è‚¡å‡€èµ„äº§ u   å½’æ¯�å‡€åˆ©æ¶¦ u   è�¥ä¸šæ€»æ”¶å…¥ u&   å¸‚ç›ˆçŽ‡(TTM)ä¸ºè´Ÿï¼ˆå½“å‰�äº�æ�Ÿï¼‰zPE(TTM) u    å€�ï¼Œä¼°å€¼å��ä½Žu    å€�ï¼Œä¼°å€¼å��é«˜u    å€�ï¼Œä¼°å€¼ä¸­æ€§zPB u    å€�u
   æ€»å¸‚å€¼ u6   è´¢åŠ¡F10æŒ‡æ ‡ç¼ºå¤±ï¼ŒåŸºæœ¬é�¢ä»¥æœºæž„è¯„çº§æŽ¨æ–­r…  r‰  rg   c              3   óB   #   • U  H  nS U;   d  SU;   d  M  Sv •  M     g7frX  rD   rY  s     r   rJ  Ú'_analyst_fundamental.<locals>.<genexpr>Ë  rZ  r[  r¸   u   æœºæž„ç ”æŠ¥ u/    æ¬¡ä¹°å…¥/å¢žæŒ�è¯„çº§ï¼ŒåŸºæœ¬é�¢é¢„æœŸå�‘å¥½rb  c              3   óN   ^#   • U  H  m[        U4S  jS 5       5      v •  M     g7f)c              3   ó\   >#   • U  H!  oTR                  S 5      =(       d    S;   v •  M#     g7frE  rF  rG  s     €r   rJ  Ú1_analyst_fundamental.<locals>.<genexpr>.<genexpr>Î  s#   øé € ÐjÒ4i¨q�Q—U‘U˜7“^×) rÖ*Ò4iùrL  )r9  r=  r<  r>  r:  Nri  rP  s    @r   rJ  r”  Î  s#   øé € Ð
}Òt|ÐopŒ3ÔjÑ4iÓj×jÐjÒt|ùs   ƒ"%u1   å…¬å‘Šå�«ä¸šç»©/åˆ†çº¢ç±»åˆ©å¥½ï¼Œå¤¯å®žåŸºæœ¬é�¢r  rô  u	   åŸºæœ¬é�¢r  )
rY   rÏ   rÞ  rà  rç  rN  rõ  rö  r×  r  )Úfundrq  rp  r  r  r‡  Úper‰  ÚnipÚoipÚgprÚmvrŽ  r�  ÚnpfÚoiÚrdru  r=   rx  ry  rt  s                         r   Ú_analyst_fundamentalr¡  ¤  s©  € Ø€E˜�ß�—‘˜—’Ø�h‰h�u‹oˆ§H¡H¨XÓ$6˜r¿X¹XÀd»^¸Ø�h‰hÐ'Ó(ˆ·±Ð9MÓ0N¨#×V^ÑV^Ð_sÓVtÐPSØ�X‰X�jÓ!ˆ¯©°%« 3ÇÁÈÃ¸#Ø�h‰h�|Ó$ˆ¯8©8Ð4DÓ+E bÏHÉHÐUbÓLcÀrÞˆu�|‰|˜j¨¨Ð-Ô.Ø‰?Ø�b‹y˜%Ÿ,™,¨¨c°#¨YÐ6IÐ'JÔKÈUÐVXÉ[ÉUØ˜“˜5Ÿ<™<¨$¨s°3¨iÐ7GÐ(HÔIÈ5ÐTUÉ:É5Ø�q“˜%Ÿ,™,¨¨c°#¨YÐ6IÐ'JÔKÈUÐVXÉ[ÉUØ—,‘,  c¨# YÐ.>Ð?Ô@À%È1Á*À%Ø‰?Ø�R‹x˜Ÿ™Ð(9¸#¸c¸À-Ð&PÔQÐSXÐ\^ÑS^ÑSXØ�q“˜%Ÿ,™,Ð):¸3¸s¸)À=Ð'QÔRÐTYÐ]^ÑT^ÑTYØ�q“˜%Ÿ,™,Ð)9¸#¸c¸ÐBRÐ'SÔTÐV[Ð_aÑVaÐV[Ø‰?˜s™´3°s±w³<À"Ó3DØ�L‰L˜=¨¨S¨	Ð1CÀCÈÀ9ÐLoÐpÔqØ‰?Ø�b‹y˜%Ÿ,™,Ð)9¸#¸c¸ÐBUÐ'VÔWÐY^ÐbcÑYcÑY^Ø˜“˜EŸL™LÐ+;¸CÀ¸9ÐDZÐ)[Ô\Ð^cÐghÑ^hÑ^cØ—,‘,Ð!1°#°c°¸*ÐEÔFØ‰?˜EŸL™L¨=¸¸S¸	ÀÐ)FÔGØ‰?˜EŸL™LÐ+;¸CÀ¸9ÀDÐ)IÔJØ‰?˜EŸL™LÐ+;¼GÀC»L¸>Ð)JÔKØ‰>˜5Ÿ<™<Ð*:¼7À2»;¸-Ð(HÔIØ‰>Ø�A‹v�u—|‘|Ð$LÕMØ�b“˜%Ÿ,™,¨°"°S°Ð9LÐ'MÔNÐPUÐYZÑPZÑPUØ�b“˜%Ÿ,™,¨°"°S°Ð9LÐ'MÔNÐPUÐYZÑPZÑPUØ—,‘, ¨"¨S¨Ð1DÐEÔFØ‰>˜5Ÿ<™<¨#¨b°¨X°TÐ(:Ô;Ø‰>˜5Ÿ<™<¨*´W¸R³[°MÐ(BÔCøà�‰ÐMÔNØ—	�r�‰˜yÓ)×/¨R€HÞÙ2:Ó;²(¨Q�1—5‘5˜“?×( bÒ(±(ˆÐ;ÜÑI™WÓIÓIˆØ�!‹8�U—\‘\ M°#°Ð6eÐ"fÔgÐinÐrsÑisÐinØ—	�r�‰˜Ó/×5°2€HÜ
Ñ
}Ñt|Ó
}×}Ñ}Ø�‰ÐHÔIÈ5ÐTUÉ:È5Ü�”c˜#˜u“oÓ&€EÜ˜u“~°ÔT[Ð\gÐinÓTvÑwÐwùò <s   Ï$R4c                 óˆ  • U  Vs0 s H  oS   U_M
     nnU  Vs0 s H  oS   US   _M     nnU(       a.  [        [        UR                  5       5      [        U5      -  5      OSn/ n[	        UR                  5       5      n[        [        U5      5       HÐ  n[        US-   [        U5      5       H±  nXg   Xh   p©X9   X:   pË[        U5      S:¬  =(       a    [        U5      S:¬  nU(       a  X¼-  S:  d  [        X¼-
  5      S:¼  d  MV  UR                  X)   S   X*   S   X)   S   X*   S   X)   S    S	[        U5       S
US SX*   S    S	[        U5       S
US S3S.5        M³     MÒ     / nU  Vs/ s H  oS   S:”  d  M  UPM     nnU  Vs/ s H  oS   S:  d  M  UPM     nnU(       a*  UR                  SSR                  S U 5       5      -   5        U(       a*  UR                  SSR                  S U 5       5      -   5        U(       d  U(       d  UR                  S5        [        U5      nSUS SU S3nSR                  U5      nSnU(       a  SSR                  S U 5       5      -   nUU-   U(       a  SU-   OS-   n[        USXå Vs/ s H  oS   PM	     snUS.5      nUUXåUS .$ s  snf s  snf s  snf s  snf s  snf )!Nrå   r  r   r¸   r
   é#   r¶   r  u   åˆ¤u   ï¼ˆr	  u   ï¼‰ï¼Œu3   ï¼‰ï¼Œä¸¤è€…è§‚ç‚¹èƒŒç¦»ï¼Œéœ€è­¦æƒ•çŸ›ç›¾ä¿¡å�·ã€‚)r$   r%   Ú	verdict_aÚ	verdict_br|   rÓ  u   å��å¤šå…±è¯†ï¼šu   ã€�c              3   ó<   #   • U  H  oS     SUS    S3v •  M     g7f©r¶   r´  r  rµ  NrD   ©rH  rã   s     r   rJ  Ú_chief.<locals>.<genexpr>ç  ó'   é € Ð;hÒdgÐ_`À¹y¸kÈÈ1ÈYÉ<È.ÐXYÕ<ZÒdgùó   ‚u   å��ç©ºå…±è¯†ï¼šc              3   ó<   #   • U  H  oS     SUS    S3v •  M     g7fr§  rD   r¨  s     r   rJ  r©  è  rª  r«  u6   å››ç»´æš‚æ— æ˜Žæ˜¾æ–¹å�‘å…±è¯†ï¼Œæ•´ä½“ä¸­æ€§æ‹‰é”¯ã€‚u%   ã€�é¦–å¸­ç»¼è¿°ã€‘å››ç»´ç»¼å�ˆå¾—åˆ† u   ï¼Œæ•´ä½“åˆ¤æ–­ã€Œu   ã€�ã€‚ru   rg   u   âš  åˆ†æ­§æ ‡æ³¨ï¼šc              3   ó*   #   • U  H	  oS    v •  M     g7f)r|   NrD   rY  s     r   rJ  r©  ï  s   é € Ð.PÂK¸q°®{ÂKùs   ‚u   é¦–å¸­ç»¼è¿°r|   )r
  Ú	consensusÚdivergencesÚoverall)Úoverall_scoreÚoverall_verdictr®  r¯  r  )Úroundrç  Úvaluesr[   r  Úkeysr&  rÞ  rÏ   rÙ  rË   r×  r  )Ú
dimensionsrã   ÚbykeyÚscoresr°  r¯  rµ  rb   Újr$   r%   ÚsaÚsbÚ	committedr®  Úposr{  Úovr  ÚconsÚdivr  s                         r   Ú_chiefrÁ  Ó  sþ  € Ù",Ó-¢*˜Qˆu‰X�qŠ[¡*€EÐ-Ù,6Ó7ªJ q�‰h˜˜'™
Ò"©J€FÐ7Þ9?Œe”C˜Ÿ™›Ó(¬¨V«Ñ4Ô5ÀQ€GØ€KÜ�—‘“Ó€DÜ”3�t“9ÖˆÜ�q˜‘sœC ›IÖ&ˆAØ‘7˜D™GˆqØ‘Y ¡	�Ü˜R› B™×8¬3¨r«7°b©=ˆIÞ˜b™e a›i¬C°±«J¸"Õ,<Ø×"Ñ"Ø™ &Ñ)°±¸Ñ0@Ø!&¡¨)Ñ!4À5Á8ÈIÑCVØ!&¡¨&Ñ!1Ð 2°#´iÀ³m°_ÀCÈÈ1ÀvÈVÐTYÑT\Ð]cÑTdÐSeÐehÔirÐsuÓivÐhwÐwzÐ{}Ð~ð  {Að  Atð  uñ$ö ó 'ñ ð €IÙ Ó
4’j� g¡J°¡O�1‘j€CÐ
4Ù Ó
5’j� g¡J°Ñ$4�1‘j€CÐ
5Þ
ˆI×ÑÐ.°·±Ñ;hÑdgÓ;hÓ1hÑhÔiÞ
ˆI×ÑÐ.°·±Ñ;hÑdgÓ;hÓ1hÑhÔiÞ–s˜I×,Ñ,Ð-eÔfÜ	�Ó	€BØ2°7¸1°+Ð=OÐPRÈtÐSYÐZ€DØ�8‰8�IÓ€DØ
€CÞØ# c§h¡hÑ.PÁKÓ.PÓ&PÑPˆØ�t‘®c  c¢	°rÑ:€IÜ˜I°ÈYð  ~Ió  hJò  ~IÐxyÐjrÔhsñ  ~Iñ  hJð  W^ñ  (_ó  `€IØ$¸È)ð  Hñ  Ið  Iùò= .ùÚ7ùò  5ùÚ
5ùò hJs(   …J+šJ0Å.J5Å>J5Æ
J:ÆJ:ÊJ?c                 óÞ   • [         R                  " SSU 5      nU R                  S5      (       a  SU-   $ U R                  S5      (       a  SU-   $ U R                  S5      (       a  SU-   $ SU-   $ )	Nrc  rg   r•   z1.r–   z0.r—   z8.)rÌ   r|  rl   )rE  r  s     r   Ú_secidrÃ  ô  sf   € Ü
�&Š&�  RÓ
(€CØ	‡}�}�T×Ñ 4¨#¡:Ð-Ø	‡}�}�T×Ñ 4¨#¡:Ð-Ø	‡}�}�T×Ñ 4¨#¡:Ð-Ø�#‰:Ðr   c                 ó0  ^• [        U 5      nU(       d  SSS.$ [        R                  " SSU5      n0 nS nSU-   S-   n [        R                  " [        U5      5      nUR                  S	5      =(       d    0 R                  S
5      =(       d    / nU(       Ga‡  US   n[        UR                  S5      =(       d    S5      SS n	U" UR                  S5      5      n
U" UR                  S5      5      nU" UR                  S5      5      nU" UR                  S5      5      nU" UR                  S5      5      nU" UR                  S5      5      nS=nn[        U	5      S:¼  a´  U	SS n[        U	SS 5      S-
   SU 3nU H“  n[        UR                  S5      =(       d    S5      SS U:X  d  M/  U" UR                  S5      5      nU" UR                  S5      5      nU(       a  UU-
  [        U5      -  S-  nU(       a  UU-
  [        U5      -  S-  n  O   SXšUXÍUUUUS.
n [        SU-   SS9n[        R                  " S[        R                  " U5      -   S -   U5      nU(       aU  UR                  S5      R                  S!5      mU4S" jnU" S#5      US$'   U" S%5      US&'   U" S'5      nU(       a  US(-  OSUS)'   UR                  S*5      (       d  S$U;   d  S)U;   a  UR!                  S*S5        U$ SS+S.$ ! [         a    / n GNtf = f! [         a     NZf = f),uò  ä¸œæ–¹è´¢å¯Œä¸šç»©æŠ¥è¡¨(RPT_LICO_FN_CPD)+è…¾è®¯è¡Œæƒ…(PE/PB/å¸‚å€¼)èŽ·å�–è´¢åŠ¡F10æŒ‡æ ‡ã€‚å¤±è´¥é™�çº§ã€‚

è¯´æ˜Žï¼šåŽŸ RPT_F10_FINANCE_MAINFINADATA åœ¨ä¸œè´¢å½“å‰�çŽ¯å¢ƒä¸‹è¢«è£�å‰ªä¸ºä»…7åˆ—(EPS/æ¯›åˆ©çŽ‡/èµ„äº§è´Ÿå€ºçŽ‡)ï¼Œ
ä¸”ä¸�å�« ROE ä¸Žå¢žé€Ÿï¼›æ”¹ç”¨ä¸šç»©æŠ¥è¡¨ RPT_LICO_FN_CPD(åˆ—å�� WEIGHTAVG_ROE/BASIC_EPS/PARENT_NETPROFIT/
TOTAL_OPERATE_INCOME/BPS/XSMLL)ï¼ŒæŒ‰æŠ¥å‘ŠæœŸæ‹‰å¤šæœŸä»¥æœ€æ–°æœŸå¯¹æ¯”åŽ»å¹´å�ŒæœŸè®¡ç®—å‡€åˆ©/è�¥æ”¶å�Œæ¯”ã€‚
PE/PB/æ€»å¸‚å€¼å�–è‡ªè…¾è®¯è¡Œæƒ…(æ›´ç¨³)ã€‚
FrØ   ©r{   r·   rc  rg   c                 ó:   •  [        U 5      $ ! [         a     g f = fr   r¼   )rß  s    r   Ú_to_fÚ fetch_fundamental.<locals>._to_f	  s"   € ð	Ü˜“8ˆOøÜó 	Ùð	ús   ‚
 �
™zwhttps://datacenter-web.eastmoney.com/api/data/v1/get?reportName=RPT_LICO_FN_CPD&columns=ALL&filter=(SECURITY_CODE%3D%22zO%22)&pageSize=12&sortColumns=REPORTDATE&sortTypes=-1&source=HSF10&client=PC&p=1r¶  rÚ   r   Ú
REPORTDATENr•  ÚWEIGHTAVG_ROEÚ	BASIC_EPSÚPARENT_NETPROFITÚTOTAL_OPERATE_INCOMEÚBPSÚXSMLLr   rÃ   r¸   rt   rô  T)
r{   r’  r‡  rŽ  r�  r‘  r�  rŒ  rŠ  r‹  r´   rµ   rJ   Úv_z
="([^"]*)"r¹   c                 óB   >•  [        TU    5      $ ! [         a     g f = fr   r¼   r¾   s    €r   ÚgvÚfetch_fundamental.<locals>.gv9  s(   ø€ ð Ü   1¡›;Ð&øÜ ó  Ùð úrÁ   é'   rˆ  é.   r‰  é-   rÛ  r�  r{   Úempty)r¡   rÌ   r|  rV   rW   r±   rY   r;   r8   r[   rî   rÞ  ÚsearchÚescaperÎ   rÊ   Ú
setdefault)rc   rE  r  ÚfinrÇ  r­   rã   r…   r�   r   r‡  rŽ  rž  rŸ  r�  rœ  Únp_yoyÚoi_yoyÚmmddr4  r=   Únp0Úoi0ÚtrÓ   rÒ  Úmv_yir   s                              @r   Úfetch_fundamentalrã  û  s	  ø€ ô 
˜Ó	€BÞØ nÑ5Ð5Ü
�&Š&�  RÓ
(€CØ
€Còð*à,/ñ0ð3YñY€CðÜ�JŠJ”x “}Ó%ˆØ—‘�h“×% 2×*Ñ*¨6Ó2×8°bˆ÷ Ø�1‰gˆÜ�—‘˜Ó&×,¨"Ó-¨c¨rÐ2ˆÙ�C—G‘G˜OÓ,Ó-ˆÙ�C—G‘G˜KÓ(Ó)ˆÙ�C—G‘GÐ.Ó/Ó0ˆÙ�3—7‘7Ð1Ó2Ó3ˆÙ�C—G‘G˜E“NÓ#ˆÙ�C—G‘G˜GÓ$Ó%ˆØÐˆ�Üˆr‹7�b‹=Ø�a˜�8ˆDÜ˜B˜r ˜F› a™Ð(¨¨$¨Ð0ˆFÛ�Ü�q—u‘u˜\Ó*×0¨bÓ1°#°2Ð6¸&Õ@Ù §¡Ð&8Ó 9Ó:�CÙ §¡Ð&<Ó =Ó>�CÞØ"%¨¡)¬s°3«xÑ!7¸#Ñ!=˜ÞØ"$ s¡(¬c°#«hÑ!6¸Ñ!<˜Ùñ ð ¨"ÀØ ¸sØ%(¸FÐZ`ñbˆð
ÜÐ-°Ñ2¸UÑCˆÜ�IŠI�eœbŸiši¨›mÑ+¨mÑ;¸QÓ?ˆÞØ—‘˜“
× Ñ  Ó%ˆAõ ñ
 ˜r›FˆC�‰MÙ˜2›ˆC�‰IÙ�r“FˆEÞ/4˜u sš{¸$ˆC�
‰Oð ‡w�wˆt‡}�}˜ C›¨:¸Ó+<Ø�‰�t˜TÔ"Øˆ
Ø 'Ñ*Ð*øôc ó Ø‹ðûôV ó Ùðús%   ¿AK5 È BL Ë5LÌLÌ
LÌLc                 ó>  • [        U 5      nU(       d  SSS.$ [        U5      nSU-   n [        R                  " [	        U5      5      nUR                  S5      =(       d    0 R                  S5      =(       d    / n/ nU H;  n[        U5      R                  S5      n UR                  [        US   5      5        M=     U(       d  SS	S.$ S
[        USS 5      U(       a  US   S.$ SS.$ ! [         a     Mx  f = f! [         a  n	S[        U	5      S.s Sn	A	$ Sn	A	ff = f)uS   ä¸œæ–¹è´¢å¯Œ èµ„é‡‘æµ�æ—¥Kï¼ˆä¸»åŠ›å‡€æµ�å…¥ï¼‰ã€‚push2his æŽ¥å�£ï¼Œå¤±è´¥é™�çº§ã€‚FrØ   rÅ  z¨https://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get?lmt=6&klt=101&fields1=f1,f2,f3&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65&secid=rÚ   Úklinesr³   r¸   r×  Tr  Nrì  r   )r{   r.  r-  )r¡   rÃ  rV   rW   r±   rY   r8   rÊ   rÏ   r½   r;   rç  )
rc   rE  ro  r­   rã   rå  Únetsræ   Úpartsr>   s
             r   Úfetch_moneyflowrè  J  s  € ä	˜Ó	€BÞØ nÑ5Ð5Ü�2‹J€Eðàñ€Cð.Ü�JŠJ”x “}Ó%ˆØ—%‘%˜“-×% 2×*Ñ*¨8Ó4×:¸ˆØˆÛˆAÜ˜“F—L‘L Ó%ˆEðØ—‘œE %¨¡(›OÖ,ñ ö Ø¨'Ñ2Ð2Ø¬¨D°°¨I«ÖVZÈ$ÈrÉ(ÑbÐbÐ`aÑbÐbøô	 ó Úðûô
 ó .Ø¤c¨!£fÑ-Õ-ûð.úsN   ©A2C: ÂC)Â9C: Ã	C: Ã%C: Ã)
C7Ã3C: Ã6C7Ã7C: Ã:
DÄDÄDÄDc                 ó¤  • [        U 5      nU(       d  U S/ 0 S.$ [        US5      n[        U5      n[        U5      n[	        U5      n[        U5      n[        5       n[        U5      n[        U5      n	UR                  S5      =(       d    / n
U(       a  US   (       a  US   R                  S5      OS=(       d    Un[        X£5      n[        X£U	5      n[        XEXg5      n[        X…U5      nSS	S
US   US   US   US   S.SSSUS   US   US   US   S.SSSUS   US   US   US   S.SSSUS   US   US   US   S./n[        U5      nXUUS.$ )uW   å››ç»´ç ”ç©¶æ€»å…¥å�£ï¼šå››ä¸ªè§’è‰²åˆ†æž�å¸ˆç‹¬ç«‹ç ”åˆ¤ + é¦–å¸­ç»¼è¿°æ ‡æ³¨åˆ†æ­§ã€‚rØ   )rc   r·   r¶  ÚchiefrÜ   rÙ   r   r¶   rg   Ú	technicalu   æŠ€æœ¯åˆ†æž�å¸ˆu   ðŸ“ˆr  r  r  r  )rå   r¶   Úiconr  r  r  r  Ú	sentimentu   æƒ…ç»ªåˆ†æž�å¸ˆu   ðŸŒ¡ï¸�r¢  u   æ–°é—»åˆ†æž�å¸ˆu   ðŸ“°Úfundamentalu   åŸºæœ¬é�¢åˆ†æž�å¸ˆu   ðŸ�¦)rc   r¶   r¶  rê  )r¡   rë   rÖ   rƒ  r›  rÁ  rÎ  rã  rè  rY   r)  r8  r…  r¡  rÁ  )rc   rE  ÚklÚqtrp  rq  rr  rs  r˜  r7  rÙ   r¶   ÚtechÚsentr¢  Úfund_ar¶  rê  s                     r   Ú	research4rô  c  s  € ä	˜Ó	€BÞØ ~ÀRÐRTÑUÐUÜ	�R˜Ó	€BÜ	�bÓ	€BÜ
˜bÓ
!€CÜ
˜Ó
€CÜ	˜"Ó	€BÜ	Ó	€BÜ˜RÓ €DÜ	˜Ó	€BØ�6‰6�&‹>×˜R€DÞ!#¨¨1¯ˆBˆq‰E�I‰I�fÔ°2×<¸"€DÜ˜dÓ'€DÜ˜d¨Ó+€DÜ˜ 2Ó*€DÜ! $¨SÓ1€FàÐ%6ÀÐSWÐXaÑSbÐmqÐryÑmzð  FJð  KRñ  FSð  bfð  grñ  bsñ  	tØÐ%6À	ÐVZÐ[dÑVeÐptÐu|Ñp}ð  IMð  NUñ  IVð  eið  juñ  evñ  	wØÐ 1¸6ÈdÐS\ÉoÐhlÐmtÑhuð  AEð  FMñ  ANð  ]að  bmñ  ]nñ  	oØÐ';ÀVÐX^Ð_hÑXiÐtzð  |Cñ  uDð  OUð  V]ñ  O^ð  msð  tñ  m@ñ  	Að	€Jô �:Ó€EØ°JÈÑOÐOr   c                   óV   ^ • \ rS rSrU 4S jrS
S jrS rU 4S jrS rS r	S r
S	rU =r$ )ÚNoCacheHandleri�  c                 óŽ   >• U R                  SS5        U R                  SS5        U R                  SS5        [        TU ]	  5         g )NúCache-Controlz.no-store, no-cache, must-revalidate, max-age=0ÚPragmazno-cacheÚExpiresrš   )Úsend_headerÚsuperÚend_headers)ÚselfÚ	__class__s    €r   rý  ÚNoCacheHandler.end_headers‚  s?   ø€ Ø×Ñ˜Ð*ZÔ[Ø×Ñ˜ :Ô.Ø×Ñ˜ CÔ(Ü‰ÑÕr   c                 óT  • [         R                  " USS9R                  S5      nU R                  U5        U R	                  SS5        U R	                  SS5        U R	                  S[        [        U5      5      5        U R                  5         U R                  R                  U5        g )	NFr  rI   rs  zapplication/json; charset=utf-8rø  zno-storeúContent-Length)
rV   r»  r}  Úsend_responserû  r8   r[   rý  Úwfilerx   )rþ  ÚobjÚstatusr  s       r   Ú
_send_jsonÚNoCacheHandler._send_jsonˆ  sƒ   € Ü�zŠz˜#¨EÑ2×9Ñ9¸'ÓBˆØ×Ñ˜6Ô"Ø×Ñ˜Ð)JÔKØ×Ñ˜¨*Ô5Ø×ÑÐ)¬3¬s°4«y«>Ô:Ø×ÑÔØ�
‰
×Ñ˜Õr   c                 ó¢   • [         R                  R                  [         R                  R                  U R                  5      R
                  5      $ r   )r¦   r  Úparse_qsÚurlparser  Úquery)rþ  s    r   Ú_qsÚNoCacheHandler._qs‘  s0   € Ü�|‰|×$Ñ$¤V§\¡\×%:Ñ%:¸4¿9¹9Ó%E×%KÑ%KÓLÐLr   c           	      ó  >• [         R                  R                  U R                  5      R                  nUS:X  a\  [	        U 5      nU(       d$  U R                  SSS.S5        [        S SSS5        g [        U5        U R                  [        U5      5        g US	:X  a=  U R                  [        U R                  5       R                  S
S/5      S   5      5        g US:X  aT  U R                  5       nU R                  [        UR                  SS/5      S   UR                  SS/5      S   5      5        g US:X  a=  U R                  [        U R                  5       R                  SS/5      S   5      5        g [        TU ]=  5         g )Nú/api/watchlistõ   æœªç™»å½•æˆ–èº«ä»½æ— æ•ˆÚAUTH_REQUIRED©r·   rc   é‘  r  FÚno_uidz
/api/quoterL   rg   r   z
/api/klinerc   rz  rÜ   z/api/searchrA  )r¦   r  r  r  rq   r  r€   r‚   r†   rÖ   r  rY   rë   rI  rü  Údo_GET)rþ  r‘  ry   r	  rÿ  s       €r   r  ÚNoCacheHandler.do_GET”  s5  ø€ Ü�L‰L×!Ñ! $§)¡)Ó,×1Ñ1ˆØÐ Ó Ü˜$“-ˆCÞØ—‘Ð*DÈoÑ ^Ð`cÔdÜ�d˜F E¨8Ô4°fÜ˜ÔØ�O‰OœJ s›OÔ,¨fØ�ÓØ�O‰OœL¨¯©«¯©¸À"ÀÓ)FÀqÑ)IÓJÔKÈVØ�ÓØ—‘“ˆBØ�O‰OœK¨¯©¨v¸°tÓ(<¸QÑ(?ÀÇÁÈÐQVÐPWÓAXÐYZÑA[Ó\Ô]Ð_eØ�ÓØ�O‰OœL¨¯©«¯©¸¸b¸TÓ)BÀ1Ñ)EÓFÔGÈÜ‰‰Õr   c                 ód  • [         R                  R                  U R                  5      R                  S:X  GaR  [	        U 5      nU(       d$  U R                  SSS.S5        [        S SSS5        g  [        U R                  R                  S	S
5      5      n[        R                  " U R                  R                  U5      =(       d    S5      n[        UR                  SS5      =(       d    S5      R!                  5       n[#        U5      nU(       d  [%        USS9nU(       a  US
   S   nU(       d  U R                  SSS.S5        g ['        U5        [)        X5      n[        USXu5        U R                  [+        U5      S   US.5        g U R                  SS0S5        g ! [         a    0 n Náf = f)Nr  r  r  r  r  r)  Fr  r  r   ó   {}rc   rg   r¸   )rB  u6   æ— æ•ˆä»£ç �ï¼Œç¤ºä¾‹ 600000 / sh600000 / è‚¡ç¥¨å��ç§°ÚBAD_CODEé�  rL   )rL   r‹   r·   ú	not foundé”  )r¦   r  r  r  rq   r  r€   rî   ri   rY   rV   rW   Úrfiler«   r;   r8   rj   r¡   rI  r‚   rŒ   r†   )rþ  ry   ÚlengthrÚ   r°   rc   Úhitsr‹   s           r   Údo_POSTÚNoCacheHandler.do_POST¦  sh  € Ü�<‰<× Ñ  §¡Ó+×0Ñ0Ð4DÔDÜ˜$“-ˆCÞØ—‘Ð*DÈoÑ ^Ð`cÔdÜ�d˜E 5¨(Ô3°VðÜ˜TŸ\™\×-Ñ-Ð.>ÀÓBÓC�Ü—z’z $§*¡*§/¡/°&Ó"9×"B¸UÓC�ô �d—h‘h˜v rÓ*×0¨bÓ1×7Ñ7Ó9ˆCÜ! #Ó&ˆDÞä# C¨qÑ1�ÞØ ™7 6™?�DÞØ—‘Ð*bÐlvÑ wÐy|Ô}ð  @FÜ˜ÔÜ˜cÓ(ˆEÜ�#�u˜eÔ*Ø�O‰O¤j°£o°gÑ&>ÈÑOÔPÐRXØ�‰˜ +Ð.°Õ4øô ó Ø’ðús   Á0AF  Æ F/Æ.F/c                 ó–  • [         R                  R                  U R                  5      R                  S:X  Gak  [	        U 5      nU(       d$  U R                  SSS.S5        [        S SSS5        g [        U R                  5       R                  S	S
/5      S   5      nU(       dy   [        U R                  R                  SS5      5      n[        R                  " U R                  R                  U5      =(       d    S5      n[        UR                  S	S
5      5      nU(       d  U R                  SSS.S5        g [#        U5        [%        X5      (       d'  U R                  SSS.S5        [        USSSU-   5        g [        USSU5        U R                  ['        U5      5        g U R                  SS0S5        g ! [          a    S
n N«f = f)Nr  r  r  r  r  ÚdelFr  rc   rg   r   r  r  u   æ— æ•ˆä»£ç �r  r  u   æ— æ�ƒé™�æˆ–è®°å½•ä¸�å­˜åœ¨Ú	FORBIDDENi“  z
forbidden:Tr·   r  r  )r¦   r  r  r  rq   r  r€   r¡   r  rY   rî   ri   rV   rW   r  r«   r;   r‚   r�   r†   )rþ  ry   rc   r  Úbds        r   Ú	do_DELETEÚNoCacheHandler.do_DELETEÀ  sr  € Ü�<‰<× Ñ  §¡Ó+×0Ñ0Ð4DÔDÜ˜$“-ˆCÞØ—‘Ð*DÈoÑ ^Ð`cÔdÜ�d˜E 5¨(Ô3°VÜ! $§(¡(£*§.¡.°¸"¸Ó">¸qÑ"AÓBˆDÞðÜ  §¡×!1Ñ!1Ð2BÀAÓ!FÓG�FÜŸš D§J¡J§O¡O°FÓ$;×$D¸uÓE�BÜ)¨"¯&©&°¸Ó*<Ó=�Dö Ø—‘¨.À*Ñ MÈsÔSÐU[Ü˜ÔÜ˜S×'Ñ'Ø—‘Ð*GÐQ\Ñ ]Ð_bÔcÜ�c˜5 %¨¸Ñ)<Ô=¸vÜ�#�u˜d DÔ)Ø�O‰OœJ s›OÔ,¨fØ�‰˜ +Ð.°Õ4øô !ó Ø’Dðús   Â$A8F9 Æ9GÇGc           
      óø  • [         R                  R                  U R                  5      R                  S:X  Ga  [	        U 5      nU(       d  U R                  SSS.S5        g  [        U R                  R                  SS5      5      n[        R                  " U R                  R                  U5      =(       d    S5      nUR                  S	/ 5       Vs/ s H   n[        U5      (       d  M  [        U5      PM"     nn[        U5        [!        X5        [#        US
S[%        ['        U5      5      S-   5        U R                  [)        U5      5        g U R                  SS0S5        g ! [         a    0 n N´f = fs  snf )Nz/api/watchlist/orderr  r  r  r  r  r   r  rL   ÚorderTz itemsr·   r  r  )r¦   r  r  r  rq   r  rî   ri   rY   rV   rW   r  r«   r;   r¡   r‚   r’   r€   r8   r[   r†   )rþ  ry   r  rÚ   r_   rL   s         r   Údo_PUTÚNoCacheHandler.do_PUTØ  s$  € Ü�<‰<× Ñ  §¡Ó+×0Ñ0Ð4JÔJÜ˜$“-ˆCÞØ—‘Ð*DÈoÑ ^Ð`cÔdÐflðÜ˜TŸ\™\×-Ñ-Ð.>ÀÓBÓC�Ü—z’z $§*¡*§/¡/°&Ó"9×"B¸UÓC�ð 15·±¸À"Ô0EÓ[Ò0E¨1ÌÐXY×IZÓ&”^ AÖ&Ñ0EˆEÐ[Ü˜ÔÜ˜Ô#Ü�#�w ¤c¬#¨e«*£o¸Ñ&@ÔAØ�O‰OœJ s›OÔ,¨fØ�‰˜ +Ð.°Õ4øô ó Ø’ðüâ[s   Á"AE% ÃE7Ã+E7Å%E4Å3E4rD   )r¸  )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rý  r  r  r  r!  r'  r+  Ú__static_attributes__Ú__classcell__)rÿ  s   @r   rö  rö  �  s,   ø† õôòMõò$5ò45÷05ð 5r   rö  Ú__main__z0.0.0.0zLive server on http://0.0.0.0:z  (Ctrl+C to stop)r*   )rg   )Nr,  )rÜ   )rô  )rL  )r,  )r•  )gš™™™™™Ù?)rs   )r
   )r	   )NN)zr  ÚsysrV   rA   r   r7  r5   Úhttp.serverÚhttpÚsocketserverÚurllib.parser¦   Úurllib.requestrÌ   rO   rÌ  Úpathlibr   Ú__file__Úparentr9   r  rY   Ú
executabler7   ÚPORTrî   rC   ÚWL_PATHrQ   r©   r#   r    r!   r   r&   ÚLockr1   r?   rE   rG   rd   Úcompilerm   rq   r€   r‚   r†   rŒ   r�   r’   r¡   r±   rÖ   rë   rð   rò   r  rË   ÚdirnameÚabspathr  r  r  r%  r  r!  r6  r  r  r"  r/  r1  r:  rI  r8  r9  r;   rO  rR  rY  r`  rƒ  r›  r�  rž  r  rÁ  rÎ  r×  rÙ  rà  rå  rè  rò  rÿ  r  r  r  r)  r8  rO  rV  r…  r¡  rÁ  rÃ  rã  rè  rô  ÚserverÚSimpleHTTPRequestHandlerrö  r-  Úchdirro   Ú	TCPServerÚallow_reuse_addressÚThreadingTCPServerÚhttpdr3   Úserve_foreverrD   r   r   Ú<module>rL     sh  ðó 
Û 
Û Û Û Û Û Û Û Û Û Û 	Û Û Ý áˆHƒ~×Ñ€Ø‡Z�Z‡^�^�J §¡Ó/€Ø€Ùˆr�z‰z�~‰~Ð.°Ó5Ó6€Ø
Ð!Ñ
!€Ø
�Ñ
€àÐ=Ð>€ð (Ð);Ð<Ð Ø€ØÐ òMòð$ �nŠnÓ€òò.òAò!ðH �JŠJÐ+Ó,€	ò3ôòò+ò
òò òô Pò"ôJ;ò@òKð �G‰G�L‰L˜Ÿ™Ÿ™¨¯©¯©¸Ó)BÓCÐEWÓX€	Ø€Ø€
Ø€Ø�NŠNÓ€	Ø
€Ø€ôò4òò$1"òfBòô"Rð2	Ù×ÑØ×Ò °TÑ:×@Ñ@ÔBð  2Ñ&€ò&ò$òiô)BôX"<ðL �>Š>Ó€Øˆ5€ô"ô#:ôL.ò<òò
ò
òòô$ò"òòlò)xòV#xòJ 	J€Ú{€ô3xòj-xò^IòBòM+ò^.ò2Pô<f5�T—[‘[×9Ñ9ô f5ðR ˆzÓÙ„IØ×Ò˜I¨dÑ3×9Ñ9Ô;Ø‡H‚HˆT„NØ€GØ15€L×ÑÔ.Ø	×	(Ò	(¨)°TÐ):¸GÔ	DÈÙÐ.¨t¨fÐ4FÐGÈtÒTØ×ÑÔ÷ 
EÐ	Dð øðK ó 	Úð	ú÷V 
EÕ	Dús   Æ+K, ËK9Ë,K6Ë5K6Ë9
L