; Listing generated by Microsoft (R) Optimizing Compiler Version 14.00.50727.762 

	TITLE	d:\Source Code\STGM\engine_string.cpp
	.686P
	.XMM
	include listing.inc
	.model	flat

INCLUDELIB LIBCMTD
INCLUDELIB OLDNAMES

PUBLIC	??_C@_0P@GHFPNOJB@bad?5allocation?$AA@		; `string'
PUBLIC	?m_UsedTempStringCount@WideStringClass@@2PAHA	; WideStringClass::m_UsedTempStringCount
PUBLIC	?ReservedMask@StringClass@@2PAIA		; StringClass::ReservedMask
PUBLIC	?m_EmptyString@StringClass@@2PAPADA		; StringClass::m_EmptyString
PUBLIC	?m_EmptyString@WideStringClass@@2PAPA_WA	; WideStringClass::m_EmptyString
PUBLIC	?m_ResTempPtr@WideStringClass@@2PAPA_WA		; WideStringClass::m_ResTempPtr
PUBLIC	?m_NullChar@StringClass@@2PADA			; StringClass::m_NullChar
PUBLIC	?m_NullChar@WideStringClass@@2PA_WA		; WideStringClass::m_NullChar
PUBLIC	?m_TempStrings@StringClass@@2PADA		; StringClass::m_TempStrings
PUBLIC	?m_Mutex@StringClass@@2PAVCriticalSectionClass@@A ; StringClass::m_Mutex
PUBLIC	?m_FreeTempPtr@WideStringClass@@2PAPA_WA	; WideStringClass::m_FreeTempPtr
PUBLIC	?m_TempMutex@WideStringClass@@2PAVCriticalSectionClass@@A ; WideStringClass::m_TempMutex
PUBLIC	?collate@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::collate
PUBLIC	?ctype@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::ctype
PUBLIC	?monetary@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::monetary
PUBLIC	?numeric@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::numeric
PUBLIC	?time@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::time
PUBLIC	?messages@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::messages
PUBLIC	?all@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::all
PUBLIC	?none@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::none
PUBLIC	?table_size@?$ctype@D@std@@2IB			; std::ctype<char>::table_size
PUBLIC	?skipws@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::skipws
PUBLIC	?unitbuf@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::unitbuf
PUBLIC	?uppercase@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::uppercase
PUBLIC	?showbase@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::showbase
PUBLIC	?showpoint@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::showpoint
PUBLIC	?showpos@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::showpos
PUBLIC	?left@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::left
PUBLIC	?right@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::right
PUBLIC	?internal@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::internal
PUBLIC	?dec@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::dec
PUBLIC	?oct@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::oct
PUBLIC	?hex@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::hex
PUBLIC	?scientific@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::scientific
PUBLIC	?fixed@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::fixed
PUBLIC	?boolalpha@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::boolalpha
PUBLIC	?_Stdio@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::_Stdio
PUBLIC	?adjustfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::adjustfield
PUBLIC	?basefield@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::basefield
PUBLIC	?floatfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::floatfield
PUBLIC	?goodbit@?$_Iosb@H@std@@2W4_Iostate@12@B	; std::_Iosb<int>::goodbit
PUBLIC	?eofbit@?$_Iosb@H@std@@2W4_Iostate@12@B		; std::_Iosb<int>::eofbit
PUBLIC	?failbit@?$_Iosb@H@std@@2W4_Iostate@12@B	; std::_Iosb<int>::failbit
PUBLIC	?badbit@?$_Iosb@H@std@@2W4_Iostate@12@B		; std::_Iosb<int>::badbit
PUBLIC	?_Hardfail@?$_Iosb@H@std@@2W4_Iostate@12@B	; std::_Iosb<int>::_Hardfail
PUBLIC	?in@?$_Iosb@H@std@@2W4_Openmode@12@B		; std::_Iosb<int>::in
PUBLIC	?out@?$_Iosb@H@std@@2W4_Openmode@12@B		; std::_Iosb<int>::out
PUBLIC	?ate@?$_Iosb@H@std@@2W4_Openmode@12@B		; std::_Iosb<int>::ate
PUBLIC	?app@?$_Iosb@H@std@@2W4_Openmode@12@B		; std::_Iosb<int>::app
PUBLIC	?trunc@?$_Iosb@H@std@@2W4_Openmode@12@B		; std::_Iosb<int>::trunc
PUBLIC	?_Nocreate@?$_Iosb@H@std@@2W4_Openmode@12@B	; std::_Iosb<int>::_Nocreate
PUBLIC	?_Noreplace@?$_Iosb@H@std@@2W4_Openmode@12@B	; std::_Iosb<int>::_Noreplace
PUBLIC	?binary@?$_Iosb@H@std@@2W4_Openmode@12@B	; std::_Iosb<int>::binary
PUBLIC	?beg@?$_Iosb@H@std@@2W4_Seekdir@12@B		; std::_Iosb<int>::beg
PUBLIC	?cur@?$_Iosb@H@std@@2W4_Seekdir@12@B		; std::_Iosb<int>::cur
PUBLIC	?end@?$_Iosb@H@std@@2W4_Seekdir@12@B		; std::_Iosb<int>::end
_BSS	SEGMENT
?m_UsedTempStringCount@WideStringClass@@2PAHA DD 01H DUP (?) ; WideStringClass::m_UsedTempStringCount
?ReservedMask@StringClass@@2PAIA DD 01H DUP (?)		; StringClass::ReservedMask
?m_EmptyString@StringClass@@2PAPADA DD 01H DUP (?)	; StringClass::m_EmptyString
?m_EmptyString@WideStringClass@@2PAPA_WA DD 01H DUP (?)	; WideStringClass::m_EmptyString
?m_ResTempPtr@WideStringClass@@2PAPA_WA DD 01H DUP (?)	; WideStringClass::m_ResTempPtr
?m_NullChar@StringClass@@2PADA DD 01H DUP (?)		; StringClass::m_NullChar
?m_NullChar@WideStringClass@@2PA_WA DD 01H DUP (?)	; WideStringClass::m_NullChar
?m_TempStrings@StringClass@@2PADA DD 01H DUP (?)	; StringClass::m_TempStrings
?m_Mutex@StringClass@@2PAVCriticalSectionClass@@A DD 01H DUP (?) ; StringClass::m_Mutex
?m_FreeTempPtr@WideStringClass@@2PAPA_WA DD 01H DUP (?)	; WideStringClass::m_FreeTempPtr
?m_TempMutex@WideStringClass@@2PAVCriticalSectionClass@@A DD 01H DUP (?) ; WideStringClass::m_TempMutex
_BSS	ENDS
;	COMDAT ?end@?$_Iosb@H@std@@2W4_Seekdir@12@B
CONST	SEGMENT
?end@?$_Iosb@H@std@@2W4_Seekdir@12@B DD 02H		; std::_Iosb<int>::end
CONST	ENDS
;	COMDAT ?cur@?$_Iosb@H@std@@2W4_Seekdir@12@B
CONST	SEGMENT
?cur@?$_Iosb@H@std@@2W4_Seekdir@12@B DD 01H		; std::_Iosb<int>::cur
CONST	ENDS
;	COMDAT ?beg@?$_Iosb@H@std@@2W4_Seekdir@12@B
CONST	SEGMENT
?beg@?$_Iosb@H@std@@2W4_Seekdir@12@B DD 00H		; std::_Iosb<int>::beg
CONST	ENDS
;	COMDAT ?binary@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?binary@?$_Iosb@H@std@@2W4_Openmode@12@B DD 020H	; std::_Iosb<int>::binary
CONST	ENDS
;	COMDAT ?_Noreplace@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?_Noreplace@?$_Iosb@H@std@@2W4_Openmode@12@B DD 080H	; std::_Iosb<int>::_Noreplace
CONST	ENDS
;	COMDAT ?_Nocreate@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?_Nocreate@?$_Iosb@H@std@@2W4_Openmode@12@B DD 040H	; std::_Iosb<int>::_Nocreate
CONST	ENDS
;	COMDAT ?trunc@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?trunc@?$_Iosb@H@std@@2W4_Openmode@12@B DD 010H		; std::_Iosb<int>::trunc
CONST	ENDS
;	COMDAT ?app@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?app@?$_Iosb@H@std@@2W4_Openmode@12@B DD 08H		; std::_Iosb<int>::app
CONST	ENDS
;	COMDAT ?ate@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?ate@?$_Iosb@H@std@@2W4_Openmode@12@B DD 04H		; std::_Iosb<int>::ate
CONST	ENDS
;	COMDAT ?out@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?out@?$_Iosb@H@std@@2W4_Openmode@12@B DD 02H		; std::_Iosb<int>::out
CONST	ENDS
;	COMDAT ?in@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?in@?$_Iosb@H@std@@2W4_Openmode@12@B DD 01H		; std::_Iosb<int>::in
CONST	ENDS
;	COMDAT ?_Hardfail@?$_Iosb@H@std@@2W4_Iostate@12@B
CONST	SEGMENT
?_Hardfail@?$_Iosb@H@std@@2W4_Iostate@12@B DD 010H	; std::_Iosb<int>::_Hardfail
CONST	ENDS
;	COMDAT ?badbit@?$_Iosb@H@std@@2W4_Iostate@12@B
CONST	SEGMENT
?badbit@?$_Iosb@H@std@@2W4_Iostate@12@B DD 04H		; std::_Iosb<int>::badbit
CONST	ENDS
;	COMDAT ?failbit@?$_Iosb@H@std@@2W4_Iostate@12@B
CONST	SEGMENT
?failbit@?$_Iosb@H@std@@2W4_Iostate@12@B DD 02H		; std::_Iosb<int>::failbit
CONST	ENDS
;	COMDAT ?eofbit@?$_Iosb@H@std@@2W4_Iostate@12@B
CONST	SEGMENT
?eofbit@?$_Iosb@H@std@@2W4_Iostate@12@B DD 01H		; std::_Iosb<int>::eofbit
CONST	ENDS
;	COMDAT ?goodbit@?$_Iosb@H@std@@2W4_Iostate@12@B
CONST	SEGMENT
?goodbit@?$_Iosb@H@std@@2W4_Iostate@12@B DD 00H		; std::_Iosb<int>::goodbit
CONST	ENDS
;	COMDAT ?floatfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?floatfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 03000H	; std::_Iosb<int>::floatfield
CONST	ENDS
;	COMDAT ?basefield@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?basefield@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 0e00H	; std::_Iosb<int>::basefield
CONST	ENDS
;	COMDAT ?adjustfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?adjustfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 01c0H	; std::_Iosb<int>::adjustfield
CONST	ENDS
;	COMDAT ?_Stdio@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?_Stdio@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 08000H	; std::_Iosb<int>::_Stdio
CONST	ENDS
;	COMDAT ?boolalpha@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?boolalpha@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 04000H	; std::_Iosb<int>::boolalpha
CONST	ENDS
;	COMDAT ?fixed@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?fixed@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 02000H	; std::_Iosb<int>::fixed
CONST	ENDS
;	COMDAT ?scientific@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?scientific@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 01000H	; std::_Iosb<int>::scientific
CONST	ENDS
;	COMDAT ?hex@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?hex@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 0800H		; std::_Iosb<int>::hex
CONST	ENDS
;	COMDAT ?oct@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?oct@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 0400H		; std::_Iosb<int>::oct
CONST	ENDS
;	COMDAT ?dec@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?dec@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 0200H		; std::_Iosb<int>::dec
CONST	ENDS
;	COMDAT ?internal@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?internal@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 0100H	; std::_Iosb<int>::internal
CONST	ENDS
;	COMDAT ?right@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?right@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 080H		; std::_Iosb<int>::right
CONST	ENDS
;	COMDAT ?left@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?left@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 040H		; std::_Iosb<int>::left
CONST	ENDS
;	COMDAT ?showpos@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?showpos@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 020H	; std::_Iosb<int>::showpos
CONST	ENDS
;	COMDAT ?showpoint@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?showpoint@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 010H	; std::_Iosb<int>::showpoint
CONST	ENDS
;	COMDAT ?showbase@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?showbase@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 08H	; std::_Iosb<int>::showbase
CONST	ENDS
;	COMDAT ?uppercase@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?uppercase@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 04H	; std::_Iosb<int>::uppercase
CONST	ENDS
;	COMDAT ?unitbuf@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?unitbuf@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 02H	; std::_Iosb<int>::unitbuf
CONST	ENDS
;	COMDAT ?skipws@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?skipws@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 01H		; std::_Iosb<int>::skipws
CONST	ENDS
;	COMDAT ?table_size@?$ctype@D@std@@2IB
CONST	SEGMENT
?table_size@?$ctype@D@std@@2IB DD 0100H			; std::ctype<char>::table_size
CONST	ENDS
;	COMDAT ?none@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?none@?$_Locbase@H@std@@2HB DD 00H			; std::_Locbase<int>::none
CONST	ENDS
;	COMDAT ?all@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?all@?$_Locbase@H@std@@2HB DD 03fH			; std::_Locbase<int>::all
CONST	ENDS
;	COMDAT ?messages@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?messages@?$_Locbase@H@std@@2HB DD 020H			; std::_Locbase<int>::messages
CONST	ENDS
;	COMDAT ?time@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?time@?$_Locbase@H@std@@2HB DD 010H			; std::_Locbase<int>::time
CONST	ENDS
;	COMDAT ?numeric@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?numeric@?$_Locbase@H@std@@2HB DD 08H			; std::_Locbase<int>::numeric
CONST	ENDS
;	COMDAT ?monetary@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?monetary@?$_Locbase@H@std@@2HB DD 04H			; std::_Locbase<int>::monetary
CONST	ENDS
;	COMDAT ?ctype@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?ctype@?$_Locbase@H@std@@2HB DD 02H			; std::_Locbase<int>::ctype
CONST	ENDS
;	COMDAT ?collate@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?collate@?$_Locbase@H@std@@2HB DD 01H			; std::_Locbase<int>::collate
CONST	ENDS
_DATA	SEGMENT
__bad_alloc_Message DD FLAT:??_C@_0P@GHFPNOJB@bad?5allocation?$AA@
_DATA	ENDS
;	COMDAT ??_C@_0P@GHFPNOJB@bad?5allocation?$AA@
CONST	SEGMENT
??_C@_0P@GHFPNOJB@bad?5allocation?$AA@ DB 'bad allocation', 00H ; `string'
CONST	ENDS
EXTRN	__vswprintf_c_l:PROC
; Function compile flags: /Ogtpy
; File c:\program files\microsoft visual studio 8\vc\include\swprintf.inl
;	COMDAT _vswprintf
_TEXT	SEGMENT
__String$ = 8						; size = 4
_vswprintf PROC						; COMDAT
; __Count$ = edx
; __Format$ = ecx
; __Ap$ = eax

; 51   :     return _vswprintf_c_l(_String, _Count, _Format, NULL, _Ap);

	push	eax
	mov	eax, DWORD PTR __String$[esp]
	push	0
	push	ecx
	push	edx
	push	eax
	call	__vswprintf_c_l
	add	esp, 20					; 00000014H

; 52   : }

	ret	0
_vswprintf ENDP
_TEXT	ENDS
PUBLIC	??_7bad_alloc@std@@6B@				; std::bad_alloc::`vftable'
PUBLIC	??0bad_alloc@std@@QAE@PBD@Z			; std::bad_alloc::bad_alloc
PUBLIC	??_R4bad_alloc@std@@6B@				; std::bad_alloc::`RTTI Complete Object Locator'
PUBLIC	??_R0?AVbad_alloc@std@@@8			; std::bad_alloc `RTTI Type Descriptor'
PUBLIC	??_R3bad_alloc@std@@8				; std::bad_alloc::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2bad_alloc@std@@8				; std::bad_alloc::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@bad_alloc@std@@8			; std::bad_alloc::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	??_R1A@?0A@EA@exception@std@@8			; std::exception::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	??_R0?AVexception@std@@@8			; std::exception `RTTI Type Descriptor'
PUBLIC	??_R3exception@std@@8				; std::exception::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2exception@std@@8				; std::exception::`RTTI Base Class Array'
EXTRN	??0exception@std@@QAE@ABQBD@Z:PROC		; std::exception::exception
EXTRN	??_7type_info@@6B@:QWORD			; type_info::`vftable'
EXTRN	??_Ebad_alloc@std@@UAEPAXI@Z:PROC		; std::bad_alloc::`vector deleting destructor'
EXTRN	?what@exception@std@@UBEPBDXZ:PROC		; std::exception::what
;	COMDAT ??_R2exception@std@@8
; File c:\program files\microsoft visual studio 8\vc\include\exception
rdata$r	SEGMENT
??_R2exception@std@@8 DD FLAT:??_R1A@?0A@EA@exception@std@@8 ; std::exception::`RTTI Base Class Array'
rdata$r	ENDS
;	COMDAT ??_R3exception@std@@8
rdata$r	SEGMENT
??_R3exception@std@@8 DD 00H				; std::exception::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	01H
	DD	FLAT:??_R2exception@std@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVexception@std@@@8
_DATA	SEGMENT
??_R0?AVexception@std@@@8 DD FLAT:??_7type_info@@6B@	; std::exception `RTTI Type Descriptor'
	DD	00H
	DB	'.?AVexception@std@@', 00H
_DATA	ENDS
;	COMDAT ??_R1A@?0A@EA@exception@std@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@exception@std@@8 DD FLAT:??_R0?AVexception@std@@@8 ; std::exception::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	00H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3exception@std@@8
rdata$r	ENDS
;	COMDAT ??_R1A@?0A@EA@bad_alloc@std@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@bad_alloc@std@@8 DD FLAT:??_R0?AVbad_alloc@std@@@8 ; std::bad_alloc::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	01H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3bad_alloc@std@@8
rdata$r	ENDS
;	COMDAT ??_R2bad_alloc@std@@8
rdata$r	SEGMENT
??_R2bad_alloc@std@@8 DD FLAT:??_R1A@?0A@EA@bad_alloc@std@@8 ; std::bad_alloc::`RTTI Base Class Array'
	DD	FLAT:??_R1A@?0A@EA@exception@std@@8
rdata$r	ENDS
;	COMDAT ??_R3bad_alloc@std@@8
rdata$r	SEGMENT
??_R3bad_alloc@std@@8 DD 00H				; std::bad_alloc::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	02H
	DD	FLAT:??_R2bad_alloc@std@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVbad_alloc@std@@@8
_DATA	SEGMENT
??_R0?AVbad_alloc@std@@@8 DD FLAT:??_7type_info@@6B@	; std::bad_alloc `RTTI Type Descriptor'
	DD	00H
	DB	'.?AVbad_alloc@std@@', 00H
_DATA	ENDS
;	COMDAT ??_R4bad_alloc@std@@6B@
rdata$r	SEGMENT
??_R4bad_alloc@std@@6B@ DD 00H				; std::bad_alloc::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AVbad_alloc@std@@@8
	DD	FLAT:??_R3bad_alloc@std@@8
rdata$r	ENDS
;	COMDAT ??_7bad_alloc@std@@6B@
CONST	SEGMENT
??_7bad_alloc@std@@6B@ DD FLAT:??_R4bad_alloc@std@@6B@	; std::bad_alloc::`vftable'
	DD	FLAT:??_Ebad_alloc@std@@UAEPAXI@Z
	DD	FLAT:?what@exception@std@@UBEPBDXZ
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ??0bad_alloc@std@@QAE@PBD@Z
_TEXT	SEGMENT
__Message$ = 8						; size = 4
??0bad_alloc@std@@QAE@PBD@Z PROC			; std::bad_alloc::bad_alloc, COMDAT
; _this$ = ecx

; 371  : 		{	// construct from message string

	push	esi
	lea	eax, DWORD PTR __Message$[esp]
	push	eax
	mov	esi, ecx
	call	??0exception@std@@QAE@ABQBD@Z		; std::exception::exception
	mov	DWORD PTR [esi], OFFSET ??_7bad_alloc@std@@6B@

; 372  : 		}

	mov	eax, esi
	pop	esi
	ret	4
??0bad_alloc@std@@QAE@PBD@Z ENDP			; std::bad_alloc::bad_alloc
_TEXT	ENDS
PUBLIC	??1bad_alloc@std@@UAE@XZ			; std::bad_alloc::~bad_alloc
EXTRN	??1exception@std@@UAE@XZ:PROC			; std::exception::~exception
; Function compile flags: /Ogtpy
;	COMDAT ??1bad_alloc@std@@UAE@XZ
_TEXT	SEGMENT
??1bad_alloc@std@@UAE@XZ PROC				; std::bad_alloc::~bad_alloc, COMDAT
; _this$ = ecx

; 380  : 		{	// destroy the object

	mov	DWORD PTR [ecx], OFFSET ??_7bad_alloc@std@@6B@

; 381  : 		}

	jmp	??1exception@std@@UAE@XZ		; std::exception::~exception
