
    UHja                       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	 ej                  j                  d e e	e      j                         j                               ddlmZmZ  e	e      j                         j&                  d   Zedz  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$dZ 	 	 	 	 	 	 	 	 d%dZ!	 	 	 	 	 	 	 	 	 	 d&dZ"d'dZ#d'dZ$efd(dZ%d)dZ&e'dk(  r e&        yy)*zGSummarize branch-state source candidates for the current selector root.    )annotationsN)Path)read_sectionsva_to_offset   outc                "    | rt        | d      S d S )N   )intvalues    J/home/exedev/hwanse/tools/summarize_save_selector_current_state_sources.py	parse_hexr      s    "3ub>,,    c                    d| dS )N0x08x r   s    r   hex32r          c{r   c                    d| dS )Nr   02xr   r   s    r   hex8r      r   r   c                    t        | dz        t        | dz	  dz        t        | dz	  dz        t        | dz	  dz        dS )N      r
      )byte0Hexbyte1Hexbyte2Hexbyte3Hex)r   r   s    r   
word_bytesr"   !   sK    &%1*,-%2+-.%2+-.	 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_atr-   *   s?    (B'F~!c#h.dC033r   c                    t        j                  d|      }d}d}	 | j                  ||      dk  r|S t        fd|D              r|dz  }dz   }8)Nr%   r   c              3  V   K   | ]   }|d    cxk  xr |d    |d   z   k  nc  " yw)rawraw_sizeNr   ).0sectionhits     r   	<genexpr>z$pointer_ref_count.<locals>.<genexpr>9   s1     dPWwu~Kwu~
8K'KKKds   &)r   )r'   packfindany)r)   r*   targetpatterncountr,   r4   s         @r   pointer_ref_countr<   1   sb    kk$'GEF
hhw'7Ld[cddQJEq r   c                n   t        | ||dz
        }|y |dz  }|dk(  r|dz	  dz  }|dz	  dz  }|dk(  rdnd}t        | ||      }|d uxr t        ||      d u}	d }
||	rd	n|d
k  rdnd}
dt        |dz
        t        |      dt        |      ||t        |      | d|dd|t        |      nd |	|
ddddS y )Nr$   r      r   r
   r   primaryBranchStatesecondaryBranchStater+      small-scalar-not-vanon-va-scalarbranchTargetOperand0x11z[selectionBuffer[0xr   z]] == 1TFzpopcode 0x11 reads this dword as its branch target operand, so this position is not a normal linear opcode entry.)kind
ownerVaHexownerValueHexownerOpcodeHexownerStateSelectorByteHexownerStateTableownerSelectionBufferOffsetownerSelectionBufferOffsetHexownerConditionoperandValueHexoperandAsVaoperandValueKindlinearOpcodeFalsePositivepromotesPrimaryFillmeaning)r-   r   r   r   )r)   r*   r+   previousprevious_opcodestate_selectorselection_offsetstate_tableoperand_valueoperand_as_vaoperand_kinds              r   operand_roler]   >   s   XrAv.HoO$"a-4/$Nd2.<.A*G] h3%T1gl8]6[cg6g$#04}_fOf6Kl{L)Q-"8_$)-n)=**:-12B-C!,-@AQRU@VV]^7D7Pu]3VZ( ,)-#( J
 	
" r   c           
         t        | d      }t        |D ch c]'  }t        |j                  d      t               s#|d   ) c}      }|D cg c]
  }||kD  s	| }}||r|d   fS |dz   fS c c}w c c}w )Nr
   selectedPointerr   i @  )r   sorted
