
    UHj*^                       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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mZ  e
e      j#                         j4                  d   Zed	z  Zd
ZdZdZd
Z dZ!dZ"dZ# ejH                  d      Z% ejH                  d      Z&d(dZ'd)dZ(d*dZ)d+dZ*d,dZ+d-dZ,d.dZ-d/d0dZ.d1dZ/d2dZ0d3dZ1d4dZ2d4dZ3	 	 	 	 	 	 	 	 	 	 	 	 d5dZ4	 	 	 	 	 	 	 	 	 	 d6dZ5d7d Z6	 	 	 	 	 	 	 	 	 	 	 	 d8d!Z7d9d"Z8d:d#Z9d;d$Z:efd<d%Z;d=d&Z<e=d'k(  r e<        yy)>zLClassify map1_01a/map2_02d scene refs against the strict event-record shape.    )annotationsN)Path)Any)find_pointer_refsread_point_table)find_cns_stringsread_sectionsva_to_offset   outmap1_01amap2_02dmap1_02biD+T i+T iP3P zmap\d+_\d+[a-z]\.cns$c                2    t        | t              rd| dS d S )N0x08x)
isinstanceint)values    @/home/exedev/hwanse/tools/summarize_map1_01a_event_shape_scan.pyhex32r   !   s    )%5Rc{?4?    c                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)pathfallbacks     r   	load_jsonr#   %   s*    ;;=::dnngn677r   c                    | j                  d      }d}|j                  |      st        |  d      t        j                  |t        |      d  j                  d            S )Nr   r   zwindow.HWANSE_MAPS = z. does not contain the expected maps.js wrapperz;
)r    
startswith
ValueErrorr   r   lenrstrip)r!   textprefixs      r   parse_maps_jsr+   +   s[    >>7>+D$F??6"D6!OPQQ::d3v;<(//677r   c                N    | D ]   }|d   }||d   z   }||cxk  r	|k  s|c S  " y )Nrawraw_size )sectionsoffsetsectionstartends        r   section_for_offsetr5   3   sE     gj))F S N !
 r   c                <    t        | |      }|sy |d   |z   |d   z
  S )Nvar-   )r5   )r0   r1   r2   s      r   offset_to_va_localr8   <   s,     62G4=6!GEN22r   c                d    |dk  s|dz   t        |       kD  ry t        j                  d| |      d   S )Nr      <I)r'   structunpack_from)exer1   s     r   dword_at_offsetr?   C   s5    zVaZ#c(*dC033r   c                8    t        ||      }|y t        | |      S )N)r
   r?   )r>   r0   r7   r1   s       r   dword_at_varA   I   s#    (B'F~3''r   c                    g }t        |      D ]Z  }||dz  z   }t        | ||      }|j                  d|dz  dt        |      |t        |      |j	                  |xs d      d       \ |S )Nr:   z+0x02x)	offsetHexvaHexr   valueHexstring)rangerA   appendr   get)	r>   r0   stringsr7   countrowsindexfield_var   s	            r   
dword_rowsrQ   P   s~    Du 		>C84uqyo.8_ekk%+2.
 		 Kr   c                >   |j                         D cg c]  \  }}||k(  s| }}}g }|D ]U  }t        j                  d|      }	d}
	 | j                  |	|
      }|dk  r4|dz   }
t	        ||      r|j                  |       ; t        t        |            S c c}}w Nr;   r   r   )itemsr<   packfindr5   rJ   sortedset)r>   r0   rL   filenamer7   name
string_vasoffsets	string_vaneedlecursorhits               r   candidate_ref_offsetsra   _   s    %,]]_IT8H"IJIG 	$	T9-((66*CQw1WF!(C0s# 	$ #g, Js
   BBc                0   g }|j                         D ]n  \  }}t        j                  |      st        j                  d|      }d}	 | j                  ||      }|dk  rM|dz   }t        ||      r|j                  |       ; t        t        |            S rS   )
