
    JjZ                       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"dZ&d#dZ'd$dZ(d%dZ)d&dZ*d'dZ+d(dZ,d)dZ-d*dZ.d+dZ/d+dZ0edfd,dZ1d-d Z2e3d!k(  r e2        yy).zOSummarize the descriptor context for the 0x00542a04 frontier wrapper candidate.    )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 ?   c                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)pathfallbacks     O/home/exedev/hwanse/tools/summarize_save_selector_wrapper_descriptor_context.py	load_jsonr   #   s*    ;;=::dnngn677    c                    d| dS )N0x08x values    r   hex32r"   )   s    c{r   c                "    | rt        | d      S d S )N   )intr    s    r   	parse_hexr&   -   s    "3ub>,,r   c                v    t        ||      }||dz   t        |       kD  ry t        j                  d| |      d   S )N   <Ir   )r   lenstructunpack_from)exesectionsvaoffsets       r   dword_atr1   1   s?    (B'F~!c#h.dC033r   c           	     &   t        j                  d|      }g }|D ]s  }|d   }||d   z   }| || }|j                  |      }	|	dk\  s,|j                  |d   |d   |	z   t	        |d   |	z         d       |j                  ||	dz         }	|	dk\  rHu |S )	Nr)   rawraw_sizer   namer/   )sectionrefVarefVaHexr
   )r+   packfindappendr"   )
r-   r.   r!   needlerefsr6   startenddataposs
             r   refs_to_valuerB   8   s    [[u%FD -gj))5~iiQhKK"6? ,!'$-#"56 
 ))FC!G,C Qh- Kr   c                    sg S t        fd| D        d       }|sg S |j                  d      xs g D cg c]%  }|j                  d      s|j                  d      ' c}S c c}w )Nc              3  L   K   | ]  }|j                  d       k(  s|  yw)leafPointerHexNget).0item	child_hexs     r   	<genexpr>z'field_maps_for_child.<locals>.<genexpr>M   s"     Y:J1Ky1XYs   $$fieldRecordsmap)nextrG   )leaf_streamsrJ   rowrecords    `  r   field_maps_for_childrR   J   s]    	
