
    Jj<t                    `   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dddZ!d/dZ"d0dZ#d1dZ$d2dZ%d3dZ&d4dZ'd5dZ(d6dZ)d7dZ*d8dZ+d9dZ,d:dZ-d;dZ.d<d Z/d=d!Z0d=d"Z1d>d#Z2d?d$Z3d@dAd%Z4dBd&Z5dCd'Z6d4d(Z7d@dDd)Z8dEd*Z9dEd+Z:d@dFd,Z;dGd-Z<e=d.k(  r e<        yy)HzCScan selected-pointer opcode paths across every save-selector root.    )annotationsN)Path)Any)read_sectionsva_to_offset)handler_for_opcodesection_name_for_va   outmap1_01amap2_02dz2:0iT ix5T i@ iɭ@ i@ )      	   c                    | y d| dS )N0x08x values    R/home/exedev/hwanse/tools/summarize_save_selector_global_selected_pointer_paths.pyhex32r   $   s    }c{    c                @    t        |        d|t        |       S d S )Nz..?)r   )startends     r   	range_hexr   *   s+    El^2COeCjEFFEFFr   c                     | sy t        | d      S )N   intr   s    r   	parse_hexr#   .   s    ub>r   c                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)pathfallbacks     r   	load_jsonr.   4   s*    ;;=::dnngn677r   c                |    |y 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_atr8   :   sG    	z(B'F~!c#h.dC033r   c                L    | j                  d       d| j                  d       S )Ngroup:slotgetrows    r   selector_labelrA   C   s&    gggq 122r   c           	         | D ch c]1  }|j                  d      rt        |j                  d            }||3 }}}t        |      S c c}}w )N	fieldMapsselectedPointerHex)r>   r#   sorted)	selectorsr@   rootrootss       r   unique_rootsrI   G   sX     77;sww';<=D	 	E  %=s   6A
c                r    | D ]2  }t        |d         }|t        |d         z   }||cxk  r	|k  s.|c S  4 y )Nr6   raw_sizer!   )r5   r6   sectionr   r   s        r   section_end_for_varM   R   sO     GDM"c'*-..BJ 
 r   c                    ||   }|dz   t        |      k  r||dz      nd }t        | |      }||t        ||      S ||S |S )Nr
   )r1   rM   min)r5   rH   indexrG   	next_rootsection_ends         r   root_endrS   [   s^    <D$)AIE
$:eai I$Xt4K!89k**!-9>;>r   c                f    | D cg c]!  }t        |j                  d            |k(  r|# c}S c c}w )NrD   )r#   r>   )rF   rG   r@   s      r   selector_rows_for_rootrU   d   s9     SWW123t; 	  s   &.c                    g }t               }| D ]C  }|j                  d      xs g D ])  }||vs|j                  |       |j                  |       + E |S )NrC   )setr>   appendadd)rowsmapsseenr@   names        r   field_maps_for_rowsr^   k   s`    D5D GGK(.B 	D4D!	
 Kr   c                d   t        |      }g }t        |      D ]  \  }}t        | ||      }t        ||      }|D cg c]  }t	        |       }	}|j                  ||t        |      t        ||      |	|	r|	d   nd t        |      |t        k(  xs t        |	v t        | |      d	        |S c c}w )Nr   )	rG   r   rootHexrangeHexselectorLabelsprimarySelectorrC   isCurrentRootrL   )rI   	enumeraterS   rU   rA   rX   r   r   r^   CURRENT_ROOTCURRENT_SELECTORr	   )
r5   rF   rH   metasrP   rG   r   rZ   r@   labelss
             r   root_metadatarj   v   s    #EE ' tx.%i6156#.%66T{!$,$,2vay,T2!\1O5E5O*8T:

 
		 L 7s   B-c                >    | d uxr t         | cxk  xr	 t        k  S c S N)CURRENT_RANGE_STARTCURRENT_RANGE_ENDr   s    r   current_range_containsro      s$    Q!4!Q@Q!QQ!QQr   c                "   |ddiS |D ]  }||d   k(  sd|d   |d   |d   dc S  |D ]9  }|j                  d	      }||d   |cxk  r|k  s&n )d
