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

	TITLE	d:\# METIN2\work in progress\source client\Client\EterBase\Timer.cpp
	.686P
	.XMM
	include listing.inc
	.model	flat

INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES

PUBLIC	??_C@_0P@GHFPNOJB@bad?5allocation?$AA@		; `string'
PUBLIC	?_Value@?$_Is_swap_move@U_Swap_move_tag@std@@@std@@2_NB ; std::_Is_swap_move<std::_Swap_move_tag>::_Value
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	?hexfloat@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::hexfloat
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
PUBLIC	?value@?$integral_constant@_N$0A@@tr1@std@@2_NB	; std::tr1::integral_constant<bool,0>::value
PUBLIC	?value@?$integral_constant@_N$00@tr1@std@@2_NB	; std::tr1::integral_constant<bool,1>::value
_BSS	SEGMENT
_gs_dwBaseTime DD 01H DUP (?)
_gs_dwServerTime DD 01H DUP (?)
_gs_dwClientTime DD 01H DUP (?)
_gs_dwFrameTime DD 01H DUP (?)
_BSS	ENDS
;	COMDAT ?value@?$integral_constant@_N$00@tr1@std@@2_NB
CONST	SEGMENT
?value@?$integral_constant@_N$00@tr1@std@@2_NB DB 01H	; std::tr1::integral_constant<bool,1>::value
CONST	ENDS
;	COMDAT ?value@?$integral_constant@_N$0A@@tr1@std@@2_NB
CONST	SEGMENT
?value@?$integral_constant@_N$0A@@tr1@std@@2_NB DB 00H	; std::tr1::integral_constant<bool,0>::value
CONST	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 ?hexfloat@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?hexfloat@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 03000H	; std::_Iosb<int>::hexfloat
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
;	COMDAT ?_Value@?$_Is_swap_move@U_Swap_move_tag@std@@@std@@2_NB
CONST	SEGMENT
?_Value@?$_Is_swap_move@U_Swap_move_tag@std@@@std@@2_NB DB 01H ; std::_Is_swap_move<std::_Swap_move_tag>::_Value
CONST	ENDS
PUBLIC	?ELTimer_Init@@YAHXZ				; ELTimer_Init
EXTRN	__imp__timeGetTime@0:PROC
; Function compile flags: /Ogtpy
; File d:\# metin2\work in progress\source client\client\eterbase\timer.cpp
;	COMDAT ?ELTimer_Init@@YAHXZ
_TEXT	SEGMENT
?ELTimer_Init@@YAHXZ PROC				; ELTimer_Init, COMDAT

; 14   : 	/*
; 15   : 	gs_liTickCountPerSec.QuadPart=0;
; 16   : 
; 17   : 	if (!QueryPerformanceFrequency(&gs_liTickCountPerSec))
; 18   : 		return 0;
; 19   : 
; 20   : 	LARGE_INTEGER liTickCount;
; 21   : 	QueryPerformanceCounter(&liTickCount);
; 22   : 	gs_dwBaseTime= (liTickCount.QuadPart*1000  / gs_liTickCountPerSec.QuadPart);	
; 23   : 	*/
; 24   : 	gs_dwBaseTime = timeGetTime();

  00000	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__timeGetTime@0
  00006	a3 00 00 00 00	 mov	 DWORD PTR _gs_dwBaseTime, eax

; 25   : 	return 1;

  0000b	b8 01 00 00 00	 mov	 eax, 1

; 26   : }

  00010	c3		 ret	 0
?ELTimer_Init@@YAHXZ ENDP				; ELTimer_Init
_TEXT	ENDS
PUBLIC	?ELTimer_GetMSec@@YAKXZ				; ELTimer_GetMSec
; Function compile flags: /Ogtpy
;	COMDAT ?ELTimer_GetMSec@@YAKXZ
_TEXT	SEGMENT
?ELTimer_GetMSec@@YAKXZ PROC				; ELTimer_GetMSec, COMDAT

; 30   : 	//assert(gs_dwBaseTime!=0 && "ELTimer_Init 를 먼저 실행하세요");
; 31   : 	//LARGE_INTEGER liTickCount;
; 32   : 	//QueryPerformanceCounter(&liTickCount);
; 33   : 	return timeGetTime() - gs_dwBaseTime; //(liTickCount.QuadPart*1000  / gs_liTickCountPerSec.QuadPart)-gs_dwBaseTime;		

  00000	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__timeGetTime@0
  00006	2b 05 00 00 00
	00		 sub	 eax, DWORD PTR _gs_dwBaseTime

; 34   : }

  0000c	c3		 ret	 0
?ELTimer_GetMSec@@YAKXZ ENDP				; ELTimer_GetMSec
_TEXT	ENDS
PUBLIC	?ELTimer_GetFrameMSec@@YAKXZ			; ELTimer_GetFrameMSec
; Function compile flags: /Ogtpy
;	COMDAT ?ELTimer_GetFrameMSec@@YAKXZ
_TEXT	SEGMENT
?ELTimer_GetFrameMSec@@YAKXZ PROC			; ELTimer_GetFrameMSec, COMDAT

; 55   : 	return gs_dwFrameTime;

  00000	a1 00 00 00 00	 mov	 eax, DWORD PTR _gs_dwFrameTime

; 56   : }

  00005	c3		 ret	 0
?ELTimer_GetFrameMSec@@YAKXZ ENDP			; ELTimer_GetFrameMSec
_TEXT	ENDS
PUBLIC	?ELTimer_GetServerFrameMSec@@YAKXZ		; ELTimer_GetServerFrameMSec
; Function compile flags: /Ogtpy
;	COMDAT ?ELTimer_GetServerFrameMSec@@YAKXZ
_TEXT	SEGMENT
?ELTimer_GetServerFrameMSec@@YAKXZ PROC			; ELTimer_GetServerFrameMSec, COMDAT

; 60   : 	return ELTimer_GetFrameMSec() - gs_dwClientTime + gs_dwServerTime;

  00000	e8 00 00 00 00	 call	 ?ELTimer_GetFrameMSec@@YAKXZ ; ELTimer_GetFrameMSec
  00005	8b 0d 00 00 00
	00		 mov	 ecx, DWORD PTR _gs_dwServerTime
  0000b	2b 0d 00 00 00
	00		 sub	 ecx, DWORD PTR _gs_dwClientTime
  00011	03 c1		 add	 eax, ecx

; 61   : }

  00013	c3		 ret	 0
?ELTimer_GetServerFrameMSec@@YAKXZ ENDP			; ELTimer_GetServerFrameMSec
_TEXT	ENDS
PUBLIC	?ELTimer_SetFrameMSec@@YAXXZ			; ELTimer_SetFrameMSec
; Function compile flags: /Ogtpy
;	COMDAT ?ELTimer_SetFrameMSec@@YAXXZ
_TEXT	SEGMENT
?ELTimer_SetFrameMSec@@YAXXZ PROC			; ELTimer_SetFrameMSec, COMDAT

; 65   : 	gs_dwFrameTime = ELTimer_GetMSec();

  00000	e8 00 00 00 00	 call	 ?ELTimer_GetMSec@@YAKXZ	; ELTimer_GetMSec
  00005	a3 00 00 00 00	 mov	 DWORD PTR _gs_dwFrameTime, eax

; 66   : }

  0000a	c3		 ret	 0
?ELTimer_SetFrameMSec@@YAXXZ ENDP			; ELTimer_SetFrameMSec
_TEXT	ENDS
PUBLIC	?SetBaseTime@CTimer@@QAEXXZ			; CTimer::SetBaseTime
; Function compile flags: /Ogtpy
;	COMDAT ?SetBaseTime@CTimer@@QAEXXZ
_TEXT	SEGMENT
?SetBaseTime@CTimer@@QAEXXZ PROC			; CTimer::SetBaseTime, COMDAT
; _this$ = ecx

; 92   : 	m_dwCurrentTime = 0;

  00000	c7 41 0c 00 00
	00 00		 mov	 DWORD PTR [ecx+12], 0

; 93   : }

  00007	c3		 ret	 0
?SetBaseTime@CTimer@@QAEXXZ ENDP			; CTimer::SetBaseTime
_TEXT	ENDS
PUBLIC	__real@408f400000000000
PUBLIC	__real@4f800000
PUBLIC	?Advance@CTimer@@QAEXXZ				; CTimer::Advance
EXTRN	__fltused:DWORD
;	COMDAT __real@408f400000000000
CONST	SEGMENT
__real@408f400000000000 DQ 0408f400000000000r	; 1000
CONST	ENDS
;	COMDAT __real@4f800000
CONST	SEGMENT
__real@4f800000 DD 04f800000r			; 4.29497e+009
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ?Advance@CTimer@@QAEXXZ
_TEXT	SEGMENT
tv206 = -4						; size = 4
?Advance@CTimer@@QAEXXZ PROC				; CTimer::Advance, COMDAT
; _this$ = ecx

; 96   : {

  00000	51		 push	 ecx
  00001	56		 push	 esi
  00002	8b f1		 mov	 esi, ecx

; 97   : 	if (!m_bUseRealTime)

  00004	80 7e 04 00	 cmp	 BYTE PTR [esi+4], 0
  00008	75 38		 jne	 SHORT $LN4@Advance

; 98   : 	{
; 99   : 		++m_index;

  0000a	ff 46 18	 inc	 DWORD PTR [esi+24]

; 100  : 
; 101  : 		if (m_index == 1)

  0000d	83 7e 18 01	 cmp	 DWORD PTR [esi+24], 1
  00011	75 07		 jne	 SHORT $LN3@Advance

; 102  : 			m_index = -1;

  00013	c7 46 18 ff ff
	ff ff		 mov	 DWORD PTR [esi+24], -1
$LN3@Advance:

; 103  : 
; 104  : 		m_dwCurrentTime += 16 + (m_index & 1);

  0001a	8b 46 18	 mov	 eax, DWORD PTR [esi+24]
  0001d	83 e0 01	 and	 eax, 1
  00020	83 c0 10	 add	 eax, 16			; 00000010H
  00023	01 46 0c	 add	 DWORD PTR [esi+12], eax

; 105  : 		m_fCurrentTime = m_dwCurrentTime / 1000.0f;

  00026	db 46 0c	 fild	 DWORD PTR [esi+12]
  00029	8b 4e 0c	 mov	 ecx, DWORD PTR [esi+12]
  0002c	85 c9		 test	 ecx, ecx
  0002e	7d 06		 jge	 SHORT $LN7@Advance
  00030	d8 05 00 00 00
	00		 fadd	 DWORD PTR __real@4f800000
$LN7@Advance:
  00036	dc 35 00 00 00
	00		 fdiv	 QWORD PTR __real@408f400000000000
  0003c	d9 5e 10	 fstp	 DWORD PTR [esi+16]
  0003f	5e		 pop	 esi

; 116  : 	}
; 117  : }

  00040	59		 pop	 ecx
  00041	c3		 ret	 0
$LN4@Advance:

; 106  : 	}
; 107  : 	else
; 108  : 	{
; 109  : 		DWORD currentTime = ELTimer_GetMSec();

  00042	e8 00 00 00 00	 call	 ?ELTimer_GetMSec@@YAKXZ	; ELTimer_GetMSec

; 110  : 
; 111  : 		if (m_dwCurrentTime == 0)

  00047	83 7e 0c 00	 cmp	 DWORD PTR [esi+12], 0
  0004b	75 03		 jne	 SHORT $LN1@Advance

; 112  : 			m_dwCurrentTime = currentTime;

  0004d	89 46 0c	 mov	 DWORD PTR [esi+12], eax
$LN1@Advance:

; 113  : 
; 114  : 		m_dwElapsedTime = currentTime - m_dwCurrentTime;

  00050	8b d0		 mov	 edx, eax
  00052	2b 56 0c	 sub	 edx, DWORD PTR [esi+12]

; 115  : 		m_dwCurrentTime = currentTime;

  00055	89 46 0c	 mov	 DWORD PTR [esi+12], eax
  00058	89 56 14	 mov	 DWORD PTR [esi+20], edx
  0005b	5e		 pop	 esi

; 116  : 	}
; 117  : }

  0005c	59		 pop	 ecx
  0005d	c3		 ret	 0
?Advance@CTimer@@QAEXXZ ENDP				; CTimer::Advance
_TEXT	ENDS
PUBLIC	?Adjust@CTimer@@QAEXH@Z				; CTimer::Adjust
; Function compile flags: /Ogtpy
;	COMDAT ?Adjust@CTimer@@QAEXH@Z
_TEXT	SEGMENT
_iTimeGap$ = 8						; size = 4
?Adjust@CTimer@@QAEXH@Z PROC				; CTimer::Adjust, COMDAT
; _this$ = ecx

; 121  : 	m_dwCurrentTime += iTimeGap;

  00000	8b 44 24 04	 mov	 eax, DWORD PTR _iTimeGap$[esp-4]
  00004	01 41 0c	 add	 DWORD PTR [ecx+12], eax

; 122  : }

  00007	c2 04 00	 ret	 4
?Adjust@CTimer@@QAEXH@Z ENDP				; CTimer::Adjust
_TEXT	ENDS
PUBLIC	?GetCurrentSecond@CTimer@@QAEMXZ		; CTimer::GetCurrentSecond
; Function compile flags: /Ogtpy
;	COMDAT ?GetCurrentSecond@CTimer@@QAEMXZ
_TEXT	SEGMENT
tv137 = -4						; size = 4
tv135 = -4						; size = 4
?GetCurrentSecond@CTimer@@QAEMXZ PROC			; CTimer::GetCurrentSecond, COMDAT
; _this$ = ecx

; 125  : {

  00000	51		 push	 ecx

; 126  : 	if (m_bUseRealTime)

  00001	80 79 04 00	 cmp	 BYTE PTR [ecx+4], 0
  00005	74 23		 je	 SHORT $LN1@GetCurrent

; 127  : 		return ELTimer_GetMSec() / 1000.0f;

  00007	e8 00 00 00 00	 call	 ?ELTimer_GetMSec@@YAKXZ	; ELTimer_GetMSec
  0000c	89 04 24	 mov	 DWORD PTR tv137[esp+4], eax
  0000f	db 04 24	 fild	 DWORD PTR tv137[esp+4]
  00012	85 c0		 test	 eax, eax
  00014	7d 06		 jge	 SHORT $LN4@GetCurrent
  00016	d8 05 00 00 00
	00		 fadd	 DWORD PTR __real@4f800000
$LN4@GetCurrent:
  0001c	dc 35 00 00 00
	00		 fdiv	 QWORD PTR __real@408f400000000000
  00022	d9 1c 24	 fstp	 DWORD PTR tv135[esp+4]
  00025	d9 04 24	 fld	 DWORD PTR tv135[esp+4]

; 130  : }

  00028	59		 pop	 ecx
  00029	c3		 ret	 0
$LN1@GetCurrent:

; 128  : 
; 129  : 	return m_fCurrentTime;

  0002a	d9 41 10	 fld	 DWORD PTR [ecx+16]

; 130  : }

  0002d	59		 pop	 ecx
  0002e	c3		 ret	 0
?GetCurrentSecond@CTimer@@QAEMXZ ENDP			; CTimer::GetCurrentSecond
_TEXT	ENDS
PUBLIC	?GetCurrentMillisecond@CTimer@@QAEKXZ		; CTimer::GetCurrentMillisecond
; Function compile flags: /Ogtpy
;	COMDAT ?GetCurrentMillisecond@CTimer@@QAEKXZ
_TEXT	SEGMENT
?GetCurrentMillisecond@CTimer@@QAEKXZ PROC		; CTimer::GetCurrentMillisecond, COMDAT
; _this$ = ecx

; 134  : 	if (m_bUseRealTime)

  00000	80 79 04 00	 cmp	 BYTE PTR [ecx+4], 0
  00004	74 05		 je	 SHORT $LN1@GetCurrent@2

; 135  : 		return ELTimer_GetMSec();

  00006	e9 00 00 00 00	 jmp	 ?ELTimer_GetMSec@@YAKXZ	; ELTimer_GetMSec
$LN1@GetCurrent@2:

; 136  : 
; 137  : 	return m_dwCurrentTime;

  0000b	8b 41 0c	 mov	 eax, DWORD PTR [ecx+12]

; 138  : }

  0000e	c3		 ret	 0
?GetCurrentMillisecond@CTimer@@QAEKXZ ENDP		; CTimer::GetCurrentMillisecond
_TEXT	ENDS
PUBLIC	?GetElapsedMilliecond@CTimer@@QAEKXZ		; CTimer::GetElapsedMilliecond
; Function compile flags: /Ogtpy
;	COMDAT ?GetElapsedMilliecond@CTimer@@QAEKXZ
_TEXT	SEGMENT
?GetElapsedMilliecond@CTimer@@QAEKXZ PROC		; CTimer::GetElapsedMilliecond, COMDAT
; _this$ = ecx

; 147  : 	if (!m_bUseRealTime)

  00000	80 79 04 00	 cmp	 BYTE PTR [ecx+4], 0
  00004	75 0a		 jne	 SHORT $LN1@GetElapsed

; 148  : 		return 16 + (m_index & 1);

  00006	8b 41 18	 mov	 eax, DWORD PTR [ecx+24]
  00009	83 e0 01	 and	 eax, 1
  0000c	83 c0 10	 add	 eax, 16			; 00000010H

; 151  : }

  0000f	c3		 ret	 0
$LN1@GetElapsed:

; 149  : 
; 150  : 	return m_dwElapsedTime;

  00010	8b 41 14	 mov	 eax, DWORD PTR [ecx+20]

; 151  : }

  00013	c3		 ret	 0
?GetElapsedMilliecond@CTimer@@QAEKXZ ENDP		; CTimer::GetElapsedMilliecond
_TEXT	ENDS
PUBLIC	?UseCustomTime@CTimer@@QAEXXZ			; CTimer::UseCustomTime
; Function compile flags: /Ogtpy
;	COMDAT ?UseCustomTime@CTimer@@QAEXXZ
_TEXT	SEGMENT
?UseCustomTime@CTimer@@QAEXXZ PROC			; CTimer::UseCustomTime, COMDAT
; _this$ = ecx

; 155  : 	m_bUseRealTime = false;

  00000	c6 41 04 00	 mov	 BYTE PTR [ecx+4], 0

; 156  : }

  00004	c3		 ret	 0
?UseCustomTime@CTimer@@QAEXXZ ENDP			; CTimer::UseCustomTime
_TEXT	ENDS
PUBLIC	?ms_singleton@?$CSingleton@VCTimer@@@@0PAVCTimer@@A ; CSingleton<CTimer>::ms_singleton
PUBLIC	??_7?$CSingleton@VCTimer@@@@6B@			; CSingleton<CTimer>::`vftable'
PUBLIC	??0?$CSingleton@VCTimer@@@@QAE@XZ		; CSingleton<CTimer>::CSingleton<CTimer>
PUBLIC	??_R4?$CSingleton@VCTimer@@@@6B@		; CSingleton<CTimer>::`RTTI Complete Object Locator'
PUBLIC	??_R0?AV?$CSingleton@VCTimer@@@@@8		; CSingleton<CTimer> `RTTI Type Descriptor'
PUBLIC	??_R3?$CSingleton@VCTimer@@@@8			; CSingleton<CTimer>::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2?$CSingleton@VCTimer@@@@8			; CSingleton<CTimer>::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@?$CSingleton@VCTimer@@@@8		; CSingleton<CTimer>::`RTTI Base Class Descriptor at (0,-1,0,64)'
EXTRN	??_7type_info@@6B@:QWORD			; type_info::`vftable'
EXTRN	??_E?$CSingleton@VCTimer@@@@UAEPAXI@Z:PROC	; CSingleton<CTimer>::`vector deleting destructor'
;	COMDAT ?ms_singleton@?$CSingleton@VCTimer@@@@0PAVCTimer@@A
; File d:\# metin2\work in progress\source client\client\eterbase\singleton.h
_BSS	SEGMENT
?ms_singleton@?$CSingleton@VCTimer@@@@0PAVCTimer@@A DD 01H DUP (?) ; CSingleton<CTimer>::ms_singleton
_BSS	ENDS
;	COMDAT ??_R1A@?0A@EA@?$CSingleton@VCTimer@@@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@?$CSingleton@VCTimer@@@@8 DD FLAT:??_R0?AV?$CSingleton@VCTimer@@@@@8 ; CSingleton<CTimer>::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	00H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3?$CSingleton@VCTimer@@@@8
rdata$r	ENDS
;	COMDAT ??_R2?$CSingleton@VCTimer@@@@8
rdata$r	SEGMENT
??_R2?$CSingleton@VCTimer@@@@8 DD FLAT:??_R1A@?0A@EA@?$CSingleton@VCTimer@@@@8 ; CSingleton<CTimer>::`RTTI Base Class Array'
rdata$r	ENDS
;	COMDAT ??_R3?$CSingleton@VCTimer@@@@8
rdata$r	SEGMENT
??_R3?$CSingleton@VCTimer@@@@8 DD 00H			; CSingleton<CTimer>::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	01H
	DD	FLAT:??_R2?$CSingleton@VCTimer@@@@8
