
    ^Ij<              
         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Zddlm	Z	 ddl
mZ ej                  j                  d e e	e      j!                         j"                               ddlmZmZ ddlmZmZ  e	e      j!                         j0                  d   Zed	z  Zd
ZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&ede de#de$de%diZ'd$dZ(d%dZ)d&dZ*d'dZ+d(d)dZ,d*dZ-d*d Z.edfd+d!Z/d,d"Z0e1d#k(  r e0        yy)-zQSummarize opcode 0x07 indexed selected-pointer rows in the current selector root.    )annotationsN)Path)Any)read_sectionsva_to_offset)handler_for_opcodesection_name_for_va   outmap1_01amap2_02diT i)T i)T i)T i*T i)T i*T i+T i@ zleaf-table-window-startzroot-table-pointerzwrapper-leafzfrontier-leafzfrontier-readerc                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)pathfallbacks     N/home/exedev/hwanse/tools/summarize_save_selector_opcode07_indexed_pointers.py	load_jsonr   ,   s*    ;;=::dnngn677    c                    d| dS )N0x08x )values    r   hex32r    2   s    c{r   c                v    t        ||      }||dz   t        |       kD  ry t        j                  d| |      d   S )N   z<Ir   )r   lenstructunpack_from)exesectionsvaoffsets       r   dword_atr*   6   s?    (B'F~!c#h.dC033r   c                    |ddiS t        | |      }|t        v rdt        |   dS t        |cxk  r	t        k  rn ndddS |rd|dS |dz	  d	k  r|d
z  dk  rddiS ddiS )Nkind
unreadablezfrontier-target)r,   targetMeaningzleaf-table-window-valuepointer)r,   targetSection   i   i  i   zscript-scalar-or-pairscalar)r	   FRONTIER_TARGETSLEAF_TABLE_STARTFRONTIER_READER)r'   r   sections      r   classify_valuer7   =   s    }%%!(E2G  )<LU<STT53O31D]^^!G<<56>g"=/00Hr   c                $	   t        |       }g }t        t        t        dz   d      D ]$  }t	        | ||      }||dz  dk7  rt        | |d      }|dz	  dz  }t	        | ||dz         }|||dz  z   nd }	|	t	        | ||	      nd }
t        ||
      }t        ||      }|	"t        |	cxk  r	t        k  rn n|	t        z
  dz  nd }|	d uxr t        |	cxk  xr	 t        k  nc }|	d uxr t        |	cxk  xr	 t        k  nc }t        |
t        v xs* t        |
t              xr t        |
cxk  xr	 t        k  nc       }|j                  i dt!        |      dt!        |      d|j#                  d      d	|j#                  d	      d
|dd|dd|t!        |      nd d|j#                  d      d|j#                  d      d|	t!        |	      nd d|d|d|d|	t$        k(  d|d ud|
t!        |
      nd d|j#                  d      |j#                  d      |j#                  d      ||j#                  d      t&        k(  d       ' |D cg c]  }|j#                  d      s| }}|D cg c]  }|j#                  d      s| }}|D cg c]  }|j#                  d      s| }}|D cg c]  }|j#                  d      s| }}|D cg c]  }|j#                  d      s| }}|D cg c])  }|j#                  d      dk(  r|j#                  d      |+ }}|xs i }d }i d!t(        d"t*        d#t!        t              d$t!        t               d%t!        t               d&t!        t&              d'd(d)t!        t              d*t!        t               d%t!        t        dz
         d+t!        t              d,t!        t$              d-t!        t,              d.t!        t.              d/t!        t              d0|j#                  d1      d2t1        |      d3t1        |      d4t1        |      t1        |      t1        |      t1        |      t1        |      |||||d5g d6|d7S c c}w c c}w c c}w c c}w c c}w c c}w )8Nr
   r"            vaHexvalueHexhandlerVaHexhandlerSectionindexindexHexr   02xoperandTableHexoperandTableKindr,   operandTableSectionr0   selectedSlotVaHexselectedSlotRootRelativeIndexselectedNegativeRootEntrySlotselectedCurrentRootEntrySlotselectedWrapperEntrySlotselectedLeafTableWindowSlotselectedValueHexselectedValueKindr.   	handlerVa)selectedValueSectionselectedTargetMeaningdirectFrontierTargetvalidOpcode07HandlerrQ   r/   a  Opcode 0x07 is the selected-pointer indexer, and its handler zero-extends the stream index byte before loading [table + index*4], so it does not provide a signed negative-index path. The current 2:0 root's opcode 0x07 rows do not select any slot in the 0x005429a8..0x00542a00 leaf-table window, including the negative wrapper entry 0x005429ac. They also do not directly select the 0x005429a8 leaf table, root table pointer 0x005429dc, wrapper leaf 0x00542a04, frontier leaf 0x00542ae8, or reader 0x00542b0c. Valid rows select script/action scalar dwords such as 0x0003e601 and 0x0011e802, not frontier pointers. This closes the opcode 0x07 direct-selection path; promotion still needs the higher-level selector index/wrapper execution proof or a strict map1_01a hotspot.sourcetargetrootHexscanRangeHexz..opcode07HandlerHexopcode07IndexModezzero-extended-u8leafTableWindowStartHexleafTableWindowHexrootTablePointerHexwrapperEntryHexwrapperLeafHexfrontierLeafHexfrontierReaderHex"leafTableContextFrontierLeafRefHexfrontierLeafRefVaHexrowCountvalidTableRowCount selectedLeafTableWindowSlotCountblocked)zTdecode the higher-level selector/table index that chooses the 2:0 leaf table entrieszEprove wrapper 0x00542a04 executes into 0x00542ae8 in the normal routez3find a strict map1_01a source coordinate or hotspot)"selectedNegativeRootEntrySlotCount!selectedCurrentRootEntrySlotCountselectedWrapperEntrySlotCountdirectFrontierTargetCountrowsdirectFrontierTargetsleafTableSlotRowsnegativeRootEntrySlotRowswrapperEntrySlotRowspromotionStatusremainingProofs