|d   |d   |d   dc S  t        | |      }|rd|dS |dz	  dk  r|dz  dk  rddiS ddiS )Nkind
unreadablerG   zselector-rootrb   rc   r`   )rq   rb   rc   r`   r   zselector-rangepointer)rq   rL   r    i   i  i   script-scalar-or-pairscalar)r>   r	   )r5   rh   r   metar   rL   s         r   classify_valuerw      s    }%% DL '"&'7"8#'(9#:	?	   hhuo?tF|u:s:("&'7"8#'(9#:	?	  "(E2G!g6656>g"=/00Hr   c           
         |dz	  dz  }t        | ||dz         }|||dz  z   nd }t        | ||      }|t        |      t        |||      t        |      t        |      t        |||      |t        k(  t	        |      dS )Nr      r0   )rP   operandTableHexoperandTableClassselectedSlotHexselectedValueHexselectedValueClassselectedCurrentRootselectedCurrentRanger8   r   rw   rf   ro   )	r4   r5   rh   r6   r   rP   tableselected_slotselected_values	            r   decode_opcode07r      s    aZ4ES(BF+E).):EEAI%Mc8];N <+HeUC /!.1,XunM-= 6~ F	 	r   c           	         |dz	  dz  }|dk(  r|dz   }d}n|dk(  rt        | ||dz         }d}nd }d}|d	|d
|t        |      t        |||      |t        k(  t	        |      dS )Nr   ry   r   r0   znext-streamr
   zstream+4-pointerzunsupported-moder   02x)modemodeHexstoredPointerSourcestoredPointerHexstoredPointerClassstoresCurrentRootstoresCurrentRanger   )r4   r5   rh   r6   r   r   storedsources           r   decode_opcode09r      s    QJ$Dqya	#xa0##Sz?%!&M,XufE#|34V< r   c                t   | j                  d      }|dk(  r| j                  d      xs i }| j                  d      || j                  d      | j                  d      ||j                  d      |j                  d      | j                  d	      d
u | j                  d      d
u d	S |dk(  r| j                  d      xs i }| j                  d      || j                  d      | j                  d      ||j                  d      |j                  d      | j                  d      d
u | j                  d      d
u d	S i S )N	opcodeHex0x07r~   vaHexvalueHexr}   rq   rc   r   Tr   )	producerVaHexproducerOpcodeHexproducerValueHexproducerPointerHexproducerPointerClassproducerPointerKindproducerPointerSelectorproducesCurrentRootproducesCurrentRange0x09r   r   r   r   r=   )r@   opcodepointer_classs      r   producer_from_rowr      s=   WW[!F 45; WWW-!' #
 3"%''*<"=$1#0#4#4V#<'4'8'89J'K#&77+@#AT#I$'GG,B$Ct$K

 
	
  45; WWW-!' #
 3"%''*<"=$1#0#4#4V#<'4'8'89J'K#&77+>#?4#G$'GG,@$AT$I

 
	
 Ir   c                    |sy|j                  d      ry|j                  d      ry|j                  d      t        | j                  d      xs g       v ry|j                  d	      }|rt        |      S d
S )Nno-local-producerr   zcurrent-rootr   zcurrent-ranger   rb   	own-ranger   unknown)r>   rW   str)rv   producerrq   s      r   producer_bucketr      sr    "||)*||*+||-.#dhh?O6P6VTV2WW<<-.D3t9+)+r   c           	     ~   | j                  d      xs g | j                  d      | j                  d      | j                  d      |j                  d      |j                  d      |j                  d      |d}|j                  d	      r(|j                  d	      |d	<   |j                  d
      |d
<   |j                  d      r(|j                  d      |d<   |j                  d      |d<   |rP|j                  d      |d<   |j                  d      |d<   |j                  d      |d<   |j                  d      |d<   |S )Nrb   rc   r`   ra   r   r   r   )rb   rc   r`   ra   r   r   r   candidateKindr}   r~   r   r   r   nearestProducerVaHexr   nearestProducerOpcodeHexr   nearestProducerPointerHexr   nearestProducerPointerClassr=   )rv   r@   rq   r   r   s        r   candidate_rowr      s2   ((#34:88$5688I&HHZ(!GGJ'WW[)	C ww!""%''*<"=$'GG,@$A !
ww!""%''*<"=$'GG,@$A !&.ll?&C"#*2,,7J*K&'+3<<8L+M'(-5\\:P-Q)*Jr   c                v    t        | ||      }|j                  d      |j                  d      t        |   k(  dS )NhandlerVaHex	handlerVa)r   validHandler)r   r>   OPCODE_HANDLERS)r4   r5   r   handlers       r   handler_contextr     s<     h7GN3K0OF4KK r   c           
        |d   }|j                  d      }i 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 }g }d }	|i ||dg g dS t        ||d      D ]  }