rdata$r	ENDS
;	COMDAT ??_R0?AV?$CSingleton@VCTimer@@@@@8
_DATA	SEGMENT
??_R0?AV?$CSingleton@VCTimer@@@@@8 DD FLAT:??_7type_info@@6B@ ; CSingleton<CTimer> `RTTI Type Descriptor'
	DD	00H
	DB	'.?AV?$CSingleton@VCTimer@@@@', 00H
_DATA	ENDS
;	COMDAT ??_R4?$CSingleton@VCTimer@@@@6B@
rdata$r	SEGMENT
??_R4?$CSingleton@VCTimer@@@@6B@ DD 00H			; CSingleton<CTimer>::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AV?$CSingleton@VCTimer@@@@@8
	DD	FLAT:??_R3?$CSingleton@VCTimer@@@@8
rdata$r	ENDS
;	COMDAT ??_7?$CSingleton@VCTimer@@@@6B@
CONST	SEGMENT
??_7?$CSingleton@VCTimer@@@@6B@ DD FLAT:??_R4?$CSingleton@VCTimer@@@@6B@ ; CSingleton<CTimer>::`vftable'
	DD	FLAT:??_E?$CSingleton@VCTimer@@@@UAEPAXI@Z
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ??0?$CSingleton@VCTimer@@@@QAE@XZ
_TEXT	SEGMENT
??0?$CSingleton@VCTimer@@@@QAE@XZ PROC			; CSingleton<CTimer>::CSingleton<CTimer>, COMDAT
; _this$ = ecx

