
    UHjY                    p   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dhZdZh dZh dZg dZg dZ dddddddddgZ!d*dZ"d*dZ#d+dZ$d,dZ%d-dZ&d.dZ'd/dZ(	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d0d Z)	 	 	 	 	 	 	 	 	 	 	 	 	 	 d1d!Z*	 	 	 	 	 	 d2d"Z+d3d#Z,d4d5d$Z-d6d%Z.d6d&Z/efd7d'Z0d8d(Z1e2d)k(  r e1        yy)9zGSummarize opcode 0x20 descriptor rows that select runtime object bases.    )annotationsN)Path)Any)find_cns_stringsread_sectionsva_to_offset   outmap1_01amap2_02d      `   >               >   (   @   A   B   C   D   )z!runtime-context-f2-object-pointerzdescriptor-script-gate-rowzfield-map-or-frontier-referencezspecific-gate-base-proof)zLruntime context+0xf2 object pointer selected by the active descriptor scriptzbdescriptor+4 script row that reads/writes gate offsets 0xe8 or 0xea after the object-base selectorzKfield-map CNS or current-frontier reference after the object-base candidatez1specific gate-base proof for map1_01a -> map2_02dHwanse2.exez:descriptor+4 script scans and opcode 0x42 handler evidence)pathdescriptionz2out/save_selector_opcode20_descriptor_scripts.jsonz8descriptor script rows and frontier/gate reference scansz-out/save_selector_selection_buffer_bases.jsonz;runtime object pointer mode still required for context+0xa8c                    d| dS )N0x08x values    T/home/exedev/hwanse/tools/summarize_save_selector_opcode20_object_base_candidates.pyhex32r$   6       c{    c                    d| dS )Nr   02xr    r!   s    r#   hex8r)   :   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_jsonr3   >   s*    ;;=::dnngn677r&   c                "    | rt        | d      S d S )Nr   )intr!   s    r#   	parse_hexr6   D   s    "3ub>,,r&   c                v    t        ||      }||dz   t        |       kD  ry t        j                  d| |      d   S )N   z<Ir   )r   lenstructunpack_from)exesectionsvaoffsets       r#   dword_atr@   H   s?    (B'F~!c#h.dC033r&   c                0    dddddj                  | d      S )NfillBranchStateTablereadSelectedStateAndBranchselectActiveStateSlotselectMatchingRuntimeSlot)r   r   r   r   otherget)opcodes    r#   selection_operationrJ   O   s&    $*%)	
 
c&'r&   c                    t        | j                  d            xs d}t        | j                  d            xs d}|dk(  rddd dddS |d	k(  rd
d| d|dddS dt        |       dd dddS )NstreamPlus1Hexr   streamPlus2Hexcontext+0xf2z#dword[0x0059db30 + context[0xf2]*4]
0x00406480T)objectSelectorModeeffectiveBaseExpressionfixedObjectIndexhandlerEvidenceVaHexruntimeObjectPointerRequiredr	   stream+2zdword[0x0059db30 + z*4]
0x004064a0zunsupported stream+1 z$unresolved object pointer table mode-)r6   rH   r)   )rowstream_plus_1stream_plus_2s      r#   decode_object_selector_moder[   X   s    cgg&678=AMcgg&678=AM"0'L $$0,0
 	
 ",)<]O3'O -$0,0
 	
 !6d=6I5JK#I  #(, r&   c                   g }|j                         D 	ci c]  \  }}	|	|
 }
}}	t        t        d|      t        t        |            D ]  }||dz  z   }t        | ||      }	|	 |S |	dz  }|	dz	  dz  }|	dz	  dz  }|t        |      t        |	      t        |      t        |      t        |      t        |	dz	  dz        |t        v |t        v t        ||	      d ud
}|t        v r*|j                  t        |      |t        v |dv |d	k(  d
       |	|v r||	   |d<   |	|
v r|
|	   |d<   |j                  |        |S c c}	}w )Nr   r8         r      )
indexvaHexvalueHex	opcodeHexrL   rM   streamPlus3HexisSelectionOpcodeisBaseSetterOpcodeShapeisPointerDword>   r   r   r   )selectionOperationisGateOffsetwritesSelectionBufferreadsSelectionBuffercnscurrentFrontierTarget)itemsrangemaxminSCAN_DWORDSr@   r$   r)   SELECTION_OPCODESBASE_SETTER_OPCODESr   updaterJ   GATE_OFFSETSappend)r<   r=   strings	script_vafrontier_refsstart_index	end_indexrowslabelr"   frontier_by_var`   row_varI   rY   rZ   rX   s                    r#   script_wordsr   t   s    D7D7J7J7LM|ueeUlMNMs1k*CY,GH UQY&h/=8 K7 !t+",6]ef"=1"=1"ERK4#78!'+<!<'-1D'D*8U;4G
 &&JJ&9&&A - =)/<)?(.$	  G CJN"+9%+@C'(C?@ KC Ns   D<c           	        t        | |||||dz   t              }|D cg c]&  }|j                  d      r|j                  d      r|( }}|D cg c]L  }|j                  d      xs dj                  d      r&|j                  d      xs dj                  d      s|N }	}|D cg c]  }|j                  d      s| }
}|d d	 t	        |      |	d d	 t	        |	      |
d d	 t	        |
      d
