§
    .|£jÚ!  ã                  ó€  — d Z ddlmZ ddlZddlZddlZddlZddlmZ ddlm	Z	  e
ej        d¦  «        rej                             d¬¦  «          e	e¦  «                             ¦   «         j        j        j        Zed	z  d
z  Zh d£Zh d£Zd#d„Zd$d„Zd%d„Zd&d„Zd'd „Zd(d!„Zed"k    r e e¦   «         ¦  «        ‚dS ))u  
AutoPOE2 - GÃ¡n ngá»¯ nghÄ©a offsets.target tá»« bÃ¡o cÃ¡o live MemProbe.

Chá»‰ persist RVA / offset tÆ°Æ¡ng Ä‘á»‘i / AOB (INV-OFFSET-01).
Ä�á»‹a chá»‰ heap trong JSON report bá»‹ bá»� qua.

  python tools/re_pipeline/label_targets.py --report bin/Release/live_label_6A9E477A.json
é    )ÚannotationsN)Údatetime)ÚPathÚreconfigureúutf-8©ÚencodingÚdatazpoe2_offsets.db>	   Úxyz_addrÚ	mana_addrÚcamera_addrÚingame_addrÚplayer_addrÚshield_addrÚspirit_addrÚterrain_addrÚfog_density_addr>
   ÚManaÚWardÚSpiritÚ	EntityMapÚInGameStateÚLocalPlayerÚAreaInstanceÚEnergyShieldÚLifeComponentÚPositionComponentÚvalueÚstrÚreturnc                ó^   — dt          t          t          | ¦  «        d¦  «        d¦  «        z   S )NÚ0xé   ÚX)ÚformatÚintr   )r   s    ú7C:\Projects\AutoPOE2\tools\re_pipeline\label_targets.pyÚnorm_rvar(   #   s'   € Ø•&��S ™ZœZ¨Ñ,Ô,¨cÑ2Ô2Ñ2Ð2ó    Úreport_pathr   Údb_pathÚ	toml_pathúPath | Noner&   c                óÄ  — t          j        |                      d¬¦  «        ¦  «        }|                     d¦  «        dk    r3t	          d|                     d¦  «        › �t
          j        ¬¦  «         dS |                     d¦  «        pd	}|                     d
¦  «        p%t          j        ¦   «          	                    d¦  «        }|                     d¦  «        pg }|st	          d¦  «         dS |j
                             dd¬¦  «         t          j        t          |¦  «        ¦  «        }d}d}		 |                     d¦  «         |D �]Y}
t          |
                     d¦  «        pd	¦  «        }t          |
                     d¦  «        pd¦  «        }|t           v s	|t           v rt	          d|› d|› �¦  «         Œs|t"          vrt	          d|› �¦  «         Œ�t%          t          |
                     d¦  «        pd¦  «        ¦  «        }t          |
                     d¦  «        pd	¦  «        }t          j        |||dœd¬¦  «        }|                     d||||f¦  «        }|j        r|j        dk    r||j        z  }�Œ6|                     d ||||d!d"||f¦  «         |	dz  }	�Œ[|                     ¦   «          |                     ¦   «          n# |                     ¦   «          w xY w|r9|                     ¦   «         r%t1          ||||                     d#¦  «        ¦  «         t	          d$|› d%|	› d&|› �¦  «         t	          d'|› �¦  «         |rt	          d(|› �¦  «         dS ))Nr   r   Úschemazautopoe2.live_label/v1u"   [ERROR] Schema khÃ´ng há»— trá»£: ©Úfileé   Úbuild_idÚ Úgenerated_atz%d/%m/%Y %H:%M:%SÚlabelsu<   [WARN] Report khÃ´ng cÃ³ labels â€” giá»¯ target=unreviewed.é   T)ÚparentsÚexist_okr   a  
            CREATE TABLE IF NOT EXISTS offsets (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                build_id TEXT NOT NULL,
                kind TEXT NOT NULL,
                target TEXT NOT NULL,
                payload TEXT NOT NULL,
                validator_id TEXT,
                source TEXT NOT NULL,
                discovered_at TEXT NOT NULL,
                last_verified TEXT,
                hit_count INTEGER DEFAULT 0,
                miss_count INTEGER DEFAULT 0
            )
            ÚtargetÚkindÚaob_patternu&   [INV-OFFSET-01] Bá»� qua khÃ³a cáº¥m: ú/u   [WARN] target láº¡ bá»‹ bá»�: ÚrvaÚ0Úevidence)Ú
