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

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之間的相互轉(zhuǎn)化

/* ================================================================ */
/*
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>
            另类春色校园亚洲| 欧美18av| 国产日韩在线亚洲字幕中文| 久久成年人视频| 亚洲欧美视频在线观看视频| 国产在线精品成人一区二区三区 | 国产啪精品视频| 欧美一区二区啪啪| 久久se精品一区精品二区| 一区免费观看| 亚洲国产日韩欧美综合久久| 欧美激情成人在线视频| 一区二区av在线| 午夜精品国产精品大乳美女| 亚洲大胆av| 亚洲精品免费一二三区| 国产欧美精品一区aⅴ影院| 免费观看国产成人| 欧美人成免费网站| 久久久久久久波多野高潮日日| 久久久久久夜| 一二三区精品| 久久久久久成人| 亚洲婷婷综合久久一本伊一区| 欧美亚洲午夜视频在线观看| 亚洲黄色片网站| 亚洲视频福利| 亚洲国产老妈| 亚洲欧美国内爽妇网| 亚洲精品欧美在线| 午夜欧美理论片| 亚洲精品在线一区二区| 久久大逼视频| 亚洲午夜女主播在线直播| 久久久精品性| 欧美亚洲综合另类| 欧美—级a级欧美特级ar全黄| 欧美诱惑福利视频| 欧美日本高清视频| 鲁大师成人一区二区三区| 欧美网站在线观看| 亚洲国产福利在线| 一区二区在线免费观看| 亚洲视频日本| 夜夜嗨av一区二区三区免费区| 久久久噜噜噜久噜久久 | 国产精品青草久久| 亚洲国产精彩中文乱码av在线播放| 国产精品视频精品| 亚洲精品综合| 最新成人av在线| 久久一区精品| 免费成人黄色片| 激情亚洲网站| 久久精品成人一区二区三区| 午夜日韩在线| 欧美视频手机在线| 亚洲精品在线看| 亚洲精品国产精品国产自| 久久网站热最新地址| 久久久久久久综合| 国产一区视频在线观看免费| 亚洲欧美清纯在线制服| 性欧美18~19sex高清播放| 欧美私人网站| 亚洲性线免费观看视频成熟| 亚洲一区二区在线| 国产精品v欧美精品v日韩| 99精品欧美一区| 亚洲一区二区在线视频| 国产精品白丝av嫩草影院| 一本久久综合| 亚洲欧美在线一区| 国产亚洲成av人片在线观看桃| 午夜久久影院| 久久婷婷久久一区二区三区| 在线观看精品视频| 美女黄色成人网| 亚洲国产精品久久久久| 一本一本久久a久久精品综合麻豆| 欧美精品激情在线| 一本综合久久| 久久精品导航| 在线精品福利| 欧美精品日韩www.p站| 艳妇臀荡乳欲伦亚洲一区| 午夜精品久久久久久久99樱桃| 国产精品欧美激情| 久久久999精品视频| 欧美激情a∨在线视频播放| 日韩一级精品视频在线观看| 欧美午夜片欧美片在线观看| 亚洲欧洲av一区二区| 免费91麻豆精品国产自产在线观看| 亚洲国产三级在线| 欧美三区在线观看| 久久精品最新地址| 亚洲三级免费电影| 欧美影院精品一区| 亚洲区免费影片| 国产精品日韩久久久| 另类国产ts人妖高潮视频| 亚洲午夜免费福利视频| 免费观看成人| 亚洲欧美一区二区三区极速播放| 韩国三级在线一区| 欧美色123| 久热精品在线| 亚洲免费在线播放| 亚洲激情视频网站| 亚洲自拍16p| 亚洲韩国精品一区| 国产女主播一区二区三区| 欧美精品播放| 久久亚洲免费| 亚洲尤物视频在线| 最新国产成人在线观看| 久久久久国产一区二区三区四区 | 国产精品一区二区三区成人| 久久亚洲欧美国产精品乐播| 亚洲男人的天堂在线观看| 亚洲国产美国国产综合一区二区| 久久国产精品99国产精| 在线亚洲免费| 亚洲黑丝一区二区| 伊人久久噜噜噜躁狠狠躁| 国产精品国产馆在线真实露脸| 免费在线日韩av| 久久成人国产| 欧美一区二区在线免费播放| 亚洲视频久久| 亚洲精品在线视频观看| 亚洲国产成人av好男人在线观看| 麻豆精品一区二区综合av| 香蕉久久国产| 欧美一区二区精品| 欧美一级精品大片| 欧美一级专区| 欧美中文字幕久久| 欧美一区二区三区的| 午夜精彩视频在线观看不卡 | 91久久精品一区二区三区| 在线成人中文字幕| 亚洲电影自拍| 亚洲第一区在线| 狠狠入ady亚洲精品| 极品av少妇一区二区| 国产一区二区三区在线观看网站| 国产精品一二三四区| 国产精品一区二区三区四区| 国产精品综合av一区二区国产馆| 国产精品天天摸av网| 国产欧美一区二区三区久久| 国产欧美日韩综合精品二区| 国产一区二区精品在线观看| 国产日韩av在线播放| 国语自产精品视频在线看抢先版结局 | 欧美日韩高清在线播放| 欧美精品成人| 欧美午夜精品久久久久久孕妇| 国产精品热久久久久夜色精品三区| 国产精品一区=区| 韩国精品在线观看| 91久久久在线| 亚洲一区视频| 久久久噜噜噜久久狠狠50岁| 欧美二区在线看| 亚洲精品一区二区三区不| 亚洲——在线| 久久综合精品国产一区二区三区| 欧美激情乱人伦| 国产精品高清一区二区三区| 国产主播一区二区三区| 亚洲国产综合在线看不卡| 正在播放亚洲一区| 久久久久久国产精品mv| 亚洲精品日韩在线| 亚洲影院色无极综合| 久久蜜桃精品| 欧美视频在线观看一区二区| 黄色成人片子| 亚洲午夜女主播在线直播| 久久综合一区二区三区| 一本一本久久| 久久一区二区三区av| 国产精品久久久久毛片软件| 亚洲第一成人在线| 亚洲欧美日韩视频一区| 欧美高清视频在线 | 欧美国产激情| 亚洲欧美中文在线视频| 欧美啪啪一区| 在线高清一区| 午夜久久资源| 亚洲啪啪91| 久久免费观看视频| 国产婷婷色一区二区三区| 中文一区字幕| 亚洲国产欧美日韩精品| 久久精品国产99国产精品澳门|