isinstanceget)root_hex	selectorsrootrowrootsr   
next_rootss          r   selector_root_rangeri   `   s|    xDios:cggVgNhjmCnC)*opE%*;Eedl%;J;*A??$-?? p;s   $A-A-
A2A2c           
         | dz  dk7  ry | dz	  dz  }| dz	  dz  }|dk(  rdnd}t        |       t        |      t        |      ||dk  |dk  rd| d	|d
dS d|d
ddS )Nr   r
   r   r   r?   r@      zhelper 0x00410c90 fills z with case 0xr   z/helper 0x00410c90 receives out-of-range case 0xz; no table fill)valueHexstreamPlus1HexhelperArgumentHex
stateTablehelperDispatchValidrT   )r   r   )r   stream_plus_1
helper_argtables       r   decode_op10rt   g   s    aZ4'M2+%J$1Q$6 <RE%L}-!*-)T1 T! 'ug]:c:JK  C:cBRRab r   c                   t               }t               }t               }| D ]  }|j                  d      xs i j                  d      xs g D ](  }|j                  d      s|j                  |d          * |j                  d      xs g D ]Q  }|j                  d      s|j                  |d          |j                  d      dk(  s>|j                  |d          S  |||fS )NactivationContextcontextRowsvaHextrace	opcodeHex0x12)setrb   add)current_writer_paths
activationry   writer_tracerf   items         r   collect_trace_membersr   {   s    JEE5L# 4WW017R<<]KQr 	.Dxx tG}-	. GGG$* 	4Dxx 		$w-(88K(F2 $$T']3		4	4 ul**r   c                    g }t        | |dz         D ]L  }||dz  z   }t        | ||      }||j                  |t        |      t        |      dt	        |             N |S )Nr   r$   )relativeIndexrx   rl   )ranger-   appendr   r"   )	r)   r*   	center_vabeforeafterrowsrelative_indexr+   r   s	            r   nearby_wordsr      s    D3 
!++h+=+2Ye
 	
 	
 Kr   c           	        |j                  d      xs i }|j                  d      dk7  ry t        |j                  d            }t        |j                  d            }||y t        | ||      }t        | ||      }||y t        ||      d u}|rdn|dk  rdnd	}	i dt	        |      d
t	        |      dt        |dz        d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      dt        | ||      dt	        |      dt	        |      d|j                  dd      d|d|	d|j                  d      d|j                  d      d|j                  d      t        | ||      d d!|j                  d       d"|j                  d       d#d$S )%NoperandRolerF   rD   rG   rx   r+   rA   rB   rC   rH   rI   r   rJ   rK   rL   rM   rN   ownerPointerRefCountoperandVaHexrO   operandPointerRefCountpointerRefCountr   rP   rQ   operandWouldDecodeAsStateTablero   %operandWouldDecodeAsHelperArgumentHexrn   'operandWouldDecodeAsHelperDispatchValidrp   TFz9 is the branch-target operand consumed by opcode 0x11 at z+, not a linear opcode 0x10 helper-fill row.)nearbyWordsrR   rS   explanation)rb   r   r-   r   r   r   r<   r   )
r)   r*   rf   roleowner_va
operand_vaowner_valuerZ   r[   r\   s
             r   branch_operand_contextr      sG   
 77=!'RDxx00,/0H3777+,J:-3(3KS(J7Mm3 =9EM(4}W^G^.CdsLeHo{+ 	${T12 	$TXX.I%J	
 	488$56 	%dhh/K&L 	(2Q)R 	$((#34 	 1#x J 	j) 	5/ 	!#''*;Q"? 	} 	L 	)#'',*?  	09L1M!" 	2377;P3Q#$ $C8<%)$www  Yxx%&&QS- r   c                   t        |       }|j                  d      xs g }|r|d   nd}t        ||      \  }}t        d |j                  d      xs g D        d       }	t	        |      \  }
}}g }t        ||d      D ]  }t        | ||      }|t        |      }|s!t        |      }t        | ||      }t        | ||      }||
v xs ||v }|j                  d|i||	d uxr ||	k  ||
v ||v ||v |||||
v rd	n||v rd
n|rdndd        |D cg c]
  }|d   s	| }}|D cg c]  }|d   r|d   r| }}|D cg c]	  }|d   r| }}|D cg c]  }|j                  d      s| }}|D cg c]  }|d   r|j                  d      s| }}|D cg c]+  }|j                  d      xs i j                  d      dk(  r|- }}|D cg c]  }t        | ||      }|| }}}t        d |D              }|D cg c]
  }|d   s	| }}|D cg c]
  }|d   r	| } }i d|dt        |       dt        |       d|	t        |	      nd ddddddt        |      d t        |      d!t        |      d"t        |      d#t        |      d$t        |      d%|d&|r|d   j                  d      nd d'|r'|d   j                  d      xs i j                  d(      nd d)|r'|d   j                  d      xs i j                  d*      nd d+t        |      d,t        |      d-t        |       d.|||||d/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 )0NcurrentFrontierRootHexesr   
0x00000000c              3     K   | ]8  }t        |j                  d             t        |j                  d              : yw)rx   N)r   rb   )r2   rf   s     r   r5   z build_summary.<locals>.<genexpr>   s:      	
)*6 cggg&'	
s   >A currentFrontierRows)defaultr$   rx   zexecuted activation contextzexecuted writer tracezbranch operand dwordzroot-range dword candidate)beforeFirstFrontierReader inCurrentWriterActivationContextinCurrentWriterTraceinCurrentWriterOpcode12Tracer   r   hasExecutionEvidence
confidencer   r   rp   r   r   rF   rD   c              3  H   K   | ]  }|j                  d       dk(  rd  yw)rQ   rB   r   N)rb   )r2   contexts     r   r5   z build_summary.<locals>.<genexpr>  s+      ,;;)*.CC 	
,s    "rootHexrootRangeHexz..firstFrontierReaderHexhelper
0x00410c90z
0x00..0x0b
0x0040b49e)handlerVaHexvalidCaseRangeHexcalledByOpcode10HandlerHexcandidateCount#validBeforeFirstFrontierReaderCount8validBeforeFirstFrontierReaderWithExecutionEvidenceCount-validBeforeFirstFrontierReaderNonOperandCount0validBeforeFirstFrontierReaderPromotingFillCountbranchOperandCandidateCountbranchOperandSmallScalarCountbranchOperandVaHexbranchOperandOwnerVaHexrG   branchOperandOwnerConditionrN   activationCandidateCountvalidActivationCandidateCount"outOfRangeActivationCandidateCounta  The current writer activation trace contains no valid opcode 0x10 helper fill. Its opcode 0x10 rows pass 0x20, outside helper 0x00410c90's 0x00..0x0b dispatch range. The only root-range valid-looking candidate before the frontier is 0x00542244, the small-scalar branch-target operand of opcode 0x11 at 0x00542240, not an executable linear opcode 0x10 helper-fill row. primaryBranchState is inherited from earlier runtime state at this point.)
conclusion
candidatesactivationCandidatesvalidBeforeFirstFrontierReader,validBeforeFirstFrontierReaderPromotingFillsbranchOperandContexts)r   rb   ri   minr   r   r-   rt   r   r<   r]   r   r   sumr&   )!r)   selection_writersr~   rd   r*   
root_hexesrc   
root_startroot_endfirst_frontier_readeractivation_vas	trace_vaswriter_trace_vasr   r+   r   decodedva_hexrefsr   executedrf   activation_candidatesvalid_before_frontiervalid_with_executionvalid_without_operand_rolepromoting_valid_before_frontierbranch_operand_candidatesr   branch_operand_contexts!branch_operand_small_scalar_countvalid_activationout_of_range_activations!                                    r   build_summaryr      s    S!H"&&'ABHbJ *z!}H.xCJ	
(,,-BCIr	

  3HH\2]/NI/JJ!, h+=e$r h3C2.^+Bv/BV

 *?d)J)irTiOi06.0H$*i$7,26F,F#$, ^+ . Y& -  ,1#
 	> -7bS#>`:aSbb!*+4I0J 	 
 -%& 	 
 -"ww}% 	" "
 -'%&sww}/E 	'# '
 "!GGM"(b--f59NN 	! ! -.sHcBG 	  ), ,0, )% (=[DY@Z[[.Cfs3OdKesff*8*5,-Rh/@A* 	!BWBc%(=">im* 	(!-*6
	* 	#j/* 	.s3H/I* 	CCH\D]* 	8=W9X* 	;C@_<`* 	&s+D'E* 	()J*  	Kd7:>>wGjn!*" 	"( 'q)--m<BGGU)*, 	&( 'q)--m<BGGHXY3*6 	#C(=$>7*8 	(-=)>9*: 	-c2I.J;*>X ! 5*?8W!8S* *C c"'! \fsH   
MM(MMM5M0M M%
M+M+
M0"M0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%g}| d&   D ]B  }|j                  d'|d(    d)|d*    d+|d,    d-|d.    d-|d/   rd0nd1 d-|d2    d-|d3    d4       D | d&   s|j                  d5       |j                  g d6       | d7   D ]  }|j                  d8      xs i }|j                  d'|d(    d)|d*    d+|d,    d-|d.    d-|d9   rd0nd1 d-|j                  d:d;       d-|j                  d<      xs d= d>|j                  d?      xs d d-|d2    d4        | d7   s|j                  d@       |j                  g dA       | j                  dB      xs g D ]~  }|j                  d'|d?    d)|dC    dD|j                  dE       d+|dF    d)|dG    d+|dH    d-|j                  dI       dJ|j                  dK       d-|j                  dL      rd0nd1 d4        | j                  dB      s|j                  d@       |j                  g dM       | j                  dB      xs i gd;   j                  dN      xs g }|D ]8  }|j                  d'|d(    d)|d*    d+|dO    d-|dP    d-|dQ    d-|dR    d4       : |s|j                  dS       |j                  d       dTj                  |      S )UNz%# Save Selector Current State Sources zJOpcode `0x10` branch-state source candidates in the current selector root.z	- root: `r   z` (`r   z`)z- first frontier reader: `r   `z- helper: `r   r   z`, valid dispatch cases `r   z(- activation-context `0x10` candidates: r   z"- valid activation-context fills: r   z7- root-range valid fills before first frontier reader: r   z2- root-range valid fills with execution evidence: r   z7- root-range valid fills that are not branch operands: r   z$- root-range valid promoting fills: r   z"- branch operand false positives: r    (small scalar: r   )r   z## Activation ContextzC| va | value | table | helper arg | valid? | confidence | meaning |z+| --- | --- | --- | --- | --- | --- | --- |r   z| rx   z | `rl   z` | ro   z | rn   rp   yesnor   rT   z |z| - | - | - | - | - | - | - |)r   z.## Valid Root-Range Candidates Before Frontierr   zb| va | value | table | helper arg | activation trace? | pointer refs | operand role | confidence |z2| --- | --- | --- | --- | --- | ---: | --- | --- |r   r   r   r   r   rF   - rG   z!| - | - | - | - | - | - | - | - |)r   z ## Branch Operand False Positiver   zp| owner | owner value | condition | operand | operand value | operand kind | would decode as | promoting fill? |z1| --- | --- | --- | --- | --- | --- | --- | --- |r   rH   z` | `rN   r   rO   rQ   r   z case r   rS   )r   z### Nearby Wordsr   z"| va | value | b0 | b1 | b2 | b3 |z%| --- | --- | --- | --- | --- | --- |r   r   r   r    r!   z| - | - | - | - | - | - |
)r   extendrb   join)summarylinesrf   r   r   nearbywords          r   markdownr   J  s   /
T

GI&'tGN,C+DBG
$W-E%F$GqI
gh'788QRYZbRcdwRxQyyz{
27;U3V2WX
,W5T-U,VW
A'JoBpAqr
<WE  >A  =B  	C
A'JyBzA{|
.w7i/j.kl
,W5R-S,TTdel  nM  fN  eO  OP  	Q


M5+E. -. 
Wd3z?"34L8I7J#&'(S9N5OEUY+ZZ]< !S^$4B8	

 )*45	LL   78 
ww}%+Wd3z?"34L8I7J#&'(S9[5\Ebf+ggjww(!,-S&1A1HS0I488T`KaKgegJhhk< !%	

 3489	LL   ;;67=2 
&'tGO,D+EU7;;WgKhJiim~&'tG4E,F+GtGTfLgKhhk{{;<=VGKKPwDxCyy|$9:uERI	

 ;;./89	LL   kk12:rdA>BB=QWUWF 
gtD$4#5T$z:J9K3J D$4#5Sj9I8J"N	


 01	LL99Ur   c                t   dZddj                  fd| d   D              }dj                  fd| d   D              }g }| j                  d      xs g D ]"  }|j                  dt        j                  |d	          d
