亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gif89a.cpp

?? GIF文件解碼器類使用說明 本解碼器類支持GIF文件格式的89a版本
?? CPP
字號:
#include <fstream.h>
#include <string.h>
#include "gif89a.h"

CGif89a::CGif89a()
{	opened = FALSE;
	error = FALSE;
}

CGif89a::CGif89a(LPCSTR fileName,BOOL inMem)
{	if(open(fileName,inMem))
	{	opened = TRUE;
		error = FALSE;
	}
	else
	{	opened = FALSE;
		error = TRUE;
	}
}

CGif89a::~CGif89a()
{	close();
}

BOOL CGif89a::operator!()
{	return error;
}

BOOL CGif89a::open(LPCSTR fileName,BOOL b)
{	char cc[4];
	BYTE be;
	BOOL fileEnd = FALSE;
	inMem = b;
	allFrames = NULL;
	curIndex = 0;
	curFrame.pColorTable = NULL;
	curFrame.dataBuf = NULL;
	ctrlExt.active = FALSE;
	if(opened)
		return FALSE;
	ifs.open(fileName,ios::binary);
	if(!ifs)
		return FALSE;
	ifs.read(cc,3);
	if(strncmp(cc,"GIF",3) != 0)
		goto error;
	ifs.read(version,3);
	version[3] = 0;
	if(strncmp(version,"89a",3) > 0)
		goto error;
	ifs.read((char*)&gInfo.scrWidth,2);
	ifs.read((char*)&gInfo.scrHeight,2);
	if(!ifs.good())
		goto error;
	ifs.read((char*)&be,1);
	if((be&0x80) != 0)
		gInfo.gFlag = TRUE;
	else
		gInfo.gFlag = FALSE;
	gInfo.colorRes = ((be&0x70)>>4)+1;
	if(gInfo.gFlag)
	{	if((be&0x08) != 0)
			gInfo.gSort = TRUE;
		else
			gInfo.gSort = FALSE;
		gInfo.gSize = 1;
		gInfo.gSize <<= ((be&0x07)+1);
	}
	ifs.read((char*)&be,1);
	gInfo.BKColorIdx = be;
	ifs.read((char*)&be,1);
	gInfo.pixelAspectRatio = be;
	if(!ifs.good())
		goto error;
	if(gInfo.gFlag)
	{	ifs.read((char*)gColorTable,gInfo.gSize*3);
		gInfo.gColorTable = gColorTable;
	}
	else
		gInfo.gColorTable = NULL;
	dataStart = ifs.tellg();
	if((gInfo.frames = checkFrames(ifs)) == 0)
		goto error;
	if(inMem)
	{	if((allFrames = new FRAME[gInfo.frames]) == NULL)
			goto error;
		ZeroMemory(allFrames,sizeof(FRAME)*gInfo.frames);
		if(!getAllFrames(ifs))
		{	delete[] allFrames;
			allFrames = NULL;
			goto error;
		}
		ifs.close();
	}
	opened = TRUE;
	return TRUE;
error:
	ifs.close();
	return FALSE;
}

UINT CGif89a::checkFrames(ifstream& ifs)
{	BYTE be;
	BOOL fileEnd = FALSE;
	UINT frames=0;
	streampos pos = ifs.tellg();
	while(!ifs.eof() && !fileEnd)
	{	ifs.read((char*)&be,1);
		switch(be)
		{	case 0x21:
				ifs.read((char*)&be,1);
				switch(be)
				{	case 0xf9:
					case 0xfe:
					case 0x01:
					case 0xff:
						while(!ifs.eof())
						{	ifs.read((char*)&be,1);
							if(be == 0)
								break;
							ifs.seekg(be,ios::cur);
						}
						break;
					default:
						return 0;
				}
				break;
			case 0x2c:
			{	BYTE bp;
				BOOL lFlag=FALSE;
				UINT lSize=1;
				frames++;
				ifs.seekg(8,ios::cur);
				ifs.read((char*)&bp,1);
				if((bp&0x80) != 0)
					lFlag = TRUE;
				lSize <<= ((bp&0x07)+1);
				if(lFlag)
					ifs.seekg(lSize*3,ios::cur);
				if(!ifs.good())
					return 0;
				ifs.read((char*)&be,1);
				while(!ifs.eof())
				{	ifs.read((char*)&be,1);
					if(be == 0)
						break;
					ifs.seekg(be,ios::cur);
				}
				break;
			}
			case 0x3b:
				fileEnd = TRUE;
				break;
			case 0x00:
				break;
			default:
				return 0;
		}
	}
	ifs.seekg(pos);
	return frames;
}

