
    6Jju                    h   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mZ  e	e      j!                         j,                  d   Zedz  Zd	Zd
ZdZdZdZdZdZdZ g dZ!ddddZ"dg dddg dddg ddde  g ddg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*Z/d>d+Z0	 d?	 	 	 	 	 	 	 	 	 d@d,Z1dAd-Z2dAd.Z3d?dBd/Z4dCd0Z5e6d1k(  r e5        yy)DzHSummarize storage/producer context for opcode 0x24 runtime enabled flag.    )annotationsN)Path)Any)offset_to_varead_sectionsva_to_offset   outmap1_01amap2_02diMY @ i@ i8@ i,@ zKruntime_selected_pointer_patched_public_selector_2_0_active_order_poll.json)opcode24Mode1Sourceopcode24RuntimeFlagopcode24CurrentObjectIndexzFruntime producer for 0x0059e34d if opcode 0x24 mode dispatch is neededz,runtime producer for mode1 source 0x0059e348z>selector 2:0 execution order or strict map1_01a source hotspot)zruntime-enabled-flag-producerzmode1-source-runtime-producerz%selected-root-or-strict-hotspot-proofHwanse2.exe).textz.data
0x0059e34d)pathfieldszout/save_loader_trace.json)saveReadBlockstargetVaHexsizeHexz'out/save_selector_opcode24_globals.json)rowsglobalVaHexdirectTextRefCountdirectWriteCountzout/)r   uniqueWatchValuesreachedRouteSelectorContextc                    d| dS )N0x08x values    U/home/exedev/hwanse/tools/summarize_save_selector_opcode24_runtime_enabled_context.pyhex32r&   ?   s    c{    c                "    t        | xs dd      S )N0   )intr#   s    r%   	parse_hexr,   C   s    u|R  r'   c                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)r   fallbacks     r%   	load_jsonr6   G   s*    ;;=::dnngn677r'   c                h    | D ]-  }|d   }|t        |d   |d         z   }||cxk  r	|k  s)|c S  / y )Nvasizeraw_size)max)sectionsr8   sectionstartends        r%   section_for_var@   M   sP     c'&/7:+>??BN 
 r'   c                   t        |t              }|s	d ddd d ddS |d   |d   z   }|d   |d   z   }t        |t              }|d uxr |t        |       k  }|r| |   nd}|d   t	        |d         t	        |d         t	        |d         t	        |      t	        |      d	|t	        |      nd |t        dt        |z
        t	        t        dt        |z
              |d
|d|rdnd| dS )NFzunknown-section)sectionName runtimeEnabledFlagInKnownSectionruntimeEnabledFlagHasRawBytestaticInitialValuestaticInitialValueHexstaticInitialValueKindr8   r:   r9   r   nameTr    02xzraw-file-bytezpe-zero-filled-section-tail)rB   sectionVaHexsectionRawSizeHexsectionVirtualSizeHexsectionRawEndVaHexsectionVirtualEndVaHexrC   runtimeEnabledFlagRawOffsetHexrD   "runtimeEnabledFlagAfterRawEndBytes runtimeEnabledFlagAfterRawEndHexrE   rF   rG   zeroInitializedByPeLoader)r@   RUNTIME_ENABLED_FLAGr   lenr&   r;   )exer<   r=   
raw_end_vavirtual_end_va
raw_offsethas_raw_bytestatic_values           r%   section_summaryr[   V   s'   X';<G05,1"&%)&7
 	
 !44JT]WV_4Nh(<=JT)Cj3s8.CL&23z?Lvgdm,"7:#67!&wv!7#J/"'"7,0?I?U%
