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

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

?? bitap.c

?? Mehldau和Myer的Agrep3版本
?? C
字號:
/* Copyright (c) 1994 Sun Wu, Udi Manber, Burra Gopal.  All Rights Reserved. */

/* [chg] 22.09.96	[TG]		T.Gries <gries@ibm.net>

			needed for ISO_CHAR support:
			
			type of variable "c" in old_D_pat changed to CHAR !
			(as defined in AGREP.H = unsigned char).
				
			character transposition to lowercase if (NOUPPER)
			command line option is given.
*/

/*	If the pattern is not simple fixed pattern, then after preprocessing
	and generating the masks, the program goes here. 

	There are four cases:  
	
   1.	The pattern is simple regular expression and no error,
	then do the matching here.
	
   2. 	The pattern is simple regular expression and unit cost errors are allowed:
	then go to asearch().

   3.	The pattern is simple regular expression, and the edit cost is not uniform,
	then go to asearch1(). 

   4.	If the pattern is regular expression then go to re() if M < 14,
   	else go to re1()
*/


/* input parameters: old_D_pat: delimiter pattern.                      */
/* fd, input file descriptor, M: size of pattern, D: # of errors.       */

#include "agrep.h"
#include "memory.h"
#include "codepage.h"

extern unsigned char LUT[256];

extern int CurrentByteOffset;
extern unsigned Init1, D_endpos, endposition, Init[], Mask[], Bit[];
extern int LIMITOUTPUT, LIMITPERFILE;
extern int DELIMITER, FILENAMEONLY, D_length, I, AND, REGEX, JUMP, INVERSE, NOUPPER;
extern char D_pattern[];
extern int TRUNCATE, DD, S;
extern char Progname[], CurrentFileName[];
extern int num_of_matched, prev_num_of_matched;
extern int agrep_initialfd;
extern int EXITONERROR;
extern int agrep_inlen;
extern CHAR *agrep_inbuffer;
extern int agrep_inpointer;
extern CHAR *agrep_outbuffer;
extern int agrep_outlen;
extern int agrep_outpointer;
extern FILE *agrep_finalfp;
#ifndef __BORLANDC__
extern int errno;
#endif

extern int NEW_FILE, POST_FILTER;

#ifdef _WIN32
#include <io.h>
int  output();            /* agrep.c */
int  re();                /* agrep.c */
int  re1();               /* agrep.c */
int  asearch();           /* asearch.c */
int  asearch1();          /* asearch1.c */
int  fill_buf();          /* bitap.c */
#endif

/* bitap dispatches job */

int
bitap(old_D_pat, Pattern, fd, M, D)