BOOL CGif89a::getAllFrames(ifstream& ifs)
{	BYTE be;
	BOOL fileEnd = FALSE;
	FRAME *pf = allFrames;
	streampos pos = ifs.tellg();
	int i;
	while(!ifs.eof() && !fileEnd)
	{	ifs.read((char*)&be,1);
		switch(be)
		{	case 0x21:
				ifs.read((char*)&be,1);
				switch(be)
				{	case 0xf9:
						while(!ifs.eof())
						{	ifs.read((char*)&be,1);
							if(be == 0)
								break;
							if(be == 4)
							{	ctrlExt.active = TRUE;
								ifs.read((char*)&be,1);
								ctrlExt.disposalMethod = (be&0x1c)>>2;
								if((be&0x02) != 0)
									ctrlExt.userInputFlag = TRUE;
								else
									ctrlExt.userInputFlag = FALSE;
								if((be&0x01) != 0)
									ctrlExt.trsFlag = TRUE;
								else
									ctrlExt.trsFlag = FALSE;
								ifs.read((char*)&ctrlExt.delayTime,2);
								ifs.read((char*)&be,1);
								ctrlExt.trsColorIndex = be;
							}
							else
								ifs.seekg(be,ios::cur);
						}
						break;
					case 0xfe:
					case 0x01:
					case 0xff:
						while(!ifs.eof())
						{	ifs.read((char*)&be,1);
							if(be == 0)
								break;
							ifs.seekg(be,ios::cur);
						}
						break;
					default:
						goto error;
				}
				break;
			case 0x2c:
			{	BYTE bp;
				ifs.read((char*)&pf->imageLPos,2);
				ifs.read((char*)&pf->imageTPos,2);
				ifs.read((char*)&pf->imageWidth,2);
				ifs.read((char*)&pf->imageHeight,2);
				ifs.read((char*)&bp,1);
				if((bp&0x80) != 0)
					pf->lFlag = TRUE;
				if((bp&0x40) != 0)
					pf->interlaceFlag = TRUE;
				if((bp&0x20) != 0)
					pf->sortFlag = TRUE;
				pf->lSize = 1;
				pf->lSize <<= ((bp&0x07)+1);
				if(pf->lFlag)
				{	if((pf->pColorTable = new BYTE[pf->lSize*3]) == NULL)
						goto error;
					ifs.read((char*)pf->pColorTable,pf->lSize*3);
				}
				if(!ifs.good())
					goto error;
				if(!extractData(pf,ifs))
					goto error;
				if(ctrlExt.active)
				{	pf->ctrlExt = ctrlExt;
					ctrlExt.active = FALSE;
				}
				pf++;
				break;
			}
			case 0x3b:
				fileEnd = TRUE;
				break;
			case 0x00:
				break;
			default:
				goto error;
		}
	}
	ifs.seekg(pos);
	return TRUE;
error:
	pf = allFrames;
	for(i=0;i<(int)gInfo.frames;i++)
	{	if(pf->pColorTable != NULL)
		{	delete[] pf->pColorTable;
			pf->pColorTable = NULL;
		}
		if(pf->dataBuf != NULL)
		{	delete[] pf->dataBuf;
			pf->dataBuf = NULL;
		}
	}
	return FALSE;
}