; 11   : 	CSingleton()

  00000	8b c1		 mov	 eax, ecx
  00002	c7 00 00 00 00
	00		 mov	 DWORD PTR [eax], OFFSET ??_7?$CSingleton@VCTimer@@@@6B@

; 12   : 	{ 
; 13   : 		assert(!ms_singleton);
; 14   : 		int offset = (int) (T*) 1 - (int) (CSingleton <T>*) (T*) 1; 
; 15   : 		ms_singleton = (T*) ((int) this + offset);

  00008	a3 00 00 00 00	 mov	 DWORD PTR ?ms_singleton@?$CSingleton@VCTimer@@@@0PAVCTimer@@A, eax ; CSingleton<CTimer>::ms_singleton

; 16   : 	} 

  0000d	c3		 ret	 0
??0?$CSingleton@VCTimer@@@@QAE@XZ ENDP			; CSingleton<CTimer>::CSingleton<CTimer>
_TEXT	ENDS
PUBLIC	??1?$CSingleton@VCTimer@@@@UAE@XZ		; CSingleton<CTimer>::~CSingleton<CTimer>
; Function compile flags: /Ogtpy
;	COMDAT ??1?$CSingleton@VCTimer@@@@UAE@XZ
_TEXT	SEGMENT
??1?$CSingleton@VCTimer@@@@UAE@XZ PROC			; CSingleton<CTimer>::~CSingleton<CTimer>, COMDAT
; _this$ = ecx