char old_D_pat[], *Pattern;  
int fd, M, D;  
{
	CHAR c;  /* the original definition was: char c [TG 22.09.96] */
	register unsigned r1, r2, r3, CMask, i;
	register unsigned end, endpos, r_Init1;
	register unsigned D_Mask;
	int  ResidueSize , FIRSTROUND, lasti, print_end, j, num_read;
	int  k;
	CHAR *buffer;
	
	D_length = strlen(old_D_pat);
	for(i=0; i<D_length; i++) if(old_D_pat[i] == '^' || old_D_pat[i] == '$')
		old_D_pat[i] = '\n';
		
	if (REGEX) { 
		if (D > 4) {
			fprintf(stderr, "%s: the maximum number of erorrs allowed for full regular expressions is 4\n", Progname);
			if (!EXITONERROR) {
				errno = AGREP_ERROR;
				return -1;
			}
			else exit(2);
		}
		if (M <= SHORTREG) { 
			return re(fd, M, D);   /* SUN: need to find a even point */
		}
		else { 
			return re1(fd, M, D);
		}
	}   
	
	if (D > 0 && JUMP == ON) 
	{ 
		return asearch1(old_D_pat, fd, D); 
	}
	
	if (D > 0) 
	{ 
		return asearch(old_D_pat, fd, D); 
	}
	
	if(I == 0) Init1 = (unsigned)037777777777;

	j=0;

	r_Init1 = Init1;
	r1 = r2 = r3 = Init[0];
	endpos = D_endpos;

	D_Mask = D_endpos;
	for(i=1 ; i<D_length; i++) D_Mask = (D_Mask << 1) | D_Mask;
	D_Mask = ~D_Mask;
	FIRSTROUND = ON;

#if	AGREP_POINTER
	if (fd != -1) {
#endif	/*AGREP_POINTER*/
		alloc_buf(fd, &buffer, Max_record+BlockSize+1);
		buffer[Max_record-1] = '\n';
		lasti = Max_record;
		
		while ((num_read = fill_buf(fd, buffer + Max_record, BlockSize)) > 0)
		{
			i=Max_record; 
			end = Max_record + num_read;
			
			if(FIRSTROUND) {  
				i = Max_record - 1 ;

				if(DELIMITER) {
					for(k=0; k<D_length; k++) {
						if(old_D_pat[k] != buffer[Max_record+k]) break;
					}
					if(k>=D_length) j--;
				}

				FIRSTROUND = OFF;  
			}
			
			if(num_read < BlockSize) {
				strncpy(buffer+Max_record+num_read, old_D_pat, D_length);
				end = end + D_length;
				buffer[end] = '\0';
			}

			/* BITAP_PROCESS: the while-loop below */
			
			while (i < end)
			{
				c = LUT[buffer[i++]]; /* NEW [TG] */
				CurrentByteOffset ++;
				CMask = Mask[c];
				
				r1 = r_Init1 & r3;
				r2 = (( r3 >> 1 ) & CMask) | r1;
				if ( r2 & endpos ) {
					j++;
					if (DELIMITER) CurrentByteOffset -= D_length;
					else CurrentByteOffset -= 1;
					
					if(((AND == 1) && ((r2 & endposition) == endposition)) || ((AND == 0) && (r2 & endposition)) ^ INVERSE )
					{ 
						if(FILENAMEONLY && (NEW_FILE || !POST_FILTER)) {
							num_of_matched++;

							if (agrep_finalfp != NULL) 
								fprintf(agrep_finalfp, "%s\n", CurrentFileName);
							else {
								int outindex;
								
								for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) && 
										(CurrentFileName[outindex] != '\0'); outindex++) {
									agrep_outbuffer[agrep_outpointer+outindex] = CurrentFileName[outindex];
								}
								
								if ((CurrentFileName[outindex] != '\0') || (outindex+agrep_outpointer+1>=agrep_outlen)) {
									OUTPUT_OVERFLOW;
									free_buf(fd, buffer);
									return -1;
								}
								else agrep_outbuffer[agrep_outpointer+outindex++] = '\n';
								
								agrep_outpointer += outindex;
							}

							free_buf(fd, buffer);
							NEW_FILE = OFF;
							return 0; 
						}

						print_end = i - D_length - 1;
						if ( ((fd != -1) && !(lasti >= Max_record+num_read - 1)) || ((fd == -1) && !(lasti >= num_read)) )
							if (-1 == output(buffer, lasti, print_end, j)) { free_buf(fd, buffer); return -1;} 
						if (((LIMITOUTPUT > 0) && (LIMITOUTPUT <= num_of_matched)) ||
						    ((LIMITPERFILE > 0) && (LIMITPERFILE <= num_of_matched - prev_num_of_matched))) {
							free_buf(fd, buffer);
							return 0;	/* done */
						}
					}
					lasti = i - D_length; 
					TRUNCATE = OFF;
					r2 = r3 = r1 = Init[0];
					r1 = r_Init1 & r3;
					r2 = ((( r2 >> 1) & CMask) | r1 ) & D_Mask;
					
					if (DELIMITER) CurrentByteOffset += 1*D_length;
					else CurrentByteOffset += 1*1;
				}
				
				c = LUT[buffer[i++]]; /* NEW [TG] */
				CurrentByteOffset ++;
				CMask = Mask[c];
				r1 = r_Init1 & r2;
				r3 = (( r2 >> 1 ) & CMask) | r1; 
				if ( r3 & endpos ) {
					j++;
					if (DELIMITER) CurrentByteOffset -= D_length;
					else CurrentByteOffset -= 1;
					if(((AND == 1) && ((r3 & endposition) == endposition)) || ((AND == 0) && (r3 & endposition)) ^ INVERSE )
					{ 
						if(FILENAMEONLY && (NEW_FILE || !POST_FILTER)) {
							num_of_matched++;

							if (agrep_finalfp != NULL) 
								fprintf(agrep_finalfp, "%s\n", CurrentFileName);
							else {
								int outindex;
								for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) && 
										(CurrentFileName[outindex] != '\0'); outindex++) {
									agrep_outbuffer[agrep_outpointer+outindex] = CurrentFileName[outindex];
								}
								if ((CurrentFileName[outindex] != '\0') || (outindex+agrep_outpointer+1>=agrep_outlen)) {
									OUTPUT_OVERFLOW;
									free_buf(fd, buffer);
									return -1;
								}
								else agrep_outbuffer[agrep_outpointer+outindex++] = '\n';
								agrep_outpointer += outindex;
							}

							free_buf(fd, buffer);
							NEW_FILE = OFF;
							return 0; 
						}

						print_end = i - D_length - 1;
						if ( ((fd != -1) && !(lasti >= Max_record+num_read - 1)) || ((fd == -1) && !(lasti >= num_read)) )
							if (-1 == output(buffer, lasti, print_end, j)) { free_buf(fd, buffer); return -1;}
						if (((LIMITOUTPUT > 0) && (LIMITOUTPUT <= num_of_matched)) ||
						    ((LIMITPERFILE > 0) && (LIMITPERFILE <= num_of_matched - prev_num_of_matched))) {
							free_buf(fd, buffer);
							return 0;	/* done */
						}
					}
					lasti = i - D_length ;
					TRUNCATE = OFF;
					r2 = r3 = r1 = Init[0]; 
					r1 = r_Init1 & r2;
					r3 = ((( r2 >> 1) & CMask) | r1 ) & D_Mask;
					if (DELIMITER) CurrentByteOffset += 1*D_length;
					else CurrentByteOffset += 1*1;
				}   
			}

			ResidueSize = num_read + Max_record - lasti;
			if(ResidueSize > Max_record) {
				ResidueSize = Max_record;
				TRUNCATE = ON;   
			}
			
			strncpy(buffer+Max_record-ResidueSize, buffer+lasti, ResidueSize);
			lasti = Max_record - ResidueSize;
			
			if(lasti < 0) {
				lasti = 1;
			}
			
			if (((LIMITOUTPUT > 0) && (LIMITOUTPUT <= num_of_matched)) ||
			    ((LIMITPERFILE > 0) && (LIMITPERFILE <= num_of_matched - prev_num_of_matched))) {
				free_buf(fd, buffer);
				return 0;	/* done */
			}
		}
		free_buf(fd, buffer);
		return 0;
