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

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

?? lz77.c

?? 不需要什么h文件
?? C
字號:
#ifdef WIN32
#include <windows.h>
#define malloc(s) HeapAlloc(GetProcessHeap(), 0, s)
#define free(p) HeapFree(GetProcessHeap(), 0, p)
#else
#include <stdlib.h>
#include <string.h>
#endif
//---------------------------------------------------------------------------

#define MAXBITS			15
#define MINOFFSET		0x01
#define MINMATCH		0x03
#define MAXMATCH		((1 << 24) + MINMATCH)
#define MAXWND			(1 << MAXBITS)
#define NIL				0xffff
#define M				3
#define MAX(a, b)		((a) > (b) ? (a) : (b))
#define MIN(a, b)		((a) < (b) ? (a) : (b))
//---------------------------------------------------------------------------

typedef unsigned char UCHAR;
typedef unsigned short USHORT;
typedef unsigned long ULONG;

typedef struct _LZ77_MATCHINFO
{
	ULONG len;
	ULONG off;
} LZ77_MATCHINFO;

typedef struct _LZ77_RUNSTATE
{
	ULONG wsize;
	UCHAR *pwnd;
	ULONG confine;
	USHORT *head;
	USHORT *prev;
	ULONG nice;
} LZ77_RUNSTATE;

typedef struct _LZ77_IOSTATE
{
	UCHAR *pbuf;
	ULONG bytenum;
	UCHAR bitnum;
	UCHAR codelen;
} LZ77_INPUTS, LZ77_OUTPUTS;
//---------------------------------------------------------------------------

static UCHAR log2(ULONG n)
{
	UCHAR c, i;

	if (n > 0xffff)
	{
		for (i = 16; n > ((ULONG)-1 >> (sizeof(ULONG) * 8 - i)); i++);
		return i;
	}

	if (n & 0xff00)
	{
		if (n & 0xf000)
		{
			if (n & 0xc000)
			{
				if (n & 0x8000)
				{
					c = 16;
				}
				else
				{
					c = 15;
				}
			}
			else
			{
				if (n & 0x2000)
				{
					c = 14;
				}
				else
				{
					c = 13;
				}
			}
		}
		else
		{
			if (n & 0x0c00)
			{
				if (n & 0x0800)
				{
					c = 12;
				}
				else
				{
					c = 11;
				}
			}
			else
			{
				if (n & 0x0200)
				{
					c = 10;
				}
				else
				{
					c = 9;
				}
			}
		}
	}
	else
	{
		if (n & 0x00f0)
		{
			if (n & 0x00c0)
			{
				if (n & 0x0080)
				{
					c = 8;
				}
				else
				{
					c = 7;
				}
			}
			else
			{
				if (n & 0x0020)
				{
					c = 6;
				}
				else
				{
					c = 5;
				}
			}
		}
		else
		{
			if (n & 0x000c)
			{
				if (n & 0x0008)
				{
					c = 4;
				}
				else
				{
					c = 3;
				}
			}
			else
			{
				if (n & 0x0002)
				{
					c = 2;
				}
				else
				{
					c = 1;
				}
			}
		}
	}

	return c;
}
//---------------------------------------------------------------------------

static void PutBits(LZ77_OUTPUTS *out, ULONG v, int num)
{
	UCHAR *s = out->pbuf + out->bytenum;
	ULONG i = 0;
	ULONG temp = v & ~(-1 << num);

	do
	{
		s[i] &= ~(-1 << out->bitnum);
		s[i] |= (UCHAR)(temp << out->bitnum);
		s[i + 1] = (UCHAR)(temp >> (8 - out->bitnum));
		temp >>= 8;
	} while ((++i << 3) < (ULONG)num);

	out->bitnum += (UCHAR)num;
	out->bytenum += out->bitnum >> 3;
	out->bitnum &= 7;
}
//---------------------------------------------------------------------------

static ULONG GetBits(LZ77_INPUTS *in, int num)
{
	UCHAR *s = in->pbuf + in->bytenum;
	ULONG i = 0, v = 0;

	do
	{
		v |= (s[i] >> in->bitnum) << (i << 3);
		v |= (s[i + 1] << (8 - in->bitnum)) << (i << 3);
	} while ((++i << 3) < (ULONG)num);

	in->bitnum += (UCHAR)num;
	in->bytenum += in->bitnum >> 3;
	in->bitnum &= 7;

	return v & ~(-1 << num);
}
//---------------------------------------------------------------------------