rT   FIELD_MAP_RE	fullmatchr<   rU   rV   r5   rJ   rW   rX   )	r>   r0   rL   r\   r]   rY   r^   r_   r`   s	            r   all_field_map_ref_offsetsre   o   s    G&}} $	8%%h/T9-((66*CQw1WF!(C0s# $ #g,r   c                <   t        | j                  d      xs g       }| j                  d      xs g D ]S  }|j                  d      xs g D ]9  }t        |t              s|j	                  d      s&|j                  |d d        ; U t        t        |            S )NtargetseventDispatchRefsconditionLinkedStrings.cns)listrK   r   strendswithrJ   rW   rX   )eventrg   refr   s       r   event_targetsrq      s    599Y'-2.Gyy,-3 +WW56<" 	+E%%%..*@uSbz*	++ #g,r   c                    t               }| D ]W  }|j                  d      xs g D ]=  }t        |t              st        j                  |      s*|j                  |d d        ? Y t        |      S )Nri   rk   )rX   rK   r   rm   rc   rd   addrW   )dispatch_refsrg   rp   r   s       r   $field_map_targets_from_dispatch_refsru      sk    eG (WW56<" 	(E%%,*@*@*GE#2J'	(( '?r   c                    t               }| D ]P  }|j                  d      xs g D ]6  }t        |t              s|j	                  d      s&|j                  |       8 R t        |      S )Nri   rj   )rX   rK   r   rm   rn   rs   rW   )rt   valuesrp   r   s       r   linked_cns_from_dispatch_refsrx      sc    UF "WW56<" 	"E%%%..*@

5!	"" &>r   c           	     V   t        ||      }|j                  t        | |      xs d      }t        |t              r|j                  d      r|d d n|}t        | |dz         }t        | |dz         }	t        | |dz         }
t        | |dz         }t        | |dz         }t        | |d	z         }t        t        |t              xrI t        j                  |      xr2 t        |t              xr  d
|cxk  xr dk  nc xr |dz  dv xr |	d
k(        }|j                  |xs d      xs i }t        |j                  d      xs d
      }t        |j                  d      xs d
      }t        |t              xr t        ||      d u}g }g }|r|r|rt        | ||||      \  }}t        |xr& t        |
t              xr |
dk  xr |dk(  xr |xr |      }|j                  |xs d      }g }|s|j                  d       |r&t        |
t              r|
dk  s|j                  d       |r.|dk7  r)|r|j                  d| d       n|j                  d       |r|dk(  r|s|j                  d       |r|dk(  r|r|s|j                  d       |rg }i d|dt        |      d|d|d|dt        |t              rd |d!nd d"|
d#t        |
      d$t        |      d%t        |      d&|d'|d(|d)|d*t        |      d+t        |      d,|d d |t        | |||xs d
      d-S ).NrD   rj   rk   r:                  r   i      >   r   r~    widthheight   ?   znot a scene recordz%field +0x0c is not a small event kindzfield +0x10 is resource z, not event sentinel 0x3fz&field +0x10 is not event sentinel 0x3fzpoint table pointer is invalidz#point table has no in-bounds pointsrecordVarecordVaHexrY   mapsceneId
sceneIdHexr   04x	eventKindeventKindHexsentinelHexpointTableHexpointCountHintnextResourceAtSentinelFieldsceneRecordLikeeventRecordShaperawPointCountinBoundsPointCountfirstInBoundsPoints)rejectionReasonsdwords)r8   rK   r?   r   rm   rn   boolMAP_RErd   r   r
   r   rJ   r   r'   rQ   )r>   r0   rL   map_datar1   r7   rY   map_stemscene_idzero
event_kindsentinel	point_ptrpoint_count_hintscene_record_likemap_rowr   r   point_valid
raw_points	in_boundsevent_shapenext_resourcerejection_reasonss                           r   classify_recordr      s    
Hf	-B{{?37=2>H *8S 9h>O>OPV>Wx}]eHsFQJ/H3
+D frk2JsFRK0HVb[1I&sFRK88S! 	X&	x%	 #8#	 tO|+		
 AI ll8>r*0bGG$)*EX&+!,FY,^h	1RZ^1^KJIu 0h	5RX Y
I 	z3'		 	 		
 K KKB/M  !56*Z"=*uBT  !HIX-$$'?Ng%hi$$%MNX-k  !ABX-+i  !FGBuRy 	H 	x	
 	8 	Z#-F8C.)D 	Z 	j) 	uX 	y) 	* 	&} 	, 	K 	Z  	c)n!" 	y!}#$ .S(GRW1=' r   c                   |j                  d      }g }t        |t              rt        | ||dz   ddh      }t	        |      }||j                  d      |j                  d      |j                  d      |j                  d      |j                  d	      |j                  d
      |t        |      t        |      t        |t              r||v dS ddS )Nr   r{   z.dataz.rdatar   r   r   r   r   r   F)r   r   r   r   r   r   r   fieldMapTargetsallLinkedCnseventDispatchRefCountextractedEventPresent)rK   r   r   r   ru   rx   r'   )r>   r0   rowextracted_event_vas	record_vart   field_targetss          r   strict_event_scan_rowr      s     
#IM)S!)#xR'S[I\]8GMww}-wwu~ggl+/1!gg&:;(5mD!$]!3EOPY[^E_.A!A  fk r   c                \   | j                  d      | j                  d      | j                  d      | j                  d      | j                  d      | j                  d      | j                  d      | j                  d      | j                  d	      | j                  d
      t        |       dS )Nr   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   reason)rK   compact_reasonr   s    r   relaxed_event_scan_rowr     s    GGJ'ww}-wwu~ggl+/ww}-11!gg&:;'*ww/L'M % r   c                r   |D ch c]2  }t        |j                  d      t              r|j                  d      4 }}t        | ||      D cg c]  }t	        | ||||       }}|D 	cg c]  }	|	j                  d      s|	 }
}	|
D 	cg c]  }	|	j                  d      s|	 }}	|D 	cg c]  }	t        | ||	|       }}	|D 	ch c]2  }	t        |	j                  d      t              r|	j                  d      4 }}	|
D 	cg c]H  }	|	j                  d      s5t        |	j                  d      t              r|	j                  d      dk  r|	J }}	|D 	cg c]  }	|	j                  d      t        k(  r|	 }}	|D 	cg c]  }	t        |	j                  d      xs g v r|	! }}	|D 	cg c]"  }	t         d|	j                  d	      xs g v r|	$ }}	|D 	cg c]  }	t        |	       }}	|D 	cg c]!  }	|	j                  d      t        t        hv r|	# }}	t        |      t        |
      t        |      ||k(  t        ||z
        D cg c]  }t        |       c}t        ||z
        D cg c]  }t        |       c}t        |      t        |      t        |      t        |      t        |D 	ch c]$  }	|	j                  d      r|	j                  d      & c}	      t        |      |||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 c c}	w c c}	w c c}	w c c}w c c}w c c}	w )Nr   r   r   r   r   r   r   rj   r   )allMapReferenceCountallMapSceneRecordLikeCountallStrictEventShapeRecordCount(allStrictEventShapesMatchExtractedEventsmissingFromExtractedEvents)extractedEventsMissingFromStrictShapeScanallStrictEventSourceMap1Count!allStrictEventTargetMap2_02dCount%allStrictEventMap2_02dAnyMentionCount%relaxedNonStrictSmallEventRecordCountrelaxedNonStrictMapCount&relaxedRowsTouchingSourceOrTargetCountstrictEventRecordsrelaxedNonStrictRows!relaxedRowsTouchingSourceOrTarget)r   rK   r   re   r   r   SOURCETARGETr   r'   rW   r   )r>   r0   rL   r   eventsro   r   r1   all_rowsr   scene_like_rowsstrict_rowsstrict_scan_rowsstrict_event_vasrelaxed_non_strict_rowssource_strict_rowstarget_strict_rowsany_target_mention_rowsrelaxed_scan_rows!relaxed_touching_source_or_targetr   s                        r   scan_all_event_shape_recordsr     s    eii
+S1 			*  0XwG 	Xw&AH  '/Ms#'':K2LsMOM"1Q3SWW=O5P3QKQ  	c8S2EF  cggj)3/ 	
  'ww)*sww{+S1GGK 5( 	  (775>V# 	 
 (cgg/06B7 	 
 (XT?sww~6<"= 	  + 	s# 
 ))775>ff-- 	)% )
 !$H&)/&:*-k*:4DH[4[   03F FG'
 %L'
   36F FG6
 %L6
 *--?)@-01C-D145L1M145L1M$'()
wwu~ GGEN)
 %
 366W2X. 1-N3 ]
 NQ
)'
6
)
sf   7K.K3)K8 K8
K=!K=+L7LAL!L=$L''LL ,&L%L**L//)L4c                d   t        |       }t        | |      }t        | ||t         d      D cg c]  }t	        | ||||       }}t        | ||t
         d      D cg c]  }t	        | ||||       }}t	        | |||t        |t              xs d      }t        d |D        i       }	t        d |D        i       }
|D cg c]  }|j                  d      t        k(  s| }}|D cg c]  }t
        t        |      v r| }}|D cg c]  }t
        t        |      v r| }}|D cg c]  }|j                  d      s| }}|D cg c]  }|j                  d      s| }}t        |	j                  d      xs |
j                  d            }t        | ||||      }d}i dt        d	t
        d
t         dt         dddddddddd|dt        |      dt        |      dt        |      dt        |      dt        |      dt        |      dt        |      d|d|	d|
d |d!|||D cg c]C  }|j                  d      |j                  d"      t        |      |j                  d#      xs g d$E c}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 )'Nrj   r   c              3  R   K   | ]  }|j                  d       t        k(  s| ! ywr   N)rK   CURRENT_FRONTIER_SOURCE_RECORD.0r   s     r   	<genexpr>z build_summary.<locals>.<genexpr>z  !     `#''**=A_*_`   ''c              3  R   K   | ]  }|j                  d       t        k(  s| ! ywr   )rK   CURRENT_FRONTIER_TARGET_RECORDr   s     r   r   z build_summary.<locals>.<genexpr>~  r   r   r   r   aC  The confirmed map1_02b -> map1_01a event record has the strict shape map pointer, scene id, zero, small event kind, sentinel 0x3f, point-table pointer, hint. Every direct map1_01a and map2_02d scene reference in the current route scan is a load/scene-list record instead: field +0x0c is a resource-load word and field +0x10 points at a tileset resource. A broad scan of every field-map scene record finds the same strict event records as scene_events.json, with no strict event starting at map1_01a and no strict event targeting map2_02d. This keeps map1_01a -> map2_02d blocked.sourcetargetconfirmedReferenceRoutez -> strictEventShapezmap filename pointerzscene idr   zsmall event kindz0x0000003f sentinelzpoint table pointerzpoint count hint)field0field4field8field12field16field20field24confirmedEventRecordsourceReferenceCounttargetReferenceCountsourceEventShapeRecordCounttargetEventShapeRecordCount directStrictEventTransitionCountsourceStrictEventCounttargetStrictEventIncomingCountallEventShapeScancurrentFrontierSourceRecordcurrentFrontierTargetRecordcurrentFrontierEventShapeFoundsourceRecordsr   activePoints)r   r   rg   r   blocked)targetRecordsdirectStrictEventTransitionspromotionStatus
conclusion)r	   r   ra   r   r   r   r
   CONFIRMED_EVENT_RECORDnextrK   rq   r   r   CONFIRMED_SOURCECONFIRMED_TARGETr'   )r>   r   r   r0   rL   r1   source_recordstarget_recordsconfirmed_recordcurrent_source_recordcurrent_target_recordro   source_eventstarget_strict_eventsdirect_strict_eventsr   source_event_shape_recordstarget_event_shape_recordscurrent_frontier_event_shapeall_event_shape_scanr  s                        r   build_summaryr  g  s   S!HsH-G ,C7vhdOT 	Xw&AN  ,C7vhdOT 	Xw&AN  'X56;! !``
 !``
 )/Mu%))E2Bf2LUMMM!]5)) 	 
 )]5)) 	  2@!_#377K]C^#!_!_1?!_#377K]C^#!_!_#'!!"45 	9 $$%78$  8XwPXZ`a	3 &&&&& 	"&6%7t<L;M#N& 	, ),,)
	& 	 0& 	N 3& 	N 3&  	&s+E'F!&" 	&s+E'F#&$ 	+C0D,E%&& 	!#m"4'&( 	)#.B*C)&* 	1+&, 	&'<-&. 	&'</&0 	)*F1&2 	3&4 ( .)
  yy'$yy7(/ %		. 9 ?R	)
 % K& &a& N "`!_T)