YY[_
`C	,/GGN,C,Ir_&VZZX]M^FJJu___s   A#A#c           
        t        | ||      }|t        |      ||t        |      nd t        |cxk  xr	 t        k  nc d}|d|d<   |S t	        ||      }t        | ||      }|t
        k(  rt        | ||dz         nd }|t
        k(  rT|t        |      nd }	|j                  dt        |      t        |      |	t        ||	      |t        k(  |t        k(  d       |S |r|j                  d|d       |S d	|d<   |S )
N)r/   vaHexr!   valueHexinsideCurrentRootEntryRun
unreadablekindr(   descriptor-pointer)rX   descriptorHexdescriptorMarkerHexchildPointerHexchildFieldMapspointsToWrapperDescriptorchildIsFrontierLeafpointer)rX   targetSectionscalar)
r1   r"   ROOT_TABLE_POINTERROOT_TABLE_END_EXCLUSIVEr	   DESCRIPTOR_MARKERupdaterR   WRAPPER_DESCRIPTORFRONTIER_LEAF)
r-   r.   r/   rO   r!   rP   r6   markerchildrJ   s
             r   root_table_rowrk   S   s   S(B'Er$)$5E%L4%72%X@X%XC }"F
!(E2Gc8U+F28<M2MHS(EAI.SWE""$)$5E%L4	

("5\#(=(2<K).2D)D#(M#9
 	  J 


$
 	 J FJr   c                   |d   }t        | ||      }||dz  nd }|t        | ||      ni }|dz
  }t        | ||      }||dz  nd }	|	t        | ||	      ni }
||dz	  dz  nd }|
j                  d      xs i }t        |j                  d      xs g D ch c]$  }|j                  d      r|j                  d      & c}      }|j                  d      d	u }|	d
k(  rE|dk(  r@|dgk(  r:|s8d}d}d|dd|j                  d      xs d d|j                  d      xs d d}n|rd}d	}d}nd}d}d}i |i dt	        |      d|t	        |      nd d|	d|	dnd d|d |
j                  d      d!|
j                  d      d"|d#|d$|t	        |      nd d%|d|dnd d&|j                  d'      d(|j                  d      d)|j                  d      d*|j                  d+      d	u d,|j                  d      xs i j                  d      d	u d-t
        |cxk  xr	 t        k  nc d.t        |cxk  xr	 t        k  nc |||d/S c c}w )0Nr7      r(      streamEffectfixedAdvancesbytescanJumpToDwordAtPlus4TZ   r   z"opcode-0x5a-mode0-fallthrough-wordFzThe preceding opcode 0x5a mode 0 handler advances by +4 and does not jump to [stream+4], so this dword is a following stream word rather than a selected leaf-table pointer. Interpreted as a stream word, its low opcode is 0x02xz; that handler resolves to handlerVaHex-z in handlerSectionzno executable sectionz?, so the word also does not provide a code-backed wrapper jump.z#possible-stream-plus4-branch-targetzXThe preceding handler can jump to [stream+4], so this needs separate runtime gate proof.znon-branch-stream-wordzFThe preceding handler is not known to consume [stream+4] as a pointer.previousVaHexpreviousValueHexpreviousOpcodeHexr   previousOpcodeModepreviousHandlerHexpreviousHandlerSectionpreviousHandlerFixedAdvances$previousHandlerCanJumpToDwordAtPlus4fallthroughWordValueHexfallthroughWordOpcodeHexfallthroughWordHandlerEntryHex
entryVaHexfallthroughWordHandlerHexfallthroughWordHandlerSectionfallthroughWordHandlerIsCodeisCodeHandler$fallthroughWordCanJumpToDwordAtPlus4insideCurrentRootRangerV   )referenceRolepromotesWrapperSelectionnote)r1   r   rG   sortedr"   CURRENT_ROOTrd   rc   )r-   r.   refref_va	ref_valuefallthrough_opcodefallthrough_handlerprevious_vaprevious_valueprevious_opcodehandlermodestream_effectrI   fixed_advancescan_jumprolepromotesr   s                      r   classify_wrapper_entry_refr   w   sm   \Fh/I-6-BT) ) 	3*<= 
 1*Kc8[9N/=/Int+tODSD_ h@egG+9+ENa4'4DKK/52M!%%o6<"88G 	 N
   !89TAH$419A31Fx3AASTW@X Y((;(?(?(O(VSV'W X%))*:;V?VW XL	L 	 
4i'W
{+ 	^5OE.1UY 	?;Vr/#!67\`	
 	d 	gkk.9 	!'++.>"? 	' 	/ 	"y7L5#3RV 	#EWEcb);C(@$Aim 	)*=*A*A,*O 	$%8%<%<^%L 	()<)@)@AQ)R 	'(;(?(?(PTX(X  	/ $$^4:??@WX\``#& 	!,&"S;S"S'( 	$%76%\D\%\)* $,/ 3s   )Ic                    t        |       }t        t        t        d      D cg c]  }t	        | |||       }}|D cg c]  }|j                  d      s| }}|D cg c]  }|j                  d      dk(  s| }}t        | |t              }t        | |t              D 	cg c]  }	t        | ||	       }
}	t        | |t              }|D 	cg c]  }	t        |	d   cxk  r	t        k  rn n|	 }}	|D 	cg c]  }	t        |	d   cxk  r	t        k  rn n|	 }}	|D 	cg c]  }	t        |	d   cxk  r	t        k  rn n|	 }}	|
D 	cg c]  }	|	j                  d      r|	 }}	t        d      D cg c]<  }t        t        |dz  z         t        t        | |t        |dz  z         xs d      d	> }}t        | |t        dz         }d
}i dt        dt        dt        t               dt        t              dt        t               dt        t        dz
         dt        t               dt        t        dz
         dt        t              dt        t              dt        t              dt        t"              d|t        |      nd dt%        ||t        |      nd       d|dt'        |      d|d|
dt'        |
      i dt)        d |