conclusion)r   rangeCURRENT_ROOTSCAN_ENDr*   r   r7   r4   ROOT_TABLE_END_EXCLUSIVEROOT_TABLE_POINTERboolr3   
isinstanceintr5   appendr    getWRAPPER_ENTRYOPCODE07_HANDLERROUTE_SOURCEROUTE_TARGETWRAPPER_LEAFFRONTIER_LEAFr#   )r&   leaf_table_contextr'   rj   r(   r   handlerr@   operand_tableselected_slot_vaselected_valueselected_classoperand_classselected_slot_root_indexselected_negative_entry_slot selected_current_root_entry_slotdirect_frontierrowdirect_frontier_rowsleaf_table_slot_rowsnegative_entry_slot_rowswrapper_entry_slot_rowscurrent_root_entry_slot_rowsvalid_table_rowsselector_contextrq   s                             r   build_summaryr   L   s   S!HDL(Q,2 3h+=UT\d2$S(D9!t# hQ78E8Q=5194W[FVFb#x1ABhl'.A&x?  + $4O7OO  22q8 	 	! D( J $4I7II 	%
 D( R"&6Q9QQ 	) .. k>3/i4D4iZi4i
 	 
U2Y
e
 GKK7
 gkk*:;	

 U
 "U3K(
 }7Pu]3VZ
  1 1& 9
 "=#4#4_#E
  <L<X'7!8^b
 ,-E
 ,-I
 +,L
 '(8M(I
 *+C4+O
  9Sn 5Y]!