S c c}w c c}w c c}w )Nr	   re   ri   rl    mapmap_rm      )gateSelectionRowsAfterCandidate$gateSelectionRowsAfterCandidateCountfieldMapRowsAfterCandidatefieldMapRowsAfterCandidateCount!currentFrontierRowsAfterCandidate&currentFrontierRowsAfterCandidateCount)r   rr   rH   
startswithr9   )r<   r=   rx   ry   r{   rz   r}   rX   gate_selection_rowsfield_recordsfrontier_hitss              r#   scan_after_candidater      s    Xw	=+XY/[fgD77&'CGGN,C 	 
 GGEN b,,U3SWWU^=Qr<]<]^d<e 	M  %)MSCGG4K,LSMMM+>s+C034G0H&3CR&8+.}+=-:3B-?25m2D  Ns   +C/AC4%C9<C9c                x   t        |       }t        | |      }|j                  d      xs i j                         D ci c]  \  }}|t	        |       }}}|j                         D ci c]  \  }}|	|| }}}g }|j                  d      xs g D ]  }t        d |j                  d      xs g D        i       }	t	        |	j                  d            }
|
G|	j                  d      xs g D cg c]&  }|j                  d      r|j                  d      s|( }}|D ]  }|j                  d	      d
k7  r|j                  d      }t        |t              s;|	j                  d      xs g D cg c]<  }|j                  d      r)t        |j                  d      t              r
|d   |kD  r|> }}|D cg c]  }|j                  d      r| }}t        | |||
||      }|j                  d      |j                  d      |j                  d      xs g |	j                  d      ||j                  d      |j                  d      |j                  d	      |j                  d      |j                  d      |j                  d      dt        |      t        | |||
||dz
  |dz         t        |      t        d |D              t        |      t        |      dk(  |	j                  d      |	j                  d      dd|}|j                  |         |S c c}}w c c}}w c c}w c c}w c c}w )NfrontierRefsdescriptorRowsc              3  J   K   | ]  }|j                  d       dk(  s|  yw)slotzscript+4NrG   ).0scripts     r#   	<genexpr>z%collect_candidates.<locals>.<genexpr>   s%     q6PVPZPZ[aPbfpPpqs   ##scriptsscriptVaHexbaseSetterRowswritesContextA8rg   rc   0x42r`   descriptorVaHexscript0LinkedCnsra   rb   rL   rM   rd   )descriptorIndexr   r   script4VaHexcandidateIndexcandidateVaHexcandidateValueHexrc   rL   rM   rd         c              3  D   K   | ]  }|j                  d       sd  yw)rg   r	   NrG   )r   laters     r#   r   z%collect_candidates.<locals>.<genexpr>   s%       <A%didmdmn~dA  <As     r   lastContextA8SetterRow lastNonPointerContextA8SetterRowF)