??1bad_alloc@std@@UAE@XZ ENDP				; std::bad_alloc::~bad_alloc
_TEXT	ENDS
EXTRN	??3@YAXPAX@Z:PROC				; operator delete
; Function compile flags: /Ogtpy
;	COMDAT ??_Gbad_alloc@std@@UAEPAXI@Z
_TEXT	SEGMENT
___flags$ = 8						; size = 4
??_Gbad_alloc@std@@UAEPAXI@Z PROC			; std::bad_alloc::`scalar deleting destructor', COMDAT
; _this$ = ecx
	push	esi
	mov	esi, ecx
	mov	DWORD PTR [esi], OFFSET ??_7bad_alloc@std@@6B@
	call	??1exception@std@@UAE@XZ		; std::exception::~exception
	test	BYTE PTR ___flags$[esp], 1
	je	SHORT $LN6@scalar
	push	esi
	call	??3@YAXPAX@Z				; operator delete
	add	esp, 4
$LN6@scalar:
	mov	eax, esi
	pop	esi
	ret	4
??_Gbad_alloc@std@@UAEPAXI@Z ENDP			; std::bad_alloc::`scalar deleting destructor'
_TEXT	ENDS
PUBLIC	?Unlock@CriticalSectionClass@@QAEXXZ		; CriticalSectionClass::Unlock
; Function compile flags: /Ogtpy
; File d:\source code\stgm\engine_threading.h
;	COMDAT ?Unlock@CriticalSectionClass@@QAEXXZ
_TEXT	SEGMENT
?Unlock@CriticalSectionClass@@QAEXXZ PROC		; CriticalSectionClass::Unlock, COMDAT
; _this$ = ecx

; 28   : 		x = 0;

	mov	DWORD PTR [ecx], 0

; 29   : 	}

	ret	0
?Unlock@CriticalSectionClass@@QAEXXZ ENDP		; CriticalSectionClass::Unlock
_TEXT	ENDS
PUBLIC	?Get_Header@StringClass@@QAEPAU_HEADER@1@XZ	; StringClass::Get_Header
; Function compile flags: /Ogtpy
; File d:\source code\stgm\engine_string.h
;	COMDAT ?Get_Header@StringClass@@QAEPAU_HEADER@1@XZ
_TEXT	SEGMENT
?Get_Header@StringClass@@QAEPAU_HEADER@1@XZ PROC	; StringClass::Get_Header, COMDAT
; _this$ = ecx

; 48   : 		return (_HEADER*)(m_Buffer-8);

	mov	eax, DWORD PTR [ecx]
	sub	eax, 8

; 49   : 	}

	ret	0
?Get_Header@StringClass@@QAEPAU_HEADER@1@XZ ENDP	; StringClass::Get_Header
_TEXT	ENDS
PUBLIC	??BStringClass@@QAEPBDXZ			; StringClass::operator char const *
; Function compile flags: /Ogtpy
;	COMDAT ??BStringClass@@QAEPBDXZ
_TEXT	SEGMENT
??BStringClass@@QAEPBDXZ PROC				; StringClass::operator char const *, COMDAT
; _this$ = ecx

; 60   : 		return m_Buffer;

	mov	eax, DWORD PTR [ecx]

; 61   : 	}

	ret	0
??BStringClass@@QAEPBDXZ ENDP				; StringClass::operator char const *
_TEXT	ENDS
PUBLIC	?Is_Empty@StringClass@@QAE_NXZ			; StringClass::Is_Empty
; Function compile flags: /Ogtpy
;	COMDAT ?Is_Empty@StringClass@@QAE_NXZ
_TEXT	SEGMENT
?Is_Empty@StringClass@@QAE_NXZ PROC			; StringClass::Is_Empty, COMDAT
; _this$ = ecx

; 64   : 		if (m_Buffer == *m_EmptyString)

	mov	eax, DWORD PTR [ecx]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	sete	al

; 65   : 		{
; 66   : 			return true;
; 67   : 		}
; 68   : 		return false;
; 69   : 	}

	ret	0
?Is_Empty@StringClass@@QAE_NXZ ENDP			; StringClass::Is_Empty
_TEXT	ENDS
PUBLIC	?Store_Allocated_Length@StringClass@@QAEXH@Z	; StringClass::Store_Allocated_Length
; Function compile flags: /Ogtpy
;	COMDAT ?Store_Allocated_Length@StringClass@@QAEXH@Z
_TEXT	SEGMENT
_length$ = 8						; size = 4
?Store_Allocated_Length@StringClass@@QAEXH@Z PROC	; StringClass::Store_Allocated_Length, COMDAT
; _this$ = ecx

; 78   : 		if (!Is_Empty())

	mov	eax, DWORD PTR [ecx]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN1@Store_Allo

; 79   : 		{
; 80   : 			Get_Header()->allocated_length = length;

	mov	edx, DWORD PTR _length$[esp-4]
	mov	DWORD PTR [eax-8], edx
$LN1@Store_Allo:

; 81   : 		}
; 82   : 	}

	ret	4
?Store_Allocated_Length@StringClass@@QAEXH@Z ENDP	; StringClass::Store_Allocated_Length
_TEXT	ENDS
PUBLIC	?Get_Buffer@StringClass@@QAEPADH@Z		; StringClass::Get_Buffer
; Function compile flags: /Ogtpy
;	COMDAT ?Get_Buffer@StringClass@@QAEPADH@Z
_TEXT	SEGMENT
_index$ = 8						; size = 4
?Get_Buffer@StringClass@@QAEPADH@Z PROC			; StringClass::Get_Buffer, COMDAT
; _this$ = ecx

; 85   : 		return &m_Buffer[index];

	mov	eax, DWORD PTR [ecx]
	add	eax, DWORD PTR _index$[esp-4]

; 86   : 	}

	ret	4
?Get_Buffer@StringClass@@QAEPADH@Z ENDP			; StringClass::Get_Buffer
_TEXT	ENDS
PUBLIC	?Get_Allocated_Length@StringClass@@QAEHXZ	; StringClass::Get_Allocated_Length
; Function compile flags: /Ogtpy
;	COMDAT ?Get_Allocated_Length@StringClass@@QAEHXZ
_TEXT	SEGMENT
?Get_Allocated_Length@StringClass@@QAEHXZ PROC		; StringClass::Get_Allocated_Length, COMDAT
; _this$ = ecx

; 93   : 		if (!Is_Empty())

	mov	eax, DWORD PTR [ecx]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN1@Get_Alloca

; 94   : 		{
; 95   : 			return Get_Header()->allocated_length;

	mov	eax, DWORD PTR [eax-8]

; 98   : 	}

	ret	0
$LN1@Get_Alloca:

; 96   : 		}
; 97   : 		return 0;

	xor	eax, eax

; 98   : 	}

	ret	0
?Get_Allocated_Length@StringClass@@QAEHXZ ENDP		; StringClass::Get_Allocated_Length
_TEXT	ENDS
PUBLIC	??_C@_0CE@KCIOLGFO@d?3?2source?5code?2stgm?2engine_strin@ ; `string'
PUBLIC	??_C@_0BN@KPANAABL@StringClass?3?3Allocate_Buffer?$AA@ ; `string'
PUBLIC	?Allocate_Buffer@StringClass@@QAEPADH@Z		; StringClass::Allocate_Buffer
EXTRN	??_U@YAPAXI@Z:PROC				; operator new[]
EXTRN	?m_setOwner@@YAXPBDI0@Z:PROC			; m_setOwner
;	COMDAT ??_C@_0CE@KCIOLGFO@d?3?2source?5code?2stgm?2engine_strin@
CONST	SEGMENT
??_C@_0CE@KCIOLGFO@d?3?2source?5code?2stgm?2engine_strin@ DB 'd:\source c'
	DB	'ode\stgm\engine_string.h', 00H		; `string'
CONST	ENDS
;	COMDAT ??_C@_0BN@KPANAABL@StringClass?3?3Allocate_Buffer?$AA@
CONST	SEGMENT
??_C@_0BN@KPANAABL@StringClass?3?3Allocate_Buffer?$AA@ DB 'StringClass::A'
	DB	'llocate_Buffer', 00H			; `string'
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ?Allocate_Buffer@StringClass@@QAEPADH@Z
_TEXT	SEGMENT
_len$ = 8						; size = 4
?Allocate_Buffer@StringClass@@QAEPADH@Z PROC		; StringClass::Allocate_Buffer, COMDAT
; _this$ = ecx

; 100  : 	{

	push	esi

; 101  : 		char *x = new char[len+8];

	push	OFFSET ??_C@_0BN@KPANAABL@StringClass?3?3Allocate_Buffer?$AA@
	push	101					; 00000065H
	push	OFFSET ??_C@_0CE@KCIOLGFO@d?3?2source?5code?2stgm?2engine_strin@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	mov	esi, DWORD PTR _len$[esp+12]
	lea	eax, DWORD PTR [esi+8]
	push	eax
	call	??_U@YAPAXI@Z				; operator new[]
	add	esp, 16					; 00000010H

; 102  : 		_HEADER *h = (_HEADER *)x;
; 103  : 		h->allocated_length = len;

	mov	DWORD PTR [eax], esi

; 104  : 		h->length = 0;

	mov	DWORD PTR [eax+4], 0

; 105  : 		x += 8;

	add	eax, 8
	pop	esi

; 106  : 		return x;
; 107  : 	}

	ret	4
?Allocate_Buffer@StringClass@@QAEPADH@Z ENDP		; StringClass::Allocate_Buffer
_TEXT	ENDS
PUBLIC	?Get_Header@WideStringClass@@QAEPAU_HEADER@1@XZ	; WideStringClass::Get_Header
; Function compile flags: /Ogtpy
;	COMDAT ?Get_Header@WideStringClass@@QAEPAU_HEADER@1@XZ
_TEXT	SEGMENT
?Get_Header@WideStringClass@@QAEPAU_HEADER@1@XZ PROC	; WideStringClass::Get_Header, COMDAT
; _this$ = ecx

; 168  : 		return (_HEADER*)(m_Buffer - 8 / sizeof(wchar_t));

	mov	eax, DWORD PTR [ecx]
	sub	eax, 8

; 169  : 	}

	ret	0
?Get_Header@WideStringClass@@QAEPAU_HEADER@1@XZ ENDP	; WideStringClass::Get_Header
_TEXT	ENDS
PUBLIC	??BWideStringClass@@QAEPB_WXZ			; WideStringClass::operator wchar_t const *
; Function compile flags: /Ogtpy
;	COMDAT ??BWideStringClass@@QAEPB_WXZ
_TEXT	SEGMENT
??BWideStringClass@@QAEPB_WXZ PROC			; WideStringClass::operator wchar_t const *, COMDAT
; _this$ = ecx

; 180  : 		return m_Buffer;

	mov	eax, DWORD PTR [ecx]

; 181  : 	}

	ret	0
??BWideStringClass@@QAEPB_WXZ ENDP			; WideStringClass::operator wchar_t const *
_TEXT	ENDS
PUBLIC	?Is_Empty@WideStringClass@@QAE_NXZ		; WideStringClass::Is_Empty
; Function compile flags: /Ogtpy
;	COMDAT ?Is_Empty@WideStringClass@@QAE_NXZ
_TEXT	SEGMENT
?Is_Empty@WideStringClass@@QAE_NXZ PROC			; WideStringClass::Is_Empty, COMDAT
; _this$ = ecx

; 184  : 		if (m_Buffer == *m_EmptyString)

	mov	eax, DWORD PTR [ecx]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	sete	al

; 185  : 		{
; 186  : 			return true;
; 187  : 		}
; 188  : 		return false;
; 189  : 	}

	ret	0
?Is_Empty@WideStringClass@@QAE_NXZ ENDP			; WideStringClass::Is_Empty
_TEXT	ENDS
PUBLIC	?Store_Allocated_Length@WideStringClass@@QAEXH@Z ; WideStringClass::Store_Allocated_Length
; Function compile flags: /Ogtpy
;	COMDAT ?Store_Allocated_Length@WideStringClass@@QAEXH@Z
_TEXT	SEGMENT
_length$ = 8						; size = 4
?Store_Allocated_Length@WideStringClass@@QAEXH@Z PROC	; WideStringClass::Store_Allocated_Length, COMDAT
; _this$ = ecx

; 198  : 		if (!Is_Empty())

	mov	eax, DWORD PTR [ecx]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN1@Store_Allo@2

; 199  : 		{
; 200  : 			Get_Header()->allocated_length = length;

	mov	edx, DWORD PTR _length$[esp-4]
	mov	DWORD PTR [eax-8], edx
$LN1@Store_Allo@2:

; 201  : 		}
; 202  : 	}

	ret	4
?Store_Allocated_Length@WideStringClass@@QAEXH@Z ENDP	; WideStringClass::Store_Allocated_Length
_TEXT	ENDS
PUBLIC	?Get_Buffer@WideStringClass@@QAEPA_WH@Z		; WideStringClass::Get_Buffer
; Function compile flags: /Ogtpy
;	COMDAT ?Get_Buffer@WideStringClass@@QAEPA_WH@Z
_TEXT	SEGMENT
_index$ = 8						; size = 4
?Get_Buffer@WideStringClass@@QAEPA_WH@Z PROC		; WideStringClass::Get_Buffer, COMDAT
; _this$ = ecx

; 205  : 		return &m_Buffer[index];

	mov	eax, DWORD PTR [ecx]
	mov	ecx, DWORD PTR _index$[esp-4]
	lea	eax, DWORD PTR [eax+ecx*2]

; 206  : 	}

	ret	4
?Get_Buffer@WideStringClass@@QAEPA_WH@Z ENDP		; WideStringClass::Get_Buffer
_TEXT	ENDS
PUBLIC	?Get_Allocated_Length@WideStringClass@@QAEHXZ	; WideStringClass::Get_Allocated_Length
; Function compile flags: /Ogtpy
;	COMDAT ?Get_Allocated_Length@WideStringClass@@QAEHXZ
_TEXT	SEGMENT
?Get_Allocated_Length@WideStringClass@@QAEHXZ PROC	; WideStringClass::Get_Allocated_Length, COMDAT
; _this$ = ecx

; 213  : 		if (!Is_Empty())

	mov	eax, DWORD PTR [ecx]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN1@Get_Alloca@2

; 214  : 		{
; 215  : 			return Get_Header()->allocated_length;

	mov	eax, DWORD PTR [eax-8]

; 218  : 	}

	ret	0
$LN1@Get_Alloca@2:

; 216  : 		}
; 217  : 		return 0;

	xor	eax, eax

; 218  : 	}

	ret	0
?Get_Allocated_Length@WideStringClass@@QAEHXZ ENDP	; WideStringClass::Get_Allocated_Length
_TEXT	ENDS
PUBLIC	??_C@_0CB@MBFDNJL@WideStringClass?3?3Allocate_Buffer@ ; `string'
PUBLIC	?Allocate_Buffer@WideStringClass@@QAEPA_WH@Z	; WideStringClass::Allocate_Buffer
;	COMDAT ??_C@_0CB@MBFDNJL@WideStringClass?3?3Allocate_Buffer@
CONST	SEGMENT
??_C@_0CB@MBFDNJL@WideStringClass?3?3Allocate_Buffer@ DB 'WideStringClass'
	DB	'::Allocate_Buffer', 00H			; `string'
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ?Allocate_Buffer@WideStringClass@@QAEPA_WH@Z
_TEXT	SEGMENT
_len$ = 8						; size = 4
?Allocate_Buffer@WideStringClass@@QAEPA_WH@Z PROC	; WideStringClass::Allocate_Buffer, COMDAT
; _this$ = ecx

; 220  : 	{

	push	esi

; 221  : 		wchar_t *x = new wchar_t[len+(8 / sizeof(wchar_t))];

	push	OFFSET ??_C@_0CB@MBFDNJL@WideStringClass?3?3Allocate_Buffer@
	push	221					; 000000ddH
	push	OFFSET ??_C@_0CE@KCIOLGFO@d?3?2source?5code?2stgm?2engine_strin@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	mov	esi, DWORD PTR _len$[esp+12]
	xor	ecx, ecx
	lea	eax, DWORD PTR [esi+4]
	mov	edx, 2
	mul	edx
	seto	cl
	neg	ecx
	or	ecx, eax
	push	ecx
	call	??_U@YAPAXI@Z				; operator new[]
	add	esp, 16					; 00000010H

; 222  : 		_HEADER *h = (_HEADER *)x;
; 223  : 		h->allocated_length = len;

	mov	DWORD PTR [eax], esi

; 224  : 		h->length = 0;

	mov	DWORD PTR [eax+4], 0

; 225  : 		x += (8 / sizeof(wchar_t));

	add	eax, 8
	pop	esi

; 226  : 		return x;
; 227  : 	}

	ret	4
?Allocate_Buffer@WideStringClass@@QAEPA_WH@Z ENDP	; WideStringClass::Allocate_Buffer
_TEXT	ENDS
PUBLIC	?InitEngineString@@YAXI@Z			; InitEngineString
; Function compile flags: /Ogtpy
; File d:\source code\stgm\engine_string.cpp
;	COMDAT ?InitEngineString@@YAXI@Z
_TEXT	SEGMENT
_exe$ = 8						; size = 4
?InitEngineString@@YAXI@Z PROC				; InitEngineString, COMDAT

; 33   : 	switch(exe)

	mov	eax, DWORD PTR _exe$[esp-4]
	cmp	eax, 3
	ja	$LN1@InitEngine
	jmp	DWORD PTR $LN10@InitEngine[eax*4]
$LN5@InitEngine:

; 34   : 	{
; 35   : 		case 0: //game.exe
; 36   : 			StringClass::m_Mutex =						(CriticalSectionClass *)0x0083DC08;

	mov	DWORD PTR ?m_Mutex@StringClass@@2PAVCriticalSectionClass@@A, 8641544 ; StringClass::m_Mutex, 0083dc08H

; 37   : 			StringClass::ReservedMask =					(unsigned int *)0x0083EC10;

	mov	DWORD PTR ?ReservedMask@StringClass@@2PAIA, 8645648 ; StringClass::ReservedMask, 0083ec10H

; 38   : 			StringClass::m_TempStrings =				(char *)0x0083DC0C;

	mov	DWORD PTR ?m_TempStrings@StringClass@@2PADA, 8641548 ; StringClass::m_TempStrings, 0083dc0cH

; 39   : 			StringClass::m_EmptyString =				(char **)0x00809D38;

	mov	DWORD PTR ?m_EmptyString@StringClass@@2PAPADA, 8428856 ; StringClass::m_EmptyString, 00809d38H

; 40   : 			StringClass::m_NullChar =					(char *)0x0083EC0C;

	mov	DWORD PTR ?m_NullChar@StringClass@@2PADA, 8645644 ; StringClass::m_NullChar, 0083ec0cH

; 41   : 			WideStringClass::m_FreeTempPtr =			(wchar_t **)0x00809D40;

	mov	DWORD PTR ?m_FreeTempPtr@WideStringClass@@2PAPA_WA, 8428864 ; WideStringClass::m_FreeTempPtr, 00809d40H

; 42   : 			WideStringClass::m_ResTempPtr =				(wchar_t **)0x0083F440;

	mov	DWORD PTR ?m_ResTempPtr@WideStringClass@@2PAPA_WA, 8647744 ; WideStringClass::m_ResTempPtr, 0083f440H

; 43   : 			WideStringClass::m_EmptyString =			(wchar_t **)0x00809D3C;

	mov	DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA, 8428860 ; WideStringClass::m_EmptyString, 00809d3cH

; 44   : 			WideStringClass::m_NullChar =				(wchar_t *)0x0083F43C;

	mov	DWORD PTR ?m_NullChar@WideStringClass@@2PA_WA, 8647740 ; WideStringClass::m_NullChar, 0083f43cH

; 45   : 			WideStringClass::m_UsedTempStringCount =	(int *)0x0083F438;

	mov	DWORD PTR ?m_UsedTempStringCount@WideStringClass@@2PAHA, 8647736 ; WideStringClass::m_UsedTempStringCount, 0083f438H

; 46   : 			WideStringClass::m_TempMutex =				(CriticalSectionClass *)0x0083F024;

	mov	DWORD PTR ?m_TempMutex@WideStringClass@@2PAVCriticalSectionClass@@A, 8646692 ; WideStringClass::m_TempMutex, 0083f024H

; 99   : 			break;
; 100  : 	}
; 101  : }

	ret	0
$LN4@InitEngine:

; 47   : 			break;
; 48   : 		case 1: //server.dat
; 49   : 			StringClass::m_Mutex =						(CriticalSectionClass *)0x0083CDF0;

	mov	DWORD PTR ?m_Mutex@StringClass@@2PAVCriticalSectionClass@@A, 8637936 ; StringClass::m_Mutex, 0083cdf0H

; 50   : 			StringClass::ReservedMask =					(unsigned int *)0x0083DDF8;

	mov	DWORD PTR ?ReservedMask@StringClass@@2PAIA, 8642040 ; StringClass::ReservedMask, 0083ddf8H

