青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Kisser Leon

這個kisser不太冷
posts - 100, comments - 102, trackbacks - 0, articles - 0

ConvertUTF.c

Posted on 2007-03-08 16:02 kk 閱讀(3345) 評論(0)  編輯 收藏 引用 所屬分類: IT
UTF8和UTF16和UTF32之間的相互轉化

/* ================================================================ */
/*
File:?? ?ConvertUTF.C
Author: Mark E. Davis
Copyright (C) 1994 Taligent, Inc. All rights reserved.

This code is copyrighted. Under the copyright laws, this code may not
be copied, in whole or part, without prior written consent of Taligent.

Taligent grants the right to use or reprint this code as long as this
ENTIRE copyright notice is reproduced in the code or reproduction.
The code is provided AS-IS, AND TALIGENT DISCLAIMS ALL WARRANTIES,
EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.? IN
NO EVENT WILL TALIGENT BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING,
WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
LOSS) ARISING OUT OF THE USE OR INABILITY TO USE THIS CODE, EVEN
IF TALIGENT HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
BECAUSE SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF
LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE
LIMITATION MAY NOT APPLY TO YOU.

RESTRICTED RIGHTS LEGEND: Use, duplication, or disclosure by the
government is subject to restrictions as set forth in subparagraph
(c)(l)(ii) of the Rights in Technical Data and Computer Software
clause at DFARS 252.227-7013 and FAR 52.227-19.

This code may be protected by one or more U.S. and International
Patents.

TRADEMARKS: Taligent and the Taligent Design Mark are registered
trademarks of Taligent, Inc.
*/
/* ================================================================ */

#include "ConvertUTF.h"

/* ================================================================ */

const int halfShift?? ??? ??? ??? ?= 10;
const UCS4 halfBase?? ??? ??? ??? ?= 0x0010000UL;
const UCS4 halfMask?? ??? ??? ??? ?= 0x3FFUL;
const UCS4 kSurrogateHighStart?? ?= 0xD800UL;
const UCS4 kSurrogateHighEnd?? ?= 0xDBFFUL;
const UCS4 kSurrogateLowStart?? ?= 0xDC00UL;
const UCS4 kSurrogateLowEnd?? ??? ?= 0xDFFFUL;

/* ================================================================ */