nearbyRowslaterContextA8SetterCount$laterPointerLikeContextA8SetterCount#laterNonPointerContextA8SetterCount'isLastNonPointerContextA8SetterInScriptfinalContextA8SetterRow!finalNonPointerContextA8SetterRowcontributesSpecificGateProof)r   r   rH   rn   r6   next
isinstancer5   r   r[   r   r9   sumrw   )r<   descriptor_scriptsr=   rx   r~   r"   rz   
candidates
descriptorscript4
script4_varX   context_rowsr`   r   later_context_setterslater_non_pointer_setters
after_scan	candidates                      r#   collect_candidatesr      se    S!HsH-G 033NCIrPPRE5 	yM  7D6I6I6KaleUuO`UE\aMaJ(,,-=>D" ,)
qZ^^I-F-L"qsuvw{{=9:
";;'78>B
ww()#'':J2K 
 
   #	)Cww{#v-GGG$EeS)#*;;/?#@#FB%99./Juyy?QSV4W\abi\jmr\r %! % =R(u5Y^YbYbcsYt(u%(u-c8WjRWYfgJ#->>'#:#->>2C#D$.NN3E$F$L" 'M :"'"%'''"2%(WWZ%8 WW[1"%''*:";"%''*:";"%''*:"; .c2 +3':}^cfg^ginqrirs-01F-G8;  <AK`  <A  9A7:;T7U;>?X;Y]^;^+2;;7O+P5<[[Ac5d05)* +I. i(G#	),)Z g b
% )vs*   L!*
L'5L'2+L-3AL2:L7L7c                    i }| D ]   }|xs d}|j                  |d      dz   ||<   " t        |j                               D cg c]
  \  }}||d c}}S c c}}w )Nnoner   r	   )r"   count)rH   sortedrn   )valuescountsr"   keyr   s        r#   	histogramr      sn    F -ovjja(1,s-
 #6<<>2E5 %(  s   Ac                d   ||nt        t        dz  i       }||nt        t        dz  i       }t        | |      }t        |D ch c]  }|d   	 c}      }|D cg c]  }|j	                  d      dk(  r| }}t        d |D              }t        d |D              }t        d |D              }	|D cg c]  }|j	                  d      d	k(  s| }
}d
}i dt        dt        d|j	                  d      dt        |      dt        |      d|dt        |D cg c]  }|j	                  d       c}      dt        |D cg c]  }|j	                  d       c}      dt        |D cg c]  }|j	                  d       c}      dt        |
      dt        |      d|d|d|	dt        d |D              dt        d |D              d|j	                  d       d!d"d#d$d%|d&d'd(d(t        t        t        t        t              d'|d)S c c}w c c}w c c}w c c}w c c}w c c}w )*N.save_selector_opcode20_descriptor_scripts.json)save_selector_selection_buffer_bases.jsonr   rP   rU   c              3  &   K   | ]	  }|d      yw)r   Nr    r   rX   s     r#   r   z build_summary.<locals>.<genexpr>  s     $gUXS)O%P$g   c              3  &   K   | ]	  }|d      yw)r   Nr    r   s     r#   r   z build_summary.<locals>.<genexpr>  s     ]3$E F]r   c              3  &   K   | ]	  }|d      yw)r   Nr    r   s     r#   r   z build_summary.<locals>.<genexpr>  s     cQTs#KLcr   rN   a
  The 16 non-pointer descriptor+4 context+0xa8 rows are all opcode 0x42 object-base selectors with stream+1 == 0, so the handler chooses dword[0x0059db30 + context[0xf2]*4] rather than a fixed stream+2 object index. Scanning the rest of each descriptor+4 script after these rows finds no 0xe8/0xea selection-buffer reads or writes, no field-map CNS records, and no current-frontier direct references. These rows are therefore generic runtime object-base reselections, not a specific gate-base proof for map1_01a -> map2_02d.sourcetargetdescriptorTableVaHexcandidateCountdescriptorCountWithCandidatesdescriptorIndicesWithCandidatesopcodeHistogramrc   streamPlus1HistogramrL   objectSelectorModeHistogramcontextF2ObjectSelectorCount"immediateObjectIndexCandidateCountr   r   r   lastNonPointerCandidateCountc              3  ,   K   | ]  }|d    s	d  yw)r   r	   Nr    r   s     r#   r   z build_summary.<locals>.<genexpr>/  s     +v#sKtGuA+vs   