; 51   : 			StringClass::m_TempStrings =				(char *)0x0083CDF4;

	mov	DWORD PTR ?m_TempStrings@StringClass@@2PADA, 8637940 ; StringClass::m_TempStrings, 0083cdf4H

; 52   : 			StringClass::m_EmptyString =				(char **)0x00808F10;

	mov	DWORD PTR ?m_EmptyString@StringClass@@2PAPADA, 8425232 ; StringClass::m_EmptyString, 00808f10H

; 53   : 			StringClass::m_NullChar =					(char *)0x0083DDF4;

	mov	DWORD PTR ?m_NullChar@StringClass@@2PADA, 8642036 ; StringClass::m_NullChar, 0083ddf4H

; 54   : 			WideStringClass::m_FreeTempPtr =			(wchar_t **)0x00808F18;

	mov	DWORD PTR ?m_FreeTempPtr@WideStringClass@@2PAPA_WA, 8425240 ; WideStringClass::m_FreeTempPtr, 00808f18H

; 55   : 			WideStringClass::m_ResTempPtr =				(wchar_t **)0x0083E628;

	mov	DWORD PTR ?m_ResTempPtr@WideStringClass@@2PAPA_WA, 8644136 ; WideStringClass::m_ResTempPtr, 0083e628H

; 56   : 			WideStringClass::m_EmptyString =			(wchar_t **)0x00808F14;

	mov	DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA, 8425236 ; WideStringClass::m_EmptyString, 00808f14H

; 57   : 			WideStringClass::m_NullChar =				(wchar_t *)0x0083E624;

	mov	DWORD PTR ?m_NullChar@WideStringClass@@2PA_WA, 8644132 ; WideStringClass::m_NullChar, 0083e624H

; 58   : 			WideStringClass::m_UsedTempStringCount =	(int *)0x0083E620;

	mov	DWORD PTR ?m_UsedTempStringCount@WideStringClass@@2PAHA, 8644128 ; WideStringClass::m_UsedTempStringCount, 0083e620H

; 59   : 			WideStringClass::m_TempMutex =				(CriticalSectionClass *)0x0083E20C;

	mov	DWORD PTR ?m_TempMutex@WideStringClass@@2PAVCriticalSectionClass@@A, 8643084 ; WideStringClass::m_TempMutex, 0083e20cH

; 99   : 			break;
; 100  : 	}
; 101  : }

	ret	0
$LN3@InitEngine:

; 60   : 			break;
; 61   : 		case 2: //RH73
; 62   : 			StringClass::m_Mutex =						(CriticalSectionClass *)0x08BB5FDC;

	mov	DWORD PTR ?m_Mutex@StringClass@@2PAVCriticalSectionClass@@A, 146497500 ; StringClass::m_Mutex, 08bb5fdcH

; 63   : 			StringClass::ReservedMask =					(unsigned int *)0x086E8410;

	mov	DWORD PTR ?ReservedMask@StringClass@@2PAIA, 141460496 ; StringClass::ReservedMask, 086e8410H

; 64   : 			StringClass::m_TempStrings =				(char *)0x08BE8CE0;

	mov	DWORD PTR ?m_TempStrings@StringClass@@2PADA, 146705632 ; StringClass::m_TempStrings, 08be8ce0H

; 65   : 			StringClass::m_EmptyString =				(char **)0x086E840C;

	mov	DWORD PTR ?m_EmptyString@StringClass@@2PAPADA, 141460492 ; StringClass::m_EmptyString, 086e840cH

; 66   : 			StringClass::m_NullChar =					(char *)0x086E8408;

	mov	DWORD PTR ?m_NullChar@StringClass@@2PADA, 141460488 ; StringClass::m_NullChar, 086e8408H

; 67   : 			WideStringClass::m_FreeTempPtr =			(wchar_t **)0x086E83E4;

	mov	DWORD PTR ?m_FreeTempPtr@WideStringClass@@2PAPA_WA, 141460452 ; WideStringClass::m_FreeTempPtr, 086e83e4H

; 68   : 			WideStringClass::m_ResTempPtr =				(wchar_t **)0x086E83F4;

	mov	DWORD PTR ?m_ResTempPtr@WideStringClass@@2PAPA_WA, 141460468 ; WideStringClass::m_ResTempPtr, 086e83f4H

; 69   : 			WideStringClass::m_EmptyString =			(wchar_t **)0x086E83E0;

	mov	DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA, 141460448 ; WideStringClass::m_EmptyString, 086e83e0H

; 70   : 			WideStringClass::m_NullChar =				(wchar_t *)0x086E83DC;

	mov	DWORD PTR ?m_NullChar@WideStringClass@@2PA_WA, 141460444 ; WideStringClass::m_NullChar, 086e83dcH

; 71   : 			WideStringClass::m_UsedTempStringCount =	(int *)0x086E83D8;

	mov	DWORD PTR ?m_UsedTempStringCount@WideStringClass@@2PAHA, 141460440 ; WideStringClass::m_UsedTempStringCount, 086e83d8H

; 72   : 			WideStringClass::m_TempMutex =				(CriticalSectionClass *)0x08BB5FD4;

	mov	DWORD PTR ?m_TempMutex@WideStringClass@@2PAVCriticalSectionClass@@A, 146497492 ; WideStringClass::m_TempMutex, 08bb5fd4H

; 99   : 			break;
; 100  : 	}
; 101  : }

	ret	0
$LN2@InitEngine:

; 73   : 			break;
; 74   : 		case 3: //RH8
; 75   : 			StringClass::m_Mutex =						(CriticalSectionClass *)0x089D0CC0;

	mov	DWORD PTR ?m_Mutex@StringClass@@2PAVCriticalSectionClass@@A, 144510144 ; StringClass::m_Mutex, 089d0cc0H

; 76   : 			StringClass::ReservedMask =					(unsigned int *)0x08610F84;

	mov	DWORD PTR ?ReservedMask@StringClass@@2PAIA, 140578692 ; StringClass::ReservedMask, 08610f84H

; 77   : 			StringClass::m_TempStrings =				(char *)0x089D0CE0;

	mov	DWORD PTR ?m_TempStrings@StringClass@@2PADA, 144510176 ; StringClass::m_TempStrings, 089d0ce0H

; 78   : 			StringClass::m_EmptyString =				(char **)0x08610F80;

	mov	DWORD PTR ?m_EmptyString@StringClass@@2PAPADA, 140578688 ; StringClass::m_EmptyString, 08610f80H

; 79   : 			StringClass::m_NullChar =					(char *)0x08610F7C;

	mov	DWORD PTR ?m_NullChar@StringClass@@2PADA, 140578684 ; StringClass::m_NullChar, 08610f7cH

; 80   : 			WideStringClass::m_FreeTempPtr =			(wchar_t **)0x08610F58;

	mov	DWORD PTR ?m_FreeTempPtr@WideStringClass@@2PAPA_WA, 140578648 ; WideStringClass::m_FreeTempPtr, 08610f58H

; 81   : 			WideStringClass::m_ResTempPtr =				(wchar_t **)0x08610F68;

	mov	DWORD PTR ?m_ResTempPtr@WideStringClass@@2PAPA_WA, 140578664 ; WideStringClass::m_ResTempPtr, 08610f68H

; 82   : 			WideStringClass::m_EmptyString =			(wchar_t **)0x08610F54;

	mov	DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA, 140578644 ; WideStringClass::m_EmptyString, 08610f54H

; 83   : 			WideStringClass::m_NullChar =				(wchar_t *)0x08610F50;

	mov	DWORD PTR ?m_NullChar@WideStringClass@@2PA_WA, 140578640 ; WideStringClass::m_NullChar, 08610f50H

; 84   : 			WideStringClass::m_UsedTempStringCount =	(int *)0x08610F4C;

	mov	DWORD PTR ?m_UsedTempStringCount@WideStringClass@@2PAHA, 140578636 ; WideStringClass::m_UsedTempStringCount, 08610f4cH

; 85   : 			WideStringClass::m_TempMutex =				(CriticalSectionClass *)0x089CFC20;

	mov	DWORD PTR ?m_TempMutex@WideStringClass@@2PAVCriticalSectionClass@@A, 144505888 ; WideStringClass::m_TempMutex, 089cfc20H

; 99   : 			break;
; 100  : 	}
; 101  : }

	ret	0
$LN1@InitEngine:

; 86   : 			break;
; 87   : 		default:
; 88   : 			StringClass::m_Mutex =						(CriticalSectionClass *)0;

	xor	eax, eax
	mov	DWORD PTR ?m_Mutex@StringClass@@2PAVCriticalSectionClass@@A, eax ; StringClass::m_Mutex

; 89   : 			StringClass::ReservedMask =					(unsigned int *)0;

	mov	DWORD PTR ?ReservedMask@StringClass@@2PAIA, eax ; StringClass::ReservedMask

; 90   : 			StringClass::m_TempStrings =				(char *)0;

	mov	DWORD PTR ?m_TempStrings@StringClass@@2PADA, eax ; StringClass::m_TempStrings

; 91   : 			StringClass::m_EmptyString =				(char **)0;

	mov	DWORD PTR ?m_EmptyString@StringClass@@2PAPADA, eax ; StringClass::m_EmptyString

; 92   : 			StringClass::m_NullChar =					(char *)0;

	mov	DWORD PTR ?m_NullChar@StringClass@@2PADA, eax ; StringClass::m_NullChar

; 93   : 			WideStringClass::m_FreeTempPtr =			(wchar_t **)0;

	mov	DWORD PTR ?m_FreeTempPtr@WideStringClass@@2PAPA_WA, eax ; WideStringClass::m_FreeTempPtr

; 94   : 			WideStringClass::m_ResTempPtr =				(wchar_t **)0;

	mov	DWORD PTR ?m_ResTempPtr@WideStringClass@@2PAPA_WA, eax ; WideStringClass::m_ResTempPtr

; 95   : 			WideStringClass::m_EmptyString =			(wchar_t **)0;

	mov	DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA, eax ; WideStringClass::m_EmptyString

; 96   : 			WideStringClass::m_NullChar =				(wchar_t *)0;

	mov	DWORD PTR ?m_NullChar@WideStringClass@@2PA_WA, eax ; WideStringClass::m_NullChar

; 97   : 			WideStringClass::m_UsedTempStringCount =	(int *)0;

	mov	DWORD PTR ?m_UsedTempStringCount@WideStringClass@@2PAHA, eax ; WideStringClass::m_UsedTempStringCount

; 98   : 			WideStringClass::m_TempMutex =				(CriticalSectionClass *)0;

	mov	DWORD PTR ?m_TempMutex@WideStringClass@@2PAVCriticalSectionClass@@A, eax ; WideStringClass::m_TempMutex

; 99   : 			break;
; 100  : 	}
; 101  : }

	ret	0
	npad	2
$LN10@InitEngine:
	DD	$LN5@InitEngine
	DD	$LN4@InitEngine
	DD	$LN3@InitEngine
	DD	$LN2@InitEngine
?InitEngineString@@YAXI@Z ENDP				; InitEngineString
_TEXT	ENDS
PUBLIC	?Get_Length@StringClass@@QAEHXZ			; StringClass::Get_Length
; Function compile flags: /Ogtpy
;	COMDAT ?Get_Length@StringClass@@QAEHXZ
_TEXT	SEGMENT
?Get_Length@StringClass@@QAEHXZ PROC			; StringClass::Get_Length, COMDAT
; _this$ = ecx

; 171  : 	if (!Is_Empty())

	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	push	esi
	mov	esi, DWORD PTR [ecx]
	cmp	esi, DWORD PTR [eax]
	je	SHORT $LN2@Get_Length

; 172  : 	{
; 173  : 		if (!Get_Header()->length)

	cmp	DWORD PTR [esi-4], 0
	jne	SHORT $LN1@Get_Length

; 174  : 		{
; 175  : 			Get_Header()->length = strlen(m_Buffer);

	mov	eax, esi
	push	edi
	lea	edi, DWORD PTR [eax+1]
$LL15@Get_Length:
	mov	dl, BYTE PTR [eax]
	add	eax, 1
	test	dl, dl
	jne	SHORT $LL15@Get_Length
	sub	eax, edi
	mov	DWORD PTR [esi-4], eax
	pop	edi
$LN1@Get_Length:

; 176  : 		}
; 177  : 		return Get_Header()->length;

	mov	ecx, DWORD PTR [ecx]
	mov	eax, DWORD PTR [ecx-4]
	pop	esi

; 180  : }

	ret	0
$LN2@Get_Length:

; 178  : 	}
; 179  : 	return 0;

	xor	eax, eax
	pop	esi

; 180  : }

	ret	0
?Get_Length@StringClass@@QAEHXZ ENDP			; StringClass::Get_Length
_TEXT	ENDS
PUBLIC	??_C@_0BE@PNJLHODE@?4?2engine_string?4cpp?$AA@	; `string'
PUBLIC	??_C@_0BJ@MIFLMFEP@StringClass?3?3Free_String?$AA@ ; `string'
PUBLIC	?Free_String@StringClass@@QAEXXZ		; StringClass::Free_String
EXTRN	??_V@YAXPAX@Z:PROC				; operator delete[]
EXTRN	?Lock@CriticalSectionClass@@QAEXXZ:PROC		; CriticalSectionClass::Lock
;	COMDAT ??_C@_0BE@PNJLHODE@?4?2engine_string?4cpp?$AA@
; File d:\source code\stgm\engine_string.h
CONST	SEGMENT
??_C@_0BE@PNJLHODE@?4?2engine_string?4cpp?$AA@ DB '.\engine_string.cpp', 00H ; `string'
CONST	ENDS
;	COMDAT ??_C@_0BJ@MIFLMFEP@StringClass?3?3Free_String?$AA@
CONST	SEGMENT
??_C@_0BJ@MIFLMFEP@StringClass?3?3Free_String?$AA@ DB 'StringClass::Free_'
	DB	'String', 00H				; `string'
; Function compile flags: /Ogtpy
; File d:\source code\stgm\engine_string.cpp
CONST	ENDS
;	COMDAT ?Free_String@StringClass@@QAEXXZ
_TEXT	SEGMENT
?Free_String@StringClass@@QAEXXZ PROC			; StringClass::Free_String, COMDAT
; _this$ = ecx

; 266  : 	if (!Is_Empty())

	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	push	esi
	mov	esi, ecx
	mov	ecx, DWORD PTR [esi]
	cmp	ecx, DWORD PTR [eax]
	je	$LN1@Free_Strin

; 267  : 	{
; 268  : 		int x = (int)Get_Header();
; 269  : 		int y = (int)&m_TempStrings[0x800];

	mov	edx, DWORD PTR ?m_TempStrings@StringClass@@2PADA ; StringClass::m_TempStrings
	add	edx, 2048				; 00000800H
	lea	eax, DWORD PTR [ecx-8]

; 270  : 		int z = x ^ y;

	xor	eax, edx

; 271  : 		if ((z > 0) && (z < 0x800))

	add	eax, -1
	cmp	eax, 2046				; 000007feH
	ja	SHORT $LN2@Free_Strin

; 272  : 		{
; 273  : 			m_Buffer[0] = 0;

	mov	BYTE PTR [ecx], 0

; 274  : 			m_Mutex->Lock();

	mov	ecx, DWORD PTR ?m_Mutex@StringClass@@2PAVCriticalSectionClass@@A ; StringClass::m_Mutex
	call	?Lock@CriticalSectionClass@@QAEXXZ	; CriticalSectionClass::Lock

; 275  : 			x = ((int)Get_Header()) >> 8;

	mov	ecx, DWORD PTR [esi]

; 276  : 			char c = (char)(x & 7);
; 277  : 			y = -(1 << c);
; 278  : 			*ReservedMask &= y;

	mov	eax, DWORD PTR ?ReservedMask@StringClass@@2PAIA ; StringClass::ReservedMask
	sub	ecx, 8
	sar	ecx, 8
	and	ecx, 7
	or	edx, -1
	shl	edx, cl
	and	DWORD PTR [eax], edx

; 279  : 			m_Mutex->Unlock();

	mov	eax, DWORD PTR ?m_Mutex@StringClass@@2PAVCriticalSectionClass@@A ; StringClass::m_Mutex
	mov	DWORD PTR [eax], 0

; 285  : 			m_Buffer = *m_EmptyString;

	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	mov	edx, DWORD PTR [ecx]
	mov	DWORD PTR [esi], edx
	pop	esi

; 286  : 		}
; 287  : 	}
; 288  : }

	ret	0
$LN2@Free_Strin:

; 280  : 			m_Buffer = *m_EmptyString;
; 281  : 		}
; 282  : 		else
; 283  : 		{
; 284  : 			delete[] Get_Header();

	push	OFFSET ??_C@_0BJ@MIFLMFEP@StringClass?3?3Free_String?$AA@
	push	284					; 0000011cH
	push	OFFSET ??_C@_0BE@PNJLHODE@?4?2engine_string?4cpp?$AA@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	mov	eax, DWORD PTR [esi]
	sub	eax, 8
	push	eax
	call	??_V@YAXPAX@Z				; operator delete[]

; 285  : 			m_Buffer = *m_EmptyString;

	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	mov	edx, DWORD PTR [ecx]
	add	esp, 16					; 00000010H
	mov	DWORD PTR [esi], edx
$LN1@Free_Strin:
	pop	esi

; 286  : 		}
; 287  : 	}
; 288  : }

	ret	0
?Free_String@StringClass@@QAEXXZ ENDP			; StringClass::Free_String
_TEXT	ENDS
PUBLIC	?Store_Length@StringClass@@QAEXH@Z		; StringClass::Store_Length
; Function compile flags: /Ogtpy
;	COMDAT ?Store_Length@StringClass@@QAEXH@Z
_TEXT	SEGMENT
_length$ = 8						; size = 4
?Store_Length@StringClass@@QAEXH@Z PROC			; StringClass::Store_Length, COMDAT
; _this$ = ecx

; 292  : 	if (!Is_Empty())

	mov	eax, DWORD PTR [ecx]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN1@Store_Leng

; 293  : 	{
; 294  : 		Get_Header()->length = length;

	mov	edx, DWORD PTR _length$[esp-4]
	mov	DWORD PTR [eax-4], edx
$LN1@Store_Leng:

; 295  : 	}
; 296  : }

	ret	4
?Store_Length@StringClass@@QAEXH@Z ENDP			; StringClass::Store_Length
_TEXT	ENDS
PUBLIC	?Release_Resources@StringClass@@QAEXXZ		; StringClass::Release_Resources
; Function compile flags: /Ogtpy
;	COMDAT ?Release_Resources@StringClass@@QAEXXZ
_TEXT	SEGMENT
?Release_Resources@StringClass@@QAEXXZ PROC		; StringClass::Release_Resources, COMDAT
; _this$ = ecx

; 300  : 	Free_String();

	jmp	?Free_String@StringClass@@QAEXXZ	; StringClass::Free_String
?Release_Resources@StringClass@@QAEXXZ ENDP		; StringClass::Release_Resources
_TEXT	ENDS
PUBLIC	?Get_Length@WideStringClass@@QAEHXZ		; WideStringClass::Get_Length
; Function compile flags: /Ogtpy
;	COMDAT ?Get_Length@WideStringClass@@QAEHXZ
_TEXT	SEGMENT
?Get_Length@WideStringClass@@QAEHXZ PROC		; WideStringClass::Get_Length, COMDAT
; _this$ = ecx

; 390  : 	if (!Is_Empty())

	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	push	esi
	mov	esi, DWORD PTR [ecx]
	cmp	esi, DWORD PTR [eax]
	je	SHORT $LN2@Get_Length@2

; 391  : 	{
; 392  : 		if (!Get_Header()->length)

	cmp	DWORD PTR [esi-4], 0
	jne	SHORT $LN1@Get_Length@2

; 393  : 		{
; 394  : 			Get_Header()->length = wcslen(m_Buffer);

	mov	eax, esi
	push	edi
	lea	edi, DWORD PTR [eax+2]
	npad	8
$LL15@Get_Length@2:
	mov	dx, WORD PTR [eax]
	add	eax, 2
	test	dx, dx
	jne	SHORT $LL15@Get_Length@2
	sub	eax, edi
	sar	eax, 1
	mov	DWORD PTR [esi-4], eax
	pop	edi
$LN1@Get_Length@2:

; 395  : 		}
; 396  : 		return Get_Header()->length;

	mov	ecx, DWORD PTR [ecx]
	mov	eax, DWORD PTR [ecx-4]
	pop	esi

; 399  : }

	ret	0
$LN2@Get_Length@2:

; 397  : 	}
; 398  : 	return 0;

	xor	eax, eax
	pop	esi

; 399  : }

	ret	0