D              dt)        d  |
D              d!t'        |      d"|d#|d$|d%|d&|d't+        d( |D              d)t-        |      d*t-        |      d+|t        k(  d,|d-d.d/d0d1gd2|S c c}w c c}w c c}w c c}	w c c}	w c c}	w c c}	w c c}	w c c}w )3Nr(   rV   rX   rY   r7   r   rn   r   )rT   rU   a  The 0x00542a04 candidate has descriptor shape 0x3f + child pointer 0x00542ae8, but its table reference is 0x005429ac, which is before the current 2:0 root table pointer 0x005429dc. The current root entry run contains later descriptors such as 0x00542a84, 0x00542a98, 0x00542aac, 0x00542ac0, and 0x00542ad4, not 0x00542a04. The 0x00542ae8 reference at 0x00542a08 is therefore a descriptor child pointer rather than a direct current-root table entry. A separate current-root dword 0x0054090c equals 0x005429ac, but it follows opcode 0x5a mode 0 at 0x00540908; that handler advances by +4 and does not jump to [stream+4], so this is a fallthrough stream word rather than wrapper selection proof. Interpreted as the next stream word, 0x005429ac has low opcode 0xac and that handler-table entry resolves to scalar 0x00000003 outside executable code, so the word also does not provide a code-backed wrapper jump. This keeps wrapper execution/selection unproven and the route blocked.sourcetargetrootHexrootTablePointerHextableWindowHexz..currentRootEntryRunHexwrapperEntryHexwrapperDescriptorHexfrontierLeafHexfrontierReaderHexwrapperChildPointerHexwrapperChildFieldMaps	tableRowscurrentRootDescriptorCountcurrentRootDescriptorRowswrapperEntryRefswrapperEntryRefCount$wrapperEntryCurrentRootRangeRefCountc              3  D   K   | ]  }|j                  d       sd  yw)r   r
   NrF   rH   r   s     r   rK   z build_summary.<locals>.<genexpr>   s     3y#WZW^W^_wWxA3y     'wrapperEntryCurrentRootEntryRunRefCountc              3  D   K   | ]  }|j                  d       sd  yw)rV   r
   NrF   r   s     r   rK   z build_summary.<locals>.<genexpr>  s     6SZ]ZaZab}Z~q6r   wrapperEntryPromotingRefCountwrapperRefswrapperTableRefswrapperCurrentRootRefsfrontierLeafRefsfrontierLeafCurrentRootRefswrapperRefBeforeCurrentRootc              3  4   K   | ]  }|d    t         k    yw)r7   N)rc   r   s     r   rK   z build_summary.<locals>.<genexpr>  s     *kQT3w<:L+L*ks   currentRootReferencesWrapper frontierLeafDirectCurrentRootRefwrapperChildIsFrontierLeafwrapperDescriptorWordspromotionStatusblockedremainingProofsznprove a runtime path selects descriptor 0x00542a04 despite its table ref being before the current root pointerz3or find a strict map1_01a source coordinate/hotspot