#if	AGREP_POINTER
	}
	else {
		buffer = agrep_inbuffer;
		num_read = agrep_inlen;
		end = num_read;
		
		/* buffer[end-1] = '\n';*/	/* at end of the text. */
		/* buffer[0] = '\n';*/		/* in front of the  text. */
		
		i = 0;
		lasti = 1;

		if(DELIMITER) {
			for(k=0; k<D_length; k++) {
				if(old_D_pat[k] != buffer[k]) break;
			}
			if(k>=D_length) j--;
		}

			/* An exact copy of the above: 
			   BITAP_PROCESS: the while-loop below */
			
			while (i < end)
			{
				c = LUT[buffer[i++]]; /* NEW [TG] */
				CurrentByteOffset ++;
				CMask = Mask[c];
				r1 = r_Init1 & r3;
				r2 = (( r3 >> 1 ) & CMask) | r1;
				
				if ( r2 & endpos ) {
					j++;
					if (DELIMITER) CurrentByteOffset -= D_length;
					else CurrentByteOffset -= 1;
					if(((AND == 1) && ((r2 & endposition) == endposition)) || ((AND == 0) && (r2 & endposition)) ^ INVERSE )
					{ 
						if(FILENAMEONLY && (NEW_FILE || !POST_FILTER)) {
							num_of_matched++;

							if (agrep_finalfp != NULL) 
								fprintf(agrep_finalfp, "%s\n", CurrentFileName);
							else {
								int outindex;
								for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) && 
										(CurrentFileName[outindex] != '\0'); outindex++) {
									agrep_outbuffer[agrep_outpointer+outindex] = CurrentFileName[outindex];
								}
								if ((CurrentFileName[outindex] != '\0') || (outindex+agrep_outpointer+1>=agrep_outlen)) {
									OUTPUT_OVERFLOW;
									free_buf(fd, buffer);
									return -1;
								}
								else agrep_outbuffer[agrep_outpointer+outindex++] = '\n';
								agrep_outpointer += outindex;
							}

							free_buf(fd, buffer);
							NEW_FILE = OFF;
							return 0; 
						}

						print_end = i - D_length - 1;
						if ( ((fd != -1) && !(lasti >= Max_record+num_read - 1)) || ((fd == -1) && !(lasti >= num_read)) )
							if (-1 == output(buffer, lasti, print_end, j)) { free_buf(fd, buffer); return -1;} 
						if (((LIMITOUTPUT > 0) && (LIMITOUTPUT <= num_of_matched)) ||
						    ((LIMITPERFILE > 0) && (LIMITPERFILE <= num_of_matched - prev_num_of_matched))) {
							free_buf(fd, buffer);
							return 0;	/* done */
						}
					}
					lasti = i - D_length; 
					TRUNCATE = OFF;
					r2 = r3 = r1 = Init[0];
					r1 = r_Init1 & r3;
					r2 = ((( r2 >> 1) & CMask) | r1 ) & D_Mask;
					
					if (DELIMITER) CurrentByteOffset += 1*D_length;
					else CurrentByteOffset += 1*1;
				}
				
				c = LUT[buffer[i++]]; /* NEW [TG] */
				CurrentByteOffset ++;
				CMask = Mask[c];
				r1 = r_Init1 & r2;
				r3 = (( r2 >> 1 ) & CMask) | r1; 
				if ( r3 & endpos ) {
					j++;
					
					if (DELIMITER) CurrentByteOffset -= D_length;
					else CurrentByteOffset -= 1;
					
					if(((AND == 1) && ((r3 & endposition) == endposition)) || ((AND == 0) && (r3 & endposition)) ^ INVERSE )
					{ 
						if(FILENAMEONLY && (NEW_FILE || !POST_FILTER)) {
							num_of_matched++;

							if (agrep_finalfp != NULL) 
								fprintf(agrep_finalfp, "%s\n", CurrentFileName);
							else {
								int outindex;
								for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) && 
										(CurrentFileName[outindex] != '\0'); outindex++) {
									agrep_outbuffer[agrep_outpointer+outindex] = CurrentFileName[outindex];
								}
								if ((CurrentFileName[outindex] != '\0') || (outindex+agrep_outpointer+1>=agrep_outlen)) {
									OUTPUT_OVERFLOW;
									free_buf(fd, buffer);
									return -1;
								}
								else agrep_outbuffer[agrep_outpointer+outindex++] = '\n';
								agrep_outpointer += outindex;
							}

							free_buf(fd, buffer);
							NEW_FILE = OFF;
							return 0; 
						}

						print_end = i - D_length - 1;
						if ( ((fd != -1) && !(lasti >= Max_record+num_read - 1)) || ((fd == -1) && !(lasti >= num_read)) )
							if (-1 == output(buffer, lasti, print_end, j)) { free_buf(fd, buffer); return -1;}
						if (((LIMITOUTPUT > 0) && (LIMITOUTPUT <= num_of_matched)) ||
						    ((LIMITPERFILE > 0) && (LIMITPERFILE <= num_of_matched - prev_num_of_matched))) {
							free_buf(fd, buffer);
							return 0;	/* done */
						}
					}
					lasti = i - D_length ;
					TRUNCATE = OFF;
					r2 = r3 = r1 = Init[0]; 
					r1 = r_Init1 & r2;
					r3 = ((( r2 >> 1) & CMask) | r1 ) & D_Mask;
					if (DELIMITER) CurrentByteOffset += 1*D_length;
					else CurrentByteOffset += 1*1;
				}   
			}

		return 0;
	}