; 19   : 	{ 

  00000	c7 01 00 00 00
	00		 mov	 DWORD PTR [ecx], OFFSET ??_7?$CSingleton@VCTimer@@@@6B@

; 20   : 		assert(ms_singleton);
; 21   : 		ms_singleton = 0; 

  00006	c7 05 00 00 00
	00 00 00 00 00	 mov	 DWORD PTR ?ms_singleton@?$CSingleton@VCTimer@@@@0PAVCTimer@@A, 0 ; CSingleton<CTimer>::ms_singleton

; 22   : 	}

  00010	c3		 ret	 0
??1?$CSingleton@VCTimer@@@@UAE@XZ ENDP			; CSingleton<CTimer>::~CSingleton<CTimer>
_TEXT	ENDS
PUBLIC	?instance@?$CSingleton@VCTimer@@@@SAAAVCTimer@@XZ ; CSingleton<CTimer>::instance
; Function compile flags: /Ogtpy
;	COMDAT ?instance@?$CSingleton@VCTimer@@@@SAAAVCTimer@@XZ
_TEXT	SEGMENT
?instance@?$CSingleton@VCTimer@@@@SAAAVCTimer@@XZ PROC	; CSingleton<CTimer>::instance, COMDAT

; 37   : 		assert(ms_singleton);
; 38   : 		return (*ms_singleton);

  00000	a1 00 00 00 00	 mov	 eax, DWORD PTR ?ms_singleton@?$CSingleton@VCTimer@@@@0PAVCTimer@@A ; CSingleton<CTimer>::ms_singleton