*;[_(4.1!5IJ5V.W,1#a9MPZ9Z2[,\*#%l3%7!85A/Gd)5%5 r'   c                N    | D ]   }|d   }||d   z   }||cxk  r	|k  s|c S  " y )Nrawr:   r"   )r<   offsetr=   r>   r?   s        r%   section_for_offsetr_   y   sE     gj))F S N !
 r'   c           	        g }|dk\  rm| |dz
     dv rc| |dz
     }|dk(  r|j                  d       nD|dk(  r|j                  d       n-|dk(  r|j                  d       n|d	k(  r|j                  d
       dD ]I  \  }}}}|t        |      k\  s| |t        |      z
  | |k(  s,|j                  |||t        |      f       K |sdd dddS |d   \  }}}}||||dS )Nr	   >               ra   )readr	   zmov al, ds:[addr]r	   rb   )re      zmov eax, ds:[addr]r	   rc   )writer	   zmov ds:[addr], alr	   rd   )rg   rf   zmov ds:[addr], eaxr	   )
)s   re   r	   zmov cl, byte ptr ds:[addr])s   re   rf   zmov ecx, dword ptr ds:[addr])s   rg   r	   zmov byte ptr ds:[addr], cl)s   rg   rf   zmov dword ptr ds:[addr], ecx)s   re   r	   zmov dl, byte ptr ds:[addr])s   re   rf   zmov edx, dword ptr ds:[addr])s   rg   r	   zmov byte ptr ds:[addr], dl)s   rg   rf   zmov dword ptr ds:[addr], edx)s   rg   r	   zmov byte ptr ds:[addr], imm8)s   rg   rf   zmov dword ptr ds:[addr], imm32unknownz%unclassified direct address referencer   )
accessKindwidthinstructionprefixLength)appendrT   )	datapos
candidatesopcodeprefixaccessrj   rk   prefix_lengths	            r%   classify_direct_refru      s$   J
axDqM%==cAgT>ABt^BCt^BCt^CD/ I*{ #f+$sS['8"="Gvuk3v;GHI #B	
 	
 1;1-FE;"%	 r'   c                    d| cxk  rdk  ry d| cxk  rdk  ry d| cxk  rdk  ry	 d
| cxk  rdk  ry d| cxk  rdk  ry d| cxk  rdk  ry yy)NiTj@ im@ zearly object/event handler gater   i@ z opcode 0x24 handler runtime gateiP@ i@ z(adjacent object-list/object-copy handleriA i-A z+object/stat comparison branch-state handleriB i9B z(runtime object count/availability helperiHC iSC zobject stat/attribute helperzother text routiner"   )instruction_vas    r%   classify_contextrx      s    ^1z10 2^1z11 2^1z19 2^1z1< 2^1z19 2^1z1- 2r'   c                   g }t        j                  d|      }d}	 | j                  ||      }|dk  rn|dz   }t        ||      }||d   dk7  r5t	        ||      }|Dt        | |      }	||	j                  d      xs dz
  }
|j                  t        |      t        |      t        |
      |	d   |	d   |	d	   t        |
      d
       |j                  d        |S )Nz<Ir   r	   rH   r   rl   ri   rj   rk   )
addressHexrefVaHexinstructionVaHexri   rj   rk   contextc                    | d   S )Nr|   r"   )rows    r%   <lambda>z!scan_exact_refs.<locals>.<lambda>   s    c"45 r'   key)structpackfindr_   r   ru   getrm   r&   rx   sort)rU   r<   addressr   needlesearchhitr=   ref_varefrw   s              r%   scan_exact_refsr      s    D[[w'FF
hhvv&7q$Xs3?gfo8h,>!#s+377>#:#?a@.f %n 5l+\}-'7
 	 , 	II5I6Kr'   c                   g }| j                  d      xs g D ]  }t        |j                  d            }t        |j                  d            }||z   }|t        cxk  xr |k  nc }|j                  |j                  d      |j                  d      t	        |      |j                  d      |j                  d      |j                  d      |t        dt        |z
        t	        t        dt        |z
              d	        |S )	Nr   r   r   	callVaHexsaveOffsetHexdescriptionr   )	r   r   endVaHexr   r   r   containsRuntimeEnabledFlagdistanceAfterEnddistanceAfterEndHex)r   r,   rS   rm   r&   r;   )save_loader_tracer   blocktargetr9   r?   containss          r%   save_block_rowsr      s    D"&&'78>B 599]349-.tm17C7;/ 99]3c
"YY7yy+ 99]3*2 #A';c'A B#(Q0Ds0J)K#L

 
	  Kr'   c                $   i }| D ]  }|j                  d      xs i j                         D ]s  \  }}|t        vr|j                  |i       }|xs g D ]J  }|j                  d      }||j                  |d      t	        |j                  d      xs d      z   ||<   L u  t        |j                               D 	ci c]8  \  }}|t        |j                         d       D 	cg c]
  \  }}	||	d c}	}: c}	}}}S c c}	}w c c}	}}}w )Nr   valueHexr   countc                    | d    | d   fS )Nr	   r   r"   )items    r%   r   z(aggregate_watch_values.<locals>.<lambda>   s    RVWXRYQY[_`a[bPc r'   r   )r   r   )r   itemsDIAGNOSTIC_WATCH_NAMES