(anyCandidateContributesSpecificGateProofc              3  &   K   | ]	  }|d      yw)r   Nr    r   s     r#   r   z build_summary.<locals>.<genexpr>0  s     7r`c<Z8[7rr   3selectionBufferBasesRuntimePointerModeStillRequiredruntimePointerModeStillRequired
0x0040644frO   rV   z?stream+1==0 selects context+0xf2; stream+1==1 selects stream+2.)opcode42HandlerVaHexcontextF2WriteVaHexstream2WriteVaHexmodeMeaningTblockedF)handlerEvidencer   !runtimeObjectPointerProofRequiredcontrolPathProofStatus
proofFoundopcode20ObjectBaseProofFoundfailedOpcode20ObjectBaseGateIdsmissingEvidenceevidenceRefsevidenceRefCountpromotionStatus
conclusion)r3   OUTr   r   rH   r   SOURCETARGETr9   r   any$FAILED_OPCODE20_OBJECT_BASE_GATE_IDS%OPCODE20_OBJECT_BASE_MISSING_EVIDENCE"OPCODE20_OBJECT_BASE_EVIDENCE_REFS)r<   r   selection_buffer_basesr   rX   descriptor_indices!immediate_object_index_candidatesgate_selection_after_countfield_map_after_countfrontier_after_countcontext_mode_candidatesr   s               r#   build_summaryr    s   /A/M+S\>>
T 8N7Y3_h99
` $C);<J: NC%6!7 NO!)77'(J6 	)% ) "%$g\f$g!g]R\]]cXbcc.8lsCGGDX<Y]k<ksll	  #&#&# 	 2 6 67M N# 	#j/	#
 	(-?)@# 	*+=# 	9j%Qscggk&:%QR# 		PZ*[3773C+D*[ \# 	&y[e1fTW#'':N2O1f'g# 	',C(D# 	-c2S.T# 	/0J# 	*+@# 	12F# 	'+v+v(v#  	3C7rgq7r4r!#" 	>?U?Y?YZ{?|##& %1#/!-\	
 !-1"+(-+O@: BC$ E# ## !O) m  &R*[1fs*   HH4HHH#H(.H-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g}|j                  d$ | d%   D               |j                  g d&       |j                  d' | d(   D               |j                  g d)       |j                  d* | d+   D               |j                  dd,dd-d.d/| d0   d1    d2| d0   d3    d2| d0   d4    d5| d0   d6    d7	dd8dd9d:g       | d;   D ]c  }|j                  d<|d=    d>d?j                  |d@         xs dA dB|dC    d2|dD    d2|dE    d5|d    d>|d    d>|d    d>|dF    d>|dG    d7       e |j                  d       dHj                  |      S )INz2# Save Selector Opcode 0x20 Object Base Candidatesr   z	- route: r   z -> r   z- descriptor table: `r   `z&- non-pointer object-base candidates: r   z- descriptors with candidates: r   z!- context+0xf2 object selectors: r   z#- fixed stream+2 object selectors: r   z*- gate `0xe8/0xea` rows after candidates: r   z'- field-map CNS rows after candidates: r   z*- current-frontier refs after candidates: r   z- specific gate proof: r   z)- runtime object pointer proof required: r   z- proofFound: `r   z!- opcode20ObjectBaseProofFound: `r   z- promotion status: `r   r   z## Failed Gatesc              3  (   K   | ]
  }d | d  yw)- `r  Nr    r   items     r#   r   zmarkdown.<locals>.<genexpr>^  s     V43tfAVs   r   )r   z## Missing Evidencer   c              3  &   K   | ]	  }d |   yw)z- Nr    r  s     r#   r   zmarkdown.<locals>.<genexpr>d  s     D2dVDr   r   )r   z## Evidence Refsr   c              3  8   K   | ]  }d |d    d|d      yw)r  r   z`: r   Nr    r   s     r#   r   zmarkdown.<locals>.<genexpr>j  s/       c&k]#c-012s   r   z## Handler Evidencez8| handler | context+0xf2 write | stream+2 write | mode |z| --- | --- | --- | --- |z| `r   r   z` | `r   r   z` | r   z |z## Candidatesz| descriptor | script+0 CNS | candidate | stream+1 | effective base | gate rows after | field maps after | frontier refs after | last non-pointer | later pointer-like setters |zB| ---: | --- | --- | --- | --- | ---: | ---: | ---: | --- | ---: |r   z| r   z | , r   rW   z | `r   rL   rQ   r   r   
)extendrw   join)summarylinesrX   s      r#   markdownr  F  s   <