t        | ||
      }||dz  }|t        vr"t	        |
      t	        |      d|dd}|dk(  r|dxx   dz  cc<   |j                  t        | |||
|             |d   r|d	xx   dz  cc<   |d   r|d
xx   dz  cc<   t        |      }	|d    r|d   s|j                  t        | ||             |j                  t        ||d!             |d"k(  rB|dxx   dz  cc<   t        ||	      }|	r|	j                  d#      r|dxx   dz  cc<   |	r|	j                  d$      r|dxx   dz  cc<   |d%k(  r|dxx   dz  cc<   n8|d&k(  r|dxx   dz  cc<   n%|d'k(  r|dxx   dz  cc<   n|d(k(  r|dxx   dz  cc<   |d    sL|	rJ|	j                  d$      r9|j                  t        | ||             |j                  t        ||d)|	             |d    s|	s|	j                  d$      st        |      d*k  s|j                  t        ||d+|	             *|d,k(  s1|dxx   dz  cc<   |j                  t        | |||
|             |d-   dk(  r|dxx   dz  cc<   n|d-   dk(  r|dxx   dz  cc<   |d.   r|dxx   dz  cc<   |d/   r|dxx   dz  cc<   |j                  d0      xs i }|j                  d1      t        |j                  d2      xs g       v r|dxx   dz  cc<   t        |      }	|d    s=|d/   r8|j                  t        | ||             |j                  t        ||d3             |d    sP|d/   sWt        |      d*k  sg|j                  t        ||d4              t        |      |d<   i ||d5||dS )6NrG   r   opcode07Countr   opcode08Countopcode09Countopcode09Mode0Countopcode09Mode1Countopcode07SelectsCurrentRootCount opcode07SelectsCurrentRangeCountopcode09StoresCurrentRootCountopcode09StoresCurrentRangeCountopcode09StoresOwnRangeCount'opcode08NearestCurrentRootProducerCount(opcode08NearestCurrentRangeProducerCount$opcode08NearestOwnRangeProducerCount(opcode08NearestScriptScalarProducerCount&opcode08NearestUnreadableProducerCount#opcode08NearestNoLocalProducerCountpromotingCandidateCountF)scannedcandidateRows
sampleRowsr0   ry   r   r   )r   r   r   r   r
   r   r   rd   zopcode07-selects-current-ranger   r   r   r   rt   rr   r   z opcode08-activates-current-range   z'current-internal-opcode08-current-ranger   r   r   r   r   rc   rb   zopcode09-stores-current-rangez'current-internal-opcode09-current-rangeT)r>   ranger8   r   r   updater   r   r   rX   r   r   r1   r   rW   )r4   r5   rh   rv   r   r   countscandidate_rowssample_rowslast_producerr6   r   r   r@   bucketr   s                   r   	scan_rootr     s&   LE
((5/C 	 	a	
 	a 	*1 	+A 	)! 	*1 	&q 	21 	3A 	/ 	3A 	1!  	.q!" 	"1#F& NK!%M
{Z$Z&ZURWYZZE3" >hh+=(2YefS\*

 T>?#q(#JJsHeRGH()89Q>9)*9:a?:-c2M(S1G-H

?3&AB%%mD#?_&`at^?#q(#$T=9F!2!23H!I@AQFA!2!23I!JABaGB$=>!C>22ABaGB<'?@AE@..<=B=(]}?P?PQg?h

?3&AB%%mD#?acp&qrO$=;L;LMc;dilmxiy|~i~""=s<egt#uvt^?#q(#JJsHeRGH6{a+,1,V!+,1,&'78A=8'(89Q>9GG$89?RM  !23s488DT;U;[Y[7\\45:5-c2M(S1E-F

?3&AB%%mD#?^&_`O$-A)Bs;GWZ\G\""=s<e#fg}>h~ ),N(;F$%

 '! r   c                   d| j                  d       d| j                  d       d| j                  d       d| j                  d       d	| j                  d
       d| j                  d       d| j                  d       S )Nzop7=r   z op8=r   z op9=r   z selectCurrent=r   z storeCurrent=r   z op8Current=r   z candidates=r   r=   r?   s    r   
scan_briefr     s    
sww'(cggo.F-GuSWWUdMeLf g!CDE F ABC DggHIJ Kgg789		;r   c                   t        |       }||nt        t        dz  g       }t        ||      }|D cg c]  }t	        | |||       c}D cg c]  }|j                  d      r| c}t        d D        i       }D cg c]  }|j                  d      xs g D ]  }|   }	}}fd}
fd}t        |	      dkD  }|sdnd	}t        d
 D        d d      d d }D cg c]  }i d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d d dt        |j                  d      xs g       d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      |j                  d       |j                  d!      |j                  d"      |j                  d#      |j                  d$      |j                  d%      |j                  d&      |j                  d'      d( }}i d)t        d*t        d+t        d,t        t              d-t        t        t               d.t        |      d/t        |      d0t#        d1 D              d2 |