LPCFRAME CGif89a::getNextFrame()
{	if(inMem)
	{	FRAME* p =  allFrames+curIndex;
		curIndex++;
		if(curIndex >= gInfo.frames)
			curIndex = 0;
		return p;
	}
	else
	{	BYTE be;
		BOOL fileEnd = FALSE;
		if(curFrame.pColorTable != NULL)
		{	delete[] curFrame.pColorTable;
			curFrame.pColorTable = NULL;
		}
		if(curFrame.dataBuf != NULL)
		{	delete[] curFrame.dataBuf;
			curFrame.dataBuf = NULL;
		}
		ZeroMemory(&curFrame,sizeof(FRAME));
		while(TRUE)
		{	ifs.read((char*)&be,1);
			switch(be)
			{	case 0x21:
					ifs.read((char*)&be,1);
					switch(be)
					{	case 0xf9:
							while(!ifs.eof())
							{	ifs.read((char*)&be,1);
								if(be == 0)
									break;
								if(be == 4)
								{	ctrlExt.active = TRUE;
									ifs.read((char*)&be,1);
									ctrlExt.disposalMethod = (be&0x1c)>>2;
									if((be&0x02) != 0)
										ctrlExt.userInputFlag = TRUE;
									else
										ctrlExt.userInputFlag = FALSE;
									if((be&0x01) != 0)
										ctrlExt.trsFlag = TRUE;
									else
										ctrlExt.trsFlag = FALSE;
									ifs.read((char*)&ctrlExt.delayTime,2);
									ifs.read((char*)&be,1);
									ctrlExt.trsColorIndex = be;
								}
								else
									ifs.seekg(be,ios::cur);
							}
							break;
						case 0xfe:
						case 0x01:
						case 0xff:
							while(!ifs.eof())
							{	ifs.read((char*)&be,1);
								if(be == 0)
									break;
								ifs.seekg(be,ios::cur);
							}
							break;
						default:
							goto error;
					}
					break;
				case 0x2c:
				{	BYTE bp;
					ifs.read((char*)&curFrame.imageLPos,2);
					ifs.read((char*)&curFrame.imageTPos,2);
					ifs.read((char*)&curFrame.imageWidth,2);
					ifs.read((char*)&curFrame.imageHeight,2);
					ifs.read((char*)&bp,1);
					if((bp&0x80) != 0)
						curFrame.lFlag = TRUE;
					if((bp&0x40) != 0)
						curFrame.interlaceFlag = TRUE;
					if((bp&0x20) != 0)
						curFrame.sortFlag = TRUE;
					curFrame.lSize = 1;
					curFrame.lSize <<= ((bp&0x07)+1);
					if((curFrame.pColorTable = new BYTE[curFrame.lSize*3]) == NULL)
						goto error;
					if(curFrame.lFlag)
						ifs.read((char*)curFrame.pColorTable,curFrame.lSize*3);
					if(!ifs.good())
						goto error;
					if(!extractData(&curFrame,ifs))
						goto error;
					curFrame.ctrlExt = ctrlExt;
					if(ctrlExt.active = TRUE)
						ctrlExt.active = FALSE;
					return &curFrame;
				}
				case 0x3b:
					ifs.seekg(dataStart);
					break;
				case 0x00:
					break;
				default:
					goto error;
			}
		}	
		return &curFrame;
error:
		if(curFrame.pColorTable != NULL)
		{	delete[] curFrame.pColorTable;
			curFrame.pColorTable = NULL;
		}
		if(curFrame.dataBuf != NULL)
		{	delete[] curFrame.dataBuf;
			curFrame.dataBuf = NULL;
		}
		return NULL;
	}
}

BOOL CGif89a::initStrTable(STRING_TABLE_ENTRY* strTable,UINT rootSize)
{	UINT i;
	unsigned char *cc;
	for(i=0;i<rootSize;i++)
	{	if((cc = new unsigned char[2]) == NULL)
			goto error;
		cc[0] = i,cc[1] = 0;
		strTable[i].p = cc;
		strTable[i].len = 1;
	}
	return TRUE;
error:
	for(i=0;i<rootSize;i++)
		if(strTable[i].p != NULL)
		{	delete[] strTable[i].p;
			strTable[i].p = NULL;
		}
	return FALSE;
}

BOOL CGif89a::addStrTable(STRING_TABLE_ENTRY* strTable,UINT addIdx,UINT idx,unsigned char c)
{	unsigned char *cc;
	UINT l = strTable[idx].len;
	if(addIdx >= 4096)
		return FALSE;
	if((cc = new unsigned char[l+2]) == NULL)
		return FALSE;
	for(UINT i=0;i<l;i++)
		cc[i] = strTable[idx].p[i];
	cc[l] = c;
	cc[l+1] = 0;
	strTable[addIdx].p = cc;
	strTable[addIdx].len = strTable[idx].len +1;
	return TRUE;
}