GH%&d78+<*=>
(> ?@B
09I1J0KL
)'2Q*R)ST
+G4R,S+TU
-g6Z.[-\]
4W=c5d4ef
1':[2\1]^
4W=e5f4gh
!'*T"U!VW
3G<_4`3ab
',/02
+G4R,S+TTUV
(9 :;1=


+E. 
LLV73T+UVV	LL  
 
LLD1B)CDD	LL  
 
LL >*  
LL

B#'+,-CDE F)*+@AB C)*+>?@()-89=
 	
 	{L! $ |$ 

&'(DIIc:L6M,N,URU+V W$%&eC0@,A+B C-./t9:;3456c;<=S<=>c9:;2?		


 
LL99Ur&   c                   dj                  d | d   D              }dj                  d | d   D              }dj                  d | d   D              }g }| d   D ]  }|j                  d	|d
    dt        j                  dj                  |d         xs d       dt        j                  |d          dt        j                  |d          dt        j                  |d          d|d    d|d    d|d    d|d    d|d    d        dj                  g ddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0t        j                  | d1          d2t        j                  | d3          d4| d5    d6| d7    d8| d9    d:| d    d;| d    d<| d    d=| d>    d?t        j                  | d@          dAdBt        j                  | dC          dDdEdF| dGdHdF| dGdIdF| dGdJdKdLt        j                  | dM   dN          dt        j                  | dM   dO          dt        j                  | dM   dP          dt        j                  | dM   dQ          d	dRdSdT|dRdUdVd      S )WNr   c              3  N   K   | ]  }d t        j                  |       d  yw)
<li><code>z</code></li>Nhtmlescaper  s     r#   r   zhtml_page.<locals>.<genexpr>  s+       T[[&'|4   #%r   c              3  N   K   | ]  }d t        j                  |       d  yw)z<li></li>Nr  r  s     r#   r   zhtml_page.<locals>.<genexpr>  s+       t{{4 !'r  r   c              3     K   | ]9  }d t        j                  |d          dt        j                  |d          d ; yw)r  r   z	</code>: r   r  Nr  r   s     r#   r   zhtml_page.<locals>.<genexpr>  sE       T[[V-.iCDV8W7XX]^s   ?Ar   r   z<tr><td>r   z	</td><td>r  r   rW   z</td><td><code>r   z</code></td><td><code>rL   rQ   z</code></td><td>r   r   r   r   r   z
</td></tr>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">zA  <title>Save Selector Opcode 0x20 Object Base Candidates</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,    h1 { margin: 0 0 8px; font-size: 24px; }z/    h2 { margin: 24px 0 8px; font-size: 18px; }z<    p { max-width: 1180px; color: #bbb; line-height: 1.45; }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; }zF    th { position: sticky; top: 0; background: #181818; color: #ddd; }z    code { color: #d7f0ff; }z
  </style>z</head>z<body>z;  <h1>Save Selector Opcode 0x20 Object Base Candidates</h1>z  <p>route r   z -&gt; r   z&; non-pointer object-base candidates: r   z!; context+0xf2 object selectors: r   z#; fixed stream+2 object selectors: r   z; gate rows after candidates z"; field-map rows after candidates z!; frontier refs after candidates z; proofFound <code>r   z </code>; promotion status <code>r   z</code>.</p>z  <p>r   z</p>z  <h2>Failed Gates</h2>z  <ul>z</ul>z  <h2>Missing Evidence</h2>z  <h2>Evidence Refs</h2>z  <h2>Handler Evidence</h2>zw  <table><thead><tr><th>handler</th><th>context+0xf2 write</th><th>stream+2 write</th><th>mode</th></tr></thead><tbody>z  <tr><td><code>r   r   r   r   r   z  </tbody></table>z  <h2>Candidates</h2>a    <table><thead><tr><th>descriptor</th><th>script+0 CNS</th><th>candidate</th><th>stream+1</th><th>effective base</th><th>gate rows after</th><th>field maps after</th><th>frontier refs after</th><th>last non-pointer</th><th>later pointer-like setters</th></tr></thead><tbody>z</body>z</html>)r  rw   r  r  )r  failed_gatesmissing_evidenceevidence_refscandidate_rowsrX   s         r#   	html_pager     sY   77 => L ww -.  GG >* M N|$ 
()* +;;tyy-?)@AHSIJ KS)9%:;< =S)9%:;< =S)B%CDE F=>? @89: ;?@A B@AB C=>? @	

 99 --- 	- 	#	-
 	Q- 	L- 	- 	r- 	1- 	7- 	:- 	G- 	f- 	t- 	Q-  	'!-" 	#-$ 	%-& 	'-( 	F)-* dkk'("345WT[[QYIZ=[<\  ]C  DK  L\  D]  C^  ^  @G  Hf  @g  h  hK  LS  Tx  Ly  Kz  zW  X_  `F  XG  WH  Hj  kr  sT  kU  jV  Vw  x  @h  xi  wj  j}  ~E	  F	R	  ~S	  }T	  T	t	  u	y	  u	@
  u	@
  A