static void insert(LZ77_RUNSTATE *rs, ULONG at, ULONG len)
{
	ULONG ins_h, ins_t;

	if (len == 1)
	{
		ins_h = *(USHORT *)(rs->pwnd + at);
		rs->prev[at] = rs->head[ins_h];
		rs->head[ins_h] = (USHORT)at;
		return;
	}

	if ((at + len) < MAXWND)
	{
		ins_t = -1;
		len += at--;

		while (++at != len)
		{
			ins_h = *(USHORT *)(rs->pwnd + at);
			if ((ins_t - rs->head[ins_h]) <= 2)
				continue;
			ins_t = at;
			rs->prev[at] = rs->head[ins_h];
			rs->head[ins_h] = (USHORT)at;
		}
	}
}
//---------------------------------------------------------------------------

#define CHARBITS1 4
#define CHARBITS2 7
#define CHARBITS3 16
#define CHARNUMS0 7
#define CHARNUMS1 ((1 << CHARBITS1) - 1 + (CHARNUMS0 + 1) - 2)
#define CHARNUMS2 ((1 << CHARBITS2) - 1 + (CHARNUMS1 + 1))
#define CHARNUMS3 ((1 << CHARBITS3) - 1 + (CHARNUMS2 + 1))
//---------------------------------------------------------------------------
//標志位定義:
//長度:1,值:0,表示后面有一字節未壓縮數據
//長度:2,值:10,表示后面有一個匹配(變長偏移+變長長度)
//長度:3,值:110,表示后面有一個匹配(7位偏移+1位長度,偏移為128時表示壓縮結束)
//長度:3,值:111,表示后面有多個未壓縮字節
//---------------------------------------------------------------------------

static void outcodec(LZ77_OUTPUTS *out, UCHAR *buffer, ULONG length)
{
	ULONG i, temp;

	if (length <= CHARNUMS0)
	{
		for (i = 0; i < length; i++)
		{
			//逐字符輸出,額外輸出位(length)
			temp = 0x00 | (buffer[i] << 1);
			PutBits(out, temp, 1 + 8);			//標志位(1),數據位(8)
		}
	}
	else
	{
		if (length <= CHARNUMS1)
		{
			//輸出(0-13)表示有(0-13)+8個連續字符未壓縮,額外輸出位(7)
			temp = 0x07 | ((length - CHARNUMS0 - 1) << 3);
			PutBits(out, temp, 3 + CHARBITS1);	//標志位(3),數據位(4)
		}
		else if (length <= CHARNUMS1 * 2)
		{
			//優化輸出,最大額外輸出位(14)
			outcodec(out, buffer, CHARNUMS1);
			outcodec(out, buffer + CHARNUMS1, length - CHARNUMS1);
			return;
		}
		else if (length <= CHARNUMS2)
		{
			//輸出(14)表示未壓縮字符數由后面7位決定,額外輸出位(14)
			temp = 0x07 | (14 << 3);
			PutBits(out, temp, 3 + CHARBITS1);	//標志位(3),數據位(4)

			temp = length - CHARNUMS1 - 1;
			PutBits(out, temp, CHARBITS2);		//數據位(7)
		}
		else if (length <= CHARNUMS2 + CHARNUMS1)
		{
			//優化輸出,最大額外輸出位(21)
			outcodec(out, buffer, CHARNUMS2);
			outcodec(out, buffer + CHARNUMS2, length - CHARNUMS2);
			return;
		}
		else
		{
			//輸出(15)表示未壓縮字符數由后面兩字節決定,額外輸出位(23)
			temp = 0x07 | (15 << 3);
			PutBits(out, temp, 3 + CHARBITS1);	//標志位(3),數據位(4)

			//輸出(0-65535)+18個連續字符未壓縮
			temp = length - CHARNUMS2 - 1;
			PutBits(out, temp, CHARBITS3);		//數據位(16)
		}

		{
			UCHAR *s = out->pbuf + out->bytenum;
			UCHAR x = out->bitnum;

			temp = buffer[0];
			PutBits(out, temp, 8 - x);

			//拷貝連續的未壓縮字符
			for (i = 1; i < length; i++)
			{
				s[i] = buffer[i];
			}

			temp >>= 8 - x;
			out->bytenum += length - 1;
			PutBits(out, temp, x);
		}
	}
}
//---------------------------------------------------------------------------