?Get_Length@WideStringClass@@QAEHXZ ENDP		; WideStringClass::Get_Length
_TEXT	ENDS
PUBLIC	??_C@_0BN@IGIIDELN@WideStringClass?3?3Free_String?$AA@ ; `string'
PUBLIC	?Free_String@WideStringClass@@QAEXXZ		; WideStringClass::Free_String
;	COMDAT ??_C@_0BN@IGIIDELN@WideStringClass?3?3Free_String?$AA@
; File d:\source code\stgm\engine_string.h
CONST	SEGMENT
??_C@_0BN@IGIIDELN@WideStringClass?3?3Free_String?$AA@ DB 'WideStringClas'
	DB	's::Free_String', 00H			; `string'
; Function compile flags: /Ogtpy
; File d:\source code\stgm\engine_string.cpp
CONST	ENDS
;	COMDAT ?Free_String@WideStringClass@@QAEXXZ
_TEXT	SEGMENT
?Free_String@WideStringClass@@QAEXXZ PROC		; WideStringClass::Free_String, COMDAT
; _this$ = ecx

; 469  : {

	push	edi
	mov	edi, ecx

; 470  : 	if (!Is_Empty())

	mov	eax, DWORD PTR [edi]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN6@Free_Strin@2

; 471  : 	{
; 472  : 		bool temp = false;
; 473  : 		for (int i = 0;i < 3;i++)

	mov	ecx, DWORD PTR ?m_ResTempPtr@WideStringClass@@2PAPA_WA ; WideStringClass::m_ResTempPtr
	push	esi
	xor	esi, esi
$LL5@Free_Strin@2:

; 474  : 		{
; 475  : 			if (m_Buffer == m_ResTempPtr[i])

	cmp	eax, DWORD PTR [ecx+esi*4]
	je	SHORT $LN19@Free_Strin@2
	add	esi, 1
	cmp	esi, 3
	jl	SHORT $LL5@Free_Strin@2

; 484  : 				break;
; 485  : 			}
; 486  : 		}
; 487  : 		if (!temp)
; 488  : 		{
; 489  : 			delete[] Get_Header();

	push	OFFSET ??_C@_0BN@IGIIDELN@WideStringClass?3?3Free_String?$AA@
	push	489					; 000001e9H
	push	OFFSET ??_C@_0BE@PNJLHODE@?4?2engine_string?4cpp?$AA@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	mov	ecx, DWORD PTR [edi]
	sub	ecx, 8
	push	ecx
	call	??_V@YAXPAX@Z				; operator delete[]

; 490  : 		}
; 491  : 		m_Buffer = *m_EmptyString;

	mov	edx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	mov	eax, DWORD PTR [edx]
	add	esp, 16					; 00000010H
	mov	DWORD PTR [edi], eax
	pop	esi
$LN6@Free_Strin@2:
	pop	edi

; 492  : 	}
; 493  : }

	ret	0
$LN19@Free_Strin@2:

; 476  : 			{
; 477  : 				m_TempMutex->Lock();

	mov	ecx, DWORD PTR ?m_TempMutex@WideStringClass@@2PAVCriticalSectionClass@@A ; WideStringClass::m_TempMutex
	call	?Lock@CriticalSectionClass@@QAEXXZ	; CriticalSectionClass::Lock

; 478  : 				m_Buffer[0] = 0;

	mov	edx, DWORD PTR [edi]
	mov	WORD PTR [edx], 0

; 479  : 				m_FreeTempPtr[i] = m_Buffer;

	mov	eax, DWORD PTR [edi]
	mov	ecx, DWORD PTR ?m_FreeTempPtr@WideStringClass@@2PAPA_WA ; WideStringClass::m_FreeTempPtr
	mov	DWORD PTR [ecx+esi*4], eax

; 480  : 				m_ResTempPtr[i] = 0;

	mov	edx, DWORD PTR ?m_ResTempPtr@WideStringClass@@2PAPA_WA ; WideStringClass::m_ResTempPtr
	mov	DWORD PTR [edx+esi*4], 0

; 481  : 				(*m_UsedTempStringCount)--;

	mov	eax, DWORD PTR ?m_UsedTempStringCount@WideStringClass@@2PAHA ; WideStringClass::m_UsedTempStringCount
	add	DWORD PTR [eax], -1

; 482  : 				temp = true;
; 483  : 				m_TempMutex->Unlock();

	mov	eax, DWORD PTR ?m_TempMutex@WideStringClass@@2PAVCriticalSectionClass@@A ; WideStringClass::m_TempMutex
	mov	DWORD PTR [eax], 0

; 490  : 		}
; 491  : 		m_Buffer = *m_EmptyString;

	mov	edx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	mov	eax, DWORD PTR [edx]
	pop	esi
	mov	DWORD PTR [edi], eax
	pop	edi

; 492  : 	}
; 493  : }

	ret	0
?Free_String@WideStringClass@@QAEXXZ ENDP		; WideStringClass::Free_String
_TEXT	ENDS
PUBLIC	?Store_Length@WideStringClass@@QAEXH@Z		; WideStringClass::Store_Length
; Function compile flags: /Ogtpy
;	COMDAT ?Store_Length@WideStringClass@@QAEXH@Z
_TEXT	SEGMENT
_length$ = 8						; size = 4
?Store_Length@WideStringClass@@QAEXH@Z PROC		; WideStringClass::Store_Length, COMDAT
; _this$ = ecx

; 497  : 	if (!Is_Empty())

	mov	eax, DWORD PTR [ecx]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN1@Store_Leng@2

; 498  : 	{
; 499  : 		Get_Header()->length = length;

	mov	edx, DWORD PTR _length$[esp-4]
	mov	DWORD PTR [eax-4], edx
$LN1@Store_Leng@2:

; 500  : 	}
; 501  : }

	ret	4
?Store_Length@WideStringClass@@QAEXH@Z ENDP		; WideStringClass::Store_Length
_TEXT	ENDS
PUBLIC	?Release_Resources@WideStringClass@@SAXXZ	; WideStringClass::Release_Resources
; Function compile flags: /Ogtpy
;	COMDAT ?Release_Resources@WideStringClass@@SAXXZ
_TEXT	SEGMENT
?Release_Resources@WideStringClass@@SAXXZ PROC		; WideStringClass::Release_Resources, COMDAT

; 505  : }

	ret	0
?Release_Resources@WideStringClass@@SAXXZ ENDP		; WideStringClass::Release_Resources
_TEXT	ENDS
PUBLIC	?Is_ANSI@WideStringClass@@QAE_NXZ		; WideStringClass::Is_ANSI
; Function compile flags: /Ogtpy
;	COMDAT ?Is_ANSI@WideStringClass@@QAE_NXZ
_TEXT	SEGMENT
?Is_ANSI@WideStringClass@@QAE_NXZ PROC			; WideStringClass::Is_ANSI, COMDAT
; _this$ = ecx

; 528  : 	if (m_Buffer)

	mov	eax, DWORD PTR [ecx]
	test	eax, eax
	je	SHORT $LN2@Is_ANSI

; 529  : 	{
; 530  : 		if (m_Buffer[0])

	cmp	WORD PTR [eax], 0
	je	SHORT $LN2@Is_ANSI
	movzx	eax, WORD PTR [eax]
	npad	1
$LL4@Is_ANSI:

; 531  : 		{
; 532  : 			wchar_t *temp = m_Buffer;
; 533  : 			do
; 534  : 			{
; 535  : 				if (*temp > 0xFF)

	cmp	ax, 255					; 000000ffH
	ja	SHORT $LN10@Is_ANSI

; 538  : 				}
; 539  : 			} while (*temp);

	test	ax, ax
	jne	SHORT $LL4@Is_ANSI
$LN2@Is_ANSI:

; 540  : 		}
; 541  : 	}
; 542  : 	return true;

	mov	al, 1

; 543  : }

	ret	0
$LN10@Is_ANSI:

; 536  : 				{
; 537  : 					return false;

	xor	al, al

; 543  : }

	ret	0
?Is_ANSI@WideStringClass@@QAE_NXZ ENDP			; WideStringClass::Is_ANSI
_TEXT	ENDS
PUBLIC	??_C@_0P@PEDLLHMO@CharToWideChar?$AA@		; `string'
PUBLIC	?CharToWideChar@@YAPB_WPBD@Z			; CharToWideChar
EXTRN	_mbstowcs:PROC
;	COMDAT ??_C@_0P@PEDLLHMO@CharToWideChar?$AA@
CONST	SEGMENT
??_C@_0P@PEDLLHMO@CharToWideChar?$AA@ DB 'CharToWideChar', 00H ; `string'
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ?CharToWideChar@@YAPB_WPBD@Z
_TEXT	SEGMENT
_str$ = 8						; size = 4
?CharToWideChar@@YAPB_WPBD@Z PROC			; CharToWideChar, COMDAT

; 546  : {

	push	ebp

; 547  : 	int length = strlen(str);

	mov	ebp, DWORD PTR _str$[esp]
	push	esi
	mov	eax, ebp
	push	edi
	lea	edx, DWORD PTR [eax+1]
	npad	4
$LL5@CharToWide:
	mov	cl, BYTE PTR [eax]
	add	eax, 1
	test	cl, cl
	jne	SHORT $LL5@CharToWide

; 548  : 	wchar_t *text = new wchar_t[length+1];

	push	OFFSET ??_C@_0P@PEDLLHMO@CharToWideChar?$AA@
	sub	eax, edx
	push	548					; 00000224H
	push	OFFSET ??_C@_0BE@PNJLHODE@?4?2engine_string?4cpp?$AA@
	mov	esi, eax
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	add	esi, 1
	xor	ecx, ecx
	mov	eax, esi
	mov	edx, 2
	mul	edx
	seto	cl
	neg	ecx
	or	ecx, eax
	push	ecx
	call	??_U@YAPAXI@Z				; operator new[]

; 549  : 	mbstowcs(text,str,length+1);

	push	esi
	mov	edi, eax
	push	ebp
	push	edi
	call	_mbstowcs
	add	esp, 28					; 0000001cH

; 550  : 	return text;

	mov	eax, edi
	pop	edi
	pop	esi
	pop	ebp

; 551  : }

	ret	0
?CharToWideChar@@YAPB_WPBD@Z ENDP			; CharToWideChar
_TEXT	ENDS
PUBLIC	??_C@_0P@NCJGMDNE@WideCharToChar?$AA@		; `string'
PUBLIC	?WideCharToChar@@YAPBDPB_W@Z			; WideCharToChar
EXTRN	_wcstombs:PROC
;	COMDAT ??_C@_0P@NCJGMDNE@WideCharToChar?$AA@
CONST	SEGMENT
??_C@_0P@NCJGMDNE@WideCharToChar?$AA@ DB 'WideCharToChar', 00H ; `string'
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ?WideCharToChar@@YAPBDPB_W@Z
_TEXT	SEGMENT
_wcs$ = 8						; size = 4
?WideCharToChar@@YAPBDPB_W@Z PROC			; WideCharToChar, COMDAT

; 554  : {

	push	ebx

; 555  : 	if (!wcs)

	mov	ebx, DWORD PTR _wcs$[esp]
	test	ebx, ebx
	jne	SHORT $LN1@WideCharTo

; 556  : 	{
; 557  : 		char *c = new char[2];

	push	OFFSET ??_C@_0P@NCJGMDNE@WideCharToChar?$AA@
	push	557					; 0000022dH
	push	OFFSET ??_C@_0BE@PNJLHODE@?4?2engine_string?4cpp?$AA@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	push	2
	call	??_U@YAPAXI@Z				; operator new[]
	add	esp, 16					; 00000010H

; 558  : 		c[0] = 0;

	mov	BYTE PTR [eax], bl

; 559  : 		c[1] = 0;

	mov	BYTE PTR [eax+1], bl
	pop	ebx

; 566  : }

	ret	0
$LN1@WideCharTo:

; 560  : 		return c;
; 561  : 	}
; 562  : 	int length = wcslen(wcs);

	mov	eax, ebx
	lea	edx, DWORD PTR [eax+2]
$LL8@WideCharTo:
	mov	cx, WORD PTR [eax]
	add	eax, 2
	test	cx, cx
	jne	SHORT $LL8@WideCharTo
	push	esi
	push	edi

; 563  : 	char *text = new char[length+1];

	push	OFFSET ??_C@_0P@NCJGMDNE@WideCharToChar?$AA@
	sub	eax, edx
	sar	eax, 1
	push	563					; 00000233H
	push	OFFSET ??_C@_0BE@PNJLHODE@?4?2engine_string?4cpp?$AA@
	mov	esi, eax
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	add	esi, 1
	push	esi
	call	??_U@YAPAXI@Z				; operator new[]

; 564  : 	wcstombs(text,wcs,length+1);

	push	esi
	mov	edi, eax
	push	ebx
	push	edi
	call	_wcstombs
	add	esp, 28					; 0000001cH

; 565  : 	return text;

	mov	eax, edi
	pop	edi
	pop	esi
	pop	ebx

; 566  : }

	ret	0
?WideCharToChar@@YAPBDPB_W@Z ENDP			; WideCharToChar
_TEXT	ENDS
PUBLIC	?cpystr@@YAPADPBDPAD@Z				; cpystr
EXTRN	_memcpy:PROC
; Function compile flags: /Ogtpy
;	COMDAT ?cpystr@@YAPADPBDPAD@Z
_TEXT	SEGMENT
_src$ = 8						; size = 4
_dst$ = 12						; size = 4
?cpystr@@YAPADPBDPAD@Z PROC				; cpystr, COMDAT

; 570  : 	memcpy(dst,src,strlen(src)+1);

	mov	edx, DWORD PTR _src$[esp-4]
	mov	eax, edx
	push	esi
	lea	esi, DWORD PTR [eax+1]
	npad	6
$LL3@cpystr:
	mov	cl, BYTE PTR [eax]
	add	eax, 1
	test	cl, cl
	jne	SHORT $LL3@cpystr
	sub	eax, esi
	mov	esi, DWORD PTR _dst$[esp]
	add	eax, 1
	push	eax
	push	edx
	push	esi
	call	_memcpy
	add	esp, 12					; 0000000cH

; 571  : 	return dst;

	mov	eax, esi
	pop	esi

; 572  : };

	ret	0
?cpystr@@YAPADPBDPAD@Z ENDP				; cpystr
_TEXT	ENDS
PUBLIC	?cpywcs@@YAPA_WPB_WPA_W@Z			; cpywcs
; Function compile flags: /Ogtpy
;	COMDAT ?cpywcs@@YAPA_WPB_WPA_W@Z
_TEXT	SEGMENT
_src$ = 8						; size = 4
_dst$ = 12						; size = 4
?cpywcs@@YAPA_WPB_WPA_W@Z PROC				; cpywcs, COMDAT

; 576  : 	int len = wcslen(src);

	mov	edx, DWORD PTR _src$[esp-4]
	mov	eax, edx
	push	esi
	lea	esi, DWORD PTR [eax+2]
	npad	6
$LL3@cpywcs:
	mov	cx, WORD PTR [eax]
	add	eax, 2
	test	cx, cx
	jne	SHORT $LL3@cpywcs
	sub	eax, esi

; 577  : 	memcpy(dst,src,(len*2) + 2);

	mov	esi, DWORD PTR _dst$[esp]
	sar	eax, 1
	lea	eax, DWORD PTR [eax+eax+2]
	push	eax
	push	edx
	push	esi
	call	_memcpy
	add	esp, 12					; 0000000cH

; 578  : 	return dst;

	mov	eax, esi
	pop	esi

; 579  : };

	ret	0
?cpywcs@@YAPA_WPB_WPA_W@Z ENDP				; cpywcs
_TEXT	ENDS
PUBLIC	__TI2?AVbad_alloc@std@@
PUBLIC	??_C@_0DN@JHKGIIJF@C?3?2Program?5Files?2Microsoft?5Visua@ ; `string'
PUBLIC	?allocate@?$_DebugHeapAllocator@D@std@@QAAPADIPBX@Z ; std::_DebugHeapAllocator<char>::allocate
PUBLIC	__CTA2?AVbad_alloc@std@@
PUBLIC	__CT??_R0?AVbad_alloc@std@@@8??0bad_alloc@std@@QAE@ABV01@@Z12
PUBLIC	??0bad_alloc@std@@QAE@ABV01@@Z			; std::bad_alloc::bad_alloc
PUBLIC	__CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12
EXTRN	??_U@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z:PROC	; operator new[]
EXTRN	?_DebugHeapTag_func@std@@YAABU_DebugHeapTag_t@1@XZ:PROC ; std::_DebugHeapTag_func
EXTRN	__CxxThrowException@8:PROC
EXTRN	??0exception@std@@QAE@ABV01@@Z:PROC		; std::exception::exception
;	COMDAT __CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12
; File c:\program files\microsoft visual studio 8\vc\include\exception
xdata$x	SEGMENT
__CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12 DD 00H
	DD	FLAT:??_R0?AVexception@std@@@8
	DD	00H
	DD	0ffffffffH
	ORG $+4
	DD	0cH
	DD	FLAT:??0exception@std@@QAE@ABV01@@Z
xdata$x	ENDS
;	COMDAT __CT??_R0?AVbad_alloc@std@@@8??0bad_alloc@std@@QAE@ABV01@@Z12
xdata$x	SEGMENT
__CT??_R0?AVbad_alloc@std@@@8??0bad_alloc@std@@QAE@ABV01@@Z12 DD 00H
	DD	FLAT:??_R0?AVbad_alloc@std@@@8
	DD	00H
	DD	0ffffffffH
	ORG $+4
	DD	0cH
	DD	FLAT:??0bad_alloc@std@@QAE@ABV01@@Z
xdata$x	ENDS
;	COMDAT __CTA2?AVbad_alloc@std@@
xdata$x	SEGMENT
__CTA2?AVbad_alloc@std@@ DD 02H
	DD	FLAT:__CT??_R0?AVbad_alloc@std@@@8??0bad_alloc@std@@QAE@ABV01@@Z12
	DD	FLAT:__CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12
xdata$x	ENDS
;	COMDAT __TI2?AVbad_alloc@std@@
xdata$x	SEGMENT
__TI2?AVbad_alloc@std@@ DD 00H
	DD	FLAT:??1bad_alloc@std@@UAE@XZ
	DD	00H
	DD	FLAT:__CTA2?AVbad_alloc@std@@
xdata$x	ENDS
;	COMDAT ??_C@_0DN@JHKGIIJF@C?3?2Program?5Files?2Microsoft?5Visua@
CONST	SEGMENT
??_C@_0DN@JHKGIIJF@C?3?2Program?5Files?2Microsoft?5Visua@ DB 'C:\Program '
	DB	'Files\Microsoft Visual Studio 8\VC\include\xdebug', 00H ; `string'
; Function compile flags: /Ogtpy
; File c:\program files\microsoft visual studio 8\vc\include\xdebug
CONST	ENDS
;	COMDAT ?allocate@?$_DebugHeapAllocator@D@std@@QAAPADIPBX@Z
_TEXT	SEGMENT
$T43303 = -12						; size = 12
_this$ = 8						; size = 4
$T43309 = 12						; size = 4
__Count$ = 12						; size = 4
___formal$ = 16						; size = 4
?allocate@?$_DebugHeapAllocator@D@std@@QAAPADIPBX@Z PROC ; std::_DebugHeapAllocator<char>::allocate, COMDAT

; 79   : 		{	// check for integer overflow

	sub	esp, 12					; 0000000cH
	push	esi

; 80   : 		if (_Count <= 0)

	mov	esi, DWORD PTR __Count$[esp+12]
	test	esi, esi
	ja	SHORT $LN3@allocate

; 81   : 			_Count = 0;

	xor	esi, esi
$LN1@allocate:

; 84   : 
; 85   : 			// allocate array of _Count elements, ignore hint
; 86   : 		return ((_Ty *)_NEW_CRT char[_Count * sizeof(_Ty)]);

	push	86					; 00000056H
	push	OFFSET ??_C@_0DN@JHKGIIJF@C?3?2Program?5Files?2Microsoft?5Visua@
	call	?_DebugHeapTag_func@std@@YAABU_DebugHeapTag_t@1@XZ ; std::_DebugHeapTag_func
	push	eax
	push	esi
	call	??_U@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z ; operator new[]
	add	esp, 16					; 00000010H
	pop	esi

; 87   : 		}

	add	esp, 12					; 0000000cH
	ret	0
$LN3@allocate:

; 82   : 		else if (((size_t)(-1) / _Count) < sizeof(_Ty))

	or	eax, -1
	xor	edx, edx
	div	esi
	cmp	eax, 1
	jae	SHORT $LN1@allocate

; 83   : 			_THROW_NCEE(std::bad_alloc, NULL);

	lea	eax, DWORD PTR $T43309[esp+12]
	push	eax
	lea	ecx, DWORD PTR $T43303[esp+20]
	mov	DWORD PTR $T43309[esp+16], 0
	call	??0exception@std@@QAE@ABQBD@Z		; std::exception::exception
	push	OFFSET __TI2?AVbad_alloc@std@@
	lea	ecx, DWORD PTR $T43303[esp+20]
	push	ecx
	mov	DWORD PTR $T43303[esp+24], OFFSET ??_7bad_alloc@std@@6B@
	call	__CxxThrowException@8