t        j                  |d          d
t        j                  |j                  d      xs d       d
t        j                  |d          d
t        j                  |d          dt        j                  |j                  d      xs d       dt        j                  t        |j                  d                   dt        j                  |j                  d      xs d       d       % g }| j                  d      xs i gd   j                  d      xs g }|D ]  }|j                  dt        j                  |d          d
t        j                  |d          d
t        j                  |d          d
t        j                  |d          d
t        j                  |d          d
t        j                  |d          d        dj                  g d d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0t        j                  | d1          d2t        j                  | d3          d4t        j                  | d5   xs d       d6d7t        j                  | d8   d9          d:t        j                  | d8   d;          d6d<| d=    d>d?| d@    d>dA| dB    d>dC| dD    dE| dF    dGdHt        j                  | dI          d>dJdKdL|xs dM dNdOdPdL|xs dQ dNdRdSdLdj                  |      xs dT dNdUdVdLdj                  |      xs dW dNdXdYd      S )[Nc                   | j                  d      xs i }dt        j                  | d          ddt        j                  | d          ddt        j                  | d          ddt        j                  | d	          dd| d
   rdnd ddt        j                  | d          dg}|r,|j                  dt        j                  | d          d       ny|j	                  d| j                  dd       ddt        j                  |j                  d      xs d|j                  d      rd|j                  d      z   ndz          dg       ddj                  |      z   dz   S )Nr   z