#endif	/*AGREP_POINTER*/
}

fill_buf(fd, buf, record_size)
int fd, record_size; 
unsigned char *buf;
{
	int num_read=1;
	int total_read=0;
	extern int glimpse_clientdied;

	if (fd >= 0) {
		while(total_read < record_size && num_read > 0) {
			if (glimpse_clientdied) return 0;
			num_read = read(fd, buf+total_read, record_size - total_read);
			total_read = total_read + num_read;
		}
	}
#if	AGREP_POINTER
	else return 0;	/* should not call this function if buffer is a pointer to a user-specified region! */
#else	/*AGREP_POINTER*/
	else {	/* simulate a file */
		total_read = (record_size > (agrep_inlen - agrep_inpointer)) ? (agrep_len - agrep_inpointer) : record_size;
		memcpy(buf, agrep_inbuffer + agrep_inpointer, total_read);
		agrep_inpointer += total_read;
		/* printf("agrep_inpointer %d total_read %d\n", agrep_inpointer, total_read);*/
	}
#endif	/*AGREP_POINTER*/
	if (glimpse_clientdied) return 0;
	return(total_read);
}

/*
 * In these functions no allocs/copying is done when
 * fd == -1, i.e., agrep is called to search within memory.
 */

void
alloc_buf(fd, buf, size)
	int fd;
	char **buf;
	int size;
{
#if	AGREP_POINTER
	if (fd != -1)
#endif	/*AGREP_POINTER*/
		*buf = (char *)malloc(size);
}