conclusion)r   rangeTABLE_WINDOW_STARTrd   rk   rG   rB   rg   WRAPPER_ENTRYr   rh   rc   r"   r1   SOURCETARGETr   FRONTIER_READERrR   r*   sumanybool)r-   rO   r.   r/   
table_rowsrP   current_root_rowscurrent_root_descriptor_rowswrapper_refsr   wrapper_entry_refsfrontier_refswrapper_table_refswrapper_current_root_refsfrontier_current_root_refswrapper_entry_promoting_refsindexwrapper_descriptor_wordsrj   r   s                       r   build_summaryr      s   S!H *,DaH 	sHb,7J  )3[cgg>Y6Z[[($CGGFO?S,S$  $ !h0BCL !h> 	#3#6  "#x?M#WH0HH 	 
 $!WH0HH 	! !
 %"WH0HH 	" "
 *$77-. 	$  $ 1X 
  -	9:hsH6H5ST96TUZYZ[	
    S($6$:;E		> %&%&% 	5&% 	u%78	%
 	U#567r%@X[\@\:]9^_% 	!U+=%>$?r%H`cdHdBeAf"g% 	5/% 	&8 9% 	5/% 	U?3% 	!%2C%,% 	 !5lTYTeE%Lko!p% 	Z% 	%c*F&G% 	$%A%  	.!%" 	$6 7#%$ 	/3yAS3y0y%%& 	236DV63'%( 	(-I)J)%* 	|+%, 	.-%. 	!";/%0 	M1%2 	&'A3%4 	&s*kXj*k'k5%6 	'-F(G7%8 	+D1K,L9%: 	%e}&<;%< 	!":=%> 	9?%@ 	|A
A%H 	jI% %e \$
!"$ sA   MMMM9M#M""M'6"M,"M1M6/AM;c           !     v   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,d-g}| d.   D ]  }|j                  d/|d0    d1|j                  d2       d3|j                  d4       d5|j                  d6       d7|j                  d8      xs d9 d3d:j                  |j                  d;      xs g       xs d9 d<        |j                  g d=       | d>   D ]M  }|d?   t        k  }t        |d?   cxk  xr	 t
        k  nc }|j                  d/|d@    d3|dA    d5| d5| d<	       O |j                  g dB       | dC   D ]  }|j                  d/|d@    d3|dA    d7|j                  dD       dE|j                  dF       d1|j                  dG       d3|j                  dH       d7|j                  dI       d1|j                  dJ       dK|j                  dL       d1|j                  dM       dN|j                  dO      xs d9 d5|j                  dP       d5|j                  dQ       d5|j                  dR       d<        |j                  g dS       | dT   D ]   }|j                  d/|d0    d1|d2    dU       " |j                  g dV       |j                  dW | dX   D               |j                  d       dYj                  |      S )ZNz*# Save Selector Wrapper Descriptor Context z	- route: r   z -> r   z	- root: `r   `z- root table pointer: `r   z- current root entry run: `r   z- wrapper entry: `r   z- wrapper descriptor: `r   z- wrapper child pointer: `r   z- frontier leaf: `r   z!- current root descriptor count: r   z#- wrapper ref before current root: r   z#- current root references wrapper: r   z)- frontier leaf direct current-root ref: r   z"- wrapper child is frontier leaf: r   z- wrapper entry ref count: r   z,- wrapper entry refs in current root range: r   z0- wrapper entry refs in current root entry run: r   z - wrapper entry promoting refs: r   z- promotion status: r   r   z## Table Windowz8| va | value | root entry? | kind | child | child maps |z%| --- | --- | --- | --- | --- | --- |r   z| `rT   z` | `rU   z` | rV   z | rX   z | `r\   rv   , r]   z |)r   z## Wrapper Referencesr   z?| ref | section | before current root? | inside current root? |z| --- | --- | --- | --- |r   r7   r8   r6   )r   z## Wrapper Entry Referencesr   zy| ref | section | previous | opcode | mode | handler | fallthrough word | fallthrough handler | role | promotes? | note |zD| --- | --- | --- | --- | ---: | --- | --- | --- | --- | --- | --- |r   rx   z` `ry   rz   r{   r|   r   z` / `r   r   z` / r   r   r   r   )r   z## Wrapper Descriptor Wordsr   z| va | value |z| --- | --- |r   z` |)r   z## Remaining Proofsr   c              3  &   K   | ]	  }d |   yw)z- Nr   rH   rI   s     r   rK   zmarkdown.<locals>.<genexpr>Y  s     D2dVDs   r   
)r;   rG   joinextendrc   rd   )summarylinesrP   r   beforeinsides         r   markdownr     s[   4

GH%&d78+<*=>
GI&'q)
!'*?"@!AC
%g.F&G%HJ
W%678:
!'*@"A!B!D
$W-E%F$GqI
W%678:
+G4P,Q+RS
-g6S.T-UV
-g6T.U-VW
3G<^4_3`a
,W5Q-R,ST
%g.D&E%FG
6w?e7f6gh
:7Cl;m:no
*73R+S*TU
w'89:;


B/7E: {# 
#g,uSWWZ%8$9cggFa>b=ccfwwvtCGG,=$>$E##Fdyy!128b9@SAE	

 
LL   }% ZW 22#s7|N6NNs3z?+4I/?s6(#fXUWXYZ 
LL   )* 
#j/"$s9~&6d377?;S:T U*+,E#'':M2N1Otww+,-T#'':N2O1P Q1235A[9\8] ^345T#''Ba:b:ifi9jjmww'(CGG4N,O+PPSTWT[T[\bTcSddfh	

 
LL[\/0 Ds3w<.c*o->cBCD	LL01	LLD1B)CDD	LL99Ur   c           !     Z
   g }| d   D ]  }|j                  dt        j                  |d          dt        j                  t        |j	                  d                   d|j	                  d       dt        j                  t        |j	                  d	                   d
t        j                  |j	                  d      xs d       dt        j                  dj                  |j	                  d      xs g       xs d       d        g }| d   D ]s  }|d   t        k  }t        |d   cxk  xr	 t        k  nc }|j                  dt        j                  |d          dt        j                  |d          d| d| d	       u g }| d   D ]
  }|j	                  d       d|j	                  d       }|j                  dt        j                  |d          dt        j                  |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                  |j	                  d      xs d       dt        j                  |j	                  d      xs d       dt        j                  |j	                  d      xs d       dt        j                  |j	                  d       xs d       dt        j                  |j	                  d!      xs d       d|j	                  d"       dt        j                  |j	                  d#      xs d       d        d$j                  d% | d&   D              }	d$j                  d' | d(   D              }
d)j                  g d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:t        j                  | d;          d<t        j                  | d=          d>| d?    d@| dA    dB| dC    dDdE| dF    dG| dH    dI| dJ    dK| dL    dM| dN    dDdO| dP    dQ| dR    dS| dT    dU| dV    dW| dX    dY| dZ    d[t        j                  | d\          d]d^t        j                  | d_          d]d`dadbd$j                  |       dcdddedbd$j                  |       dcdfdgdbd$j                  |       dcdhdidb|	 dcdjdk|
 dldmdnd$      S )oNr   <tr><td><code>rT   </code></td><td><code>rU   z</code></td><td>rV   z	</td><td>rX   z</td><td><code>r\   rv   r   r]   z