BOOL CGif89a::extractData(FRAME* f,ifstream& ifs)
{	STRING_TABLE_ENTRY *strTable;
	UINT codeSize,rootSize,tableIndex,codeSizeBK;
	int remainInBuf = 0,i;
	UINT bufIndex = 0,outIndex = 0;
	UINT bitIndex = 0;
	DWORD code,oldCode;
	BYTE be,*outP;
	BYTE buf[262];
	BOOL readOK = FALSE;
	UINT bufLen = f->imageWidth*f->imageHeight;
	if((strTable = new STRING_TABLE_ENTRY[4096]) == NULL)
		return FALSE;
	ZeroMemory(strTable,sizeof(STRING_TABLE_ENTRY)*4096);
	outP = f->dataBuf = new BYTE[bufLen];
	if(f->dataBuf == NULL)
	{	delete[] strTable;
		return FALSE;
	}
	ifs.read((char*)&be,1);
	codeSizeBK = codeSize = be+1;
	rootSize = 1;
	rootSize <<= be; 
	tableIndex = rootSize+2;
	if(!initStrTable(strTable,rootSize))
		goto error;

begin:
	if(remainInBuf<=4 && !readOK)
	{	for(i=0;i<remainInBuf;i++)
			buf[i] = buf[bufIndex+i];
		bufIndex = 0;
		ifs.read((char*)&be,1);
		if(be != 0)
		{	ifs.read((char*)(buf+remainInBuf),be);
			remainInBuf += be;
		}
		else
			readOK = TRUE;
		if(!ifs.good())
			goto error;
	}
	if(remainInBuf<=4)
		if(remainInBuf<=0 || codeSize > (remainInBuf*8-bitIndex))
			goto done;
	code = *((DWORD*)(buf+bufIndex));
	code <<= 32-codeSize-bitIndex;
	code >>= 32-codeSize;
	bitIndex += codeSize;
	bufIndex += bitIndex/8;
	remainInBuf -= bitIndex/8;
	bitIndex %= 8;
	if(code >= rootSize+1)
		goto error;
	if(code == rootSize)
		goto begin;
	else
	{	outP[outIndex++] = *strTable[code].p;
		oldCode = code;
	}
	for(;;)
	{	if(remainInBuf<=4 && !readOK)
		{	for(i=0;i<remainInBuf;i++)
				buf[i] = buf[bufIndex+i];
			bufIndex = 0;
			ifs.read((char*)&be,1);
			if(be != 0)
			{	ifs.read((char*)(buf+remainInBuf),be);
				remainInBuf += be;
			}
			else
				readOK = TRUE;
			if(!ifs.good())
				goto error;
		}
		if(remainInBuf<=4)
			if(remainInBuf<=0 || codeSize > (remainInBuf*8-bitIndex))
				break;
		code = *((DWORD*)(buf+bufIndex));
		code <<= 32-codeSize-bitIndex;
		code >>= 32-codeSize;
		bitIndex += codeSize;
		bufIndex += bitIndex/8;
		remainInBuf -= bitIndex/8;
		bitIndex %= 8;
		if(code == rootSize)
		{	codeSize = codeSizeBK;
			for(i=rootSize;i<4096;i++)
				if(strTable[i].p != NULL)
				{	delete strTable[i].p;
					strTable[i].p = NULL;
					strTable[i].len = 0;
				}
			tableIndex = rootSize+2;
			goto begin;
		}
		else if(code == rootSize+1)
			break;
		else
		{	unsigned char *p = strTable[code].p;
			int l = strTable[code].len;
			unsigned char c;
			if(p != NULL)
			{	c = *p;
				if(outIndex+l <= bufLen)
					for(i=0;i<l;i++)
						outP[outIndex++] = *p++;
				else
					goto error;
				if(!addStrTable(strTable,tableIndex++,oldCode,c))
					goto error;
				oldCode = code;
			}
			else
			{	p = strTable[oldCode].p;
				l = strTable[oldCode].len;
				c = *p;
				if(outIndex+l+1 <= bufLen)
				{	for(i=0;i<l;i++)
						outP[outIndex++] = *p++;
					outP[outIndex++] = c;
				}
				else
					goto error;
				if(!addStrTable(strTable,tableIndex++,oldCode,c))
					goto error;
				oldCode = code;
			}
			if(tableIndex == (((UINT)1)<<codeSize) && codeSize != 12)
				codeSize++;
		}
	}
done:
	for(i=0;i<4096;i++)
		if(strTable[i].p != NULL)
		{	delete strTable[i].p;
			strTable[i].p = NULL;
		}
	delete[] strTable;
	return TRUE;
error:
	for(i=0;i<4096;i++)
		if(strTable[i].p != NULL)
		{	delete strTable[i].p;
			strTable[i].p = NULL;
		}
	delete[] strTable;
	delete[] f->dataBuf;
	f->dataBuf = NULL;
	return FALSE;
}