$LN9@allocate:
$LN8@allocate:
	int	3
?allocate@?$_DebugHeapAllocator@D@std@@QAAPADIPBX@Z ENDP ; std::_DebugHeapAllocator<char>::allocate
_TEXT	ENDS
PUBLIC	?allocate@?$_DebugHeapAllocator@D@std@@QAEPADI@Z ; std::_DebugHeapAllocator<char>::allocate
; Function compile flags: /Ogtpy
;	COMDAT ?allocate@?$_DebugHeapAllocator@D@std@@QAEPADI@Z
_TEXT	SEGMENT
$T43315 = -12						; size = 12
$T43320 = 8						; size = 4
__Count$ = 8						; size = 4
?allocate@?$_DebugHeapAllocator@D@std@@QAEPADI@Z PROC	; std::_DebugHeapAllocator<char>::allocate, COMDAT
; _this$ = ecx

; 90   : 		{	// check for integer overflow

	sub	esp, 12					; 0000000cH
	push	esi

; 91   : 		if (_Count <= 0)

	mov	esi, DWORD PTR __Count$[esp+12]
	test	esi, esi
	ja	SHORT $LN3@allocate@2

; 92   : 			_Count = 0;

	xor	esi, esi
$LN1@allocate@2:

; 95   : 
; 96   : 			// allocate array of _Count elements
; 97   : 		return ((_Ty *)_NEW_CRT char[_Count * sizeof(_Ty)]);

	push	97					; 00000061H
	push	OFFSET ??_C@_0DN@JHKGIIJF@C?3?2Program?5Files?2Microsoft?5Visua@
	call	?_DebugHeapTag_func@std@@YAABU_DebugHeapTag_t@1@XZ ; std::_DebugHeapTag_func
	push	eax
	push	esi
	call	??_U@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z ; operator new[]
	add	esp, 16					; 00000010H
	pop	esi

; 98   : 		}

	add	esp, 12					; 0000000cH
	ret	4
$LN3@allocate@2:

; 93   : 		else if (((size_t)(-1) / _Count) < sizeof(_Ty))

	or	eax, -1
	xor	edx, edx
	div	esi
	cmp	eax, 1
	jae	SHORT $LN1@allocate@2

; 94   : 			_THROW_NCEE(std::bad_alloc, NULL);

	lea	eax, DWORD PTR $T43320[esp+12]
	push	eax
	lea	ecx, DWORD PTR $T43315[esp+20]
	mov	DWORD PTR $T43320[esp+16], 0
	call	??0exception@std@@QAE@ABQBD@Z		; std::exception::exception
	push	OFFSET __TI2?AVbad_alloc@std@@
	lea	ecx, DWORD PTR $T43315[esp+20]
	push	ecx
	mov	DWORD PTR $T43315[esp+24], OFFSET ??_7bad_alloc@std@@6B@
	call	__CxxThrowException@8
$LN9@allocate@2:
$LN8@allocate@2:
	int	3
?allocate@?$_DebugHeapAllocator@D@std@@QAEPADI@Z ENDP	; std::_DebugHeapAllocator<char>::allocate
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ??0bad_alloc@std@@QAE@ABV01@@Z
_TEXT	SEGMENT
___that$ = 8						; size = 4
??0bad_alloc@std@@QAE@ABV01@@Z PROC			; std::bad_alloc::bad_alloc, COMDAT
; _this$ = ecx
	mov	eax, DWORD PTR ___that$[esp-4]
	push	esi
	push	eax
	mov	esi, ecx
	call	??0exception@std@@QAE@ABV01@@Z		; std::exception::exception
	mov	DWORD PTR [esi], OFFSET ??_7bad_alloc@std@@6B@
	mov	eax, esi
	pop	esi
	ret	4
??0bad_alloc@std@@QAE@ABV01@@Z ENDP			; std::bad_alloc::bad_alloc
_TEXT	ENDS
PUBLIC	??0?$allocator@D@std@@QAE@XZ			; std::allocator<char>::allocator<char>
; Function compile flags: /Ogtpy
; File c:\program files\microsoft visual studio 8\vc\include\xmemory
;	COMDAT ??0?$allocator@D@std@@QAE@XZ
_TEXT	SEGMENT
??0?$allocator@D@std@@QAE@XZ PROC			; std::allocator<char>::allocator<char>, COMDAT
; _this$ = ecx

; 120  : 	allocator() _THROW0()

	mov	eax, ecx

; 121  : 		{	// construct default allocator (do nothing)
; 122  : 		}

	ret	0
??0?$allocator@D@std@@QAE@XZ ENDP			; std::allocator<char>::allocator<char>
_TEXT	ENDS
PUBLIC	??0?$allocator@D@std@@QAE@ABV01@@Z		; std::allocator<char>::allocator<char>
; Function compile flags: /Ogtpy
;	COMDAT ??0?$allocator@D@std@@QAE@ABV01@@Z
_TEXT	SEGMENT
___formal$ = 8						; size = 4
??0?$allocator@D@std@@QAE@ABV01@@Z PROC			; std::allocator<char>::allocator<char>, COMDAT
; _this$ = ecx

; 124  : 	allocator(const allocator<_Ty>&) _THROW0()

	mov	eax, ecx

; 125  : 		{	// construct by copying (do nothing)
; 126  : 		}

	ret	4
??0?$allocator@D@std@@QAE@ABV01@@Z ENDP			; std::allocator<char>::allocator<char>
_TEXT	ENDS
PUBLIC	??$_DebugHeapDelete@X@std@@YAXPAX@Z		; std::_DebugHeapDelete<void>
EXTRN	_free:PROC
; Function compile flags: /Ogtpy
; File c:\program files\microsoft visual studio 8\vc\include\xdebug
;	COMDAT ??$_DebugHeapDelete@X@std@@YAXPAX@Z
_TEXT	SEGMENT
__Ptr$ = 8						; size = 4
??$_DebugHeapDelete@X@std@@YAXPAX@Z PROC		; std::_DebugHeapDelete<void>, COMDAT

; 56   : 	if (_Ptr != 0)

	mov	eax, DWORD PTR __Ptr$[esp-4]
	test	eax, eax
	je	SHORT $LN1@DebugHeapD

; 57   : 		{	// worth deleting
; 58   : 		_Ptr->~_Ty();
; 59   : 		// delete as _NORMAL_BLOCK, not _CRT_BLOCK, since we might have
; 60   : 		// facets allocated by normal new.
; 61   : 		free(_Ptr);

	mov	DWORD PTR __Ptr$[esp-4], eax
	jmp	_free
$LN1@DebugHeapD:

; 62   : 		}
; 63   : 	}

	ret	0
??$_DebugHeapDelete@X@std@@YAXPAX@Z ENDP		; std::_DebugHeapDelete<void>
_TEXT	ENDS
PUBLIC	?Set_Buffer_And_Allocated_Length@StringClass@@QAEXPADH@Z ; StringClass::Set_Buffer_And_Allocated_Length
; Function compile flags: /Ogtpy
; File d:\source code\stgm\engine_string.h
;	COMDAT ?Set_Buffer_And_Allocated_Length@StringClass@@QAEXPADH@Z
_TEXT	SEGMENT
_buffer$ = 8						; size = 4
_length$ = 12						; size = 4
?Set_Buffer_And_Allocated_Length@StringClass@@QAEXPADH@Z PROC ; StringClass::Set_Buffer_And_Allocated_Length, COMDAT
; _this$ = ecx

; 72   : 		m_Buffer = buffer;

	mov	eax, DWORD PTR _buffer$[esp-4]
	mov	DWORD PTR [ecx], eax

; 73   : 		Store_Allocated_Length(length);

	mov	edx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [edx]
	je	SHORT $LN3@Set_Buffer
	mov	edx, DWORD PTR _length$[esp-4]
	mov	DWORD PTR [eax-8], edx
$LN3@Set_Buffer:

; 74   : 		Store_Length(0);

	mov	ecx, DWORD PTR [ecx]
	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	ecx, DWORD PTR [eax]
	je	SHORT $LN11@Set_Buffer
	mov	DWORD PTR [ecx-4], 0
$LN11@Set_Buffer:

; 75   : 	}

	ret	8
?Set_Buffer_And_Allocated_Length@StringClass@@QAEXPADH@Z ENDP ; StringClass::Set_Buffer_And_Allocated_Length
_TEXT	ENDS
PUBLIC	?Set_Buffer_And_Allocated_Length@WideStringClass@@QAEXPA_WH@Z ; WideStringClass::Set_Buffer_And_Allocated_Length
; Function compile flags: /Ogtpy
;	COMDAT ?Set_Buffer_And_Allocated_Length@WideStringClass@@QAEXPA_WH@Z
_TEXT	SEGMENT
_buffer$ = 8						; size = 4
_length$ = 12						; size = 4
?Set_Buffer_And_Allocated_Length@WideStringClass@@QAEXPA_WH@Z PROC ; WideStringClass::Set_Buffer_And_Allocated_Length, COMDAT
; _this$ = ecx

; 192  : 		m_Buffer = buffer;

	mov	eax, DWORD PTR _buffer$[esp-4]
	mov	DWORD PTR [ecx], eax

; 193  : 		Store_Allocated_Length(length);

	mov	edx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [edx]
	je	SHORT $LN3@Set_Buffer@2
	mov	edx, DWORD PTR _length$[esp-4]
	mov	DWORD PTR [eax-8], edx
$LN3@Set_Buffer@2:

; 194  : 		Store_Length(0);

	mov	ecx, DWORD PTR [ecx]
	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	ecx, DWORD PTR [eax]
	je	SHORT $LN11@Set_Buffer@2
	mov	DWORD PTR [ecx-4], 0
$LN11@Set_Buffer@2:

; 195  : 	}

	ret	8
?Set_Buffer_And_Allocated_Length@WideStringClass@@QAEXPA_WH@Z ENDP ; WideStringClass::Set_Buffer_And_Allocated_Length
_TEXT	ENDS
PUBLIC	??1StringClass@@QAE@XZ				; StringClass::~StringClass
; Function compile flags: /Ogtpy
; File d:\source code\stgm\engine_string.cpp
;	COMDAT ??1StringClass@@QAE@XZ
_TEXT	SEGMENT
??1StringClass@@QAE@XZ PROC				; StringClass::~StringClass, COMDAT
; _this$ = ecx

; 122  : 	Free_String();

	jmp	?Free_String@StringClass@@QAEXXZ	; StringClass::Free_String
??1StringClass@@QAE@XZ ENDP				; StringClass::~StringClass
_TEXT	ENDS
PUBLIC	?Get_String@StringClass@@QAEXH_N@Z		; StringClass::Get_String
; Function compile flags: /Ogtpy
;	COMDAT ?Get_String@StringClass@@QAEXH_N@Z
_TEXT	SEGMENT
_length$ = 8						; size = 4
_is_temp$ = 12						; size = 1
?Get_String@StringClass@@QAEXH_N@Z PROC			; StringClass::Get_String, COMDAT
; _this$ = ecx

; 199  : 	if (!is_temp && !length)

	cmp	BYTE PTR _is_temp$[esp-4], 0
	push	ebp
	mov	ebp, DWORD PTR _length$[esp]
	push	esi
	push	edi
	mov	edi, ecx
	jne	SHORT $LN58@Get_String
	test	ebp, ebp
	jne	$LN64@Get_String

; 200  : 	{
; 201  : 		m_Buffer = *m_EmptyString;

	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	mov	ecx, DWORD PTR [eax]
	mov	DWORD PTR [edi], ecx
	pop	edi
	pop	esi
	pop	ebp

; 240  : 	}
; 241  : }

	ret	8
$LN58@Get_String:

; 202  : 		return;
; 203  : 	}
; 204  : 	if (is_temp && (length <= 0xF8) && (*ReservedMask != 0xFF))

	cmp	ebp, 248				; 000000f8H
	jg	$LN3@Get_String
	mov	edx, DWORD PTR ?ReservedMask@StringClass@@2PAIA ; StringClass::ReservedMask
	cmp	DWORD PTR [edx], 255			; 000000ffH
	je	$LN3@Get_String

; 205  : 	{
; 206  : 		char *c = 0;
; 207  : 		m_Mutex->Lock();

	mov	ecx, DWORD PTR ?m_Mutex@StringClass@@2PAVCriticalSectionClass@@A ; StringClass::m_Mutex
	xor	esi, esi
	call	?Lock@CriticalSectionClass@@QAEXXZ	; CriticalSectionClass::Lock

; 208  : 		unsigned int i;
; 209  : 		for (i = 0;i < 8;i++)

	mov	edx, DWORD PTR ?ReservedMask@StringClass@@2PAIA ; StringClass::ReservedMask
	mov	eax, DWORD PTR [edx]
	xor	ecx, ecx
	push	ebx
	npad	3
$LL8@Get_String:

; 210  : 		{
; 211  : 			if (!(*ReservedMask & (1 << i)))

	mov	ebx, 1
	shl	ebx, cl
	test	ebx, eax
	je	SHORT $LN56@Get_String
	add	ecx, 1
	cmp	ecx, 8
	jb	SHORT $LL8@Get_String

; 212  : 			{
; 213  : 				break;
; 214  : 			}
; 215  : 		}
; 216  : 		if (i < 8)

	jmp	SHORT $LN63@Get_String
$LN56@Get_String:
	cmp	ecx, 8
	jae	SHORT $LN63@Get_String

; 217  : 		{
; 218  : 			*ReservedMask |= (1 << i);

	mov	esi, 1
	shl	esi, cl

; 219  : 			unsigned int x = (unsigned int)&m_TempStrings[0x800];
; 220  : 			x &= -0x800;
; 221  : 			c = (char *)x + (i << 8) + 8;

	shl	ecx, 8
	or	esi, eax
	mov	DWORD PTR [edx], esi
	mov	eax, DWORD PTR ?m_TempStrings@StringClass@@2PADA ; StringClass::m_TempStrings
	add	eax, 2048				; 00000800H
	and	eax, -2048				; fffff800H
	lea	esi, DWORD PTR [eax+ecx+8]

; 222  : 			Free_String();

	mov	ecx, edi
	call	?Free_String@StringClass@@QAEXXZ	; StringClass::Free_String

; 223  : 			Set_Buffer_And_Allocated_Length(c,0xF8);

	mov	DWORD PTR [edi], esi
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	esi, DWORD PTR [ecx]
	je	SHORT $LN15@Get_String
	mov	DWORD PTR [esi-8], 248			; 000000f8H
$LN15@Get_String:
	mov	eax, DWORD PTR [edi]
	mov	edx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [edx]
	je	SHORT $LN63@Get_String
	mov	DWORD PTR [eax-4], 0
$LN63@Get_String:

; 224  : 		}
; 225  : 		m_Mutex->Unlock();
; 226  : 		if (c)

	test	esi, esi
	mov	eax, DWORD PTR ?m_Mutex@StringClass@@2PAVCriticalSectionClass@@A ; StringClass::m_Mutex
	mov	DWORD PTR [eax], 0
	pop	ebx
	jne	SHORT $LN1@Get_String
$LN3@Get_String:

; 227  : 		{
; 228  : 			return;
; 229  : 		}
; 230  : 	}
; 231  : 	if (length > 0)

	test	ebp, ebp
$LN64@Get_String:
	jle	SHORT $LN2@Get_String

; 232  : 	{
; 233  : 		char *x = Allocate_Buffer(length);

	push	OFFSET ??_C@_0BN@KPANAABL@StringClass?3?3Allocate_Buffer?$AA@
	push	101					; 00000065H
	push	OFFSET ??_C@_0CE@KCIOLGFO@d?3?2source?5code?2stgm?2engine_strin@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	lea	ecx, DWORD PTR [ebp+8]
	push	ecx
	call	??_U@YAPAXI@Z				; operator new[]
	mov	esi, eax
	add	esp, 16					; 00000010H

; 234  : 		Free_String();

	mov	ecx, edi
	mov	DWORD PTR [esi], ebp
	mov	DWORD PTR [esi+4], 0
	call	?Free_String@StringClass@@QAEXXZ	; StringClass::Free_String
	lea	eax, DWORD PTR [esi+8]

; 235  : 		Set_Buffer_And_Allocated_Length(x,length);

	mov	DWORD PTR [edi], eax
	mov	edx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [edx]
	je	SHORT $LN39@Get_String
	mov	DWORD PTR [eax-8], ebp
$LN39@Get_String:
	mov	edi, DWORD PTR [edi]
	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	edi, DWORD PTR [eax]
	je	SHORT $LN1@Get_String
	mov	DWORD PTR [edi-4], 0
	pop	edi
	pop	esi
	pop	ebp

; 240  : 	}
; 241  : }

	ret	8
$LN2@Get_String:

; 236  : 	}
; 237  : 	else
; 238  : 	{
; 239  : 		Free_String();

	mov	ecx, edi
	call	?Free_String@StringClass@@QAEXXZ	; StringClass::Free_String
$LN1@Get_String:
	pop	edi
	pop	esi
	pop	ebp

; 240  : 	}
; 241  : }

	ret	8
?Get_String@StringClass@@QAEXH_N@Z ENDP			; StringClass::Get_String
_TEXT	ENDS
PUBLIC	?Resize@StringClass@@QAEXH@Z			; StringClass::Resize
; Function compile flags: /Ogtpy
;	COMDAT ?Resize@StringClass@@QAEXH@Z
_TEXT	SEGMENT
_new_len$ = 8						; size = 4
?Resize@StringClass@@QAEXH@Z PROC			; StringClass::Resize, COMDAT
; _this$ = ecx

; 244  : {

	push	ebp
	mov	ebp, ecx

; 245  : 	if (new_len > Get_Allocated_Length())

	mov	eax, DWORD PTR [ebp]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	push	edi
	je	SHORT $LN5@Resize
	mov	eax, DWORD PTR [eax-8]
	jmp	SHORT $LN6@Resize
$LN5@Resize:
	xor	eax, eax
$LN6@Resize:
	mov	edi, DWORD PTR _new_len$[esp+4]
	cmp	edi, eax
	jle	SHORT $LN27@Resize
	push	esi

; 246  : 	{
; 247  : 		char *x = Allocate_Buffer(new_len);

	push	OFFSET ??_C@_0BN@KPANAABL@StringClass?3?3Allocate_Buffer?$AA@
	push	101					; 00000065H
	push	OFFSET ??_C@_0CE@KCIOLGFO@d?3?2source?5code?2stgm?2engine_strin@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	lea	edx, DWORD PTR [edi+8]
	push	edx
	call	??_U@YAPAXI@Z				; operator new[]
	lea	esi, DWORD PTR [eax+8]
	mov	DWORD PTR [eax], edi
	mov	DWORD PTR [eax+4], 0

; 248  : 		strcpy(x,m_Buffer);

	mov	ecx, DWORD PTR [ebp]
	add	esp, 16					; 00000010H
	mov	edx, esi
	npad	1
$LL4@Resize:
	mov	al, BYTE PTR [ecx]
	mov	BYTE PTR [edx], al
	add	ecx, 1
	add	edx, 1
	test	al, al
	jne	SHORT $LL4@Resize

; 249  : 		Free_String();

	mov	ecx, ebp
	call	?Free_String@StringClass@@QAEXXZ	; StringClass::Free_String

; 250  : 		Set_Buffer_And_Allocated_Length(x,new_len);

	mov	DWORD PTR [ebp], esi
	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	esi, DWORD PTR [eax]
	je	SHORT $LN19@Resize
	mov	DWORD PTR [esi-8], edi
$LN19@Resize:
	mov	ebp, DWORD PTR [ebp]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	ebp, DWORD PTR [ecx]
	pop	esi
	je	SHORT $LN27@Resize
	mov	DWORD PTR [ebp-4], 0
$LN27@Resize:
	pop	edi
	pop	ebp

; 251  : 	}
; 252  : }

	ret	4
?Resize@StringClass@@QAEXH@Z ENDP			; StringClass::Resize
_TEXT	ENDS
PUBLIC	?Uninitialised_Grow@StringClass@@QAEXH@Z	; StringClass::Uninitialised_Grow
; Function compile flags: /Ogtpy
;	COMDAT ?Uninitialised_Grow@StringClass@@QAEXH@Z
_TEXT	SEGMENT
_new_len$ = 8						; size = 4
?Uninitialised_Grow@StringClass@@QAEXH@Z PROC		; StringClass::Uninitialised_Grow, COMDAT
; _this$ = ecx