void
free_buf(fd, buf)
	int fd;
	char *buf;
{
#if	AGREP_POINTER
	if (fd != -1)
#endif	/*AGREP_POINTER*/
		free(buf);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区电影| 不卡视频一二三四| 亚洲免费资源在线播放| 日韩欧美你懂的| 欧美日韩综合色| 99re视频这里只有精品| 狠狠狠色丁香婷婷综合久久五月| 欧美国产精品v| 在线91免费看| 欧美日韩dvd在线观看| 91一区在线观看| 成人动漫av在线| 国产91露脸合集magnet| 国模大尺度一区二区三区| 亚洲成年人网站在线观看| 亚洲制服丝袜一区| 亚洲午夜精品久久久久久久久| 国产精品素人视频| 国产精品久久久久久久久快鸭| 国产视频911| 六月丁香综合在线视频| 亚洲成人资源网| 麻豆久久久久久久| 国产成人在线免费观看| 国产一区二区三区四| 国产精品一区二区不卡| 激情五月激情综合网| 国内不卡的二区三区中文字幕 | 26uuu国产电影一区二区| 欧美日韩高清一区二区不卡| 欧美精选一区二区| 精品国产凹凸成av人网站| 国产精品久久午夜| 亚洲成人动漫av| 成人精品gif动图一区| 色诱亚洲精品久久久久久| 日韩欧美在线123| 中文字幕在线免费不卡| 首页亚洲欧美制服丝腿| 国产麻豆视频一区| 91精品国产综合久久久蜜臀粉嫩| 亚洲欧洲无码一区二区三区| 亚洲精品美国一| 不卡的av电影在线观看| 欧美男生操女生| 亚洲精品国产品国语在线app| 日韩精品91亚洲二区在线观看| 久久成人免费电影| 欧美日韩免费视频| 亚洲视频网在线直播| 精品一区二区在线看| 欧美精品久久99久久在免费线| 久久麻豆一区二区| 美女被吸乳得到大胸91| 精品婷婷伊人一区三区三| 中文字幕视频一区| 成人综合婷婷国产精品久久蜜臀| 欧美一区二区国产| 亚洲国产欧美在线人成| 色哟哟在线观看一区二区三区| 欧美国产精品专区| 波多野结衣91| 亚洲日本va午夜在线影院| 国产成人精品1024| 国产欧美一区二区三区鸳鸯浴 | 亚洲色图制服丝袜| 91精品办公室少妇高潮对白| 一区二区在线观看视频在线观看| av不卡在线播放| 亚洲综合一区二区三区| 欧美精品高清视频| 国产在线国偷精品免费看| 国产欧美一二三区| 91麻豆国产在线观看| 婷婷夜色潮精品综合在线| 日韩美女天天操| 波多野结衣一区二区三区| 中文幕一区二区三区久久蜜桃| 国产精品香蕉一区二区三区| 国产精品久久夜| 5566中文字幕一区二区电影| 狠狠网亚洲精品| 亚洲一区免费观看| 26uuu欧美日本| 91精品国产全国免费观看| 懂色av中文字幕一区二区三区| 亚洲一线二线三线视频| 中文字幕不卡的av| 日韩欧美国产不卡| 欧美日韩国产在线播放网站| 国模套图日韩精品一区二区 | 三级不卡在线观看| 国产精品国产精品国产专区不蜜| 在线电影一区二区三区| 99re这里都是精品| 床上的激情91.| 免费看精品久久片| 亚洲一线二线三线视频| 欧美做爰猛烈大尺度电影无法无天| 免费在线观看视频一区| 中国色在线观看另类| 91精品国产美女浴室洗澡无遮挡| 国产精品自在在线| 日韩国产在线观看| 日韩精品乱码免费| 日韩精品久久久久久| 国产精品视频看| 久久久久久久久久久久久久久99| 5月丁香婷婷综合| 盗摄精品av一区二区三区| 激情深爱一区二区| 亚洲综合色视频| 亚洲自拍偷拍av| 视频一区在线视频| 性做久久久久久| 午夜日韩在线电影| 精品亚洲aⅴ乱码一区二区三区| 亚洲精品高清视频在线观看| 精品毛片乱码1区2区3区| xvideos.蜜桃一区二区| 精品国产91亚洲一区二区三区婷婷| 在线免费观看成人短视频| 在线免费不卡电影| 欧美性猛交xxxx乱大交退制版 | 伊人夜夜躁av伊人久久| 亚洲一区二区五区| 日韩主播视频在线| 一区二区三区精密机械公司| 亚洲综合一区二区三区| 久久成人免费网| 一本大道av伊人久久综合| 日韩视频免费观看高清完整版在线观看 | 欧美一区二区播放| 国产喂奶挤奶一区二区三区| 亚洲国产另类av| 国产不卡免费视频| 欧美电影免费观看完整版| 亚洲视频 欧洲视频| 国产专区综合网| 91视频免费观看| 国产精品另类一区| 国产成人自拍在线| 亚洲精品在线电影| 丝袜诱惑亚洲看片| 欧美视频一区二| 日韩成人av影视| 欧美写真视频网站| 亚洲一区二区三区激情| 不卡的av中国片| 亚洲视频资源在线| 国产在线观看免费一区| 久久久久久久久99精品| 国产精品99久久久久久似苏梦涵| 91精品午夜视频| 青青青爽久久午夜综合久久午夜| 一本色道综合亚洲| 一区二区欧美精品| 日韩一区二区在线观看视频 | 久久亚洲精精品中文字幕早川悠里 | 欧美激情一区二区在线| 精品制服美女丁香| 国产精品嫩草99a| 99精品欧美一区二区蜜桃免费 | 福利一区在线观看| 国产主播一区二区| 久久在线免费观看| 久久99精品久久久久婷婷| 日本伦理一区二区| 久久久精品国产免大香伊| 国产成人免费视频一区| 欧美丰满少妇xxxbbb| 国产成人福利片| 91色porny蝌蚪| xf在线a精品一区二区视频网站| 亚洲综合久久av| 成人午夜短视频| 在线看日韩精品电影| 国产午夜精品一区二区三区视频 | 天堂久久久久va久久久久| 成人久久久精品乱码一区二区三区 | 成人av网站在线观看免费| 久久久精品综合| 94色蜜桃网一区二区三区| 亚洲小说春色综合另类电影| 日韩欧美黄色影院| 成人激情视频网站| 亚洲色欲色欲www| 欧美成人福利视频| 91丨九色丨国产丨porny| a美女胸又www黄视频久久| 亚洲成a人v欧美综合天堂| 亚洲成人av中文| 日本不卡一区二区三区高清视频| 亚洲一区中文日韩| 亚洲欧美区自拍先锋| 亚洲国产cao| 激情综合五月婷婷| 国产麻豆精品95视频| 老司机免费视频一区二区| 国产iv一区二区三区|