; 39   : 	}

  00005	c3		 ret	 0
?instance@?$CSingleton@VCTimer@@@@SAAAVCTimer@@XZ ENDP	; CSingleton<CTimer>::instance
_TEXT	ENDS
EXTRN	??3@YAXPAX@Z:PROC				; operator delete
; Function compile flags: /Ogtpy
;	COMDAT ??_G?$CSingleton@VCTimer@@@@UAEPAXI@Z
_TEXT	SEGMENT
___flags$ = 8						; size = 4
??_G?$CSingleton@VCTimer@@@@UAEPAXI@Z PROC		; CSingleton<CTimer>::`scalar deleting destructor', COMDAT
; _this$ = ecx
  00000	f6 44 24 04 01	 test	 BYTE PTR ___flags$[esp-4], 1
  00005	56		 push	 esi
  00006	8b f1		 mov	 esi, ecx
  00008	c7 06 00 00 00
	00		 mov	 DWORD PTR [esi], OFFSET ??_7?$CSingleton@VCTimer@@@@6B@
  0000e	c7 05 00 00 00
	00 00 00 00 00	 mov	 DWORD PTR ?ms_singleton@?$CSingleton@VCTimer@@@@0PAVCTimer@@A, 0 ; CSingleton<CTimer>::ms_singleton
  00018	74 09		 je	 SHORT $LN6@scalar
  0001a	56		 push	 esi
  0001b	e8 00 00 00 00	 call	 ??3@YAXPAX@Z		; operator delete
  00020	83 c4 04	 add	 esp, 4
$LN6@scalar:
  00023	8b c6		 mov	 eax, esi
  00025	5e		 pop	 esi
  00026	c2 04 00	 ret	 4
??_G?$CSingleton@VCTimer@@@@UAEPAXI@Z ENDP		; CSingleton<CTimer>::`scalar deleting destructor'
_TEXT	ENDS
PUBLIC	?ELTimer_SetServerMSec@@YAXK@Z			; ELTimer_SetServerMSec
; Function compile flags: /Ogtpy
; File d:\# metin2\work in progress\source client\client\eterbase\timer.cpp
;	COMDAT ?ELTimer_SetServerMSec@@YAXK@Z
_TEXT	SEGMENT
_dwServerTime$ = 8					; size = 4
?ELTimer_SetServerMSec@@YAXK@Z PROC			; ELTimer_SetServerMSec, COMDAT