d      d3 |
d      d4 |
d      d5 |d      d6 |d      d7 |d      d8 |d       d9 |d      d: |d!       |d"      |j                  d d      |j                  d"d      t        |	      ||rd;nd<|	d d= |j                  d>      xs g d d? ||g d@|dAS c c}w c c}w c c}}w c c}w )BNsave_scene_selectors.jsonrd   c              3  D   K   | ]  }|j                  d       s|  yw)rd   Nr=   .0r@   s     r   	<genexpr>z build_summary.<locals>.<genexpr>  s     J1IJ     r   c                .     t         fdD              S )Nc              3  Z   K   | ]"  }t        |j                        xs d        $ ywr   Nr"   r>   r   r@   keys     r   r   z2build_summary.<locals>.<lambda>.<locals>.<genexpr>  s#     DsC 12D   (+sum)r   scanss   `r   <lambda>zbuild_summary.<locals>.<lambda>  s    DeDD r   c                .     t         fdD              S )Nc              3  Z   K   | ]"  }t        |j                        xs d        $ ywr   r   r   s     r   r   z2build_summary.<locals>.<lambda>.<locals>.<genexpr>  s#     '\3CGGCL,=A(>'\r   r   )r   non_current_scanss   `r   r   zbuild_summary.<locals>.<lambda>  s    C'\J['\$\ r   r   a  The all-selector selected-pointer scan found no non-current save-selector root that selects, stores, or locally activates the current 2:0 bounded root/range. Current 2:0 still has internal continuation stores/activations, but those do not prove a predecessor/source root enters the current root. Selected-root execution remains blocked until a runtime trace, captured selector 2:0 save, or strict map1_01a hotspot is found.zThe all-selector scan found non-current selected-pointer references into the current 2:0 bounded range. Those rows require manual/runtime review before any route promotion.c           
   3  *  K   | ]  }|j                  d       rx|j                  d      |j                  d      |j                  d      |j                  d      dd |j                  d       |j                  d      |j                  d      d	  yw)
r   rc   rb   r`   rC   Nr   r   r   )rc   rb   r`   rC   r   r   r   r=   r   s     r   r   z build_summary.<locals>.<genexpr>  s      	
 ww' $'77+<#="%''*:";779- WW[1#26!$!9<?GGDn<o+.773L+M	
s   BBc                V    | j                  d      xs d| j                  d      xs dfS )Nr   r   r   r=   r?   s    r   r   zbuild_summary.<locals>.<lambda>  s)    16Q@Y8Z8_^_` r   T)r   reverser   rc   rb   r`   ra   rL   rC   r    fieldMapCountr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   targetcurrentSelectorcurrentRootHexcurrentRangeHexselectorRowCountselectorRootCountscannedRootCountc              3  D   K   | ]  }|j                  d       sd  yw)r   r
   Nr=   r   s     r   r   z build_summary.<locals>.<genexpr>  s     Iccggi6HIr   opcode07RowCountopcode08RowCountopcode09RowCount(nonCurrentOpcode07CurrentRootSelectCount)nonCurrentOpcode07CurrentRangeSelectCount'nonCurrentOpcode09CurrentRootStoreCount(nonCurrentOpcode09CurrentRangeStoreCount nonCurrentOpcode08ActivatorCount1nonCurrentOpcode08NearestCurrentRootProducerCountzneeds-reviewblocked   r      )zNcapture a runtime selected-pointer trace proving 0x0059de30 reaches 0x00540714zOreplace the synthetic selector 2:0 savedat vector with a captured gameplay savez3find a strict map1_01a source coordinate or hotspot)2nonCurrentOpcode08NearestCurrentRangeProducerCount-currentInternalOpcode09CurrentRangeStoreCount7currentInternalOpcode08NearestCurrentRangeProducerCount!promotingSelectedPointerPathCountselectedRootExecutionRefFoundpromotionStatusr   currentInternalSampleRows$topSelectorsByOpcode08ActivatorCountselectorRootScansremainingProofs