static void outcodex(LZ77_OUTPUTS *out, ULONG offset, ULONG length)
{
	UCHAR i = 0;
	ULONG temp, m, n;

	switch (length)
	{
//	case 1:
//		temp = 0x03 | ((offset - MINOFFSET) << 3);
//		PutBits(out, temp, 3 + 4);				//標志位(3),數據位(4)
//		return;

	case 3:
		if (offset > 127)
			break;

	case 2:
		temp = 0x03 | ((offset - MINOFFSET) << 3);	//短匹配優化
		temp |= (length - 2) << (3 + 7);
		PutBits(out, temp, 3 + 7 + 1);			//標志位(3),數據位(1+7)
		return;
	}

	//寫入變長匹配偏移
	temp = 0x01 | ((offset - MINOFFSET) << 2);
	PutBits(out, temp, 2 + out->codelen);		//標志位(2),數據位(log2(數據))

	length -= MINMATCH;
	m = 1 << (M - 1);

	//計算匹配長度最少占用多少位
	do
	{
		n = ~(-1 << i++) << M;
		m <<= 1;
	} while ((m + n) <= length);

	//寫入匹配長度位數
	temp = ~(-1 << (i - 1));
	PutBits(out, temp, i);

	//寫入變長匹配長度
	temp = length - n;
	PutBits(out, temp, i + 3 - 1);
}//*/
//---------------------------------------------------------------------------

static int match(LZ77_RUNSTATE *rs, ULONG strat, LZ77_MATCHINFO *mi)
{
	UCHAR *src, *s, *d, *c, *t;
	USHORT index, *prev;
	ULONG i, m = 0, n, nice, flag = 0;

	src = rs->pwnd;
	index = rs->head[*(USHORT *)(src + strat)];

	if (NIL != index)
	{
		c = src + MIN(rs->confine, MAXMATCH);
		t = src + strat;
		m = MINMATCH - 1;
		prev = rs->prev;
		nice = rs->nice;

		do
		{
			s = t;
			d = src + index;

			while (*(USHORT *)(s += 2) == *(USHORT *)(d += 2)
				&& *(USHORT *)(s += 2) == *(USHORT *)(d += 2)
				&& *(USHORT *)(s += 2) == *(USHORT *)(d += 2)
				&& *(USHORT *)(s += 2) == *(USHORT *)(d += 2)
				&& s < c);
			if (*s == *d) s++;

			if (s >= c)
			{
				m = c - t;
				n = index;
				break;
			}
			i = s - t;

			if (m < i)
			{
				m = i;
				n = index;
				if (m > nice)
					flag = 1;
			}
			else if (flag)
				break;
			index = prev[index];
		} while (NIL != index);
	}

	if (MINMATCH <= m)
	{
		mi->len = m;
		mi->off = strat - n;
		return 1;
	}
	else
	{
		index = rs->head[*(USHORT *)(src + strat)];

		if (strat - index <= 127)
		{
			mi->len = 2;
			mi->off = strat - index;
			return 1;
		}/*
		else
		{
			//從前面16字節中查找1字節匹配
			for (i = 16; i > 0; i--)
			{
				if (*(src + strat - i) == *(src + strat))
				{
					mi->len = 1;
					mi->off = i;
					return 1;
				}
			}
		}//*/
	}

	return 0;
}
//---------------------------------------------------------------------------