<td><code>rx   z</code></td>rl   z<td>ro   z</td>rn   rp   r   r   r   rT   r   r   rF   r   rG   r   r   z<tr>z</tr>)rb   htmlescaper   r   r   )rf   include_meaningr   cellss       r   row_htmlzhtml_page.<locals>.row_html  s|   ww}%+S\23<@S_56lC4;;s<012%8S)<%=>?|LC 565DAG4;;s<012%8
 LL4C	N ;<EBCLLsww0!45U;t{{DHHV$4$;`d`h`hiu`vdhh|F\@\|~#  A  B  BG  H  &00r   r   c              3  0   K   | ]  } |d         yw)TNr   r2   rf   r   s     r   r5   zhtml_page.<locals>.<genexpr>  s     Z38C.Z   r   c              3  0   K   | ]  } |d         yw)FNr   r   s     r   r5   zhtml_page.<locals>.<genexpr>  s     `shsE*`r   r   r   z<tr><td><code>rG   z</code></td><td><code>rH   rN   r   r   rO   z</code></td><td>rQ   z	</td><td>rS   r   r   z
</td></tr>r   r   rx   rl   r   r   r    r!   z</code></td></tr>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">z4  <title>Save Selector Current State Sources</title>z	  <style>z^    body { margin: 24px; background: #101010; color: #eee; font: 14px system-ui, sans-serif; }zJ    table { border-collapse: collapse; width: 100%; margin: 16px 0 28px; }zM    th, td { border: 1px solid #333; padding: 6px 8px; vertical-align: top; }z9    th { background: #1d1d1d; position: sticky; top: 0; }z    code { color: #f5d76e; }z
  </style>z</head>z<body>z.  <h1>Save Selector Current State Sources</h1>z  <p>Root <code>r   z</code> range <code>r   z%</code>. First frontier reader <code>r   z</code>.</p>z  <p>Helper <code>r   r   z</code> accepts cases <code>r   z%  <p>valid activation-context fills: r   z</p>z5  <p>root-range valid fills with execution evidence: r   z'  <p>root-range valid promoting fills: r   z%  <p>branch operand false positives: r   r   r   z)</p>z  <p>r   z  <h2>Activation Context</h2>z  <table><thead><tr><th>va</th><th>value</th><th>table</th><th>helper arg</th><th>valid?</th><th>confidence</th><th>meaning</th></tr></thead>z	  <tbody>z7<tr><td colspan="7">No activation candidates.</td></tr>z</tbody></table>z6  <h2>Valid Root-Range Candidates Before Frontier</h2>z  <table><thead><tr><th>va</th><th>value</th><th>table</th><th>helper arg</th><th>valid?</th><th>confidence</th><th>pointer refs</th><th>operand role</th></tr></thead>z2<tr><td colspan="8">No valid candidates.</td></tr>z(  <h2>Branch Operand False Positive</h2>z  <table><thead><tr><th>owner</th><th>owner value</th><th>condition</th><th>operand</th><th>operand value</th><th>operand kind</th><th>promoting fill?</th><th>explanation</th></tr></thead>z@<tr><td colspan="8">No branch operand false positives.</td></tr>z  <h3>Nearby Words</h3>zf  <table><thead><tr><th>va</th><th>value</th><th>b0</th><th>b1</th><th>b2</th><th>b3</th></tr></thead>z.<tr><td colspan="6">No nearby words.</td></tr>z</body>z</html>)rf   dictr   boolreturnstr)r   rb   r   r   r   r   )	r   r   validbranch_context_rowsr   nearby_rowsr   r   r   s	           @r   	html_pager    s   1& Z'BX:YZZJII`g>^6_``E;;67=2 
""W\%:;< =W_%=>? @W[[1A%B%IcJK LW^%<=> ?W->%?@A B;;w{{+=>E#FG H;;s7;;/D#EFGH I;;w{{=9?R@A B		

 Kkk12:rdA>BB=QWUWF 

T']34 5T*%567 8T*%567 8T*%567 8T*%567 8T*%567 8		


 99 ''' 	' 	#	'
 	Q' 	?' 	' 	i' 	U' 	X' 	D' 	'' 	' 	' 	'  	9!'" 4;;wy'9:;;OPTP[P[\cdr\sPtOu  v[  \`  \g  \g  ho  pH  hI  hP  MP  \Q  [R  R^  	_#'$ T[[):>)JKLLhimititu|  ~F  vG  H[  v\  j]  i^  ^j  	k%'& 08W0X/YY]^''( @  IC  AD  @E  EI  	J)'* 2':l2m1nnrs+', 08U0V/WWgho  qP  iQ  hR  RW  	X-'. GL12348/'0 	(1'2 	X3'4 J]"]^^no5'6 	A7'8 	r9': ESSTTde;'< 	3='> 	G?'@ BGG/0x4xy  zJ  	KA'B 	"C'D 	qE'F BGGK(^,^__opG'H 	I'J 	K'L 	M' ' 'r   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       |d
z  j                  t	        |       d	       y )NT)parentsexist_okz(save_selector_current_state_sources.jsonF   )ensure_asciiindentr   utf-8encoding(save_selector_current_state_sources.html)mkdir
write_textjsondumpsr  )r   out_dirs     r   write_outputsr    sf    MM$M.99EE

7q9D@ F  99EEiPWFXcjEkr   c            
     P   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        d
z         | j                  dt        t               | j                         }t        |j                  j                         t        j                  |j                  j                  d            t        j                  |j                  j                  d            t        j                  |j                   j                  d                  }t#        ||j$                         t'        d|d    d|j$                  dz          y )N)descriptionz--exezHwanse2.exe)typer   z--selection-writersz$save_selector_selection_writers.jsonz--current-writer-pathsz'save_selector_current_writer_paths.jsonz--selectorszsave_scene_selectors.jsonz	--out-dirr
  r  z$wrote current state source summary (r   z valid activation fills) -> r  )argparseArgumentParser__doc__add_argumentr   ROOTOUT
parse_argsr   r)   
read_bytesr  loadsr   	read_textr~   rd   r  r  print)parserargsr   s      r   mainr$    s^   $$9F
dD=4HI
-D#HnBno
0tSKtEtu
D#@[:[\
$<D

4))33W3EF

4,,666HI

4>>++W+=>	G '4<<(		345 6llGGH	Jr   __main__)r   z
str | Noner   
int | None)r   r   r   r   )r   r   r   r   )r)   bytesr*   
list[dict]r+   r   r   r&  )r)   r'  r*   r(  r9   r   r   r   )r)   r'  r*   r(  r+   r   r   dict | None)rc   r   rd   r(  r   ztuple[int, int])r   r   r   r)  )r~   r(  r   z#tuple[set[str], set[str], set[str]])   r*  )r)   r'  r*   r(  r   r   r   r   r   r   r   r(  )r)   r'  r*   r(  rf   r   r   r)  )
r)   r'  r   r   r~   r(  rd   r(  r   r   )r   r   r   r   )r   r   r  r   r   None)r   r+  )(r  
__future__r   r  r   r  r'   syspathlibr   pathinsertr   __file__resolveparentprobe_exe_scene_tablesr   r   r  r  r  r   r   r   r"   r-   r<   r]   ri   rt   r   r   r   r   r   r  r  r$  __name__r   r   r   <module>r6     sA   M "     
  3tH~--/667 8 > H~''*
Ul-4
D@(+  +	++ 
+ 	+\~	~~ %~ 	~
 
~BQhXv 25 l, zF r   