"  !3!3F!;#
$ %3$6$6$G%3%7%7%H$3$+KK$<@P$P+
 	;3h ,0SC377;Q3RCSS+/ZC377;X3YCZZ/3`sww?^7_``.2Zscgg>X6YsZZ37#cC377Ca;bC#c #c77%&)3@R8S8_ 	  */R	` ","," 	5&" 	5./r%/1BC	"
 	e$45" 	/" 	"5)9#:" 	'7!8 9EBZ]^B^<_;`a" 	u%78" 	5/" 	%-" 	5/" 	U?3" 	-.>.B.BCY.Z" 	CI"  	c"23!"" 	+C0D,E#"$ /22J.K-01M-N),-D)E%()=%>!51%= 7$

 !C" ") TZ`Z#csB   Q4)Q43Q9
Q9Q>+Q>5RRR-R7.Rc                   ddd| d    d| d    d| d    d	d
| d    d	d| d    d	d| d    d| d    d| d    d| d    d| d    d| d    d| d    d| d    d	d| d    d	d | d!    d	d"| d#    d	d$| d%    d	d&| d'    d| d(   dd)d*g}| d+   D ]  }|j                  d,|d-    d.|d/    d0|d1    d2|j                  d3      xs d4 d5|j                  d6      xs d d2|j                  d7      xs d4 d0|j                  d8       d2|j                  d9      xs d4 d0|j                  d:      xs d4 d;|j                  d<      xs |j                  d=      xs d d>|j                  d?       d@        |j                  g dA       |j                  dB | dC   D               |j                  d       dDj                  |      S )ENz,# Save Selector Opcode 0x07 Indexed Pointers z	- route: rS   z -> rT   z	- root: `rU   `z- scan range: `rV   z- opcode 0x07 handler: `rW   z- opcode 0x07 index mode: rX   z- row count: rb   z- valid table row count: rc   z)- selected leaf-table window slot count: rd   z+- selected negative root-entry slot count: rf   z%- selected wrapper entry slot count: rh   z - direct frontier target count: ri   z- leaf table window: `rZ   z- wrapper entry: `r\   z- wrapper leaf: `r]   z- frontier leaf: `r^   z- frontier reader: `r_   z- promotion status: ro   rq   zh| va | value | index | table | selected slot | slot index | selected value | selected kind | frontier? |z9| --- | --- | ---: | --- | --- | ---: | --- | --- | --- |rj   z| `r<   z` | `r=   z` | r@   z | `rC   -z` rD   rF   rG   rL   rM    rO   rP   z | rQ   z |)r   z## Remaining Proofsr   c              3  &   K   | ]	  }d |   yw)z- Nr   .0items     r   	<genexpr>zmarkdown.<locals>.<genexpr>   s     D2dVDs   rp   
)rz   r{   extendjoin)summarylinesr   s      r   markdownr      s   6

GH%&d78+<*=>
GI&'q)
'.12!4
"7+?#@"AC
$W-@%A$BC