conclusion)r   r.   OUTrj   r   r>   nextr1   rE   SOURCETARGETrg   r   rf   r   rm   rn   r   )r4   rF   r5   rh   rv   r@   current_scanscan	candidater   totalnon_current_total!selected_root_execution_ref_foundr  top_activatorscompact_scansr   r   s                   @@r   build_summaryr    s   S!H&2		#HcBceg8hI(I.E?DEtYsHeT2EE(-NSWW_5MNJJBOL &/28b  	N 
 EE\(+N(;a(?% 1		|S  	
 	
 a  
r!NZ 98 7	
sww'89	
cgg&67	
 swwy)	
 
+		

 swwy)	
 SWW_5	
 -cr2	
 S!5!;<	
 swwy)	
 SWW_5	
 SWW_5	
 SWW_5	
 !#''*>"?	
 !#''*>"?	
 .sww7X/Y	
  /8Z0[!	
" -cgg6V.W#	
$ 03ww7X/Y7:ww?h7i8;@j8k47GG<b4c8;@j8k69gg>f6g3677;`3a'*ww/H'I3	
M <"&"&" 	+" 	%-	"
 	9%8:KL" 	C	N" 	SZ" 	CIUII" 	E/2" 	E/2" 	E/2" 	34EFg4h" 	45FGi5j" 	23DEe3f" 	34EFg4h"  	+,=o,N!"" 	<=NOx=y#"$ ?PPz>{9E9I9IJkmn9oCOCSCST~  AB  DC-0-@)J-N>T]'-&2&6&6|&D&JCR%P0>*

 !C" "K FNHs   OO(O#O(GO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d+d,g}| d-   D ]  }d.j                  |j                  d/      xs g       }|j                  d0      rd1nd}|j                  d2| d| d3|j                  d4       d5|j                  d6       d7|j                  d8       d9t        |       d:        |j	                  g d;       | d<   s|j                  d=       | d<   D ]  }|j                  d>      xs( |j                  d?      xs |j                  d@      xs dA}|j                  d2d.j                  |j                  d/      xs g        d5|j                  d4       d5|j                  dB       d5|j                  dC       d7|j                  dD       d3| dE        |j	                  g dF       |j	                  dG | dH   D               |j                  d       dIj                  |      S )JNz-# Save Selector Global Selected-Pointer Paths z	- route: r   z -> r   z- current selector: `r   z` root `r   z	` range `r   `z!- selector rows / roots scanned: r    / r   z- opcode rows: 0x07=r   , 0x08=r   , 0x09=r   z5- non-current current-root selects/stores/producers: r   r   r  z6- non-current current-range selects/stores/producers: r   r   r  z3- current internal current-range stores/producers: r  r  z)- promoting selected-pointer path count: r	  z%- selected-root execution ref found: r
  z- promotion status: `r  r  z## Selector Root Countsz+| selector | root | range | maps | counts |z | --- | --- | --- | ---: | --- |r  ,rb   rd    currentz| `z | `r`   z` | `ra   z` | r   z | z |)r  z## Candidate Rowsr  z2| selector | root | va | opcode | kind | pointer |z%| --- | --- | --- | --- | --- | --- |r   z| - | - | - | - | none | - |r}   r   r   -r   r   r   z` |)r  z## Remaining Proofsr  c              3  &   K   | ]	  }d |   yw)z- Nr   r   items     r   r   zmarkdown.<locals>.<genexpr>(  s     D2dVDs   r  
)joinr>   rX   r   extend)summarylinesr@   ri   currentrs   s         r   markdownr0    s   7