; 38   : 	NANOBEGIN

  00000	eb		 DB	 -21			; ffffffebH
  00001	03		 DB	 3
  00002	d6		 DB	 -42			; ffffffd6H
  00003	d7		 DB	 -41			; ffffffd7H
  00004	01		 DB	 1

; 39   : 	if (0 != dwServerTime) // nanomite를 위한 더미 if

  00005	8b 44 24 04	 mov	 eax, DWORD PTR _dwServerTime$[esp-4]
  00009	85 c0		 test	 eax, eax
  0000b	74 15		 je	 SHORT $LN1@ELTimer_Se

; 40   : 	{
; 41   : 		gs_dwServerTime = dwServerTime;
; 42   : 		gs_dwClientTime = CTimer::instance().GetCurrentMillisecond();

  0000d	8b 0d 00 00 00
	00		 mov	 ecx, DWORD PTR ?ms_singleton@?$CSingleton@VCTimer@@@@0PAVCTimer@@A ; CSingleton<CTimer>::ms_singleton
  00013	a3 00 00 00 00	 mov	 DWORD PTR _gs_dwServerTime, eax
  00018	e8 00 00 00 00	 call	 ?GetCurrentMillisecond@CTimer@@QAEKXZ ; CTimer::GetCurrentMillisecond
  0001d	a3 00 00 00 00	 mov	 DWORD PTR _gs_dwClientTime, eax
$LN1@ELTimer_Se:

; 43   : 	}
; 44   : 	NANOEND

  00022	eb		 DB	 -21			; ffffffebH
  00023	03		 DB	 3
  00024	d6		 DB	 -42			; ffffffd6H
  00025	d7		 DB	 -41			; ffffffd7H
  00026	00		 DB	 0

; 45   : }

  00027	c3		 ret	 0
?ELTimer_SetServerMSec@@YAXK@Z ENDP			; ELTimer_SetServerMSec
_TEXT	ENDS
PUBLIC	?ELTimer_GetServerMSec@@YAKXZ			; ELTimer_GetServerMSec
; Function compile flags: /Ogtpy
;	COMDAT ?ELTimer_GetServerMSec@@YAKXZ
_TEXT	SEGMENT
?ELTimer_GetServerMSec@@YAKXZ PROC			; ELTimer_GetServerMSec, COMDAT

