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

include listing.inc

INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES

CONST	SEGMENT
$SG321467 DB	'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123'
	DB	'456789+/', 00H
	ORG $+15
$SG321506 DB	'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123'
	DB	'456789+/', 00H
	ORG $+15
$SG321544 DB	'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123'
	DB	'456789+/', 00H
	ORG $+15
$SG321581 DB	'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123'
	DB	'456789+/', 00H
	ORG $+15
$SG321617 DB	'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123'
	DB	'456789+/', 00H
CONST	ENDS
PUBLIC	?__empty_global_delete@@YAXPEAX@Z		; __empty_global_delete
PUBLIC	?__empty_global_delete@@YAXPEAX_K@Z		; __empty_global_delete
PUBLIC	?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z ; __empty_global_delete
PUBLIC	?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z ; __empty_global_delete
PUBLIC	?AtlThrowImpl@ATL@@YAXJ@Z			; ATL::AtlThrowImpl
PUBLIC	?data@CStringData@ATL@@QEAAPEAXXZ		; ATL::CStringData::data
PUBLIC	?IsShared@CStringData@ATL@@QEBA_NXZ		; ATL::CStringData::IsShared
PUBLIC	?Release@CStringData@ATL@@QEAAXXZ		; ATL::CStringData::Release
PUBLIC	?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer
PUBLIC	?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer
PUBLIC	?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN
PUBLIC	?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException
PUBLIC	?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<wchar_t,0>::Attach
PUBLIC	?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z	; ATL::CSimpleStringT<wchar_t,0>::Fork
PUBLIC	?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
PUBLIC	?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite
PUBLIC	?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2
PUBLIC	?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::Reallocate
PUBLIC	?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::SetLength
PUBLIC	?GetSize@CByteArray@@QEBA_JXZ			; CByteArray::GetSize
PUBLIC	?RemoveAll@CByteArray@@QEAAXXZ			; CByteArray::RemoveAll
PUBLIC	?SetAt@CByteArray@@QEAAX_JE@Z			; CByteArray::SetAt
PUBLIC	?GetData@CByteArray@@QEBAPEBEXZ			; CByteArray::GetData
PUBLIC	??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ	; ATL::CSimpleStringT<char,0>::operator char const *
PUBLIC	?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::GetBuffer
PUBLIC	?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ	; ATL::CSimpleStringT<char,0>::GetLength
PUBLIC	?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer
PUBLIC	?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z ; ATL::CSimpleStringT<char,0>::StringLengthN
PUBLIC	?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException
PUBLIC	?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<char,0>::Attach
PUBLIC	?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z	; ATL::CSimpleStringT<char,0>::Fork
PUBLIC	?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
PUBLIC	?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite
PUBLIC	?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite2
PUBLIC	?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Reallocate
PUBLIC	?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z	; ATL::CSimpleStringT<char,0>::SetLength
PUBLIC	?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ ; CBase64Coding::m_InitializeDecoderTable
PUBLIC	??0CBase64Coding@@QEAA@XZ			; CBase64Coding::CBase64Coding
PUBLIC	??1CBase64Coding@@UEAA@XZ			; CBase64Coding::~CBase64Coding
PUBLIC	?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ; CBase64Coding::Decode
PUBLIC	?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z ; CBase64Coding::Decode
PUBLIC	?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ; CBase64Coding::Encode
PUBLIC	?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ; CBase64Coding::Encode
PUBLIC	?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ; CBase64Coding::Encode
PUBLIC	?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z ; CBase64Coding::EncodeA
PUBLIC	?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ; CBase64Coding::Encode2
PUBLIC	??_GCBase64Coding@@UEAAPEAXI@Z			; CBase64Coding::`scalar deleting destructor'
PUBLIC	??_7CBase64Coding@@6B@				; CBase64Coding::`vftable'
PUBLIC	??_R4CBase64Coding@@6B@				; CBase64Coding::`RTTI Complete Object Locator'
PUBLIC	??_R0?AVCBase64Coding@@@8			; CBase64Coding `RTTI Type Descriptor'
PUBLIC	??_R3CBase64Coding@@8				; CBase64Coding::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2CBase64Coding@@8				; CBase64Coding::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@CBase64Coding@@8			; CBase64Coding::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	__real@3fe8000000000000
EXTRN	??3@YAXPEAX_K@Z:PROC				; operator delete
EXTRN	_invalid_parameter_noinfo:PROC
EXTRN	_errno:PROC
EXTRN	memcpy:PROC
EXTRN	memset:PROC
EXTRN	wcsnlen:PROC
EXTRN	strnlen:PROC
EXTRN	?AfxThrowMemoryException@@YAXXZ:PROC		; AfxThrowMemoryException
EXTRN	?AfxThrowInvalidArgException@@YAXXZ:PROC	; AfxThrowInvalidArgException
EXTRN	?AfxThrowOleException@@YAXJ@Z:PROC		; AfxThrowOleException
EXTRN	?SetSize@CByteArray@@QEAAX_J0@Z:PROC		; CByteArray::SetSize
EXTRN	??_ECBase64Coding@@UEAAPEAXI@Z:PROC		; CBase64Coding::`vector deleting destructor'
EXTRN	__CxxFrameHandler4:PROC
EXTRN	__GSHandlerCheck:PROC
EXTRN	__security_check_cookie:PROC
EXTRN	??_7type_info@@6B@:BYTE				; type_info::`vftable'
EXTRN	__security_cookie:QWORD
EXTRN	_fltused:DWORD
;	COMDAT pdata
pdata	SEGMENT
$pdata$memcpy_s DD imagerel memcpy_s
	DD	imagerel memcpy_s+313
	DD	imagerel $unwind$memcpy_s
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?AtlThrowImpl@ATL@@YAXJ@Z DD imagerel $LN5
	DD	imagerel $LN5+39
	DD	imagerel $unwind$?AtlThrowImpl@ATL@@YAXJ@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?IsShared@CStringData@ATL@@QEBA_NXZ DD imagerel $LN5
	DD	imagerel $LN5+45
	DD	imagerel $unwind$?IsShared@CStringData@ATL@@QEBA_NXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Release@CStringData@ATL@@QEAAXXZ DD imagerel $LN4
	DD	imagerel $LN4+87
	DD	imagerel $unwind$?Release@CStringData@ATL@@QEAAXXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z DD imagerel $LN3
	DD	imagerel $LN3+32
	DD	imagerel $unwind$?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z DD imagerel $LN4
	DD	imagerel $LN4+81
	DD	imagerel $unwind$?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DD imagerel $LN4
	DD	imagerel $LN4+47
	DD	imagerel $unwind$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ DD imagerel $LN3
	DD	imagerel $LN3+19
	DD	imagerel $unwind$?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD imagerel $LN3
	DD	imagerel $LN3+37
	DD	imagerel $unwind$?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN6
	DD	imagerel $LN6+267
	DD	imagerel $unwind$?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z DD imagerel $LN5
	DD	imagerel $LN5+125
	DD	imagerel $unwind$?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN10
	DD	imagerel $LN10+196
	DD	imagerel $unwind$?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN6
	DD	imagerel $LN6+149
	DD	imagerel $unwind$?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN5
	DD	imagerel $LN5+90
	DD	imagerel $unwind$?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?RemoveAll@CByteArray@@QEAAXXZ DD imagerel $LN3
	DD	imagerel $LN3+33
	DD	imagerel $unwind$?RemoveAll@CByteArray@@QEAAXXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?SetAt@CByteArray@@QEAAX_JE@Z DD imagerel $LN5
	DD	imagerel $LN5+75
	DD	imagerel $unwind$?SetAt@CByteArray@@QEAAX_JE@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z DD imagerel $LN3
	DD	imagerel $LN3+32
	DD	imagerel $unwind$?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ DD imagerel $LN3
	DD	imagerel $LN3+27
	DD	imagerel $unwind$?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z DD imagerel $LN4
	DD	imagerel $LN4+81
	DD	imagerel $unwind$?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DD imagerel $LN4
	DD	imagerel $LN4+47
	DD	imagerel $unwind$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ DD imagerel $LN3
	DD	imagerel $LN3+19
	DD	imagerel $unwind$?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD imagerel $LN3
	DD	imagerel $LN3+37
	DD	imagerel $unwind$?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN6
	DD	imagerel $LN6+261
	DD	imagerel $unwind$?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z DD imagerel $LN5
	DD	imagerel $LN5+125
	DD	imagerel $unwind$?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN10
	DD	imagerel $LN10+196
	DD	imagerel $unwind$?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN6
	DD	imagerel $LN6+149
	DD	imagerel $unwind$?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN5
	DD	imagerel $LN5+88
	DD	imagerel $unwind$?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ DD imagerel $LN3
	DD	imagerel $LN3+1334
	DD	imagerel $unwind$?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD imagerel $LN23
	DD	imagerel $LN23+1058
	DD	imagerel $unwind$?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z DD imagerel $LN23
	DD	imagerel $LN23+1058
	DD	imagerel $unwind$?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD imagerel $LN9
	DD	imagerel $LN9+1017
	DD	imagerel $unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD imagerel $LN10
	DD	imagerel $LN10+1032
	DD	imagerel $unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD imagerel $LN9
	DD	imagerel $LN9+951
	DD	imagerel $unwind$?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z DD imagerel $LN9
	DD	imagerel $LN9+919
	DD	imagerel $unwind$?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD imagerel $LN9
	DD	imagerel $LN9+943
	DD	imagerel $unwind$?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$??_GCBase64Coding@@UEAAPEAXI@Z DD imagerel $LN4
	DD	imagerel $LN4+59
	DD	imagerel $unwind$??_GCBase64Coding@@UEAAPEAXI@Z
pdata	ENDS
;	COMDAT pdata
pdata	SEGMENT
$pdata$?__get_character@@YAEPEBE0AEAHH@Z DD imagerel ?__get_character@@YAEPEBE0AEAHH@Z
	DD	imagerel ?__get_character@@YAEPEBE0AEAHH@Z+119
	DD	imagerel $unwind$?__get_character@@YAEPEBE0AEAHH@Z
pdata	ENDS
;	COMDAT __real@3fe8000000000000
CONST	SEGMENT
__real@3fe8000000000000 DQ 03fe8000000000000r	; 0.75
CONST	ENDS
;	COMDAT ??_R1A@?0A@EA@CBase64Coding@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@CBase64Coding@@8 DD imagerel ??_R0?AVCBase64Coding@@@8 ; CBase64Coding::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	00H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	imagerel ??_R3CBase64Coding@@8
rdata$r	ENDS
;	COMDAT ??_R2CBase64Coding@@8
rdata$r	SEGMENT
??_R2CBase64Coding@@8 DD imagerel ??_R1A@?0A@EA@CBase64Coding@@8 ; CBase64Coding::`RTTI Base Class Array'
	ORG $+3
rdata$r	ENDS
;	COMDAT ??_R3CBase64Coding@@8
rdata$r	SEGMENT
??_R3CBase64Coding@@8 DD 00H				; CBase64Coding::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	01H
	DD	imagerel ??_R2CBase64Coding@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVCBase64Coding@@@8
data$rs	SEGMENT
??_R0?AVCBase64Coding@@@8 DQ FLAT:??_7type_info@@6B@	; CBase64Coding `RTTI Type Descriptor'
	DQ	0000000000000000H
	DB	'.?AVCBase64Coding@@', 00H
data$rs	ENDS
;	COMDAT ??_R4CBase64Coding@@6B@
rdata$r	SEGMENT
??_R4CBase64Coding@@6B@ DD 01H				; CBase64Coding::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	imagerel ??_R0?AVCBase64Coding@@@8
	DD	imagerel ??_R3CBase64Coding@@8
	DD	imagerel ??_R4CBase64Coding@@6B@
rdata$r	ENDS
;	COMDAT ??_7CBase64Coding@@6B@
CONST	SEGMENT
??_7CBase64Coding@@6B@ DQ FLAT:??_R4CBase64Coding@@6B@	; CBase64Coding::`vftable'
	DQ	FLAT:?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ
	DQ	FLAT:??_ECBase64Coding@@UEAAPEAXI@Z
	DQ	FLAT:?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z
	DQ	FLAT:?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
	DQ	FLAT:?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
	DQ	FLAT:?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
	DQ	FLAT:?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
	DQ	FLAT:?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z
	DQ	FLAT:?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
CONST	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?__get_character@@YAEPEBE0AEAHH@Z DD 011801H
	DD	02218H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$??_GCBase64Coding@@UEAAPEAXI@Z DD 010d01H
	DD	0420dH
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DW	022H
	DW	0395H
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 042a19H
	DD	0170118H
	DD	060107011H
	DD	imagerel __GSHandlerCheck
	DD	0a0H
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DW	027H
	DW	037dH
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z DD 042f19H
	DD	017011dH
	DD	060157016H
	DD	imagerel __GSHandlerCheck
	DD	0a0H
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DW	027H
	DW	039dH
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 042f19H
	DD	017011dH
	DD	060157016H
	DD	imagerel __GSHandlerCheck
	DD	0a0H
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DW	022H
	DW	03eeH
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 042a19H
	DD	0170118H
	DD	060107011H
	DD	imagerel __GSHandlerCheck
	DD	0a0H
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DW	022H
	DW	03dfH
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD 042a19H
	DD	0150118H
	DD	060107011H
	DD	imagerel __GSHandlerCheck
	DD	090H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z DD 011301H
	DD	0a213H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD 011301H
	DD	0a213H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ DD 010901H
	DD	04209H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 010d01H
	DD	0420dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 010d01H
	DD	0820dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 010d01H
	DD	0620dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z DD 010d01H
	DD	0620dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 010d01H
	DD	0c20dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD 010e01H
	DD	0420eH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ DD 010401H
	DD	04204H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$ip2state$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DB 02H
	DB	00H
	DB	00H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$cppxdata$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DB 040H
	DD	imagerel $ip2state$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DD 010e19H
	DD	0420eH
	DD	imagerel __CxxFrameHandler4
	DD	imagerel $cppxdata$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z DD 010d01H
	DD	0620dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ DD 010901H
	DD	04209H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z DD 010d01H
	DD	0420dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?SetAt@CByteArray@@QEAAX_JE@Z DD 011301H
	DD	04213H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?RemoveAll@CByteArray@@QEAAXXZ DD 010901H
	DD	04209H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 010d01H
	DD	0420dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 010d01H
	DD	0820dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 010d01H
	DD	0620dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z DD 010d01H
	DD	0620dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 010d01H
	DD	0c20dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD 010e01H
	DD	0420eH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ DD 010401H
	DD	04204H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$ip2state$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DB 02H
	DB	00H
	DB	00H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$cppxdata$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DB 040H
	DD	imagerel $ip2state$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DD 010e19H
	DD	0420eH
	DD	imagerel __CxxFrameHandler4
	DD	imagerel $cppxdata$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z DD 010d01H
	DD	0620dH
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z DD 010d01H
	DD	0420dH
xdata	ENDS
;	COMDAT voltbl
voltbl	SEGMENT
_volmd	DB	017H
voltbl	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?Release@CStringData@ATL@@QEAAXXZ DD 010901H
	DD	06209H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?IsShared@CStringData@ATL@@QEBA_NXZ DD 010901H
	DD	02209H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$?AtlThrowImpl@ATL@@YAXJ@Z DD 010801H
	DD	04208H
xdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$memcpy_s DD 011801H
	DD	08218H
xdata	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?__get_character@@YAEPEBE0AEAHH@Z
_TEXT	SEGMENT
return_value$ = 0
buffer$ = 32
decoder_table$ = 40
index$ = 48
size_of_buffer$ = 56
?__get_character@@YAEPEBE0AEAHH@Z PROC			; __get_character, COMDAT

; 41   : {

  00000	44 89 4c 24 20	 mov	 DWORD PTR [rsp+32], r9d
  00005	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  0000a	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000f	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00014	48 83 ec 18	 sub	 rsp, 24

; 42   :    BYTE return_value = 0;

  00018	c6 04 24 00	 mov	 BYTE PTR return_value$[rsp], 0
$LN4@get_charac:

; 43   : 
; 44   :    do
; 45   :    {
; 46   :       if ( index >= size_of_buffer )

  0001c	48 8b 44 24 30	 mov	 rax, QWORD PTR index$[rsp]
  00021	8b 4c 24 38	 mov	 ecx, DWORD PTR size_of_buffer$[rsp]
  00025	39 08		 cmp	 DWORD PTR [rax], ecx
  00027	7c 04		 jl	 SHORT $LN5@get_charac

; 47   :       {
; 48   :          return( BASE64_END_OF_BUFFER );

  00029	b0 fd		 mov	 al, 253			; 000000fdH
  0002b	eb 45		 jmp	 SHORT $LN1@get_charac
$LN5@get_charac:

; 49   :       }
; 50   : 
; 51   :       return_value = buffer[ index ];

  0002d	48 8b 44 24 30	 mov	 rax, QWORD PTR index$[rsp]
  00032	48 63 00	 movsxd	 rax, DWORD PTR [rax]
  00035	48 8b 4c 24 20	 mov	 rcx, QWORD PTR buffer$[rsp]
  0003a	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  0003e	88 04 24	 mov	 BYTE PTR return_value$[rsp], al

; 52   :       index++;

  00041	48 8b 44 24 30	 mov	 rax, QWORD PTR index$[rsp]
  00046	8b 00		 mov	 eax, DWORD PTR [rax]
  00048	ff c0		 inc	 eax
  0004a	48 8b 4c 24 30	 mov	 rcx, QWORD PTR index$[rsp]
  0004f	89 01		 mov	 DWORD PTR [rcx], eax

; 53   :    }
; 54   :    while( return_value != END_OF_BASE64_ENCODED_DATA &&

  00051	0f b6 04 24	 movzx	 eax, BYTE PTR return_value$[rsp]
  00055	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00058	74 14		 je	 SHORT $LN6@get_charac
  0005a	0f b6 04 24	 movzx	 eax, BYTE PTR return_value$[rsp]
  0005e	48 8b 4c 24 28	 mov	 rcx, QWORD PTR decoder_table$[rsp]
  00063	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  00067	3d fe 00 00 00	 cmp	 eax, 254		; 000000feH
  0006c	74 ae		 je	 SHORT $LN4@get_charac
$LN6@get_charac:

; 55   :           decoder_table[ return_value ] == BASE64_IGNORABLE_CHARACTER );
; 56   : 
; 57   :    return( return_value );

  0006e	0f b6 04 24	 movzx	 eax, BYTE PTR return_value$[rsp]
$LN1@get_charac:

; 58   : }

  00072	48 83 c4 18	 add	 rsp, 24
  00076	c3		 ret	 0
?__get_character@@YAEPEBE0AEAHH@Z ENDP			; __get_character
_TEXT	ENDS
; Function compile flags: /Odtp
;	COMDAT ??_GCBase64Coding@@UEAAPEAXI@Z
_TEXT	SEGMENT
this$ = 48
__flags$ = 56
??_GCBase64Coding@@UEAAPEAXI@Z PROC			; CBase64Coding::`scalar deleting destructor', COMDAT
$LN4:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 28	 sub	 rsp, 40			; 00000028H
  0000d	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00012	e8 00 00 00 00	 call	 ??1CBase64Coding@@UEAA@XZ ; CBase64Coding::~CBase64Coding
  00017	8b 44 24 38	 mov	 eax, DWORD PTR __flags$[rsp]
  0001b	83 e0 01	 and	 eax, 1
  0001e	85 c0		 test	 eax, eax
  00020	74 0f		 je	 SHORT $LN2@scalar
  00022	ba 08 01 00 00	 mov	 edx, 264		; 00000108H
  00027	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0002c	e8 00 00 00 00	 call	 ??3@YAXPEAX_K@Z		; operator delete
$LN2@scalar:
  00031	48 8b 44 24 30	 mov	 rax, QWORD PTR this$[rsp]
  00036	48 83 c4 28	 add	 rsp, 40			; 00000028H
  0003a	c3		 ret	 0