target_rvar;   r@   F)Úensure_asciia0  
                UPDATE offsets
                   SET target = ?, last_verified = ?, hit_count = hit_count + 1,
                       validator_id = 'ValidateInGameState'
                 WHERE build_id = ?
                   AND upper(json_extract(payload, '$.target_rva')) = upper(?)
                a  
                INSERT INTO offsets (
                    build_id, kind, target, payload, validator_id, source,
                    discovered_at, last_verified, hit_count, miss_count
                ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, 0)
                ÚValidateInGameStateÚ
live_labelÚentity_map_offsetz[OK] labels applied: updated=z
 inserted=z build=z     db=z
     toml=)ÚjsonÚloadsÚ	read_textÚgetÚprintÚsysÚstderrr   ÚnowÚstrftimeÚparentÚmkdirÚsqlite3Úconnectr   ÚexecuteÚ	FORBIDDENÚALLOWED_TARGETSr(   ÚdumpsÚrowcountÚcommitÚcloseÚis_fileÚannotate_toml)r*   r+   r,   Úpayloadr3   r5   r6   ÚconnÚupdatedÚinsertedÚlabelr:   r;   r>   r@   Úpayload_jsonÚcurs                    r'   Úapply_labelsrc   '   s°  € ÝŒj˜×.Ò.¸Ð.Ñ@Ô@ÑAÔA€GØ‡{‚{�8ÑÔÐ 8Ò8Ð8ÝÐJ°7·;²;¸xÑ3HÔ3HÐJÐJÕQTÔQ[Ð\Ñ\Ô\Ð\Øˆqà�{Š{˜:Ñ&Ô&Ð,¨"€HØ—;’;˜~Ñ.Ô.Ð^µ(´,±.´.×2IÒ2IÐJ]Ñ2^Ô2^€LØ�[Š[˜Ñ"Ô"Ð( b€FØð ÝÐLÑMÔMÐMØˆqà„N×Ò °ÐÑ5Ô5Ð5ÝŒ?�3˜w™<œ<Ñ(Ô(€DØ€GØ€HðCØ�Šðñ	
ô 	
ð 	
ð" ð .	ñ .	ˆEÝ˜Ÿš 8Ñ,Ô,Ð2°Ñ3Ô3ˆFÝ�u—y’y Ñ(Ô(Ð9¨MÑ:Ô:ˆDØ�Ð"Ð" d­iÐ&7Ð&7ÝÐN¸vÐNÐNÈÐNÐNÑOÔOÐOØØ�_Ð,Ð,ÝÐ?°vÐ?Ð?Ñ@Ô@Ð@ØÝ�3˜uŸyšy¨Ñ/Ô/Ð6°3Ñ7Ô7Ñ8Ô8ˆCÝ˜5Ÿ9š9 ZÑ0Ô0Ð6°BÑ7Ô7ˆHÝœ:Ø"¨D¸hÐGÐGØ"ðñ ô ˆLð —,’,ðð ˜ x°Ð5ñ	ô 	ˆCð Œ|ð  ¤¨qÒ 0Ð 0Ø˜3œ<Ñ'�ÙØ�LŠLðð ØØØ Ø)Ø Ø Ø ð	ñô ð ð$ ˜‰MˆH‰HØ�Š‰Œˆà�
Š
‰Œˆˆøˆ�
Š
‰Œˆˆøøøàð Y�Y×&Ò&Ñ(Ô(ð YÝ�i ¨°w·{²{ÐCVÑ7WÔ7WÑXÔXÐXå	Ð
X¨'Ð
XÐ
X¸XÐ
XÐ
XÈhÐ
XÐ
XÑYÔYÐYÝ	Ð
�WÐ
Ð
ÑÔÐØð (ÝÐ&˜9Ð&Ð&Ñ'Ô'Ð'Øˆ1s   Ä3FK ËK$r6   Úlistr5   ú	list[str]c                óÐ  — g }t          ¦   «         }| D ]Ò}t          |                     d¦  «        pd¦  «        }|t          v s	|t          vrŒ9t          t          |                     d¦  «        pd¦  «        ¦  «        }||f}||v rŒs|                     |¦  «         |                     d|› d|› d|› d|                     d	¦  «        › d
|                     d¦  «        › �
¦  «         ŒÓ|S )Nr:   r4   r>   r?   z# LIVE z: z rva=z kind=r;   z
 evidence=r@   )Úsetr   rI   rT   rU   r(   ÚaddÚappend)r6   r5   ÚnotesÚseenr`   r:   r>   Úkeys           r'   Ú_unique_live_notesrm   ‡   s'  € Ø€EÝ!$¡¤€DØð 
ð 
ˆÝ�U—Y’Y˜xÑ(Ô(Ð.¨BÑ/Ô/ˆØ•YÐÐ &µÐ"?Ð"?ØÝ•s˜5Ÿ9š9 UÑ+Ô+Ð2¨sÑ3Ô3Ñ4Ô4ˆØ�sˆmˆØ�$ˆ;ˆ;ØØ�Š�‰ŒˆØ�ŠðI�lð Ið I fð Ið I°3ð Ið IØ—I’I˜fÑ%Ô%ðIð IØ16·²¸:Ñ1FÔ1FðIð Iñ	
ô 	
ð 	
ð 	
ð €Lr)   Úbodyc                óà  ‡— dŠ|D ]Z}t          |                     d¦  «        ¦  «        dk    rŒ)t          t          |                     d¦  «        pd¦  «        ¦  «        Š ‰r‰dv r| S g }g }| D ]û}|                     ¦   «         }|                     d¦  «        r»d|v r·|                     d¦  «        \  }}}		 t          |                     ¦   «                              d	¦  «        d
         ¦  «        }
n%# t          $ r | 	                    |¦  «         Y Œ¥w xY w| 	                    |
|                     ¦   «         |	                     ¦   «         f¦  «         Œæ| 	                    |¦  «         Œü|s| S d„ |D ¦   «         }‰|vr| S ‰gˆfd„|D ¦   «         z   }d„ t          |d¬¦  «        D ¦   «         }g }d}|D ]¢}|sa|                     ¦   «                              d¦  «        r:|                     |¦  «         |r!|d
         dk    r| 	                    d¦  «         d}|                     ¦   «                              d¦  «        rŒ�| 	                    |¦  «         Œ£|s|                     |¦  «         |S )uM   Ä�Æ°a RVA InGameState Ä‘Ã£ Ä‘á»‘i chuáº©n lÃªn static_root_1 (hot path Core).Nr:   r   r>   r?   )Ú0x0r?   Ústatic_root_ú=Ú_éÿÿÿÿc                ó4   — g | ]\  }}}t          |¦  «        ‘ŒS © )r(   )Ú.0rs   Úvs      r'   ú
<listcomp>z/_promote_ingame_static_root.<locals>.<listcomp>¶   s$   € Ð/Ð/Ð/™g˜a  A�h�q‰kŒkÐ/Ð/Ð/r)   c                ó    •— g | ]
}|‰k    ¯|‘ŒS rv   rv   )rw   rx   Úingames     €r'   ry   z/_promote_ingame_static_root.<locals>.<listcomp>¹   s   ø€ Ð;Ð;Ð; ¨q°Fª{¨{˜!¨{¨{¨{r)   c                ó$   — g | ]\  }}d |› d|› �‘ŒS )rq   z = rv   )rw   Úir>   s      r'   ry   z/_promote_ingame_static_root.<locals>.<listcomp>º   s-   € ÐTÐTÐT©f¨a°Ð)˜aÐ)Ð) CÐ)Ð)ÐTÐTÐTr)   r2   )ÚstartFÚaob_pattern_r4   T)r   rI   r(   ÚstripÚ
startswithÚ	partitionr&   ÚsplitÚ
ValueErrorri   Ú	enumerateÚextend)rn   r6   r`   ÚrootsÚrestÚlnÚstrippedrl   rs   ÚvalÚidxÚvaluesÚorderedÚrebuiltÚoutr_   r{   s                   @r'   Ú_promote_ingame_static_rootr‘   š   s®  ø€ à€FØð ð ˆÝˆu�yŠy˜Ñ"Ô"Ñ#Ô# }Ò4Ð4ØÝ�#˜eŸiši¨Ñ.Ô.Ð5°#Ñ6Ô6Ñ7Ô7ˆØØð �V˜|Ð+Ð+Øˆà(*€EØ€DØð ð ˆØ—8’8‘:”:ˆØ×Ò˜~Ñ.Ô.ð 		°3¸(°?°?Ø"×,Ò,¨SÑ1Ô1‰KˆC��CðÝ˜#Ÿ)š)™+œ+×+Ò+¨CÑ0Ô0°Ô4Ñ5Ô5��øÝð ð ð Ø—’˜B‘”�Ø�ðøøøð �LŠL˜#˜sŸyšy™{œ{¨C¯IªI©K¬KÐ8Ñ9Ô9Ð9Ð9à�KŠK˜‰OŒOˆOˆOØð Øˆà/Ð/¨Ð/Ñ/Ô/€FØ�VÐÐØˆØˆhÐ;Ð;Ð;Ð; VÐ;Ñ;Ô;Ñ;€GØTÐT½	À'ÐQRÐ8SÑ8SÔ8SÐTÑTÔT€Gà€CØ€HØð ð ˆØð 	˜BŸHšH™JœJ×1Ò1°.ÑAÔAð 	Ø�JŠJ�wÑÔÐØð �s˜2”w "’}�}Ø—
’
˜2‘”�ØˆHØ�8Š8‰:Œ:× Ò  Ñ0Ô0ð 	ØØ�
Š
�2‰ŒˆˆØð Ø�
Š
�7ÑÔÐØ€Js   Â8:C3Ã3DÄDÚNonec                ó  — |                       d¬¦  «        }|                     ¦   «         }t          ||¦  «        }d„ |D ¦   «         }d„ |D ¦   «         }t          ||¦  «        }|rRt	          |¦  «        dvrAt          t	          |¦  «        ¦  «        }	d„ |D ¦   «         }|                     dd|	› �¦  «         d	                     ||z   d
gz   |z   ¦  «                             ¦   «         d	z   }
|  	                    |
d¬¦  «         d S )Nr   r   c                óf   — g | ].}|                      d ¦  «        ¯|                      d¦  «        °,|‘Œ/S )ú#z# LIVE©r�   ©rw   r‰   s     r'   ry   z!annotate_toml.<locals>.<listcomp>Ð   sN   € ð ð ð ØØ�=Š=˜ÑÔðà&(§m¢m°HÑ&=Ô&=ðØ
ðð ð r)   c                ó<   — g | ]}|                      d ¦  «        °|‘ŒS )r•   r–   r—   s     r'   ry   z!annotate_toml.<locals>.<listcomp>Ô   s)   € Ð9Ð9Ð9�2 b§m¢m°CÑ&8Ô&8Ð9ˆBÐ9Ð9Ð9r)   )rp   r?   Ú0x00c                ó<   — g | ]}|                      d ¦  «        °|‘ŒS )rE   r–   r—   s     r'   ry   z!annotate_toml.<locals>.<listcomp>Ø   s*   € ÐLÐLÐL�r¨¯ªÐ7JÑ)KÔ)KÐL�ÐLÐLÐLr)   r   zentity_map_offset = ú
r4   )
rH   Ú
splitlinesrm   r‘   r   r(   ÚinsertÚjoinÚrstripÚ
write_text)r,   r6   r5   rE   ÚtextÚlinesrj   Úheaderrn   ÚemÚnew_texts              r'   r[   r[   Ì   s+  € Ø×Ò¨ÐÑ0Ô0€DØ�OŠOÑÔ€EÝ˜v |Ñ4Ô4€Eðð Øðñ ô €Fð :Ð9˜Ð9Ñ9Ô9€DÝ& t¨VÑ4Ô4€DØð 4�SÐ!2Ñ3Ô3Ð;OÐOÐOÝ•cÐ+Ñ,Ô,Ñ-Ô-ˆØLÐL˜TÐLÑLÔLˆØ�Š�AÐ2¨bÐ2Ð2Ñ3Ô3Ð3Ø�yŠy˜ %™¨2¨$Ñ.°Ñ5Ñ6Ô6×=Ò=Ñ?Ô?À$ÑF€HØ×Ò˜¨GÐÑ4Ô4Ð4Ð4Ð4r)   c                 ó´  — t          j        d¬¦  «        } |                      dd¬¦  «         |                      dt          t          ¦  «        ¬¦  «         |                      dd ¬¦  «         |                      ¦   «         }t          |j        ¦  «        }|                     ¦   «         s t          d	|› �t          j        ¬
¦  «         dS t          j        |                     d¬¦  «        ¦  «        }|                     d¦  «        pd}|j        rt          |j        ¦  «        nt"          dz  dz  d|› d�z  }t%          |t          |j        ¦  «        |¦  «        S )Nu(   GÃ¡n offsets.target tá»« live_label JSON)Údescriptionz--reportT)Úrequiredz--db)Údefaultz--tomlu   [ERROR] KhÃ´ng tháº¥y report: r0   r7   r   r   r3   r4   ÚbinÚReleaseÚoffsets_z.toml)ÚargparseÚArgumentParserÚadd_argumentr   Ú
DEFAULT_DBÚ
parse_argsr   ÚreportrZ   rJ   rK   rL   rF   rG   rH   rI   ÚtomlÚ	REPO_ROOTrc   Údb)ÚparserÚargsr*   r\   r3   r,   s         r'   Úmainr¸   Þ   sI  € ÝÔ$Ð1[Ð\Ñ\Ô\€FØ
×Ò˜
¨TÐÑ2Ô2Ð2Ø
×Ò˜­­J©¬ÐÑ8Ô8Ð8Ø
×Ò˜¨$ÐÑ/Ô/Ð/Ø×ÒÑÔ€DÝ�t”{Ñ#Ô#€KØ×ÒÑ Ô ð ÝÐ<¨{Ð<Ð<Å3Ä:ÐNÑNÔNÐNØˆqÝŒj˜×.Ò.¸Ð.Ñ@Ô@ÑAÔA€GØ�{Š{˜:Ñ&Ô&Ð,¨"€HØ#'¤9ð •�T”Y‘”�Ý�EÑ˜IÑ%Ð(B°8Ð(BÐ(BÐ(BÑBð õ ˜¥T¨$¬'¡]¤]°IÑ>Ô>Ð>r)   Ú__main__)r   r   r    r   )r*   r   r+   r   r,   r-   r    r&   )r6   rd   r5   r   r    re   )rn   re   r6   rd   r    re   )r,   r   r6   rd   r5   r   r    r’   )r    r&   )Ú__doc__Ú
__future__r   r­   rF   rQ   rK   r   Úpathlibr   ÚhasattrÚstdoutr   Ú__file__ÚresolverO   r´   r°   rT   rU   r(   rc   rm   r‘   r[   r¸   Ú__name__Ú
SystemExitrv   r)   r'   ú<module>rÃ      s—  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à
€7ˆ3Œ:�}Ñ%Ô%ð -Ø„J×Ò GÐÑ,Ô,Ð,àˆD�‰NŒN×"Ò"Ñ$Ô$Ô+Ô2Ô9€	Ø˜ÑÐ"3Ñ3€
ðð ð €	ð
ð ð €ð3ð 3ð 3ð 3ð]ð ]ð ]ð ]ð@ð ð ð ð&/ð /ð /ð /ðd5ð 5ð 5ð 5ð$?ð ?ð ?ð ?ð$ ˆzÒÐØ
ˆ*�T�T‘V”VÑ
Ô
Ðð Ðr)   