</td></tr>r   r7   r8   r6   r   rx    ry   rz   r{   r|   r   z</code> / <code>r   r   z
</code> / r   r   r   r   r   c              3     K   | ]9  }d t        j                  |d          dt        j                  |d          d ; yw)r   rT   r   rU   z</code></td></tr>Nhtmlescape)rH   rP   s     r   rK   zhtml_page.<locals>.<genexpr>  sH       S\233I$++VYZdVeJfIggxys   ?Ar   c              3  N   K   | ]  }d t        j                  |       d  yw)z<li>z</li>Nr   r   s     r   rK   zhtml_page.<locals>.<genexpr>  s#     adDT!2 359as   #%r   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">z9  <title>Save Selector Wrapper Descriptor Context</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>z3  <h1>Save Selector Wrapper Descriptor Context</h1>z  <p>route: r   z -&gt; r   z; root <code>r   z"</code>; root table pointer <code>r   z&</code>; current root entry run <code>r   z</code>.</p>z  <p>wrapper entry <code>r   z"</code>; wrapper descriptor <code>r   z%</code>; wrapper child pointer <code>r   z</code>; frontier leaf <code>r   z</code>; frontier reader <code>r   z&  <p>wrapper ref before current root: r   z#; current root references wrapper: r   z); frontier leaf direct current-root ref: r   z"; wrapper child is frontier leaf: r   z; wrapper entry refs: r   z ; wrapper entry promoting refs: r   z; promotion status: r   z</p>z  <p>r   z  <h2>Table Window</h2>z|  <table><thead><tr><th>va</th><th>value</th><th>root entry?</th><th>kind</th><th>child</th><th>child maps</th></tr></thead>z	  <tbody>z</tbody></table>z  <h2>Wrapper References</h2>zw  <table><thead><tr><th>ref</th><th>section</th><th>before current root?</th><th>inside current root?</th></tr></thead>z#  <h2>Wrapper Entry References</h2>z  <table><thead><tr><th>ref</th><th>section</th><th>previous</th><th>opcode</th><th>mode</th><th>handler</th><th>fallthrough word</th><th>fallthrough handler</th><th>role</th><th>promotes?</th><th>note</th></tr></thead>z#  <h2>Wrapper Descriptor Words</h2>z:  <table><thead><tr><th>va</th><th>value</th></tr></thead>z  <h2>Remaining Proofs</h2>z  <ul>z</ul>z</body>z</html>)r;   r   r   strrG   r   rc   rd   )r   
table_bodyrP   ref_bodyr   r   r   entry_ref_bodyprevious	word_bodyproof_itemss              r   	html_pager   ^  s   J{# 

S\23 4S)<%=>? @77678 9;;s3776?345 6SWW->%?%F3GH I;;tyy1A)B)HbIPSQR S		


 H}% 