??_GCBase64Coding@@UEAAPEAXI@Z ENDP			; CBase64Coding::`scalar deleting destructor'
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
_TEXT	SEGMENT
byte_to_add$ = 32
number_of_bytes_encoded$ = 36
byte_2$ = 40
byte_3$ = 41
byte_1$ = 42
loop_index$ = 44
destination$ = 48
number_of_bytes_to_encode$ = 56
input_buffer$ = 64
alphabet$ = 80
__$ArrayPad$ = 160
this$ = 208
source$ = 216
destination_string$ = 224
?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::Encode2, COMDAT

; 980  : {

$LN9:
  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	56		 push	 rsi
  00010	57		 push	 rdi
  00011	48 81 ec b8 00
	00 00		 sub	 rsp, 184		; 000000b8H
  00018	48 8b 05 00 00
	00 00		 mov	 rax, QWORD PTR __security_cookie
  0001f	48 33 c4	 xor	 rax, rsp
  00022	48 89 84 24 a0
	00 00 00	 mov	 QWORD PTR __$ArrayPad$[rsp], rax

; 981  : 
; 982  :    const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  0002a	48 8d 44 24 50	 lea	 rax, QWORD PTR alphabet$[rsp]
  0002f	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:$SG321617
  00036	48 8b f8	 mov	 rdi, rax
  00039	48 8b f1	 mov	 rsi, rcx
  0003c	b9 41 00 00 00	 mov	 ecx, 65			; 00000041H
  00041	f3 a4		 rep movsb

; 983  : 
; 984  :    int loop_index                = 0;

  00043	c7 44 24 2c 00
	00 00 00	 mov	 DWORD PTR loop_index$[rsp], 0

; 985  :    int number_of_bytes_to_encode = (int)source.GetSize();

  0004b	48 8b 8c 24 d8
	00 00 00	 mov	 rcx, QWORD PTR source$[rsp]
  00053	e8 00 00 00 00	 call	 ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize
  00058	89 44 24 38	 mov	 DWORD PTR number_of_bytes_to_encode$[rsp], eax

; 986  : 
; 987  :    BYTE byte_to_add = 0;

  0005c	c6 44 24 20 00	 mov	 BYTE PTR byte_to_add$[rsp], 0

; 988  :    BYTE byte_1      = 0;

  00061	c6 44 24 2a 00	 mov	 BYTE PTR byte_1$[rsp], 0

; 989  :    BYTE byte_2      = 0;

  00066	c6 44 24 28 00	 mov	 BYTE PTR byte_2$[rsp], 0

; 990  :    BYTE byte_3      = 0;

  0006b	c6 44 24 29 00	 mov	 BYTE PTR byte_3$[rsp], 0

; 991  : 
; 992  :    const BYTE * input_buffer = source.GetData();

  00070	48 8b 8c 24 d8
	00 00 00	 mov	 rcx, QWORD PTR source$[rsp]
  00078	e8 00 00 00 00	 call	 ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData
  0007d	48 89 44 24 40	 mov	 QWORD PTR input_buffer$[rsp], rax

; 993  : 
; 994  :    DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1;

  00082	f2 0f 2a 44 24
	38		 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rsp]
  00088	f2 0f 5e 05 00
	00 00 00	 divsd	 xmm0, QWORD PTR __real@3fe8000000000000
  00090	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  00095	ff c0		 inc	 eax
  00097	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 995  : 
; 996  :    // Now add in the CR/LF pairs, each line is truncated at 72 characters
; 997  : 
; 998  :    // 2000-05-12
; 999  :    // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here.
; 1000 :    // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded.
; 1001 : 
; 1002 :    number_of_bytes_encoded+=2;

  0009b	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0009f	83 c0 02	 add	 eax, 2
  000a2	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 1003 : //   number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 );
; 1004 : 
; 1005 :    LPTSTR destination = destination_string.GetBuffer( number_of_bytes_encoded );

  000a6	8b 54 24 24	 mov	 edx, DWORD PTR number_of_bytes_encoded$[rsp]
  000aa	48 8b 8c 24 e0
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  000b2	e8 00 00 00 00	 call	 ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer
  000b7	48 89 44 24 30	 mov	 QWORD PTR destination$[rsp], rax

; 1006 : 
; 1007 :    number_of_bytes_encoded = 0;

  000bc	c7 44 24 24 00
	00 00 00	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], 0
$LN2@Encode2:

; 1008 : 
; 1009 :    while( loop_index < number_of_bytes_to_encode )

  000c4	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  000c8	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  000cc	0f 8d 87 02 00
	00		 jge	 $LN3@Encode2

; 1010 :    {
; 1011 :       // Output the first byte
; 1012 : 
; 1013 :       byte_1 = input_buffer[ loop_index ];

  000d2	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  000d7	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  000dc	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  000e0	88 44 24 2a	 mov	 BYTE PTR byte_1$[rsp], al

; 1014 :       byte_to_add = alphabet[ ( byte_1 >> 2 ) ];

  000e4	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  000e9	c1 f8 02	 sar	 eax, 2
  000ec	48 98		 cdqe
  000ee	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  000f3	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 1015 : 
; 1016 :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  000f7	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  000fc	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  00100	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00105	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1017 :       number_of_bytes_encoded++;

  00109	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0010d	ff c0		 inc	 eax
  0010f	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 1018 : 
; 1019 :       loop_index++;

  00113	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  00117	ff c0		 inc	 eax
  00119	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 1020 : 
; 1021 :       if ( loop_index >= number_of_bytes_to_encode )

  0011d	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  00121	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  00125	0f 8c a6 00 00
	00		 jl	 $LN4@Encode2

; 1022 :       {
; 1023 :          // We're at the end of the data to encode
; 1024 : 
; 1025 :          byte_2 = 0;

  0012b	c6 44 24 28 00	 mov	 BYTE PTR byte_2$[rsp], 0

; 1026 :          byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  00130	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  00135	83 e0 03	 and	 eax, 3
  00138	c1 e0 04	 shl	 eax, 4
  0013b	0f b6 4c 24 28	 movzx	 ecx, BYTE PTR byte_2$[rsp]
  00140	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  00146	c1 f9 04	 sar	 ecx, 4
  00149	0b c1		 or	 eax, ecx
  0014b	48 98		 cdqe
  0014d	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00152	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 1027 : 
; 1028 :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00156	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  0015b	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  0015f	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00164	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1029 :          number_of_bytes_encoded++;

  00168	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0016c	ff c0		 inc	 eax
  0016e	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 1030 : 
; 1031 :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00172	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00176	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  0017b	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00180	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1032 :          number_of_bytes_encoded++;

  00184	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00188	ff c0		 inc	 eax
  0018a	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 1033 : 
; 1034 :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  0018e	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00192	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00197	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0019c	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1035 : 
; 1036 :          // 1999-09-01
; 1037 :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 1038 :          // We must NULL terminate the string before letting CString have the buffer back.
; 1039 : 
; 1040 :          destination[ number_of_bytes_encoded + 1 ] = 0;

  001a0	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  001a4	ff c0		 inc	 eax
  001a6	8b c0		 mov	 eax, eax
  001a8	33 c9		 xor	 ecx, ecx
  001aa	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  001af	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1041 : 
; 1042 :          destination_string.ReleaseBuffer( -1 );

  001b3	ba ff ff ff ff	 mov	 edx, -1
  001b8	48 8b 8c 24 e0
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  001c0	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 1043 : 
; 1044 :          return( TRUE );

  001c5	b8 01 00 00 00	 mov	 eax, 1
  001ca	e9 c6 01 00 00	 jmp	 $LN1@Encode2

; 1045 :       }

  001cf	eb 12		 jmp	 SHORT $LN5@Encode2
$LN4@Encode2:

; 1046 :       else
; 1047 :       {
; 1048 :          byte_2 = input_buffer[ loop_index ];

  001d1	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  001d6	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  001db	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  001df	88 44 24 28	 mov	 BYTE PTR byte_2$[rsp], al
$LN5@Encode2:

; 1049 :       }
; 1050 : 
; 1051 :       byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  001e3	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  001e8	83 e0 03	 and	 eax, 3
  001eb	c1 e0 04	 shl	 eax, 4
  001ee	0f b6 4c 24 28	 movzx	 ecx, BYTE PTR byte_2$[rsp]
  001f3	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  001f9	c1 f9 04	 sar	 ecx, 4
  001fc	0b c1		 or	 eax, ecx
  001fe	48 98		 cdqe
  00200	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00205	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 1052 : 
; 1053 :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00209	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  0020e	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  00212	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00217	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1054 :       number_of_bytes_encoded++;

  0021b	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0021f	ff c0		 inc	 eax
  00221	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 1055 : 
; 1056 :       loop_index++;

  00225	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  00229	ff c0		 inc	 eax
  0022b	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 1057 : 
; 1058 :       if ( loop_index >= number_of_bytes_to_encode )

  0022f	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  00233	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  00237	0f 8c 8a 00 00
	00		 jl	 $LN6@Encode2

; 1059 :       {
; 1060 :          // We ran out of bytes, we need to add the last half of byte_2 and pad
; 1061 :          byte_3 = 0;

  0023d	c6 44 24 29 00	 mov	 BYTE PTR byte_3$[rsp], 0

; 1062 : 
; 1063 :          byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  00242	0f b6 44 24 28	 movzx	 eax, BYTE PTR byte_2$[rsp]
  00247	83 e0 0f	 and	 eax, 15
  0024a	c1 e0 02	 shl	 eax, 2
  0024d	0f b6 4c 24 29	 movzx	 ecx, BYTE PTR byte_3$[rsp]
  00252	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00258	c1 f9 06	 sar	 ecx, 6
  0025b	0b c1		 or	 eax, ecx
  0025d	48 98		 cdqe
  0025f	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00264	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 1064 : 
; 1065 :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00268	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  0026d	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  00271	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00276	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1066 :          number_of_bytes_encoded++;

  0027a	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0027e	ff c0		 inc	 eax
  00280	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 1067 : 
; 1068 :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00284	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00288	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  0028d	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00292	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1069 : 
; 1070 :          // 1999-09-01
; 1071 :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 1072 :          // We must NULL terminate the string before letting CString have the buffer back.
; 1073 : 
; 1074 :          destination[ number_of_bytes_encoded + 1 ] = 0;

  00296	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0029a	ff c0		 inc	 eax
  0029c	8b c0		 mov	 eax, eax
  0029e	33 c9		 xor	 ecx, ecx
  002a0	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  002a5	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1075 : 
; 1076 :          destination_string.ReleaseBuffer( -1 );

  002a9	ba ff ff ff ff	 mov	 edx, -1
  002ae	48 8b 8c 24 e0
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  002b6	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 1077 : 
; 1078 :          return( TRUE );

  002bb	b8 01 00 00 00	 mov	 eax, 1
  002c0	e9 d0 00 00 00	 jmp	 $LN1@Encode2

; 1079 :       }

  002c5	eb 12		 jmp	 SHORT $LN7@Encode2
$LN6@Encode2:

; 1080 :       else
; 1081 :       {
; 1082 :          byte_3 = input_buffer[ loop_index ];

  002c7	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  002cc	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  002d1	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  002d5	88 44 24 29	 mov	 BYTE PTR byte_3$[rsp], al
$LN7@Encode2:

; 1083 :       }
; 1084 : 
; 1085 :       loop_index++;

  002d9	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  002dd	ff c0		 inc	 eax
  002df	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 1086 : 
; 1087 :       byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  002e3	0f b6 44 24 28	 movzx	 eax, BYTE PTR byte_2$[rsp]
  002e8	83 e0 0f	 and	 eax, 15
  002eb	c1 e0 02	 shl	 eax, 2
  002ee	0f b6 4c 24 29	 movzx	 ecx, BYTE PTR byte_3$[rsp]
  002f3	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  002f9	c1 f9 06	 sar	 ecx, 6
  002fc	0b c1		 or	 eax, ecx
  002fe	48 98		 cdqe
  00300	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00305	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 1088 : 
; 1089 :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00309	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  0030e	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  00312	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00317	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1090 :       number_of_bytes_encoded++;

  0031b	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0031f	ff c0		 inc	 eax
  00321	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 1091 : 
; 1092 :       byte_to_add = alphabet[ ( byte_3 & 0x3F ) ];

  00325	0f b6 44 24 29	 movzx	 eax, BYTE PTR byte_3$[rsp]
  0032a	83 e0 3f	 and	 eax, 63			; 0000003fH
  0032d	48 98		 cdqe
  0032f	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00334	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 1093 : 
; 1094 :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00338	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  0033d	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  00341	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00346	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 1095 :       number_of_bytes_encoded++;

  0034a	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0034e	ff c0		 inc	 eax
  00350	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 1096 : 
; 1097 : //      if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 )
; 1098 : //      {
; 1099 : //         destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( CARRIAGE_RETURN );
; 1100 : //         number_of_bytes_encoded++;
; 1101 : //
; 1102 : //         destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( LINE_FEED );
; 1103 : //         number_of_bytes_encoded++;
; 1104 :  //     }
; 1105 :    }

  00354	e9 6b fd ff ff	 jmp	 $LN2@Encode2
$LN3@Encode2:

; 1106 : 
; 1107 :    destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00359	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0035d	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00362	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00367	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1108 : 
; 1109 :    // 1999-09-01
; 1110 :    // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 1111 :    // We must NULL terminate the string before letting CString have the buffer back.
; 1112 : 
; 1113 :    destination[ number_of_bytes_encoded + 1 ] = 0;

  0036b	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0036f	ff c0		 inc	 eax
  00371	8b c0		 mov	 eax, eax
  00373	33 c9		 xor	 ecx, ecx
  00375	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0037a	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 1114 : 
; 1115 :    destination_string.ReleaseBuffer( -1 );

  0037e	ba ff ff ff ff	 mov	 edx, -1
  00383	48 8b 8c 24 e0
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  0038b	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 1116 : 
; 1117 :    return( TRUE );

  00390	b8 01 00 00 00	 mov	 eax, 1
$LN1@Encode2:

; 1118 : }

  00395	48 8b 8c 24 a0
	00 00 00	 mov	 rcx, QWORD PTR __$ArrayPad$[rsp]
  0039d	48 33 cc	 xor	 rcx, rsp
  003a0	e8 00 00 00 00	 call	 __security_check_cookie
  003a5	48 81 c4 b8 00
	00 00		 add	 rsp, 184		; 000000b8H
  003ac	5f		 pop	 rdi
  003ad	5e		 pop	 rsi
  003ae	c3		 ret	 0
?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::Encode2
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z
_TEXT	SEGMENT
byte_to_add$ = 32
number_of_bytes_encoded$ = 36
byte_2$ = 40
byte_3$ = 41
byte_1$ = 42
loop_index$ = 44
destination$ = 48
number_of_bytes_to_encode$ = 56
input_buffer$ = 64
alphabet$ = 80
__$ArrayPad$ = 160
this$ = 208
pSource$ = 216
lSource$ = 224
destination_string$ = 232
?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::EncodeA, COMDAT

; 837  : {

$LN9:
  00000	4c 89 4c 24 20	 mov	 QWORD PTR [rsp+32], r9
  00005	44 89 44 24 18	 mov	 DWORD PTR [rsp+24], r8d
  0000a	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000f	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00014	56		 push	 rsi
  00015	57		 push	 rdi
  00016	48 81 ec b8 00
	00 00		 sub	 rsp, 184		; 000000b8H
  0001d	48 8b 05 00 00
	00 00		 mov	 rax, QWORD PTR __security_cookie
  00024	48 33 c4	 xor	 rax, rsp
  00027	48 89 84 24 a0
	00 00 00	 mov	 QWORD PTR __$ArrayPad$[rsp], rax

; 838  : 
; 839  :    const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  0002f	48 8d 44 24 50	 lea	 rax, QWORD PTR alphabet$[rsp]
  00034	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:$SG321581
  0003b	48 8b f8	 mov	 rdi, rax
  0003e	48 8b f1	 mov	 rsi, rcx
  00041	b9 41 00 00 00	 mov	 ecx, 65			; 00000041H
  00046	f3 a4		 rep movsb

; 840  : 
; 841  :    int loop_index                = 0;

  00048	c7 44 24 2c 00
	00 00 00	 mov	 DWORD PTR loop_index$[rsp], 0

; 842  :    int number_of_bytes_to_encode = lSource;

  00050	8b 84 24 e0 00
	00 00		 mov	 eax, DWORD PTR lSource$[rsp]
  00057	89 44 24 38	 mov	 DWORD PTR number_of_bytes_to_encode$[rsp], eax

; 843  : 
; 844  :    BYTE byte_to_add = 0;

  0005b	c6 44 24 20 00	 mov	 BYTE PTR byte_to_add$[rsp], 0

; 845  :    BYTE byte_1      = 0;

  00060	c6 44 24 2a 00	 mov	 BYTE PTR byte_1$[rsp], 0

; 846  :    BYTE byte_2      = 0;

  00065	c6 44 24 28 00	 mov	 BYTE PTR byte_2$[rsp], 0

; 847  :    BYTE byte_3      = 0;

  0006a	c6 44 24 29 00	 mov	 BYTE PTR byte_3$[rsp], 0

; 848  : 
; 849  :    const BYTE * input_buffer = pSource;

  0006f	48 8b 84 24 d8
	00 00 00	 mov	 rax, QWORD PTR pSource$[rsp]
  00077	48 89 44 24 40	 mov	 QWORD PTR input_buffer$[rsp], rax

; 850  : 
; 851  :    DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1;

  0007c	f2 0f 2a 44 24
	38		 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rsp]
  00082	f2 0f 5e 05 00
	00 00 00	 divsd	 xmm0, QWORD PTR __real@3fe8000000000000
  0008a	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  0008f	ff c0		 inc	 eax
  00091	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 852  : 
; 853  :    // Now add in the CR/LF pairs, each line is truncated at 72 characters
; 854  : 
; 855  :    // 2000-05-12
; 856  :    // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here.
; 857  :    // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded.
; 858  : 
; 859  :    number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 );

  00095	33 d2		 xor	 edx, edx
  00097	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0009b	b9 48 00 00 00	 mov	 ecx, 72			; 00000048H
  000a0	f7 f1		 div	 ecx
  000a2	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  000a6	8d 44 41 02	 lea	 eax, DWORD PTR [rcx+rax*2+2]
  000aa	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 860  : 
; 861  :    char * destination = destination_string.GetBuffer( number_of_bytes_encoded );

  000ae	8b 54 24 24	 mov	 edx, DWORD PTR number_of_bytes_encoded$[rsp]
  000b2	48 8b 8c 24 e8
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  000ba	e8 00 00 00 00	 call	 ?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::GetBuffer
  000bf	48 89 44 24 30	 mov	 QWORD PTR destination$[rsp], rax

; 862  : 
; 863  :    number_of_bytes_encoded = 0;

  000c4	c7 44 24 24 00
	00 00 00	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], 0
$LN2@EncodeA:

; 864  : 
; 865  :    while( loop_index < number_of_bytes_to_encode )

  000cc	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  000d0	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  000d4	0f 8d 6e 02 00
	00		 jge	 $LN3@EncodeA

; 866  :    {
; 867  :       // Output the first byte
; 868  : 
; 869  :       byte_1 = input_buffer[ loop_index ];

  000da	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  000df	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  000e4	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  000e8	88 44 24 2a	 mov	 BYTE PTR byte_1$[rsp], al

; 870  :       byte_to_add = alphabet[ ( byte_1 >> 2 ) ];

  000ec	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  000f1	c1 f8 02	 sar	 eax, 2
  000f4	48 98		 cdqe
  000f6	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  000fb	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 871  : 
; 872  :       destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  000ff	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00103	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  00108	0f b6 54 24 20	 movzx	 edx, BYTE PTR byte_to_add$[rsp]
  0010d	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 873  :       number_of_bytes_encoded++;

  00110	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00114	ff c0		 inc	 eax
  00116	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 874  : 
; 875  :       loop_index++;

  0011a	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  0011e	ff c0		 inc	 eax
  00120	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 876  : 
; 877  :       if ( loop_index >= number_of_bytes_to_encode )

  00124	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  00128	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  0012c	0f 8c 99 00 00
	00		 jl	 $LN4@EncodeA

; 878  :       {
; 879  :          // We're at the end of the data to encode
; 880  : 
; 881  :          byte_2 = 0;

  00132	c6 44 24 28 00	 mov	 BYTE PTR byte_2$[rsp], 0

; 882  :          byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  00137	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  0013c	83 e0 03	 and	 eax, 3
  0013f	c1 e0 04	 shl	 eax, 4
  00142	0f b6 4c 24 28	 movzx	 ecx, BYTE PTR byte_2$[rsp]
  00147	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  0014d	c1 f9 04	 sar	 ecx, 4
  00150	0b c1		 or	 eax, ecx
  00152	48 98		 cdqe
  00154	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00159	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 883  : 
; 884  :          destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  0015d	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00161	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  00166	0f b6 54 24 20	 movzx	 edx, BYTE PTR byte_to_add$[rsp]
  0016b	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 885  :          number_of_bytes_encoded++;

  0016e	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00172	ff c0		 inc	 eax
  00174	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 886  : 
; 887  :          destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA );

  00178	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0017c	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  00181	c6 04 01 3d	 mov	 BYTE PTR [rcx+rax], 61	; 0000003dH

; 888  :          number_of_bytes_encoded++;

  00185	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00189	ff c0		 inc	 eax
  0018b	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 889  : 
; 890  :          destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA );

  0018f	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00193	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  00198	c6 04 01 3d	 mov	 BYTE PTR [rcx+rax], 61	; 0000003dH

; 891  : 
; 892  :          // 1999-09-01
; 893  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 894  :          // We must NULL terminate the string before letting CString have the buffer back.
; 895  : 
; 896  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  0019c	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  001a0	ff c0		 inc	 eax
  001a2	8b c0		 mov	 eax, eax
  001a4	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  001a9	c6 04 01 00	 mov	 BYTE PTR [rcx+rax], 0

; 897  : 
; 898  :          destination_string.ReleaseBuffer( -1 );

  001ad	ba ff ff ff ff	 mov	 edx, -1
  001b2	48 8b 8c 24 e8
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  001ba	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer

; 899  : 
; 900  :          return( TRUE );

  001bf	b8 01 00 00 00	 mov	 eax, 1
  001c4	e9 b4 01 00 00	 jmp	 $LN1@EncodeA

; 901  :       }

  001c9	eb 12		 jmp	 SHORT $LN5@EncodeA
$LN4@EncodeA:

; 902  :       else
; 903  :       {
; 904  :          byte_2 = input_buffer[ loop_index ];

  001cb	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  001d0	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  001d5	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  001d9	88 44 24 28	 mov	 BYTE PTR byte_2$[rsp], al
$LN5@EncodeA:

; 905  :       }
; 906  : 
; 907  :       byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  001dd	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  001e2	83 e0 03	 and	 eax, 3
  001e5	c1 e0 04	 shl	 eax, 4
  001e8	0f b6 4c 24 28	 movzx	 ecx, BYTE PTR byte_2$[rsp]
  001ed	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  001f3	c1 f9 04	 sar	 ecx, 4
  001f6	0b c1		 or	 eax, ecx
  001f8	48 98		 cdqe
  001fa	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  001ff	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 908  : 
; 909  :       destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  00203	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00207	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  0020c	0f b6 54 24 20	 movzx	 edx, BYTE PTR byte_to_add$[rsp]
  00211	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 910  :       number_of_bytes_encoded++;

  00214	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00218	ff c0		 inc	 eax
  0021a	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 911  : 
; 912  :       loop_index++;

  0021e	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  00222	ff c0		 inc	 eax
  00224	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 913  : 
; 914  :       if ( loop_index >= number_of_bytes_to_encode )

  00228	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  0022c	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  00230	0f 8c 82 00 00
	00		 jl	 $LN6@EncodeA

; 915  :       {
; 916  :          // We ran out of bytes, we need to add the last half of byte_2 and pad
; 917  :          byte_3 = 0;

  00236	c6 44 24 29 00	 mov	 BYTE PTR byte_3$[rsp], 0

; 918  : 
; 919  :          byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  0023b	0f b6 44 24 28	 movzx	 eax, BYTE PTR byte_2$[rsp]
  00240	83 e0 0f	 and	 eax, 15
  00243	c1 e0 02	 shl	 eax, 2
  00246	0f b6 4c 24 29	 movzx	 ecx, BYTE PTR byte_3$[rsp]
  0024b	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00251	c1 f9 06	 sar	 ecx, 6
  00254	0b c1		 or	 eax, ecx
  00256	48 98		 cdqe
  00258	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  0025d	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 920  : 
; 921  :          destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  00261	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00265	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  0026a	0f b6 54 24 20	 movzx	 edx, BYTE PTR byte_to_add$[rsp]
  0026f	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 922  :          number_of_bytes_encoded++;

  00272	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00276	ff c0		 inc	 eax
  00278	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 923  : 
; 924  :          destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA );

  0027c	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00280	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  00285	c6 04 01 3d	 mov	 BYTE PTR [rcx+rax], 61	; 0000003dH

; 925  : 
; 926  :          // 1999-09-01
; 927  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 928  :          // We must NULL terminate the string before letting CString have the buffer back.
; 929  : 
; 930  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  00289	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0028d	ff c0		 inc	 eax
  0028f	8b c0		 mov	 eax, eax
  00291	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  00296	c6 04 01 00	 mov	 BYTE PTR [rcx+rax], 0

; 931  : 
; 932  :          destination_string.ReleaseBuffer( -1 );

  0029a	ba ff ff ff ff	 mov	 edx, -1
  0029f	48 8b 8c 24 e8
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  002a7	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer

; 933  : 
; 934  :          return( TRUE );

  002ac	b8 01 00 00 00	 mov	 eax, 1
  002b1	e9 c7 00 00 00	 jmp	 $LN1@EncodeA

; 935  :       }

  002b6	eb 12		 jmp	 SHORT $LN7@EncodeA
$LN6@EncodeA:

; 936  :       else
; 937  :       {
; 938  :          byte_3 = input_buffer[ loop_index ];

  002b8	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  002bd	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  002c2	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  002c6	88 44 24 29	 mov	 BYTE PTR byte_3$[rsp], al
$LN7@EncodeA:

; 939  :       }
; 940  : 
; 941  :       loop_index++;

  002ca	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  002ce	ff c0		 inc	 eax
  002d0	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 942  : 
; 943  :       byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  002d4	0f b6 44 24 28	 movzx	 eax, BYTE PTR byte_2$[rsp]
  002d9	83 e0 0f	 and	 eax, 15
  002dc	c1 e0 02	 shl	 eax, 2
  002df	0f b6 4c 24 29	 movzx	 ecx, BYTE PTR byte_3$[rsp]
  002e4	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  002ea	c1 f9 06	 sar	 ecx, 6
  002ed	0b c1		 or	 eax, ecx
  002ef	48 98		 cdqe
  002f1	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  002f6	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 944  : 
; 945  :       destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  002fa	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  002fe	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  00303	0f b6 54 24 20	 movzx	 edx, BYTE PTR byte_to_add$[rsp]
  00308	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 946  :       number_of_bytes_encoded++;

  0030b	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0030f	ff c0		 inc	 eax
  00311	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 947  : 
; 948  :       byte_to_add = alphabet[ ( byte_3 & 0x3F ) ];

  00315	0f b6 44 24 29	 movzx	 eax, BYTE PTR byte_3$[rsp]
  0031a	83 e0 3f	 and	 eax, 63			; 0000003fH
  0031d	48 98		 cdqe
  0031f	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00324	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 949  : 
; 950  :       destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add );

  00328	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0032c	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  00331	0f b6 54 24 20	 movzx	 edx, BYTE PTR byte_to_add$[rsp]
  00336	88 14 01	 mov	 BYTE PTR [rcx+rax], dl

; 951  :       number_of_bytes_encoded++;

  00339	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0033d	ff c0		 inc	 eax
  0033f	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 952  : 
; 953  : /*
; 954  :       if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 )
; 955  :       {
; 956  :          destination[ number_of_bytes_encoded ] = static_cast< char >( CARRIAGE_RETURN );
; 957  :          number_of_bytes_encoded++;
; 958  : 
; 959  :          destination[ number_of_bytes_encoded ] = static_cast< char >( LINE_FEED );
; 960  :          number_of_bytes_encoded++;
; 961  :       }
; 962  : */
; 963  :    }

  00343	e9 84 fd ff ff	 jmp	 $LN2@EncodeA
$LN3@EncodeA:

; 964  : 
; 965  :    destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA );

  00348	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0034c	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  00351	c6 04 01 3d	 mov	 BYTE PTR [rcx+rax], 61	; 0000003dH

; 966  : 
; 967  :    // 1999-09-01
; 968  :    // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 969  :    // We must NULL terminate the string before letting CString have the buffer back.
; 970  : 
; 971  :    destination[ number_of_bytes_encoded + 1 ] = 0;

  00355	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00359	ff c0		 inc	 eax
  0035b	8b c0		 mov	 eax, eax
  0035d	48 8b 4c 24 30	 mov	 rcx, QWORD PTR destination$[rsp]
  00362	c6 04 01 00	 mov	 BYTE PTR [rcx+rax], 0

; 972  : 
; 973  :    destination_string.ReleaseBuffer( -1 );

  00366	ba ff ff ff ff	 mov	 edx, -1
  0036b	48 8b 8c 24 e8
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  00373	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer

; 974  : 
; 975  :    return( TRUE );

  00378	b8 01 00 00 00	 mov	 eax, 1
$LN1@EncodeA:

; 976  : }

  0037d	48 8b 8c 24 a0
	00 00 00	 mov	 rcx, QWORD PTR __$ArrayPad$[rsp]
  00385	48 33 cc	 xor	 rcx, rsp
  00388	e8 00 00 00 00	 call	 __security_check_cookie
  0038d	48 81 c4 b8 00
	00 00		 add	 rsp, 184		; 000000b8H
  00394	5f		 pop	 rdi
  00395	5e		 pop	 rsi
  00396	c3		 ret	 0
?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::EncodeA
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
_TEXT	SEGMENT
byte_to_add$ = 32
number_of_bytes_encoded$ = 36
byte_2$ = 40
byte_3$ = 41
byte_1$ = 42
loop_index$ = 44
destination$ = 48
number_of_bytes_to_encode$ = 56
input_buffer$ = 64
alphabet$ = 80
__$ArrayPad$ = 160
this$ = 208
pSource$ = 216
lSource$ = 224
destination_string$ = 232
?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::Encode, COMDAT

; 695  : {

$LN9:
  00000	4c 89 4c 24 20	 mov	 QWORD PTR [rsp+32], r9
  00005	44 89 44 24 18	 mov	 DWORD PTR [rsp+24], r8d
  0000a	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000f	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00014	56		 push	 rsi
  00015	57		 push	 rdi
  00016	48 81 ec b8 00
	00 00		 sub	 rsp, 184		; 000000b8H
  0001d	48 8b 05 00 00
	00 00		 mov	 rax, QWORD PTR __security_cookie
  00024	48 33 c4	 xor	 rax, rsp
  00027	48 89 84 24 a0
	00 00 00	 mov	 QWORD PTR __$ArrayPad$[rsp], rax

; 696  : 
; 697  :    const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  0002f	48 8d 44 24 50	 lea	 rax, QWORD PTR alphabet$[rsp]
  00034	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:$SG321544
  0003b	48 8b f8	 mov	 rdi, rax
  0003e	48 8b f1	 mov	 rsi, rcx
  00041	b9 41 00 00 00	 mov	 ecx, 65			; 00000041H
  00046	f3 a4		 rep movsb

; 698  : 
; 699  :    int loop_index                = 0;

  00048	c7 44 24 2c 00
	00 00 00	 mov	 DWORD PTR loop_index$[rsp], 0

; 700  :    int number_of_bytes_to_encode = lSource;

  00050	8b 84 24 e0 00
	00 00		 mov	 eax, DWORD PTR lSource$[rsp]
  00057	89 44 24 38	 mov	 DWORD PTR number_of_bytes_to_encode$[rsp], eax

; 701  : 
; 702  :    BYTE byte_to_add = 0;

  0005b	c6 44 24 20 00	 mov	 BYTE PTR byte_to_add$[rsp], 0

; 703  :    BYTE byte_1      = 0;

  00060	c6 44 24 2a 00	 mov	 BYTE PTR byte_1$[rsp], 0

; 704  :    BYTE byte_2      = 0;

  00065	c6 44 24 28 00	 mov	 BYTE PTR byte_2$[rsp], 0

; 705  :    BYTE byte_3      = 0;

  0006a	c6 44 24 29 00	 mov	 BYTE PTR byte_3$[rsp], 0

; 706  : 
; 707  :    const BYTE * input_buffer = pSource;

  0006f	48 8b 84 24 d8
	00 00 00	 mov	 rax, QWORD PTR pSource$[rsp]
  00077	48 89 44 24 40	 mov	 QWORD PTR input_buffer$[rsp], rax

; 708  : 
; 709  :    DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1;

  0007c	f2 0f 2a 44 24
	38		 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rsp]
  00082	f2 0f 5e 05 00
	00 00 00	 divsd	 xmm0, QWORD PTR __real@3fe8000000000000
  0008a	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  0008f	ff c0		 inc	 eax
  00091	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 710  : 
; 711  :    // Now add in the CR/LF pairs, each line is truncated at 72 characters
; 712  : 
; 713  :    // 2000-05-12
; 714  :    // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here.
; 715  :    // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded.
; 716  : 
; 717  :    number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 );

  00095	33 d2		 xor	 edx, edx
  00097	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0009b	b9 48 00 00 00	 mov	 ecx, 72			; 00000048H
  000a0	f7 f1		 div	 ecx
  000a2	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  000a6	8d 44 41 02	 lea	 eax, DWORD PTR [rcx+rax*2+2]
  000aa	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 718  : 
; 719  :    LPTSTR destination = destination_string.GetBuffer( number_of_bytes_encoded );

  000ae	8b 54 24 24	 mov	 edx, DWORD PTR number_of_bytes_encoded$[rsp]
  000b2	48 8b 8c 24 e8
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  000ba	e8 00 00 00 00	 call	 ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer
  000bf	48 89 44 24 30	 mov	 QWORD PTR destination$[rsp], rax

; 720  : 
; 721  :    number_of_bytes_encoded = 0;

  000c4	c7 44 24 24 00
	00 00 00	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], 0
$LN2@Encode:

; 722  : 
; 723  :    while( loop_index < number_of_bytes_to_encode )

  000cc	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  000d0	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  000d4	0f 8d 87 02 00
	00		 jge	 $LN3@Encode

; 724  :    {
; 725  :       // Output the first byte
; 726  : 
; 727  :       byte_1 = input_buffer[ loop_index ];

  000da	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  000df	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  000e4	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  000e8	88 44 24 2a	 mov	 BYTE PTR byte_1$[rsp], al

; 728  :       byte_to_add = alphabet[ ( byte_1 >> 2 ) ];

  000ec	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  000f1	c1 f8 02	 sar	 eax, 2
  000f4	48 98		 cdqe
  000f6	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  000fb	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 729  : 
; 730  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  000ff	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  00104	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  00108	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0010d	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 731  :       number_of_bytes_encoded++;

  00111	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00115	ff c0		 inc	 eax
  00117	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 732  : 
; 733  :       loop_index++;

  0011b	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  0011f	ff c0		 inc	 eax
  00121	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 734  : 
; 735  :       if ( loop_index >= number_of_bytes_to_encode )

  00125	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  00129	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  0012d	0f 8c a6 00 00
	00		 jl	 $LN4@Encode

; 736  :       {
; 737  :          // We're at the end of the data to encode
; 738  : 
; 739  :          byte_2 = 0;

  00133	c6 44 24 28 00	 mov	 BYTE PTR byte_2$[rsp], 0

; 740  :          byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  00138	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  0013d	83 e0 03	 and	 eax, 3
  00140	c1 e0 04	 shl	 eax, 4
  00143	0f b6 4c 24 28	 movzx	 ecx, BYTE PTR byte_2$[rsp]
  00148	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  0014e	c1 f9 04	 sar	 ecx, 4
  00151	0b c1		 or	 eax, ecx
  00153	48 98		 cdqe
  00155	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  0015a	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 741  : 
; 742  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  0015e	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  00163	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  00167	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0016c	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 743  :          number_of_bytes_encoded++;

  00170	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00174	ff c0		 inc	 eax
  00176	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 744  : 
; 745  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  0017a	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0017e	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00183	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00188	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 746  :          number_of_bytes_encoded++;

  0018c	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00190	ff c0		 inc	 eax
  00192	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 747  : 
; 748  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00196	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0019a	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  0019f	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  001a4	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 749  : 
; 750  :          // 1999-09-01
; 751  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 752  :          // We must NULL terminate the string before letting CString have the buffer back.
; 753  : 
; 754  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  001a8	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  001ac	ff c0		 inc	 eax
  001ae	8b c0		 mov	 eax, eax
  001b0	33 c9		 xor	 ecx, ecx
  001b2	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  001b7	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 755  : 
; 756  :          destination_string.ReleaseBuffer( -1 );

  001bb	ba ff ff ff ff	 mov	 edx, -1
  001c0	48 8b 8c 24 e8
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  001c8	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 757  : 
; 758  :          return( TRUE );

  001cd	b8 01 00 00 00	 mov	 eax, 1
  001d2	e9 c6 01 00 00	 jmp	 $LN1@Encode

; 759  :       }

  001d7	eb 12		 jmp	 SHORT $LN5@Encode
$LN4@Encode:

; 760  :       else
; 761  :       {
; 762  :          byte_2 = input_buffer[ loop_index ];

  001d9	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  001de	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  001e3	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  001e7	88 44 24 28	 mov	 BYTE PTR byte_2$[rsp], al
$LN5@Encode:

; 763  :       }
; 764  : 
; 765  :       byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  001eb	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  001f0	83 e0 03	 and	 eax, 3
  001f3	c1 e0 04	 shl	 eax, 4
  001f6	0f b6 4c 24 28	 movzx	 ecx, BYTE PTR byte_2$[rsp]
  001fb	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  00201	c1 f9 04	 sar	 ecx, 4
  00204	0b c1		 or	 eax, ecx
  00206	48 98		 cdqe
  00208	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  0020d	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 766  : 
; 767  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00211	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  00216	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  0021a	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0021f	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 768  :       number_of_bytes_encoded++;

  00223	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00227	ff c0		 inc	 eax
  00229	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 769  : 
; 770  :       loop_index++;

  0022d	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  00231	ff c0		 inc	 eax
  00233	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 771  : 
; 772  :       if ( loop_index >= number_of_bytes_to_encode )

  00237	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  0023b	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  0023f	0f 8c 8a 00 00
	00		 jl	 $LN6@Encode

; 773  :       {
; 774  :          // We ran out of bytes, we need to add the last half of byte_2 and pad
; 775  :          byte_3 = 0;

  00245	c6 44 24 29 00	 mov	 BYTE PTR byte_3$[rsp], 0

; 776  : 
; 777  :          byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  0024a	0f b6 44 24 28	 movzx	 eax, BYTE PTR byte_2$[rsp]
  0024f	83 e0 0f	 and	 eax, 15
  00252	c1 e0 02	 shl	 eax, 2
  00255	0f b6 4c 24 29	 movzx	 ecx, BYTE PTR byte_3$[rsp]
  0025a	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00260	c1 f9 06	 sar	 ecx, 6
  00263	0b c1		 or	 eax, ecx
  00265	48 98		 cdqe
  00267	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  0026c	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 778  : 
; 779  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00270	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  00275	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  00279	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0027e	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 780  :          number_of_bytes_encoded++;

  00282	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00286	ff c0		 inc	 eax
  00288	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 781  : 
; 782  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  0028c	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00290	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00295	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0029a	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 783  : 
; 784  :          // 1999-09-01
; 785  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 786  :          // We must NULL terminate the string before letting CString have the buffer back.
; 787  : 
; 788  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  0029e	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  002a2	ff c0		 inc	 eax
  002a4	8b c0		 mov	 eax, eax
  002a6	33 c9		 xor	 ecx, ecx
  002a8	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  002ad	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 789  : 
; 790  :          destination_string.ReleaseBuffer( -1 );

  002b1	ba ff ff ff ff	 mov	 edx, -1
  002b6	48 8b 8c 24 e8
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  002be	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 791  : 
; 792  :          return( TRUE );

  002c3	b8 01 00 00 00	 mov	 eax, 1
  002c8	e9 d0 00 00 00	 jmp	 $LN1@Encode

; 793  :       }

  002cd	eb 12		 jmp	 SHORT $LN7@Encode
$LN6@Encode:

; 794  :       else
; 795  :       {
; 796  :          byte_3 = input_buffer[ loop_index ];

  002cf	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  002d4	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  002d9	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  002dd	88 44 24 29	 mov	 BYTE PTR byte_3$[rsp], al
$LN7@Encode:

; 797  :       }
; 798  : 
; 799  :       loop_index++;

  002e1	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  002e5	ff c0		 inc	 eax
  002e7	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 800  : 
; 801  :       byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  002eb	0f b6 44 24 28	 movzx	 eax, BYTE PTR byte_2$[rsp]
  002f0	83 e0 0f	 and	 eax, 15
  002f3	c1 e0 02	 shl	 eax, 2
  002f6	0f b6 4c 24 29	 movzx	 ecx, BYTE PTR byte_3$[rsp]
  002fb	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00301	c1 f9 06	 sar	 ecx, 6
  00304	0b c1		 or	 eax, ecx
  00306	48 98		 cdqe
  00308	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  0030d	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 802  : 
; 803  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00311	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  00316	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  0031a	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0031f	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 804  :       number_of_bytes_encoded++;

  00323	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00327	ff c0		 inc	 eax
  00329	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 805  : 
; 806  :       byte_to_add = alphabet[ ( byte_3 & 0x3F ) ];

  0032d	0f b6 44 24 29	 movzx	 eax, BYTE PTR byte_3$[rsp]
  00332	83 e0 3f	 and	 eax, 63			; 0000003fH
  00335	48 98		 cdqe
  00337	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  0033c	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 807  : 
; 808  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00340	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  00345	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  00349	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0034e	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 809  :       number_of_bytes_encoded++;

  00352	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00356	ff c0		 inc	 eax
  00358	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 810  : 
; 811  : /*
; 812  :       if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 )
; 813  :       {
; 814  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( CARRIAGE_RETURN );
; 815  :          number_of_bytes_encoded++;
; 816  : 
; 817  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( LINE_FEED );
; 818  :          number_of_bytes_encoded++;
; 819  :       }
; 820  : */
; 821  :    }

  0035c	e9 6b fd ff ff	 jmp	 $LN2@Encode
$LN3@Encode:

; 822  : 
; 823  :    destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00361	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00365	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  0036a	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0036f	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 824  : 
; 825  :    // 1999-09-01
; 826  :    // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 827  :    // We must NULL terminate the string before letting CString have the buffer back.
; 828  : 
; 829  :    destination[ number_of_bytes_encoded + 1 ] = 0;

  00373	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00377	ff c0		 inc	 eax
  00379	8b c0		 mov	 eax, eax
  0037b	33 c9		 xor	 ecx, ecx
  0037d	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00382	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 830  : 
; 831  :    destination_string.ReleaseBuffer( -1 );

  00386	ba ff ff ff ff	 mov	 edx, -1
  0038b	48 8b 8c 24 e8
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  00393	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 832  : 
; 833  :    return( TRUE );

  00398	b8 01 00 00 00	 mov	 eax, 1
$LN1@Encode:

; 834  : }

  0039d	48 8b 8c 24 a0
	00 00 00	 mov	 rcx, QWORD PTR __$ArrayPad$[rsp]
  003a5	48 33 cc	 xor	 rcx, rsp
  003a8	e8 00 00 00 00	 call	 __security_check_cookie
  003ad	48 81 c4 b8 00
	00 00		 add	 rsp, 184		; 000000b8H
  003b4	5f		 pop	 rdi
  003b5	5e		 pop	 rsi
  003b6	c3		 ret	 0
?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::Encode
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z
_TEXT	SEGMENT
byte_to_add$ = 32
number_of_bytes_encoded$ = 36
byte_2$ = 40
byte_3$ = 41
byte_1$ = 42
loop_index$ = 44
destination$ = 48
number_of_bytes_to_encode$ = 56
input_buffer$ = 64
alphabet$ = 80
__$ArrayPad$ = 160
this$ = 208
source$ = 216
destination_string$ = 224
?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::Encode, COMDAT

; 555  : {

$LN10:
  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	56		 push	 rsi
  00010	57		 push	 rdi
  00011	48 81 ec b8 00
	00 00		 sub	 rsp, 184		; 000000b8H
  00018	48 8b 05 00 00
	00 00		 mov	 rax, QWORD PTR __security_cookie
  0001f	48 33 c4	 xor	 rax, rsp
  00022	48 89 84 24 a0
	00 00 00	 mov	 QWORD PTR __$ArrayPad$[rsp], rax

; 556  : 
; 557  :    const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  0002a	48 8d 44 24 50	 lea	 rax, QWORD PTR alphabet$[rsp]
  0002f	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:$SG321506
  00036	48 8b f8	 mov	 rdi, rax
  00039	48 8b f1	 mov	 rsi, rcx
  0003c	b9 41 00 00 00	 mov	 ecx, 65			; 00000041H
  00041	f3 a4		 rep movsb

; 558  : 
; 559  :    int loop_index                = 0;

  00043	c7 44 24 2c 00
	00 00 00	 mov	 DWORD PTR loop_index$[rsp], 0

; 560  :    int number_of_bytes_to_encode = (int)source.GetSize();

  0004b	48 8b 8c 24 d8
	00 00 00	 mov	 rcx, QWORD PTR source$[rsp]
  00053	e8 00 00 00 00	 call	 ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize
  00058	89 44 24 38	 mov	 DWORD PTR number_of_bytes_to_encode$[rsp], eax

; 561  : 
; 562  :    BYTE byte_to_add = 0;

  0005c	c6 44 24 20 00	 mov	 BYTE PTR byte_to_add$[rsp], 0

; 563  :    BYTE byte_1      = 0;

  00061	c6 44 24 2a 00	 mov	 BYTE PTR byte_1$[rsp], 0

; 564  :    BYTE byte_2      = 0;

  00066	c6 44 24 28 00	 mov	 BYTE PTR byte_2$[rsp], 0

; 565  :    BYTE byte_3      = 0;

  0006b	c6 44 24 29 00	 mov	 BYTE PTR byte_3$[rsp], 0

; 566  : 
; 567  :    const BYTE * input_buffer = source.GetData();

  00070	48 8b 8c 24 d8
	00 00 00	 mov	 rcx, QWORD PTR source$[rsp]
  00078	e8 00 00 00 00	 call	 ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData
  0007d	48 89 44 24 40	 mov	 QWORD PTR input_buffer$[rsp], rax

; 568  : 
; 569  :    DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1;

  00082	f2 0f 2a 44 24
	38		 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rsp]
  00088	f2 0f 5e 05 00
	00 00 00	 divsd	 xmm0, QWORD PTR __real@3fe8000000000000
  00090	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  00095	ff c0		 inc	 eax
  00097	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 570  : 
; 571  :    // Now add in the CR/LF pairs, each line is truncated at 72 characters
; 572  : 
; 573  :    // 2000-05-12
; 574  :    // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here.
; 575  :    // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded.
; 576  : 
; 577  :    number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 );

  0009b	33 d2		 xor	 edx, edx
  0009d	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  000a1	b9 48 00 00 00	 mov	 ecx, 72			; 00000048H
  000a6	f7 f1		 div	 ecx
  000a8	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  000ac	8d 44 41 02	 lea	 eax, DWORD PTR [rcx+rax*2+2]
  000b0	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 578  : 
; 579  :    LPTSTR destination = destination_string.GetBuffer( number_of_bytes_encoded );

  000b4	8b 54 24 24	 mov	 edx, DWORD PTR number_of_bytes_encoded$[rsp]
  000b8	48 8b 8c 24 e0
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  000c0	e8 00 00 00 00	 call	 ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer
  000c5	48 89 44 24 30	 mov	 QWORD PTR destination$[rsp], rax

; 580  : 
; 581  :    number_of_bytes_encoded = 0;

  000ca	c7 44 24 24 00
	00 00 00	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], 0
$LN2@Encode:

; 582  : 
; 583  :    while( loop_index < number_of_bytes_to_encode )

  000d2	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  000d6	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  000da	0f 8d d2 02 00
	00		 jge	 $LN3@Encode

; 584  :    {
; 585  :       // Output the first byte
; 586  : 
; 587  :       byte_1 = input_buffer[ loop_index ];

  000e0	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  000e5	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  000ea	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  000ee	88 44 24 2a	 mov	 BYTE PTR byte_1$[rsp], al

; 588  :       byte_to_add = alphabet[ ( byte_1 >> 2 ) ];

  000f2	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  000f7	c1 f8 02	 sar	 eax, 2
  000fa	48 98		 cdqe
  000fc	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00101	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 589  : 
; 590  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00105	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  0010a	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  0010e	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00113	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 591  :       number_of_bytes_encoded++;

  00117	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0011b	ff c0		 inc	 eax
  0011d	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 592  : 
; 593  :       loop_index++;

  00121	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  00125	ff c0		 inc	 eax
  00127	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 594  : 
; 595  :       if ( loop_index >= number_of_bytes_to_encode )

  0012b	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  0012f	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  00133	0f 8c a6 00 00
	00		 jl	 $LN4@Encode

; 596  :       {
; 597  :          // We're at the end of the data to encode
; 598  : 
; 599  :          byte_2 = 0;

  00139	c6 44 24 28 00	 mov	 BYTE PTR byte_2$[rsp], 0

; 600  :          byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  0013e	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  00143	83 e0 03	 and	 eax, 3
  00146	c1 e0 04	 shl	 eax, 4
  00149	0f b6 4c 24 28	 movzx	 ecx, BYTE PTR byte_2$[rsp]
  0014e	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  00154	c1 f9 04	 sar	 ecx, 4
  00157	0b c1		 or	 eax, ecx
  00159	48 98		 cdqe
  0015b	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00160	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 601  : 
; 602  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00164	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  00169	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  0016d	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00172	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 603  :          number_of_bytes_encoded++;

  00176	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0017a	ff c0		 inc	 eax
  0017c	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 604  : 
; 605  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00180	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00184	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  00189	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0018e	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 606  :          number_of_bytes_encoded++;

  00192	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00196	ff c0		 inc	 eax
  00198	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 607  : 
; 608  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  0019c	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  001a0	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  001a5	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  001aa	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 609  : 
; 610  :          // 1999-09-01
; 611  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 612  :          // We must NULL terminate the string before letting CString have the buffer back.
; 613  : 
; 614  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  001ae	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  001b2	ff c0		 inc	 eax
  001b4	8b c0		 mov	 eax, eax
  001b6	33 c9		 xor	 ecx, ecx
  001b8	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  001bd	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 615  : 
; 616  :          destination_string.ReleaseBuffer( -1 );

  001c1	ba ff ff ff ff	 mov	 edx, -1
  001c6	48 8b 8c 24 e0
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  001ce	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 617  : 
; 618  :          return( TRUE );

  001d3	b8 01 00 00 00	 mov	 eax, 1
  001d8	e9 11 02 00 00	 jmp	 $LN1@Encode

; 619  :       }

  001dd	eb 12		 jmp	 SHORT $LN5@Encode
$LN4@Encode:

; 620  :       else
; 621  :       {
; 622  :          byte_2 = input_buffer[ loop_index ];

  001df	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  001e4	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  001e9	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  001ed	88 44 24 28	 mov	 BYTE PTR byte_2$[rsp], al
$LN5@Encode:

; 623  :       }
; 624  : 
; 625  :       byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  001f1	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  001f6	83 e0 03	 and	 eax, 3
  001f9	c1 e0 04	 shl	 eax, 4
  001fc	0f b6 4c 24 28	 movzx	 ecx, BYTE PTR byte_2$[rsp]
  00201	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  00207	c1 f9 04	 sar	 ecx, 4
  0020a	0b c1		 or	 eax, ecx
  0020c	48 98		 cdqe
  0020e	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00213	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 626  : 
; 627  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00217	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  0021c	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  00220	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00225	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 628  :       number_of_bytes_encoded++;

  00229	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0022d	ff c0		 inc	 eax
  0022f	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 629  : 
; 630  :       loop_index++;

  00233	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  00237	ff c0		 inc	 eax
  00239	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 631  : 
; 632  :       if ( loop_index >= number_of_bytes_to_encode )

  0023d	8b 44 24 38	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  00241	39 44 24 2c	 cmp	 DWORD PTR loop_index$[rsp], eax
  00245	0f 8c 8a 00 00
	00		 jl	 $LN6@Encode

; 633  :       {
; 634  :          // We ran out of bytes, we need to add the last half of byte_2 and pad
; 635  :          byte_3 = 0;

  0024b	c6 44 24 29 00	 mov	 BYTE PTR byte_3$[rsp], 0

; 636  : 
; 637  :          byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  00250	0f b6 44 24 28	 movzx	 eax, BYTE PTR byte_2$[rsp]
  00255	83 e0 0f	 and	 eax, 15
  00258	c1 e0 02	 shl	 eax, 2
  0025b	0f b6 4c 24 29	 movzx	 ecx, BYTE PTR byte_3$[rsp]
  00260	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00266	c1 f9 06	 sar	 ecx, 6
  00269	0b c1		 or	 eax, ecx
  0026b	48 98		 cdqe
  0026d	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00272	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 638  : 
; 639  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00276	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  0027b	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  0027f	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00284	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 640  :          number_of_bytes_encoded++;

  00288	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0028c	ff c0		 inc	 eax
  0028e	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 641  : 
; 642  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  00292	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00296	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  0029b	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  002a0	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 643  : 
; 644  :          // 1999-09-01
; 645  :          // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 646  :          // We must NULL terminate the string before letting CString have the buffer back.
; 647  : 
; 648  :          destination[ number_of_bytes_encoded + 1 ] = 0;

  002a4	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  002a8	ff c0		 inc	 eax
  002aa	8b c0		 mov	 eax, eax
  002ac	33 c9		 xor	 ecx, ecx
  002ae	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  002b3	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 649  : 
; 650  :          destination_string.ReleaseBuffer( -1 );

  002b7	ba ff ff ff ff	 mov	 edx, -1
  002bc	48 8b 8c 24 e0
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  002c4	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 651  : 
; 652  :          return( TRUE );

  002c9	b8 01 00 00 00	 mov	 eax, 1
  002ce	e9 1b 01 00 00	 jmp	 $LN1@Encode

; 653  :       }

  002d3	eb 12		 jmp	 SHORT $LN7@Encode
$LN6@Encode:

; 654  :       else
; 655  :       {
; 656  :          byte_3 = input_buffer[ loop_index ];

  002d5	48 63 44 24 2c	 movsxd	 rax, DWORD PTR loop_index$[rsp]
  002da	48 8b 4c 24 40	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  002df	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  002e3	88 44 24 29	 mov	 BYTE PTR byte_3$[rsp], al
$LN7@Encode:

; 657  :       }
; 658  : 
; 659  :       loop_index++;

  002e7	8b 44 24 2c	 mov	 eax, DWORD PTR loop_index$[rsp]
  002eb	ff c0		 inc	 eax
  002ed	89 44 24 2c	 mov	 DWORD PTR loop_index$[rsp], eax

; 660  : 
; 661  :       byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  002f1	0f b6 44 24 28	 movzx	 eax, BYTE PTR byte_2$[rsp]
  002f6	83 e0 0f	 and	 eax, 15
  002f9	c1 e0 02	 shl	 eax, 2
  002fc	0f b6 4c 24 29	 movzx	 ecx, BYTE PTR byte_3$[rsp]
  00301	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00307	c1 f9 06	 sar	 ecx, 6
  0030a	0b c1		 or	 eax, ecx
  0030c	48 98		 cdqe
  0030e	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00313	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 662  : 
; 663  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00317	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  0031c	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  00320	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00325	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 664  :       number_of_bytes_encoded++;

  00329	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0032d	ff c0		 inc	 eax
  0032f	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 665  : 
; 666  :       byte_to_add = alphabet[ ( byte_3 & 0x3F ) ];

  00333	0f b6 44 24 29	 movzx	 eax, BYTE PTR byte_3$[rsp]
  00338	83 e0 3f	 and	 eax, 63			; 0000003fH
  0033b	48 98		 cdqe
  0033d	0f b6 44 04 50	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00342	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 667  : 
; 668  :       destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add );

  00346	0f b6 44 24 20	 movzx	 eax, BYTE PTR byte_to_add$[rsp]
  0034b	8b 4c 24 24	 mov	 ecx, DWORD PTR number_of_bytes_encoded$[rsp]
  0034f	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00354	66 89 04 4a	 mov	 WORD PTR [rdx+rcx*2], ax

; 669  :       number_of_bytes_encoded++;

  00358	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0035c	ff c0		 inc	 eax
  0035e	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 670  : 
; 671  :       if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 )

  00362	33 d2		 xor	 edx, edx
  00364	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00368	b9 48 00 00 00	 mov	 ecx, 72			; 00000048H
  0036d	f7 f1		 div	 ecx
  0036f	8b c2		 mov	 eax, edx
  00371	85 c0		 test	 eax, eax
  00373	75 38		 jne	 SHORT $LN8@Encode

; 672  :       {
; 673  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( CARRIAGE_RETURN );

  00375	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00379	b9 0d 00 00 00	 mov	 ecx, 13
  0037e	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  00383	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 674  :          number_of_bytes_encoded++;

  00387	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  0038b	ff c0		 inc	 eax
  0038d	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax

; 675  : 
; 676  :          destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( LINE_FEED );

  00391	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  00395	b9 0a 00 00 00	 mov	 ecx, 10
  0039a	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  0039f	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 677  :          number_of_bytes_encoded++;

  003a3	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  003a7	ff c0		 inc	 eax
  003a9	89 44 24 24	 mov	 DWORD PTR number_of_bytes_encoded$[rsp], eax
$LN8@Encode:

; 678  :       }
; 679  :    }

  003ad	e9 20 fd ff ff	 jmp	 $LN2@Encode
$LN3@Encode:

; 680  : 
; 681  :    destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA );

  003b2	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  003b6	b9 3d 00 00 00	 mov	 ecx, 61			; 0000003dH
  003bb	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  003c0	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 682  : 
; 683  :    // 1999-09-01
; 684  :    // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here.
; 685  :    // We must NULL terminate the string before letting CString have the buffer back.
; 686  : 
; 687  :    destination[ number_of_bytes_encoded + 1 ] = 0;

  003c4	8b 44 24 24	 mov	 eax, DWORD PTR number_of_bytes_encoded$[rsp]
  003c8	ff c0		 inc	 eax
  003ca	8b c0		 mov	 eax, eax
  003cc	33 c9		 xor	 ecx, ecx
  003ce	48 8b 54 24 30	 mov	 rdx, QWORD PTR destination$[rsp]
  003d3	66 89 0c 42	 mov	 WORD PTR [rdx+rax*2], cx

; 688  : 
; 689  :    destination_string.ReleaseBuffer( -1 );

  003d7	ba ff ff ff ff	 mov	 edx, -1
  003dc	48 8b 8c 24 e0
	00 00 00	 mov	 rcx, QWORD PTR destination_string$[rsp]
  003e4	e8 00 00 00 00	 call	 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer

; 690  : 
; 691  :    return( TRUE );

  003e9	b8 01 00 00 00	 mov	 eax, 1
$LN1@Encode:

; 692  : }

  003ee	48 8b 8c 24 a0
	00 00 00	 mov	 rcx, QWORD PTR __$ArrayPad$[rsp]
  003f6	48 33 cc	 xor	 rcx, rsp
  003f9	e8 00 00 00 00	 call	 __security_check_cookie
  003fe	48 81 c4 b8 00
	00 00		 add	 rsp, 184		; 000000b8H
  00405	5f		 pop	 rdi
  00406	5e		 pop	 rsi
  00407	c3		 ret	 0
?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::Encode
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
_TEXT	SEGMENT
byte_to_add$ = 32
add_index$ = 36
byte_2$ = 40
byte_3$ = 41
byte_1$ = 42
source_index$ = 44
number_of_bytes_to_encode$ = 48
input_buffer$ = 56
alphabet$ = 64
__$ArrayPad$ = 144
this$ = 192
source$ = 200
destination$ = 208
?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z PROC ; CBase64Coding::Encode, COMDAT

; 448  : {

$LN9:
  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	56		 push	 rsi
  00010	57		 push	 rdi
  00011	48 81 ec a8 00
	00 00		 sub	 rsp, 168		; 000000a8H
  00018	48 8b 05 00 00
	00 00		 mov	 rax, QWORD PTR __security_cookie
  0001f	48 33 c4	 xor	 rax, rsp
  00022	48 89 84 24 90
	00 00 00	 mov	 QWORD PTR __$ArrayPad$[rsp], rax

; 449  : 
; 450  :    // We don't want to make this static so we can reduce our
; 451  :    // footprint in the library
; 452  : 
; 453  :    const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  0002a	48 8d 44 24 40	 lea	 rax, QWORD PTR alphabet$[rsp]
  0002f	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:$SG321467
  00036	48 8b f8	 mov	 rdi, rax
  00039	48 8b f1	 mov	 rsi, rcx
  0003c	b9 41 00 00 00	 mov	 ecx, 65			; 00000041H
  00041	f3 a4		 rep movsb

; 454  : 
; 455  :    int source_index              = 0;

  00043	c7 44 24 2c 00
	00 00 00	 mov	 DWORD PTR source_index$[rsp], 0

; 456  :    int number_of_bytes_to_encode = (int)source.GetSize();

  0004b	48 8b 8c 24 c8
	00 00 00	 mov	 rcx, QWORD PTR source$[rsp]
  00053	e8 00 00 00 00	 call	 ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize
  00058	89 44 24 30	 mov	 DWORD PTR number_of_bytes_to_encode$[rsp], eax

; 457  :    
; 458  :    BYTE byte_to_add = 0;

  0005c	c6 44 24 20 00	 mov	 BYTE PTR byte_to_add$[rsp], 0

; 459  :    BYTE byte_1      = 0;

  00061	c6 44 24 2a 00	 mov	 BYTE PTR byte_1$[rsp], 0

; 460  :    BYTE byte_2      = 0;

  00066	c6 44 24 28 00	 mov	 BYTE PTR byte_2$[rsp], 0

; 461  :    BYTE byte_3      = 0;

  0006b	c6 44 24 29 00	 mov	 BYTE PTR byte_3$[rsp], 0

; 462  : 
; 463  :    const BYTE * input_buffer = source.GetData();

  00070	48 8b 8c 24 c8
	00 00 00	 mov	 rcx, QWORD PTR source$[rsp]
  00078	e8 00 00 00 00	 call	 ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData
  0007d	48 89 44 24 38	 mov	 QWORD PTR input_buffer$[rsp], rax

; 464  : 
; 465  :    DWORD add_index = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1;

  00082	f2 0f 2a 44 24
	30		 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rsp]
  00088	f2 0f 5e 05 00
	00 00 00	 divsd	 xmm0, QWORD PTR __real@3fe8000000000000
  00090	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  00095	ff c0		 inc	 eax
  00097	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 466  :    add_index += ( ( number_of_bytes_to_encode % 3 ) + 1 );

  0009b	8b 44 24 30	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  0009f	99		 cdq
  000a0	b9 03 00 00 00	 mov	 ecx, 3
  000a5	f7 f9		 idiv	 ecx
  000a7	8b c2		 mov	 eax, edx
  000a9	8b 4c 24 24	 mov	 ecx, DWORD PTR add_index$[rsp]
  000ad	8d 44 01 01	 lea	 eax, DWORD PTR [rcx+rax+1]
  000b1	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 467  : 
; 468  :    destination.SetSize( add_index );

  000b5	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  000b9	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  000c0	8b d0		 mov	 edx, eax
  000c2	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  000ca	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 469  :    add_index = 0;

  000cf	c7 44 24 24 00
	00 00 00	 mov	 DWORD PTR add_index$[rsp], 0
$LN2@Encode:

; 470  : 
; 471  :    while( source_index < number_of_bytes_to_encode )

  000d7	8b 44 24 30	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  000db	39 44 24 2c	 cmp	 DWORD PTR source_index$[rsp], eax
  000df	0f 8d bb 02 00
	00		 jge	 $LN3@Encode

; 472  :    {
; 473  :       // Output the first byte
; 474  : 
; 475  :       byte_1 = input_buffer[ source_index ];

  000e5	48 63 44 24 2c	 movsxd	 rax, DWORD PTR source_index$[rsp]
  000ea	48 8b 4c 24 38	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  000ef	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  000f3	88 44 24 2a	 mov	 BYTE PTR byte_1$[rsp], al

; 476  :       byte_to_add = alphabet[ ( byte_1 >> 2 ) ];

  000f7	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  000fc	c1 f8 02	 sar	 eax, 2
  000ff	48 98		 cdqe
  00101	0f b6 44 04 40	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00106	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 477  : 
; 478  :       destination.SetAt( add_index, byte_to_add );

  0010a	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  0010e	44 0f b6 44 24
	20		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  00114	8b d0		 mov	 edx, eax
  00116	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  0011e	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 479  :       add_index++;

  00123	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  00127	ff c0		 inc	 eax
  00129	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 480  : 
; 481  :       source_index++;

  0012d	8b 44 24 2c	 mov	 eax, DWORD PTR source_index$[rsp]
  00131	ff c0		 inc	 eax
  00133	89 44 24 2c	 mov	 DWORD PTR source_index$[rsp], eax

; 482  : 
; 483  :       if ( source_index >= number_of_bytes_to_encode )

  00137	8b 44 24 30	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  0013b	39 44 24 2c	 cmp	 DWORD PTR source_index$[rsp], eax
  0013f	0f 8c b4 00 00
	00		 jl	 $LN4@Encode

; 484  :       {
; 485  :          // We're at the end of the data to encode
; 486  : 
; 487  :          byte_2 = 0;

  00145	c6 44 24 28 00	 mov	 BYTE PTR byte_2$[rsp], 0

; 488  :          byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  0014a	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  0014f	83 e0 03	 and	 eax, 3
  00152	c1 e0 04	 shl	 eax, 4
  00155	0f b6 4c 24 28	 movzx	 ecx, BYTE PTR byte_2$[rsp]
  0015a	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  00160	c1 f9 04	 sar	 ecx, 4
  00163	0b c1		 or	 eax, ecx
  00165	48 98		 cdqe
  00167	0f b6 44 04 40	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  0016c	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 489  : 
; 490  :          destination.SetAt( add_index, byte_to_add );

  00170	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  00174	44 0f b6 44 24
	20		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  0017a	8b d0		 mov	 edx, eax
  0017c	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  00184	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 491  :          add_index++;

  00189	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  0018d	ff c0		 inc	 eax
  0018f	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 492  : 
; 493  :          destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA );

  00193	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  00197	41 b0 3d	 mov	 r8b, 61			; 0000003dH
  0019a	8b d0		 mov	 edx, eax
  0019c	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  001a4	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 494  :          add_index++;

  001a9	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  001ad	ff c0		 inc	 eax
  001af	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 495  : 
; 496  :          destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA );

  001b3	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  001b7	41 b0 3d	 mov	 r8b, 61			; 0000003dH
  001ba	8b d0		 mov	 edx, eax
  001bc	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  001c4	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 497  :          add_index++;

  001c9	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  001cd	ff c0		 inc	 eax
  001cf	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 498  : 
; 499  :          destination.SetSize( add_index );

  001d3	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  001d7	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  001de	8b d0		 mov	 edx, eax
  001e0	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  001e8	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 500  :          return( TRUE );

  001ed	b8 01 00 00 00	 mov	 eax, 1
  001f2	e9 e8 01 00 00	 jmp	 $LN1@Encode

; 501  :       }

  001f7	eb 12		 jmp	 SHORT $LN5@Encode
$LN4@Encode:

; 502  :       else
; 503  :       {
; 504  :          byte_2 = input_buffer[ source_index ];

  001f9	48 63 44 24 2c	 movsxd	 rax, DWORD PTR source_index$[rsp]
  001fe	48 8b 4c 24 38	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  00203	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  00207	88 44 24 28	 mov	 BYTE PTR byte_2$[rsp], al
$LN5@Encode:

; 505  :       }
; 506  : 
; 507  :       byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ];

  0020b	0f b6 44 24 2a	 movzx	 eax, BYTE PTR byte_1$[rsp]
  00210	83 e0 03	 and	 eax, 3
  00213	c1 e0 04	 shl	 eax, 4
  00216	0f b6 4c 24 28	 movzx	 ecx, BYTE PTR byte_2$[rsp]
  0021b	81 e1 f0 00 00
	00		 and	 ecx, 240		; 000000f0H
  00221	c1 f9 04	 sar	 ecx, 4
  00224	0b c1		 or	 eax, ecx
  00226	48 98		 cdqe
  00228	0f b6 44 04 40	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  0022d	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 508  :       destination.SetAt( add_index, byte_to_add );

  00231	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  00235	44 0f b6 44 24
	20		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  0023b	8b d0		 mov	 edx, eax
  0023d	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  00245	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 509  :       add_index++;

  0024a	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  0024e	ff c0		 inc	 eax
  00250	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 510  : 
; 511  :       source_index++;

  00254	8b 44 24 2c	 mov	 eax, DWORD PTR source_index$[rsp]
  00258	ff c0		 inc	 eax
  0025a	89 44 24 2c	 mov	 DWORD PTR source_index$[rsp], eax

; 512  : 
; 513  :       if ( source_index >= number_of_bytes_to_encode )

  0025e	8b 44 24 30	 mov	 eax, DWORD PTR number_of_bytes_to_encode$[rsp]
  00262	39 44 24 2c	 cmp	 DWORD PTR source_index$[rsp], eax
  00266	0f 8c 94 00 00
	00		 jl	 $LN6@Encode

; 514  :       {
; 515  :          // We ran out of bytes, we need to add the last half of byte_2 and pad
; 516  :          byte_3 = 0;

  0026c	c6 44 24 29 00	 mov	 BYTE PTR byte_3$[rsp], 0

; 517  : 
; 518  :          byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  00271	0f b6 44 24 28	 movzx	 eax, BYTE PTR byte_2$[rsp]
  00276	83 e0 0f	 and	 eax, 15
  00279	c1 e0 02	 shl	 eax, 2
  0027c	0f b6 4c 24 29	 movzx	 ecx, BYTE PTR byte_3$[rsp]
  00281	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00287	c1 f9 06	 sar	 ecx, 6
  0028a	0b c1		 or	 eax, ecx
  0028c	48 98		 cdqe
  0028e	0f b6 44 04 40	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00293	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 519  : 
; 520  :          destination.SetAt( add_index, byte_to_add );

  00297	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  0029b	44 0f b6 44 24
	20		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  002a1	8b d0		 mov	 edx, eax
  002a3	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  002ab	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 521  :          add_index++;

  002b0	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  002b4	ff c0		 inc	 eax
  002b6	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 522  : 
; 523  :          destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA );

  002ba	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  002be	41 b0 3d	 mov	 r8b, 61			; 0000003dH
  002c1	8b d0		 mov	 edx, eax
  002c3	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  002cb	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 524  :          add_index++;

  002d0	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  002d4	ff c0		 inc	 eax
  002d6	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 525  : 
; 526  :          destination.SetSize( add_index );

  002da	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  002de	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  002e5	8b d0		 mov	 edx, eax
  002e7	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  002ef	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 527  :          return( TRUE );

  002f4	b8 01 00 00 00	 mov	 eax, 1
  002f9	e9 e1 00 00 00	 jmp	 $LN1@Encode

; 528  :       }

  002fe	eb 12		 jmp	 SHORT $LN7@Encode
$LN6@Encode:

; 529  :       else
; 530  :       {
; 531  :          byte_3 = input_buffer[ source_index ];

  00300	48 63 44 24 2c	 movsxd	 rax, DWORD PTR source_index$[rsp]
  00305	48 8b 4c 24 38	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  0030a	0f b6 04 01	 movzx	 eax, BYTE PTR [rcx+rax]
  0030e	88 44 24 29	 mov	 BYTE PTR byte_3$[rsp], al
$LN7@Encode:

; 532  :       }
; 533  : 
; 534  :       source_index++;

  00312	8b 44 24 2c	 mov	 eax, DWORD PTR source_index$[rsp]
  00316	ff c0		 inc	 eax
  00318	89 44 24 2c	 mov	 DWORD PTR source_index$[rsp], eax

; 535  : 
; 536  :       byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ];

  0031c	0f b6 44 24 28	 movzx	 eax, BYTE PTR byte_2$[rsp]
  00321	83 e0 0f	 and	 eax, 15
  00324	c1 e0 02	 shl	 eax, 2
  00327	0f b6 4c 24 29	 movzx	 ecx, BYTE PTR byte_3$[rsp]
  0032c	81 e1 c0 00 00
	00		 and	 ecx, 192		; 000000c0H
  00332	c1 f9 06	 sar	 ecx, 6
  00335	0b c1		 or	 eax, ecx
  00337	48 98		 cdqe
  00339	0f b6 44 04 40	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  0033e	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 537  : 
; 538  :       destination.SetAt( add_index, byte_to_add );

  00342	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  00346	44 0f b6 44 24
	20		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  0034c	8b d0		 mov	 edx, eax
  0034e	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  00356	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 539  :       add_index++;

  0035b	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  0035f	ff c0		 inc	 eax
  00361	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 540  : 
; 541  :       byte_to_add = alphabet[ ( byte_3 & 0x3F ) ];

  00365	0f b6 44 24 29	 movzx	 eax, BYTE PTR byte_3$[rsp]
  0036a	83 e0 3f	 and	 eax, 63			; 0000003fH
  0036d	48 98		 cdqe
  0036f	0f b6 44 04 40	 movzx	 eax, BYTE PTR alphabet$[rsp+rax]
  00374	88 44 24 20	 mov	 BYTE PTR byte_to_add$[rsp], al

; 542  : 
; 543  :       destination.SetAt( add_index, byte_to_add );

  00378	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  0037c	44 0f b6 44 24
	20		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  00382	8b d0		 mov	 edx, eax
  00384	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  0038c	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 544  :       add_index++;

  00391	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  00395	ff c0		 inc	 eax
  00397	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 545  :    }

  0039b	e9 37 fd ff ff	 jmp	 $LN2@Encode
$LN3@Encode:

; 546  : 
; 547  :    destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA );

  003a0	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  003a4	41 b0 3d	 mov	 r8b, 61			; 0000003dH
  003a7	8b d0		 mov	 edx, eax
  003a9	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  003b1	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 548  :    add_index++;

  003b6	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  003ba	ff c0		 inc	 eax
  003bc	89 44 24 24	 mov	 DWORD PTR add_index$[rsp], eax

; 549  : 
; 550  :    destination.SetSize( add_index );

  003c0	8b 44 24 24	 mov	 eax, DWORD PTR add_index$[rsp]
  003c4	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  003cb	8b d0		 mov	 edx, eax
  003cd	48 8b 8c 24 d0
	00 00 00	 mov	 rcx, QWORD PTR destination$[rsp]
  003d5	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 551  :    return( TRUE );

  003da	b8 01 00 00 00	 mov	 eax, 1
$LN1@Encode:

; 552  : }

  003df	48 8b 8c 24 90
	00 00 00	 mov	 rcx, QWORD PTR __$ArrayPad$[rsp]
  003e7	48 33 cc	 xor	 rcx, rsp
  003ea	e8 00 00 00 00	 call	 __security_check_cookie
  003ef	48 81 c4 a8 00
	00 00		 add	 rsp, 168		; 000000a8H
  003f6	5f		 pop	 rdi
  003f7	5e		 pop	 rsi
  003f8	c3		 ret	 0
?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ENDP ; CBase64Coding::Encode
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z
_TEXT	SEGMENT
character_3$ = 32
character_4$ = 33
character_2$ = 34
character_1$ = 35
byte_to_add$ = 36
add_index$ = 40
number_of_bytes_to_decode$ = 44
index$ = 48
input_buffer$ = 56
return_value$ = 64
this$ = 96
source$ = 104
destination$ = 112
?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z PROC ; CBase64Coding::Decode, COMDAT

; 302  : {

$LN23:
  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	48 83 ec 58	 sub	 rsp, 88			; 00000058H

; 303  : 
; 304  :    if ( m_DecoderTable[ 0 ] == 0x00 )

  00013	b8 01 00 00 00	 mov	 eax, 1
  00018	48 6b c0 00	 imul	 rax, rax, 0
  0001c	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  00021	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00026	85 c0		 test	 eax, eax
  00028	75 0f		 jne	 SHORT $LN4@Decode

; 305  :    {
; 306  :       m_InitializeDecoderTable();

  0002a	48 8b 44 24 60	 mov	 rax, QWORD PTR this$[rsp]
  0002f	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00032	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  00037	ff 10		 call	 QWORD PTR [rax]
$LN4@Decode:

; 307  :    }
; 308  : 
; 309  :    BOOL return_value = TRUE; //Ĭ�Ϸ��سɹ�

  00039	c7 44 24 40 01
	00 00 00	 mov	 DWORD PTR return_value$[rsp], 1

; 310  : 
; 311  :    BYTE byte_to_add = 0;

  00041	c6 44 24 24 00	 mov	 BYTE PTR byte_to_add$[rsp], 0

; 312  :    BYTE character_1 = 0;

  00046	c6 44 24 23 00	 mov	 BYTE PTR character_1$[rsp], 0

; 313  :    BYTE character_2 = 0;

  0004b	c6 44 24 22 00	 mov	 BYTE PTR character_2$[rsp], 0

; 314  :    BYTE character_3 = 0;

  00050	c6 44 24 20 00	 mov	 BYTE PTR character_3$[rsp], 0

; 315  :    BYTE character_4 = 0;

  00055	c6 44 24 21 00	 mov	 BYTE PTR character_4$[rsp], 0

; 316  : 
; 317  :    int index                     = 0;

  0005a	c7 44 24 30 00
	00 00 00	 mov	 DWORD PTR index$[rsp], 0

; 318  :    int number_of_bytes_to_decode = source.GetLength();

  00062	48 8b 4c 24 68	 mov	 rcx, QWORD PTR source$[rsp]
  00067	e8 00 00 00 00	 call	 ?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ ; ATL::CSimpleStringT<char,0>::GetLength
  0006c	89 44 24 2c	 mov	 DWORD PTR number_of_bytes_to_decode$[rsp], eax

; 319  : 
; 320  :    DWORD add_index = (DWORD) ( (double) number_of_bytes_to_decode * (double) 0.75 ) + 1;

  00070	f2 0f 2a 44 24
	2c		 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_decode$[rsp]
  00076	f2 0f 59 05 00
	00 00 00	 mulsd	 xmm0, QWORD PTR __real@3fe8000000000000
  0007e	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  00083	ff c0		 inc	 eax
  00085	89 44 24 28	 mov	 DWORD PTR add_index$[rsp], eax

; 321  : 
; 322  :    destination.SetSize( add_index );

  00089	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  0008d	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00094	8b d0		 mov	 edx, eax
  00096	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  0009b	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 323  :    add_index = 0;

  000a0	c7 44 24 28 00
	00 00 00	 mov	 DWORD PTR add_index$[rsp], 0

; 324  : 
; 325  :    // Since we're decoding, we are most likely in a performance-minded
; 326  :    // part of an application, let's go for a speedy method for accessing
; 327  :    // the source data.
; 328  : 
; 329  :    char * input_buffer = (char*)(const char *)source;

  000a8	48 8b 4c 24 68	 mov	 rcx, QWORD PTR source$[rsp]
  000ad	e8 00 00 00 00	 call	 ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ ; ATL::CSimpleStringT<char,0>::operator char const *
  000b2	48 89 44 24 38	 mov	 QWORD PTR input_buffer$[rsp], rax
$LN2@Decode:

; 330  : 
; 331  :    while( index < number_of_bytes_to_decode )

  000b7	8b 44 24 2c	 mov	 eax, DWORD PTR number_of_bytes_to_decode$[rsp]
  000bb	39 44 24 30	 cmp	 DWORD PTR index$[rsp], eax
  000bf	0f 8d 3d 03 00
	00		 jge	 $LN3@Decode

; 332  :    {
; 333  :       character_1 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode );

  000c5	48 8b 44 24 60	 mov	 rax, QWORD PTR this$[rsp]
  000ca	48 83 c0 08	 add	 rax, 8
  000ce	44 8b 4c 24 2c	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rsp]
  000d3	4c 8d 44 24 30	 lea	 r8, QWORD PTR index$[rsp]
  000d8	48 8b d0	 mov	 rdx, rax
  000db	48 8b 4c 24 38	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  000e0	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  000e5	88 44 24 23	 mov	 BYTE PTR character_1$[rsp], al

; 334  : 
; 335  :       if ( character_1 != END_OF_BASE64_ENCODED_DATA )

  000e9	0f b6 44 24 23	 movzx	 eax, BYTE PTR character_1$[rsp]
  000ee	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  000f1	0f 84 78 01 00
	00		 je	 $LN5@Decode

; 336  :       {
; 337  :          if ( m_DecoderTable[ character_1 ] == BASE64_UNKNOWN_VALUE )

  000f7	0f b6 44 24 23	 movzx	 eax, BYTE PTR character_1$[rsp]
  000fc	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  00101	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00106	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  0010b	75 11		 jne	 SHORT $LN7@Decode

; 338  :          {
; 339  :             destination.RemoveAll();

  0010d	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  00112	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 340  :             return( FALSE );

  00117	33 c0		 xor	 eax, eax
  00119	e9 ff 02 00 00	 jmp	 $LN1@Decode
$LN7@Decode:

; 341  :          }
; 342  : 
; 343  :          character_2 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode );

  0011e	48 8b 44 24 60	 mov	 rax, QWORD PTR this$[rsp]
  00123	48 83 c0 08	 add	 rax, 8
  00127	44 8b 4c 24 2c	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rsp]
  0012c	4c 8d 44 24 30	 lea	 r8, QWORD PTR index$[rsp]
  00131	48 8b d0	 mov	 rdx, rax
  00134	48 8b 4c 24 38	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  00139	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  0013e	88 44 24 22	 mov	 BYTE PTR character_2$[rsp], al

; 344  : 
; 345  :          if ( character_2 != END_OF_BASE64_ENCODED_DATA )

  00142	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  00147	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  0014a	0f 84 13 01 00
	00		 je	 $LN8@Decode

; 346  :          {
; 347  :             if ( m_DecoderTable[ character_2 ] == BASE64_UNKNOWN_VALUE )

  00150	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  00155	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  0015a	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  0015f	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  00164	75 11		 jne	 SHORT $LN10@Decode

; 348  :             {
; 349  :                destination.RemoveAll();

  00166	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  0016b	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 350  :                return( FALSE );

  00170	33 c0		 xor	 eax, eax
  00172	e9 a6 02 00 00	 jmp	 $LN1@Decode
$LN10@Decode:

; 351  :             }
; 352  : 
; 353  :             character_3 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode );

  00177	48 8b 44 24 60	 mov	 rax, QWORD PTR this$[rsp]
  0017c	48 83 c0 08	 add	 rax, 8
  00180	44 8b 4c 24 2c	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rsp]
  00185	4c 8d 44 24 30	 lea	 r8, QWORD PTR index$[rsp]
  0018a	48 8b d0	 mov	 rdx, rax
  0018d	48 8b 4c 24 38	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  00192	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  00197	88 44 24 20	 mov	 BYTE PTR character_3$[rsp], al

; 354  : 
; 355  :             if ( character_3 != END_OF_BASE64_ENCODED_DATA )

  0019b	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  001a0	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  001a3	0f 84 b3 00 00
	00		 je	 $LN11@Decode

; 356  :             {
; 357  :                if ( m_DecoderTable[ character_3 ] == BASE64_UNKNOWN_VALUE )

  001a9	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  001ae	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  001b3	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  001b8	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  001bd	75 11		 jne	 SHORT $LN13@Decode

; 358  :                {
; 359  :                   destination.RemoveAll();

  001bf	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  001c4	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 360  :                   return( FALSE );

  001c9	33 c0		 xor	 eax, eax
  001cb	e9 4d 02 00 00	 jmp	 $LN1@Decode
$LN13@Decode:

; 361  :                }
; 362  : 
; 363  :                character_4 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode );

  001d0	48 8b 44 24 60	 mov	 rax, QWORD PTR this$[rsp]
  001d5	48 83 c0 08	 add	 rax, 8
  001d9	44 8b 4c 24 2c	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rsp]
  001de	4c 8d 44 24 30	 lea	 r8, QWORD PTR index$[rsp]
  001e3	48 8b d0	 mov	 rdx, rax
  001e6	48 8b 4c 24 38	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  001eb	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  001f0	88 44 24 21	 mov	 BYTE PTR character_4$[rsp], al

; 364  : 
; 365  :                if ( character_4 != END_OF_BASE64_ENCODED_DATA )

  001f4	0f b6 44 24 21	 movzx	 eax, BYTE PTR character_4$[rsp]
  001f9	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  001fc	74 27		 je	 SHORT $LN14@Decode

; 366  :                {
; 367  :                   if ( m_DecoderTable[ character_4 ] == BASE64_UNKNOWN_VALUE )

  001fe	0f b6 44 24 21	 movzx	 eax, BYTE PTR character_4$[rsp]
  00203	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  00208	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  0020d	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  00212	75 11		 jne	 SHORT $LN15@Decode

; 368  :                   {
; 369  :                      destination.RemoveAll();

  00214	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  00219	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 370  :                      return( FALSE );

  0021e	33 c0		 xor	 eax, eax
  00220	e9 f8 01 00 00	 jmp	 $LN1@Decode
$LN15@Decode:
$LN14@Decode:

; 371  :                   }
; 372  :                }
; 373  : 
; 374  :                if ( character_2 == BASE64_END_OF_BUFFER ||
; 375  :                     character_3 == BASE64_END_OF_BUFFER ||

  00225	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  0022a	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  0022f	74 18		 je	 SHORT $LN17@Decode
  00231	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  00236	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  0023b	74 0c		 je	 SHORT $LN17@Decode
  0023d	0f b6 44 24 21	 movzx	 eax, BYTE PTR character_4$[rsp]
  00242	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  00247	75 11		 jne	 SHORT $LN16@Decode
$LN17@Decode:

; 376  :                     character_4 == BASE64_END_OF_BUFFER )
; 377  :                { 
; 378  :                   destination.RemoveAll();

  00249	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  0024e	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 379  :                   return( FALSE );

  00253	33 c0		 xor	 eax, eax
  00255	e9 c3 01 00 00	 jmp	 $LN1@Decode
$LN16@Decode:

; 380  :                }
; 381  :             }

  0025a	eb 05		 jmp	 SHORT $LN12@Decode
$LN11@Decode:

; 382  :             else
; 383  :             {
; 384  :                character_4 = END_OF_BASE64_ENCODED_DATA;

  0025c	c6 44 24 21 3d	 mov	 BYTE PTR character_4$[rsp], 61 ; 0000003dH
$LN12@Decode:

; 385  :             }
; 386  :          }

  00261	eb 0a		 jmp	 SHORT $LN9@Decode
$LN8@Decode:

; 387  :          else
; 388  :          {
; 389  :             character_3 = END_OF_BASE64_ENCODED_DATA;

  00263	c6 44 24 20 3d	 mov	 BYTE PTR character_3$[rsp], 61 ; 0000003dH

; 390  :             character_4 = END_OF_BASE64_ENCODED_DATA;

  00268	c6 44 24 21 3d	 mov	 BYTE PTR character_4$[rsp], 61 ; 0000003dH
$LN9@Decode:

; 391  :          }
; 392  :       }

  0026d	eb 0f		 jmp	 SHORT $LN6@Decode
$LN5@Decode:

; 393  :       else
; 394  :       {
; 395  :          character_2 = END_OF_BASE64_ENCODED_DATA;

  0026f	c6 44 24 22 3d	 mov	 BYTE PTR character_2$[rsp], 61 ; 0000003dH

; 396  :          character_3 = END_OF_BASE64_ENCODED_DATA;

  00274	c6 44 24 20 3d	 mov	 BYTE PTR character_3$[rsp], 61 ; 0000003dH

; 397  :          character_4 = END_OF_BASE64_ENCODED_DATA;

  00279	c6 44 24 21 3d	 mov	 BYTE PTR character_4$[rsp], 61 ; 0000003dH
$LN6@Decode:

; 398  :       }
; 399  : 
; 400  :       if ( character_1 == END_OF_BASE64_ENCODED_DATA ||

  0027e	0f b6 44 24 23	 movzx	 eax, BYTE PTR character_1$[rsp]
  00283	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00286	74 0a		 je	 SHORT $LN19@Decode
  00288	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  0028d	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00290	75 21		 jne	 SHORT $LN18@Decode
$LN19@Decode:

; 401  :            character_2 == END_OF_BASE64_ENCODED_DATA )
; 402  :       {
; 403  :          destination.SetSize( add_index );

  00292	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  00296	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  0029d	8b d0		 mov	 edx, eax
  0029f	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  002a4	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 404  :          return( TRUE );

  002a9	b8 01 00 00 00	 mov	 eax, 1
  002ae	e9 6a 01 00 00	 jmp	 $LN1@Decode
$LN18@Decode:

; 405  :       }
; 406  : 
; 407  :       character_1 = m_DecoderTable[ character_1 ];

  002b3	0f b6 44 24 23	 movzx	 eax, BYTE PTR character_1$[rsp]
  002b8	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  002bd	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  002c2	88 44 24 23	 mov	 BYTE PTR character_1$[rsp], al

; 408  :       character_2 = m_DecoderTable[ character_2 ];

  002c6	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  002cb	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  002d0	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  002d5	88 44 24 22	 mov	 BYTE PTR character_2$[rsp], al

; 409  : 
; 410  :       byte_to_add = static_cast< BYTE>( ( ( character_1 << 2 ) | ( ( character_2 & 0x30 ) >> 4 ) ) );

  002d9	0f b6 44 24 23	 movzx	 eax, BYTE PTR character_1$[rsp]
  002de	c1 e0 02	 shl	 eax, 2
  002e1	0f b6 4c 24 22	 movzx	 ecx, BYTE PTR character_2$[rsp]
  002e6	83 e1 30	 and	 ecx, 48			; 00000030H
  002e9	c1 f9 04	 sar	 ecx, 4
  002ec	0b c1		 or	 eax, ecx
  002ee	88 44 24 24	 mov	 BYTE PTR byte_to_add$[rsp], al

; 411  : 
; 412  :       destination.SetAt( add_index, byte_to_add );

  002f2	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  002f6	44 0f b6 44 24
	24		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  002fc	8b d0		 mov	 edx, eax
  002fe	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  00303	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 413  :       add_index++;

  00308	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  0030c	ff c0		 inc	 eax
  0030e	89 44 24 28	 mov	 DWORD PTR add_index$[rsp], eax

; 414  : 
; 415  :       if ( character_3 == END_OF_BASE64_ENCODED_DATA )

  00312	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  00317	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  0031a	75 21		 jne	 SHORT $LN20@Decode

; 416  :       {
; 417  :          destination.SetSize( add_index );

  0031c	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  00320	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00327	8b d0		 mov	 edx, eax
  00329	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  0032e	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 418  :          return( TRUE );

  00333	b8 01 00 00 00	 mov	 eax, 1
  00338	e9 e0 00 00 00	 jmp	 $LN1@Decode
$LN20@Decode:

; 419  :       }
; 420  : 
; 421  :       character_3 = m_DecoderTable[ character_3 ];

  0033d	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  00342	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  00347	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  0034c	88 44 24 20	 mov	 BYTE PTR character_3$[rsp], al

; 422  : 
; 423  :       byte_to_add = static_cast< BYTE >( ( ( ( ( character_2 & 0x0F ) << 4 ) | ( ( character_3 & 0x3C ) >> 2 ) ) ) );

  00350	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  00355	83 e0 0f	 and	 eax, 15
  00358	c1 e0 04	 shl	 eax, 4
  0035b	0f b6 4c 24 20	 movzx	 ecx, BYTE PTR character_3$[rsp]
  00360	83 e1 3c	 and	 ecx, 60			; 0000003cH
  00363	c1 f9 02	 sar	 ecx, 2
  00366	0b c1		 or	 eax, ecx
  00368	88 44 24 24	 mov	 BYTE PTR byte_to_add$[rsp], al

; 424  : 
; 425  :       destination.SetAt( add_index, byte_to_add );

  0036c	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  00370	44 0f b6 44 24
	24		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  00376	8b d0		 mov	 edx, eax
  00378	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  0037d	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 426  :       add_index++;

  00382	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  00386	ff c0		 inc	 eax
  00388	89 44 24 28	 mov	 DWORD PTR add_index$[rsp], eax

; 427  : 
; 428  :       if ( character_4 == END_OF_BASE64_ENCODED_DATA )

  0038c	0f b6 44 24 21	 movzx	 eax, BYTE PTR character_4$[rsp]
  00391	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00394	75 1e		 jne	 SHORT $LN21@Decode

; 429  :       {
; 430  :          destination.SetSize( add_index );

  00396	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  0039a	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  003a1	8b d0		 mov	 edx, eax
  003a3	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  003a8	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 431  :          return( TRUE );

  003ad	b8 01 00 00 00	 mov	 eax, 1
  003b2	eb 69		 jmp	 SHORT $LN1@Decode
$LN21@Decode:

; 432  :       }
; 433  : 
; 434  :       character_4 = m_DecoderTable[ character_4 ];

  003b4	0f b6 44 24 21	 movzx	 eax, BYTE PTR character_4$[rsp]
  003b9	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  003be	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  003c3	88 44 24 21	 mov	 BYTE PTR character_4$[rsp], al

; 435  : 
; 436  :       byte_to_add = static_cast< BYTE >( ( ( ( character_3 & 0x03 ) << 6 ) | character_4 ) );

  003c7	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  003cc	83 e0 03	 and	 eax, 3
  003cf	c1 e0 06	 shl	 eax, 6
  003d2	0f b6 4c 24 21	 movzx	 ecx, BYTE PTR character_4$[rsp]
  003d7	0b c1		 or	 eax, ecx
  003d9	88 44 24 24	 mov	 BYTE PTR byte_to_add$[rsp], al

; 437  : 
; 438  :       destination.SetAt( add_index, byte_to_add );

  003dd	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  003e1	44 0f b6 44 24
	24		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  003e7	8b d0		 mov	 edx, eax
  003e9	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  003ee	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 439  :       add_index++;

  003f3	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  003f7	ff c0		 inc	 eax
  003f9	89 44 24 28	 mov	 DWORD PTR add_index$[rsp], eax

; 440  :    }

  003fd	e9 b5 fc ff ff	 jmp	 $LN2@Decode
$LN3@Decode:

; 441  : 
; 442  :    destination.SetSize( add_index );

  00402	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  00406	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  0040d	8b d0		 mov	 edx, eax
  0040f	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  00414	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 443  : 
; 444  :    return( return_value );

  00419	8b 44 24 40	 mov	 eax, DWORD PTR return_value$[rsp]
$LN1@Decode:

; 445  : }

  0041d	48 83 c4 58	 add	 rsp, 88			; 00000058H
  00421	c3		 ret	 0
?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z ENDP ; CBase64Coding::Decode
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z
_TEXT	SEGMENT
character_3$ = 32
character_4$ = 33
character_2$ = 34
character_1$ = 35
byte_to_add$ = 36
add_index$ = 40
number_of_bytes_to_decode$ = 44
index$ = 48
input_buffer$ = 56
return_value$ = 64
this$ = 96
source$ = 104
destination$ = 112
?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z PROC ; CBase64Coding::Decode, COMDAT

; 156  : {

$LN23:
  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	48 83 ec 58	 sub	 rsp, 88			; 00000058H

; 157  : 
; 158  :    if ( m_DecoderTable[ 0 ] == 0x00 )

  00013	b8 01 00 00 00	 mov	 eax, 1
  00018	48 6b c0 00	 imul	 rax, rax, 0
  0001c	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  00021	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00026	85 c0		 test	 eax, eax
  00028	75 0f		 jne	 SHORT $LN4@Decode

; 159  :    {
; 160  :       m_InitializeDecoderTable();

  0002a	48 8b 44 24 60	 mov	 rax, QWORD PTR this$[rsp]
  0002f	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00032	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  00037	ff 10		 call	 QWORD PTR [rax]
$LN4@Decode:

; 161  :    }
; 162  : 
; 163  :    BOOL return_value = FALSE;

  00039	c7 44 24 40 00
	00 00 00	 mov	 DWORD PTR return_value$[rsp], 0

; 164  : 
; 165  :    BYTE byte_to_add = 0;

  00041	c6 44 24 24 00	 mov	 BYTE PTR byte_to_add$[rsp], 0

; 166  :    BYTE character_1 = 0;

  00046	c6 44 24 23 00	 mov	 BYTE PTR character_1$[rsp], 0

; 167  :    BYTE character_2 = 0;

  0004b	c6 44 24 22 00	 mov	 BYTE PTR character_2$[rsp], 0

; 168  :    BYTE character_3 = 0;

  00050	c6 44 24 20 00	 mov	 BYTE PTR character_3$[rsp], 0

; 169  :    BYTE character_4 = 0;

  00055	c6 44 24 21 00	 mov	 BYTE PTR character_4$[rsp], 0

; 170  : 
; 171  :    int index                     = 0;

  0005a	c7 44 24 30 00
	00 00 00	 mov	 DWORD PTR index$[rsp], 0

; 172  :    int number_of_bytes_to_decode = (int)source.GetSize();

  00062	48 8b 4c 24 68	 mov	 rcx, QWORD PTR source$[rsp]
  00067	e8 00 00 00 00	 call	 ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize
  0006c	89 44 24 2c	 mov	 DWORD PTR number_of_bytes_to_decode$[rsp], eax

; 173  : 
; 174  :    DWORD add_index = (DWORD) ( (double) number_of_bytes_to_decode * (double) 0.75 ) + 1;

  00070	f2 0f 2a 44 24
	2c		 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_decode$[rsp]
  00076	f2 0f 59 05 00
	00 00 00	 mulsd	 xmm0, QWORD PTR __real@3fe8000000000000
  0007e	f2 48 0f 2c c0	 cvttsd2si rax, xmm0
  00083	ff c0		 inc	 eax
  00085	89 44 24 28	 mov	 DWORD PTR add_index$[rsp], eax

; 175  : 
; 176  :    destination.SetSize( add_index );

  00089	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  0008d	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00094	8b d0		 mov	 edx, eax
  00096	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  0009b	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 177  :    add_index = 0;

  000a0	c7 44 24 28 00
	00 00 00	 mov	 DWORD PTR add_index$[rsp], 0

; 178  : 
; 179  :    // Since we're decoding, we are most likely in a performance-minded
; 180  :    // part of an application, let's go for a speedy method for accessing
; 181  :    // the source data.
; 182  : 
; 183  :    const BYTE * input_buffer = source.GetData();

  000a8	48 8b 4c 24 68	 mov	 rcx, QWORD PTR source$[rsp]
  000ad	e8 00 00 00 00	 call	 ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData
  000b2	48 89 44 24 38	 mov	 QWORD PTR input_buffer$[rsp], rax
$LN2@Decode:

; 184  : 
; 185  :    while( index < number_of_bytes_to_decode )

  000b7	8b 44 24 2c	 mov	 eax, DWORD PTR number_of_bytes_to_decode$[rsp]
  000bb	39 44 24 30	 cmp	 DWORD PTR index$[rsp], eax
  000bf	0f 8d 3d 03 00
	00		 jge	 $LN3@Decode

; 186  :    {
; 187  :       character_1 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode );

  000c5	48 8b 44 24 60	 mov	 rax, QWORD PTR this$[rsp]
  000ca	48 83 c0 08	 add	 rax, 8
  000ce	44 8b 4c 24 2c	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rsp]
  000d3	4c 8d 44 24 30	 lea	 r8, QWORD PTR index$[rsp]
  000d8	48 8b d0	 mov	 rdx, rax
  000db	48 8b 4c 24 38	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  000e0	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  000e5	88 44 24 23	 mov	 BYTE PTR character_1$[rsp], al

; 188  : 
; 189  :       if ( character_1 != END_OF_BASE64_ENCODED_DATA )

  000e9	0f b6 44 24 23	 movzx	 eax, BYTE PTR character_1$[rsp]
  000ee	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  000f1	0f 84 78 01 00
	00		 je	 $LN5@Decode

; 190  :       {
; 191  :          if ( m_DecoderTable[ character_1 ] == BASE64_UNKNOWN_VALUE )

  000f7	0f b6 44 24 23	 movzx	 eax, BYTE PTR character_1$[rsp]
  000fc	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  00101	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  00106	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  0010b	75 11		 jne	 SHORT $LN7@Decode

; 192  :          {
; 193  :             destination.RemoveAll();

  0010d	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  00112	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 194  :             return( FALSE );

  00117	33 c0		 xor	 eax, eax
  00119	e9 ff 02 00 00	 jmp	 $LN1@Decode
$LN7@Decode:

; 195  :          }
; 196  : 
; 197  :          character_2 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode );

  0011e	48 8b 44 24 60	 mov	 rax, QWORD PTR this$[rsp]
  00123	48 83 c0 08	 add	 rax, 8
  00127	44 8b 4c 24 2c	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rsp]
  0012c	4c 8d 44 24 30	 lea	 r8, QWORD PTR index$[rsp]
  00131	48 8b d0	 mov	 rdx, rax
  00134	48 8b 4c 24 38	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  00139	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  0013e	88 44 24 22	 mov	 BYTE PTR character_2$[rsp], al

; 198  : 
; 199  :          if ( character_2 != END_OF_BASE64_ENCODED_DATA )

  00142	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  00147	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  0014a	0f 84 13 01 00
	00		 je	 $LN8@Decode

; 200  :          {
; 201  :             if ( m_DecoderTable[ character_2 ] == BASE64_UNKNOWN_VALUE )

  00150	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  00155	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  0015a	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  0015f	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  00164	75 11		 jne	 SHORT $LN10@Decode

; 202  :             {
; 203  :                destination.RemoveAll();

  00166	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  0016b	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 204  :                return( FALSE );

  00170	33 c0		 xor	 eax, eax
  00172	e9 a6 02 00 00	 jmp	 $LN1@Decode
$LN10@Decode:

; 205  :             }
; 206  : 
; 207  :             character_3 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode );

  00177	48 8b 44 24 60	 mov	 rax, QWORD PTR this$[rsp]
  0017c	48 83 c0 08	 add	 rax, 8
  00180	44 8b 4c 24 2c	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rsp]
  00185	4c 8d 44 24 30	 lea	 r8, QWORD PTR index$[rsp]
  0018a	48 8b d0	 mov	 rdx, rax
  0018d	48 8b 4c 24 38	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  00192	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  00197	88 44 24 20	 mov	 BYTE PTR character_3$[rsp], al

; 208  : 
; 209  :             if ( character_3 != END_OF_BASE64_ENCODED_DATA )

  0019b	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  001a0	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  001a3	0f 84 b3 00 00
	00		 je	 $LN11@Decode

; 210  :             {
; 211  :                if ( m_DecoderTable[ character_3 ] == BASE64_UNKNOWN_VALUE )

  001a9	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  001ae	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  001b3	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  001b8	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  001bd	75 11		 jne	 SHORT $LN13@Decode

; 212  :                {
; 213  :                   destination.RemoveAll();

  001bf	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  001c4	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 214  :                   return( FALSE );

  001c9	33 c0		 xor	 eax, eax
  001cb	e9 4d 02 00 00	 jmp	 $LN1@Decode
$LN13@Decode:

; 215  :                }
; 216  : 
; 217  :                character_4 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode );

  001d0	48 8b 44 24 60	 mov	 rax, QWORD PTR this$[rsp]
  001d5	48 83 c0 08	 add	 rax, 8
  001d9	44 8b 4c 24 2c	 mov	 r9d, DWORD PTR number_of_bytes_to_decode$[rsp]
  001de	4c 8d 44 24 30	 lea	 r8, QWORD PTR index$[rsp]
  001e3	48 8b d0	 mov	 rdx, rax
  001e6	48 8b 4c 24 38	 mov	 rcx, QWORD PTR input_buffer$[rsp]
  001eb	e8 00 00 00 00	 call	 ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character
  001f0	88 44 24 21	 mov	 BYTE PTR character_4$[rsp], al

; 218  : 
; 219  :                if ( character_4 != END_OF_BASE64_ENCODED_DATA )

  001f4	0f b6 44 24 21	 movzx	 eax, BYTE PTR character_4$[rsp]
  001f9	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  001fc	74 27		 je	 SHORT $LN14@Decode

; 220  :                {
; 221  :                   if ( m_DecoderTable[ character_4 ] == BASE64_UNKNOWN_VALUE )

  001fe	0f b6 44 24 21	 movzx	 eax, BYTE PTR character_4$[rsp]
  00203	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  00208	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  0020d	3d ff 00 00 00	 cmp	 eax, 255		; 000000ffH
  00212	75 11		 jne	 SHORT $LN15@Decode

; 222  :                   {
; 223  :                      destination.RemoveAll();

  00214	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  00219	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 224  :                      return( FALSE );

  0021e	33 c0		 xor	 eax, eax
  00220	e9 f8 01 00 00	 jmp	 $LN1@Decode
$LN15@Decode:
$LN14@Decode:

; 225  :                   }
; 226  :                }
; 227  : 
; 228  :                if ( character_2 == BASE64_END_OF_BUFFER ||
; 229  :                     character_3 == BASE64_END_OF_BUFFER ||

  00225	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  0022a	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  0022f	74 18		 je	 SHORT $LN17@Decode
  00231	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  00236	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  0023b	74 0c		 je	 SHORT $LN17@Decode
  0023d	0f b6 44 24 21	 movzx	 eax, BYTE PTR character_4$[rsp]
  00242	3d fd 00 00 00	 cmp	 eax, 253		; 000000fdH
  00247	75 11		 jne	 SHORT $LN16@Decode
$LN17@Decode:

; 230  :                     character_4 == BASE64_END_OF_BUFFER )
; 231  :                { 
; 232  :                   destination.RemoveAll();

  00249	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  0024e	e8 00 00 00 00	 call	 ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll

; 233  :                   return( FALSE );

  00253	33 c0		 xor	 eax, eax
  00255	e9 c3 01 00 00	 jmp	 $LN1@Decode
$LN16@Decode:

; 234  :                }
; 235  :             }

  0025a	eb 05		 jmp	 SHORT $LN12@Decode
$LN11@Decode:

; 236  :             else
; 237  :             {
; 238  :                character_4 = END_OF_BASE64_ENCODED_DATA;

  0025c	c6 44 24 21 3d	 mov	 BYTE PTR character_4$[rsp], 61 ; 0000003dH
$LN12@Decode:

; 239  :             }
; 240  :          }

  00261	eb 0a		 jmp	 SHORT $LN9@Decode
$LN8@Decode:

; 241  :          else
; 242  :          {
; 243  :             character_3 = END_OF_BASE64_ENCODED_DATA;

  00263	c6 44 24 20 3d	 mov	 BYTE PTR character_3$[rsp], 61 ; 0000003dH

; 244  :             character_4 = END_OF_BASE64_ENCODED_DATA;

  00268	c6 44 24 21 3d	 mov	 BYTE PTR character_4$[rsp], 61 ; 0000003dH
$LN9@Decode:

; 245  :          }
; 246  :       }

  0026d	eb 0f		 jmp	 SHORT $LN6@Decode
$LN5@Decode:

; 247  :       else
; 248  :       {
; 249  :          character_2 = END_OF_BASE64_ENCODED_DATA;

  0026f	c6 44 24 22 3d	 mov	 BYTE PTR character_2$[rsp], 61 ; 0000003dH

; 250  :          character_3 = END_OF_BASE64_ENCODED_DATA;

  00274	c6 44 24 20 3d	 mov	 BYTE PTR character_3$[rsp], 61 ; 0000003dH

; 251  :          character_4 = END_OF_BASE64_ENCODED_DATA;

  00279	c6 44 24 21 3d	 mov	 BYTE PTR character_4$[rsp], 61 ; 0000003dH
$LN6@Decode:

; 252  :       }
; 253  : 
; 254  :       if ( character_1 == END_OF_BASE64_ENCODED_DATA ||

  0027e	0f b6 44 24 23	 movzx	 eax, BYTE PTR character_1$[rsp]
  00283	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00286	74 0a		 je	 SHORT $LN19@Decode
  00288	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  0028d	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00290	75 21		 jne	 SHORT $LN18@Decode
$LN19@Decode:

; 255  :            character_2 == END_OF_BASE64_ENCODED_DATA )
; 256  :       {
; 257  :          destination.SetSize( add_index );

  00292	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  00296	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  0029d	8b d0		 mov	 edx, eax
  0029f	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  002a4	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 258  :          return( TRUE );

  002a9	b8 01 00 00 00	 mov	 eax, 1
  002ae	e9 6a 01 00 00	 jmp	 $LN1@Decode
$LN18@Decode:

; 259  :       }
; 260  : 
; 261  :       character_1 = m_DecoderTable[ character_1 ];

  002b3	0f b6 44 24 23	 movzx	 eax, BYTE PTR character_1$[rsp]
  002b8	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  002bd	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  002c2	88 44 24 23	 mov	 BYTE PTR character_1$[rsp], al

; 262  :       character_2 = m_DecoderTable[ character_2 ];

  002c6	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  002cb	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  002d0	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  002d5	88 44 24 22	 mov	 BYTE PTR character_2$[rsp], al

; 263  : 
; 264  :       byte_to_add = static_cast< BYTE>( ( ( character_1 << 2 ) | ( ( character_2 & 0x30 ) >> 4 ) ) );

  002d9	0f b6 44 24 23	 movzx	 eax, BYTE PTR character_1$[rsp]
  002de	c1 e0 02	 shl	 eax, 2
  002e1	0f b6 4c 24 22	 movzx	 ecx, BYTE PTR character_2$[rsp]
  002e6	83 e1 30	 and	 ecx, 48			; 00000030H
  002e9	c1 f9 04	 sar	 ecx, 4
  002ec	0b c1		 or	 eax, ecx
  002ee	88 44 24 24	 mov	 BYTE PTR byte_to_add$[rsp], al

; 265  : 
; 266  :       destination.SetAt( add_index, byte_to_add );

  002f2	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  002f6	44 0f b6 44 24
	24		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  002fc	8b d0		 mov	 edx, eax
  002fe	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  00303	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 267  :       add_index++;

  00308	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  0030c	ff c0		 inc	 eax
  0030e	89 44 24 28	 mov	 DWORD PTR add_index$[rsp], eax

; 268  : 
; 269  :       if ( character_3 == END_OF_BASE64_ENCODED_DATA )

  00312	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  00317	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  0031a	75 21		 jne	 SHORT $LN20@Decode

; 270  :       {
; 271  :          destination.SetSize( add_index );

  0031c	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  00320	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00327	8b d0		 mov	 edx, eax
  00329	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  0032e	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 272  :          return( TRUE );

  00333	b8 01 00 00 00	 mov	 eax, 1
  00338	e9 e0 00 00 00	 jmp	 $LN1@Decode
$LN20@Decode:

; 273  :       }
; 274  : 
; 275  :       character_3 = m_DecoderTable[ character_3 ];

  0033d	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  00342	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  00347	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  0034c	88 44 24 20	 mov	 BYTE PTR character_3$[rsp], al

; 276  : 
; 277  :       byte_to_add = static_cast< BYTE >( ( ( ( ( character_2 & 0x0F ) << 4 ) | ( ( character_3 & 0x3C ) >> 2 ) ) ) );

  00350	0f b6 44 24 22	 movzx	 eax, BYTE PTR character_2$[rsp]
  00355	83 e0 0f	 and	 eax, 15
  00358	c1 e0 04	 shl	 eax, 4
  0035b	0f b6 4c 24 20	 movzx	 ecx, BYTE PTR character_3$[rsp]
  00360	83 e1 3c	 and	 ecx, 60			; 0000003cH
  00363	c1 f9 02	 sar	 ecx, 2
  00366	0b c1		 or	 eax, ecx
  00368	88 44 24 24	 mov	 BYTE PTR byte_to_add$[rsp], al

; 278  : 
; 279  :       destination.SetAt( add_index, byte_to_add );

  0036c	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  00370	44 0f b6 44 24
	24		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  00376	8b d0		 mov	 edx, eax
  00378	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  0037d	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 280  :       add_index++;

  00382	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  00386	ff c0		 inc	 eax
  00388	89 44 24 28	 mov	 DWORD PTR add_index$[rsp], eax

; 281  : 
; 282  :       if ( character_4 == END_OF_BASE64_ENCODED_DATA )

  0038c	0f b6 44 24 21	 movzx	 eax, BYTE PTR character_4$[rsp]
  00391	83 f8 3d	 cmp	 eax, 61			; 0000003dH
  00394	75 1e		 jne	 SHORT $LN21@Decode

; 283  :       {
; 284  :          destination.SetSize( add_index );

  00396	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  0039a	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  003a1	8b d0		 mov	 edx, eax
  003a3	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  003a8	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 285  :          return( TRUE );

  003ad	b8 01 00 00 00	 mov	 eax, 1
  003b2	eb 69		 jmp	 SHORT $LN1@Decode
$LN21@Decode:

; 286  :       }
; 287  : 
; 288  :       character_4 = m_DecoderTable[ character_4 ];

  003b4	0f b6 44 24 21	 movzx	 eax, BYTE PTR character_4$[rsp]
  003b9	48 8b 4c 24 60	 mov	 rcx, QWORD PTR this$[rsp]
  003be	0f b6 44 01 08	 movzx	 eax, BYTE PTR [rcx+rax+8]
  003c3	88 44 24 21	 mov	 BYTE PTR character_4$[rsp], al

; 289  : 
; 290  :       byte_to_add = static_cast< BYTE >( ( ( ( character_3 & 0x03 ) << 6 ) | character_4 ) );

  003c7	0f b6 44 24 20	 movzx	 eax, BYTE PTR character_3$[rsp]
  003cc	83 e0 03	 and	 eax, 3
  003cf	c1 e0 06	 shl	 eax, 6
  003d2	0f b6 4c 24 21	 movzx	 ecx, BYTE PTR character_4$[rsp]
  003d7	0b c1		 or	 eax, ecx
  003d9	88 44 24 24	 mov	 BYTE PTR byte_to_add$[rsp], al

; 291  : 
; 292  :       destination.SetAt( add_index, byte_to_add );

  003dd	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  003e1	44 0f b6 44 24
	24		 movzx	 r8d, BYTE PTR byte_to_add$[rsp]
  003e7	8b d0		 mov	 edx, eax
  003e9	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  003ee	e8 00 00 00 00	 call	 ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt

; 293  :       add_index++;

  003f3	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  003f7	ff c0		 inc	 eax
  003f9	89 44 24 28	 mov	 DWORD PTR add_index$[rsp], eax

; 294  :    }

  003fd	e9 b5 fc ff ff	 jmp	 $LN2@Decode
$LN3@Decode:

; 295  : 
; 296  :    destination.SetSize( add_index );

  00402	8b 44 24 28	 mov	 eax, DWORD PTR add_index$[rsp]
  00406	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  0040d	8b d0		 mov	 edx, eax
  0040f	48 8b 4c 24 70	 mov	 rcx, QWORD PTR destination$[rsp]
  00414	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize

; 297  : 
; 298  :    return( return_value );

  00419	8b 44 24 40	 mov	 eax, DWORD PTR return_value$[rsp]
$LN1@Decode:

; 299  : }

  0041d	48 83 c4 58	 add	 rsp, 88			; 00000058H
  00421	c3		 ret	 0
?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ENDP ; CBase64Coding::Decode
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ??1CBase64Coding@@UEAA@XZ
_TEXT	SEGMENT
this$ = 8
??1CBase64Coding@@UEAA@XZ PROC				; CBase64Coding::~CBase64Coding, COMDAT

; 66   : {

  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	48 8b 44 24 08	 mov	 rax, QWORD PTR this$[rsp]
  0000a	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:??_7CBase64Coding@@6B@
  00011	48 89 08	 mov	 QWORD PTR [rax], rcx

; 67   : }

  00014	c3		 ret	 0
??1CBase64Coding@@UEAA@XZ ENDP				; CBase64Coding::~CBase64Coding
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ??0CBase64Coding@@QEAA@XZ
_TEXT	SEGMENT
this$ = 8
??0CBase64Coding@@QEAA@XZ PROC				; CBase64Coding::CBase64Coding, COMDAT

; 61   : {

  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	48 8b 44 24 08	 mov	 rax, QWORD PTR this$[rsp]
  0000a	48 8d 0d 00 00
	00 00		 lea	 rcx, OFFSET FLAT:??_7CBase64Coding@@6B@
  00011	48 89 08	 mov	 QWORD PTR [rax], rcx

; 62   :    m_DecoderTable[ 0 ] = 0x00;

  00014	b8 01 00 00 00	 mov	 eax, 1
  00019	48 6b c0 00	 imul	 rax, rax, 0
  0001d	48 8b 4c 24 08	 mov	 rcx, QWORD PTR this$[rsp]
  00022	c6 44 01 08 00	 mov	 BYTE PTR [rcx+rax+8], 0

; 63   : }

  00027	48 8b 44 24 08	 mov	 rax, QWORD PTR this$[rsp]
  0002c	c3		 ret	 0
??0CBase64Coding@@QEAA@XZ ENDP				; CBase64Coding::CBase64Coding
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ
_TEXT	SEGMENT
this$ = 48
?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ PROC	; CBase64Coding::m_InitializeDecoderTable, COMDAT

; 70   : {

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 71   : 
; 72   :    // Fill the table with an invalid value. If the decoder receives
; 73   :    // this value as a result of a lookup, it knows that the input
; 74   :    // character must have been an invalid one.
; 75   : 
; 76   :    ::memset( m_DecoderTable, BASE64_UNKNOWN_VALUE, sizeof( m_DecoderTable ) );

  00009	48 8b 44 24 30	 mov	 rax, QWORD PTR this$[rsp]
  0000e	48 83 c0 08	 add	 rax, 8
  00012	41 b8 00 01 00
	00		 mov	 r8d, 256		; 00000100H
  00018	ba ff 00 00 00	 mov	 edx, 255		; 000000ffH
  0001d	48 8b c8	 mov	 rcx, rax
  00020	e8 00 00 00 00	 call	 memset

; 77   : 
; 78   :    // Now let's fill the table with translatable values
; 79   :    // The table is loaded with table[ ASCII_VALUE ] = TRANSLATED_VALUE
; 80   : 
; 81   :     m_DecoderTable[  43 ] = 62;

  00025	b8 01 00 00 00	 mov	 eax, 1
  0002a	48 6b c0 2b	 imul	 rax, rax, 43		; 0000002bH
  0002e	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00033	c6 44 01 08 3e	 mov	 BYTE PTR [rcx+rax+8], 62 ; 0000003eH

; 82   :     m_DecoderTable[  47 ] = 63;

  00038	b8 01 00 00 00	 mov	 eax, 1
  0003d	48 6b c0 2f	 imul	 rax, rax, 47		; 0000002fH
  00041	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00046	c6 44 01 08 3f	 mov	 BYTE PTR [rcx+rax+8], 63 ; 0000003fH

; 83   :     m_DecoderTable[  48 ] = 52;

  0004b	b8 01 00 00 00	 mov	 eax, 1
  00050	48 6b c0 30	 imul	 rax, rax, 48		; 00000030H
  00054	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00059	c6 44 01 08 34	 mov	 BYTE PTR [rcx+rax+8], 52 ; 00000034H

; 84   :     m_DecoderTable[  49 ] = 53;

  0005e	b8 01 00 00 00	 mov	 eax, 1
  00063	48 6b c0 31	 imul	 rax, rax, 49		; 00000031H
  00067	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0006c	c6 44 01 08 35	 mov	 BYTE PTR [rcx+rax+8], 53 ; 00000035H

; 85   :     m_DecoderTable[  50 ] = 54;

  00071	b8 01 00 00 00	 mov	 eax, 1
  00076	48 6b c0 32	 imul	 rax, rax, 50		; 00000032H
  0007a	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0007f	c6 44 01 08 36	 mov	 BYTE PTR [rcx+rax+8], 54 ; 00000036H

; 86   :     m_DecoderTable[  51 ] = 55;

  00084	b8 01 00 00 00	 mov	 eax, 1
  00089	48 6b c0 33	 imul	 rax, rax, 51		; 00000033H
  0008d	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00092	c6 44 01 08 37	 mov	 BYTE PTR [rcx+rax+8], 55 ; 00000037H

; 87   :     m_DecoderTable[  52 ] = 56;

  00097	b8 01 00 00 00	 mov	 eax, 1
  0009c	48 6b c0 34	 imul	 rax, rax, 52		; 00000034H
  000a0	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  000a5	c6 44 01 08 38	 mov	 BYTE PTR [rcx+rax+8], 56 ; 00000038H

; 88   :     m_DecoderTable[  53 ] = 57;

  000aa	b8 01 00 00 00	 mov	 eax, 1
  000af	48 6b c0 35	 imul	 rax, rax, 53		; 00000035H
  000b3	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  000b8	c6 44 01 08 39	 mov	 BYTE PTR [rcx+rax+8], 57 ; 00000039H

; 89   :     m_DecoderTable[  54 ] = 58;

  000bd	b8 01 00 00 00	 mov	 eax, 1
  000c2	48 6b c0 36	 imul	 rax, rax, 54		; 00000036H
  000c6	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  000cb	c6 44 01 08 3a	 mov	 BYTE PTR [rcx+rax+8], 58 ; 0000003aH

; 90   :     m_DecoderTable[  55 ] = 59;

  000d0	b8 01 00 00 00	 mov	 eax, 1
  000d5	48 6b c0 37	 imul	 rax, rax, 55		; 00000037H
  000d9	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  000de	c6 44 01 08 3b	 mov	 BYTE PTR [rcx+rax+8], 59 ; 0000003bH

; 91   :     m_DecoderTable[  56 ] = 60;

  000e3	b8 01 00 00 00	 mov	 eax, 1
  000e8	48 6b c0 38	 imul	 rax, rax, 56		; 00000038H
  000ec	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  000f1	c6 44 01 08 3c	 mov	 BYTE PTR [rcx+rax+8], 60 ; 0000003cH

; 92   :     m_DecoderTable[  57 ] = 61;

  000f6	b8 01 00 00 00	 mov	 eax, 1
  000fb	48 6b c0 39	 imul	 rax, rax, 57		; 00000039H
  000ff	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00104	c6 44 01 08 3d	 mov	 BYTE PTR [rcx+rax+8], 61 ; 0000003dH

; 93   :     m_DecoderTable[  65 ] = 0;

  00109	b8 01 00 00 00	 mov	 eax, 1
  0010e	48 6b c0 41	 imul	 rax, rax, 65		; 00000041H
  00112	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00117	c6 44 01 08 00	 mov	 BYTE PTR [rcx+rax+8], 0

; 94   :     m_DecoderTable[  66 ] = 1;

  0011c	b8 01 00 00 00	 mov	 eax, 1
  00121	48 6b c0 42	 imul	 rax, rax, 66		; 00000042H
  00125	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0012a	c6 44 01 08 01	 mov	 BYTE PTR [rcx+rax+8], 1

; 95   :     m_DecoderTable[  67 ] = 2;

  0012f	b8 01 00 00 00	 mov	 eax, 1
  00134	48 6b c0 43	 imul	 rax, rax, 67		; 00000043H
  00138	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0013d	c6 44 01 08 02	 mov	 BYTE PTR [rcx+rax+8], 2

; 96   :     m_DecoderTable[  68 ] = 3;

  00142	b8 01 00 00 00	 mov	 eax, 1
  00147	48 6b c0 44	 imul	 rax, rax, 68		; 00000044H
  0014b	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00150	c6 44 01 08 03	 mov	 BYTE PTR [rcx+rax+8], 3

; 97   :     m_DecoderTable[  69 ] = 4;

  00155	b8 01 00 00 00	 mov	 eax, 1
  0015a	48 6b c0 45	 imul	 rax, rax, 69		; 00000045H
  0015e	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00163	c6 44 01 08 04	 mov	 BYTE PTR [rcx+rax+8], 4

; 98   :     m_DecoderTable[  70 ] = 5;

  00168	b8 01 00 00 00	 mov	 eax, 1
  0016d	48 6b c0 46	 imul	 rax, rax, 70		; 00000046H
  00171	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00176	c6 44 01 08 05	 mov	 BYTE PTR [rcx+rax+8], 5

; 99   :     m_DecoderTable[  71 ] = 6;

  0017b	b8 01 00 00 00	 mov	 eax, 1
  00180	48 6b c0 47	 imul	 rax, rax, 71		; 00000047H
  00184	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00189	c6 44 01 08 06	 mov	 BYTE PTR [rcx+rax+8], 6

; 100  :     m_DecoderTable[  72 ] = 7;

  0018e	b8 01 00 00 00	 mov	 eax, 1
  00193	48 6b c0 48	 imul	 rax, rax, 72		; 00000048H
  00197	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0019c	c6 44 01 08 07	 mov	 BYTE PTR [rcx+rax+8], 7

; 101  :     m_DecoderTable[  73 ] = 8;

  001a1	b8 01 00 00 00	 mov	 eax, 1
  001a6	48 6b c0 49	 imul	 rax, rax, 73		; 00000049H
  001aa	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  001af	c6 44 01 08 08	 mov	 BYTE PTR [rcx+rax+8], 8

; 102  :     m_DecoderTable[  74 ] = 9;

  001b4	b8 01 00 00 00	 mov	 eax, 1
  001b9	48 6b c0 4a	 imul	 rax, rax, 74		; 0000004aH
  001bd	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  001c2	c6 44 01 08 09	 mov	 BYTE PTR [rcx+rax+8], 9

; 103  :     m_DecoderTable[  75 ] = 10;

  001c7	b8 01 00 00 00	 mov	 eax, 1
  001cc	48 6b c0 4b	 imul	 rax, rax, 75		; 0000004bH
  001d0	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  001d5	c6 44 01 08 0a	 mov	 BYTE PTR [rcx+rax+8], 10

; 104  :     m_DecoderTable[  76 ] = 11;

  001da	b8 01 00 00 00	 mov	 eax, 1
  001df	48 6b c0 4c	 imul	 rax, rax, 76		; 0000004cH
  001e3	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  001e8	c6 44 01 08 0b	 mov	 BYTE PTR [rcx+rax+8], 11

; 105  :     m_DecoderTable[  77 ] = 12;

  001ed	b8 01 00 00 00	 mov	 eax, 1
  001f2	48 6b c0 4d	 imul	 rax, rax, 77		; 0000004dH
  001f6	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  001fb	c6 44 01 08 0c	 mov	 BYTE PTR [rcx+rax+8], 12

; 106  :     m_DecoderTable[  78 ] = 13;

  00200	b8 01 00 00 00	 mov	 eax, 1
  00205	48 6b c0 4e	 imul	 rax, rax, 78		; 0000004eH
  00209	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0020e	c6 44 01 08 0d	 mov	 BYTE PTR [rcx+rax+8], 13

; 107  :     m_DecoderTable[  79 ] = 14;

  00213	b8 01 00 00 00	 mov	 eax, 1
  00218	48 6b c0 4f	 imul	 rax, rax, 79		; 0000004fH
  0021c	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00221	c6 44 01 08 0e	 mov	 BYTE PTR [rcx+rax+8], 14

; 108  :     m_DecoderTable[  80 ] = 15;

  00226	b8 01 00 00 00	 mov	 eax, 1
  0022b	48 6b c0 50	 imul	 rax, rax, 80		; 00000050H
  0022f	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00234	c6 44 01 08 0f	 mov	 BYTE PTR [rcx+rax+8], 15

; 109  :     m_DecoderTable[  81 ] = 16;

  00239	b8 01 00 00 00	 mov	 eax, 1
  0023e	48 6b c0 51	 imul	 rax, rax, 81		; 00000051H
  00242	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00247	c6 44 01 08 10	 mov	 BYTE PTR [rcx+rax+8], 16

; 110  :     m_DecoderTable[  82 ] = 17;

  0024c	b8 01 00 00 00	 mov	 eax, 1
  00251	48 6b c0 52	 imul	 rax, rax, 82		; 00000052H
  00255	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0025a	c6 44 01 08 11	 mov	 BYTE PTR [rcx+rax+8], 17

; 111  :     m_DecoderTable[  83 ] = 18;

  0025f	b8 01 00 00 00	 mov	 eax, 1
  00264	48 6b c0 53	 imul	 rax, rax, 83		; 00000053H
  00268	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0026d	c6 44 01 08 12	 mov	 BYTE PTR [rcx+rax+8], 18

; 112  :     m_DecoderTable[  84 ] = 19;

  00272	b8 01 00 00 00	 mov	 eax, 1
  00277	48 6b c0 54	 imul	 rax, rax, 84		; 00000054H
  0027b	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00280	c6 44 01 08 13	 mov	 BYTE PTR [rcx+rax+8], 19

; 113  :     m_DecoderTable[  85 ] = 20;

  00285	b8 01 00 00 00	 mov	 eax, 1
  0028a	48 6b c0 55	 imul	 rax, rax, 85		; 00000055H
  0028e	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00293	c6 44 01 08 14	 mov	 BYTE PTR [rcx+rax+8], 20

; 114  :     m_DecoderTable[  86 ] = 21;

  00298	b8 01 00 00 00	 mov	 eax, 1
  0029d	48 6b c0 56	 imul	 rax, rax, 86		; 00000056H
  002a1	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  002a6	c6 44 01 08 15	 mov	 BYTE PTR [rcx+rax+8], 21

; 115  :     m_DecoderTable[  87 ] = 22;

  002ab	b8 01 00 00 00	 mov	 eax, 1
  002b0	48 6b c0 57	 imul	 rax, rax, 87		; 00000057H
  002b4	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  002b9	c6 44 01 08 16	 mov	 BYTE PTR [rcx+rax+8], 22

; 116  :     m_DecoderTable[  88 ] = 23;

  002be	b8 01 00 00 00	 mov	 eax, 1
  002c3	48 6b c0 58	 imul	 rax, rax, 88		; 00000058H
  002c7	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  002cc	c6 44 01 08 17	 mov	 BYTE PTR [rcx+rax+8], 23

; 117  :     m_DecoderTable[  89 ] = 24;

  002d1	b8 01 00 00 00	 mov	 eax, 1
  002d6	48 6b c0 59	 imul	 rax, rax, 89		; 00000059H
  002da	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  002df	c6 44 01 08 18	 mov	 BYTE PTR [rcx+rax+8], 24

; 118  :     m_DecoderTable[  90 ] = 25;

  002e4	b8 01 00 00 00	 mov	 eax, 1
  002e9	48 6b c0 5a	 imul	 rax, rax, 90		; 0000005aH
  002ed	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  002f2	c6 44 01 08 19	 mov	 BYTE PTR [rcx+rax+8], 25

; 119  :     m_DecoderTable[  97 ] = 26;

  002f7	b8 01 00 00 00	 mov	 eax, 1
  002fc	48 6b c0 61	 imul	 rax, rax, 97		; 00000061H
  00300	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00305	c6 44 01 08 1a	 mov	 BYTE PTR [rcx+rax+8], 26

; 120  :     m_DecoderTable[  98 ] = 27;

  0030a	b8 01 00 00 00	 mov	 eax, 1
  0030f	48 6b c0 62	 imul	 rax, rax, 98		; 00000062H
  00313	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00318	c6 44 01 08 1b	 mov	 BYTE PTR [rcx+rax+8], 27

; 121  :     m_DecoderTable[  99 ] = 28;

  0031d	b8 01 00 00 00	 mov	 eax, 1
  00322	48 6b c0 63	 imul	 rax, rax, 99		; 00000063H
  00326	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0032b	c6 44 01 08 1c	 mov	 BYTE PTR [rcx+rax+8], 28

; 122  :     m_DecoderTable[ 100 ] = 29;

  00330	b8 01 00 00 00	 mov	 eax, 1
  00335	48 6b c0 64	 imul	 rax, rax, 100		; 00000064H
  00339	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0033e	c6 44 01 08 1d	 mov	 BYTE PTR [rcx+rax+8], 29

; 123  :     m_DecoderTable[ 101 ] = 30;

  00343	b8 01 00 00 00	 mov	 eax, 1
  00348	48 6b c0 65	 imul	 rax, rax, 101		; 00000065H
  0034c	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00351	c6 44 01 08 1e	 mov	 BYTE PTR [rcx+rax+8], 30

; 124  :     m_DecoderTable[ 102 ] = 31;

  00356	b8 01 00 00 00	 mov	 eax, 1
  0035b	48 6b c0 66	 imul	 rax, rax, 102		; 00000066H
  0035f	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00364	c6 44 01 08 1f	 mov	 BYTE PTR [rcx+rax+8], 31

; 125  :     m_DecoderTable[ 103 ] = 32;

  00369	b8 01 00 00 00	 mov	 eax, 1
  0036e	48 6b c0 67	 imul	 rax, rax, 103		; 00000067H
  00372	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00377	c6 44 01 08 20	 mov	 BYTE PTR [rcx+rax+8], 32 ; 00000020H

; 126  :     m_DecoderTable[ 104 ] = 33;

  0037c	b8 01 00 00 00	 mov	 eax, 1
  00381	48 6b c0 68	 imul	 rax, rax, 104		; 00000068H
  00385	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0038a	c6 44 01 08 21	 mov	 BYTE PTR [rcx+rax+8], 33 ; 00000021H

; 127  :     m_DecoderTable[ 105 ] = 34;

  0038f	b8 01 00 00 00	 mov	 eax, 1
  00394	48 6b c0 69	 imul	 rax, rax, 105		; 00000069H
  00398	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0039d	c6 44 01 08 22	 mov	 BYTE PTR [rcx+rax+8], 34 ; 00000022H

; 128  :     m_DecoderTable[ 106 ] = 35;

  003a2	b8 01 00 00 00	 mov	 eax, 1
  003a7	48 6b c0 6a	 imul	 rax, rax, 106		; 0000006aH
  003ab	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  003b0	c6 44 01 08 23	 mov	 BYTE PTR [rcx+rax+8], 35 ; 00000023H

; 129  :     m_DecoderTable[ 107 ] = 36;

  003b5	b8 01 00 00 00	 mov	 eax, 1
  003ba	48 6b c0 6b	 imul	 rax, rax, 107		; 0000006bH
  003be	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  003c3	c6 44 01 08 24	 mov	 BYTE PTR [rcx+rax+8], 36 ; 00000024H

; 130  :     m_DecoderTable[ 108 ] = 37;

  003c8	b8 01 00 00 00	 mov	 eax, 1
  003cd	48 6b c0 6c	 imul	 rax, rax, 108		; 0000006cH
  003d1	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  003d6	c6 44 01 08 25	 mov	 BYTE PTR [rcx+rax+8], 37 ; 00000025H

; 131  :     m_DecoderTable[ 109 ] = 38;

  003db	b8 01 00 00 00	 mov	 eax, 1
  003e0	48 6b c0 6d	 imul	 rax, rax, 109		; 0000006dH
  003e4	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  003e9	c6 44 01 08 26	 mov	 BYTE PTR [rcx+rax+8], 38 ; 00000026H

; 132  :     m_DecoderTable[ 110 ] = 39;

  003ee	b8 01 00 00 00	 mov	 eax, 1
  003f3	48 6b c0 6e	 imul	 rax, rax, 110		; 0000006eH
  003f7	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  003fc	c6 44 01 08 27	 mov	 BYTE PTR [rcx+rax+8], 39 ; 00000027H

; 133  :     m_DecoderTable[ 111 ] = 40;

  00401	b8 01 00 00 00	 mov	 eax, 1
  00406	48 6b c0 6f	 imul	 rax, rax, 111		; 0000006fH
  0040a	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0040f	c6 44 01 08 28	 mov	 BYTE PTR [rcx+rax+8], 40 ; 00000028H

; 134  :     m_DecoderTable[ 112 ] = 41;

  00414	b8 01 00 00 00	 mov	 eax, 1
  00419	48 6b c0 70	 imul	 rax, rax, 112		; 00000070H
  0041d	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00422	c6 44 01 08 29	 mov	 BYTE PTR [rcx+rax+8], 41 ; 00000029H

; 135  :     m_DecoderTable[ 113 ] = 42;

  00427	b8 01 00 00 00	 mov	 eax, 1
  0042c	48 6b c0 71	 imul	 rax, rax, 113		; 00000071H
  00430	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00435	c6 44 01 08 2a	 mov	 BYTE PTR [rcx+rax+8], 42 ; 0000002aH

; 136  :     m_DecoderTable[ 114 ] = 43;

  0043a	b8 01 00 00 00	 mov	 eax, 1
  0043f	48 6b c0 72	 imul	 rax, rax, 114		; 00000072H
  00443	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00448	c6 44 01 08 2b	 mov	 BYTE PTR [rcx+rax+8], 43 ; 0000002bH

; 137  :     m_DecoderTable[ 115 ] = 44;

  0044d	b8 01 00 00 00	 mov	 eax, 1
  00452	48 6b c0 73	 imul	 rax, rax, 115		; 00000073H
  00456	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0045b	c6 44 01 08 2c	 mov	 BYTE PTR [rcx+rax+8], 44 ; 0000002cH

; 138  :     m_DecoderTable[ 116 ] = 45;

  00460	b8 01 00 00 00	 mov	 eax, 1
  00465	48 6b c0 74	 imul	 rax, rax, 116		; 00000074H
  00469	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0046e	c6 44 01 08 2d	 mov	 BYTE PTR [rcx+rax+8], 45 ; 0000002dH

; 139  :     m_DecoderTable[ 117 ] = 46;

  00473	b8 01 00 00 00	 mov	 eax, 1
  00478	48 6b c0 75	 imul	 rax, rax, 117		; 00000075H
  0047c	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00481	c6 44 01 08 2e	 mov	 BYTE PTR [rcx+rax+8], 46 ; 0000002eH

; 140  :     m_DecoderTable[ 118 ] = 47;

  00486	b8 01 00 00 00	 mov	 eax, 1
  0048b	48 6b c0 76	 imul	 rax, rax, 118		; 00000076H
  0048f	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00494	c6 44 01 08 2f	 mov	 BYTE PTR [rcx+rax+8], 47 ; 0000002fH

; 141  :     m_DecoderTable[ 119 ] = 48;

  00499	b8 01 00 00 00	 mov	 eax, 1
  0049e	48 6b c0 77	 imul	 rax, rax, 119		; 00000077H
  004a2	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  004a7	c6 44 01 08 30	 mov	 BYTE PTR [rcx+rax+8], 48 ; 00000030H

; 142  :     m_DecoderTable[ 120 ] = 49;

  004ac	b8 01 00 00 00	 mov	 eax, 1
  004b1	48 6b c0 78	 imul	 rax, rax, 120		; 00000078H
  004b5	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  004ba	c6 44 01 08 31	 mov	 BYTE PTR [rcx+rax+8], 49 ; 00000031H

; 143  :     m_DecoderTable[ 121 ] = 50;

  004bf	b8 01 00 00 00	 mov	 eax, 1
  004c4	48 6b c0 79	 imul	 rax, rax, 121		; 00000079H
  004c8	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  004cd	c6 44 01 08 32	 mov	 BYTE PTR [rcx+rax+8], 50 ; 00000032H

; 144  :     m_DecoderTable[ 122 ] = 51;

  004d2	b8 01 00 00 00	 mov	 eax, 1
  004d7	48 6b c0 7a	 imul	 rax, rax, 122		; 0000007aH
  004db	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  004e0	c6 44 01 08 33	 mov	 BYTE PTR [rcx+rax+8], 51 ; 00000033H

; 145  : 
; 146  :     // OK, there's our translation table, now let's be a little
; 147  :     // forgiving about end-of-lines, tabs, spaces, etc.
; 148  : 
; 149  :     m_DecoderTable[ 9               ] = BASE64_IGNORABLE_CHARACTER; // TAB character (Tabs suck!)

  004e5	b8 01 00 00 00	 mov	 eax, 1
  004ea	48 6b c0 09	 imul	 rax, rax, 9
  004ee	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  004f3	c6 44 01 08 fe	 mov	 BYTE PTR [rcx+rax+8], 254 ; 000000feH

; 150  :     m_DecoderTable[ 32              ] = BASE64_IGNORABLE_CHARACTER; // Space character

  004f8	b8 01 00 00 00	 mov	 eax, 1
  004fd	48 6b c0 20	 imul	 rax, rax, 32		; 00000020H
  00501	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00506	c6 44 01 08 fe	 mov	 BYTE PTR [rcx+rax+8], 254 ; 000000feH

; 151  :     m_DecoderTable[ CARRIAGE_RETURN ] = BASE64_IGNORABLE_CHARACTER;

  0050b	b8 01 00 00 00	 mov	 eax, 1
  00510	48 6b c0 0d	 imul	 rax, rax, 13
  00514	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00519	c6 44 01 08 fe	 mov	 BYTE PTR [rcx+rax+8], 254 ; 000000feH

; 152  :     m_DecoderTable[ LINE_FEED       ] = BASE64_IGNORABLE_CHARACTER;

  0051e	b8 01 00 00 00	 mov	 eax, 1
  00523	48 6b c0 0a	 imul	 rax, rax, 10
  00527	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0052c	c6 44 01 08 fe	 mov	 BYTE PTR [rcx+rax+8], 254 ; 000000feH

; 153  : }

  00531	48 83 c4 28	 add	 rsp, 40			; 00000028H
  00535	c3		 ret	 0
?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ ENDP	; CBase64Coding::m_InitializeDecoderTable
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
this$ = 48
nLength$ = 56
?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC	; ATL::CSimpleStringT<char,0>::SetLength, COMDAT

; 867  : 	{

$LN5:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 868  : 		ATLASSERT( nLength >= 0 );
; 869  : 		ATLASSERT( nLength <= GetData()->nAllocLength );
; 870  : 
; 871  : 		if( nLength < 0 || nLength > GetData()->nAllocLength)

  0000d	83 7c 24 38 00	 cmp	 DWORD PTR nLength$[rsp], 0
  00012	7c 13		 jl	 SHORT $LN3@SetLength
  00014	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00019	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  0001e	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  00021	39 44 24 38	 cmp	 DWORD PTR nLength$[rsp], eax
  00025	7e 0a		 jle	 SHORT $LN2@SetLength
$LN3@SetLength:

; 872  : 			AtlThrow(E_INVALIDARG);

  00027	b9 57 00 07 80	 mov	 ecx, -2147024809	; ffffffff80070057H
  0002c	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@SetLength:

; 873  : 
; 874  : 		GetData()->nDataLength = nLength;

  00031	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00036	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  0003b	8b 4c 24 38	 mov	 ecx, DWORD PTR nLength$[rsp]
  0003f	89 48 08	 mov	 DWORD PTR [rax+8], ecx

; 875  : 		m_pszData[nLength] = 0;

  00042	48 63 44 24 38	 movsxd	 rax, DWORD PTR nLength$[rsp]
  00047	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0004c	48 8b 09	 mov	 rcx, QWORD PTR [rcx]
  0004f	c6 04 01 00	 mov	 BYTE PTR [rcx+rax], 0
$LN4@SetLength:

; 876  : 	}

  00053	48 83 c4 28	 add	 rsp, 40			; 00000028H
  00057	c3		 ret	 0
?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP	; ATL::CSimpleStringT<char,0>::SetLength
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
pOldData$ = 32
pStringMgr$ = 40
pNewData$ = 48
tv78 = 56
this$ = 80
nLength$ = 88
?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC	; ATL::CSimpleStringT<char,0>::Reallocate, COMDAT

; 849  : 	{

$LN6:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 48	 sub	 rsp, 72			; 00000048H

; 850  : 		CStringData* pOldData = GetData();

  0000d	48 8b 4c 24 50	 mov	 rcx, QWORD PTR this$[rsp]
  00012	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  00017	48 89 44 24 20	 mov	 QWORD PTR pOldData$[rsp], rax

; 851  : 		ATLASSERT( pOldData->nAllocLength < nLength );
; 852  : 		IAtlStringMgr* pStringMgr = pOldData->pStringMgr;

  0001c	48 8b 44 24 20	 mov	 rax, QWORD PTR pOldData$[rsp]
  00021	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00024	48 89 44 24 28	 mov	 QWORD PTR pStringMgr$[rsp], rax

; 853  : 		if ( pOldData->nAllocLength >= nLength || nLength <= 0)

  00029	48 8b 44 24 20	 mov	 rax, QWORD PTR pOldData$[rsp]
  0002e	8b 4c 24 58	 mov	 ecx, DWORD PTR nLength$[rsp]
  00032	39 48 0c	 cmp	 DWORD PTR [rax+12], ecx
  00035	7d 07		 jge	 SHORT $LN3@Reallocate
  00037	83 7c 24 58 00	 cmp	 DWORD PTR nLength$[rsp], 0
  0003c	7f 07		 jg	 SHORT $LN2@Reallocate
$LN3@Reallocate:

; 854  : 		{
; 855  : 			ThrowMemoryException();

  0003e	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException

; 856  : 			return;

  00043	eb 4b		 jmp	 SHORT $LN1@Reallocate
$LN2@Reallocate:

; 857  : 		}
; 858  : 		CStringData* pNewData = pStringMgr->Reallocate( pOldData, nLength, sizeof( XCHAR ) );

  00045	48 8b 44 24 28	 mov	 rax, QWORD PTR pStringMgr$[rsp]
  0004a	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0004d	48 8b 40 10	 mov	 rax, QWORD PTR [rax+16]
  00051	48 89 44 24 38	 mov	 QWORD PTR tv78[rsp], rax
  00056	41 b9 01 00 00
	00		 mov	 r9d, 1
  0005c	44 8b 44 24 58	 mov	 r8d, DWORD PTR nLength$[rsp]
  00061	48 8b 54 24 20	 mov	 rdx, QWORD PTR pOldData$[rsp]
  00066	48 8b 4c 24 28	 mov	 rcx, QWORD PTR pStringMgr$[rsp]
  0006b	ff 54 24 38	 call	 QWORD PTR tv78[rsp]
  0006f	48 89 44 24 30	 mov	 QWORD PTR pNewData$[rsp], rax

; 859  : 		if( pNewData == NULL )

  00074	48 83 7c 24 30
	00		 cmp	 QWORD PTR pNewData$[rsp], 0
  0007a	75 05		 jne	 SHORT $LN4@Reallocate

; 860  : 		{
; 861  : 			ThrowMemoryException();

  0007c	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException
$LN4@Reallocate:

; 862  : 		}
; 863  : 		Attach( pNewData );

  00081	48 8b 54 24 30	 mov	 rdx, QWORD PTR pNewData$[rsp]
  00086	48 8b 4c 24 50	 mov	 rcx, QWORD PTR this$[rsp]
  0008b	e8 00 00 00 00	 call	 ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<char,0>::Attach
$LN1@Reallocate:
$LN5@Reallocate:

; 864  : 	}

  00090	48 83 c4 48	 add	 rsp, 72			; 00000048H
  00094	c3		 ret	 0
?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP	; ATL::CSimpleStringT<char,0>::Reallocate
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
nNewLength$1 = 32
pOldData$ = 40
this$ = 64
nLength$ = 72
?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<char,0>::PrepareWrite2, COMDAT

; 818  : 	{

$LN10:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 38	 sub	 rsp, 56			; 00000038H

; 819  : 		CStringData* pOldData = GetData();

  0000d	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  00012	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  00017	48 89 44 24 28	 mov	 QWORD PTR pOldData$[rsp], rax

; 820  : 		if( pOldData->nDataLength > nLength )

  0001c	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  00021	8b 4c 24 48	 mov	 ecx, DWORD PTR nLength$[rsp]
  00025	39 48 08	 cmp	 DWORD PTR [rax+8], ecx
  00028	7e 0c		 jle	 SHORT $LN2@PrepareWri

; 821  : 		{
; 822  : 			nLength = pOldData->nDataLength;

  0002a	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  0002f	8b 40 08	 mov	 eax, DWORD PTR [rax+8]
  00032	89 44 24 48	 mov	 DWORD PTR nLength$[rsp], eax
$LN2@PrepareWri:

; 823  : 		}
; 824  : 		if( pOldData->IsShared() )

  00036	48 8b 4c 24 28	 mov	 rcx, QWORD PTR pOldData$[rsp]
  0003b	e8 00 00 00 00	 call	 ?IsShared@CStringData@ATL@@QEBA_NXZ ; ATL::CStringData::IsShared
  00040	0f b6 c0	 movzx	 eax, al
  00043	85 c0		 test	 eax, eax
  00045	74 10		 je	 SHORT $LN3@PrepareWri

; 825  : 		{
; 826  : 			Fork( nLength );

  00047	8b 54 24 48	 mov	 edx, DWORD PTR nLength$[rsp]
  0004b	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  00050	e8 00 00 00 00	 call	 ?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Fork

; 827  : 		}

  00055	eb 68		 jmp	 SHORT $LN4@PrepareWri
$LN3@PrepareWri:

; 828  : 		else if( pOldData->nAllocLength < nLength )

  00057	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  0005c	8b 4c 24 48	 mov	 ecx, DWORD PTR nLength$[rsp]
  00060	39 48 0c	 cmp	 DWORD PTR [rax+12], ecx
  00063	7d 5a		 jge	 SHORT $LN5@PrepareWri

; 829  : 		{
; 830  : 			// Grow exponentially, until we hit 1G, then by 1M thereafter.
; 831  : 			int nNewLength = pOldData->nAllocLength;

  00065	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  0006a	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  0006d	89 44 24 20	 mov	 DWORD PTR nNewLength$1[rsp], eax

; 832  : 			if( nNewLength > 1024 * 1024 * 1024 )

  00071	81 7c 24 20 00
	00 00 40	 cmp	 DWORD PTR nNewLength$1[rsp], 1073741824 ; 40000000H
  00079	7e 0f		 jle	 SHORT $LN6@PrepareWri

; 833  : 			{
; 834  : 				nNewLength += 1024 * 1024;

  0007b	8b 44 24 20	 mov	 eax, DWORD PTR nNewLength$1[rsp]
  0007f	05 00 00 10 00	 add	 eax, 1048576		; 00100000H
  00084	89 44 24 20	 mov	 DWORD PTR nNewLength$1[rsp], eax

; 835  : 			}

  00088	eb 15		 jmp	 SHORT $LN7@PrepareWri
$LN6@PrepareWri:

; 836  : 			else
; 837  : 			{
; 838  : 				// Exponential growth factor is 1.5.
; 839  : 				nNewLength = nNewLength + nNewLength / 2;

  0008a	8b 44 24 20	 mov	 eax, DWORD PTR nNewLength$1[rsp]
  0008e	99		 cdq
  0008f	2b c2		 sub	 eax, edx
  00091	d1 f8		 sar	 eax, 1
  00093	8b 4c 24 20	 mov	 ecx, DWORD PTR nNewLength$1[rsp]
  00097	03 c8		 add	 ecx, eax
  00099	8b c1		 mov	 eax, ecx
  0009b	89 44 24 20	 mov	 DWORD PTR nNewLength$1[rsp], eax
$LN7@PrepareWri:

; 840  : 			}
; 841  : 			if( nNewLength < nLength )

  0009f	8b 44 24 48	 mov	 eax, DWORD PTR nLength$[rsp]
  000a3	39 44 24 20	 cmp	 DWORD PTR nNewLength$1[rsp], eax
  000a7	7d 08		 jge	 SHORT $LN8@PrepareWri

; 842  : 			{
; 843  : 				nNewLength = nLength;

  000a9	8b 44 24 48	 mov	 eax, DWORD PTR nLength$[rsp]
  000ad	89 44 24 20	 mov	 DWORD PTR nNewLength$1[rsp], eax
$LN8@PrepareWri:

; 844  : 			}
; 845  : 			Reallocate( nNewLength );

  000b1	8b 54 24 20	 mov	 edx, DWORD PTR nNewLength$1[rsp]
  000b5	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  000ba	e8 00 00 00 00	 call	 ?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Reallocate
$LN5@PrepareWri:
$LN4@PrepareWri:

; 846  : 		}
; 847  : 	}

  000bf	48 83 c4 38	 add	 rsp, 56			; 00000038H
  000c3	c3		 ret	 0
?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::PrepareWrite2
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z
_TEXT	SEGMENT
nTooShort$ = 32
nShared$ = 36
pOldData$ = 40
this$ = 64
nLength$ = 72
?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z PROC ; ATL::CSimpleStringT<char,0>::PrepareWrite, COMDAT

; 803  : 	{

$LN5:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 38	 sub	 rsp, 56			; 00000038H

; 804  : 		if (nLength < 0)

  0000d	83 7c 24 48 00	 cmp	 DWORD PTR nLength$[rsp], 0
  00012	7d 0a		 jge	 SHORT $LN2@PrepareWri

; 805  : 			AtlThrow(E_INVALIDARG);

  00014	b9 57 00 07 80	 mov	 ecx, -2147024809	; ffffffff80070057H
  00019	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@PrepareWri:

; 806  : 
; 807  : 		CStringData* pOldData = GetData();

  0001e	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  00023	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  00028	48 89 44 24 28	 mov	 QWORD PTR pOldData$[rsp], rax

; 808  : 		int nShared = 1-pOldData->nRefs;  // nShared < 0 means true, >= 0 means false

  0002d	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  00032	b9 01 00 00 00	 mov	 ecx, 1
  00037	2b 48 10	 sub	 ecx, DWORD PTR [rax+16]
  0003a	8b c1		 mov	 eax, ecx
  0003c	89 44 24 24	 mov	 DWORD PTR nShared$[rsp], eax

; 809  : 		int nTooShort = pOldData->nAllocLength-nLength;  // nTooShort < 0 means true, >= 0 means false

  00040	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  00045	8b 4c 24 48	 mov	 ecx, DWORD PTR nLength$[rsp]
  00049	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  0004c	2b c1		 sub	 eax, ecx
  0004e	89 44 24 20	 mov	 DWORD PTR nTooShort$[rsp], eax

; 810  : 		if( (nShared|nTooShort) < 0 )  // If either sign bit is set (i.e. either is less than zero), we need to copy data

  00052	8b 44 24 20	 mov	 eax, DWORD PTR nTooShort$[rsp]
  00056	8b 4c 24 24	 mov	 ecx, DWORD PTR nShared$[rsp]
  0005a	0b c8		 or	 ecx, eax
  0005c	8b c1		 mov	 eax, ecx
  0005e	85 c0		 test	 eax, eax
  00060	7d 0e		 jge	 SHORT $LN3@PrepareWri

; 811  : 		{
; 812  : 			PrepareWrite2( nLength );

  00062	8b 54 24 48	 mov	 edx, DWORD PTR nLength$[rsp]
  00066	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  0006b	e8 00 00 00 00	 call	 ?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite2
$LN3@PrepareWri:

; 813  : 		}
; 814  : 
; 815  : 		return( m_pszData );

  00070	48 8b 44 24 40	 mov	 rax, QWORD PTR this$[rsp]
  00075	48 8b 00	 mov	 rax, QWORD PTR [rax]
$LN4@PrepareWri:

; 816  : 	}

  00078	48 83 c4 38	 add	 rsp, 56			; 00000038H
  0007c	c3		 ret	 0
?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z ENDP ; ATL::CSimpleStringT<char,0>::PrepareWrite
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ
_TEXT	SEGMENT
this$ = 8
?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ PROC ; ATL::CSimpleStringT<char,0>::GetData, COMDAT

; 799  : 	{

  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx

; 800  : 		return( reinterpret_cast< CStringData* >( m_pszData )-1 );

  00005	48 8b 44 24 08	 mov	 rax, QWORD PTR this$[rsp]
  0000a	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0000d	48 83 e8 18	 sub	 rax, 24

; 801  : 	}

  00011	c3		 ret	 0
?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ENDP ; ATL::CSimpleStringT<char,0>::GetData
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
nOldLength$ = 32
tv86 = 36
nCharsToCopy$ = 40
pOldData$ = 48
pNewData$ = 56
tv76 = 64
tv83 = 72
tv134 = 80
tv132 = 88
this$ = 112
nLength$ = 120
?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC		; ATL::CSimpleStringT<char,0>::Fork, COMDAT

; 783  : 	{

$LN6:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 68	 sub	 rsp, 104		; 00000068H

; 784  : 		CStringData* pOldData = GetData();

  0000d	48 8b 4c 24 70	 mov	 rcx, QWORD PTR this$[rsp]
  00012	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  00017	48 89 44 24 30	 mov	 QWORD PTR pOldData$[rsp], rax

; 785  : 		int nOldLength = pOldData->nDataLength;

  0001c	48 8b 44 24 30	 mov	 rax, QWORD PTR pOldData$[rsp]
  00021	8b 40 08	 mov	 eax, DWORD PTR [rax+8]
  00024	89 44 24 20	 mov	 DWORD PTR nOldLength$[rsp], eax

; 786  : 		CStringData* pNewData = pOldData->pStringMgr->Clone()->Allocate( nLength, sizeof( XCHAR ) );

  00028	48 8b 44 24 30	 mov	 rax, QWORD PTR pOldData$[rsp]
  0002d	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00030	48 8b 4c 24 30	 mov	 rcx, QWORD PTR pOldData$[rsp]
  00035	48 8b 09	 mov	 rcx, QWORD PTR [rcx]
  00038	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0003b	ff 50 20	 call	 QWORD PTR [rax+32]
  0003e	48 89 44 24 40	 mov	 QWORD PTR tv76[rsp], rax
  00043	48 8b 44 24 40	 mov	 rax, QWORD PTR tv76[rsp]
  00048	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0004b	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0004e	48 89 44 24 48	 mov	 QWORD PTR tv83[rsp], rax
  00053	41 b8 01 00 00
	00		 mov	 r8d, 1
  00059	8b 54 24 78	 mov	 edx, DWORD PTR nLength$[rsp]
  0005d	48 8b 4c 24 40	 mov	 rcx, QWORD PTR tv76[rsp]
  00062	ff 54 24 48	 call	 QWORD PTR tv83[rsp]
  00066	48 89 44 24 38	 mov	 QWORD PTR pNewData$[rsp], rax

; 787  : 		if( pNewData == NULL )

  0006b	48 83 7c 24 38
	00		 cmp	 QWORD PTR pNewData$[rsp], 0
  00071	75 05		 jne	 SHORT $LN2@Fork

; 788  : 		{
; 789  : 			ThrowMemoryException();

  00073	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException
$LN2@Fork:

; 790  : 		}
; 791  : 		int nCharsToCopy = ((nOldLength < nLength) ? nOldLength : nLength)+1;  // Copy '\0'

  00078	8b 44 24 78	 mov	 eax, DWORD PTR nLength$[rsp]
  0007c	39 44 24 20	 cmp	 DWORD PTR nOldLength$[rsp], eax
  00080	7d 0a		 jge	 SHORT $LN4@Fork
  00082	8b 44 24 20	 mov	 eax, DWORD PTR nOldLength$[rsp]
  00086	89 44 24 24	 mov	 DWORD PTR tv86[rsp], eax
  0008a	eb 08		 jmp	 SHORT $LN5@Fork
$LN4@Fork:
  0008c	8b 44 24 78	 mov	 eax, DWORD PTR nLength$[rsp]
  00090	89 44 24 24	 mov	 DWORD PTR tv86[rsp], eax
$LN5@Fork:
  00094	8b 44 24 24	 mov	 eax, DWORD PTR tv86[rsp]
  00098	ff c0		 inc	 eax
  0009a	89 44 24 28	 mov	 DWORD PTR nCharsToCopy$[rsp], eax

; 792  : 		memcpy_s( PXSTR( pNewData->data() ), nCharsToCopy * sizeof( XCHAR ),

  0009e	48 8b 4c 24 30	 mov	 rcx, QWORD PTR pOldData$[rsp]
  000a3	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  000a8	48 89 44 24 50	 mov	 QWORD PTR tv134[rsp], rax
  000ad	48 8b 4c 24 38	 mov	 rcx, QWORD PTR pNewData$[rsp]
  000b2	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  000b7	48 89 44 24 58	 mov	 QWORD PTR tv132[rsp], rax
  000bc	48 63 44 24 28	 movsxd	 rax, DWORD PTR nCharsToCopy$[rsp]
  000c1	48 63 4c 24 28	 movsxd	 rcx, DWORD PTR nCharsToCopy$[rsp]
  000c6	4c 8b c8	 mov	 r9, rax
  000c9	4c 8b 44 24 50	 mov	 r8, QWORD PTR tv134[rsp]
  000ce	48 8b d1	 mov	 rdx, rcx
  000d1	48 8b 4c 24 58	 mov	 rcx, QWORD PTR tv132[rsp]
  000d6	e8 00 00 00 00	 call	 memcpy_s

; 793  : 			PCXSTR( pOldData->data() ), nCharsToCopy * sizeof( XCHAR ));
; 794  : 		pNewData->nDataLength = nOldLength;

  000db	48 8b 44 24 38	 mov	 rax, QWORD PTR pNewData$[rsp]
  000e0	8b 4c 24 20	 mov	 ecx, DWORD PTR nOldLength$[rsp]
  000e4	89 48 08	 mov	 DWORD PTR [rax+8], ecx

; 795  : 		pOldData->Release();

  000e7	48 8b 4c 24 30	 mov	 rcx, QWORD PTR pOldData$[rsp]
  000ec	e8 00 00 00 00	 call	 ?Release@CStringData@ATL@@QEAAXXZ ; ATL::CStringData::Release

; 796  : 		Attach( pNewData );

  000f1	48 8b 54 24 38	 mov	 rdx, QWORD PTR pNewData$[rsp]
  000f6	48 8b 4c 24 70	 mov	 rcx, QWORD PTR this$[rsp]
  000fb	e8 00 00 00 00	 call	 ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<char,0>::Attach
$LN3@Fork:

; 797  : 	}

  00100	48 83 c4 68	 add	 rsp, 104		; 00000068H
  00104	c3		 ret	 0
?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP		; ATL::CSimpleStringT<char,0>::Fork
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z
_TEXT	SEGMENT
this$ = 48
pData$ = 56
?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z PROC ; ATL::CSimpleStringT<char,0>::Attach, COMDAT

; 779  : 	{

$LN3:
  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 780  : 		m_pszData = static_cast< PXSTR >( pData->data() );

  0000e	48 8b 4c 24 38	 mov	 rcx, QWORD PTR pData$[rsp]
  00013	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  00018	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0001d	48 89 01	 mov	 QWORD PTR [rcx], rax

; 781  : 	}

  00020	48 83 c4 28	 add	 rsp, 40			; 00000028H
  00024	c3		 ret	 0
?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ENDP ; ATL::CSimpleStringT<char,0>::Attach
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ
_TEXT	SEGMENT
?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ PROC ; ATL::CSimpleStringT<char,0>::ThrowMemoryException, COMDAT

; 772  : 	{

$LN3:
  00000	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 773  : 		AtlThrow( E_OUTOFMEMORY );

  00004	b9 0e 00 07 80	 mov	 ecx, -2147024882	; ffffffff8007000eH
  00009	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@ThrowMemor:

; 774  : 	}

  0000e	48 83 c4 28	 add	 rsp, 40			; 00000028H
  00012	c3		 ret	 0
?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ENDP ; ATL::CSimpleStringT<char,0>::ThrowMemoryException
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z
_TEXT	SEGMENT
psz$ = 48
sizeInXChar$ = 56
?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z PROC ; ATL::CSimpleStringT<char,0>::StringLengthN, COMDAT

; 739  : 	{

$LN4:
  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 740  : 		if( psz == NULL )

  0000e	48 83 7c 24 30
	00		 cmp	 QWORD PTR psz$[rsp], 0
  00014	75 04		 jne	 SHORT $LN2@StringLeng

; 741  : 		{
; 742  : 			return( 0 );

  00016	33 c0		 xor	 eax, eax
  00018	eb 10		 jmp	 SHORT $LN1@StringLeng
$LN2@StringLeng:

; 743  : 		}
; 744  : 		return( int( strnlen( psz, sizeInXChar ) ) );

  0001a	48 8b 54 24 38	 mov	 rdx, QWORD PTR sizeInXChar$[rsp]
  0001f	48 8b 4c 24 30	 mov	 rcx, QWORD PTR psz$[rsp]
  00024	e8 00 00 00 00	 call	 strnlen
  00029	90		 npad	 1
$LN1@StringLeng:

; 745  : 	}

  0002a	48 83 c4 28	 add	 rsp, 40			; 00000028H
  0002e	c3		 ret	 0
?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z ENDP ; ATL::CSimpleStringT<char,0>::StringLengthN
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z
_TEXT	SEGMENT
nAlloc$1 = 32
this$ = 64
nNewLength$ = 72
?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z PROC ; ATL::CSimpleStringT<char,0>::ReleaseBuffer, COMDAT

; 557  : 	{

$LN4:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 38	 sub	 rsp, 56			; 00000038H

; 558  : 		if( nNewLength == -1 )

  0000d	83 7c 24 48 ff	 cmp	 DWORD PTR nNewLength$[rsp], -1
  00012	75 2a		 jne	 SHORT $LN2@ReleaseBuf

; 559  : 		{
; 560  : 			int nAlloc = GetData()->nAllocLength;

  00014	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  00019	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  0001e	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  00021	89 44 24 20	 mov	 DWORD PTR nAlloc$1[rsp], eax

; 561  : 			nNewLength = StringLengthN( m_pszData, nAlloc);

  00025	48 63 44 24 20	 movsxd	 rax, DWORD PTR nAlloc$1[rsp]
  0002a	48 8b d0	 mov	 rdx, rax
  0002d	48 8b 44 24 40	 mov	 rax, QWORD PTR this$[rsp]
  00032	48 8b 08	 mov	 rcx, QWORD PTR [rax]
  00035	e8 00 00 00 00	 call	 ?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z ; ATL::CSimpleStringT<char,0>::StringLengthN
  0003a	89 44 24 48	 mov	 DWORD PTR nNewLength$[rsp], eax
$LN2@ReleaseBuf:

; 562  : 		}
; 563  : 		SetLength( nNewLength );

  0003e	8b 54 24 48	 mov	 edx, DWORD PTR nNewLength$[rsp]
  00042	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  00047	e8 00 00 00 00	 call	 ?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::SetLength

; 564  : 	}

  0004c	48 83 c4 38	 add	 rsp, 56			; 00000038H
  00050	c3		 ret	 0
?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::ReleaseBuffer
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ
_TEXT	SEGMENT
this$ = 48
?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ PROC	; ATL::CSimpleStringT<char,0>::GetLength, COMDAT

; 518  : 	{

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 519  : 		return( GetData()->nDataLength );

  00009	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0000e	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData
  00013	8b 40 08	 mov	 eax, DWORD PTR [rax+8]

; 520  : 	}

  00016	48 83 c4 28	 add	 rsp, 40			; 00000028H
  0001a	c3		 ret	 0
?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ ENDP	; ATL::CSimpleStringT<char,0>::GetLength
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z
_TEXT	SEGMENT
this$ = 48
nMinBufferLength$ = 56
?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z PROC	; ATL::CSimpleStringT<char,0>::GetBuffer, COMDAT

; 507  : 	{

$LN3:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 508  : 		return( PrepareWrite( nMinBufferLength ) );

  0000d	8b 54 24 38	 mov	 edx, DWORD PTR nMinBufferLength$[rsp]
  00011	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00016	e8 00 00 00 00	 call	 ?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite

; 509  : 	}

  0001b	48 83 c4 28	 add	 rsp, 40			; 00000028H
  0001f	c3		 ret	 0
?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z ENDP	; ATL::CSimpleStringT<char,0>::GetBuffer
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ
_TEXT	SEGMENT
this$ = 8
??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ PROC		; ATL::CSimpleStringT<char,0>::operator char const *, COMDAT

; 376  : 	{

  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx

; 377  : 		return( m_pszData );

  00005	48 8b 44 24 08	 mov	 rax, QWORD PTR this$[rsp]
  0000a	48 8b 00	 mov	 rax, QWORD PTR [rax]

; 378  : 	}

  0000d	c3		 ret	 0
??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ ENDP		; ATL::CSimpleStringT<char,0>::operator char const *
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl
;	COMDAT ?GetData@CByteArray@@QEBAPEBEXZ
_TEXT	SEGMENT
this$ = 8
?GetData@CByteArray@@QEBAPEBEXZ PROC			; CByteArray::GetData, COMDAT

; 46   : 	{ return (const BYTE*)m_pData; }

  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	48 8b 44 24 08	 mov	 rax, QWORD PTR this$[rsp]
  0000a	48 8b 40 08	 mov	 rax, QWORD PTR [rax+8]
  0000e	c3		 ret	 0
?GetData@CByteArray@@QEBAPEBEXZ ENDP			; CByteArray::GetData
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl
;	COMDAT ?SetAt@CByteArray@@QEAAX_JE@Z
_TEXT	SEGMENT
this$ = 48
nIndex$ = 56
newElement$ = 64
?SetAt@CByteArray@@QEAAX_JE@Z PROC			; CByteArray::SetAt, COMDAT

; 35   : 	{ ASSERT(nIndex >= 0 && nIndex < m_nSize);

$LN5:
  00000	44 88 44 24 18	 mov	 BYTE PTR [rsp+24], r8b
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 36   : 		if( nIndex < 0 || nIndex >= m_nSize )

  00013	48 83 7c 24 38
	00		 cmp	 QWORD PTR nIndex$[rsp], 0
  00019	7c 10		 jl	 SHORT $LN3@SetAt
  0001b	48 8b 44 24 30	 mov	 rax, QWORD PTR this$[rsp]
  00020	48 8b 40 10	 mov	 rax, QWORD PTR [rax+16]
  00024	48 39 44 24 38	 cmp	 QWORD PTR nIndex$[rsp], rax
  00029	7c 05		 jl	 SHORT $LN2@SetAt
$LN3@SetAt:

; 37   : 			AfxThrowInvalidArgException();

  0002b	e8 00 00 00 00	 call	 ?AfxThrowInvalidArgException@@YAXXZ ; AfxThrowInvalidArgException
$LN2@SetAt:

; 38   : 		m_pData[nIndex] = newElement; }

  00030	48 8b 44 24 30	 mov	 rax, QWORD PTR this$[rsp]
  00035	48 8b 40 08	 mov	 rax, QWORD PTR [rax+8]
  00039	48 8b 4c 24 38	 mov	 rcx, QWORD PTR nIndex$[rsp]
  0003e	0f b6 54 24 40	 movzx	 edx, BYTE PTR newElement$[rsp]
  00043	88 14 08	 mov	 BYTE PTR [rax+rcx], dl
$LN4@SetAt:
  00046	48 83 c4 28	 add	 rsp, 40			; 00000028H
  0004a	c3		 ret	 0
?SetAt@CByteArray@@QEAAX_JE@Z ENDP			; CByteArray::SetAt
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl
;	COMDAT ?RemoveAll@CByteArray@@QEAAXXZ
_TEXT	SEGMENT
this$ = 48
?RemoveAll@CByteArray@@QEAAXXZ PROC			; CByteArray::RemoveAll, COMDAT

; 28   : 	{ SetSize(0); }

$LN3:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	48 83 ec 28	 sub	 rsp, 40			; 00000028H
  00009	49 c7 c0 ff ff
	ff ff		 mov	 r8, -1
  00010	33 d2		 xor	 edx, edx
  00012	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00017	e8 00 00 00 00	 call	 ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize
  0001c	48 83 c4 28	 add	 rsp, 40			; 00000028H
  00020	c3		 ret	 0
?RemoveAll@CByteArray@@QEAAXXZ ENDP			; CByteArray::RemoveAll
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl
;	COMDAT ?GetSize@CByteArray@@QEBA_JXZ
_TEXT	SEGMENT
this$ = 8
?GetSize@CByteArray@@QEBA_JXZ PROC			; CByteArray::GetSize, COMDAT

; 20   : 	{ return m_nSize; }

  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	48 8b 44 24 08	 mov	 rax, QWORD PTR this$[rsp]
  0000a	48 8b 40 10	 mov	 rax, QWORD PTR [rax+16]
  0000e	c3		 ret	 0
?GetSize@CByteArray@@QEBA_JXZ ENDP			; CByteArray::GetSize
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
this$ = 48
nLength$ = 56
?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC	; ATL::CSimpleStringT<wchar_t,0>::SetLength, COMDAT

; 867  : 	{

$LN5:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 868  : 		ATLASSERT( nLength >= 0 );
; 869  : 		ATLASSERT( nLength <= GetData()->nAllocLength );
; 870  : 
; 871  : 		if( nLength < 0 || nLength > GetData()->nAllocLength)

  0000d	83 7c 24 38 00	 cmp	 DWORD PTR nLength$[rsp], 0
  00012	7c 13		 jl	 SHORT $LN3@SetLength
  00014	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00019	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  0001e	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  00021	39 44 24 38	 cmp	 DWORD PTR nLength$[rsp], eax
  00025	7e 0a		 jle	 SHORT $LN2@SetLength
$LN3@SetLength:

; 872  : 			AtlThrow(E_INVALIDARG);

  00027	b9 57 00 07 80	 mov	 ecx, -2147024809	; ffffffff80070057H
  0002c	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@SetLength:

; 873  : 
; 874  : 		GetData()->nDataLength = nLength;

  00031	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00036	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  0003b	8b 4c 24 38	 mov	 ecx, DWORD PTR nLength$[rsp]
  0003f	89 48 08	 mov	 DWORD PTR [rax+8], ecx

; 875  : 		m_pszData[nLength] = 0;

  00042	48 63 44 24 38	 movsxd	 rax, DWORD PTR nLength$[rsp]
  00047	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0004c	48 8b 09	 mov	 rcx, QWORD PTR [rcx]
  0004f	33 d2		 xor	 edx, edx
  00051	66 89 14 41	 mov	 WORD PTR [rcx+rax*2], dx
$LN4@SetLength:

; 876  : 	}

  00055	48 83 c4 28	 add	 rsp, 40			; 00000028H
  00059	c3		 ret	 0
?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP	; ATL::CSimpleStringT<wchar_t,0>::SetLength
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
pOldData$ = 32
pStringMgr$ = 40
pNewData$ = 48
tv78 = 56
this$ = 80
nLength$ = 88
?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC	; ATL::CSimpleStringT<wchar_t,0>::Reallocate, COMDAT

; 849  : 	{

$LN6:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 48	 sub	 rsp, 72			; 00000048H

; 850  : 		CStringData* pOldData = GetData();

  0000d	48 8b 4c 24 50	 mov	 rcx, QWORD PTR this$[rsp]
  00012	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  00017	48 89 44 24 20	 mov	 QWORD PTR pOldData$[rsp], rax

; 851  : 		ATLASSERT( pOldData->nAllocLength < nLength );
; 852  : 		IAtlStringMgr* pStringMgr = pOldData->pStringMgr;

  0001c	48 8b 44 24 20	 mov	 rax, QWORD PTR pOldData$[rsp]
  00021	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00024	48 89 44 24 28	 mov	 QWORD PTR pStringMgr$[rsp], rax

; 853  : 		if ( pOldData->nAllocLength >= nLength || nLength <= 0)

  00029	48 8b 44 24 20	 mov	 rax, QWORD PTR pOldData$[rsp]
  0002e	8b 4c 24 58	 mov	 ecx, DWORD PTR nLength$[rsp]
  00032	39 48 0c	 cmp	 DWORD PTR [rax+12], ecx
  00035	7d 07		 jge	 SHORT $LN3@Reallocate
  00037	83 7c 24 58 00	 cmp	 DWORD PTR nLength$[rsp], 0
  0003c	7f 07		 jg	 SHORT $LN2@Reallocate
$LN3@Reallocate:

; 854  : 		{
; 855  : 			ThrowMemoryException();

  0003e	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException

; 856  : 			return;

  00043	eb 4b		 jmp	 SHORT $LN1@Reallocate
$LN2@Reallocate:

; 857  : 		}
; 858  : 		CStringData* pNewData = pStringMgr->Reallocate( pOldData, nLength, sizeof( XCHAR ) );

  00045	48 8b 44 24 28	 mov	 rax, QWORD PTR pStringMgr$[rsp]
  0004a	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0004d	48 8b 40 10	 mov	 rax, QWORD PTR [rax+16]
  00051	48 89 44 24 38	 mov	 QWORD PTR tv78[rsp], rax
  00056	41 b9 02 00 00
	00		 mov	 r9d, 2
  0005c	44 8b 44 24 58	 mov	 r8d, DWORD PTR nLength$[rsp]
  00061	48 8b 54 24 20	 mov	 rdx, QWORD PTR pOldData$[rsp]
  00066	48 8b 4c 24 28	 mov	 rcx, QWORD PTR pStringMgr$[rsp]
  0006b	ff 54 24 38	 call	 QWORD PTR tv78[rsp]
  0006f	48 89 44 24 30	 mov	 QWORD PTR pNewData$[rsp], rax

; 859  : 		if( pNewData == NULL )

  00074	48 83 7c 24 30
	00		 cmp	 QWORD PTR pNewData$[rsp], 0
  0007a	75 05		 jne	 SHORT $LN4@Reallocate

; 860  : 		{
; 861  : 			ThrowMemoryException();

  0007c	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException
$LN4@Reallocate:

; 862  : 		}
; 863  : 		Attach( pNewData );

  00081	48 8b 54 24 30	 mov	 rdx, QWORD PTR pNewData$[rsp]
  00086	48 8b 4c 24 50	 mov	 rcx, QWORD PTR this$[rsp]
  0008b	e8 00 00 00 00	 call	 ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<wchar_t,0>::Attach
$LN1@Reallocate:
$LN5@Reallocate:

; 864  : 	}

  00090	48 83 c4 48	 add	 rsp, 72			; 00000048H
  00094	c3		 ret	 0
?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP	; ATL::CSimpleStringT<wchar_t,0>::Reallocate
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
nNewLength$1 = 32
pOldData$ = 40
this$ = 64
nLength$ = 72
?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2, COMDAT

; 818  : 	{

$LN10:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 38	 sub	 rsp, 56			; 00000038H

; 819  : 		CStringData* pOldData = GetData();

  0000d	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  00012	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  00017	48 89 44 24 28	 mov	 QWORD PTR pOldData$[rsp], rax

; 820  : 		if( pOldData->nDataLength > nLength )

  0001c	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  00021	8b 4c 24 48	 mov	 ecx, DWORD PTR nLength$[rsp]
  00025	39 48 08	 cmp	 DWORD PTR [rax+8], ecx
  00028	7e 0c		 jle	 SHORT $LN2@PrepareWri

; 821  : 		{
; 822  : 			nLength = pOldData->nDataLength;

  0002a	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  0002f	8b 40 08	 mov	 eax, DWORD PTR [rax+8]
  00032	89 44 24 48	 mov	 DWORD PTR nLength$[rsp], eax
$LN2@PrepareWri:

; 823  : 		}
; 824  : 		if( pOldData->IsShared() )

  00036	48 8b 4c 24 28	 mov	 rcx, QWORD PTR pOldData$[rsp]
  0003b	e8 00 00 00 00	 call	 ?IsShared@CStringData@ATL@@QEBA_NXZ ; ATL::CStringData::IsShared
  00040	0f b6 c0	 movzx	 eax, al
  00043	85 c0		 test	 eax, eax
  00045	74 10		 je	 SHORT $LN3@PrepareWri

; 825  : 		{
; 826  : 			Fork( nLength );

  00047	8b 54 24 48	 mov	 edx, DWORD PTR nLength$[rsp]
  0004b	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  00050	e8 00 00 00 00	 call	 ?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::Fork

; 827  : 		}

  00055	eb 68		 jmp	 SHORT $LN4@PrepareWri
$LN3@PrepareWri:

; 828  : 		else if( pOldData->nAllocLength < nLength )

  00057	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  0005c	8b 4c 24 48	 mov	 ecx, DWORD PTR nLength$[rsp]
  00060	39 48 0c	 cmp	 DWORD PTR [rax+12], ecx
  00063	7d 5a		 jge	 SHORT $LN5@PrepareWri

; 829  : 		{
; 830  : 			// Grow exponentially, until we hit 1G, then by 1M thereafter.
; 831  : 			int nNewLength = pOldData->nAllocLength;

  00065	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  0006a	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  0006d	89 44 24 20	 mov	 DWORD PTR nNewLength$1[rsp], eax

; 832  : 			if( nNewLength > 1024 * 1024 * 1024 )

  00071	81 7c 24 20 00
	00 00 40	 cmp	 DWORD PTR nNewLength$1[rsp], 1073741824 ; 40000000H
  00079	7e 0f		 jle	 SHORT $LN6@PrepareWri

; 833  : 			{
; 834  : 				nNewLength += 1024 * 1024;

  0007b	8b 44 24 20	 mov	 eax, DWORD PTR nNewLength$1[rsp]
  0007f	05 00 00 10 00	 add	 eax, 1048576		; 00100000H
  00084	89 44 24 20	 mov	 DWORD PTR nNewLength$1[rsp], eax

; 835  : 			}

  00088	eb 15		 jmp	 SHORT $LN7@PrepareWri
$LN6@PrepareWri:

; 836  : 			else
; 837  : 			{
; 838  : 				// Exponential growth factor is 1.5.
; 839  : 				nNewLength = nNewLength + nNewLength / 2;

  0008a	8b 44 24 20	 mov	 eax, DWORD PTR nNewLength$1[rsp]
  0008e	99		 cdq
  0008f	2b c2		 sub	 eax, edx
  00091	d1 f8		 sar	 eax, 1
  00093	8b 4c 24 20	 mov	 ecx, DWORD PTR nNewLength$1[rsp]
  00097	03 c8		 add	 ecx, eax
  00099	8b c1		 mov	 eax, ecx
  0009b	89 44 24 20	 mov	 DWORD PTR nNewLength$1[rsp], eax
$LN7@PrepareWri:

; 840  : 			}
; 841  : 			if( nNewLength < nLength )

  0009f	8b 44 24 48	 mov	 eax, DWORD PTR nLength$[rsp]
  000a3	39 44 24 20	 cmp	 DWORD PTR nNewLength$1[rsp], eax
  000a7	7d 08		 jge	 SHORT $LN8@PrepareWri

; 842  : 			{
; 843  : 				nNewLength = nLength;

  000a9	8b 44 24 48	 mov	 eax, DWORD PTR nLength$[rsp]
  000ad	89 44 24 20	 mov	 DWORD PTR nNewLength$1[rsp], eax
$LN8@PrepareWri:

; 844  : 			}
; 845  : 			Reallocate( nNewLength );

  000b1	8b 54 24 20	 mov	 edx, DWORD PTR nNewLength$1[rsp]
  000b5	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  000ba	e8 00 00 00 00	 call	 ?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::Reallocate
$LN5@PrepareWri:
$LN4@PrepareWri:

; 846  : 		}
; 847  : 	}

  000bf	48 83 c4 38	 add	 rsp, 56			; 00000038H
  000c3	c3		 ret	 0
?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z
_TEXT	SEGMENT
nTooShort$ = 32
nShared$ = 36
pOldData$ = 40
this$ = 64
nLength$ = 72
?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite, COMDAT

; 803  : 	{

$LN5:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 38	 sub	 rsp, 56			; 00000038H

; 804  : 		if (nLength < 0)

  0000d	83 7c 24 48 00	 cmp	 DWORD PTR nLength$[rsp], 0
  00012	7d 0a		 jge	 SHORT $LN2@PrepareWri

; 805  : 			AtlThrow(E_INVALIDARG);

  00014	b9 57 00 07 80	 mov	 ecx, -2147024809	; ffffffff80070057H
  00019	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@PrepareWri:

; 806  : 
; 807  : 		CStringData* pOldData = GetData();

  0001e	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  00023	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  00028	48 89 44 24 28	 mov	 QWORD PTR pOldData$[rsp], rax

; 808  : 		int nShared = 1-pOldData->nRefs;  // nShared < 0 means true, >= 0 means false

  0002d	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  00032	b9 01 00 00 00	 mov	 ecx, 1
  00037	2b 48 10	 sub	 ecx, DWORD PTR [rax+16]
  0003a	8b c1		 mov	 eax, ecx
  0003c	89 44 24 24	 mov	 DWORD PTR nShared$[rsp], eax

; 809  : 		int nTooShort = pOldData->nAllocLength-nLength;  // nTooShort < 0 means true, >= 0 means false

  00040	48 8b 44 24 28	 mov	 rax, QWORD PTR pOldData$[rsp]
  00045	8b 4c 24 48	 mov	 ecx, DWORD PTR nLength$[rsp]
  00049	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  0004c	2b c1		 sub	 eax, ecx
  0004e	89 44 24 20	 mov	 DWORD PTR nTooShort$[rsp], eax

; 810  : 		if( (nShared|nTooShort) < 0 )  // If either sign bit is set (i.e. either is less than zero), we need to copy data

  00052	8b 44 24 20	 mov	 eax, DWORD PTR nTooShort$[rsp]
  00056	8b 4c 24 24	 mov	 ecx, DWORD PTR nShared$[rsp]
  0005a	0b c8		 or	 ecx, eax
  0005c	8b c1		 mov	 eax, ecx
  0005e	85 c0		 test	 eax, eax
  00060	7d 0e		 jge	 SHORT $LN3@PrepareWri

; 811  : 		{
; 812  : 			PrepareWrite2( nLength );

  00062	8b 54 24 48	 mov	 edx, DWORD PTR nLength$[rsp]
  00066	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  0006b	e8 00 00 00 00	 call	 ?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2
$LN3@PrepareWri:

; 813  : 		}
; 814  : 
; 815  : 		return( m_pszData );

  00070	48 8b 44 24 40	 mov	 rax, QWORD PTR this$[rsp]
  00075	48 8b 00	 mov	 rax, QWORD PTR [rax]
$LN4@PrepareWri:

; 816  : 	}

  00078	48 83 c4 38	 add	 rsp, 56			; 00000038H
  0007c	c3		 ret	 0
?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ
_TEXT	SEGMENT
this$ = 8
?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ PROC ; ATL::CSimpleStringT<wchar_t,0>::GetData, COMDAT

; 799  : 	{

  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx

; 800  : 		return( reinterpret_cast< CStringData* >( m_pszData )-1 );

  00005	48 8b 44 24 08	 mov	 rax, QWORD PTR this$[rsp]
  0000a	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0000d	48 83 e8 18	 sub	 rax, 24

; 801  : 	}

  00011	c3		 ret	 0
?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ENDP ; ATL::CSimpleStringT<wchar_t,0>::GetData
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z
_TEXT	SEGMENT
nOldLength$ = 32
tv86 = 36
nCharsToCopy$ = 40
pOldData$ = 48
pNewData$ = 56
tv76 = 64
tv83 = 72
tv136 = 80
tv134 = 88
this$ = 112
nLength$ = 120
?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC	; ATL::CSimpleStringT<wchar_t,0>::Fork, COMDAT

; 783  : 	{

$LN6:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 68	 sub	 rsp, 104		; 00000068H

; 784  : 		CStringData* pOldData = GetData();

  0000d	48 8b 4c 24 70	 mov	 rcx, QWORD PTR this$[rsp]
  00012	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  00017	48 89 44 24 30	 mov	 QWORD PTR pOldData$[rsp], rax

; 785  : 		int nOldLength = pOldData->nDataLength;

  0001c	48 8b 44 24 30	 mov	 rax, QWORD PTR pOldData$[rsp]
  00021	8b 40 08	 mov	 eax, DWORD PTR [rax+8]
  00024	89 44 24 20	 mov	 DWORD PTR nOldLength$[rsp], eax

; 786  : 		CStringData* pNewData = pOldData->pStringMgr->Clone()->Allocate( nLength, sizeof( XCHAR ) );

  00028	48 8b 44 24 30	 mov	 rax, QWORD PTR pOldData$[rsp]
  0002d	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00030	48 8b 4c 24 30	 mov	 rcx, QWORD PTR pOldData$[rsp]
  00035	48 8b 09	 mov	 rcx, QWORD PTR [rcx]
  00038	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0003b	ff 50 20	 call	 QWORD PTR [rax+32]
  0003e	48 89 44 24 40	 mov	 QWORD PTR tv76[rsp], rax
  00043	48 8b 44 24 40	 mov	 rax, QWORD PTR tv76[rsp]
  00048	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0004b	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0004e	48 89 44 24 48	 mov	 QWORD PTR tv83[rsp], rax
  00053	41 b8 02 00 00
	00		 mov	 r8d, 2
  00059	8b 54 24 78	 mov	 edx, DWORD PTR nLength$[rsp]
  0005d	48 8b 4c 24 40	 mov	 rcx, QWORD PTR tv76[rsp]
  00062	ff 54 24 48	 call	 QWORD PTR tv83[rsp]
  00066	48 89 44 24 38	 mov	 QWORD PTR pNewData$[rsp], rax

; 787  : 		if( pNewData == NULL )

  0006b	48 83 7c 24 38
	00		 cmp	 QWORD PTR pNewData$[rsp], 0
  00071	75 05		 jne	 SHORT $LN2@Fork

; 788  : 		{
; 789  : 			ThrowMemoryException();

  00073	e8 00 00 00 00	 call	 ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException
$LN2@Fork:

; 790  : 		}
; 791  : 		int nCharsToCopy = ((nOldLength < nLength) ? nOldLength : nLength)+1;  // Copy '\0'

  00078	8b 44 24 78	 mov	 eax, DWORD PTR nLength$[rsp]
  0007c	39 44 24 20	 cmp	 DWORD PTR nOldLength$[rsp], eax
  00080	7d 0a		 jge	 SHORT $LN4@Fork
  00082	8b 44 24 20	 mov	 eax, DWORD PTR nOldLength$[rsp]
  00086	89 44 24 24	 mov	 DWORD PTR tv86[rsp], eax
  0008a	eb 08		 jmp	 SHORT $LN5@Fork
$LN4@Fork:
  0008c	8b 44 24 78	 mov	 eax, DWORD PTR nLength$[rsp]
  00090	89 44 24 24	 mov	 DWORD PTR tv86[rsp], eax
$LN5@Fork:
  00094	8b 44 24 24	 mov	 eax, DWORD PTR tv86[rsp]
  00098	ff c0		 inc	 eax
  0009a	89 44 24 28	 mov	 DWORD PTR nCharsToCopy$[rsp], eax

; 792  : 		memcpy_s( PXSTR( pNewData->data() ), nCharsToCopy * sizeof( XCHAR ),

  0009e	48 8b 4c 24 30	 mov	 rcx, QWORD PTR pOldData$[rsp]
  000a3	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  000a8	48 89 44 24 50	 mov	 QWORD PTR tv136[rsp], rax
  000ad	48 8b 4c 24 38	 mov	 rcx, QWORD PTR pNewData$[rsp]
  000b2	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  000b7	48 89 44 24 58	 mov	 QWORD PTR tv134[rsp], rax
  000bc	48 63 44 24 28	 movsxd	 rax, DWORD PTR nCharsToCopy$[rsp]
  000c1	48 d1 e0	 shl	 rax, 1
  000c4	48 63 4c 24 28	 movsxd	 rcx, DWORD PTR nCharsToCopy$[rsp]
  000c9	48 d1 e1	 shl	 rcx, 1
  000cc	4c 8b c8	 mov	 r9, rax
  000cf	4c 8b 44 24 50	 mov	 r8, QWORD PTR tv136[rsp]
  000d4	48 8b d1	 mov	 rdx, rcx
  000d7	48 8b 4c 24 58	 mov	 rcx, QWORD PTR tv134[rsp]
  000dc	e8 00 00 00 00	 call	 memcpy_s

; 793  : 			PCXSTR( pOldData->data() ), nCharsToCopy * sizeof( XCHAR ));
; 794  : 		pNewData->nDataLength = nOldLength;

  000e1	48 8b 44 24 38	 mov	 rax, QWORD PTR pNewData$[rsp]
  000e6	8b 4c 24 20	 mov	 ecx, DWORD PTR nOldLength$[rsp]
  000ea	89 48 08	 mov	 DWORD PTR [rax+8], ecx

; 795  : 		pOldData->Release();

  000ed	48 8b 4c 24 30	 mov	 rcx, QWORD PTR pOldData$[rsp]
  000f2	e8 00 00 00 00	 call	 ?Release@CStringData@ATL@@QEAAXXZ ; ATL::CStringData::Release

; 796  : 		Attach( pNewData );

  000f7	48 8b 54 24 38	 mov	 rdx, QWORD PTR pNewData$[rsp]
  000fc	48 8b 4c 24 70	 mov	 rcx, QWORD PTR this$[rsp]
  00101	e8 00 00 00 00	 call	 ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<wchar_t,0>::Attach
$LN3@Fork:

; 797  : 	}

  00106	48 83 c4 68	 add	 rsp, 104		; 00000068H
  0010a	c3		 ret	 0
?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP	; ATL::CSimpleStringT<wchar_t,0>::Fork
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z
_TEXT	SEGMENT
this$ = 48
pData$ = 56
?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::Attach, COMDAT

; 779  : 	{

$LN3:
  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 780  : 		m_pszData = static_cast< PXSTR >( pData->data() );

  0000e	48 8b 4c 24 38	 mov	 rcx, QWORD PTR pData$[rsp]
  00013	e8 00 00 00 00	 call	 ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data
  00018	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  0001d	48 89 01	 mov	 QWORD PTR [rcx], rax

; 781  : 	}

  00020	48 83 c4 28	 add	 rsp, 40			; 00000028H
  00024	c3		 ret	 0
?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::Attach
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ
_TEXT	SEGMENT
?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ PROC ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException, COMDAT

; 772  : 	{

$LN3:
  00000	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 773  : 		AtlThrow( E_OUTOFMEMORY );

  00004	b9 0e 00 07 80	 mov	 ecx, -2147024882	; ffffffff8007000eH
  00009	e8 00 00 00 00	 call	 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl
$LN2@ThrowMemor:

; 774  : 	}

  0000e	48 83 c4 28	 add	 rsp, 40			; 00000028H
  00012	c3		 ret	 0
?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ENDP ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z
_TEXT	SEGMENT
psz$ = 48
sizeInXChar$ = 56
?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN, COMDAT

; 749  : 	{

$LN4:
  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 750  : 		if( psz == NULL )

  0000e	48 83 7c 24 30
	00		 cmp	 QWORD PTR psz$[rsp], 0
  00014	75 04		 jne	 SHORT $LN2@StringLeng

; 751  : 		{
; 752  : 			return( 0 );

  00016	33 c0		 xor	 eax, eax
  00018	eb 10		 jmp	 SHORT $LN1@StringLeng
$LN2@StringLeng:

; 753  : 		}
; 754  : 		return( int( wcsnlen( psz, sizeInXChar ) ) );

  0001a	48 8b 54 24 38	 mov	 rdx, QWORD PTR sizeInXChar$[rsp]
  0001f	48 8b 4c 24 30	 mov	 rcx, QWORD PTR psz$[rsp]
  00024	e8 00 00 00 00	 call	 wcsnlen
  00029	90		 npad	 1
$LN1@StringLeng:

; 755  : 	}

  0002a	48 83 c4 28	 add	 rsp, 40			; 00000028H
  0002e	c3		 ret	 0
?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z
_TEXT	SEGMENT
nAlloc$1 = 32
this$ = 64
nNewLength$ = 72
?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer, COMDAT

; 557  : 	{

$LN4:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 38	 sub	 rsp, 56			; 00000038H

; 558  : 		if( nNewLength == -1 )

  0000d	83 7c 24 48 ff	 cmp	 DWORD PTR nNewLength$[rsp], -1
  00012	75 2a		 jne	 SHORT $LN2@ReleaseBuf

; 559  : 		{
; 560  : 			int nAlloc = GetData()->nAllocLength;

  00014	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  00019	e8 00 00 00 00	 call	 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData
  0001e	8b 40 0c	 mov	 eax, DWORD PTR [rax+12]
  00021	89 44 24 20	 mov	 DWORD PTR nAlloc$1[rsp], eax

; 561  : 			nNewLength = StringLengthN( m_pszData, nAlloc);

  00025	48 63 44 24 20	 movsxd	 rax, DWORD PTR nAlloc$1[rsp]
  0002a	48 8b d0	 mov	 rdx, rax
  0002d	48 8b 44 24 40	 mov	 rax, QWORD PTR this$[rsp]
  00032	48 8b 08	 mov	 rcx, QWORD PTR [rax]
  00035	e8 00 00 00 00	 call	 ?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN
  0003a	89 44 24 48	 mov	 DWORD PTR nNewLength$[rsp], eax
$LN2@ReleaseBuf:

; 562  : 		}
; 563  : 		SetLength( nNewLength );

  0003e	8b 54 24 48	 mov	 edx, DWORD PTR nNewLength$[rsp]
  00042	48 8b 4c 24 40	 mov	 rcx, QWORD PTR this$[rsp]
  00047	e8 00 00 00 00	 call	 ?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::SetLength

; 564  : 	}

  0004c	48 83 c4 38	 add	 rsp, 56			; 00000038H
  00050	c3		 ret	 0
?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z
_TEXT	SEGMENT
this$ = 48
nMinBufferLength$ = 56
?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer, COMDAT

; 507  : 	{

$LN3:
  00000	89 54 24 10	 mov	 DWORD PTR [rsp+16], edx
  00004	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00009	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 508  : 		return( PrepareWrite( nMinBufferLength ) );

  0000d	8b 54 24 38	 mov	 edx, DWORD PTR nMinBufferLength$[rsp]
  00011	48 8b 4c 24 30	 mov	 rcx, QWORD PTR this$[rsp]
  00016	e8 00 00 00 00	 call	 ?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite

; 509  : 	}

  0001b	48 83 c4 28	 add	 rsp, 40			; 00000028H
  0001f	c3		 ret	 0
?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?Release@CStringData@ATL@@QEAAXXZ
_TEXT	SEGMENT
tv77 = 32
tv79 = 40
this$ = 64
?Release@CStringData@ATL@@QEAAXXZ PROC			; ATL::CStringData::Release, COMDAT

; 85   : 	{

$LN4:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	48 83 ec 38	 sub	 rsp, 56			; 00000038H

; 86   : 		ATLASSERT( nRefs != 0 );
; 87   : 
; 88   : 		if( _InterlockedDecrement( &nRefs ) <= 0 )

  00009	48 8b 44 24 40	 mov	 rax, QWORD PTR this$[rsp]
  0000e	48 83 c0 10	 add	 rax, 16
  00012	b9 ff ff ff ff	 mov	 ecx, -1
  00017	f0 0f c1 08	 lock xadd DWORD PTR [rax], ecx
  0001b	ff c9		 dec	 ecx
  0001d	8b c1		 mov	 eax, ecx
  0001f	85 c0		 test	 eax, eax
  00021	7f 2f		 jg	 SHORT $LN2@Release

; 89   : 		{
; 90   : 			pStringMgr->Free( this );

  00023	48 8b 44 24 40	 mov	 rax, QWORD PTR this$[rsp]
  00028	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0002b	48 89 44 24 20	 mov	 QWORD PTR tv77[rsp], rax
  00030	48 8b 44 24 40	 mov	 rax, QWORD PTR this$[rsp]
  00035	48 8b 00	 mov	 rax, QWORD PTR [rax]
  00038	48 8b 00	 mov	 rax, QWORD PTR [rax]
  0003b	48 8b 40 08	 mov	 rax, QWORD PTR [rax+8]
  0003f	48 89 44 24 28	 mov	 QWORD PTR tv79[rsp], rax
  00044	48 8b 54 24 40	 mov	 rdx, QWORD PTR this$[rsp]
  00049	48 8b 4c 24 20	 mov	 rcx, QWORD PTR tv77[rsp]
  0004e	ff 54 24 28	 call	 QWORD PTR tv79[rsp]
$LN2@Release:

; 91   : 		}
; 92   : 	}

  00052	48 83 c4 38	 add	 rsp, 56			; 00000038H
  00056	c3		 ret	 0
?Release@CStringData@ATL@@QEAAXXZ ENDP			; ATL::CStringData::Release
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?IsShared@CStringData@ATL@@QEBA_NXZ
_TEXT	SEGMENT
tv66 = 0
this$ = 32
?IsShared@CStringData@ATL@@QEBA_NXZ PROC		; ATL::CStringData::IsShared, COMDAT

; 72   : 	{

$LN5:
  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	48 83 ec 18	 sub	 rsp, 24

; 73   : 		return( nRefs > 1 );

  00009	48 8b 44 24 20	 mov	 rax, QWORD PTR this$[rsp]
  0000e	83 78 10 01	 cmp	 DWORD PTR [rax+16], 1
  00012	7e 09		 jle	 SHORT $LN3@IsShared
  00014	c7 04 24 01 00
	00 00		 mov	 DWORD PTR tv66[rsp], 1
  0001b	eb 07		 jmp	 SHORT $LN4@IsShared
$LN3@IsShared:
  0001d	c7 04 24 00 00
	00 00		 mov	 DWORD PTR tv66[rsp], 0
$LN4@IsShared:
  00024	0f b6 04 24	 movzx	 eax, BYTE PTR tv66[rsp]

; 74   : 	}

  00028	48 83 c4 18	 add	 rsp, 24
  0002c	c3		 ret	 0
?IsShared@CStringData@ATL@@QEBA_NXZ ENDP		; ATL::CStringData::IsShared
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h
;	COMDAT ?data@CStringData@ATL@@QEAAPEAXXZ
_TEXT	SEGMENT
this$ = 8
?data@CStringData@ATL@@QEAAPEAXXZ PROC			; ATL::CStringData::data, COMDAT

; 58   : 	{

  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx

; 59   : 		return (this+1);

  00005	48 8b 44 24 08	 mov	 rax, QWORD PTR this$[rsp]
  0000a	48 83 c0 18	 add	 rax, 24

; 60   : 	}

  0000e	c3		 ret	 0
?data@CStringData@ATL@@QEAAPEAXXZ ENDP			; ATL::CStringData::data
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlexcept.h
;	COMDAT ?AtlThrowImpl@ATL@@YAXJ@Z
_TEXT	SEGMENT
hr$ = 48
?AtlThrowImpl@ATL@@YAXJ@Z PROC				; ATL::AtlThrowImpl, COMDAT

; 65   : {

$LN5:
  00000	89 4c 24 08	 mov	 DWORD PTR [rsp+8], ecx
  00004	48 83 ec 28	 sub	 rsp, 40			; 00000028H

; 66   : 	ATLTRACE(atlTraceException, 0, _T("AtlThrow: hr = 0x%x\n"), hr );
; 67   : #ifdef _AFX
; 68   : 	if( hr == E_OUTOFMEMORY )

  00008	81 7c 24 30 0e
	00 07 80	 cmp	 DWORD PTR hr$[rsp], -2147024882 ; ffffffff8007000eH
  00010	75 07		 jne	 SHORT $LN2@AtlThrowIm

; 69   : 	{
; 70   : 		AfxThrowMemoryException();

  00012	e8 00 00 00 00	 call	 ?AfxThrowMemoryException@@YAXXZ ; AfxThrowMemoryException

; 71   : 	}

  00017	eb 09		 jmp	 SHORT $LN3@AtlThrowIm
$LN2@AtlThrowIm:

; 72   : 	else
; 73   : 	{
; 74   : 		AfxThrowOleException( hr );

  00019	8b 4c 24 30	 mov	 ecx, DWORD PTR hr$[rsp]
  0001d	e8 00 00 00 00	 call	 ?AfxThrowOleException@@YAXJ@Z ; AfxThrowOleException
$LN3@AtlThrowIm:
$LN4@AtlThrowIm:

; 75   : 	}
; 76   : #else
; 77   : 	throw CAtlException( hr );
; 78   : #endif
; 79   : };

  00022	48 83 c4 28	 add	 rsp, 40			; 00000028H
  00026	c3		 ret	 0
?AtlThrowImpl@ATL@@YAXJ@Z ENDP				; ATL::AtlThrowImpl
_TEXT	ENDS
; Function compile flags: /Odtp
; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt\corecrt_memcpy_s.h
;	COMDAT memcpy_s
_TEXT	SEGMENT
tv66 = 32
tv75 = 36
tv79 = 40
_Expr_val$1 = 44
_Expr_val$2 = 48
_Expr_val$3 = 52
_Destination$ = 80
_DestinationSize$ = 88
_Source$ = 96
_SourceSize$ = 104
memcpy_s PROC						; COMDAT

; 45   :     {

  00000	4c 89 4c 24 20	 mov	 QWORD PTR [rsp+32], r9
  00005	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  0000a	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000f	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00014	48 83 ec 48	 sub	 rsp, 72			; 00000048H

; 46   :         if (_SourceSize == 0)

  00018	48 83 7c 24 68
	00		 cmp	 QWORD PTR _SourceSize$[rsp], 0
  0001e	75 07		 jne	 SHORT $LN2@memcpy_s

; 47   :         {
; 48   :             return 0;

  00020	33 c0		 xor	 eax, eax
  00022	e9 0d 01 00 00	 jmp	 $LN1@memcpy_s
$LN2@memcpy_s:

; 49   :         }
; 50   : 
; 51   :         _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Destination != NULL, EINVAL);

  00027	48 83 7c 24 50
	00		 cmp	 QWORD PTR _Destination$[rsp], 0
  0002d	74 0a		 je	 SHORT $LN9@memcpy_s
  0002f	c7 44 24 20 01
	00 00 00	 mov	 DWORD PTR tv66[rsp], 1
  00037	eb 08		 jmp	 SHORT $LN10@memcpy_s
$LN9@memcpy_s:
  00039	c7 44 24 20 00
	00 00 00	 mov	 DWORD PTR tv66[rsp], 0
$LN10@memcpy_s:
  00041	8b 44 24 20	 mov	 eax, DWORD PTR tv66[rsp]
  00045	89 44 24 2c	 mov	 DWORD PTR _Expr_val$1[rsp], eax
  00049	83 7c 24 2c 00	 cmp	 DWORD PTR _Expr_val$1[rsp], 0
  0004e	75 1a		 jne	 SHORT $LN3@memcpy_s
  00050	e8 00 00 00 00	 call	 _errno
  00055	c7 00 16 00 00
	00		 mov	 DWORD PTR [rax], 22
  0005b	e8 00 00 00 00	 call	 _invalid_parameter_noinfo
  00060	b8 16 00 00 00	 mov	 eax, 22
  00065	e9 ca 00 00 00	 jmp	 $LN1@memcpy_s
$LN3@memcpy_s:

; 52   :         if (_Source == NULL || _DestinationSize < _SourceSize)

  0006a	48 83 7c 24 60
	00		 cmp	 QWORD PTR _Source$[rsp], 0
  00070	74 10		 je	 SHORT $LN5@memcpy_s
  00072	48 8b 44 24 68	 mov	 rax, QWORD PTR _SourceSize$[rsp]
  00077	48 39 44 24 58	 cmp	 QWORD PTR _DestinationSize$[rsp], rax
  0007c	0f 83 9c 00 00
	00		 jae	 $LN4@memcpy_s
$LN5@memcpy_s:

; 53   :         {
; 54   :             memset(_Destination, 0, _DestinationSize);

  00082	4c 8b 44 24 58	 mov	 r8, QWORD PTR _DestinationSize$[rsp]
  00087	33 d2		 xor	 edx, edx
  00089	48 8b 4c 24 50	 mov	 rcx, QWORD PTR _Destination$[rsp]
  0008e	e8 00 00 00 00	 call	 memset

; 55   : 
; 56   :             _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Source != NULL,                 EINVAL);

  00093	48 83 7c 24 60
	00		 cmp	 QWORD PTR _Source$[rsp], 0
  00099	74 0a		 je	 SHORT $LN11@memcpy_s
  0009b	c7 44 24 24 01
	00 00 00	 mov	 DWORD PTR tv75[rsp], 1
  000a3	eb 08		 jmp	 SHORT $LN12@memcpy_s
$LN11@memcpy_s:
  000a5	c7 44 24 24 00
	00 00 00	 mov	 DWORD PTR tv75[rsp], 0
$LN12@memcpy_s:
  000ad	8b 44 24 24	 mov	 eax, DWORD PTR tv75[rsp]
  000b1	89 44 24 30	 mov	 DWORD PTR _Expr_val$2[rsp], eax
  000b5	83 7c 24 30 00	 cmp	 DWORD PTR _Expr_val$2[rsp], 0
  000ba	75 17		 jne	 SHORT $LN6@memcpy_s
  000bc	e8 00 00 00 00	 call	 _errno
  000c1	c7 00 16 00 00
	00		 mov	 DWORD PTR [rax], 22
  000c7	e8 00 00 00 00	 call	 _invalid_parameter_noinfo
  000cc	b8 16 00 00 00	 mov	 eax, 22
  000d1	eb 61		 jmp	 SHORT $LN1@memcpy_s
$LN6@memcpy_s:

; 57   :             _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_DestinationSize >= _SourceSize, ERANGE);

  000d3	48 8b 44 24 68	 mov	 rax, QWORD PTR _SourceSize$[rsp]
  000d8	48 39 44 24 58	 cmp	 QWORD PTR _DestinationSize$[rsp], rax
  000dd	72 0a		 jb	 SHORT $LN13@memcpy_s
  000df	c7 44 24 28 01
	00 00 00	 mov	 DWORD PTR tv79[rsp], 1
  000e7	eb 08		 jmp	 SHORT $LN14@memcpy_s
$LN13@memcpy_s:
  000e9	c7 44 24 28 00
	00 00 00	 mov	 DWORD PTR tv79[rsp], 0
$LN14@memcpy_s:
  000f1	8b 44 24 28	 mov	 eax, DWORD PTR tv79[rsp]
  000f5	89 44 24 34	 mov	 DWORD PTR _Expr_val$3[rsp], eax
  000f9	83 7c 24 34 00	 cmp	 DWORD PTR _Expr_val$3[rsp], 0
  000fe	75 17		 jne	 SHORT $LN7@memcpy_s
  00100	e8 00 00 00 00	 call	 _errno
  00105	c7 00 22 00 00
	00		 mov	 DWORD PTR [rax], 34	; 00000022H
  0010b	e8 00 00 00 00	 call	 _invalid_parameter_noinfo
  00110	b8 22 00 00 00	 mov	 eax, 34			; 00000022H
  00115	eb 1d		 jmp	 SHORT $LN1@memcpy_s
$LN7@memcpy_s:

; 58   : 
; 59   :             // Unreachable, but required to suppress /analyze warnings:
; 60   :             return EINVAL;

  00117	b8 16 00 00 00	 mov	 eax, 22
  0011c	eb 16		 jmp	 SHORT $LN1@memcpy_s
$LN4@memcpy_s:

; 61   :         }
; 62   :         memcpy(_Destination, _Source, _SourceSize);

  0011e	4c 8b 44 24 68	 mov	 r8, QWORD PTR _SourceSize$[rsp]
  00123	48 8b 54 24 60	 mov	 rdx, QWORD PTR _Source$[rsp]
  00128	48 8b 4c 24 50	 mov	 rcx, QWORD PTR _Destination$[rsp]
  0012d	e8 00 00 00 00	 call	 memcpy

; 63   :         return 0;

  00132	33 c0		 xor	 eax, eax
$LN1@memcpy_s:

; 64   :     }

  00134	48 83 c4 48	 add	 rsp, 72			; 00000048H
  00138	c3		 ret	 0
memcpy_s ENDP
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z
_TEXT	SEGMENT
__formal$ = 8
__formal$ = 16
__formal$ = 24
?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z PROC ; __empty_global_delete, COMDAT

  00000	4c 89 44 24 18	 mov	 QWORD PTR [rsp+24], r8
  00005	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  0000a	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000f	c3		 ret	 0
?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z ENDP ; __empty_global_delete
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z
_TEXT	SEGMENT
__formal$ = 8
__formal$ = 16
?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z PROC ; __empty_global_delete, COMDAT

  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	c3		 ret	 0
?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z ENDP ; __empty_global_delete
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?__empty_global_delete@@YAXPEAX_K@Z
_TEXT	SEGMENT
__formal$ = 8
__formal$ = 16
?__empty_global_delete@@YAXPEAX_K@Z PROC		; __empty_global_delete, COMDAT

  00000	48 89 54 24 10	 mov	 QWORD PTR [rsp+16], rdx
  00005	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  0000a	c3		 ret	 0
?__empty_global_delete@@YAXPEAX_K@Z ENDP		; __empty_global_delete
_TEXT	ENDS
; Function compile flags: /Odtp
; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp
;	COMDAT ?__empty_global_delete@@YAXPEAX@Z
_TEXT	SEGMENT
__formal$ = 8
?__empty_global_delete@@YAXPEAX@Z PROC			; __empty_global_delete, COMDAT

  00000	48 89 4c 24 08	 mov	 QWORD PTR [rsp+8], rcx
  00005	c3		 ret	 0
?__empty_global_delete@@YAXPEAX@Z ENDP			; __empty_global_delete
_TEXT	ENDS
END