static ULONG deflate(LZ77_RUNSTATE rs, UCHAR *dst, ULONG *inbytes)
{
	LZ77_MATCHINFO mi;
	LZ77_OUTPUTS out;
	ULONG strstart = 0, count = 0;
	LZ77_OUTPUTS prev_out;
	ULONG prev_start = 0;

	out.pbuf = dst;
	out.bytenum = 0;
	out.bitnum = 0;
	out.codelen = 1;
	prev_out = out;

	memset(rs.head, NIL, sizeof(USHORT) * 65536);

	do
	{
		if (match(&rs, strstart, &mi))
		{
			if (count > 0)
			{
				outcodec(&out, rs.pwnd + strstart - count, count);		//輸出無匹配字符
				count = 0;
			}

			if ((ULONG)(1 << out.codelen) < strstart)
				out.codelen = log2(strstart - MINOFFSET);

			insert(&rs, strstart, mi.len);						//更新字典記錄
			outcodex(&out, mi.off, mi.len);						//輸出壓縮代碼
			strstart += mi.len;
		}
		else
		{
			insert(&rs, strstart, 1);							//更新字典記錄
			count++;
			strstart += 1;
		}

		if (strstart - prev_start > 0x1000)						//跟蹤壓縮率變化
		{
			if (strstart - prev_start < out.bytenum - prev_out.bytenum - 4)
			{
				out = prev_out;
				outcodec(&out, rs.pwnd + prev_start, strstart - prev_start);	//處理無法壓縮的塊
			}

			prev_out = out;
			prev_start = strstart;
		}
	} while (strstart < rs.wsize);

	if (count > 0)
	{
		outcodec(&out, rs.pwnd + strstart - count, count);		//輸出無匹配字符
		count = 0;
	}

	if (strstart - prev_start < out.bytenum - prev_out.bytenum - 4)
	{
		out = prev_out;
		outcodec(&out, rs.pwnd + prev_start, strstart - prev_start);	//處理無法壓縮的塊
	}

	outcodex(&out, 128, 2);		//輸出壓縮結束標記

	if (out.bitnum)
		out.bytenum++;

	*inbytes = strstart;

	return out.bytenum;
}
//---------------------------------------------------------------------------

static ULONG inflate(UCHAR *src, UCHAR *dst, ULONG len, ULONG *inbytes)
{
	ULONG offset, length;
	UCHAR i, t;
	UCHAR *out, *s;
	LZ77_INPUTS in;

	in.pbuf = src;
	in.bytenum = 0;
	in.bitnum = 0;
	in.codelen = 1;
	out = dst;

	while (in.bytenum < len)
	{
		if (!GetBits(&in, 1))			//0 ?
		{
			*out++ = (UCHAR)GetBits(&in, 8);
		}
		else
		{
			if (!GetBits(&in, 1))		//10 ?
			{
				if ((1 << in.codelen) < out - dst)
					in.codelen = log2(out - dst - MINOFFSET);
				offset = GetBits(&in, in.codelen) + MINOFFSET;

				for (i = 0; GetBits(&in, 1); i++);	//計算匹配長度位數
				length = GetBits(&in, i + M);
				length += (~(-1 << i) << M) + MINMATCH;		//計算匹配長度

				do
				{
					*out++ = *(out - offset);
				} while (--length);
			}
			else
			{
				if (!GetBits(&in, 1))	//110 ?
				{
					offset = GetBits(&in, 7) + MINOFFSET;
					length = GetBits(&in, 1) + 2;

					if (offset == 128)	//解壓結束?
						break;

					do
					{
						*out++ = *(out - offset);	//解壓短匹配
					} while (--length);
				}
				else
				{
					length = GetBits(&in, CHARBITS1);

					switch (length)
					{
					case 14:
						length = GetBits(&in, CHARBITS2);
						length += CHARNUMS1 + 1;
						break;
					case 15:
						length = GetBits(&in, CHARBITS3);
						length += CHARNUMS2 + 1;
						break;
					default:
						length += CHARNUMS0 + 1;
						break;
					}

					s = in.pbuf + in.bytenum;
					offset = 1;
					i = in.bitnum;

					do
					{
						out[offset] = s[offset];	//還原字符串
					} while (++offset < length);

					t = (UCHAR)GetBits(&in, 8 - i);
					in.bytenum += length - 1;
					t |= (UCHAR)(GetBits(&in, i) << (8 - i));
					*out = t;
					out += length;
				}
			}
		}
	}

	*inbytes = in.bytenum;
	*inbytes += in.bitnum == 0 ? 0 : 1;

	return out - dst;
}
//---------------------------------------------------------------------------