H
  I
Z
  A
[
  u	\
  t	]
  ]
i
  	j
+-, GL12348--. 	"/-0 e$1-2 	&3-4 !"%(5-6 	#7-8 u%9-: 	&;-< 	B=->	[[):!;<R!STU V[[):!;<Q!RST U[[):!;<O!PQR S{{7#45mDEF G		?-J 	K-L 	 M-N 	^O-P 
Q-R 	S-T 	U-V 	W-X 	Y- - -r&   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       |d
z  j                  t	        |       d	       y )NT)parentsexist_okz2save_selector_opcode20_object_base_candidates.jsonF   )ensure_asciiindentr  r+   r,   2save_selector_opcode20_object_base_candidates.html)mkdir
write_textr/   dumpsr   )r  out_dirs     r#   write_outputsr,    sk    MM$M.CCOO

7q9D@ P  CCOO' P r&   c                 F   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               | j                         }t        |j                  j                         t        |j                  i       t        |j                  i             }t        ||j                         t!        d
|j                  dz          y )N)r   z--exer   )typedefaultz--descriptor-scriptsr   z--selection-buffer-basesr   z	--out-dirz:wrote save selector opcode 0x20 object base candidates -> r'  )argparseArgumentParser__doc__add_argumentr   ROOTr   
parse_argsr  r<   
read_bytesr3   r   r   r,  r+  print)parserargsr  s      r#   mainr:    s    $$9F
dD=4HI
.T3IyCyz
2sMxGxy
$<D$))2.$--r2G
 '4<<(	D<<NN
O	Qr&   __main__)r"   r5   returnstr)r   r   r2   r   r<  r   )r"   z
str | Noner<  
int | None)r<   bytesr=   
list[dict]r>   r5   r<  r>  )rI   r5   r<  r=  )rX   dictr<  rA  )r<   r?  r=   r@  rx   dict[int, str]ry   r5   rz   dict[str, int]r{   r5   r|   r5   r<  r@  )r<   r?  r=   r@  rx   rB  ry   r5   r{   r5   rz   rC  r<  rA  )r<   r?  r   rA  r<  r@  )r   zlist[str | None]r<  r@  )NN)r<   r?  r   dict | Noner   rD  r<  rA  )r  rA  r<  r=  )r  rA  r+  r   r<  None)r<  rE  )3r2  
__future__r   r0  r  r/   r:   syspathlibr   typingr   r   insertr=  __file__resolveparentprobe_exe_scene_tablesr   r   r   r"  r4  r   r   r   rv   rr   rs   rt   r   r   r   r$   r)   r3   r6   r@   rJ   r[   r   r   r   r   r  r  r   r,  r:  __name__r    r&   r#   <module>rP     s   M "     
   3tH~--/667 8 P P H~''*
Ul		d|, : ( $) % S
 EQ
 @T& " 8-48+	++ + 	+
 "+ + + +\	  	
  " 
89	99 9x>BFRJZ 25 	& zF r&   