; 255  : {

	push	ebx
	mov	ebx, ecx

; 256  : 	if (new_len > Get_Allocated_Length())

	mov	eax, DWORD PTR [ebx]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	push	edi
	je	SHORT $LN4@Uninitiali
	mov	eax, DWORD PTR [eax-8]
	jmp	SHORT $LN5@Uninitiali
$LN4@Uninitiali:
	xor	eax, eax
$LN5@Uninitiali:
	mov	edi, DWORD PTR _new_len$[esp+4]
	cmp	edi, eax
	jle	SHORT $LN26@Uninitiali
	push	esi

; 257  : 	{
; 258  : 		char *x = Allocate_Buffer(new_len);

	push	OFFSET ??_C@_0BN@KPANAABL@StringClass?3?3Allocate_Buffer?$AA@
	push	101					; 00000065H
	push	OFFSET ??_C@_0CE@KCIOLGFO@d?3?2source?5code?2stgm?2engine_strin@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	lea	edx, DWORD PTR [edi+8]
	push	edx
	call	??_U@YAPAXI@Z				; operator new[]
	mov	esi, eax
	add	esp, 16					; 00000010H

; 259  : 		Free_String();

	mov	ecx, ebx
	mov	DWORD PTR [esi], edi
	mov	DWORD PTR [esi+4], 0
	call	?Free_String@StringClass@@QAEXXZ	; StringClass::Free_String
	lea	eax, DWORD PTR [esi+8]

; 260  : 		Set_Buffer_And_Allocated_Length(x,new_len);

	mov	DWORD PTR [ebx], eax
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	pop	esi
	je	SHORT $LN18@Uninitiali
	mov	DWORD PTR [eax-8], edi
$LN18@Uninitiali:
	mov	ebx, DWORD PTR [ebx]
	mov	edx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	ebx, DWORD PTR [edx]
	je	SHORT $LN26@Uninitiali
	mov	DWORD PTR [ebx-4], 0
$LN26@Uninitiali:
	pop	edi
	pop	ebx

; 261  : 	}
; 262  : }

	ret	4
?Uninitialised_Grow@StringClass@@QAEXH@Z ENDP		; StringClass::Uninitialised_Grow
_TEXT	ENDS
PUBLIC	?Copy_Wide@StringClass@@QAE_NPB_W@Z		; StringClass::Copy_Wide
EXTRN	_wcsrtombs:PROC
; Function compile flags: /Ogtpy
;	COMDAT ?Copy_Wide@StringClass@@QAE_NPB_W@Z
_TEXT	SEGMENT
_ps$ = -4						; size = 4
_str$ = 8						; size = 4
?Copy_Wide@StringClass@@QAE_NPB_W@Z PROC		; StringClass::Copy_Wide, COMDAT
; _this$ = ecx

; 304  : {

	push	ecx

; 305  : 	if (!str)

	cmp	DWORD PTR _str$[esp], 0
	push	edi
	mov	edi, ecx
	jne	SHORT $LN2@Copy_Wide

; 306  : 	{
; 307  : 		return false;

	xor	al, al
	pop	edi

; 320  : }

	pop	ecx
	ret	4
$LN2@Copy_Wide:
	push	esi

; 308  : 	}
; 309  : 	mbstate_t ps;
; 310  : 	memset(&ps,0,sizeof(ps));
; 311  : 	int len = wcsrtombs(0,&str,0,&ps);

	lea	eax, DWORD PTR _ps$[esp+12]
	push	eax
	push	0
	lea	ecx, DWORD PTR _str$[esp+16]
	push	ecx
	push	0
	mov	DWORD PTR _ps$[esp+28], 0
	call	_wcsrtombs
	mov	esi, eax
	add	esp, 16					; 00000010H

; 312  : 	if (len > 0)

	test	esi, esi
	jle	SHORT $LN1@Copy_Wide

; 313  : 	{
; 314  : 		Uninitialised_Grow(len+1);

	lea	edx, DWORD PTR [esi+1]
	push	edx
	mov	ecx, edi
	call	?Uninitialised_Grow@StringClass@@QAEXH@Z ; StringClass::Uninitialised_Grow

; 315  : 		wcsrtombs(m_Buffer,&str,len,&ps);

	mov	edx, DWORD PTR [edi]
	lea	eax, DWORD PTR _ps$[esp+12]
	push	eax
	push	esi
	lea	ecx, DWORD PTR _str$[esp+16]
	push	ecx
	push	edx
	call	_wcsrtombs

; 316  : 		m_Buffer[len] = 0;

	mov	eax, DWORD PTR [edi]
	add	esp, 16					; 00000010H
	mov	BYTE PTR [esi+eax], 0
	pop	esi

; 317  : 		return true;

	mov	al, 1
	pop	edi

; 320  : }

	pop	ecx
	ret	4
$LN1@Copy_Wide:
	pop	esi

; 318  : 	}
; 319  : 	return false;

	xor	al, al
	pop	edi

; 320  : }

	pop	ecx
	ret	4
?Copy_Wide@StringClass@@QAE_NPB_W@Z ENDP		; StringClass::Copy_Wide
_TEXT	ENDS
PUBLIC	??1WideStringClass@@QAE@XZ			; WideStringClass::~WideStringClass
; Function compile flags: /Ogtpy
;	COMDAT ??1WideStringClass@@QAE@XZ
_TEXT	SEGMENT
??1WideStringClass@@QAE@XZ PROC				; WideStringClass::~WideStringClass, COMDAT
; _this$ = ecx

; 341  : 	Free_String();

	jmp	?Free_String@WideStringClass@@QAEXXZ	; WideStringClass::Free_String
??1WideStringClass@@QAE@XZ ENDP				; WideStringClass::~WideStringClass
_TEXT	ENDS
PUBLIC	?Get_String@WideStringClass@@QAEXH_N@Z		; WideStringClass::Get_String
; Function compile flags: /Ogtpy
;	COMDAT ?Get_String@WideStringClass@@QAEXH_N@Z
_TEXT	SEGMENT
_length$ = 8						; size = 4
_is_temp$ = 12						; size = 1
?Get_String@WideStringClass@@QAEXH_N@Z PROC		; WideStringClass::Get_String, COMDAT
; _this$ = ecx

; 417  : {

	push	ebx
	push	ebp

; 418  : 	if (!is_temp && !length)

	mov	ebp, DWORD PTR _length$[esp+4]
	push	esi
	xor	ebx, ebx
	cmp	BYTE PTR _is_temp$[esp+8], bl
	push	edi
	mov	edi, ecx
	jne	SHORT $LN54@Get_String@2
	cmp	ebp, ebx
	jne	$LN6@Get_String@2

; 419  : 	{
; 420  : 		m_Buffer = *m_EmptyString;

	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	mov	ecx, DWORD PTR [eax]
	mov	DWORD PTR [edi], ecx
	pop	edi
	pop	esi
	pop	ebp
	pop	ebx

; 444  : 	}
; 445  : }

	ret	8
$LN54@Get_String@2:

; 421  : 		return;
; 422  : 	}
; 423  : 	if (is_temp && (length <= 0xFF) && (*m_UsedTempStringCount <= 3))

	cmp	ebp, 255				; 000000ffH
	jg	$LN6@Get_String@2
	mov	edx, DWORD PTR ?m_UsedTempStringCount@WideStringClass@@2PAHA ; WideStringClass::m_UsedTempStringCount
	cmp	DWORD PTR [edx], 3
	jg	$LN6@Get_String@2

; 424  : 	{
; 425  : 		m_TempMutex->Lock();

	mov	ecx, DWORD PTR ?m_TempMutex@WideStringClass@@2PAVCriticalSectionClass@@A ; WideStringClass::m_TempMutex
	call	?Lock@CriticalSectionClass@@QAEXXZ	; CriticalSectionClass::Lock
	mov	eax, DWORD PTR ?m_FreeTempPtr@WideStringClass@@2PAPA_WA ; WideStringClass::m_FreeTempPtr
	xor	esi, esi
	mov	ebp, 256				; 00000100H
	npad	4
$LL5@Get_String@2:

; 426  : 		for (unsigned int i = 0;i < 3;i++)
; 427  : 		{
; 428  : 			if (m_FreeTempPtr[i])

	cmp	DWORD PTR [esi+eax], ebx
	je	SHORT $LN4@Get_String@2

; 429  : 			{
; 430  : 				m_ResTempPtr[i] = m_FreeTempPtr[i];

	mov	ecx, DWORD PTR ?m_ResTempPtr@WideStringClass@@2PAPA_WA ; WideStringClass::m_ResTempPtr
	mov	eax, DWORD PTR [esi+eax]
	mov	DWORD PTR [esi+ecx], eax

; 431  : 				m_FreeTempPtr[i] = 0;

	mov	edx, DWORD PTR ?m_FreeTempPtr@WideStringClass@@2PAPA_WA ; WideStringClass::m_FreeTempPtr

; 432  : 				Free_String();

	mov	ecx, edi
	mov	DWORD PTR [esi+edx], ebx
	call	?Free_String@WideStringClass@@QAEXXZ	; WideStringClass::Free_String

; 433  : 				Set_Buffer_And_Allocated_Length(m_ResTempPtr[i],0x100);

	mov	eax, DWORD PTR ?m_ResTempPtr@WideStringClass@@2PAPA_WA ; WideStringClass::m_ResTempPtr
	mov	eax, DWORD PTR [esi+eax]
	mov	DWORD PTR [edi], eax
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN12@Get_String@2
	mov	DWORD PTR [eax-8], ebp
$LN12@Get_String@2:
	mov	eax, DWORD PTR [edi]
	mov	edx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [edx]
	je	SHORT $LN20@Get_String@2
	mov	DWORD PTR [eax-4], ebx
$LN20@Get_String@2:

; 434  : 				m_UsedTempStringCount++;

	add	DWORD PTR ?m_UsedTempStringCount@WideStringClass@@2PAHA, 4 ; WideStringClass::m_UsedTempStringCount
	mov	eax, DWORD PTR ?m_FreeTempPtr@WideStringClass@@2PAPA_WA ; WideStringClass::m_FreeTempPtr
$LN4@Get_String@2:
	add	esi, 4
	cmp	esi, 12					; 0000000cH
	jb	SHORT $LL5@Get_String@2

; 435  : 			}
; 436  : 		}
; 437  : 		m_TempMutex->Unlock();

	mov	eax, DWORD PTR ?m_TempMutex@WideStringClass@@2PAVCriticalSectionClass@@A ; WideStringClass::m_TempMutex
	pop	edi
	pop	esi
	pop	ebp
	mov	DWORD PTR [eax], ebx
	pop	ebx

; 444  : 	}
; 445  : }

	ret	8
$LN6@Get_String@2:

; 438  : 	}
; 439  : 	else
; 440  : 	{
; 441  : 		wchar_t *x = Allocate_Buffer(length);

	push	OFFSET ??_C@_0CB@MBFDNJL@WideStringClass?3?3Allocate_Buffer@
	push	221					; 000000ddH
	push	OFFSET ??_C@_0CE@KCIOLGFO@d?3?2source?5code?2stgm?2engine_strin@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	xor	ecx, ecx
	lea	eax, DWORD PTR [ebp+4]
	mov	edx, 2
	mul	edx
	seto	cl
	neg	ecx
	or	ecx, eax
	push	ecx
	call	??_U@YAPAXI@Z				; operator new[]
	mov	esi, eax
	add	esp, 16					; 00000010H

; 442  : 		Free_String();

	mov	ecx, edi
	mov	DWORD PTR [esi], ebp
	mov	DWORD PTR [esi+4], ebx
	call	?Free_String@WideStringClass@@QAEXXZ	; WideStringClass::Free_String
	lea	eax, DWORD PTR [esi+8]

; 443  : 		Set_Buffer_And_Allocated_Length(x,length);

	mov	DWORD PTR [edi], eax
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN36@Get_String@2
	mov	DWORD PTR [eax-8], ebp
$LN36@Get_String@2:
	mov	edi, DWORD PTR [edi]
	mov	edx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	edi, DWORD PTR [edx]
	je	SHORT $LN44@Get_String@2
	mov	DWORD PTR [edi-4], ebx
$LN44@Get_String@2:
	pop	edi
	pop	esi
	pop	ebp
	pop	ebx

; 444  : 	}
; 445  : }

	ret	8
?Get_String@WideStringClass@@QAEXH_N@Z ENDP		; WideStringClass::Get_String
_TEXT	ENDS
PUBLIC	?Resize@WideStringClass@@QAEXH@Z		; WideStringClass::Resize
; Function compile flags: /Ogtpy
;	COMDAT ?Resize@WideStringClass@@QAEXH@Z
_TEXT	SEGMENT
_new_len$ = 8						; size = 4
?Resize@WideStringClass@@QAEXH@Z PROC			; WideStringClass::Resize, COMDAT
; _this$ = ecx

; 448  : {

	push	ebp
	mov	ebp, ecx

; 449  : 	if (new_len > Get_Allocated_Length())

	mov	eax, DWORD PTR [ebp]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	push	edi
	je	SHORT $LN5@Resize@2
	mov	eax, DWORD PTR [eax-8]
	jmp	SHORT $LN6@Resize@2
$LN5@Resize@2:
	xor	eax, eax
$LN6@Resize@2:
	mov	edi, DWORD PTR _new_len$[esp+4]
	cmp	edi, eax
	jle	SHORT $LN27@Resize@2
	push	esi

; 450  : 	{
; 451  : 		wchar_t *x = Allocate_Buffer(new_len);

	push	OFFSET ??_C@_0CB@MBFDNJL@WideStringClass?3?3Allocate_Buffer@
	push	221					; 000000ddH
	push	OFFSET ??_C@_0CE@KCIOLGFO@d?3?2source?5code?2stgm?2engine_strin@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	xor	ecx, ecx
	lea	eax, DWORD PTR [edi+4]
	mov	edx, 2
	mul	edx
	seto	cl
	neg	ecx
	or	ecx, eax
	push	ecx
	call	??_U@YAPAXI@Z				; operator new[]
	lea	esi, DWORD PTR [eax+8]
	mov	DWORD PTR [eax], edi
	mov	DWORD PTR [eax+4], 0

; 452  : 		wcscpy(x,m_Buffer);

	mov	ecx, DWORD PTR [ebp]
	add	esp, 16					; 00000010H
	mov	edx, esi
$LL4@Resize@2:
	movzx	eax, WORD PTR [ecx]
	mov	WORD PTR [edx], ax
	add	ecx, 2
	add	edx, 2
	test	ax, ax
	jne	SHORT $LL4@Resize@2

; 453  : 		Free_String();

	mov	ecx, ebp
	call	?Free_String@WideStringClass@@QAEXXZ	; WideStringClass::Free_String

; 454  : 		Set_Buffer_And_Allocated_Length(x,new_len);

	mov	DWORD PTR [ebp], esi
	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	esi, DWORD PTR [eax]
	je	SHORT $LN19@Resize@2
	mov	DWORD PTR [esi-8], edi
$LN19@Resize@2:
	mov	ebp, DWORD PTR [ebp]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	ebp, DWORD PTR [ecx]
	pop	esi
	je	SHORT $LN27@Resize@2
	mov	DWORD PTR [ebp-4], 0
$LN27@Resize@2:
	pop	edi
	pop	ebp

; 455  : 	}
; 456  : }

	ret	4
?Resize@WideStringClass@@QAEXH@Z ENDP			; WideStringClass::Resize
_TEXT	ENDS
PUBLIC	?Uninitialised_Grow@WideStringClass@@QAEXH@Z	; WideStringClass::Uninitialised_Grow
; Function compile flags: /Ogtpy
;	COMDAT ?Uninitialised_Grow@WideStringClass@@QAEXH@Z
_TEXT	SEGMENT
_new_len$ = 8						; size = 4
?Uninitialised_Grow@WideStringClass@@QAEXH@Z PROC	; WideStringClass::Uninitialised_Grow, COMDAT
; _this$ = ecx

; 459  : {

	push	ebp
	mov	ebp, ecx

; 460  : 	if (new_len > Get_Allocated_Length())

	mov	eax, DWORD PTR [ebp]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	push	edi
	je	SHORT $LN4@Uninitiali@2
	mov	eax, DWORD PTR [eax-8]
	jmp	SHORT $LN5@Uninitiali@2
$LN4@Uninitiali@2:
	xor	eax, eax
$LN5@Uninitiali@2:
	mov	edi, DWORD PTR _new_len$[esp+4]
	cmp	edi, eax
	jle	SHORT $LN26@Uninitiali@2
	push	esi

; 461  : 	{
; 462  : 		wchar_t *x = Allocate_Buffer(new_len);

	push	OFFSET ??_C@_0CB@MBFDNJL@WideStringClass?3?3Allocate_Buffer@
	push	221					; 000000ddH
	push	OFFSET ??_C@_0CE@KCIOLGFO@d?3?2source?5code?2stgm?2engine_strin@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	xor	ecx, ecx
	lea	eax, DWORD PTR [edi+4]
	mov	edx, 2
	mul	edx
	seto	cl
	neg	ecx
	or	ecx, eax
	push	ecx
	call	??_U@YAPAXI@Z				; operator new[]
	mov	esi, eax
	add	esp, 16					; 00000010H

; 463  : 		Free_String();

	mov	ecx, ebp
	mov	DWORD PTR [esi], edi
	mov	DWORD PTR [esi+4], 0
	call	?Free_String@WideStringClass@@QAEXXZ	; WideStringClass::Free_String
	lea	eax, DWORD PTR [esi+8]

; 464  : 		Set_Buffer_And_Allocated_Length(x,new_len);

	mov	DWORD PTR [ebp], eax
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	pop	esi
	je	SHORT $LN18@Uninitiali@2
	mov	DWORD PTR [eax-8], edi
$LN18@Uninitiali@2:
	mov	ebp, DWORD PTR [ebp]
	mov	edx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	ebp, DWORD PTR [edx]
	je	SHORT $LN26@Uninitiali@2
	mov	DWORD PTR [ebp-4], 0
$LN26@Uninitiali@2:
	pop	edi
	pop	ebp

; 465  : 	}
; 466  : }

	ret	4
?Uninitialised_Grow@WideStringClass@@QAEXH@Z ENDP	; WideStringClass::Uninitialised_Grow
_TEXT	ENDS
PUBLIC	?Convert_From@WideStringClass@@QAE_NPBD@Z	; WideStringClass::Convert_From
EXTRN	_mbsrtowcs:PROC
; Function compile flags: /Ogtpy
;	COMDAT ?Convert_From@WideStringClass@@QAE_NPBD@Z
_TEXT	SEGMENT
_ps$ = -4						; size = 4
_str$ = 8						; size = 4
?Convert_From@WideStringClass@@QAE_NPBD@Z PROC		; WideStringClass::Convert_From, COMDAT
; _this$ = ecx

; 508  : {

	push	ecx

; 509  : 	if (!str)

	cmp	DWORD PTR _str$[esp], 0
	push	edi
	mov	edi, ecx
	jne	SHORT $LN2@Convert_Fr

; 510  : 	{
; 511  : 		return false;

	xor	al, al
	pop	edi

; 524  : }

	pop	ecx
	ret	4
$LN2@Convert_Fr:
	push	esi

; 512  : 	}
; 513  : 	mbstate_t ps;
; 514  : 	memset(&ps,0,sizeof(ps));
; 515  : 	int len = mbsrtowcs(0,&str,0,&ps);

	lea	eax, DWORD PTR _ps$[esp+12]
	push	eax
	push	0
	lea	ecx, DWORD PTR _str$[esp+16]
	push	ecx
	push	0
	mov	DWORD PTR _ps$[esp+28], 0
	call	_mbsrtowcs
	mov	esi, eax
	add	esp, 16					; 00000010H

; 516  : 	if (len > 0)

	test	esi, esi
	jle	SHORT $LN1@Convert_Fr

; 517  : 	{
; 518  : 		Uninitialised_Grow(len+1);

	lea	edx, DWORD PTR [esi+1]
	push	edx
	mov	ecx, edi
	call	?Uninitialised_Grow@WideStringClass@@QAEXH@Z ; WideStringClass::Uninitialised_Grow

; 519  : 		mbsrtowcs(m_Buffer,&str,len,&ps);

	mov	edx, DWORD PTR [edi]
	lea	eax, DWORD PTR _ps$[esp+12]
	push	eax
	push	esi
	lea	ecx, DWORD PTR _str$[esp+16]
	push	ecx
	push	edx
	call	_mbsrtowcs

; 520  : 		m_Buffer[len] = 0;

	mov	eax, DWORD PTR [edi]
	add	esp, 16					; 00000010H
	mov	WORD PTR [eax+esi*2], 0
	pop	esi

; 521  : 		return true;

	mov	al, 1
	pop	edi

; 524  : }

	pop	ecx
	ret	4
$LN1@Convert_Fr:
	pop	esi

; 522  : 	}
; 523  : 	return false;

	xor	al, al
	pop	edi

; 524  : }

	pop	ecx
	ret	4