ULONG Lz77Compress(void *dst, void *src, ULONG len, int level)
{
	LZ77_RUNSTATE rs;
	ULONG m, n, count = 0;

	if (0 == len)
		return 0;

	if (!src || !dst)
		return -1;

	switch (level)
	{
	case 0:
		rs.nice = 3;
		break;
	case 1:
		rs.nice = 30;
		break;
	case 2:
		rs.nice = 70;
		break;
	case 3:
		rs.nice = 150;
		break;
	case 4:
		rs.nice = -1;
		break;
	}

	rs.prev = (USHORT *)malloc(sizeof(USHORT) * 65536);
	rs.head = (USHORT *)malloc(sizeof(USHORT) * 65536);

	if (!rs.prev || !rs.head)
	{
		free(rs.head);
		free(rs.prev);
		return -1;
	}

	do
	{
		rs.wsize = MIN(len, MAXWND);
		rs.pwnd = src;
		//rs.confine = len;
		rs.confine = MIN(len, MAXWND);
		n = deflate(rs, dst, &m);
		len -= m;
		(UCHAR *)src += m;
		(UCHAR *)dst += n;
		count += n;
	} while ((int)len > 0);

	free(rs.head);
	free(rs.prev);

	return count;
}
//---------------------------------------------------------------------------