; 49   : 	return CTimer::instance().GetCurrentMillisecond() - gs_dwClientTime + gs_dwServerTime;

  00000	8b 0d 00 00 00
	00		 mov	 ecx, DWORD PTR ?ms_singleton@?$CSingleton@VCTimer@@@@0PAVCTimer@@A ; CSingleton<CTimer>::ms_singleton
  00006	e8 00 00 00 00	 call	 ?GetCurrentMillisecond@CTimer@@QAEKXZ ; CTimer::GetCurrentMillisecond
  0000b	8b 0d 00 00 00
	00		 mov	 ecx, DWORD PTR _gs_dwServerTime
  00011	2b 0d 00 00 00
	00		 sub	 ecx, DWORD PTR _gs_dwClientTime
  00017	03 c1		 add	 eax, ecx

; 50   : 	//return ELTimer_GetMSec() - gs_dwClientTime + gs_dwServerTime;
; 51   : }

  00019	c3		 ret	 0
?ELTimer_GetServerMSec@@YAKXZ ENDP			; ELTimer_GetServerMSec
_TEXT	ENDS
PUBLIC	__real@00000000
PUBLIC	??_7CTimer@@6B@					; CTimer::`vftable'
PUBLIC	??0CTimer@@QAE@XZ				; CTimer::CTimer
PUBLIC	??_R4CTimer@@6B@				; CTimer::`RTTI Complete Object Locator'
PUBLIC	??_R0?AVCTimer@@@8				; CTimer `RTTI Type Descriptor'
PUBLIC	??_R3CTimer@@8					; CTimer::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2CTimer@@8					; CTimer::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@CTimer@@8				; CTimer::`RTTI Base Class Descriptor at (0,-1,0,64)'
EXTRN	??_ECTimer@@UAEPAXI@Z:PROC			; CTimer::`vector deleting destructor'
;	COMDAT ??_R1A@?0A@EA@CTimer@@8
; File d:\# metin2\work in progress\source client\client\eterbase\singleton.h
rdata$r	SEGMENT
??_R1A@?0A@EA@CTimer@@8 DD FLAT:??_R0?AVCTimer@@@8	; CTimer::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	01H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3CTimer@@8
rdata$r	ENDS
;	COMDAT ??_R2CTimer@@8
rdata$r	SEGMENT
??_R2CTimer@@8 DD FLAT:??_R1A@?0A@EA@CTimer@@8		; CTimer::`RTTI Base Class Array'
	DD	FLAT:??_R1A@?0A@EA@?$CSingleton@VCTimer@@@@8
rdata$r	ENDS
;	COMDAT ??_R3CTimer@@8
rdata$r	SEGMENT
??_R3CTimer@@8 DD 00H					; CTimer::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	02H
	DD	FLAT:??_R2CTimer@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVCTimer@@@8
_DATA	SEGMENT
??_R0?AVCTimer@@@8 DD FLAT:??_7type_info@@6B@		; CTimer `RTTI Type Descriptor'
	DD	00H
	DB	'.?AVCTimer@@', 00H
_DATA	ENDS
;	COMDAT ??_R4CTimer@@6B@
rdata$r	SEGMENT
??_R4CTimer@@6B@ DD 00H					; CTimer::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AVCTimer@@@8
	DD	FLAT:??_R3CTimer@@8
rdata$r	ENDS
;	COMDAT __real@00000000
CONST	SEGMENT
__real@00000000 DD 000000000r			; 0
CONST	ENDS
;	COMDAT ??_7CTimer@@6B@
CONST	SEGMENT
??_7CTimer@@6B@ DD FLAT:??_R4CTimer@@6B@		; CTimer::`vftable'
	DD	FLAT:??_ECTimer@@UAEPAXI@Z
; Function compile flags: /Ogtpy
; File d:\# metin2\work in progress\source client\client\eterbase\timer.cpp
CONST	ENDS
;	COMDAT ??0CTimer@@QAE@XZ
_TEXT	SEGMENT
??0CTimer@@QAE@XZ PROC					; CTimer::CTimer, COMDAT
; _this$ = ecx