sB   J
JJJ)J	J)J# J#
J(!J(:AJ-c                v    | j                  d      rydj                  | j                  d      xs g       xs dS )Nr   zevent-shapedz; r   -)rK   joinr   s    r   r   r     s5    
ww!"99SWW/06B7>3>r   c                "   | j                  d      xs i }| j                  d      xs i }dPddj                   d| j                  d      xs i        d| j                  d      xs i       g      }dj                  fd	g | d
   | d   D              }dj                  d |j                  d      xs g D              }dj                  d |j                  d      xs g D              }dj                  g ddddd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+|j                  d,       d-|j                  d.       d/|j                  d0       d1|j                  d2       d3d4t        j                  | d5          d6d7t        j                  t	        |j                  d8      xs d9             d:t        j                  t	        |j                  d;      xs d9             d<t        j                  t	        |j                  d=      xs d9             d>t        j                  t	        |j                  d?      xs d9             d@t        j                  t	        |j                  dA      xs d9             dB|j                  dC       d3dDdE|dFdGdE|dFdHdI|dFdJdKdL|dFdMdNdO      S )QNr   r   c                &   dt        j                  |        dt        j                  t        |j                  d      xs d             dt        j                  t        |j                  d      xs d             d|j                  d       dt        j                  t        |j                  d	      xs d             dt        j                  t        |j                  d
      xs d             dt        j                  t	        |             dS )Nz<tr><td>z</td><td><code>r   r  </code></td><td><code>r   </code></td><td>r   r   r   