?Convert_From@WideStringClass@@QAE_NPBD@Z ENDP		; WideStringClass::Convert_From
_TEXT	ENDS
PUBLIC	?deallocate@?$_DebugHeapAllocator@D@std@@QAEXPADI@Z ; std::_DebugHeapAllocator<char>::deallocate
; Function compile flags: /Ogtpy
; File c:\program files\microsoft visual studio 8\vc\include\xdebug
;	COMDAT ?deallocate@?$_DebugHeapAllocator@D@std@@QAEXPADI@Z
_TEXT	SEGMENT
__Ptr$ = 8						; size = 4
___formal$ = 12						; size = 4
?deallocate@?$_DebugHeapAllocator@D@std@@QAEXPADI@Z PROC ; std::_DebugHeapAllocator<char>::deallocate, COMDAT
; _this$ = ecx

; 102  : 		_DELETE_CRT_VEC(_Ptr);

	mov	eax, DWORD PTR __Ptr$[esp-4]
	test	eax, eax
	je	SHORT $LN3@deallocate
	push	eax
	call	_free
	pop	ecx
$LN3@deallocate:

; 103  : 		}

	ret	8
?deallocate@?$_DebugHeapAllocator@D@std@@QAEXPADI@Z ENDP ; std::_DebugHeapAllocator<char>::deallocate
_TEXT	ENDS
PUBLIC	??0?$_DebugHeapAllocator@D@std@@QAE@XZ		; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>
; Function compile flags: /Ogtpy
;	COMDAT ??0?$_DebugHeapAllocator@D@std@@QAE@XZ
_TEXT	SEGMENT
??0?$_DebugHeapAllocator@D@std@@QAE@XZ PROC		; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>, COMDAT
; _this$ = ecx
	mov	eax, ecx
	ret	0
??0?$_DebugHeapAllocator@D@std@@QAE@XZ ENDP		; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>
_TEXT	ENDS
PUBLIC	??0?$_DebugHeapAllocator@D@std@@QAE@ABV01@@Z	; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>
; Function compile flags: /Ogtpy
;	COMDAT ??0?$_DebugHeapAllocator@D@std@@QAE@ABV01@@Z
_TEXT	SEGMENT
___that$ = 8						; size = 4
??0?$_DebugHeapAllocator@D@std@@QAE@ABV01@@Z PROC	; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>, COMDAT
; _this$ = ecx
	mov	eax, ecx
	ret	4
??0?$_DebugHeapAllocator@D@std@@QAE@ABV01@@Z ENDP	; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>
_TEXT	ENDS
PUBLIC	??0StringClass@@QAE@H_N@Z			; StringClass::StringClass
; Function compile flags: /Ogtpy
; File d:\source code\stgm\engine_string.cpp
;	COMDAT ??0StringClass@@QAE@H_N@Z
_TEXT	SEGMENT
_initial_len$ = 8					; size = 4
_hint_temporary$ = 12					; size = 1
??0StringClass@@QAE@H_N@Z PROC				; StringClass::StringClass, COMDAT
; _this$ = ecx

; 115  : 	m_Buffer = *m_EmptyString;

	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString

; 116  : 	Get_String(initial_len,hint_temporary);

	mov	edx, DWORD PTR _hint_temporary$[esp-4]
	push	esi
	mov	esi, ecx
	mov	ecx, DWORD PTR [eax]
	mov	eax, DWORD PTR _initial_len$[esp]
	push	edx
	mov	DWORD PTR [esi], ecx
	push	eax
	mov	ecx, esi
	call	?Get_String@StringClass@@QAEXH_N@Z	; StringClass::Get_String

; 117  : 	m_Buffer[0] = *m_NullChar;

	mov	edx, DWORD PTR ?m_NullChar@StringClass@@2PADA ; StringClass::m_NullChar
	mov	ecx, DWORD PTR [esi]
	mov	al, BYTE PTR [edx]
	mov	BYTE PTR [ecx], al

; 118  : }

	mov	eax, esi
	pop	esi
	ret	8
??0StringClass@@QAE@H_N@Z ENDP				; StringClass::StringClass
_TEXT	ENDS
PUBLIC	??4StringClass@@QAEAAV0@PBD@Z			; StringClass::operator=
; Function compile flags: /Ogtpy
;	COMDAT ??4StringClass@@QAEAAV0@PBD@Z
_TEXT	SEGMENT
_string$ = 8						; size = 4
??4StringClass@@QAEAAV0@PBD@Z PROC			; StringClass::operator=, COMDAT
; _this$ = ecx

; 126  : {

	push	ebp

; 127  : 	if (string)

	mov	ebp, DWORD PTR _string$[esp]
	test	ebp, ebp
	push	esi
	mov	esi, ecx
	je	SHORT $LN14@operator

; 128  : 	{
; 129  : 		int x = strlen(string);

	mov	eax, ebp
	lea	edx, DWORD PTR [eax+1]
$LL13@operator:
	mov	cl, BYTE PTR [eax]
	add	eax, 1
	test	cl, cl
	jne	SHORT $LL13@operator
	push	ebx
	push	edi
	sub	eax, edx
	mov	edi, eax

; 130  : 		Uninitialised_Grow(x+1);

	lea	ebx, DWORD PTR [edi+1]
	push	ebx
	mov	ecx, esi
	call	?Uninitialised_Grow@StringClass@@QAEXH@Z ; StringClass::Uninitialised_Grow

; 131  : 		Store_Length(x);

	mov	eax, DWORD PTR [esi]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN4@operator
	mov	DWORD PTR [eax-4], edi
$LN4@operator:

; 132  : 		memcpy(m_Buffer,string,x+1);

	mov	edx, DWORD PTR [esi]
	push	ebx
	push	ebp
	push	edx
	call	_memcpy
	add	esp, 12					; 0000000cH
	pop	edi
	pop	ebx
$LN14@operator:

; 133  : 	}
; 134  : 	return *this;

	mov	eax, esi
	pop	esi
	pop	ebp

; 135  : }

	ret	4
??4StringClass@@QAEAAV0@PBD@Z ENDP			; StringClass::operator=
_TEXT	ENDS
PUBLIC	??4StringClass@@QAEAAV0@AAV0@@Z			; StringClass::operator=
; Function compile flags: /Ogtpy
;	COMDAT ??4StringClass@@QAEAAV0@AAV0@@Z
_TEXT	SEGMENT
_string$ = 8						; size = 4
??4StringClass@@QAEAAV0@AAV0@@Z PROC			; StringClass::operator=, COMDAT
; _this$ = ecx

; 139  : 	int x = string.Get_Length();

	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	push	ebx
	push	ebp
	mov	ebp, DWORD PTR _string$[esp+4]
	mov	edx, DWORD PTR [ebp]
	cmp	edx, DWORD PTR [eax]
	push	esi
	push	edi
	mov	ebx, ecx
	je	SHORT $LN4@operator@2
	cmp	DWORD PTR [edx-4], 0
	jne	SHORT $LN3@operator@2
	mov	eax, edx
	lea	esi, DWORD PTR [eax+1]
$LL26@operator@2:
	mov	cl, BYTE PTR [eax]
	add	eax, 1
	test	cl, cl
	jne	SHORT $LL26@operator@2
	sub	eax, esi
	mov	DWORD PTR [edx-4], eax
$LN3@operator@2:
	mov	ecx, DWORD PTR [ebp]
	mov	edi, DWORD PTR [ecx-4]
	jmp	SHORT $LN5@operator@2
$LN4@operator@2:
	xor	edi, edi
$LN5@operator@2:

; 140  : 	Uninitialised_Grow(x+1);

	lea	esi, DWORD PTR [edi+1]
	push	esi
	mov	ecx, ebx
	call	?Uninitialised_Grow@StringClass@@QAEXH@Z ; StringClass::Uninitialised_Grow

; 141  : 	Store_Length(x);

	mov	eax, DWORD PTR [ebx]
	mov	edx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [edx]
	je	SHORT $LN16@operator@2
	mov	DWORD PTR [eax-4], edi
$LN16@operator@2:

; 142  : 	memcpy(m_Buffer,string.m_Buffer,x+1);

	mov	eax, DWORD PTR [ebp]
	mov	ecx, DWORD PTR [ebx]
	push	esi
	push	eax
	push	ecx
	call	_memcpy
	add	esp, 12					; 0000000cH
	pop	edi
	pop	esi
	pop	ebp

; 143  : 	return *this;

	mov	eax, ebx
	pop	ebx

; 144  : }

	ret	4
??4StringClass@@QAEAAV0@AAV0@@Z ENDP			; StringClass::operator=
_TEXT	ENDS
PUBLIC	??YStringClass@@QAEAAV0@PBD@Z			; StringClass::operator+=
; Function compile flags: /Ogtpy
;	COMDAT ??YStringClass@@QAEAAV0@PBD@Z
_TEXT	SEGMENT
_string$ = 8						; size = 4
??YStringClass@@QAEAAV0@PBD@Z PROC			; StringClass::operator+=, COMDAT
; _this$ = ecx

; 148  : 	int len = Get_Length();

	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	push	ebx
	push	ebp
	mov	ebx, ecx
	mov	edx, DWORD PTR [ebx]
	cmp	edx, DWORD PTR [eax]
	push	esi
	push	edi
	je	SHORT $LN4@operator@3
	cmp	DWORD PTR [edx-4], 0
	jne	SHORT $LN3@operator@3
	mov	eax, edx
	lea	esi, DWORD PTR [eax+1]
	npad	4
$LL28@operator@3:
	mov	cl, BYTE PTR [eax]
	add	eax, 1
	test	cl, cl
	jne	SHORT $LL28@operator@3
	sub	eax, esi
	mov	DWORD PTR [edx-4], eax
$LN3@operator@3:
	mov	ecx, DWORD PTR [ebx]
	mov	ebp, DWORD PTR [ecx-4]
	jmp	SHORT $LN5@operator@3
$LN4@operator@3:
	xor	ebp, ebp
$LN5@operator@3:

; 149  : 	int len2 = strlen(string);

	mov	eax, DWORD PTR _string$[esp+12]
	lea	edx, DWORD PTR [eax+1]
	npad	2
$LL29@operator@3:
	mov	cl, BYTE PTR [eax]
	add	eax, 1
	test	cl, cl
	jne	SHORT $LL29@operator@3
	sub	eax, edx
	mov	esi, eax

; 150  : 	Resize(len+len2+1);

	lea	edi, DWORD PTR [esi+ebp]
	lea	edx, DWORD PTR [edi+1]
	push	edx
	mov	ecx, ebx
	call	?Resize@StringClass@@QAEXH@Z		; StringClass::Resize

; 151  : 	Store_Length(len+len2);

	mov	eax, DWORD PTR [ebx]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN16@operator@3
	mov	DWORD PTR [eax-4], edi
$LN16@operator@3:

; 152  : 	memcpy(Get_Buffer(len),string,len2);

	mov	edx, DWORD PTR _string$[esp+12]
	mov	eax, DWORD PTR [ebx]
	push	esi
	push	edx
	add	eax, ebp
	push	eax
	call	_memcpy
	add	esp, 12					; 0000000cH
	pop	edi
	pop	esi
	pop	ebp

; 153  : 	return *this;

	mov	eax, ebx
	pop	ebx

; 154  : }

	ret	4
??YStringClass@@QAEAAV0@PBD@Z ENDP			; StringClass::operator+=
_TEXT	ENDS
PUBLIC	??YStringClass@@QAEAAV0@AAV0@@Z			; StringClass::operator+=
; Function compile flags: /Ogtpy
;	COMDAT ??YStringClass@@QAEAAV0@AAV0@@Z
_TEXT	SEGMENT
_string$ = 8						; size = 4
??YStringClass@@QAEAAV0@AAV0@@Z PROC			; StringClass::operator+=, COMDAT
; _this$ = ecx

; 158  : 	int len = string.Get_Length();

	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	push	ebx
	push	edi
	mov	edi, DWORD PTR _string$[esp+4]
	mov	ebx, ecx
	mov	ecx, DWORD PTR [edi]
	cmp	ecx, DWORD PTR [eax]
	je	$LN48@operator@4
	cmp	DWORD PTR [ecx-4], 0
	push	esi
	jne	SHORT $LN4@operator@4
	mov	eax, ecx
	lea	esi, DWORD PTR [eax+1]
$LL45@operator@4:
	mov	dl, BYTE PTR [eax]
	add	eax, 1
	test	dl, dl
	jne	SHORT $LL45@operator@4
	sub	eax, esi
	mov	DWORD PTR [ecx-4], eax
$LN4@operator@4:
	mov	ecx, DWORD PTR [edi]
	push	ebp
	mov	ebp, DWORD PTR [ecx-4]

; 159  : 	if (len)

	test	ebp, ebp
	je	SHORT $LN47@operator@4

; 160  : 	{
; 161  : 		int len2 = Get_Length();

	mov	edx, DWORD PTR [ebx]
	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	edx, DWORD PTR [eax]
	je	SHORT $LN18@operator@4
	cmp	DWORD PTR [edx-4], 0
	jne	SHORT $LN17@operator@4
	mov	eax, edx
	lea	esi, DWORD PTR [eax+1]
$LL46@operator@4:
	mov	cl, BYTE PTR [eax]
	add	eax, 1
	test	cl, cl
	jne	SHORT $LL46@operator@4
	sub	eax, esi
	mov	DWORD PTR [edx-4], eax
$LN17@operator@4:
	mov	ecx, DWORD PTR [ebx]
	mov	edi, DWORD PTR [ecx-4]
	jmp	SHORT $LN19@operator@4
$LN18@operator@4:
	xor	edi, edi
$LN19@operator@4:

; 162  : 		Resize(len+len2+1);

	lea	esi, DWORD PTR [edi+ebp]
	lea	edx, DWORD PTR [esi+1]
	push	edx
	mov	ecx, ebx
	call	?Resize@StringClass@@QAEXH@Z		; StringClass::Resize

; 163  : 		Store_Length(len+len2);

	mov	eax, DWORD PTR [ebx]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN30@operator@4
	mov	DWORD PTR [eax-4], esi
$LN30@operator@4:

; 164  : 		memcpy(Get_Buffer(len2),string,len+1);

	mov	edx, DWORD PTR _string$[esp+12]
	mov	eax, DWORD PTR [edx]
	mov	ecx, DWORD PTR [ebx]
	add	ebp, 1
	push	ebp
	push	eax
	add	ecx, edi
	push	ecx
	call	_memcpy
	add	esp, 12					; 0000000cH
$LN47@operator@4:
	pop	ebp
	pop	esi
	pop	edi

; 165  : 	}
; 166  : 	return *this;

	mov	eax, ebx
	pop	ebx

; 167  : }

	ret	4
$LN48@operator@4:
	pop	edi

; 165  : 	}
; 166  : 	return *this;

	mov	eax, ebx
	pop	ebx

; 167  : }

	ret	4
??YStringClass@@QAEAAV0@AAV0@@Z ENDP			; StringClass::operator+=
_TEXT	ENDS
PUBLIC	?Format_Args@StringClass@@QAAHPADAAPAD@Z	; StringClass::Format_Args
EXTRN	_vsnprintf:PROC
; Function compile flags: /Ogtpy
;	COMDAT ?Format_Args@StringClass@@QAAHPADAAPAD@Z
_TEXT	SEGMENT
_temp_buffer$ = -512					; size = 512
_this$ = 8						; size = 4
_format$ = 12						; size = 4
_arg_list$ = 16						; size = 4
?Format_Args@StringClass@@QAAHPADAAPAD@Z PROC		; StringClass::Format_Args, COMDAT

; 191  : 	char temp_buffer[512];
; 192  : 	int x = vsnprintf(temp_buffer,512,format,arg_list);

	mov	eax, DWORD PTR _arg_list$[esp-4]
	mov	ecx, DWORD PTR [eax]
	mov	edx, DWORD PTR _format$[esp-4]
	sub	esp, 512				; 00000200H
	push	ebx
	push	ebp
	push	esi
	push	edi
	push	ecx
	push	edx
	lea	eax, DWORD PTR _temp_buffer$[esp+536]
	push	512					; 00000200H
	push	eax
	call	_vsnprintf
	mov	ebp, eax

; 193  : 	*this = (const char *)temp_buffer;

	lea	eax, DWORD PTR _temp_buffer$[esp+544]
	add	esp, 16					; 00000010H
	lea	edx, DWORD PTR [eax+1]
$LL15@Format_Arg:
	mov	cl, BYTE PTR [eax]
	add	eax, 1
	test	cl, cl
	jne	SHORT $LL15@Format_Arg
	mov	ebx, DWORD PTR _this$[esp+524]
	sub	eax, edx
	mov	esi, eax
	lea	edi, DWORD PTR [esi+1]
	push	edi
	mov	ecx, ebx
	call	?Uninitialised_Grow@StringClass@@QAEXH@Z ; StringClass::Uninitialised_Grow
	mov	eax, DWORD PTR [ebx]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN6@Format_Arg
	mov	DWORD PTR [eax-4], esi
$LN6@Format_Arg:
	mov	eax, DWORD PTR [ebx]
	push	edi
	lea	edx, DWORD PTR _temp_buffer$[esp+532]
	push	edx
	push	eax
	call	_memcpy
	add	esp, 12					; 0000000cH
	pop	edi
	pop	esi

; 194  : 	return x;

	mov	eax, ebp
	pop	ebp
	pop	ebx

; 195  : }

	add	esp, 512				; 00000200H
	ret	0
?Format_Args@StringClass@@QAAHPADAAPAD@Z ENDP		; StringClass::Format_Args
_TEXT	ENDS
PUBLIC	??0WideStringClass@@QAE@H_N@Z			; WideStringClass::WideStringClass
; Function compile flags: /Ogtpy
;	COMDAT ??0WideStringClass@@QAE@H_N@Z
_TEXT	SEGMENT
_initial_len$ = 8					; size = 4
_hint_temporary$ = 12					; size = 1
??0WideStringClass@@QAE@H_N@Z PROC			; WideStringClass::WideStringClass, COMDAT
; _this$ = ecx

; 334  : 	m_Buffer = *m_EmptyString;

	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString

; 335  : 	Get_String(initial_len,hint_temporary);

	mov	edx, DWORD PTR _hint_temporary$[esp-4]
	push	esi
	mov	esi, ecx
	mov	ecx, DWORD PTR [eax]
	mov	eax, DWORD PTR _initial_len$[esp]
	push	edx
	mov	DWORD PTR [esi], ecx
	push	eax
	mov	ecx, esi
	call	?Get_String@WideStringClass@@QAEXH_N@Z	; WideStringClass::Get_String

; 336  : 	m_Buffer[0] = *m_NullChar;

	mov	edx, DWORD PTR ?m_NullChar@WideStringClass@@2PA_WA ; WideStringClass::m_NullChar
	mov	ecx, DWORD PTR [esi]
	mov	ax, WORD PTR [edx]
	mov	WORD PTR [ecx], ax

; 337  : }

	mov	eax, esi
	pop	esi
	ret	8
??0WideStringClass@@QAE@H_N@Z ENDP			; WideStringClass::WideStringClass
_TEXT	ENDS
PUBLIC	??4WideStringClass@@QAEAAV0@PB_W@Z		; WideStringClass::operator=
; Function compile flags: /Ogtpy
;	COMDAT ??4WideStringClass@@QAEAAV0@PB_W@Z
_TEXT	SEGMENT
_string$ = 8						; size = 4
??4WideStringClass@@QAEAAV0@PB_W@Z PROC			; WideStringClass::operator=, COMDAT
; _this$ = ecx

; 345  : {

	push	ebx

; 346  : 	if (string)

	mov	ebx, DWORD PTR _string$[esp]
	test	ebx, ebx
	push	edi
	mov	edi, ecx
	je	SHORT $LN14@operator@5

; 347  : 	{
; 348  : 		int x = wcslen(string);

	mov	eax, ebx
	lea	edx, DWORD PTR [eax+2]
$LL13@operator@5:
	mov	cx, WORD PTR [eax]
	add	eax, 2
	test	cx, cx
	jne	SHORT $LL13@operator@5
	sub	eax, edx
	sar	eax, 1
	push	esi
	mov	esi, eax

; 349  : 		Uninitialised_Grow(x+1);

	lea	eax, DWORD PTR [esi+1]
	push	eax
	mov	ecx, edi
	call	?Uninitialised_Grow@WideStringClass@@QAEXH@Z ; WideStringClass::Uninitialised_Grow

; 350  : 		Store_Length(x);

	mov	eax, DWORD PTR [edi]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN4@operator@5
	mov	DWORD PTR [eax-4], esi
$LN4@operator@5:

; 351  : 		memcpy(m_Buffer,string,(x+1)*sizeof(wchar_t));

	mov	eax, DWORD PTR [edi]
	lea	edx, DWORD PTR [esi+esi+2]
	push	edx
	push	ebx
	push	eax
	call	_memcpy
	add	esp, 12					; 0000000cH
	pop	esi
$LN14@operator@5:

; 352  : 	}
; 353  : 	return *this;

	mov	eax, edi
	pop	edi
	pop	ebx

; 354  : }

	ret	4