setdefaultr+   sorted)
r   	aggregater   rH   valuesr   	value_row	value_hex
value_rowsr   s
             r%   aggregate_watch_valuesr      s1   +-I 	` WW%89?RFFH 	`LD&11))$3F#\r `	%MM*5	$$*JJy!$<s9==QXCYC^]^?_$_y!	`		`	` !'y'8 9 
 D*	 	$*:+;+;+=Cc$d
 	5 #U3
 	
 
s   (D

)D8D

D

c                    | j                  |      xs g }t        |      dk7  ry |d   j                  d      |k7  ry |d   j                  d      S )Nr	   r   r   r   )r   rT   )watch_valuessample_countrH   r   s       r%   stable_watch_hexr     sP    D!'RD
4yA~Aw{{7|+7;;z""r'   c           	     ^   | xs i } | s
dt         ddS | j                  d      xs g }|D cg c]  }|j                  d      s| }}|s-dt         d| j                  d      | j                  d      ddd	d
S t        d |D              t        |      t	        d      }t	        d      }t	        d      }i dddt         ddd| j                  d      d| j                  d      ddt        |      d|D cg c]%  }|j                  d      s|j                  d      ' c}d| j                  d      xs g d| j                  d      d| j                  d      d|d|d|d t        fd!t        D              d"|d#k(  d$|d#k(  |d#k(  ddd%d&S c c}w c c}w )'NFT)	available
sourcePolldiagnosticOnlyr   r   sampleCountsequenceCountr   zmissing-route-row)r   r   r   totalSampleCounttotalSequenceCountrouteSampleCountrouteSequenceCountpromotionStatusc              3  X   K   | ]"  }t        |j                  d       xs d       $ yw)r   r   N)r+   r   .0r   s     r%   	<genexpr>z1build_diagnostic_runtime_watch.<locals>.<genexpr>"  s#     T#S!7!<1=Ts   (*r   r   r   r   r   r   r   r   r   r   routeSequenceNamesrH   observedSelectorsreachedCurrentRootanyReachedCurrentRootreachedRouteSelectoranyReachedRouteSelectorContextmode1SourceValueHexruntimeFlagValueHexcurrentObjectIndexValueHexallWatchedValuesStablec              3  <   K   | ]  }t        |      d u  y wN)r   )r   rH   route_sample_countr   s     r%   r   z1build_diagnostic_runtime_watch.<locals>.<genexpr>6  s(      &
 \+=tDDP&
s   $runtimeFlagStaysDisabledInDiagnostic0x00 mode1SourceStaysZeroInDiagnosticzdiagnostic-only)'currentObjectIndexStaysZeroInDiagnosticnormalRouteProofnotRoutePromotionProofr   )DIAGNOSTIC_WATCH_POLLr   sumr   r   rT   allr   )	active_order_pollall_rowsr   
route_rowsmode1_sourceruntime_flagcurrent_object_indexr   r   s	          @@r%   build_diagnostic_runtime_watchr     s_   )/R/"
 	

 !$$V,2H!)T#SWW5R-S#TJT/" 1 5 5m D"3"7"7"H !"#2	
 		
 TTT)*5L#L2DF[\L#L2DF[\L+L:LNjkT+ 	$ 	-11-@	
 	/33OD 	. 	c*o 	*X3PVswwvX 	.223FGM2 	/334KL 	 1 5 56V W 	| 	| 	%&: 	!# &
.&
 #
& 	/0F'( 	+LF,B)* 4H63Q!"&,1 # U2 Ys   F%F%F*F*c                   t        |       }t        | |      }t        | |t              }t	        |      }t        d |j                  d      xs g D        i       }t        d |D              }	t        d |D              }
|D cg c]
  }|d   s	| }}t        d |D        d       }t        |      }d}t        t              }|D cg c]  }t        |    }}i dt        d	t        d