</td></tr>)htmlescaperm   rK   r   )roler   s     r   row_htmlzhtml_page.<locals>.row_html  s    ;;t$% &S)?)F3%GHI JS)>3%?@A B77-./ 0S)@)GC%HIJ KS)?)F3%GHI J;;~c234 5
	
r   
r   r   r   r   c              3  d   K   | ]'  } |j                  d       t        k(  rdnd|       ) yw)r   r   r   N)rK   r   )r   r   r  s     r   r   zhtml_page.<locals>.<genexpr>  s1       	SWWU^v58SIs   -0r   r   c              3  R  K   | ]  }d t        j                  t        |j                  d      xs d             dt        j                  t        |j                  d      xs d             dt        j                  t        |j                  d      xs d             dt        j                  t        |j                  d      xs d             dt        j                  dj	                  |j                  d	      xs g       xs d       d
|j                  d       d ! yw)<tr><td><code>r   r  r  r   r   r   r  z, r   	</td><td>r   r  N)r  r  rm   rK   r  r   s     r   r   zhtml_page.<locals>.<genexpr>  s     
 	[[SWW]%;%Bs!CDE F[[SWWU^%:s!;<= >[[SWW^%<%C!DEF G[[SWW_%=%D!EFG H{{499SWW->%?%E2FM#NO Pww./0 1	
s   D%D'r   c              3  6  K   | ]  }d t        j                  t        |j                  d      xs d             dt        j                  t        |j                  d      xs d             dt        j                  t        |j                  d      xs d             dt        j                  t        |j                  d      xs d             dt        j                  t        |j                  d      xs d             dt        j                  t        |j                  d	                   d
t        j                  t        |j                  d                   dt        j                  t        |j                  d      xs d             d  yw)r"  r   r  r  r   r   r   r   r  r   z / r   r#  r   r  N)r  r  rm   rK   r   s     r   r   zhtml_page.<locals>.<genexpr>  sR      	[[SWW]%;%Bs!CDE F[[SWWU^%:s!;<= >[[SWW\%:%Ac!BCD E[[SWW^%<%C!DEF G[[SWW]%;%Bs!CDE F{{3sww';<=>?s4;;sSVSZSZ[jSkOlCmBn o{{3swwx07C89: ;	s   FFr   z<!doctype html>z<html lang="en">z<head>z  <meta charset="utf-8">zF  <meta name="viewport" content="width=device-width, initial-scale=1">z*  <title>map1_01a Event Shape Scan</title>a    <style>body{font-family:system-ui,sans-serif;background:#111;color:#eee;margin:24px}table{border-collapse:collapse;width:100%;max-width:1280px}td,th{border:1px solid #333;padding:6px 8px;text-align:left;vertical-align:top}th{background:#1f1f1f}code{color:#9bd4ff}</style>z</head>z<body>z$  <h1>map1_01a Event Shape Scan</h1>z  <p>route <code>z -&gt; z%</code>; source event-shaped records r   z; target event-shaped records r   z%; current frontier event shape found r   z; promotion <code>r   z</code>.</p>z   <p>All map scene-like records r   z"; all strict event-shaped records r   z(; strict events match scene_events.json r   z); all strict event source map1_01a count r   z); all strict event target map2_02d count r   z); relaxed non-strict small-event records r   z(; relaxed non-strict source/target rows r   z.</p>z  <p>r  z</p>z"  <p>confirmed event record <code>r   r  z</code> <code>r   z</code>; kind <code>r   z</code>; sentinel <code>r   z</code>; point table <code>r   z</code>; in-bounds points r   z#  <h2>Current Frontier Records</h2>z  <table><thead><tr><th>role</th><th>record</th><th>map</th><th>event shaped</th><th>+0x0c</th><th>+0x10</th><th>reason</th></tr></thead><tbody>z  </tbody></table>z)  <h2>Source/Target Scene References</h2>z*  <h2>All Strict Event-Shaped Records</h2>z  <table><thead><tr><th>record</th><th>source map</th><th>kind</th><th>point table</th><th>field-map targets</th><th>extracted event</th></tr></thead><tbody>z1  <h2>Relaxed Non-Strict Small-Event Records</h2>z  <p>These rows have a small +0x0c value but fail the strict event shape. They are retained as extraction-gap context and do not promote this route.</p>z  <table><thead><tr><th>record</th><th>map</th><th>scene</th><th>+0x0c</th><th>+0x10</th><th>points</th><th>reason</th></tr></thead><tbody>z</body>z</html>r   )r  rm   r   dictreturnrm   )rK   r  r  r  rm   )summary	confirmedbroadfrontier_rowsref_rowsr   relaxed_rowsr  s          @r   	html_pager-    s^   239rIKK+,2E
 II7;;'DEKL7;;'DEKL M yy IW_-I0HI H )) 
 99128b
 
K 99  9934: L 99 ### 	# 	#	#
 	Q# 	5# 	\# 	# 	# 	/# GH-.ggh6G5HHmnu  wT  oU  nV  Vt  u|  }Z  u[  t\  \A  BI  Jj  Bk  Al  l~  F  GX  Y  ~Z  Zf  	g# +5995Q+R*SSuv{vv  Aa  wb  vc  cK  LQ  LU  LU  V@  LA  KB  Bk  lq  lu  lu  vU  lV  kW  W@  AF  AJ  AJ  Kn  Ao  @p  pY  Z_  Zc  Zc  dK  ZL  YM  Mu  v{  v  v  @	h	  vi	  uj	  j	o	  	p	# GL12348# -T[[Y]]==Y=`]`9a-b,ccqrvr}r}  B  CL  CP  CP  QV  CW  C^  [^  _  s`  ra  au  vz  vA  vA  BE  FO  FS  FS  Tb  Fc  Fj  gj  Bk  vl  um  mE  FJ  FQ  FQ  RU  V_  Vc  Vc  dq  Vr  Vy  vy  Rz  F{  E|  |W  X\  Xc  Xc  dg  hq  hu  hu  vE  hF  hM  JM  dN  XO  WP  Pj  kt  kx  kx  yM  kN  jO  OT  	U# 	.#  	[!#" 	##$ 	%#& 	4'#( 	[)#* 	+#, 	-#. 	5/#0 	h1#2 	3#4 	5#6 	<7#8 	c9#: 	V;#< 	=#> 	?#@ 	A#B 	C#D 	E# # #r   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       y )
NT)parentsexist_okmap1_01a_event_shape_scan.jsonF),:)ensure_ascii
separatorsr  r   r   )mkdir
write_textr   dumps)r'  out_dirs     r   write_outputsr:    sC    MM$M.//;;