??4WideStringClass@@QAEAAV0@PB_W@Z ENDP			; WideStringClass::operator=
_TEXT	ENDS
PUBLIC	??4WideStringClass@@QAEAAV0@AAV0@@Z		; WideStringClass::operator=
; Function compile flags: /Ogtpy
;	COMDAT ??4WideStringClass@@QAEAAV0@AAV0@@Z
_TEXT	SEGMENT
_string$ = 8						; size = 4
??4WideStringClass@@QAEAAV0@AAV0@@Z PROC		; WideStringClass::operator=, COMDAT
; _this$ = ecx

; 358  : 	int x = string.Get_Length();

	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	push	ebx
	mov	ebx, DWORD PTR _string$[esp]
	mov	edx, DWORD PTR [ebx]
	cmp	edx, DWORD PTR [eax]
	push	esi
	push	edi
	mov	edi, ecx
	je	SHORT $LN4@operator@6
	cmp	DWORD PTR [edx-4], 0
	jne	SHORT $LN3@operator@6
	mov	eax, edx
	lea	esi, DWORD PTR [eax+2]
	npad	1
$LL26@operator@6:
	mov	cx, WORD PTR [eax]
	add	eax, 2
	test	cx, cx
	jne	SHORT $LL26@operator@6
	sub	eax, esi
	sar	eax, 1
	mov	DWORD PTR [edx-4], eax
$LN3@operator@6:
	mov	ecx, DWORD PTR [ebx]
	mov	esi, DWORD PTR [ecx-4]
	jmp	SHORT $LN5@operator@6
$LN4@operator@6:
	xor	esi, esi
$LN5@operator@6:

; 359  : 	Uninitialised_Grow(x+1);

	lea	edx, DWORD PTR [esi+1]
	push	edx
	mov	ecx, edi
	call	?Uninitialised_Grow@WideStringClass@@QAEXH@Z ; WideStringClass::Uninitialised_Grow

; 360  : 	Store_Length(x);

	mov	eax, DWORD PTR [edi]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN16@operator@6
	mov	DWORD PTR [eax-4], esi
$LN16@operator@6:

; 361  : 	memcpy(m_Buffer,string.m_Buffer,(x+1)*sizeof(wchar_t));

	mov	eax, DWORD PTR [ebx]
	mov	ecx, DWORD PTR [edi]
	lea	edx, DWORD PTR [esi+esi+2]
	push	edx
	push	eax
	push	ecx
	call	_memcpy
	add	esp, 12					; 0000000cH

; 362  : 	return *this;

	mov	eax, edi
	pop	edi
	pop	esi
	pop	ebx

; 363  : }

	ret	4
??4WideStringClass@@QAEAAV0@AAV0@@Z ENDP		; WideStringClass::operator=
_TEXT	ENDS
PUBLIC	??YWideStringClass@@QAEAAV0@PB_W@Z		; WideStringClass::operator+=
; Function compile flags: /Ogtpy
;	COMDAT ??YWideStringClass@@QAEAAV0@PB_W@Z
_TEXT	SEGMENT
_string$ = 8						; size = 4
??YWideStringClass@@QAEAAV0@PB_W@Z PROC			; WideStringClass::operator+=, COMDAT
; _this$ = ecx

; 367  : 	int len = Get_Length();

	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	push	ebx
	push	ebp
	mov	ebx, ecx
	mov	edx, DWORD PTR [ebx]
	cmp	edx, DWORD PTR [eax]
	push	esi
	push	edi
	je	SHORT $LN4@operator@7
	cmp	DWORD PTR [edx-4], 0
	jne	SHORT $LN3@operator@7
	mov	eax, edx
	lea	esi, DWORD PTR [eax+2]
	npad	4
$LL28@operator@7:
	mov	cx, WORD PTR [eax]
	add	eax, 2
	test	cx, cx
	jne	SHORT $LL28@operator@7
	sub	eax, esi
	sar	eax, 1
	mov	DWORD PTR [edx-4], eax
$LN3@operator@7:
	mov	ecx, DWORD PTR [ebx]
	mov	ebp, DWORD PTR [ecx-4]
	jmp	SHORT $LN5@operator@7
$LN4@operator@7:
	xor	ebp, ebp
$LN5@operator@7:

; 368  : 	int len2 = wcslen(string);

	mov	eax, DWORD PTR _string$[esp+12]
	lea	edx, DWORD PTR [eax+2]
$LL29@operator@7:
	mov	cx, WORD PTR [eax]
	add	eax, 2
	test	cx, cx
	jne	SHORT $LL29@operator@7
	sub	eax, edx
	sar	eax, 1
	mov	esi, eax

; 369  : 	Resize(len+len2+1);

	lea	edi, DWORD PTR [esi+ebp]
	lea	edx, DWORD PTR [edi+1]
	push	edx
	mov	ecx, ebx
	call	?Resize@WideStringClass@@QAEXH@Z	; WideStringClass::Resize

; 370  : 	Store_Length(len+len2);

	mov	eax, DWORD PTR [ebx]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN16@operator@7
	mov	DWORD PTR [eax-4], edi
$LN16@operator@7:

; 371  : 	memcpy(Get_Buffer(len),string,len2*sizeof(wchar_t));

	mov	eax, DWORD PTR _string$[esp+12]
	mov	ecx, DWORD PTR [ebx]
	lea	edx, DWORD PTR [esi+esi]
	push	edx
	push	eax
	lea	edx, DWORD PTR [ecx+ebp*2]
	push	edx
	call	_memcpy
	add	esp, 12					; 0000000cH
	pop	edi
	pop	esi
	pop	ebp

; 372  : 	return *this;

	mov	eax, ebx
	pop	ebx

; 373  : }

	ret	4
??YWideStringClass@@QAEAAV0@PB_W@Z ENDP			; WideStringClass::operator+=
_TEXT	ENDS
PUBLIC	??YWideStringClass@@QAEAAV0@AAV0@@Z		; WideStringClass::operator+=
; Function compile flags: /Ogtpy
;	COMDAT ??YWideStringClass@@QAEAAV0@AAV0@@Z
_TEXT	SEGMENT
_string$ = 8						; size = 4
??YWideStringClass@@QAEAAV0@AAV0@@Z PROC		; WideStringClass::operator+=, COMDAT
; _this$ = ecx

; 377  : 	int len = string.Get_Length();

	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	push	ebx
	push	edi
	mov	edi, DWORD PTR _string$[esp+4]
	mov	edx, DWORD PTR [edi]
	cmp	edx, DWORD PTR [eax]
	mov	ebx, ecx
	je	$LN48@operator@8
	cmp	DWORD PTR [edx-4], 0
	push	esi
	jne	SHORT $LN4@operator@8
	mov	eax, edx
	lea	esi, DWORD PTR [eax+2]
$LL45@operator@8:
	mov	cx, WORD PTR [eax]
	add	eax, 2
	test	cx, cx
	jne	SHORT $LL45@operator@8
	sub	eax, esi
	sar	eax, 1
	mov	DWORD PTR [edx-4], eax
$LN4@operator@8:
	mov	ecx, DWORD PTR [edi]
	push	ebp
	mov	ebp, DWORD PTR [ecx-4]

; 378  : 	if (len)

	test	ebp, ebp
	je	SHORT $LN47@operator@8

; 379  : 	{
; 380  : 		int len2 = Get_Length();

	mov	edx, DWORD PTR [ebx]
	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	edx, DWORD PTR [eax]
	je	SHORT $LN18@operator@8
	cmp	DWORD PTR [edx-4], 0
	jne	SHORT $LN17@operator@8
	mov	eax, edx
	lea	esi, DWORD PTR [eax+2]
$LL46@operator@8:
	mov	cx, WORD PTR [eax]
	add	eax, 2
	test	cx, cx
	jne	SHORT $LL46@operator@8
	sub	eax, esi
	sar	eax, 1
	mov	DWORD PTR [edx-4], eax
$LN17@operator@8:
	mov	ecx, DWORD PTR [ebx]
	mov	edi, DWORD PTR [ecx-4]
	jmp	SHORT $LN19@operator@8
$LN18@operator@8:
	xor	edi, edi
$LN19@operator@8:

; 381  : 		Resize(len+len2+1);

	lea	esi, DWORD PTR [edi+ebp]
	lea	edx, DWORD PTR [esi+1]
	push	edx
	mov	ecx, ebx
	call	?Resize@WideStringClass@@QAEXH@Z	; WideStringClass::Resize

; 382  : 		Store_Length(len+len2);

	mov	eax, DWORD PTR [ebx]
	mov	ecx, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	eax, DWORD PTR [ecx]
	je	SHORT $LN30@operator@8
	mov	DWORD PTR [eax-4], esi
$LN30@operator@8:

; 383  : 		memcpy(Get_Buffer(len2),string,(len+1)*sizeof(wchar_t));

	mov	eax, DWORD PTR _string$[esp+12]
	mov	ecx, DWORD PTR [eax]
	lea	edx, DWORD PTR [ebp+ebp+2]
	push	edx
	mov	edx, DWORD PTR [ebx]
	push	ecx
	lea	eax, DWORD PTR [edx+edi*2]
	push	eax
	call	_memcpy
	add	esp, 12					; 0000000cH
$LN47@operator@8:
	pop	ebp
	pop	esi
	pop	edi

; 384  : 	}
; 385  : 	return *this;

	mov	eax, ebx
	pop	ebx

; 386  : }

	ret	4
$LN48@operator@8:
	pop	edi

; 384  : 	}
; 385  : 	return *this;

	mov	eax, ebx
	pop	ebx

; 386  : }

	ret	4
??YWideStringClass@@QAEAAV0@AAV0@@Z ENDP		; WideStringClass::operator+=
_TEXT	ENDS
PUBLIC	?Format_Args@WideStringClass@@QAAHPA_WAAPAD@Z	; WideStringClass::Format_Args
; Function compile flags: /Ogtpy
;	COMDAT ?Format_Args@WideStringClass@@QAAHPA_WAAPAD@Z
_TEXT	SEGMENT
_temp_buffer$ = -1024					; size = 1024
_this$ = 8						; size = 4
_format$ = 12						; size = 4
_arg_list$ = 16						; size = 4
?Format_Args@WideStringClass@@QAAHPA_WAAPAD@Z PROC	; WideStringClass::Format_Args, COMDAT

; 410  : 	wchar_t temp_buffer[512];
; 411  : 	int x = vswprintf(temp_buffer,512,format,arg_list);

	mov	eax, DWORD PTR _arg_list$[esp-4]
	mov	eax, DWORD PTR [eax]
	mov	ecx, DWORD PTR _format$[esp-4]
	sub	esp, 1024				; 00000400H
	push	esi
	push	eax
	push	0
	push	ecx
	lea	edx, DWORD PTR _temp_buffer$[esp+1040]
	push	512					; 00000200H
	push	edx
	call	__vswprintf_c_l

; 412  : 	*this = (const wchar_t *)temp_buffer;

	mov	ecx, DWORD PTR _this$[esp+1044]
	mov	esi, eax
	add	esp, 20					; 00000014H
	lea	eax, DWORD PTR _temp_buffer$[esp+1028]
	push	eax
	call	??4WideStringClass@@QAEAAV0@PB_W@Z	; WideStringClass::operator=

; 413  : 	return x;

	mov	eax, esi
	pop	esi

; 414  : }

	add	esp, 1024				; 00000400H
	ret	0
?Format_Args@WideStringClass@@QAAHPA_WAAPAD@Z ENDP	; WideStringClass::Format_Args
_TEXT	ENDS
PUBLIC	??0StringClass@@QAE@AAV0@_N@Z			; StringClass::StringClass
; Function compile flags: /Ogtpy
;	COMDAT ??0StringClass@@QAE@AAV0@_N@Z
_TEXT	SEGMENT
_string$ = 8						; size = 4
_hint_temporary$ = 12					; size = 1
??0StringClass@@QAE@AAV0@_N@Z PROC			; StringClass::StringClass, COMDAT
; _this$ = ecx

; 105  : 	m_Buffer = *m_EmptyString;

	mov	eax, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	push	ebx

; 106  : 	if (hint_temporary || string.Get_Length())

	mov	ebx, DWORD PTR _hint_temporary$[esp]
	test	bl, bl
	push	ebp
	mov	ebp, ecx
	mov	ecx, DWORD PTR [eax]
	push	esi
	push	edi
	mov	edi, DWORD PTR _string$[esp+12]
	mov	DWORD PTR [ebp], ecx
	jne	SHORT $LN35@StringClas
	mov	ecx, DWORD PTR [edi]
	mov	edx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	ecx, DWORD PTR [edx]
	je	SHORT $LN2@StringClas
	cmp	DWORD PTR [ecx-4], 0
	jne	SHORT $LN5@StringClas
	mov	eax, ecx
	lea	esi, DWORD PTR [eax+1]
$LL33@StringClas:
	mov	dl, BYTE PTR [eax]
	add	eax, 1
	test	dl, dl
	jne	SHORT $LL33@StringClas
	sub	eax, esi
	mov	DWORD PTR [ecx-4], eax
$LN5@StringClas:
	mov	eax, DWORD PTR [edi]
	cmp	DWORD PTR [eax-4], 0
	je	SHORT $LN2@StringClas
$LN35@StringClas:

; 107  : 	{
; 108  : 		Get_String(string.Get_Length()+1,hint_temporary);

	mov	edx, DWORD PTR [edi]
	mov	ecx, DWORD PTR ?m_EmptyString@StringClass@@2PAPADA ; StringClass::m_EmptyString
	cmp	edx, DWORD PTR [ecx]
	je	SHORT $LN19@StringClas
	cmp	DWORD PTR [edx-4], 0
	jne	SHORT $LN18@StringClas
	mov	eax, edx
	lea	esi, DWORD PTR [eax+1]
$LL34@StringClas:
	mov	cl, BYTE PTR [eax]
	add	eax, 1
	test	cl, cl
	jne	SHORT $LL34@StringClas
	sub	eax, esi
	mov	DWORD PTR [edx-4], eax
$LN18@StringClas:
	mov	edx, DWORD PTR [edi]
	mov	eax, DWORD PTR [edx-4]
	jmp	SHORT $LN20@StringClas
$LN19@StringClas:
	xor	eax, eax
$LN20@StringClas:
	push	ebx
	add	eax, 1
	push	eax
	mov	ecx, ebp
	call	?Get_String@StringClass@@QAEXH_N@Z	; StringClass::Get_String
$LN2@StringClas:

; 109  : 	}
; 110  : 	*this = string;

	push	edi
	mov	ecx, ebp
	call	??4StringClass@@QAEAAV0@AAV0@@Z		; StringClass::operator=
	pop	edi
	pop	esi

; 111  : }

	mov	eax, ebp
	pop	ebp
	pop	ebx
	ret	8
??0StringClass@@QAE@AAV0@_N@Z ENDP			; StringClass::StringClass
_TEXT	ENDS
PUBLIC	?Format@StringClass@@QAAHPADZZ			; StringClass::Format
; Function compile flags: /Ogtpy
;	COMDAT ?Format@StringClass@@QAAHPADZZ
_TEXT	SEGMENT
_arg_list$ = -4						; size = 4
_this$ = 8						; size = 4
_format$ = 12						; size = 4
?Format@StringClass@@QAAHPADZZ PROC			; StringClass::Format, COMDAT

; 183  : {

	push	ecx

; 184  : 	va_list arg_list;
; 185  : 	va_start(arg_list,format);
; 186  : 	return Format_Args(format,arg_list);

	mov	edx, DWORD PTR _format$[esp]
	lea	ecx, DWORD PTR _arg_list$[esp+4]
	lea	eax, DWORD PTR _format$[esp+4]
	push	ecx
	mov	DWORD PTR _arg_list$[esp+8], eax
	mov	eax, DWORD PTR _this$[esp+4]
	push	edx
	push	eax
	call	?Format_Args@StringClass@@QAAHPADAAPAD@Z ; StringClass::Format_Args

; 187  : }

	add	esp, 16					; 00000010H
	ret	0
?Format@StringClass@@QAAHPADZZ ENDP			; StringClass::Format
_TEXT	ENDS
PUBLIC	??0WideStringClass@@QAE@AAV0@_N@Z		; WideStringClass::WideStringClass
; Function compile flags: /Ogtpy
;	COMDAT ??0WideStringClass@@QAE@AAV0@_N@Z
_TEXT	SEGMENT
_string$ = 8						; size = 4
_hint_temporary$ = 12					; size = 1
??0WideStringClass@@QAE@AAV0@_N@Z PROC			; WideStringClass::WideStringClass, COMDAT
; _this$ = ecx

; 324  : 	m_Buffer = *m_EmptyString;

	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	push	ebx

; 325  : 	if (hint_temporary || string.Get_Length())

	mov	ebx, DWORD PTR _hint_temporary$[esp]
	test	bl, bl
	push	ebp
	mov	ebp, DWORD PTR _string$[esp+4]
	push	esi
	push	edi
	mov	edi, ecx
	mov	ecx, DWORD PTR [eax]
	mov	DWORD PTR [edi], ecx
	jne	SHORT $LN35@WideString
	mov	edx, DWORD PTR [ebp]
	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	edx, DWORD PTR [eax]
	je	SHORT $LN2@WideString
	cmp	DWORD PTR [edx-4], 0
	jne	SHORT $LN5@WideString
	mov	eax, edx
	lea	esi, DWORD PTR [eax+2]
$LL33@WideString:
	mov	cx, WORD PTR [eax]
	add	eax, 2
	test	cx, cx
	jne	SHORT $LL33@WideString
	sub	eax, esi
	sar	eax, 1
	mov	DWORD PTR [edx-4], eax
$LN5@WideString:
	mov	ecx, DWORD PTR [ebp]
	cmp	DWORD PTR [ecx-4], 0
	je	SHORT $LN2@WideString
$LN35@WideString:

; 326  : 	{
; 327  : 		Get_String(string.Get_Length()+1,hint_temporary);

	mov	edx, DWORD PTR [ebp]
	mov	eax, DWORD PTR ?m_EmptyString@WideStringClass@@2PAPA_WA ; WideStringClass::m_EmptyString
	cmp	edx, DWORD PTR [eax]
	je	SHORT $LN19@WideString
	cmp	DWORD PTR [edx-4], 0
	jne	SHORT $LN18@WideString
	mov	eax, edx
	lea	esi, DWORD PTR [eax+2]
$LL34@WideString:
	mov	cx, WORD PTR [eax]
	add	eax, 2
	test	cx, cx
	jne	SHORT $LL34@WideString
	sub	eax, esi
	sar	eax, 1
	mov	DWORD PTR [edx-4], eax
$LN18@WideString:
	mov	ecx, DWORD PTR [ebp]
	mov	eax, DWORD PTR [ecx-4]
	jmp	SHORT $LN20@WideString
$LN19@WideString:
	xor	eax, eax
$LN20@WideString:
	push	ebx
	add	eax, 1
	push	eax
	mov	ecx, edi
	call	?Get_String@WideStringClass@@QAEXH_N@Z	; WideStringClass::Get_String
$LN2@WideString:

; 328  : 	}
; 329  : 	*this = string;

	push	ebp
	mov	ecx, edi
	call	??4WideStringClass@@QAEAAV0@AAV0@@Z	; WideStringClass::operator=

; 330  : }

	mov	eax, edi
	pop	edi
	pop	esi
	pop	ebp
	pop	ebx
	ret	8
??0WideStringClass@@QAE@AAV0@_N@Z ENDP			; WideStringClass::WideStringClass
_TEXT	ENDS
PUBLIC	?Format@WideStringClass@@QAAHPA_WZZ		; WideStringClass::Format
; Function compile flags: /Ogtpy
;	COMDAT ?Format@WideStringClass@@QAAHPA_WZZ
_TEXT	SEGMENT
_temp_buffer$44707 = -1024				; size = 1024
_this$ = 8						; size = 4
_format$ = 12						; size = 4
?Format@WideStringClass@@QAAHPA_WZZ PROC		; WideStringClass::Format, COMDAT

; 403  : 	va_list arg_list;
; 404  : 	va_start(arg_list,format);
; 405  : 	return Format_Args(format,arg_list);

	mov	ecx, DWORD PTR _format$[esp-4]
	sub	esp, 1024				; 00000400H
	push	esi
	lea	eax, DWORD PTR _format$[esp+1028]
	push	eax
	push	0
	push	ecx
	lea	edx, DWORD PTR _temp_buffer$44707[esp+1040]
	push	512					; 00000200H
	push	edx
	call	__vswprintf_c_l
	mov	ecx, DWORD PTR _this$[esp+1044]
	mov	esi, eax
	add	esp, 20					; 00000014H
	lea	eax, DWORD PTR _temp_buffer$44707[esp+1028]
	push	eax
	call	??4WideStringClass@@QAEAAV0@PB_W@Z	; WideStringClass::operator=
	mov	eax, esi
	pop	esi

; 406  : }

	add	esp, 1024				; 00000400H
	ret	0
?Format@WideStringClass@@QAAHPA_WZZ ENDP		; WideStringClass::Format
_TEXT	ENDS
END