ULONG Lz77Decompress(void *dst, void *src, ULONG len)
{
	ULONG c = 0, i, o, a = 0;

	do
	{
		o = inflate(src, dst, len, &i);
		if ((a += o) >= 0x88000)
		{int c = 0;}
		(UCHAR *)src += i;
		(UCHAR *)dst += o;
		len -= i;
		c += o;
	} while (len);

	return c;
}
//---------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久精品| 亚洲一区二区三区影院| 欧美xingq一区二区| 91精品久久久久久蜜臀| 777奇米成人网| 欧美一区二区三区公司| 日韩美女在线视频| 久久美女艺术照精彩视频福利播放| 欧美成人伊人久久综合网| 日韩精品中文字幕在线不卡尤物| 日韩精品中文字幕在线不卡尤物| 久久综合色天天久久综合图片| 久久午夜国产精品| 国产精品婷婷午夜在线观看| 亚洲色图视频网站| 亚洲一区二区三区三| 日韩精品电影在线| 久久电影国产免费久久电影| 国产一区二区三区免费在线观看| 国产sm精品调教视频网站| 99久久久国产精品| 欧美日韩国产首页在线观看| 欧美一区二区三区影视| 久久综合九色欧美综合狠狠| 国产精品每日更新在线播放网址| 亚洲人成伊人成综合网小说| 亚洲成人www| 狠狠v欧美v日韩v亚洲ⅴ| 成人久久18免费网站麻豆| 欧美性感一类影片在线播放| 日韩精品一区在线观看| 国产精品欧美久久久久无广告| 一级精品视频在线观看宜春院| 日本欧美在线观看| 粉嫩av亚洲一区二区图片| 日本二三区不卡| 精品区一区二区| 日韩一区欧美小说| 日av在线不卡| 99热精品国产| 精品女同一区二区| 亚洲视频在线一区二区| 男人的j进女人的j一区| 不卡视频在线看| 欧美精品v国产精品v日韩精品 | 91精品国产高清一区二区三区| 欧美精品一区二区精品网| 专区另类欧美日韩| 乱一区二区av| 91同城在线观看| 2021国产精品久久精品| 亚洲老妇xxxxxx| 国产在线视频精品一区| 91福利视频网站| 国产亚洲精品bt天堂精选| 亚洲一区二区三区四区在线观看 | 99精品欧美一区二区三区小说| 欧美一区二区三区视频| 18涩涩午夜精品.www| 毛片av一区二区三区| 色哟哟国产精品免费观看| 欧美精品一区二| 五月天激情综合| 91麻豆国产福利精品| 久久久五月婷婷| 蜜臀av亚洲一区中文字幕| 色噜噜偷拍精品综合在线| 国产亚洲欧美激情| 麻豆精品新av中文字幕| 欧美吞精做爰啪啪高潮| 国产精品久久久99| 国产毛片精品国产一区二区三区| 在线播放欧美女士性生活| 亚洲免费观看高清完整版在线 | 日韩精品成人一区二区三区| 色噜噜狠狠成人网p站| 亚洲国产激情av| 国产乱码精品一区二区三区忘忧草 | 欧美成人官网二区| 亚洲成人资源在线| 91国内精品野花午夜精品| 中文字幕精品一区二区三区精品| 精品综合免费视频观看| 欧美一区二区在线看| 一区二区三区欧美视频| av在线综合网| 中文字幕在线不卡| 国产成人精品一区二区三区网站观看| 日韩亚洲欧美一区二区三区| 亚洲成人精品一区二区| 欧美在线你懂得| 亚洲国产精品久久艾草纯爱 | 亚洲国产精品激情在线观看| 国产老肥熟一区二区三区| 精品精品欲导航| 精品一区二区日韩| 精品国产91乱码一区二区三区 | 一区二区三区小说| 99国内精品久久| 中文字幕亚洲精品在线观看 | 中文字幕在线不卡一区二区三区| 豆国产96在线|亚洲| 久久久不卡网国产精品二区| 国产伦精一区二区三区| 国产天堂亚洲国产碰碰| 国产.欧美.日韩| 国产精品乱码久久久久久 | 国产精品久久久久影院色老大| 国产精品一卡二卡| 国产日韩欧美不卡在线| 国产成人免费视频网站 | 亚洲18女电影在线观看| 正在播放一区二区| 另类中文字幕网| 久久精品视频网| 成人国产精品免费观看动漫| 日韩毛片高清在线播放| 欧美色欧美亚洲另类二区| 偷拍一区二区三区四区| 日韩午夜激情视频| 国产精品996| 亚洲视频一区二区在线| 欧美日韩精品一区二区三区 | 欧美在线观看视频在线| 日韩在线卡一卡二| 久久综合网色—综合色88| jizz一区二区| 性久久久久久久久久久久| 日韩免费一区二区| 成人精品免费网站| 亚洲一区二区偷拍精品| 日韩欧美色综合网站| 成人午夜在线视频| 亚洲成人在线观看视频| 久久久久久亚洲综合| 一本色道久久综合亚洲91| 97se亚洲国产综合自在线观| 亚洲一区二三区| 精品久久久久久久人人人人传媒 | 欧美肥妇bbw| 国产福利精品导航| 亚洲主播在线播放| 精品国产免费人成电影在线观看四季 | 久久爱www久久做| 亚洲欧美日韩系列| 欧美大尺度电影在线| 成人免费毛片嘿嘿连载视频| 午夜av电影一区| 国产精品乱人伦| 欧美一级一区二区| 91啪在线观看| 久久草av在线| 亚洲午夜在线观看视频在线| 久久老女人爱爱| 欧美精品一级二级三级| 高清不卡在线观看| 青青草国产成人99久久| 亚洲女与黑人做爰| 久久亚区不卡日本| 7777精品伊人久久久大香线蕉完整版| 成人永久免费视频| 久久精品国产在热久久| 亚洲一区影音先锋| 国产精品久久久久四虎| 日韩精品一区二区三区老鸭窝| 91久久免费观看| 国产91清纯白嫩初高中在线观看 | eeuss鲁片一区二区三区在线看 | 91精品国产综合久久久久久| 99久久综合狠狠综合久久| 韩国理伦片一区二区三区在线播放| 亚洲美女视频在线观看| 欧美国产日韩在线观看| 日韩欧美你懂的| 欧美日韩精品欧美日韩精品 | 欧美一级xxx| 欧美三级电影网| 99久久精品久久久久久清纯| 国产精选一区二区三区| 日日摸夜夜添夜夜添精品视频 | 成人福利视频在线看| 精品一区二区av| 奇米色777欧美一区二区| 亚洲影院在线观看| 亚洲精品视频在线| 中文字幕中文字幕在线一区| 日韩电影在线观看电影| 亚洲码国产岛国毛片在线| 国产日产欧产精品推荐色| 欧美变态tickling挠脚心| 欧美一区二区三区影视| 欧美理论片在线| 欧美日韩国产高清一区| 欧美怡红院视频| 欧美亚洲高清一区| 欧美三级视频在线| 欧美日韩国产美女| 欧美日本韩国一区| 欧美男人的天堂一二区| 欧美日韩的一区二区|