7:FM < r   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               | j                         }t        |j                  j                         t        |j                        t        |j                  g             }t        ||j                          t#        d
|d    d|j                   dz          y )N)descriptionz--exezHwanse2.exe)typedefaultz--mapszmaps.jsz--eventszscene_events.jsonz	--out-dirz=wrote map1_01a event shape scan (source event-shaped records=r   z) -> r1  )argparseArgumentParser__doc__add_argumentr   ROOTOUT
parse_argsr  r>   
read_bytesr+   mapsr#   r   r:  r9  print)parserargsr'  s      r   mainrK  '  s    $$9F
dD=4HI
tS9_E

s=P7PQ
$<Ddii $++r"G
 '4<<(		((/0M(N'O Pll==>	@r   __main__)r   
int | Noner&  z
str | None)r!   r   r"   r   r&  r   )r!   r   r&  r%  )r0   
list[dict]r1   r   r&  zdict | None)r0   rN  r1   r   r&  rM  )r>   bytesr1   r   r&  rM  )r>   rO  r0   rN  r7   r   r&  rM  )rz   )r>   rO  r0   rN  rL   dict[int, str]r7   r   rM   r   r&  rN  )
r>   rO  r0   rN  rL   rP  rY   rm   r&  	list[int])r>   rO  r0   rN  rL   rP  r&  rQ  )ro   r%  r&  	list[str])rt   rN  r&  rR  )r>   rO  r0   rN  rL   rP  r   r%  r1   r   r&  r%  )
r>   rO  r0   rN  r   r%  r   zset[int]r&  r%  )r   r%  r&  r%  )r>   rO  r0   rN  rL   rP  r   r%  r   rN  r&  r%  )r>   rO  r   r%  r   rN  r&  r%  )r   r%  r&  rm   )r'  r%  r&  rm   )r'  r%  r9  r   r&  None)r&  rS  )>rA  
__future__r   r?  r  r   rer<   syspathlibr   typingr   r!   insertrm   __file__resolveparentextract_scene_eventsr   r   probe_exe_scene_tablesr   r	   r
   r/  rC  rD  r   r   r  r  r   r   r  compiler   rc   r   r#   r+   r5   r8   r?   rA   rQ   ra   re   rq   ru   rx   r   r   r   r   r  r   r-  r:  rK  __name__r/   r   r   <module>ra     s   R "    	  
   3tH~--/667 8 D P P H~''*
Ul		  !+ !+ # 	,	-rzz23@8834(   " M	MM M 	M
 M 
M`	 
 "	
 
4 O	OO O 	O
 O 
OdYx?Sl 25 ( zF r   