GH%&d78+<*=>
(9 :;8GL\D]C^^gho  qB  iC  hD  DE  	F
+G4F,G+HGTfLgKhi
w'9:;77K]C^B__fgn  pB  hC  gD  	E
?Hr@s?ttwx  Aj  yk  xl  lo  pw  xk  pl  om  	n
@ItAu@vvy  {B  Cm  {n  zo  or  sz  {o  sp  rq  	r
=gFu>v=wwz  |C  D}  |~  {  	@
3G<_4`3ab
/8W0X/YZ
(9 :;1=

!
5*'E* *+ 
#''"239r: # 8*b&7)4	(:';5AT@UUYww'(JsO+<B@	

 
LL   ?#34' 
'',-{9K1L{PSPWPWXsPt{x{#((377#34:;<E#'')BTAUUZ[^[b[bcj[kZl m$%T#''/*B)C4yPSU	

 
LL01	LLD1B)CDD	LL99Ur   c                   dj                  d | d   D              }dj                  d | d   D              xs d}dj                  d | d	   D              }dj                  g d
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     d!| d"    d#| d$    d%t        j                  | d&          d'd(| d)    d*| d+    d,| d-    d.d/| d0    d1| d2    d1| d3    d4| d5    d1| d6    d.d7t        j                  | d8          d9d:d;|d<d=d>|d<d?| d@dA      S )BNr*  c              3    K   | ]  }d t        j                  dj                  |j                  d      xs g              d|j                  d      rdnd dt        j                  t	        |j                  d                   d	t        j                  t	        |j                  d
                   d|j                  d       dt        j                  t        |             d  yw)<tr><td><code>r$  rb   z</code>rd   r%  r  </td><td><code>r`   </code></td><td><code>ra   </code></td><td>r   z	</td><td>z
</td></tr>N)htmlescaper+  r>   r   r   r   s     r   r   zhtml_page.<locals>.<genexpr>.  s      	 	[[#''2B*C*Ir!JKLGbebibijybzT^  AC  TD D[[SWWY%7!89: ;[[SWWZ%8!9:; <ww'( ){{:c?+, -		s   C(C*r  c              3    K   | ]P  }d t        j                  dj                  |j                  d      xs g              dt        j                  t	        |j                  d                   dt        j                  t	        |j                  d                   dt        j                  t	        |j                  d                   dt        j                  t	        |j                  d                   d	t        j                  t	        |j                  d
      xs( |j                  d      xs |j                  d      xs d             d S yw)r3  r$  rb   r5  r`   r   r   r6  r   r4  r}   r   r   r&  z</code></td></tr>N)r7  r8  r+  r>   r   r   s     r   r   zhtml_page.<locals>.<genexpr>8  s=     
 	[[#''2B*C*Ir!JKL M[[SWWY%7!89: ;[[SWWW%5!678 9[[SWW[%9!:;< ={{3sww789: ;[[SWW-?%@  &OCGGL^D_  &Ocfcjcj  lG  dH  &O  LO  "P  Q  R R	
s   EEr   z"<tr><td colspan="6">none</td></tr>r  c              3  N   K   | ]  }d t        j                  |       d  yw)z<li>z</li>N)r7  r8  r(  s     r   r   zhtml_page.<locals>.<genexpr>C  s#     \tDKK-.e4\s   #%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 Global Selected-Pointer Paths</title>z	  <style>zg    :root { color-scheme: dark; font-family: system-ui, sans-serif; background: #101010; color: #eee; }z&    body { margin: 0; padding: 24px; }z[    table { width: 100%; border-collapse: collapse; margin: 12px 0 20px; font-size: 13px; }zi    th, td { border-bottom: 1px solid #303030; padding: 7px 8px; text-align: left; vertical-align: top; }z,    th { background: #181818; color: #ddd; }z    code { color: #d7f0ff; }z
  </style>z</head>z<body>z6  <h1>Save Selector Global Selected-Pointer Paths</h1>z  <p>route r   z -&gt; r   z; roots scanned r   z); promoting selected-pointer path count: r	  z%; selected-root execution ref found: r
  z; promotion status <code>r  z</code>.</p>z  <p>opcode rows: 0x07=r   r"  r   r#  r   z.</p>z9  <p>non-current current-range selects/stores/producers: r   r!  r   r  z3; current internal current-range stores/producers: r  r  z  <p>r  z</p>z  <h2>Selector Root Counts</h2>zp  <table><thead><tr><th>selector</th><th>root</th><th>range</th><th>maps</th><th>counts</th></tr></thead><tbody>z  </tbody></table>z  <h2>Candidate Rows</h2>z}  <table><thead><tr><th>selector</th><th>root</th><th>va</th><th>opcode</th><th>kind</th><th>pointer</th></tr></thead><tbody>z  <h2>Remaining Proofs</h2><ul>z</ul>z</body></html>)r+  r7  r8  )r-  	root_rowsr   proofss       r   	html_pager=  -  s   		 	 ./	 	I YY 
 ?+
 
 
0 
0  WW\IZA[\\F99     	  	#	 
 	Q  	G  	  	r  	1  	f  	t  	7  	'  	  	   	! " 	A# $ dkk'("345WT[[QYIZ=[<\\lmt  vH  nI  mJ  Js  t{  |_  t`  sa  aF  GN  On  Go  Fp  pI  JN  JU  JU  V]  ^o  Vp  Jq  Ir  r~  	% & "'*<"=!>ggN`FaEbbijq  sE  kF  jG  GL  	M' ( DGLwDxCyy|  ~E  Fp  ~q  }r  ru  v}  ~r  vs  ut  tg  ho  p_  h`  ga  ad  el  mf  eg  dh  hm  	n) * GL12348+ , 	*- . 	{/ 0 	1 2 	3 4 	$5 6 	H7 8 	9 : 	; < *&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_ok0save_selector_global_selected_pointer_paths.jsonF)r$  r;   )ensure_ascii
separatorsr%   r&   )mkdir
write_textr)   dumpsparentr=  )r-  out_dirhtml_outs      r   write_outputsrJ  g  s{    MM$M.AAMM

7:F N  dT:Ig.A r   c                    t        j                         } | j                  dt        t        dz         | j                  dt        t
        dz         | j                  dt        t
               | j                  dt        d d	       | j                         }t        |j                  j                         t        |j                  g             }t        ||j                  |j                         t        d