ConversionResult?? ?ConvertUCS4toUTF16 (
?? ??? ?UCS4** sourceStart, const UCS4* sourceEnd,
?? ??? ?UTF16** targetStart, const UTF16* targetEnd) {
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UCS4* source = *sourceStart;
?? ?register UTF16* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch;
?? ??? ?if (target >= targetEnd) {
?? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?ch = *source++;
?? ??? ?if (ch <= kMaximumUCS2) {
?? ??? ??? ?*target++ = ch;
?? ??? ?} else if (ch > kMaximumUTF16) {
?? ??? ??? ?*target++ = kReplacementCharacter;
?? ??? ?} else {
?? ??? ??? ?if (target + 1 >= targetEnd) {
?? ??? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ??? ?};
?? ??? ??? ?ch -= halfBase;
?? ??? ??? ?*target++ = (ch >> halfShift) + kSurrogateHighStart;
?? ??? ??? ?*target++ = (ch & halfMask) + kSurrogateLowStart;
?? ??? ?};
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

/* ================================================================ */

ConversionResult?? ?ConvertUTF16toUCS4 (
?? ??? ?UTF16** sourceStart, UTF16* sourceEnd,
?? ??? ?UCS4** targetStart, const UCS4* targetEnd) {
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UTF16* source = *sourceStart;
?? ?register UCS4* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch;
?? ??? ?ch = *source++;
?? ??? ?if (ch >= kSurrogateHighStart && ch <= kSurrogateHighEnd && source < sourceEnd) {
?? ??? ??? ?register UCS4 ch2 = *source;
?? ??? ??? ?if (ch2 >= kSurrogateLowStart && ch2 <= kSurrogateLowEnd) {
?? ??? ??? ??? ?ch = ((ch - kSurrogateHighStart) << halfShift)
?? ??? ??? ??? ??? ?+ (ch2 - kSurrogateLowStart) + halfBase;
?? ??? ??? ??? ?++source;
?? ??? ??? ?};
?? ??? ?};
?? ??? ?if (target >= targetEnd) {
?? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?*target++ = ch;
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

/* ================================================================ */

UCS4 offsetsFromUTF8[6] =?? ?{0x00000000UL, 0x00003080UL, 0x000E2080UL,
?? ??? ??? ??? ??? ? ?? ? ?? ? 0x03C82080UL, 0xFA082080UL, 0x82082080UL};
char bytesFromUTF8[256] = {
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
?? ?1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
?? ?2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5};

UTF8 firstByteMark[7] = {0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC};

/* ================================================================ */
/*?? ?This code is similar in effect to making successive calls on the
mbtowc and wctomb routines in FSS-UTF. However, it is considerably
different in code:
* it is adapted to be consistent with UTF16,
* the interface converts a whole buffer to avoid function-call overhead
* constants have been gathered.
* loops & conditionals have been removed as much as possible for
efficiency, in favor of drop-through switch statements.
*/

/* ================================================================ */
ConversionResult?? ?ConvertUTF16toUTF8 (
?? ??? ?UTF16** sourceStart, const UTF16* sourceEnd,
?? ??? ?UTF8** targetStart, const UTF8* targetEnd)
{
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UTF16* source = *sourceStart;
?? ?register UTF8* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch;
?? ??? ?register unsigned short bytesToWrite = 0;
?? ??? ?register const UCS4 byteMask = 0xBF;
?? ??? ?register const UCS4 byteMark = 0x80;
?? ??? ?ch = *source++;
?? ??? ?if (ch >= kSurrogateHighStart && ch <= kSurrogateHighEnd
?? ??? ??? ??? ?&& source < sourceEnd) {
?? ??? ??? ?register UCS4 ch2 = *source;
?? ??? ??? ?if (ch2 >= kSurrogateLowStart && ch2 <= kSurrogateLowEnd) {
?? ??? ??? ??? ?ch = ((ch - kSurrogateHighStart) << halfShift)
?? ??? ??? ??? ??? ?+ (ch2 - kSurrogateLowStart) + halfBase;
?? ??? ??? ??? ?++source;
?? ??? ??? ?};
?? ??? ?};
?? ??? ?if (ch < 0x80) {?? ??? ??? ??? ?bytesToWrite = 1;
?? ??? ?} else if (ch < 0x800) {?? ??? ?bytesToWrite = 2;
?? ??? ?} else if (ch < 0x10000) {?? ??? ?bytesToWrite = 3;
?? ??? ?} else if (ch < 0x200000) {?? ??? ?bytesToWrite = 4;
?? ??? ?} else if (ch < 0x4000000) {?? ?bytesToWrite = 5;
?? ??? ?} else if (ch <= kMaximumUCS4){?? ?bytesToWrite = 6;
?? ??? ?} else {?? ??? ??? ??? ??? ??? ?bytesToWrite = 2;
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?ch = kReplacementCharacter;
?? ??? ?}; /* I wish there were a smart way to avoid this conditional */
?? ??? ?
?? ??? ?target += bytesToWrite;
?? ??? ?if (target > targetEnd) {
?? ??? ??? ?target -= bytesToWrite; result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?switch (bytesToWrite) {?? ?/* note: code falls through cases! */
?? ??? ??? ?case 6:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 5:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 4:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 3:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 2:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 1:?? ?*--target =? ch | firstByteMark[bytesToWrite];
?? ??? ?};
?? ??? ?target += bytesToWrite;
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

/* ================================================================ */

ConversionResult?? ?ConvertUTF8toUTF16 (
?? ??? ?UTF8** sourceStart, const UTF8* sourceEnd,
?? ??? ?UTF16** targetStart, const UTF16* targetEnd)
{
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UTF8* source = *sourceStart;
?? ?register UTF16* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch = 0;
?? ??? ?register unsigned short extraBytesToWrite = bytesFromUTF8[*source];
?? ??? ?if (source + extraBytesToWrite > sourceEnd) {
?? ??? ??? ?result = kUTFConversionSourceExhausted; break;
?? ??? ?};
?? ??? ?switch(extraBytesToWrite) {?? ?/* note: code falls through cases! */
?? ??? ??? ?case 5:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 4:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 3:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 2:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 1:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 0:?? ?ch += *source++;
?? ??? ?};
?? ??? ?ch -= offsetsFromUTF8[extraBytesToWrite];

?? ??? ?if (target >= targetEnd) {
?? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?if (ch <= kMaximumUCS2) {
?? ??? ??? ?*target++ = ch;
?? ??? ?} else if (ch > kMaximumUTF16) {
?? ??? ??? ?*target++ = kReplacementCharacter;
?? ??? ?} else {
?? ??? ??? ?if (target + 1 >= targetEnd) {
?? ??? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ??? ?};
?? ??? ??? ?ch -= halfBase;
?? ??? ??? ?*target++ = (ch >> halfShift) + kSurrogateHighStart;
?? ??? ??? ?*target++ = (ch & halfMask) + kSurrogateLowStart;
?? ??? ?};
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

/* ================================================================ */
ConversionResult?? ?ConvertUCS4toUTF8 (
?? ??? ?UCS4** sourceStart, const UCS4* sourceEnd,
?? ??? ?UTF8** targetStart, const UTF8* targetEnd)
{
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UCS4* source = *sourceStart;
?? ?register UTF8* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch;
?? ??? ?register unsigned short bytesToWrite = 0;
?? ??? ?register const UCS4 byteMask = 0xBF;
?? ??? ?register const UCS4 byteMark = 0x80;
?? ??? ?ch = *source++;
?? ??? ?if (ch >= kSurrogateHighStart && ch <= kSurrogateHighEnd
?? ??? ??? ??? ?&& source < sourceEnd) {
?? ??? ??? ?register UCS4 ch2 = *source;
?? ??? ??? ?if (ch2 >= kSurrogateLowStart && ch2 <= kSurrogateLowEnd) {
?? ??? ??? ??? ?ch = ((ch - kSurrogateHighStart) << halfShift)
?? ??? ??? ??? ??? ?+ (ch2 - kSurrogateLowStart) + halfBase;
?? ??? ??? ??? ?++source;
?? ??? ??? ?};
?? ??? ?};
?? ??? ?if (ch < 0x80) {?? ??? ??? ??? ?bytesToWrite = 1;
?? ??? ?} else if (ch < 0x800) {?? ??? ?bytesToWrite = 2;
?? ??? ?} else if (ch < 0x10000) {?? ??? ?bytesToWrite = 3;
?? ??? ?} else if (ch < 0x200000) {?? ??? ?bytesToWrite = 4;
?? ??? ?} else if (ch < 0x4000000) {?? ?bytesToWrite = 5;
?? ??? ?} else if (ch <= kMaximumUCS4){?? ?bytesToWrite = 6;
?? ??? ?} else {?? ??? ??? ??? ??? ??? ?bytesToWrite = 2;
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?ch = kReplacementCharacter;
?? ??? ?}; /* I wish there were a smart way to avoid this conditional */
?? ??? ?
?? ??? ?target += bytesToWrite;
?? ??? ?if (target > targetEnd) {
?? ??? ??? ?target -= bytesToWrite; result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?switch (bytesToWrite) {?? ?/* note: code falls through cases! */
?? ??? ??? ?case 6:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 5:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 4:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 3:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 2:?? ?*--target = (ch | byteMark) & byteMask; ch >>= 6;
?? ??? ??? ?case 1:?? ?*--target =? ch | firstByteMark[bytesToWrite];
?? ??? ?};
?? ??? ?target += bytesToWrite;
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

/* ================================================================ */

ConversionResult?? ?ConvertUTF8toUCS4 (
?? ??? ?UTF8** sourceStart, const UTF8* sourceEnd,
?? ??? ?UCS4** targetStart, const UCS4* targetEnd)
{
?? ?ConversionResult result = kUTFConversionOK;
?? ?register UTF8* source = *sourceStart;
?? ?register UCS4* target = *targetStart;
?? ?while (source < sourceEnd) {
?? ??? ?register UCS4 ch = 0;
?? ??? ?register unsigned short extraBytesToWrite = bytesFromUTF8[*source];
?? ??? ?if (source + extraBytesToWrite > sourceEnd) {
?? ??? ??? ?result = kUTFConversionSourceExhausted; break;
?? ??? ?};
?? ??? ?switch(extraBytesToWrite) {?? ?/* note: code falls through cases! */
?? ??? ??? ?case 5:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 4:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 3:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 2:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 1:?? ?ch += *source++; ch <<= 6;
?? ??? ??? ?case 0:?? ?ch += *source++;
?? ??? ?};
?? ??? ?ch -= offsetsFromUTF8[extraBytesToWrite];

?? ??? ?if (target >= targetEnd) {
?? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ?};
?? ??? ?if (ch <= kMaximumUCS2) {
?? ??? ??? ?*target++ = ch;
?? ??? ?} else if (ch > kMaximumUCS4) {
?? ??? ??? ?*target++ = kReplacementCharacter;
?? ??? ?} else {
?? ??? ??? ?if (target + 1 >= targetEnd) {
?? ??? ??? ??? ?result = kUTFConversionTargetExhausted; break;
?? ??? ??? ?};
?? ??? ??? ?ch -= halfBase;
?? ??? ??? ?*target++ = (ch >> halfShift) + kSurrogateHighStart;
?? ??? ??? ?*target++ = (ch & halfMask) + kSurrogateLowStart;
?? ??? ?};
?? ?};
?? ?*sourceStart = source;
?? ?*targetStart = target;
?? ?return result;
};

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩国产一中文字不卡| 欧美成人免费小视频| 欧美日韩国产专区| 欧美一区二区三区日韩视频| 一道本一区二区| 亚洲欧美在线一区| 一区二区三区四区五区视频| 亚洲精品一区二区三区在线观看| 亚洲成色777777女色窝| 国产午夜精品全部视频播放| 国产精品卡一卡二卡三| 欧美激情视频在线播放| 欧美多人爱爱视频网站| 久久综合色播五月| 久久久av毛片精品| 久久另类ts人妖一区二区| 久久久国际精品| 麻豆国产精品777777在线| 狂野欧美一区| 午夜精品久久久久久久99樱桃 | 欧美夜福利tv在线| 国产精品一区二区三区免费观看| 欧美日韩一区二区三区高清| 欧美日韩国产成人高清视频| 欧美日韩在线看| 欧美午夜欧美| 国产精品外国| 亚洲精品在线观| 欧美一区二区观看视频| 蜜桃伊人久久| 一区二区三区蜜桃网| 久久久精品2019中文字幕神马| 欧美激情精品久久久久久蜜臀| 国产精品盗摄久久久| 亚洲第一毛片| 午夜精品免费| 91久久亚洲| 亚洲一区三区视频在线观看 | 欧美伦理a级免费电影| 国产精品久久久久av| 国产自产v一区二区三区c| 欧美韩国一区| 欧美国产综合视频| 亚洲欧美在线免费| 欧美日韩在线看| 亚洲夫妻自拍| 久久色中文字幕| 亚洲视频网在线直播| 欧美金8天国| 亚洲精品小视频在线观看| 久久激情综合网| 一本一本久久| 欧美日韩第一区| 91久久精品美女| 美女国产精品| 欧美在线影院在线视频| 国产精品s色| 宅男噜噜噜66国产日韩在线观看| 模特精品在线| 久久黄色小说| 一区二区三区在线观看欧美| 久久丁香综合五月国产三级网站| 亚洲特级片在线| 国产精品久久久一区麻豆最新章节| 一本色道**综合亚洲精品蜜桃冫 | 久久免费国产精品| 欧美一区二区三区成人| 国产麻豆一精品一av一免费| 亚洲男女自偷自拍| 正在播放亚洲一区| 国产精品美女久久久浪潮软件| 亚洲天堂免费观看| 亚洲在线日韩| 国外视频精品毛片| 欧美大片va欧美在线播放| 麻豆av福利av久久av| 日韩视频免费看| 99国产精品久久久久久久成人热 | 欧美日韩的一区二区| 一区二区三区视频在线看| 亚洲免费av电影| 国产精品卡一卡二卡三| 久久成人久久爱| 久久久精品国产免大香伊 | 欧美 日韩 国产精品免费观看| 久久五月天婷婷| 日韩视频在线你懂得| 一本久久精品一区二区| 国产精品一区久久| 老司机aⅴ在线精品导航| 欧美大片国产精品| 午夜精品剧场| 免费观看欧美在线视频的网站| 亚洲精品中文字幕在线| 一区二区三区久久| 亚洲欧美网站| 久久九九热re6这里有精品| 亚洲精品免费网站| 亚洲性感激情| 欧美日韩亚洲系列| 久久久久久亚洲精品杨幂换脸 | 国产精品一二三四区| 久久精品亚洲乱码伦伦中文| 老牛影视一区二区三区| 亚洲一区二区三区四区在线观看| 亚久久调教视频| 一区二区三区精品久久久| 欧美一区视频| 制服诱惑一区二区| 久久综合一区二区| 先锋影音国产一区| 欧美激情影音先锋| 久久午夜av| 国产精品亚洲产品| 日韩一级黄色av| 亚洲经典一区| 久热国产精品| 麻豆精品视频在线| 国产午夜精品全部视频在线播放| 一本色道久久综合精品竹菊| 亚洲久久一区| 欧美成人四级电影| 欧美粗暴jizz性欧美20| 极品裸体白嫩激情啪啪国产精品| 亚洲午夜高清视频| 亚洲一区免费网站| 欧美日韩在线精品一区二区三区| 欧美黄色免费网站| 91久久精品国产91久久| 久久久噜噜噜久久| 免费欧美在线视频| 在线观看久久av| 久久人人爽人人爽| 免费观看不卡av| 亚洲第一精品影视| 蜜臀av在线播放一区二区三区| 久久全球大尺度高清视频| 国产农村妇女精品一区二区| 99精品视频免费在线观看| 亚洲毛片一区| 毛片一区二区| 久久夜色精品国产| 在线观看免费视频综合| 欧美一区中文字幕| 久久精品国产久精国产思思| 久久久久久久91| 女女同性女同一区二区三区91| 国产欧美精品在线播放| 99riav久久精品riav| 99ri日韩精品视频| 欧美视频官网| 亚洲美女诱惑| 99综合在线| 欧美日韩精品福利| 西西人体一区二区| 久久国内精品自在自线400部| 国产精品羞羞答答| 亚洲欧美日韩综合国产aⅴ| 欧美电影在线观看完整版| 亚洲国产美女久久久久| 国产亚洲在线观看| 久久久一本精品99久久精品66| 一区二区三区国产盗摄| 国产精品久久久久久久app| 亚洲欧美日韩国产成人| 久久国产精品高清| 亚洲另类一区二区| 欧美视频一区二区三区四区| 欧美一区免费视频| 欧美激情a∨在线视频播放| 亚洲无吗在线| 1769国内精品视频在线播放| 猛男gaygay欧美视频| 亚洲天堂成人在线视频| 久久精品动漫| 这里只有精品电影| 欧美国产精品va在线观看| 亚洲小说欧美另类社区| 欧美国产成人精品| 在线午夜精品| 国产视频一区免费看| 久久先锋资源| 亚洲另类在线视频| 欧美在线三级| 一本到12不卡视频在线dvd| 国产精品国产亚洲精品看不卡15| 亚洲一区图片| 美女网站久久| 欧美一区二区在线观看| 亚洲二区精品| 欧美日韩精品伦理作品在线免费观看| 久久精品一区二区三区四区| 99在线|亚洲一区二区| 国产伦精品一区二区三区视频孕妇 | 欧美在线高清| 亚洲高清免费在线| 欧美一区日本一区韩国一区| 欧美日韩精品久久| 欧美国产日韩亚洲一区| 翔田千里一区二区|