t        t              dt        t              dt        t              dt        t               dt        t"              d|d|dt%        |      dt'        |      d|	d|
d|j                  d      d|j                  d      d|j                  d      d|i d|d|
dk(  d| d|j                  d      dk(  d|d d!d"d#d$d#d%d#d&d#d'|d(|d)t(        d*t'        t(              d+d,d-g d.d/|S c c}w c c}w )0Nc              3  d   K   | ](  }|j                  d       t        t              k(  s%| * yw)r   N)r   r&   rS   r   s     r%   r   z build_summary.<locals>.<genexpr>N  s'     tcggm>TX]^rXs>st   &00r   c              3  J   K   | ]  }|j                  d       dk(  sd  yw)ri   re   r	   Nr   r   s     r%   r   z build_summary.<locals>.<genexpr>Q  s      Q#1F&1PAQ   ##c              3  J   K   | ]  }|j                  d       dk(  sd  yw)ri   rg   r	   Nr   r   s     r%   r   z build_summary.<locals>.<genexpr>R  s      S3#'',2G72RQSr   r   c              3  d   K   | ](  }|j                  d       t        t              k(  s%| * yw)r|   N)r   r&   OPCODE24_FLAG_READr   s     r%   r   z build_summary.<locals>.<genexpr>U  s'     Y(: ;uEW?X XYr   a  Opcode 0x24 first checks runtime flag 0x0059e34d. If it is not 1, the handler advances the stream by +4 at 0x0040c52c and skips the mode-specific object-state update; if it is 1, it enters the mode dispatch at 0x0040c538. Static storage evidence puts this flag in the PE zero-filled .data tail with process-start value 0, outside the known save-loader blocks, and with no direct .text writer. The patched selector 2:0 diagnostic route row also keeps 0x0059e34d at 0x00 while reaching the constructed selector, so the diagnostic capture does not prove the mode dispatch runs. Therefore the current opcode 0x24 mode1 path is runtime-flag dependent: static and diagnostic evidence alone cannot prove that the 0x0059e348 object+0x61 write runs on the normal route path.sourcer   runtimeEnabledFlagHexhandlerVaHexflagReadInstructionVaHexflagPassTargetVaHexflagFailAdvanceVaHexstorager   'saveReadBlockContainsRuntimeEnabledFlagr   directReadCountr   !opcode24GlobalsDirectTextRefCountopcode24GlobalsDirectReadCountopcode24GlobalsDirectWriteCountrefsopcode24GateRef runtimeFlagUnwrittenStaticSourcer   runtimeFlagNotSavedataBackedruntimeFlagStaticInitialZerorE   diagnosticRuntimeWatch"modeDispatchRequiresRuntimeFlagOneT staticEvidenceProvesModeDispatchF
proofFound opcode24RuntimeEnabledProofFoundopcode24ModeDispatchProofFound#failedOpcode24RuntimeEnabledGateIdsmissingEvidenceevidenceRefsevidenceRefCountr   blockedremainingProofs)zYcapture or infer a runtime producer for 0x0059e34d if opcode 0x24 mode dispatch is neededzAcapture or infer the runtime producer for mode1 source 0x0059e348zKprove selector 2:0 execution order or find a strict map1_01a source hotspot
conclusion)r   r[   r   rS   r   nextr   r   r   list1OPCODE24_RUNTIME_ENABLED_MISSING_EVIDENCE_BY_GATEROUTE_SOURCEROUTE_TARGETr&   OPCODE24_HANDLERr   OPCODE24_FLAG_PASS_TARGETOPCODE24_FLAG_FAIL_ADVANCEboolrT   &OPCODE24_RUNTIME_ENABLED_EVIDENCE_REFS)rU   r   opcode24_globalsr   r<   r   r   blocks
global_rowdirect_read_countdirect_write_countr   containing_blocksopcode24_gate_refdiagnostic_watchr  failed_gate_idsgate_idmissing_evidences                      r%   build_summaryr  C  s    S!Hc8,G3*>?D./Ft(,,V4:t
J QQQS$SS(.T#6R2STTYY 66GH	/  LMO ' 	:'B ',',' 	 ';!<' 	./	'
 	#E*<$=' 	u%>?' 	&@ A' 	7' 	&' 	248I3J' 	c$i' 	,' 	.' 	,Z^^<P-Q' 	)*..9J*K'  	*:>>:L+M!'" 	#'$ 	,%'& 	+,>!,C''( 	',=(=)'* 	'4H(IQ(N+', 	!"2-'. 	-d/'0 	+E1'2 	e3'4 	+E5'6 	)%7'8 	.9': 	+;'< 	>='> 	C FG?'@ 	9A'B 	 
C'L 	jM' '+ U"s   
G3G3G8c                	   | d   }| j                  d      xs i }dj                  |j                  d      xs g       xs d}dj                  |j                  d      xs g       xs d}g ddd	| d
    d| d    d| d    dd| d    d| d    d| d    d| d    d	d|j                  d       d|j                  d       d|j                  d       dd|j                  d       d|j                  d       d |j                  d!       d"d#| d$    d%| d&    d'| d(    d'| d)    d*| d+    d,| d-    d.| j                  d/       d0| j                  d1       d2| j                  d3       d4d5j                  | j                  d6      xs g       xs d dd7t        | j                  d8      xs g        d9| j                  d:       d;| d<    dd| d=   dd>d| j                  d8      xs g D cg c]  }d?| 	 c}dd@ddAdBdC|j                  dD       dEdF|j                  dG       dEdH|j                  dI       dEdJ|j                  dK       dL|j                  dM       dNdO|j                  dP       dL|j                  dQ       dRdS| dEdT| dEdU|j                  dV       dEdW|j                  dX       dEdY|j                  dZ       dEd[|j                  d\       dEd]|j                  d^       dEd_|j                  d<       dEdd`ddadb}| dc   D ]n  }|j                  dd|j                  de       df|j                  dg       dh|j                  di       dh|j                  dj       dh|j                  dk       dl       p |j	                  g dm       | dn   D ]  }|j                  dd|j                  do       dp|j                  dq       dp|j                  dr       dp|j                  ds       dp|j                  dt       df|j                  du       dv|j                  dw       df|j                  dx      xs d dl        |j	                  g dy       |j	                  dz | d{   D               |j                  d       d|j                  |      S c c}w )}Nr   r   , r   -r   z3# Save Selector Opcode 0x24 Runtime Enabled Context z	- route: r   z -> r   z- runtime enabled flag: `r   `z- handler/read/pass/fail: `r   z` / `r   r   r   z- section: `rB   z` raw end `rM   z` virtual end `rN   z- has raw file byte: rD   z- static initial value: `rF   z` (rG   )z+- save loader block contains runtime flag: r   z- direct text refs/read/write: r    / r   r   z,- mode dispatch requires runtime flag == 1: r   z(- static evidence proves mode dispatch: r   z- proofFound: r   z(- opcode24 runtime enabled proof found: r   z&- opcode24 mode dispatch proof found: r   z*- failed opcode24 runtime enabled gates: `,r   z- missing evidence count: r   z- evidence refs: r   z- promotion status: `r   r  z## Missing Evidence- z## Diagnostic Runtime Watchz| field | value |z| --- | --- |z| source poll | `r   z` |z| available | `r   z| diagnostic only | `r   z| route samples | `r   z