; 69   : {

  00000	56		 push	 esi
  00001	8b f1		 mov	 esi, ecx
  00003	89 35 00 00 00
	00		 mov	 DWORD PTR ?ms_singleton@?$CSingleton@VCTimer@@@@0PAVCTimer@@A, esi ; CSingleton<CTimer>::ms_singleton
  00009	c7 06 00 00 00
	00		 mov	 DWORD PTR [esi], OFFSET ??_7CTimer@@6B@

; 70   : 	ELTimer_Init();

  0000f	e8 00 00 00 00	 call	 ?ELTimer_Init@@YAHXZ	; ELTimer_Init

; 71   : 
; 72   : 	NANOBEGIN

  00014	eb		 DB	 -21			; ffffffebH
  00015	03		 DB	 3
  00016	d6		 DB	 -42			; ffffffd6H
  00017	d7		 DB	 -41			; ffffffd7H
  00018	01		 DB	 1

; 73   : 	if (this) // nanomite를 위한 더미 if
; 74   : 	{
; 75   : 		m_dwCurrentTime = 0;
; 76   : 		m_bUseRealTime = true;
; 77   : 		m_index = 0;
; 78   : 	
; 79   : 		m_dwElapsedTime = 0;
; 80   : 
; 81   : 		m_fCurrentTime = 0.0f;

  00019	d9 ee		 fldz
  0001b	33 c0		 xor	 eax, eax
  0001d	d9 5e 10	 fstp	 DWORD PTR [esi+16]
  00020	89 46 0c	 mov	 DWORD PTR [esi+12], eax
  00023	c6 46 04 01	 mov	 BYTE PTR [esi+4], 1
  00027	89 46 18	 mov	 DWORD PTR [esi+24], eax
  0002a	89 46 14	 mov	 DWORD PTR [esi+20], eax

; 82   : 	}
; 83   : 	NANOEND

  0002d	eb		 DB	 -21			; ffffffebH
  0002e	03		 DB	 3
  0002f	d6		 DB	 -42			; ffffffd6H
  00030	d7		 DB	 -41			; ffffffd7H
  00031	00		 DB	 0

; 84   : }

  00032	8b c6		 mov	 eax, esi
  00034	5e		 pop	 esi
  00035	c3		 ret	 0
??0CTimer@@QAE@XZ ENDP					; CTimer::CTimer
_TEXT	ENDS
PUBLIC	??1CTimer@@UAE@XZ				; CTimer::~CTimer
; Function compile flags: /Ogtpy
;	COMDAT ??1CTimer@@UAE@XZ
_TEXT	SEGMENT
??1CTimer@@UAE@XZ PROC					; CTimer::~CTimer, COMDAT
; _this$ = ecx

; 88   : }

  00000	c7 01 00 00 00
	00		 mov	 DWORD PTR [ecx], OFFSET ??_7?$CSingleton@VCTimer@@@@6B@
  00006	c7 05 00 00 00
	00 00 00 00 00	 mov	 DWORD PTR ?ms_singleton@?$CSingleton@VCTimer@@@@0PAVCTimer@@A, 0 ; CSingleton<CTimer>::ms_singleton
  00010	c3		 ret	 0
??1CTimer@@UAE@XZ ENDP					; CTimer::~CTimer
_TEXT	ENDS
PUBLIC	?GetElapsedSecond@CTimer@@QAEMXZ		; CTimer::GetElapsedSecond
; Function compile flags: /Ogtpy
;	COMDAT ?GetElapsedSecond@CTimer@@QAEMXZ
_TEXT	SEGMENT
tv73 = -4						; size = 4
tv70 = -4						; size = 4
?GetElapsedSecond@CTimer@@QAEMXZ PROC			; CTimer::GetElapsedSecond, COMDAT
; _this$ = ecx

; 141  : {

  00000	51		 push	 ecx

; 142  : 	return GetElapsedMilliecond() / 1000.0f;

  00001	e8 00 00 00 00	 call	 ?GetElapsedMilliecond@CTimer@@QAEKXZ ; CTimer::GetElapsedMilliecond
  00006	89 04 24	 mov	 DWORD PTR tv73[esp+4], eax
  00009	db 04 24	 fild	 DWORD PTR tv73[esp+4]
  0000c	85 c0		 test	 eax, eax
  0000e	7d 06		 jge	 SHORT $LN3@GetElapsed@2
  00010	d8 05 00 00 00
	00		 fadd	 DWORD PTR __real@4f800000
$LN3@GetElapsed@2:
  00016	dc 35 00 00 00
	00		 fdiv	 QWORD PTR __real@408f400000000000
  0001c	d9 1c 24	 fstp	 DWORD PTR tv70[esp+4]
  0001f	d9 04 24	 fld	 DWORD PTR tv70[esp+4]

; 143  : }

  00022	59		 pop	 ecx
  00023	c3		 ret	 0
?GetElapsedSecond@CTimer@@QAEMXZ ENDP			; CTimer::GetElapsedSecond
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ??_GCTimer@@UAEPAXI@Z
_TEXT	SEGMENT
___flags$ = 8						; size = 4
??_GCTimer@@UAEPAXI@Z PROC				; CTimer::`scalar deleting destructor', COMDAT
; _this$ = ecx
  00000	56		 push	 esi
  00001	8b f1		 mov	 esi, ecx
  00003	e8 00 00 00 00	 call	 ??1CTimer@@UAE@XZ	; CTimer::~CTimer
  00008	f6 44 24 08 01	 test	 BYTE PTR ___flags$[esp], 1
  0000d	74 09		 je	 SHORT $LN4@scalar@2
  0000f	56		 push	 esi
  00010	e8 00 00 00 00	 call	 ??3@YAXPAX@Z		; operator delete
  00015	83 c4 04	 add	 esp, 4
$LN4@scalar@2:
  00018	8b c6		 mov	 eax, esi
  0001a	5e		 pop	 esi
  0001b	c2 04 00	 ret	 4
??_GCTimer@@UAEPAXI@Z ENDP				; CTimer::`scalar deleting destructor'
_TEXT	ENDS
END