LPCGLOBAL_INFO CGif89a::getGlobalInfo()
{	return &gInfo;
}

void CGif89a::close()
{	if(opened)
	{	opened = FALSE;
		if(inMem && allFrames != NULL)
		{	FRAME* pf = allFrames;
			for(UINT i=0;i<gInfo.frames;i++)
			{	if(pf->pColorTable != NULL)
				{	delete[] pf->pColorTable;
					pf->pColorTable = NULL;
				}
				if(pf->dataBuf != NULL)
				{	delete[] pf->dataBuf;
					pf->dataBuf = NULL;
				}
			}
			delete[] allFrames;
			allFrames = NULL;
		}
		if(!inMem)
		{	if(curFrame.pColorTable != NULL)
			{	delete[] curFrame.pColorTable;
				curFrame.pColorTable = NULL;
			}
			if(curFrame.dataBuf != NULL)
			{	delete[] curFrame.dataBuf;
				curFrame.dataBuf = NULL;
			}
			ifs.close();
		}
	}
}

LPCSTR CGif89a::getVer()
{	return version;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲专区一二三| 91丨国产丨九色丨pron| 日韩一级免费观看| 蜜臀久久99精品久久久画质超高清| 91极品美女在线| 亚洲成人激情社区| 欧美刺激午夜性久久久久久久| 免费人成精品欧美精品| 精品国产3级a| 成人激情开心网| 亚洲综合成人在线视频| 蜜桃一区二区三区在线观看| 日本成人在线网站| 日韩无一区二区| 国产精品一区二区免费不卡| 中文字幕日本乱码精品影院| 91精品福利视频| 久久99精品一区二区三区三区| 亚洲国产精品久久人人爱蜜臀| 在线视频国产一区| 日本不卡中文字幕| 国产精品天干天干在观线| 日本久久电影网| 久久97超碰国产精品超碰| 中文字幕精品一区| 欧美日韩午夜精品| 国产大陆精品国产| 亚洲成av人**亚洲成av**| 日韩精品一区二区三区三区免费| 成人美女视频在线观看18| 亚洲高清免费视频| 中文字幕第一区| 在线不卡免费欧美| 欧日韩精品视频| 99久久精品国产一区| 中文字幕亚洲区| 欧美剧在线免费观看网站| 国产一区二区三区不卡在线观看 | 欧美无砖专区一中文字| 奇米影视7777精品一区二区| 国产精品黄色在线观看| 538prom精品视频线放| 成人黄色小视频| 美国三级日本三级久久99| 亚洲精品免费播放| 欧美色图激情小说| 国产.欧美.日韩| 久久精品国产免费| 亚洲成av人片一区二区梦乃| 国产日产欧产精品推荐色| 宅男在线国产精品| 91福利视频久久久久| 成人做爰69片免费看网站| 久久精品国产第一区二区三区| 夜夜揉揉日日人人青青一国产精品 | 91精品在线麻豆| 91小视频免费看| 国产69精品久久99不卡| 美女视频免费一区| 视频一区在线播放| 国产一区二区三区观看| 三级久久三级久久| 亚洲一区在线看| 国产精品国产自产拍高清av王其| 精品国产乱码久久久久久老虎| 在线中文字幕一区| 99v久久综合狠狠综合久久| 国产精品18久久久久久久久久久久 | 日韩女优电影在线观看| 欧美天天综合网| 在线免费精品视频| 色综合久久综合网欧美综合网| 国产成人av资源| 国产乱码精品一区二区三区av| 麻豆高清免费国产一区| 日韩av中文字幕一区二区三区| 天堂午夜影视日韩欧美一区二区| 亚洲资源中文字幕| 亚洲国产日韩a在线播放性色| 亚洲黄色小视频| 亚洲美女视频在线观看| 亚洲人吸女人奶水| 亚洲精品精品亚洲| 亚洲精品免费在线观看| 亚洲一区视频在线| 婷婷综合五月天| 青青草国产成人99久久| 精品影视av免费| 国产在线看一区| 国产不卡视频在线播放| 成人福利视频在线看| 91在线一区二区| 色偷偷88欧美精品久久久| 欧美日韩视频在线观看一区二区三区| 色成年激情久久综合| 欧美精品在线观看一区二区| 欧美一区二区视频在线观看2022| 欧美一区二区日韩| 久久久高清一区二区三区| 国产精品美女久久久久aⅴ| 亚洲人成7777| 日本亚洲最大的色成网站www| 麻豆传媒一区二区三区| 粉嫩aⅴ一区二区三区四区五区 | 亚洲成人一二三| 久久激情综合网| 成人av网在线| 欧美日韩久久一区| 亚洲精品一区二区精华| 国产精品成人免费在线| 午夜视频一区在线观看| 国产一区二区三区免费看| 99精品久久只有精品| 欧美狂野另类xxxxoooo| 久久久精品天堂| 一区二区高清在线| 日本一道高清亚洲日美韩| 成人黄页在线观看| 精品视频全国免费看| 久久先锋影音av鲁色资源网| 亚洲欧美日韩综合aⅴ视频| 日本不卡一二三区黄网| 丁香天五香天堂综合| 欧美美女直播网站| 国产精品美女www爽爽爽| 日韩高清国产一区在线| 97久久久精品综合88久久| 日韩欧美一区二区免费| 亚洲欧美日韩国产手机在线 | 韩国女主播成人在线| 91蝌蚪porny成人天涯| 精品日韩av一区二区| 亚洲制服丝袜av| 国产成人在线视频网站| 欧美一区二区三区在线观看视频| 国产精品亲子乱子伦xxxx裸| 开心九九激情九九欧美日韩精美视频电影 | 欧美日韩在线免费视频| 国产精品无人区| 毛片不卡一区二区| 欧美视频在线观看一区| 亚洲欧美在线视频观看| 久久疯狂做爰流白浆xx| 欧美性xxxxxx少妇| 亚洲美女视频在线观看| 夫妻av一区二区| 久久精品人人做| 美腿丝袜亚洲三区| 91.com视频| 亚洲综合免费观看高清完整版| 成人性色生活片| 2023国产精品视频| 国产一区二区在线影院| 911精品产国品一二三产区| 亚洲午夜精品一区二区三区他趣| 国产成人免费视| 26uuu亚洲综合色欧美| 奇米一区二区三区av| 在线电影国产精品| 香蕉成人啪国产精品视频综合网| 色综合天天综合色综合av | 成人亚洲精品久久久久软件| 日韩小视频在线观看专区| 午夜一区二区三区视频| 欧美最猛性xxxxx直播| 亚洲欧美日本在线| 91麻豆国产精品久久| 国产精品久久久久久久午夜片| 丁香婷婷综合网| 中文字幕精品一区二区三区精品| 国产成人精品亚洲午夜麻豆| 久久精品人人做人人综合| 成人在线综合网站| 国产精品灌醉下药二区| 99re在线精品| 亚洲一区二区三区国产| 欧美日韩精品三区| 日韩电影一区二区三区四区| 91精品黄色片免费大全| 免费观看久久久4p| 精品国偷自产国产一区| 国产美女娇喘av呻吟久久| 欧美激情综合在线| 99久久精品99国产精品| 亚洲一区二区在线免费观看视频| 在线观看免费视频综合| 日韩精彩视频在线观看| 欧美大片一区二区| 国产成人av一区| 亚洲蜜臀av乱码久久精品蜜桃| 欧美性猛交xxxxxxxx| 99re8在线精品视频免费播放| 亚洲国产wwwccc36天堂| 制服丝袜中文字幕一区| 国产一区二区日韩精品| 亚洲丝袜自拍清纯另类| 欧美无人高清视频在线观看| 蜜桃久久av一区| 国产精品久久久久久久第一福利| 色88888久久久久久影院按摩|