` across `r   z` route-reaching sequence(s) |z| total samples | `r   r   z` sequence(s) |z| route sequence names | `z| observed selectors | `z| mode1 source | `r   z| runtime flag | `r   z| current object index | `r   z| all watched values stable | `r   z| normal route proof | `r   z| promotion status | `z## Direct Text Referencesz=| instruction | access | width | context | instruction text |z | --- | --- | ---: | --- | --- |r   z| `r|   z` | ri   z | rj   r}   rk   z |)r  z## Save Read Blocksr  zZ| call | target | end | save offset | size | contains | distance after end | description |z2| --- | --- | --- | --- | --- | --- | ---: | --- |r   r   z` | `r   r   r   r   r   z | `r   r   )r  z## Remaining Proofsr  c              3  &   K   | ]	  }d |   yw)r   Nr"   r   r   s     r%   r   zmarkdown.<locals>.<genexpr>  s     D2dVDs   r   
)r   joinrT   rm   extend)summaryr   
diagnosticobserved_selectorsroute_sequencesr   linesr   s           r%   markdownr+    se   i G56<"J:>>2E#F#L"MTQTii
/C D JKRsO1=1
1 GH%&d78+<*=>1 $G,C$D#EQG	1
 &gn&=%>eGLfDgChhmnu  wL  oM  nN  NS  T[  \r  Ts  St  tu  	v1 w{{=12+gkkJ^>_=``opwp{p{  }U  qV  pW  WX  	Y1  ,J KLM1 $GKK0G$H#IW[[YqMrLsstu1 6g>g6h5ij1 *'2F*G)HGTeLfKggjkr  tF  lG  kH  	I1 7w?c7d6ef1 37;]3^2_`1 \2341 37;;?a3b2cd1 1=]1^0_`1  5SXXgkkJo>p>vtv5w5~{~4  @A  	B!1" %S5F)G)M2%N$OP#1$ GKK(:;<=%1&  (9 :;1='1( 	)1* 	+1, 	-1. 	/10 	112 #*++.?"@"FB	G$Btf+	G314 	516 	&718 	91: 	;1< 	=1> JNN<89=?1@ *..56c:A1B  
/? @AEC1D jnn-?@AJNN[oLpKq  rP  	QE1F jnn-?@AJNN[oLpKq  rA  	BG1H %_$5S9I1J ##5"6c:K1L Z^^,ABC3GM1N Z^^,ABC3GO1P %Z^^4P%Q$RRUVQ1R **..9Q*R)SSVWS1T #:>>2D#E"FcJU1V !0A!B C3GW1X 	Y1Z 	$[1\ 	]1^ 	H_1` 	+a1Ed v 
#'',-.d377<3H2ISWWU\M]L^^awwy!"#cggm&<%=RA	


 
LL   '( 
#''+&'uSWW]-C,DE#''R\J]I^ _()swwy/A.B$swwOkGlFm n-./tCGGM4J4Qc3RRTV	

 
LL01	LLD1B)CDD	LL99U] 
Hs   Sc                Z   | d   }| j                  d      xs i }dj                  |j                  d      xs g       xs d}dj                  |j                  d      xs g       xs d}dj                  d | d	   D              }dj                  d
 | d   D              }dj                  d | d   D              }dj                  d | j                  d      xs g D              xs d}dj                  dt        j                  t	        |j                  d                   ddt        j                  t	        |j                  d                   ddt        j                  t	        |j                  d                   ddt        j                  t	        |j                  d                   dt        j                  t	        |j                  d                   ddt        j                  t	        |j                  d                   dt        j                  t	        |j                  d                   d d!t        j                  |       dd"t        j                  |       dd#t        j                  t	        |j                  d$                   dd%t        j                  t	        |j                  d&                   dd't        j                  t	        |j                  d(                   dd)t        j                  t	        |j                  d*                   dd+t        j                  t	        |j                  d,                   dd-t        j                  t	        |j                  d.                   dg      }	dj                  g d/d0d1d2d3t        j                  | d4          d5t        j                  | d6          d7d8t        j                  | d9          d:d;t        j                  | d<          d=t        j                  | d>          d=t        j                  | d?          d=t        j                  | d@          d:	dAt        j                  t	        |j                  dB                   dCt        j                  t	        |j                  dD                   dEt        j                  t	        |j                  dF                   d:dG|j                  dH       d7dIt        j                  t	        |j                  dJ                   dKt        j                  t	        |j                  dL                   d7dM| dN    d7dO| dP    dQ| dR    dQ| dS    d7dT| dU    d7dV| dW    d7dX| j                  dY       d7dZ| j                  d[       d7d\| j                  d]       d7d^t        j                  d_j                  | j                  d`      xs g       xs d       d:dat        | j                  d      xs g        d7db| j                  dc       d7ddt        j                  | d.          d:dedft        j                  | dg          dhdi|dedjdk|	dldmdn|dldodp|dldq|de      S )rNr   r   r  r   r  r   r#  c              3    K   | ]  }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                   d  y	w)