|j                  dz          y )Nz--exezHwanse2.exe)typedefaultz--selectorsr   z	--out-dirz
--html-outz!Optional HTML report output path.)rL  rM  helpz5wrote save selector global selected-pointer paths -> rA  )argparseArgumentParseradd_argumentr   ROOTr  
parse_argsr  r4   
read_bytesr.   rF   rJ  rH  rI  print)parserargsr-  s      r   mainrX  r  s    $$&F
dD=4HI
D#@[:[\
$<
4DghD$.."%G '4<<7	?<<LL
M	Or   __main__)r   
int | Nonereturn
str | None)r   r"   r   rZ  r[  r   )r   r\  r[  rZ  )r,   r   r-   r   r[  r   )r4   bytesr5   
list[dict]r6   rZ  r[  rZ  )r@   dictr[  r   )rF   r^  r[  	list[int])r5   r^  r6   r"   r[  rZ  )r5   r^  rH   r`  rP   r"   r[  rZ  )rF   r^  rG   r"   r[  r^  )rZ   r^  r[  z	list[str])r5   r^  rF   r^  r[  r^  )r   rZ  r[  bool)r5   r^  rh   r^  r   rZ  r[  r_  )r4   r]  r5   r^  rh   r^  r6   r"   r   r"   r[  r_  )r@   r_  r[  r_  )rv   r_  r   dict | Noner[  r   rl   )
rv   r_  r@   r_  rq   r   r   rb  r[  r_  )r4   r]  r5   r^  r   r"   r[  r_  )
r4   r]  r5   r^  rh   r^  rv   r_  r[  r_  )r4   r]  rF   zlist[dict] | Noner[  r_  )r-  r_  r[  r   )r-  r_  rH  r   rI  zPath | Noner[  None)r[  rc  )>__doc__
__future__r   rO  r7  r)   r2   syspathlibr   typingr   r,   insertr   __file__resolverG  probe_exe_scene_tablesr   r   summarize_script_handler_tabler   r	   r?  rR  r  r  r  rg   rf   rm   rn   r   r   r   r#   r.   r8   rA   rI   rM   rS   rU   r^   rj   ro   rw   r   r   r   r   r   r   r   r   r  r0  r=  rJ  rX  __name__r   r   r   <module>ro     sO   I "     
   3tH~--/667 8 > R H~''*
Ul		     

G843?*R8",>
,2aHk\/d7tB$ zF r   