W 22#s7|N6NNS_56 7;;s9~./ 0( ( 		


 N)* 
ggo./q9K1L0MNS_56 7;;s9~./ 0X./ 0SWW-@%A%HSIJ K;;s377+?#@ABC DSWW-A%B%IcJK LSWW-F%G%N3OP Q[[)C!D!KLM NSWW-H%I%PSQRR\{{377#BCJsKL M;;sww7>3?@ A77567 8;;swwv5#67 8	

&  34 I ''agN_F`aaK99 &&& 	& 	#	&
 	Q& 	D& 	& 	f& 	U& 	[& 	D& 	'& 	& 	& 	&  	>!&" t{{78#456gdkk'RZJ[>\=]]jkrs|k}j~  a  bi  j  b@  aA  Ag  ho  pH  hI  gJ  JV  	W#&$ $G,=$>#??abi  kA  cB  bC  Ch  ip  qI  iJ  hK  Kh  ip  qB  iC  hD  Dc  dk  l  d@  cA  AM  	N%&& 19V1W0XX{  }D  Ec  }d  |e  eN  OV  Wy  Oz  N{  {]  ^e  fB  ^C  ]D  DZ  [b  cy  [z  Z{  {[  \c  dC  \D  [E  EY  Z^  Ze  Ze  fm  n  f@  ZA  YB  BF  	G'&( GL12348)&* 	"+&, 	G-&. BGGJ'((89/&0 	(1&2 	B3&4 BGGH%&&675&6 	.7&8 	f9&: BGGN+,,<=;&< 	.=&> 	E?&@ I;./A&B 	&C&D U#E&F 	G&H 	I&J 	K& & &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_okz-save_selector_wrapper_descriptor_context.jsonF   )ensure_asciiindentr   r   r   )mkdir
write_textr   dumpsparentr   )r   out_dirhtml_outjson_outs       r   write_outputsr	    s    MM$M.HHH

7q9D@   dT:Ig.AOr   c                    t        j                         } | j                  dt        t        dz         | j                  dt        t
        dz         | j                  dt        t
               | j                  dt               | j                         }t        |j                  j                         t        |j                  g             }t        ||j                  |j                        }t        d	|        y )
Nz--exezHwanse2.exe)typedefaultz--leaf-streamszsave_selector_leaf_streams.jsonz	--out-dirz
--html-out)r  z$wrote wrapper descriptor context -> )argparseArgumentParseradd_argumentr   ROOTOUT
parse_argsr   r-   
read_bytesr   rO   r	  r  r  print)parserargsr   r  s       r   mainr    s    $$&F
dD=4HI
(tSCd=de
$<
40D$##R(G WdllDMMBH	0

;<r   __main__)r   r   r   r   returnr   )r!   r%   r  r   )r!   
str | Noner  
int | None)r-   rq   r.   
list[dict]r/   r%   r  r  )r-   rq   r.   r  r!   r%   r  r  )rO   r  rJ   r  r  z	list[str])
r-   rq   r.   r  r/   r%   rO   r  r  dict)r-   rq   r.   r  r   r  r  r  )r-   rq   rO   r  r  r  )r   r  r  r   )r   r  r  r   r  zPath | Noner  r   )r  None)4__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   r   rc   r   rd   r   rg   rh   r   re   r   r"   r&   r1   rB   rR   rk   r   r   r   r   r	  r  __name__r   r   r   <module>r*     s   U "     
   3tH~--/667 8 > R H~''*
Ul		  %   8-4$`!H@FYxEPXv 25d 
= zF r   