+,-
#G,@$A#BC
3G<^4_3`a
5g>b6c5de
/8W0X/YZ
*73N+O*PQ
 )=!> ?qA
W%678:
G$456a8
W%678:
w':;<A>
w'89:;

rC1E4 v 
#g,uS_$5T#g, H)*1c2"SWW=O5P5VTV4W X+,34DA`9a8b c*+2s34ww*+2s31SWW=S5T5~X[X_X_`wXx5~|~4  @Cww-./r3	

 
LL01	LLD1B)CDD	LL99Ur   c           &     n   g }| d   D ]x  }|j                  d      xs d d|j                  d      xs d }|j                  d      xs d d|j                  d      xs |j                  d	      xs d }|j                  d
t        j                  |d          dt        j                  |d          d|d    dt        j                  |       dt        j                  |j                  d      xs d       dt        j                  t	        |j                  d                   dt        j                  |j                  d      xs d       dt        j                  |       d|j                  d       d       { dj                  d | d   D              }dj                  ddddddd d!d"d#d$d%d&d'd(d)d*t        j                  | d+          d,t        j                  | d-          d.| d/    d0| d1    d2| d3    d4d5t        j                  | d6          d7| d8    d9| d:    d;| d<    d=| d>    d?| d@    dA| dB    dCt        j                  | dD          dEdF| dG    dH| dI    dJ| dK    dL| dM    dN| dO    d4dPt        j                  | dQ          dEdRdSdj                  |       dTdUdV| dWdXdYdg      S )ZNrj   rC   r   r   rD   r   rM   rO   rP   z<tr><td><code>r<   z</code></td><td><code>r=   z</code></td><td>r@   z</td><td><code>rF   rG   rL   z	</td><td>rQ   z
</td></tr>c              3  N   K   | ]  }d t        j                  |       d  yw)z<li>z</li>N)htmlescaper   s     r   r   zhtml_page.<locals>.<genexpr>   s#     adDT!2 359as   #%rp   r   z<!doctype html>z<html lang="en">z<head>z  <meta charset="utf-8">zF  <meta name="viewport" content="width=device-width, initial-scale=1">z;  <title>Save Selector Opcode 0x07 Indexed Pointers</title>z	  <style>z[    body { margin: 24px; background: #111; color: #eee; font: 14px system-ui, sans-serif; }zJ    table { border-collapse: collapse; width: 100%; margin: 18px 0 28px; }zP    th, td { border: 1px solid #3a3a3a; padding: 6px 8px; vertical-align: top; }z9    th { background: #202020; position: sticky; top: 0; }z    code { color: #9bd4ff; }z
  </style>z</head>z<body>z5  <h1>Save Selector Opcode 0x07 Indexed Pointers</h1>z  <p>route: rS   z -&gt; rT   z; root <code>rU   z</code>; scan range <code>rV   z#</code>; opcode 0x07 handler <code>rW   z</code>.</p>z  <p>index mode: rX   z; row count: rb   z; valid table row count: rc   z); selected leaf-table window slot count: rd   z+; selected negative root-entry slot count: rf   z%; selected wrapper entry slot count: rh   z ; direct frontier target count: ri   z; promotion status: ro   z</p>z  <p>leaf table window: <code>rZ   z</code>; wrapper entry <code>r\   z</code>; wrapper leaf <code>r]   z</code>; frontier leaf <code>r^   z</code>; frontier reader <code>r_   z  <p>rq   z  <table><thead><tr><th>va</th><th>value</th><th>index</th><th>table</th><th>selected slot</th><th>slot index</th><th>selected value</th><th>selected kind</th><th>frontier?</th></tr></thead>z	  <tbody>z</tbody></table>z  <h2>Remaining Proofs</h2>z  <ul>z</ul>z</body>z</html>)r{   rz   r   r   strr   )r   bodyr   tabler,   proof_itemss         r   	html_pager      s   Dv 
77,-45Qsww?Q7R7XVX6YZ''-.5#6a@V8W  9B[^[b[bcz[{  9B  @B  8C  DS\23 4S_56 7w<. !U+, -SWW-@%A%HSIJ K;;s377+J#KLMN OSWW-?%@%GCHI J;;t$% &77123 4
	

  ''agN_F`aaK99"PEeTZC&?
t{{78#456gdkk'RZJ[>\=]]jkrs|k}j~  Y  Za  bp  Zq  Yr  rU  V]  ^r  Vs  Ut  t@  	A
DKK0C(DEFmT[\fTgSh  iB  CJ  K_  C`  Ba  aJ  KR  Su  Kv  Jw  wb  cj  kO  cP  bQ  Qv  w~  ^  w_  v`  `@  AH  Id  Ae  @f  fz  {  {F  {F  GN  O`  Ga  {b  zc  cg  	h
(1E)F(GGdelm~e  eA  A]  ^e  fv  ^w  ]x  xU  V]  ^o  Vp  Uq  qP  QX  Yl  Qm  Pn  nz  	{
GL12348 	I
BGGDM?"23%
U#
7  r   c                    |j                  dd       |dz  j                  t        j                  | dd      d       |:|j                  j                  dd       |j                  t        |       d       y y )	NT)parentsexist_ok,save_selector_opcode07_indexed_pointers.jsonF),:)ensure_ascii
separatorsr   r   )mkdir
write_textr   dumpsparentr   )r   out_dirhtml_outs      r   write_outputsr     s{    MM$M.==II

7:F J  dT:Ig.A r   c                    t        j                         } | j                  dt        t        dz         | j                  dt        t
               | j                  dt        d d       | j                         }t        |j                  j                         t        |j                  dz  i             }t        ||j                  |j                         t        d	|j                  d
z          y )Nz--exezHwanse2.exe)typedefaultz	--out-dirz
--html-outz!Optional HTML report output path.)r   r   helpz%save_selector_leaf_table_context.jsonz&wrote opcode 0x07 indexed pointers -> r   )argparseArgumentParseradd_argumentr   ROOTOUT
parse_argsr   r&   
read_bytesr   r   r   r   print)parserargsr   s      r   mainr   #  s    $$&F
dD=4HI
$<
4DghD$,,!HH"MG '4<<7	24<<Bp3p2q
rsr   __main__)r   r   r   r   returnr   )r   ry   r   r   )r&   bytesr'   
list[dict]r(   ry   r   
int | None)r'   r   r   r   r   dict)N)r&   r   r   zdict | Noner   r   )r   r   r   r   )r   r   r   r   r   zPath | Noner   None)r   r   )2__doc__
__future__r   r   r   r   r$   syspathlibr   typingr   r   insertr   __file__resolver   probe_exe_scene_tablesr   r   summarize_script_handler_tabler   r	   r   r   r   r~   r   rs   rt   r4   rv   ru   r|   r   r   r5   r}   r3   r   r    r*   r7   r   r   r   r   r   __name__r   r   r   <module>r      s,   W "     
   3tH~--/667 8 > R H~''*
Ul  %   /,.?& 84m`'T/d 25d Bt zF r   