<tr><td><code>r|   </code></td><td>ri   z	</td><td>rj   r}   rk   
</td></tr>Nhtmlescapestrr   r   s     r%   r   zhtml_page.<locals>.<genexpr>  s      	 	[[SWW-?%@!ABC D{{3sww|4567 8{{3swww/012 3{{3swwy1234 5{{3sww}5678 9		s   C3C5r   c              3    K   | ]`  }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                   d|j                  d       d	t        j                  t        |j                  d
                   dt        j                  t        |j                  d      xs d             d c yw)r.  r   z</code></td><td><code>r   r   r   r   r/  r   z</td><td><code>r   r   r  r0  Nr1  r   s     r%   r   zhtml_page.<locals>.<genexpr>  s+      	[[SWW[%9!:;< =[[SWW]%;!<=> ?[[SWWZ%8!9:; <[[SWW_%=!>?@ A[[SWWY%7!89: ;ww345 6[[SWW-B%C!DEF G{{3sww}5<=>? @		s   E'E)r   c              3  N   K   | ]  }d t        j                  |       d  ywz<li></li>Nr2  r3  r"  s     r%   r   zhtml_page.<locals>.<genexpr>  s#     ^4dkk$/06^   #%r   c              3  N   K   | ]  }d t        j                  |       d  ywr7  r9  r"  s     r%   r   zhtml_page.<locals>.<genexpr>  s(      ,0$t{{4 !'r:  r   z
<li>-</li>z"<tr><th>source poll</th><td><code>r   z</code></td></tr>z <tr><th>available</th><td><code>r   z&<tr><th>diagnostic only</th><td><code>r   z$<tr><th>route samples</th><td><code>r   z</code> across <code>r   z,</code> route-reaching sequence(s)</td></tr>z$<tr><th>total samples</th><td><code>r   r   z</code> sequence(s)</td></tr>z+<tr><th>route sequence names</th><td><code>z)<tr><th>observed selectors</th><td><code>z#<tr><th>mode1 source</th><td><code>r   z#<tr><th>runtime flag</th><td><code>r   z+<tr><th>current object index</th><td><code>r   z0<tr><th>all watched values stable</th><td><code>r   z)<tr><th>normal route proof</th><td><code>r   z'<tr><th>promotion status</th><td><code>r   ze<!doctype html><meta charset="utf-8"><title>Save Selector Opcode 0x24 Runtime Enabled Context</title>a(  <style>body{font-family:system-ui,sans-serif;background:#111;color:#eee;max-width:1180px;margin:24px auto;line-height:1.45}table{border-collapse:collapse;width:100%;margin:16px 0 28px}td,th{border:1px solid #444;padding:6px 8px;vertical-align:top}th{background:#202020}code{color:#9bd4ff}</style>z:<h1>Save Selector Opcode 0x24 Runtime Enabled Context</h1>z<ul>z<li>route: r   z -&gt; r   r8  z <li>runtime enabled flag: <code>r   z</code></li>z"<li>handler/read/pass/fail: <code>r   z</code> / <code>r   r   r   z<li>section: <code>rB   z</code> raw end <code>rM   z</code> virtual end <code>rN   z<li>has raw file byte: rD   z <li>static initial value: <code>rF   z	</code> (rG   z-<li>save loader block contains runtime flag: r   z!<li>direct text refs/read/write: r   r  r   r   z.<li>mode dispatch requires runtime flag == 1: r   z*<li>static evidence proves mode dispatch: r   z<li>proofFound: r   z*<li>opcode24 runtime enabled proof found: r   z(<li>opcode24 mode dispatch proof found: r   z1<li>failed opcode24 runtime enabled gates: <code>r  r   z<li>missing evidence count: z<li>evidence refs: r   z<li>promotion status: <code>z</ul>z<p>r  z</p>z<h2>Missing Evidence</h2><ul>z!<h2>Diagnostic Runtime Watch</h2>z<table><tbody>z</tbody></table>z<h2>Direct Text References</h2>z<table><thead><tr><th>instruction</th><th>access</th><th>width</th><th>context</th><th>instruction text</th></tr></thead><tbody>z<h2>Save Read Blocks</h2>z<table><thead><tr><th>call</th><th>target</th><th>end</th><th>save offset</th><th>size</th><th>contains</th><th>distance after end</th><th>description</th></tr></thead><tbody>z<h2>Remaining Proofs</h2><ul>)r   r$  r2  r3  r4  rT   )
r&  r   r'  r(  r)  ref_rows
block_rowsproofsmissing_itemsdiagnostic_rowss
             r%   	html_pagerA    s5	   i G56<"J:>>2E#F#L"MTQTii
/C D JKRsOyy 	 6?	 	H   +, J YY^7K\C]^^FII 4;KK@Q4R4XVX  	  ii
,T[[Z^^L=Y9Z-[,\\mn
*4;;s:>>+;V7W+X*YYjk
0SP`Aa=b1c0dduv
.t{{3z~~N`?a;b/c.ddyz~  {F  {F  GJ  KU  KY  KY  Zn  Ko  Gp  {q  zr  r^  	_
.t{{3z~~N`?a;b/c.ddyz~  {F  {F  GJ  KU  KY  KY  Zn  Ko  Gp  {q  zr  rO  	P
5dkk/6R5SSde
3DKK@R4S3TTef
-dkk#jnnMb>c:d.e-ffwx
-dkk#jnnMb>c:d.e-ffwx
5dkk#jnnUqFrBs6t5u  vG  	H
:4;;s:>>ZrKsGt;u:v  wH  	I
3DKKJNNSeDf@g4h3iiz{
1$++c*..QbBc>d2e1ffwx! O 99 *q* 	s* 	E* 		*
 dkk'("345WT[[QYIZ=[<\\ab* +4;;w?V7W+X*YYef* -T[[9P-Q,RRbcgcncnov  xR  pS  dT  cU  Ue  fj  fq  fq  ry  zO  rP  fQ  eR  Rb  cg  cn  cn  ov  wM  oN  cO  bP  P\  	]* dkk#gkk-.H*IJKKabfbmbmnqryr}r}  S  sT  oU  cV  bW  Wq  rv  r}  r}  ~A  BI  BM  BM  Nf  Bg  ~h  ri  qj  jv  	w* "'++.L"M!NeT* +4;;s7;;G^;_7`+a*bbklplwlwx{  }D  }H  }H  Ia  }b  yc  md  le  ej  	k* 8@i8j7kkpq* ,G4H,I+J#gVgNhMiilmt  vH  nI  mJ  JO  	P* 9Ae9f8gglm* 5W=_5`4aafg* 7;;|45U;*  5W[[Ac5d4eejk!*" 37;;?_3`2aafg#*$ <DKKQXQ\Q\  ^C  RD  RJ  HJ  IK  IR  OR  =S  <T  T`  	a%*& 's7;;7H+I+OR'P&QQVW'*( gkk*<=>eD)** 't{{7;L3M'N&O|\+*, 	-*. dkk',/016/*0 	(1*2 	3*4 	5*6 	,7*8 	9*: 	;*< 	=*> 	*?*@ 	KA*B 	C*D 	E*F 	$G*H 	zI*J 	K*L 	M*N 	(O*P 	Q*R 	S* * *r'   c                   |j                  dd       |dz  }|j                  t        j                  | dd      dz   d	       |9|j                  j                  dd       |j                  t        |       d	       |S )
NT)parentsexist_okz3save_selector_opcode24_runtime_enabled_context.jsonF   )ensure_asciiindentr#  r.   r/   )mkdir
write_textr2   dumpsparentrA  )r&  out_dirhtml_outjson_outs       r%   write_outputsrO  =  s    MM$M.NNH

7q9D@   dT:Ig.AOr'   c            	        t        j                  t              } | j                  dt        t
        dz         | j                  dt        t        dz         | j                  dt        t        dz         | j                  d	t        t        t        z         | j                  d
t        t               | j                  dt        d d       | j                         }t        |j                  j                         t        |j                  i       t        |j                  i       t        |j                  i             }t!        ||j"                  |j$                        }t'        d|        y )N)r   z--exer   )typedefaultz--save-loader-tracezsave_loader_trace.jsonz--opcode24-globalsz#save_selector_opcode24_globals.jsonz--diagnostic-pollz	--out-dirz
--html-outzHOptional legacy HTML output path. JSON is the default retained artifact.)rQ  rR  helpz*wrote opcode24 runtime enabled context -> )argparseArgumentParser__doc__add_argumentr   ROOTOUTr   
parse_argsr  rU   
read_bytesr6   r   r  diagnostic_pollrO  rL  rM  print)parserargsr&  rN  s       r%   mainr`  J  s6   $$9F
dD=4HI
-D#H`B`a
,4GlAlm
+$F[@[\
$<
W	   D$(("-$'',$&&+	G WdllDMMBH	6xj
ABr'   __main__)r$   r+   returnr4  )r$   
str | Nonerb  r+   )r   r   r5   r   rb  r   )r<   
list[dict]r8   r+   rb  dict | None)rU   bytesr<   rd  rb  dict)r<   rd  r^   r+   rb  re  )rn   rf  ro   r+   rb  rg  )rw   r+   rb  r4  )rU   rf  r<   rd  r   r+   rb  rd  )r   rg  rb  rd  )r   rd  rb  dict[str, list[dict[str, Any]]])r   rh  r   r+   rH   r4  rb  rc  )r   re  rb  rg  r   )
rU   rf  r   rg  r  rg  r   re  rb  rg  )r&  rg  rb  r4  )r&  rg  rL  r   rM  zPath | Nonerb  r   )rb  None)7rV  
__future__r   rT  r2  r2   r   syspathlibr   typingr   r   insertr4  __file__resolverK  probe_exe_scene_tablesr   r   r   rC  rX  rY  r  r  rS   r  r   r  r	  r   r   r  r  r&   r,   r6   r@   r[   r_   ru   rx   r   r   r   r   r   r  r+  rA  rO  r`  __name__r"   r'   r%   <module>rs     s   N "     
   3tH~--/667 8 L L H~''*
Ul!   & ' e   	Q%SH5 1 2
 ->
 :S
 ,-.N* &(!8 F'T  <**#3t &*	L	LL L #	L
 
L^L^Yx
C0 zF r'   