Fossil SCM

merge trunk

jan.nijtmans 2013-03-08 13:02 improve_commit_warning merge
Commit 17e972c3188bf51b9a71f2cd1a902e28bdf3ed43
+1 -1
--- src/attach.c
+++ src/attach.c
@@ -94,11 +94,11 @@
9494
}
9595
@ <br><a href="/attachview?%s(zUrlTail)">%h(zFilename)</a>
9696
@ [<a href="/attachdownload/%t(zFilename)?%s(zUrlTail)">download</a>]<br />
9797
if( zComment ) while( fossil_isspace(zComment[0]) ) zComment++;
9898
if( zComment && zComment[0] ){
99
- @ %w(zComment)<br />
99
+ @ %!w(zComment)<br />
100100
}
101101
if( zPage==0 && zTkt==0 ){
102102
if( zSrc==0 || zSrc[0]==0 ){
103103
zSrc = "Deleted from";
104104
}else {
105105
--- src/attach.c
+++ src/attach.c
@@ -94,11 +94,11 @@
94 }
95 @ <br><a href="/attachview?%s(zUrlTail)">%h(zFilename)</a>
96 @ [<a href="/attachdownload/%t(zFilename)?%s(zUrlTail)">download</a>]<br />
97 if( zComment ) while( fossil_isspace(zComment[0]) ) zComment++;
98 if( zComment && zComment[0] ){
99 @ %w(zComment)<br />
100 }
101 if( zPage==0 && zTkt==0 ){
102 if( zSrc==0 || zSrc[0]==0 ){
103 zSrc = "Deleted from";
104 }else {
105
--- src/attach.c
+++ src/attach.c
@@ -94,11 +94,11 @@
94 }
95 @ <br><a href="/attachview?%s(zUrlTail)">%h(zFilename)</a>
96 @ [<a href="/attachdownload/%t(zFilename)?%s(zUrlTail)">download</a>]<br />
97 if( zComment ) while( fossil_isspace(zComment[0]) ) zComment++;
98 if( zComment && zComment[0] ){
99 @ %!w(zComment)<br />
100 }
101 if( zPage==0 && zTkt==0 ){
102 if( zSrc==0 || zSrc[0]==0 ){
103 zSrc = "Deleted from";
104 }else {
105
+5 -3
--- src/blob.c
+++ src/blob.c
@@ -792,11 +792,11 @@
792792
}
793793
nName = file_simplify_name(zName, nName, 0);
794794
for(i=1; i<nName; i++){
795795
if( zName[i]=='/' ){
796796
zName[i] = 0;
797
-#if defined(_WIN32)
797
+#if defined(_WIN32) || defined(__CYGWIN__)
798798
/*
799799
** On Windows, local path looks like: C:/develop/project/file.txt
800800
** The if stops us from trying to create a directory of a drive letter
801801
** C: in this example.
802802
*/
@@ -804,11 +804,11 @@
804804
#endif
805805
if( file_mkdir(zName, 1) && file_isdir(zName)!=1 ){
806806
fossil_fatal_recursive("unable to create directory %s", zName);
807807
return 0;
808808
}
809
-#if defined(_WIN32)
809
+#if defined(_WIN32) || defined(__CYGWIN__)
810810
}
811811
#endif
812812
zName[i] = '/';
813813
}
814814
}
@@ -1159,11 +1159,11 @@
11591159
zUtf8 = blob_str(pBlob) + bomSize;
11601160
blob_zero(&temp);
11611161
blob_append(&temp, zUtf8, -1);
11621162
blob_swap(pBlob, &temp);
11631163
blob_reset(&temp);
1164
-#ifdef _WIN32
1164
+#if defined(_WIN32) || defined(__CYGWIN__)
11651165
}else if( starts_with_utf16_bom(pBlob, &bomSize, &bomReverse) ){
11661166
zUtf8 = blob_buffer(pBlob);
11671167
if( bomReverse ){
11681168
/* Found BOM, but with reversed bytes */
11691169
unsigned int i = blob_size(pBlob);
@@ -1179,13 +1179,15 @@
11791179
zUtf8 = blob_str(pBlob) + bomSize;
11801180
zUtf8 = fossil_unicode_to_utf8(zUtf8);
11811181
blob_zero(pBlob);
11821182
blob_append(pBlob, zUtf8, -1);
11831183
fossil_unicode_free(zUtf8);
1184
+#endif /* _WIN32 || __CYGWIN__ */
1185
+#if defined(_WIN32)
11841186
}else if( useMbcs ){
11851187
zUtf8 = fossil_mbcs_to_utf8(blob_str(pBlob));
11861188
blob_reset(pBlob);
11871189
blob_append(pBlob, zUtf8, -1);
11881190
fossil_mbcs_free(zUtf8);
11891191
#endif /* _WIN32 */
11901192
}
11911193
}
11921194
--- src/blob.c
+++ src/blob.c
@@ -792,11 +792,11 @@
792 }
793 nName = file_simplify_name(zName, nName, 0);
794 for(i=1; i<nName; i++){
795 if( zName[i]=='/' ){
796 zName[i] = 0;
797 #if defined(_WIN32)
798 /*
799 ** On Windows, local path looks like: C:/develop/project/file.txt
800 ** The if stops us from trying to create a directory of a drive letter
801 ** C: in this example.
802 */
@@ -804,11 +804,11 @@
804 #endif
805 if( file_mkdir(zName, 1) && file_isdir(zName)!=1 ){
806 fossil_fatal_recursive("unable to create directory %s", zName);
807 return 0;
808 }
809 #if defined(_WIN32)
810 }
811 #endif
812 zName[i] = '/';
813 }
814 }
@@ -1159,11 +1159,11 @@
1159 zUtf8 = blob_str(pBlob) + bomSize;
1160 blob_zero(&temp);
1161 blob_append(&temp, zUtf8, -1);
1162 blob_swap(pBlob, &temp);
1163 blob_reset(&temp);
1164 #ifdef _WIN32
1165 }else if( starts_with_utf16_bom(pBlob, &bomSize, &bomReverse) ){
1166 zUtf8 = blob_buffer(pBlob);
1167 if( bomReverse ){
1168 /* Found BOM, but with reversed bytes */
1169 unsigned int i = blob_size(pBlob);
@@ -1179,13 +1179,15 @@
1179 zUtf8 = blob_str(pBlob) + bomSize;
1180 zUtf8 = fossil_unicode_to_utf8(zUtf8);
1181 blob_zero(pBlob);
1182 blob_append(pBlob, zUtf8, -1);
1183 fossil_unicode_free(zUtf8);
 
 
1184 }else if( useMbcs ){
1185 zUtf8 = fossil_mbcs_to_utf8(blob_str(pBlob));
1186 blob_reset(pBlob);
1187 blob_append(pBlob, zUtf8, -1);
1188 fossil_mbcs_free(zUtf8);
1189 #endif /* _WIN32 */
1190 }
1191 }
1192
--- src/blob.c
+++ src/blob.c
@@ -792,11 +792,11 @@
792 }
793 nName = file_simplify_name(zName, nName, 0);
794 for(i=1; i<nName; i++){
795 if( zName[i]=='/' ){
796 zName[i] = 0;
797 #if defined(_WIN32) || defined(__CYGWIN__)
798 /*
799 ** On Windows, local path looks like: C:/develop/project/file.txt
800 ** The if stops us from trying to create a directory of a drive letter
801 ** C: in this example.
802 */
@@ -804,11 +804,11 @@
804 #endif
805 if( file_mkdir(zName, 1) && file_isdir(zName)!=1 ){
806 fossil_fatal_recursive("unable to create directory %s", zName);
807 return 0;
808 }
809 #if defined(_WIN32) || defined(__CYGWIN__)
810 }
811 #endif
812 zName[i] = '/';
813 }
814 }
@@ -1159,11 +1159,11 @@
1159 zUtf8 = blob_str(pBlob) + bomSize;
1160 blob_zero(&temp);
1161 blob_append(&temp, zUtf8, -1);
1162 blob_swap(pBlob, &temp);
1163 blob_reset(&temp);
1164 #if defined(_WIN32) || defined(__CYGWIN__)
1165 }else if( starts_with_utf16_bom(pBlob, &bomSize, &bomReverse) ){
1166 zUtf8 = blob_buffer(pBlob);
1167 if( bomReverse ){
1168 /* Found BOM, but with reversed bytes */
1169 unsigned int i = blob_size(pBlob);
@@ -1179,13 +1179,15 @@
1179 zUtf8 = blob_str(pBlob) + bomSize;
1180 zUtf8 = fossil_unicode_to_utf8(zUtf8);
1181 blob_zero(pBlob);
1182 blob_append(pBlob, zUtf8, -1);
1183 fossil_unicode_free(zUtf8);
1184 #endif /* _WIN32 || __CYGWIN__ */
1185 #if defined(_WIN32)
1186 }else if( useMbcs ){
1187 zUtf8 = fossil_mbcs_to_utf8(blob_str(pBlob));
1188 blob_reset(pBlob);
1189 blob_append(pBlob, zUtf8, -1);
1190 fossil_mbcs_free(zUtf8);
1191 #endif /* _WIN32 */
1192 }
1193 }
1194
+5 -3
--- src/blob.c
+++ src/blob.c
@@ -792,11 +792,11 @@
792792
}
793793
nName = file_simplify_name(zName, nName, 0);
794794
for(i=1; i<nName; i++){
795795
if( zName[i]=='/' ){
796796
zName[i] = 0;
797
-#if defined(_WIN32)
797
+#if defined(_WIN32) || defined(__CYGWIN__)
798798
/*
799799
** On Windows, local path looks like: C:/develop/project/file.txt
800800
** The if stops us from trying to create a directory of a drive letter
801801
** C: in this example.
802802
*/
@@ -804,11 +804,11 @@
804804
#endif
805805
if( file_mkdir(zName, 1) && file_isdir(zName)!=1 ){
806806
fossil_fatal_recursive("unable to create directory %s", zName);
807807
return 0;
808808
}
809
-#if defined(_WIN32)
809
+#if defined(_WIN32) || defined(__CYGWIN__)
810810
}
811811
#endif
812812
zName[i] = '/';
813813
}
814814
}
@@ -1159,11 +1159,11 @@
11591159
zUtf8 = blob_str(pBlob) + bomSize;
11601160
blob_zero(&temp);
11611161
blob_append(&temp, zUtf8, -1);
11621162
blob_swap(pBlob, &temp);
11631163
blob_reset(&temp);
1164
-#ifdef _WIN32
1164
+#if defined(_WIN32) || defined(__CYGWIN__)
11651165
}else if( starts_with_utf16_bom(pBlob, &bomSize, &bomReverse) ){
11661166
zUtf8 = blob_buffer(pBlob);
11671167
if( bomReverse ){
11681168
/* Found BOM, but with reversed bytes */
11691169
unsigned int i = blob_size(pBlob);
@@ -1179,13 +1179,15 @@
11791179
zUtf8 = blob_str(pBlob) + bomSize;
11801180
zUtf8 = fossil_unicode_to_utf8(zUtf8);
11811181
blob_zero(pBlob);
11821182
blob_append(pBlob, zUtf8, -1);
11831183
fossil_unicode_free(zUtf8);
1184
+#endif /* _WIN32 || __CYGWIN__ */
1185
+#if defined(_WIN32)
11841186
}else if( useMbcs ){
11851187
zUtf8 = fossil_mbcs_to_utf8(blob_str(pBlob));
11861188
blob_reset(pBlob);
11871189
blob_append(pBlob, zUtf8, -1);
11881190
fossil_mbcs_free(zUtf8);
11891191
#endif /* _WIN32 */
11901192
}
11911193
}
11921194
--- src/blob.c
+++ src/blob.c
@@ -792,11 +792,11 @@
792 }
793 nName = file_simplify_name(zName, nName, 0);
794 for(i=1; i<nName; i++){
795 if( zName[i]=='/' ){
796 zName[i] = 0;
797 #if defined(_WIN32)
798 /*
799 ** On Windows, local path looks like: C:/develop/project/file.txt
800 ** The if stops us from trying to create a directory of a drive letter
801 ** C: in this example.
802 */
@@ -804,11 +804,11 @@
804 #endif
805 if( file_mkdir(zName, 1) && file_isdir(zName)!=1 ){
806 fossil_fatal_recursive("unable to create directory %s", zName);
807 return 0;
808 }
809 #if defined(_WIN32)
810 }
811 #endif
812 zName[i] = '/';
813 }
814 }
@@ -1159,11 +1159,11 @@
1159 zUtf8 = blob_str(pBlob) + bomSize;
1160 blob_zero(&temp);
1161 blob_append(&temp, zUtf8, -1);
1162 blob_swap(pBlob, &temp);
1163 blob_reset(&temp);
1164 #ifdef _WIN32
1165 }else if( starts_with_utf16_bom(pBlob, &bomSize, &bomReverse) ){
1166 zUtf8 = blob_buffer(pBlob);
1167 if( bomReverse ){
1168 /* Found BOM, but with reversed bytes */
1169 unsigned int i = blob_size(pBlob);
@@ -1179,13 +1179,15 @@
1179 zUtf8 = blob_str(pBlob) + bomSize;
1180 zUtf8 = fossil_unicode_to_utf8(zUtf8);
1181 blob_zero(pBlob);
1182 blob_append(pBlob, zUtf8, -1);
1183 fossil_unicode_free(zUtf8);
 
 
1184 }else if( useMbcs ){
1185 zUtf8 = fossil_mbcs_to_utf8(blob_str(pBlob));
1186 blob_reset(pBlob);
1187 blob_append(pBlob, zUtf8, -1);
1188 fossil_mbcs_free(zUtf8);
1189 #endif /* _WIN32 */
1190 }
1191 }
1192
--- src/blob.c
+++ src/blob.c
@@ -792,11 +792,11 @@
792 }
793 nName = file_simplify_name(zName, nName, 0);
794 for(i=1; i<nName; i++){
795 if( zName[i]=='/' ){
796 zName[i] = 0;
797 #if defined(_WIN32) || defined(__CYGWIN__)
798 /*
799 ** On Windows, local path looks like: C:/develop/project/file.txt
800 ** The if stops us from trying to create a directory of a drive letter
801 ** C: in this example.
802 */
@@ -804,11 +804,11 @@
804 #endif
805 if( file_mkdir(zName, 1) && file_isdir(zName)!=1 ){
806 fossil_fatal_recursive("unable to create directory %s", zName);
807 return 0;
808 }
809 #if defined(_WIN32) || defined(__CYGWIN__)
810 }
811 #endif
812 zName[i] = '/';
813 }
814 }
@@ -1159,11 +1159,11 @@
1159 zUtf8 = blob_str(pBlob) + bomSize;
1160 blob_zero(&temp);
1161 blob_append(&temp, zUtf8, -1);
1162 blob_swap(pBlob, &temp);
1163 blob_reset(&temp);
1164 #if defined(_WIN32) || defined(__CYGWIN__)
1165 }else if( starts_with_utf16_bom(pBlob, &bomSize, &bomReverse) ){
1166 zUtf8 = blob_buffer(pBlob);
1167 if( bomReverse ){
1168 /* Found BOM, but with reversed bytes */
1169 unsigned int i = blob_size(pBlob);
@@ -1179,13 +1179,15 @@
1179 zUtf8 = blob_str(pBlob) + bomSize;
1180 zUtf8 = fossil_unicode_to_utf8(zUtf8);
1181 blob_zero(pBlob);
1182 blob_append(pBlob, zUtf8, -1);
1183 fossil_unicode_free(zUtf8);
1184 #endif /* _WIN32 || __CYGWIN__ */
1185 #if defined(_WIN32)
1186 }else if( useMbcs ){
1187 zUtf8 = fossil_mbcs_to_utf8(blob_str(pBlob));
1188 blob_reset(pBlob);
1189 blob_append(pBlob, zUtf8, -1);
1190 fossil_mbcs_free(zUtf8);
1191 #endif /* _WIN32 */
1192 }
1193 }
1194
+47 -59
--- src/checkin.c
+++ src/checkin.c
@@ -203,10 +203,13 @@
203203
int vid;
204204
db_must_be_within_tree();
205205
/* 012345678901234 */
206206
fossil_print("repository: %s\n", db_repository_filename());
207207
fossil_print("local-root: %s\n", g.zLocalRoot);
208
+ if( g.zConfigDbName ){
209
+ fossil_print("config-db: %s\n", g.zConfigDbName);
210
+ }
208211
vid = db_lget_int("checkout", 0);
209212
if( vid ){
210213
show_common_info(vid, "checkout:", 1, 1);
211214
}
212215
db_record_repository_filename(0);
@@ -902,103 +905,84 @@
902905
int encodingOk, /* Non-zero if encoding warnings should be disabled. */
903906
const char *zFilename /* The full name of the file being committed. */
904907
){
905908
int eType; /* return value of looks_like_utf8/utf16() */
906909
int fUnicode; /* return value of starts_with_utf16_bom() */
910
+ int lookFlags; /* output flags from looks_like_utf8/utf16() */
911
+ int fHasCrLf; /* the blob contains one or more CR/LF pairs */
912
+ int fHasLength; /* the blob contains an overly long line */
913
+ int fInvalid; /* the blob contains invalid utf-8 */
907914
char *zMsg; /* Warning message */
908915
Blob fname; /* Relative pathname of the file */
909916
static int allOk = 0; /* Set to true to disable this routine */
910917
911918
if( allOk ) return 0;
912919
fUnicode = starts_with_utf16_bom(p, 0, 0);
913
- eType = fUnicode ? looks_like_utf16(p) : looks_like_utf8(p);
914
- if( eType<-2){
915
- const char *zWarning;
916
- const char *zDisable;
917
- const char *zConvert;
918
- Blob ans;
919
- char cReply;
920
-
921
- if(eType==-4){
922
- if (binOk) goto go_on;
923
- zWarning = "long lines";
924
- zDisable = "\"binary-glob\" setting";
925
- zConvert = "";
926
- }else{
927
- if (encodingOk) goto go_on;
928
- zWarning = "invalid UTF-8";
929
- zDisable = "\"encoding-glob\" setting";
930
- zConvert = "c=convert/";
931
- }
932
- blob_zero(&ans);
933
- file_relative_name(zFilename, &fname, 0);
934
- zMsg = mprintf(
935
- "%s appears to be text, but contains %s. Use --no-warnings or the"
936
- " %s to disable this warning.\nCommit anyhow (a=all/%sy/N)? ",
937
- blob_str(&fname), zWarning, zDisable, zConvert);
938
- prompt_user(zMsg, &ans);
939
- fossil_free(zMsg);
940
- cReply = blob_str(&ans)[0];
941
- if( *zConvert && (cReply=='c' || cReply=='C') ){
942
- char *zOrig = file_newname(zFilename, "original", 1);
943
- FILE *f;
944
- blob_write_to_file(p, zOrig);
945
- fossil_free(zOrig);
946
- f = fossil_fopen(zFilename, "wb");
947
- blob_cp1252_to_utf8(p);
948
- fwrite(blob_buffer(p), 1, blob_size(p), f);
949
- fclose(f);
950
- return 1;
951
- } else if( cReply!='y' && cReply!='Y' ){
952
- fossil_fatal("Abandoning commit due to %s in %s",
953
- zWarning, blob_str(&fname));
954
- }
955
- blob_reset(&ans);
956
- go_on:
957
- eType +=4 ;
958
- }
959
- if( eType==0 || eType==-1 || fUnicode ){
920
+ if (fUnicode) {
921
+ eType = looks_like_utf16(p, &lookFlags);
922
+ if ( lookFlags&LOOK_ODD ){
923
+ /* It cannot be unicode, so try again as single-byte encoding */
924
+ fUnicode = 0;
925
+ eType = looks_like_utf8(p, &lookFlags);
926
+ }
927
+ }else{
928
+ eType = looks_like_utf8(p, &lookFlags);
929
+ }
930
+ fHasCrLf = (lookFlags & LOOK_CRLF);
931
+ fHasLength = (lookFlags & LOOK_LENGTH);
932
+ fInvalid = (lookFlags & LOOK_INVALID);
933
+ if( eType==0 || fHasCrLf || fUnicode || fInvalid ){
960934
const char *zWarning;
961935
const char *zDisable;
962936
const char *zConvert = "c=convert/";
963937
Blob ans;
964938
char cReply;
965939
966
- if( eType==-1 && fUnicode ){
940
+ if( eType==0 ){
941
+ if( binOk ){
942
+ return 0; /* We don't want binary warnings for this file. */
943
+ }
944
+ if( fHasLength ){
945
+ zWarning = "long lines";
946
+ }else{
947
+ zWarning = "binary data";
948
+ }
949
+ zDisable = "\"binary-glob\" setting";
950
+ zConvert = ""; /* We cannot convert binary files. */
951
+ }else if( fHasCrLf && fUnicode ){
967952
if ( crnlOk && encodingOk ){
968953
return 0; /* We don't want CR/NL and Unicode warnings for this file. */
969954
}
970955
zWarning = "CR/NL line endings and Unicode";
971956
zDisable = "\"crnl-glob\" and \"encoding-glob\" settings";
972
- }else if( eType==-1 ){
957
+ }else if( fInvalid ){
958
+ if( encodingOk ){
959
+ return 0; /* We don't want encoding warnings for this file. */
960
+ }
961
+ zWarning = "invalid UTF-8";
962
+ zDisable = "\"encoding-glob\" setting";
963
+ }else if( fHasCrLf ){
973964
if( crnlOk ){
974965
return 0; /* We don't want CR/NL warnings for this file. */
975966
}
976967
zWarning = "CR/NL line endings";
977968
zDisable = "\"crnl-glob\" setting";
978
- }else if( eType==0 ){
979
- if( binOk ){
980
- return 0; /* We don't want binary warnings for this file. */
981
- }
982
- zWarning = "binary data";
983
- zDisable = "\"binary-glob\" setting";
984
- zConvert = ""; /* We cannot convert binary files. */
985969
}else{
986970
if ( encodingOk ){
987971
return 0; /* We don't want encoding warnings for this file. */
988972
}
989973
zWarning = "Unicode";
990974
zDisable = "\"encoding-glob\" setting";
991
-#ifndef _WIN32
975
+#if !defined(_WIN32) && !defined(__CYGWIN__)
992976
zConvert = ""; /* On Unix, we cannot easily convert Unicode files. */
993977
#endif
994978
}
995979
file_relative_name(zFilename, &fname, 0);
996980
blob_zero(&ans);
997981
zMsg = mprintf(
998982
"%s contains %s. Use --no-warnings or the %s to disable this warning.\n"
999
- "Commit anyhow (a=all/%sy/N)? ",
983
+ "Commit anyhow (a=all/%sy/N)? ",
1000984
blob_str(&fname), zWarning, zDisable, zConvert);
1001985
prompt_user(zMsg, &ans);
1002986
fossil_free(zMsg);
1003987
cReply = blob_str(&ans)[0];
1004988
if( cReply=='a' || cReply=='A' ){
@@ -1012,12 +996,16 @@
1012996
if( fUnicode ) {
1013997
int bomSize;
1014998
const unsigned char *bom = get_utf8_bom(&bomSize);
1015999
fwrite(bom, 1, bomSize, f);
10161000
blob_to_utf8_no_bom(p, 0);
1001
+ }else if( fInvalid ){
1002
+ blob_cp1252_to_utf8(p);
10171003
}
1018
- blob_remove_cr(p);
1004
+ if( fHasCrLf ) {
1005
+ blob_remove_cr(p);
1006
+ }
10191007
fwrite(blob_buffer(p), 1, blob_size(p), f);
10201008
fclose(f);
10211009
return 1;
10221010
}else if( cReply!='y' && cReply!='Y' ){
10231011
fossil_fatal("Abandoning commit due to %s in %s",
10241012
--- src/checkin.c
+++ src/checkin.c
@@ -203,10 +203,13 @@
203 int vid;
204 db_must_be_within_tree();
205 /* 012345678901234 */
206 fossil_print("repository: %s\n", db_repository_filename());
207 fossil_print("local-root: %s\n", g.zLocalRoot);
 
 
 
208 vid = db_lget_int("checkout", 0);
209 if( vid ){
210 show_common_info(vid, "checkout:", 1, 1);
211 }
212 db_record_repository_filename(0);
@@ -902,103 +905,84 @@
902 int encodingOk, /* Non-zero if encoding warnings should be disabled. */
903 const char *zFilename /* The full name of the file being committed. */
904 ){
905 int eType; /* return value of looks_like_utf8/utf16() */
906 int fUnicode; /* return value of starts_with_utf16_bom() */
 
 
 
 
907 char *zMsg; /* Warning message */
908 Blob fname; /* Relative pathname of the file */
909 static int allOk = 0; /* Set to true to disable this routine */
910
911 if( allOk ) return 0;
912 fUnicode = starts_with_utf16_bom(p, 0, 0);
913 eType = fUnicode ? looks_like_utf16(p) : looks_like_utf8(p);
914 if( eType<-2){
915 const char *zWarning;
916 const char *zDisable;
917 const char *zConvert;
918 Blob ans;
919 char cReply;
920
921 if(eType==-4){
922 if (binOk) goto go_on;
923 zWarning = "long lines";
924 zDisable = "\"binary-glob\" setting";
925 zConvert = "";
926 }else{
927 if (encodingOk) goto go_on;
928 zWarning = "invalid UTF-8";
929 zDisable = "\"encoding-glob\" setting";
930 zConvert = "c=convert/";
931 }
932 blob_zero(&ans);
933 file_relative_name(zFilename, &fname, 0);
934 zMsg = mprintf(
935 "%s appears to be text, but contains %s. Use --no-warnings or the"
936 " %s to disable this warning.\nCommit anyhow (a=all/%sy/N)? ",
937 blob_str(&fname), zWarning, zDisable, zConvert);
938 prompt_user(zMsg, &ans);
939 fossil_free(zMsg);
940 cReply = blob_str(&ans)[0];
941 if( *zConvert && (cReply=='c' || cReply=='C') ){
942 char *zOrig = file_newname(zFilename, "original", 1);
943 FILE *f;
944 blob_write_to_file(p, zOrig);
945 fossil_free(zOrig);
946 f = fossil_fopen(zFilename, "wb");
947 blob_cp1252_to_utf8(p);
948 fwrite(blob_buffer(p), 1, blob_size(p), f);
949 fclose(f);
950 return 1;
951 } else if( cReply!='y' && cReply!='Y' ){
952 fossil_fatal("Abandoning commit due to %s in %s",
953 zWarning, blob_str(&fname));
954 }
955 blob_reset(&ans);
956 go_on:
957 eType +=4 ;
958 }
959 if( eType==0 || eType==-1 || fUnicode ){
960 const char *zWarning;
961 const char *zDisable;
962 const char *zConvert = "c=convert/";
963 Blob ans;
964 char cReply;
965
966 if( eType==-1 && fUnicode ){
 
 
 
 
 
 
 
 
 
 
 
967 if ( crnlOk && encodingOk ){
968 return 0; /* We don't want CR/NL and Unicode warnings for this file. */
969 }
970 zWarning = "CR/NL line endings and Unicode";
971 zDisable = "\"crnl-glob\" and \"encoding-glob\" settings";
972 }else if( eType==-1 ){
 
 
 
 
 
 
973 if( crnlOk ){
974 return 0; /* We don't want CR/NL warnings for this file. */
975 }
976 zWarning = "CR/NL line endings";
977 zDisable = "\"crnl-glob\" setting";
978 }else if( eType==0 ){
979 if( binOk ){
980 return 0; /* We don't want binary warnings for this file. */
981 }
982 zWarning = "binary data";
983 zDisable = "\"binary-glob\" setting";
984 zConvert = ""; /* We cannot convert binary files. */
985 }else{
986 if ( encodingOk ){
987 return 0; /* We don't want encoding warnings for this file. */
988 }
989 zWarning = "Unicode";
990 zDisable = "\"encoding-glob\" setting";
991 #ifndef _WIN32
992 zConvert = ""; /* On Unix, we cannot easily convert Unicode files. */
993 #endif
994 }
995 file_relative_name(zFilename, &fname, 0);
996 blob_zero(&ans);
997 zMsg = mprintf(
998 "%s contains %s. Use --no-warnings or the %s to disable this warning.\n"
999 "Commit anyhow (a=all/%sy/N)? ",
1000 blob_str(&fname), zWarning, zDisable, zConvert);
1001 prompt_user(zMsg, &ans);
1002 fossil_free(zMsg);
1003 cReply = blob_str(&ans)[0];
1004 if( cReply=='a' || cReply=='A' ){
@@ -1012,12 +996,16 @@
1012 if( fUnicode ) {
1013 int bomSize;
1014 const unsigned char *bom = get_utf8_bom(&bomSize);
1015 fwrite(bom, 1, bomSize, f);
1016 blob_to_utf8_no_bom(p, 0);
 
 
1017 }
1018 blob_remove_cr(p);
 
 
1019 fwrite(blob_buffer(p), 1, blob_size(p), f);
1020 fclose(f);
1021 return 1;
1022 }else if( cReply!='y' && cReply!='Y' ){
1023 fossil_fatal("Abandoning commit due to %s in %s",
1024
--- src/checkin.c
+++ src/checkin.c
@@ -203,10 +203,13 @@
203 int vid;
204 db_must_be_within_tree();
205 /* 012345678901234 */
206 fossil_print("repository: %s\n", db_repository_filename());
207 fossil_print("local-root: %s\n", g.zLocalRoot);
208 if( g.zConfigDbName ){
209 fossil_print("config-db: %s\n", g.zConfigDbName);
210 }
211 vid = db_lget_int("checkout", 0);
212 if( vid ){
213 show_common_info(vid, "checkout:", 1, 1);
214 }
215 db_record_repository_filename(0);
@@ -902,103 +905,84 @@
905 int encodingOk, /* Non-zero if encoding warnings should be disabled. */
906 const char *zFilename /* The full name of the file being committed. */
907 ){
908 int eType; /* return value of looks_like_utf8/utf16() */
909 int fUnicode; /* return value of starts_with_utf16_bom() */
910 int lookFlags; /* output flags from looks_like_utf8/utf16() */
911 int fHasCrLf; /* the blob contains one or more CR/LF pairs */
912 int fHasLength; /* the blob contains an overly long line */
913 int fInvalid; /* the blob contains invalid utf-8 */
914 char *zMsg; /* Warning message */
915 Blob fname; /* Relative pathname of the file */
916 static int allOk = 0; /* Set to true to disable this routine */
917
918 if( allOk ) return 0;
919 fUnicode = starts_with_utf16_bom(p, 0, 0);
920 if (fUnicode) {
921 eType = looks_like_utf16(p, &lookFlags);
922 if ( lookFlags&LOOK_ODD ){
923 /* It cannot be unicode, so try again as single-byte encoding */
924 fUnicode = 0;
925 eType = looks_like_utf8(p, &lookFlags);
926 }
927 }else{
928 eType = looks_like_utf8(p, &lookFlags);
929 }
930 fHasCrLf = (lookFlags & LOOK_CRLF);
931 fHasLength = (lookFlags & LOOK_LENGTH);
932 fInvalid = (lookFlags & LOOK_INVALID);
933 if( eType==0 || fHasCrLf || fUnicode || fInvalid ){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
934 const char *zWarning;
935 const char *zDisable;
936 const char *zConvert = "c=convert/";
937 Blob ans;
938 char cReply;
939
940 if( eType==0 ){
941 if( binOk ){
942 return 0; /* We don't want binary warnings for this file. */
943 }
944 if( fHasLength ){
945 zWarning = "long lines";
946 }else{
947 zWarning = "binary data";
948 }
949 zDisable = "\"binary-glob\" setting";
950 zConvert = ""; /* We cannot convert binary files. */
951 }else if( fHasCrLf && fUnicode ){
952 if ( crnlOk && encodingOk ){
953 return 0; /* We don't want CR/NL and Unicode warnings for this file. */
954 }
955 zWarning = "CR/NL line endings and Unicode";
956 zDisable = "\"crnl-glob\" and \"encoding-glob\" settings";
957 }else if( fInvalid ){
958 if( encodingOk ){
959 return 0; /* We don't want encoding warnings for this file. */
960 }
961 zWarning = "invalid UTF-8";
962 zDisable = "\"encoding-glob\" setting";
963 }else if( fHasCrLf ){
964 if( crnlOk ){
965 return 0; /* We don't want CR/NL warnings for this file. */
966 }
967 zWarning = "CR/NL line endings";
968 zDisable = "\"crnl-glob\" setting";
 
 
 
 
 
 
 
969 }else{
970 if ( encodingOk ){
971 return 0; /* We don't want encoding warnings for this file. */
972 }
973 zWarning = "Unicode";
974 zDisable = "\"encoding-glob\" setting";
975 #if !defined(_WIN32) && !defined(__CYGWIN__)
976 zConvert = ""; /* On Unix, we cannot easily convert Unicode files. */
977 #endif
978 }
979 file_relative_name(zFilename, &fname, 0);
980 blob_zero(&ans);
981 zMsg = mprintf(
982 "%s contains %s. Use --no-warnings or the %s to disable this warning.\n"
983 "Commit anyhow (a=all/%sy/N)? ",
984 blob_str(&fname), zWarning, zDisable, zConvert);
985 prompt_user(zMsg, &ans);
986 fossil_free(zMsg);
987 cReply = blob_str(&ans)[0];
988 if( cReply=='a' || cReply=='A' ){
@@ -1012,12 +996,16 @@
996 if( fUnicode ) {
997 int bomSize;
998 const unsigned char *bom = get_utf8_bom(&bomSize);
999 fwrite(bom, 1, bomSize, f);
1000 blob_to_utf8_no_bom(p, 0);
1001 }else if( fInvalid ){
1002 blob_cp1252_to_utf8(p);
1003 }
1004 if( fHasCrLf ) {
1005 blob_remove_cr(p);
1006 }
1007 fwrite(blob_buffer(p), 1, blob_size(p), f);
1008 fclose(f);
1009 return 1;
1010 }else if( cReply!='y' && cReply!='Y' ){
1011 fossil_fatal("Abandoning commit due to %s in %s",
1012
+47 -59
--- src/checkin.c
+++ src/checkin.c
@@ -203,10 +203,13 @@
203203
int vid;
204204
db_must_be_within_tree();
205205
/* 012345678901234 */
206206
fossil_print("repository: %s\n", db_repository_filename());
207207
fossil_print("local-root: %s\n", g.zLocalRoot);
208
+ if( g.zConfigDbName ){
209
+ fossil_print("config-db: %s\n", g.zConfigDbName);
210
+ }
208211
vid = db_lget_int("checkout", 0);
209212
if( vid ){
210213
show_common_info(vid, "checkout:", 1, 1);
211214
}
212215
db_record_repository_filename(0);
@@ -902,103 +905,84 @@
902905
int encodingOk, /* Non-zero if encoding warnings should be disabled. */
903906
const char *zFilename /* The full name of the file being committed. */
904907
){
905908
int eType; /* return value of looks_like_utf8/utf16() */
906909
int fUnicode; /* return value of starts_with_utf16_bom() */
910
+ int lookFlags; /* output flags from looks_like_utf8/utf16() */
911
+ int fHasCrLf; /* the blob contains one or more CR/LF pairs */
912
+ int fHasLength; /* the blob contains an overly long line */
913
+ int fInvalid; /* the blob contains invalid utf-8 */
907914
char *zMsg; /* Warning message */
908915
Blob fname; /* Relative pathname of the file */
909916
static int allOk = 0; /* Set to true to disable this routine */
910917
911918
if( allOk ) return 0;
912919
fUnicode = starts_with_utf16_bom(p, 0, 0);
913
- eType = fUnicode ? looks_like_utf16(p) : looks_like_utf8(p);
914
- if( eType<-2){
915
- const char *zWarning;
916
- const char *zDisable;
917
- const char *zConvert;
918
- Blob ans;
919
- char cReply;
920
-
921
- if(eType==-4){
922
- if (binOk) goto go_on;
923
- zWarning = "long lines";
924
- zDisable = "\"binary-glob\" setting";
925
- zConvert = "";
926
- }else{
927
- if (encodingOk) goto go_on;
928
- zWarning = "invalid UTF-8";
929
- zDisable = "\"encoding-glob\" setting";
930
- zConvert = "c=convert/";
931
- }
932
- blob_zero(&ans);
933
- file_relative_name(zFilename, &fname, 0);
934
- zMsg = mprintf(
935
- "%s appears to be text, but contains %s. Use --no-warnings or the"
936
- " %s to disable this warning.\nCommit anyhow (a=all/%sy/N)? ",
937
- blob_str(&fname), zWarning, zDisable, zConvert);
938
- prompt_user(zMsg, &ans);
939
- fossil_free(zMsg);
940
- cReply = blob_str(&ans)[0];
941
- if( *zConvert && (cReply=='c' || cReply=='C') ){
942
- char *zOrig = file_newname(zFilename, "original", 1);
943
- FILE *f;
944
- blob_write_to_file(p, zOrig);
945
- fossil_free(zOrig);
946
- f = fossil_fopen(zFilename, "wb");
947
- blob_cp1252_to_utf8(p);
948
- fwrite(blob_buffer(p), 1, blob_size(p), f);
949
- fclose(f);
950
- return 1;
951
- } else if( cReply!='y' && cReply!='Y' ){
952
- fossil_fatal("Abandoning commit due to %s in %s",
953
- zWarning, blob_str(&fname));
954
- }
955
- blob_reset(&ans);
956
- go_on:
957
- eType +=4 ;
958
- }
959
- if( eType==0 || eType==-1 || fUnicode ){
920
+ if (fUnicode) {
921
+ eType = looks_like_utf16(p, &lookFlags);
922
+ if ( lookFlags&LOOK_ODD ){
923
+ /* It cannot be unicode, so try again as single-byte encoding */
924
+ fUnicode = 0;
925
+ eType = looks_like_utf8(p, &lookFlags);
926
+ }
927
+ }else{
928
+ eType = looks_like_utf8(p, &lookFlags);
929
+ }
930
+ fHasCrLf = (lookFlags & LOOK_CRLF);
931
+ fHasLength = (lookFlags & LOOK_LENGTH);
932
+ fInvalid = (lookFlags & LOOK_INVALID);
933
+ if( eType==0 || fHasCrLf || fUnicode || fInvalid ){
960934
const char *zWarning;
961935
const char *zDisable;
962936
const char *zConvert = "c=convert/";
963937
Blob ans;
964938
char cReply;
965939
966
- if( eType==-1 && fUnicode ){
940
+ if( eType==0 ){
941
+ if( binOk ){
942
+ return 0; /* We don't want binary warnings for this file. */
943
+ }
944
+ if( fHasLength ){
945
+ zWarning = "long lines";
946
+ }else{
947
+ zWarning = "binary data";
948
+ }
949
+ zDisable = "\"binary-glob\" setting";
950
+ zConvert = ""; /* We cannot convert binary files. */
951
+ }else if( fHasCrLf && fUnicode ){
967952
if ( crnlOk && encodingOk ){
968953
return 0; /* We don't want CR/NL and Unicode warnings for this file. */
969954
}
970955
zWarning = "CR/NL line endings and Unicode";
971956
zDisable = "\"crnl-glob\" and \"encoding-glob\" settings";
972
- }else if( eType==-1 ){
957
+ }else if( fInvalid ){
958
+ if( encodingOk ){
959
+ return 0; /* We don't want encoding warnings for this file. */
960
+ }
961
+ zWarning = "invalid UTF-8";
962
+ zDisable = "\"encoding-glob\" setting";
963
+ }else if( fHasCrLf ){
973964
if( crnlOk ){
974965
return 0; /* We don't want CR/NL warnings for this file. */
975966
}
976967
zWarning = "CR/NL line endings";
977968
zDisable = "\"crnl-glob\" setting";
978
- }else if( eType==0 ){
979
- if( binOk ){
980
- return 0; /* We don't want binary warnings for this file. */
981
- }
982
- zWarning = "binary data";
983
- zDisable = "\"binary-glob\" setting";
984
- zConvert = ""; /* We cannot convert binary files. */
985969
}else{
986970
if ( encodingOk ){
987971
return 0; /* We don't want encoding warnings for this file. */
988972
}
989973
zWarning = "Unicode";
990974
zDisable = "\"encoding-glob\" setting";
991
-#ifndef _WIN32
975
+#if !defined(_WIN32) && !defined(__CYGWIN__)
992976
zConvert = ""; /* On Unix, we cannot easily convert Unicode files. */
993977
#endif
994978
}
995979
file_relative_name(zFilename, &fname, 0);
996980
blob_zero(&ans);
997981
zMsg = mprintf(
998982
"%s contains %s. Use --no-warnings or the %s to disable this warning.\n"
999
- "Commit anyhow (a=all/%sy/N)? ",
983
+ "Commit anyhow (a=all/%sy/N)? ",
1000984
blob_str(&fname), zWarning, zDisable, zConvert);
1001985
prompt_user(zMsg, &ans);
1002986
fossil_free(zMsg);
1003987
cReply = blob_str(&ans)[0];
1004988
if( cReply=='a' || cReply=='A' ){
@@ -1012,12 +996,16 @@
1012996
if( fUnicode ) {
1013997
int bomSize;
1014998
const unsigned char *bom = get_utf8_bom(&bomSize);
1015999
fwrite(bom, 1, bomSize, f);
10161000
blob_to_utf8_no_bom(p, 0);
1001
+ }else if( fInvalid ){
1002
+ blob_cp1252_to_utf8(p);
10171003
}
1018
- blob_remove_cr(p);
1004
+ if( fHasCrLf ) {
1005
+ blob_remove_cr(p);
1006
+ }
10191007
fwrite(blob_buffer(p), 1, blob_size(p), f);
10201008
fclose(f);
10211009
return 1;
10221010
}else if( cReply!='y' && cReply!='Y' ){
10231011
fossil_fatal("Abandoning commit due to %s in %s",
10241012
--- src/checkin.c
+++ src/checkin.c
@@ -203,10 +203,13 @@
203 int vid;
204 db_must_be_within_tree();
205 /* 012345678901234 */
206 fossil_print("repository: %s\n", db_repository_filename());
207 fossil_print("local-root: %s\n", g.zLocalRoot);
 
 
 
208 vid = db_lget_int("checkout", 0);
209 if( vid ){
210 show_common_info(vid, "checkout:", 1, 1);
211 }
212 db_record_repository_filename(0);
@@ -902,103 +905,84 @@
902 int encodingOk, /* Non-zero if encoding warnings should be disabled. */
903 const char *zFilename /* The full name of the file being committed. */
904 ){
905 int eType; /* return value of looks_like_utf8/utf16() */
906 int fUnicode; /* return value of starts_with_utf16_bom() */
 
 
 
 
907 char *zMsg; /* Warning message */
908 Blob fname; /* Relative pathname of the file */
909 static int allOk = 0; /* Set to true to disable this routine */
910
911 if( allOk ) return 0;
912 fUnicode = starts_with_utf16_bom(p, 0, 0);
913 eType = fUnicode ? looks_like_utf16(p) : looks_like_utf8(p);
914 if( eType<-2){
915 const char *zWarning;
916 const char *zDisable;
917 const char *zConvert;
918 Blob ans;
919 char cReply;
920
921 if(eType==-4){
922 if (binOk) goto go_on;
923 zWarning = "long lines";
924 zDisable = "\"binary-glob\" setting";
925 zConvert = "";
926 }else{
927 if (encodingOk) goto go_on;
928 zWarning = "invalid UTF-8";
929 zDisable = "\"encoding-glob\" setting";
930 zConvert = "c=convert/";
931 }
932 blob_zero(&ans);
933 file_relative_name(zFilename, &fname, 0);
934 zMsg = mprintf(
935 "%s appears to be text, but contains %s. Use --no-warnings or the"
936 " %s to disable this warning.\nCommit anyhow (a=all/%sy/N)? ",
937 blob_str(&fname), zWarning, zDisable, zConvert);
938 prompt_user(zMsg, &ans);
939 fossil_free(zMsg);
940 cReply = blob_str(&ans)[0];
941 if( *zConvert && (cReply=='c' || cReply=='C') ){
942 char *zOrig = file_newname(zFilename, "original", 1);
943 FILE *f;
944 blob_write_to_file(p, zOrig);
945 fossil_free(zOrig);
946 f = fossil_fopen(zFilename, "wb");
947 blob_cp1252_to_utf8(p);
948 fwrite(blob_buffer(p), 1, blob_size(p), f);
949 fclose(f);
950 return 1;
951 } else if( cReply!='y' && cReply!='Y' ){
952 fossil_fatal("Abandoning commit due to %s in %s",
953 zWarning, blob_str(&fname));
954 }
955 blob_reset(&ans);
956 go_on:
957 eType +=4 ;
958 }
959 if( eType==0 || eType==-1 || fUnicode ){
960 const char *zWarning;
961 const char *zDisable;
962 const char *zConvert = "c=convert/";
963 Blob ans;
964 char cReply;
965
966 if( eType==-1 && fUnicode ){
 
 
 
 
 
 
 
 
 
 
 
967 if ( crnlOk && encodingOk ){
968 return 0; /* We don't want CR/NL and Unicode warnings for this file. */
969 }
970 zWarning = "CR/NL line endings and Unicode";
971 zDisable = "\"crnl-glob\" and \"encoding-glob\" settings";
972 }else if( eType==-1 ){
 
 
 
 
 
 
973 if( crnlOk ){
974 return 0; /* We don't want CR/NL warnings for this file. */
975 }
976 zWarning = "CR/NL line endings";
977 zDisable = "\"crnl-glob\" setting";
978 }else if( eType==0 ){
979 if( binOk ){
980 return 0; /* We don't want binary warnings for this file. */
981 }
982 zWarning = "binary data";
983 zDisable = "\"binary-glob\" setting";
984 zConvert = ""; /* We cannot convert binary files. */
985 }else{
986 if ( encodingOk ){
987 return 0; /* We don't want encoding warnings for this file. */
988 }
989 zWarning = "Unicode";
990 zDisable = "\"encoding-glob\" setting";
991 #ifndef _WIN32
992 zConvert = ""; /* On Unix, we cannot easily convert Unicode files. */
993 #endif
994 }
995 file_relative_name(zFilename, &fname, 0);
996 blob_zero(&ans);
997 zMsg = mprintf(
998 "%s contains %s. Use --no-warnings or the %s to disable this warning.\n"
999 "Commit anyhow (a=all/%sy/N)? ",
1000 blob_str(&fname), zWarning, zDisable, zConvert);
1001 prompt_user(zMsg, &ans);
1002 fossil_free(zMsg);
1003 cReply = blob_str(&ans)[0];
1004 if( cReply=='a' || cReply=='A' ){
@@ -1012,12 +996,16 @@
1012 if( fUnicode ) {
1013 int bomSize;
1014 const unsigned char *bom = get_utf8_bom(&bomSize);
1015 fwrite(bom, 1, bomSize, f);
1016 blob_to_utf8_no_bom(p, 0);
 
 
1017 }
1018 blob_remove_cr(p);
 
 
1019 fwrite(blob_buffer(p), 1, blob_size(p), f);
1020 fclose(f);
1021 return 1;
1022 }else if( cReply!='y' && cReply!='Y' ){
1023 fossil_fatal("Abandoning commit due to %s in %s",
1024
--- src/checkin.c
+++ src/checkin.c
@@ -203,10 +203,13 @@
203 int vid;
204 db_must_be_within_tree();
205 /* 012345678901234 */
206 fossil_print("repository: %s\n", db_repository_filename());
207 fossil_print("local-root: %s\n", g.zLocalRoot);
208 if( g.zConfigDbName ){
209 fossil_print("config-db: %s\n", g.zConfigDbName);
210 }
211 vid = db_lget_int("checkout", 0);
212 if( vid ){
213 show_common_info(vid, "checkout:", 1, 1);
214 }
215 db_record_repository_filename(0);
@@ -902,103 +905,84 @@
905 int encodingOk, /* Non-zero if encoding warnings should be disabled. */
906 const char *zFilename /* The full name of the file being committed. */
907 ){
908 int eType; /* return value of looks_like_utf8/utf16() */
909 int fUnicode; /* return value of starts_with_utf16_bom() */
910 int lookFlags; /* output flags from looks_like_utf8/utf16() */
911 int fHasCrLf; /* the blob contains one or more CR/LF pairs */
912 int fHasLength; /* the blob contains an overly long line */
913 int fInvalid; /* the blob contains invalid utf-8 */
914 char *zMsg; /* Warning message */
915 Blob fname; /* Relative pathname of the file */
916 static int allOk = 0; /* Set to true to disable this routine */
917
918 if( allOk ) return 0;
919 fUnicode = starts_with_utf16_bom(p, 0, 0);
920 if (fUnicode) {
921 eType = looks_like_utf16(p, &lookFlags);
922 if ( lookFlags&LOOK_ODD ){
923 /* It cannot be unicode, so try again as single-byte encoding */
924 fUnicode = 0;
925 eType = looks_like_utf8(p, &lookFlags);
926 }
927 }else{
928 eType = looks_like_utf8(p, &lookFlags);
929 }
930 fHasCrLf = (lookFlags & LOOK_CRLF);
931 fHasLength = (lookFlags & LOOK_LENGTH);
932 fInvalid = (lookFlags & LOOK_INVALID);
933 if( eType==0 || fHasCrLf || fUnicode || fInvalid ){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
934 const char *zWarning;
935 const char *zDisable;
936 const char *zConvert = "c=convert/";
937 Blob ans;
938 char cReply;
939
940 if( eType==0 ){
941 if( binOk ){
942 return 0; /* We don't want binary warnings for this file. */
943 }
944 if( fHasLength ){
945 zWarning = "long lines";
946 }else{
947 zWarning = "binary data";
948 }
949 zDisable = "\"binary-glob\" setting";
950 zConvert = ""; /* We cannot convert binary files. */
951 }else if( fHasCrLf && fUnicode ){
952 if ( crnlOk && encodingOk ){
953 return 0; /* We don't want CR/NL and Unicode warnings for this file. */
954 }
955 zWarning = "CR/NL line endings and Unicode";
956 zDisable = "\"crnl-glob\" and \"encoding-glob\" settings";
957 }else if( fInvalid ){
958 if( encodingOk ){
959 return 0; /* We don't want encoding warnings for this file. */
960 }
961 zWarning = "invalid UTF-8";
962 zDisable = "\"encoding-glob\" setting";
963 }else if( fHasCrLf ){
964 if( crnlOk ){
965 return 0; /* We don't want CR/NL warnings for this file. */
966 }
967 zWarning = "CR/NL line endings";
968 zDisable = "\"crnl-glob\" setting";
 
 
 
 
 
 
 
969 }else{
970 if ( encodingOk ){
971 return 0; /* We don't want encoding warnings for this file. */
972 }
973 zWarning = "Unicode";
974 zDisable = "\"encoding-glob\" setting";
975 #if !defined(_WIN32) && !defined(__CYGWIN__)
976 zConvert = ""; /* On Unix, we cannot easily convert Unicode files. */
977 #endif
978 }
979 file_relative_name(zFilename, &fname, 0);
980 blob_zero(&ans);
981 zMsg = mprintf(
982 "%s contains %s. Use --no-warnings or the %s to disable this warning.\n"
983 "Commit anyhow (a=all/%sy/N)? ",
984 blob_str(&fname), zWarning, zDisable, zConvert);
985 prompt_user(zMsg, &ans);
986 fossil_free(zMsg);
987 cReply = blob_str(&ans)[0];
988 if( cReply=='a' || cReply=='A' ){
@@ -1012,12 +996,16 @@
996 if( fUnicode ) {
997 int bomSize;
998 const unsigned char *bom = get_utf8_bom(&bomSize);
999 fwrite(bom, 1, bomSize, f);
1000 blob_to_utf8_no_bom(p, 0);
1001 }else if( fInvalid ){
1002 blob_cp1252_to_utf8(p);
1003 }
1004 if( fHasCrLf ) {
1005 blob_remove_cr(p);
1006 }
1007 fwrite(blob_buffer(p), 1, blob_size(p), f);
1008 fclose(f);
1009 return 1;
1010 }else if( cReply!='y' && cReply!='Y' ){
1011 fossil_fatal("Abandoning commit due to %s in %s",
1012
+1 -1
--- src/configure.c
+++ src/configure.c
@@ -888,11 +888,11 @@
888888
if( strncmp(zMethod,"pull",n)==0 ){
889889
overwriteFlag = find_option("overwrite",0,0)!=0;
890890
}
891891
url_proxy_options();
892892
if( g.argc!=4 && g.argc!=5 ){
893
- usage("pull AREA ?URL?");
893
+ usage(mprintf("%s AREA ?URL?", zMethod));
894894
}
895895
mask = configure_name_to_mask(g.argv[3], 1);
896896
if( g.argc==5 ){
897897
zServer = g.argv[4];
898898
}
899899
--- src/configure.c
+++ src/configure.c
@@ -888,11 +888,11 @@
888 if( strncmp(zMethod,"pull",n)==0 ){
889 overwriteFlag = find_option("overwrite",0,0)!=0;
890 }
891 url_proxy_options();
892 if( g.argc!=4 && g.argc!=5 ){
893 usage("pull AREA ?URL?");
894 }
895 mask = configure_name_to_mask(g.argv[3], 1);
896 if( g.argc==5 ){
897 zServer = g.argv[4];
898 }
899
--- src/configure.c
+++ src/configure.c
@@ -888,11 +888,11 @@
888 if( strncmp(zMethod,"pull",n)==0 ){
889 overwriteFlag = find_option("overwrite",0,0)!=0;
890 }
891 url_proxy_options();
892 if( g.argc!=4 && g.argc!=5 ){
893 usage(mprintf("%s AREA ?URL?", zMethod));
894 }
895 mask = configure_name_to_mask(g.argv[3], 1);
896 if( g.argc==5 ){
897 zServer = g.argv[4];
898 }
899
+23 -35
--- src/db.c
+++ src/db.c
@@ -29,13 +29,10 @@
2929
**
3030
*/
3131
#include "config.h"
3232
#if ! defined(_WIN32)
3333
# include <pwd.h>
34
-# if defined(__CYGWIN__)
35
-# include <sys/cygwin.h>
36
-# endif
3734
#endif
3835
#include <sqlite3.h>
3936
#include <sys/types.h>
4037
#include <sys/stat.h>
4138
#include <unistd.h>
@@ -224,11 +221,11 @@
224221
** rolls back rather than commit. It is the responsibility of the
225222
** hooks themselves to issue any error messages.
226223
*/
227224
void db_commit_hook(int (*x)(void), int sequence){
228225
int i;
229
- assert( db.nCommitHook < sizeof(db.aHook)/sizeof(db.aHook[1]) );
226
+ assert( db.nCommitHook < count(db.aHook) );
230227
for(i=0; i<db.nCommitHook; i++){
231228
assert( x!=db.aHook[i].xHook );
232229
if( db.aHook[i].sequence>sequence ){
233230
int s = sequence;
234231
int (*xS)(void) = x;
@@ -794,12 +791,12 @@
794791
** connection so that we can join between the various databases. In that
795792
** case, invoke this routine with useAttach as 1.
796793
*/
797794
void db_open_config(int useAttach){
798795
char *zDbName;
799
- const char *zHome;
800
- if( g.configOpen ) return;
796
+ char *zHome;
797
+ if( g.zConfigDbName ) return;
801798
#if defined(_WIN32) || defined(__CYGWIN__)
802799
zHome = fossil_getenv("LOCALAPPDATA");
803800
if( zHome==0 ){
804801
zHome = fossil_getenv("APPDATA");
805802
if( zHome==0 ){
@@ -806,19 +803,10 @@
806803
char *zDrive = fossil_getenv("HOMEDRIVE");
807804
zHome = fossil_getenv("HOMEPATH");
808805
if( zDrive && zHome ) zHome = mprintf("%s%s", zDrive, zHome);
809806
}
810807
}
811
-#if defined(__CYGWIN__)
812
- if( zHome!=0 ){
813
- /* We now have the win32 path, but we need the Cygwin equivalent */
814
- ssize_t size = cygwin_conv_path(CCP_WIN_A_TO_POSIX, zHome, 0, 0);
815
- char *converted = fossil_malloc(size);
816
- cygwin_conv_path(CCP_WIN_A_TO_POSIX, zHome, converted, size);
817
- zHome = converted;
818
- }
819
-#endif
820808
if( zHome==0 ){
821809
fossil_fatal("cannot locate home directory - "
822810
"please set the LOCALAPPDATA or APPDATA or HOMEPATH "
823811
"environment variables");
824812
}
@@ -830,36 +818,37 @@
830818
}
831819
#endif
832820
if( file_isdir(zHome)!=1 ){
833821
fossil_fatal("invalid home directory: %s", zHome);
834822
}
835
-#ifndef _WIN32
836
- if( access(zHome, W_OK) ){
837
- fossil_fatal("home directory %s must be writeable", zHome);
838
- }
839
-#endif
840
- g.zHome = mprintf("%/", zHome);
841823
#if defined(_WIN32) || defined(__CYGWIN__)
842824
/* . filenames give some window systems problems and many apps problems */
843825
zDbName = mprintf("%//_fossil", zHome);
844826
#else
827
+ if( file_access(zHome, W_OK) ){
828
+ fossil_fatal("home directory %s must be writeable", zHome);
829
+ }
845830
zDbName = mprintf("%s/.fossil", zHome);
846831
#endif
847832
if( file_size(zDbName)<1024*3 ){
848833
db_init_database(zDbName, zConfigSchema, (char*)0);
849834
}
835
+#if defined(_WIN32) || defined(__CYGWIN__)
836
+ if( file_access(zDbName, W_OK) ){
837
+ fossil_fatal("configuration file %s must be writeable", zDbName);
838
+ }
839
+#endif
850840
if( useAttach ){
851841
db_open_or_attach(zDbName, "configdb", &g.useAttach);
852842
g.dbConfig = 0;
853843
g.zConfigDbType = 0;
854844
}else{
855845
g.useAttach = 0;
856846
g.dbConfig = db_open(zDbName);
857847
g.zConfigDbType = "configdb";
858848
}
859
- g.configOpen = 1;
860
- free(zDbName);
849
+ g.zConfigDbName = zDbName;
861850
}
862851
863852
864853
/*
865854
** Returns TRUE if zTable exists in the local database but lacks column
@@ -931,32 +920,31 @@
931920
** that contains a valid repository database.
932921
**
933922
** For legacy, also look for ".fos". The use of ".fos" is deprecated
934923
** since "fos" has negative connotations in Hungarian, we are told.
935924
**
936
-** If no valid _FOSSIL_ or .fos file is found, we move up one level and
925
+** If no valid _FOSSIL_ or .fslckout file is found, we move up one level and
937926
** try again. Once the file is found, the g.zLocalRoot variable is set
938927
** to the root of the repository tree and this routine returns 1. If
939928
** no database is found, then this routine return 0.
940929
**
941930
** This routine always opens the user database regardless of whether or
942
-** not the repository database is found. If the _FOSSIL_ or .fos file
931
+** not the repository database is found. If the _FOSSIL_ or .fslckout file
943932
** is found, it is attached to the open database connection too.
944933
*/
945934
int db_open_local(void){
946935
int i, n;
947936
char zPwd[2000];
948
- static const char *const aDbName[] = { "/_FOSSIL_", "/.fslckout", "/.fos" };
937
+ static const char aDbName[][10] = { "_FOSSIL_", ".fslckout", ".fos" };
949938
950939
if( g.localOpen) return 1;
951940
file_getcwd(zPwd, sizeof(zPwd)-20);
952941
n = strlen(zPwd);
953942
if( n==1 && zPwd[0]=='/' ) zPwd[0] = '.';
954943
while( n>0 ){
955
- if( file_access(zPwd, W_OK) ) break;
956
- for(i=0; i<sizeof(aDbName)/sizeof(aDbName[0]); i++){
957
- sqlite3_snprintf(sizeof(zPwd)-n, &zPwd[n], "%s", aDbName[i]);
944
+ for(i=0; i<count(aDbName); i++){
945
+ sqlite3_snprintf(sizeof(zPwd)-n, &zPwd[n], "/%s", aDbName[i]);
958946
if( isValidLocalDb(zPwd) ){
959947
/* Found a valid checkout database file */
960948
zPwd[n] = 0;
961949
while( n>1 && zPwd[n-1]=='/' ){
962950
n--;
@@ -1215,11 +1203,11 @@
12151203
fossil_warning("unfinalized SQL statement: [%s]", sqlite3_sql(pStmt));
12161204
}
12171205
}
12181206
g.repositoryOpen = 0;
12191207
g.localOpen = 0;
1220
- g.configOpen = 0;
1208
+ g.zConfigDbName = NULL;
12211209
sqlite3_wal_checkpoint(g.db, 0);
12221210
sqlite3_close(g.db);
12231211
g.db = 0;
12241212
g.zMainDbType = 0;
12251213
if( g.dbConfig ){
@@ -1639,19 +1627,19 @@
16391627
** Return true if the string zVal represents "true" (or "false").
16401628
*/
16411629
int is_truth(const char *zVal){
16421630
static const char *const azOn[] = { "on", "yes", "true", "1" };
16431631
int i;
1644
- for(i=0; i<sizeof(azOn)/sizeof(azOn[0]); i++){
1632
+ for(i=0; i<count(azOn); i++){
16451633
if( fossil_stricmp(zVal,azOn[i])==0 ) return 1;
16461634
}
16471635
return 0;
16481636
}
16491637
int is_false(const char *zVal){
16501638
static const char *const azOff[] = { "off", "no", "false", "0" };
16511639
int i;
1652
- for(i=0; i<sizeof(azOff)/sizeof(azOff[0]); i++){
1640
+ for(i=0; i<count(azOff); i++){
16531641
if( fossil_stricmp(zVal,azOff[i])==0 ) return 1;
16541642
}
16551643
return 0;
16561644
}
16571645
@@ -1778,11 +1766,11 @@
17781766
}
17791767
}
17801768
if( g.repositoryOpen ){
17811769
z = db_text(0, "SELECT value FROM config WHERE name=%Q", zName);
17821770
}
1783
- if( z==0 && g.configOpen ){
1771
+ if( z==0 && g.zConfigDbName ){
17841772
db_swap_connections();
17851773
z = db_text(0, "SELECT value FROM global_config WHERE name=%Q", zName);
17861774
db_swap_connections();
17871775
}
17881776
if( ctrlSetting!=0 && ctrlSetting->versionable && g.localOpen ){
@@ -1825,11 +1813,11 @@
18251813
}
18261814
db_end_transaction(0);
18271815
}
18281816
int db_is_global(const char *zName){
18291817
int rc = 0;
1830
- if( g.configOpen ){
1818
+ if( g.zConfigDbName ){
18311819
db_swap_connections();
18321820
rc = db_exists("SELECT 1 FROM global_config WHERE name=%Q", zName);
18331821
db_swap_connections();
18341822
}
18351823
return rc;
@@ -1846,11 +1834,11 @@
18461834
}
18471835
db_finalize(&q);
18481836
}else{
18491837
rc = SQLITE_DONE;
18501838
}
1851
- if( rc==SQLITE_DONE && g.configOpen ){
1839
+ if( rc==SQLITE_DONE && g.zConfigDbName ){
18521840
db_swap_connections();
18531841
v = db_int(dflt, "SELECT value FROM global_config WHERE name=%Q", zName);
18541842
db_swap_connections();
18551843
}
18561844
return v;
18571845
--- src/db.c
+++ src/db.c
@@ -29,13 +29,10 @@
29 **
30 */
31 #include "config.h"
32 #if ! defined(_WIN32)
33 # include <pwd.h>
34 # if defined(__CYGWIN__)
35 # include <sys/cygwin.h>
36 # endif
37 #endif
38 #include <sqlite3.h>
39 #include <sys/types.h>
40 #include <sys/stat.h>
41 #include <unistd.h>
@@ -224,11 +221,11 @@
224 ** rolls back rather than commit. It is the responsibility of the
225 ** hooks themselves to issue any error messages.
226 */
227 void db_commit_hook(int (*x)(void), int sequence){
228 int i;
229 assert( db.nCommitHook < sizeof(db.aHook)/sizeof(db.aHook[1]) );
230 for(i=0; i<db.nCommitHook; i++){
231 assert( x!=db.aHook[i].xHook );
232 if( db.aHook[i].sequence>sequence ){
233 int s = sequence;
234 int (*xS)(void) = x;
@@ -794,12 +791,12 @@
794 ** connection so that we can join between the various databases. In that
795 ** case, invoke this routine with useAttach as 1.
796 */
797 void db_open_config(int useAttach){
798 char *zDbName;
799 const char *zHome;
800 if( g.configOpen ) return;
801 #if defined(_WIN32) || defined(__CYGWIN__)
802 zHome = fossil_getenv("LOCALAPPDATA");
803 if( zHome==0 ){
804 zHome = fossil_getenv("APPDATA");
805 if( zHome==0 ){
@@ -806,19 +803,10 @@
806 char *zDrive = fossil_getenv("HOMEDRIVE");
807 zHome = fossil_getenv("HOMEPATH");
808 if( zDrive && zHome ) zHome = mprintf("%s%s", zDrive, zHome);
809 }
810 }
811 #if defined(__CYGWIN__)
812 if( zHome!=0 ){
813 /* We now have the win32 path, but we need the Cygwin equivalent */
814 ssize_t size = cygwin_conv_path(CCP_WIN_A_TO_POSIX, zHome, 0, 0);
815 char *converted = fossil_malloc(size);
816 cygwin_conv_path(CCP_WIN_A_TO_POSIX, zHome, converted, size);
817 zHome = converted;
818 }
819 #endif
820 if( zHome==0 ){
821 fossil_fatal("cannot locate home directory - "
822 "please set the LOCALAPPDATA or APPDATA or HOMEPATH "
823 "environment variables");
824 }
@@ -830,36 +818,37 @@
830 }
831 #endif
832 if( file_isdir(zHome)!=1 ){
833 fossil_fatal("invalid home directory: %s", zHome);
834 }
835 #ifndef _WIN32
836 if( access(zHome, W_OK) ){
837 fossil_fatal("home directory %s must be writeable", zHome);
838 }
839 #endif
840 g.zHome = mprintf("%/", zHome);
841 #if defined(_WIN32) || defined(__CYGWIN__)
842 /* . filenames give some window systems problems and many apps problems */
843 zDbName = mprintf("%//_fossil", zHome);
844 #else
 
 
 
845 zDbName = mprintf("%s/.fossil", zHome);
846 #endif
847 if( file_size(zDbName)<1024*3 ){
848 db_init_database(zDbName, zConfigSchema, (char*)0);
849 }
 
 
 
 
 
850 if( useAttach ){
851 db_open_or_attach(zDbName, "configdb", &g.useAttach);
852 g.dbConfig = 0;
853 g.zConfigDbType = 0;
854 }else{
855 g.useAttach = 0;
856 g.dbConfig = db_open(zDbName);
857 g.zConfigDbType = "configdb";
858 }
859 g.configOpen = 1;
860 free(zDbName);
861 }
862
863
864 /*
865 ** Returns TRUE if zTable exists in the local database but lacks column
@@ -931,32 +920,31 @@
931 ** that contains a valid repository database.
932 **
933 ** For legacy, also look for ".fos". The use of ".fos" is deprecated
934 ** since "fos" has negative connotations in Hungarian, we are told.
935 **
936 ** If no valid _FOSSIL_ or .fos file is found, we move up one level and
937 ** try again. Once the file is found, the g.zLocalRoot variable is set
938 ** to the root of the repository tree and this routine returns 1. If
939 ** no database is found, then this routine return 0.
940 **
941 ** This routine always opens the user database regardless of whether or
942 ** not the repository database is found. If the _FOSSIL_ or .fos file
943 ** is found, it is attached to the open database connection too.
944 */
945 int db_open_local(void){
946 int i, n;
947 char zPwd[2000];
948 static const char *const aDbName[] = { "/_FOSSIL_", "/.fslckout", "/.fos" };
949
950 if( g.localOpen) return 1;
951 file_getcwd(zPwd, sizeof(zPwd)-20);
952 n = strlen(zPwd);
953 if( n==1 && zPwd[0]=='/' ) zPwd[0] = '.';
954 while( n>0 ){
955 if( file_access(zPwd, W_OK) ) break;
956 for(i=0; i<sizeof(aDbName)/sizeof(aDbName[0]); i++){
957 sqlite3_snprintf(sizeof(zPwd)-n, &zPwd[n], "%s", aDbName[i]);
958 if( isValidLocalDb(zPwd) ){
959 /* Found a valid checkout database file */
960 zPwd[n] = 0;
961 while( n>1 && zPwd[n-1]=='/' ){
962 n--;
@@ -1215,11 +1203,11 @@
1215 fossil_warning("unfinalized SQL statement: [%s]", sqlite3_sql(pStmt));
1216 }
1217 }
1218 g.repositoryOpen = 0;
1219 g.localOpen = 0;
1220 g.configOpen = 0;
1221 sqlite3_wal_checkpoint(g.db, 0);
1222 sqlite3_close(g.db);
1223 g.db = 0;
1224 g.zMainDbType = 0;
1225 if( g.dbConfig ){
@@ -1639,19 +1627,19 @@
1639 ** Return true if the string zVal represents "true" (or "false").
1640 */
1641 int is_truth(const char *zVal){
1642 static const char *const azOn[] = { "on", "yes", "true", "1" };
1643 int i;
1644 for(i=0; i<sizeof(azOn)/sizeof(azOn[0]); i++){
1645 if( fossil_stricmp(zVal,azOn[i])==0 ) return 1;
1646 }
1647 return 0;
1648 }
1649 int is_false(const char *zVal){
1650 static const char *const azOff[] = { "off", "no", "false", "0" };
1651 int i;
1652 for(i=0; i<sizeof(azOff)/sizeof(azOff[0]); i++){
1653 if( fossil_stricmp(zVal,azOff[i])==0 ) return 1;
1654 }
1655 return 0;
1656 }
1657
@@ -1778,11 +1766,11 @@
1778 }
1779 }
1780 if( g.repositoryOpen ){
1781 z = db_text(0, "SELECT value FROM config WHERE name=%Q", zName);
1782 }
1783 if( z==0 && g.configOpen ){
1784 db_swap_connections();
1785 z = db_text(0, "SELECT value FROM global_config WHERE name=%Q", zName);
1786 db_swap_connections();
1787 }
1788 if( ctrlSetting!=0 && ctrlSetting->versionable && g.localOpen ){
@@ -1825,11 +1813,11 @@
1825 }
1826 db_end_transaction(0);
1827 }
1828 int db_is_global(const char *zName){
1829 int rc = 0;
1830 if( g.configOpen ){
1831 db_swap_connections();
1832 rc = db_exists("SELECT 1 FROM global_config WHERE name=%Q", zName);
1833 db_swap_connections();
1834 }
1835 return rc;
@@ -1846,11 +1834,11 @@
1846 }
1847 db_finalize(&q);
1848 }else{
1849 rc = SQLITE_DONE;
1850 }
1851 if( rc==SQLITE_DONE && g.configOpen ){
1852 db_swap_connections();
1853 v = db_int(dflt, "SELECT value FROM global_config WHERE name=%Q", zName);
1854 db_swap_connections();
1855 }
1856 return v;
1857
--- src/db.c
+++ src/db.c
@@ -29,13 +29,10 @@
29 **
30 */
31 #include "config.h"
32 #if ! defined(_WIN32)
33 # include <pwd.h>
 
 
 
34 #endif
35 #include <sqlite3.h>
36 #include <sys/types.h>
37 #include <sys/stat.h>
38 #include <unistd.h>
@@ -224,11 +221,11 @@
221 ** rolls back rather than commit. It is the responsibility of the
222 ** hooks themselves to issue any error messages.
223 */
224 void db_commit_hook(int (*x)(void), int sequence){
225 int i;
226 assert( db.nCommitHook < count(db.aHook) );
227 for(i=0; i<db.nCommitHook; i++){
228 assert( x!=db.aHook[i].xHook );
229 if( db.aHook[i].sequence>sequence ){
230 int s = sequence;
231 int (*xS)(void) = x;
@@ -794,12 +791,12 @@
791 ** connection so that we can join between the various databases. In that
792 ** case, invoke this routine with useAttach as 1.
793 */
794 void db_open_config(int useAttach){
795 char *zDbName;
796 char *zHome;
797 if( g.zConfigDbName ) return;
798 #if defined(_WIN32) || defined(__CYGWIN__)
799 zHome = fossil_getenv("LOCALAPPDATA");
800 if( zHome==0 ){
801 zHome = fossil_getenv("APPDATA");
802 if( zHome==0 ){
@@ -806,19 +803,10 @@
803 char *zDrive = fossil_getenv("HOMEDRIVE");
804 zHome = fossil_getenv("HOMEPATH");
805 if( zDrive && zHome ) zHome = mprintf("%s%s", zDrive, zHome);
806 }
807 }
 
 
 
 
 
 
 
 
 
808 if( zHome==0 ){
809 fossil_fatal("cannot locate home directory - "
810 "please set the LOCALAPPDATA or APPDATA or HOMEPATH "
811 "environment variables");
812 }
@@ -830,36 +818,37 @@
818 }
819 #endif
820 if( file_isdir(zHome)!=1 ){
821 fossil_fatal("invalid home directory: %s", zHome);
822 }
 
 
 
 
 
 
823 #if defined(_WIN32) || defined(__CYGWIN__)
824 /* . filenames give some window systems problems and many apps problems */
825 zDbName = mprintf("%//_fossil", zHome);
826 #else
827 if( file_access(zHome, W_OK) ){
828 fossil_fatal("home directory %s must be writeable", zHome);
829 }
830 zDbName = mprintf("%s/.fossil", zHome);
831 #endif
832 if( file_size(zDbName)<1024*3 ){
833 db_init_database(zDbName, zConfigSchema, (char*)0);
834 }
835 #if defined(_WIN32) || defined(__CYGWIN__)
836 if( file_access(zDbName, W_OK) ){
837 fossil_fatal("configuration file %s must be writeable", zDbName);
838 }
839 #endif
840 if( useAttach ){
841 db_open_or_attach(zDbName, "configdb", &g.useAttach);
842 g.dbConfig = 0;
843 g.zConfigDbType = 0;
844 }else{
845 g.useAttach = 0;
846 g.dbConfig = db_open(zDbName);
847 g.zConfigDbType = "configdb";
848 }
849 g.zConfigDbName = zDbName;
 
850 }
851
852
853 /*
854 ** Returns TRUE if zTable exists in the local database but lacks column
@@ -931,32 +920,31 @@
920 ** that contains a valid repository database.
921 **
922 ** For legacy, also look for ".fos". The use of ".fos" is deprecated
923 ** since "fos" has negative connotations in Hungarian, we are told.
924 **
925 ** If no valid _FOSSIL_ or .fslckout file is found, we move up one level and
926 ** try again. Once the file is found, the g.zLocalRoot variable is set
927 ** to the root of the repository tree and this routine returns 1. If
928 ** no database is found, then this routine return 0.
929 **
930 ** This routine always opens the user database regardless of whether or
931 ** not the repository database is found. If the _FOSSIL_ or .fslckout file
932 ** is found, it is attached to the open database connection too.
933 */
934 int db_open_local(void){
935 int i, n;
936 char zPwd[2000];
937 static const char aDbName[][10] = { "_FOSSIL_", ".fslckout", ".fos" };
938
939 if( g.localOpen) return 1;
940 file_getcwd(zPwd, sizeof(zPwd)-20);
941 n = strlen(zPwd);
942 if( n==1 && zPwd[0]=='/' ) zPwd[0] = '.';
943 while( n>0 ){
944 for(i=0; i<count(aDbName); i++){
945 sqlite3_snprintf(sizeof(zPwd)-n, &zPwd[n], "/%s", aDbName[i]);
 
946 if( isValidLocalDb(zPwd) ){
947 /* Found a valid checkout database file */
948 zPwd[n] = 0;
949 while( n>1 && zPwd[n-1]=='/' ){
950 n--;
@@ -1215,11 +1203,11 @@
1203 fossil_warning("unfinalized SQL statement: [%s]", sqlite3_sql(pStmt));
1204 }
1205 }
1206 g.repositoryOpen = 0;
1207 g.localOpen = 0;
1208 g.zConfigDbName = NULL;
1209 sqlite3_wal_checkpoint(g.db, 0);
1210 sqlite3_close(g.db);
1211 g.db = 0;
1212 g.zMainDbType = 0;
1213 if( g.dbConfig ){
@@ -1639,19 +1627,19 @@
1627 ** Return true if the string zVal represents "true" (or "false").
1628 */
1629 int is_truth(const char *zVal){
1630 static const char *const azOn[] = { "on", "yes", "true", "1" };
1631 int i;
1632 for(i=0; i<count(azOn); i++){
1633 if( fossil_stricmp(zVal,azOn[i])==0 ) return 1;
1634 }
1635 return 0;
1636 }
1637 int is_false(const char *zVal){
1638 static const char *const azOff[] = { "off", "no", "false", "0" };
1639 int i;
1640 for(i=0; i<count(azOff); i++){
1641 if( fossil_stricmp(zVal,azOff[i])==0 ) return 1;
1642 }
1643 return 0;
1644 }
1645
@@ -1778,11 +1766,11 @@
1766 }
1767 }
1768 if( g.repositoryOpen ){
1769 z = db_text(0, "SELECT value FROM config WHERE name=%Q", zName);
1770 }
1771 if( z==0 && g.zConfigDbName ){
1772 db_swap_connections();
1773 z = db_text(0, "SELECT value FROM global_config WHERE name=%Q", zName);
1774 db_swap_connections();
1775 }
1776 if( ctrlSetting!=0 && ctrlSetting->versionable && g.localOpen ){
@@ -1825,11 +1813,11 @@
1813 }
1814 db_end_transaction(0);
1815 }
1816 int db_is_global(const char *zName){
1817 int rc = 0;
1818 if( g.zConfigDbName ){
1819 db_swap_connections();
1820 rc = db_exists("SELECT 1 FROM global_config WHERE name=%Q", zName);
1821 db_swap_connections();
1822 }
1823 return rc;
@@ -1846,11 +1834,11 @@
1834 }
1835 db_finalize(&q);
1836 }else{
1837 rc = SQLITE_DONE;
1838 }
1839 if( rc==SQLITE_DONE && g.zConfigDbName ){
1840 db_swap_connections();
1841 v = db_int(dflt, "SELECT value FROM global_config WHERE name=%Q", zName);
1842 db_swap_connections();
1843 }
1844 return v;
1845
+186 -96
--- src/diff.c
+++ src/diff.c
@@ -57,11 +57,28 @@
5757
"more than 10,000 changes\n"
5858
5959
#define DIFF_TOO_MANY_CHANGES_HTML \
6060
"<p class='generalError'>More than 10,000 changes</p>\n"
6161
62
-#define looks_like_binary(blob) ((looks_like_utf8((blob))&3) == 0)
62
+/*
63
+** This macro is designed to return non-zero if the specified blob contains
64
+** data that MAY be binary in nature; otherwise, zero will be returned.
65
+*/
66
+#define looks_like_binary(blob) (looks_like_utf8((blob), 0) == 0)
67
+
68
+/*
69
+** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
70
+** to convey status information about the blob content.
71
+*/
72
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
73
+#define LOOK_NUL ((int)0x00000001) /* One or more NUL chars were found. */
74
+#define LOOK_CR ((int)0x00000002) /* One or more CR chars were found. */
75
+#define LOOK_LF ((int)0x00000004) /* One or more LF chars were found. */
76
+#define LOOK_CRLF ((int)0x00000008) /* One or more CR/LF pairs were found. */
77
+#define LOOK_LENGTH ((int)0x00000010) /* An over length line was found. */
78
+#define LOOK_ODD ((int)0x00000020) /* An odd number of bytes was found. */
79
+#define LOOK_INVALID ((int)0x00000040) /* Invalid UTF-8/16 was found. */
6380
#endif /* INTERFACE */
6481
6582
/*
6683
** Maximum length of a line in a text file, in bytes. (2**13 = 8192 bytes)
6784
*/
@@ -188,21 +205,21 @@
188205
** It uses the method described in:
189206
** http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences
190207
** except for the "overlong form" which is not considered
191208
** invalid: Some languages like Java and Tcl use it.
192209
**
193
-** Any invalid byte causes bit 2 of result to be set (result |= 4),
210
+** Any invalid byte causes bit LOOK_INVALID to be set,
194211
** otherwise for valid multibyte utf-8 sequences n, j and z are
195212
** updated so the continuation bytes are not checked again.
196213
*/
197214
#define CHECKUTF8(c) \
198215
if( c<0xC0 || c>=0xF8 ){ \
199
- result |= 4; /* Invalid 1-byte or multibyte UTF-8, continue */ \
216
+ if( pFlags ) *pFlags |= LOOK_INVALID; /* Invalid 1-byte or multibyte UTF-8, continue */ \
200217
}else do{ \
201218
/* Check if all continuation bytes >=0x80 and <0xC0 */ \
202
- if( n<2 || ((z[1]&0xC0)!=0x80) ){ \
203
- result |= 4; /* Invalid continuation byte, continue */ \
219
+ if( n<2 || ((z[0]&0xC0)!=0x80) ){ \
220
+ if( pFlags ) *pFlags |= LOOK_INVALID; /* Invalid continuation byte, continue */ \
204221
break; \
205222
}else{ \
206223
/* prepare for checking remaining continuation bytes */ \
207224
c<<=1; --n; ++j; ++z; \
208225
} \
@@ -211,73 +228,82 @@
211228
/*
212229
** This function attempts to scan each logical line within the blob to
213230
** determine the type of content it appears to contain. Possible return
214231
** values are:
215232
**
216
-** (1) -- The content appears to consist entirely of text, with lines
217
-** delimited by line-feed characters.
233
+** (1) -- The content appears to consist entirely of text; however, the
234
+** encoding may not be UTF-8.
218235
**
219236
** (0) -- The content appears to be binary because it contains embedded
220237
** NUL characters or an extremely long line. Since this function
221238
** does not understand UTF-16, it may falsely consider UTF-16 text
222239
** to be binary.
223240
**
224
-** (-1) -- The content appears to consist entirely of text, with lines
225
-** delimited by carriage-return, line-feed pairs.
226
-**
227
-** (-3, -5) The same as (1, -1); however, the encoding is not UTF-8 or ASCII.
228
-**
229
-** (-4) -- The same as 0, but the determination is based on the fact that
230
-** the blob might be text (any encoding) but it has a line length
231
-** bigger than the diff logic in fossil can handle.
232
-**
233241
************************************ WARNING **********************************
234242
**
235
-** This function does not validate any code points.
243
+** This function does not validate that the blob content is properly formed
244
+** UTF-8. It assumes that all code points are the same size. It does not
245
+** validate any code points. It makes no attempt to detect if any [invalid]
246
+** switches between UTF-8 and other encodings occur.
236247
**
237248
** The only code points that this function cares about are the NUL character,
238249
** carriage-return, and line-feed.
250
+**
251
+** Whether or not this function examines the entire contents of the blob is
252
+** officially unspecified.
239253
**
240254
************************************ WARNING **********************************
241255
*/
242
-int looks_like_utf8(const Blob *pContent){
256
+int looks_like_utf8(const Blob *pContent, int *pFlags){
243257
const unsigned char *z = (unsigned char *) blob_buffer(pContent);
244258
unsigned int n = blob_size(pContent);
245
- unsigned int j;
246259
unsigned char c;
247
- int result = 0; /* Assume UTF-8 text with no CR/NL */
260
+ int j, result = 1; /* Assume UTF-8 text, prove otherwise */
248261
249
- /* Check individual lines.
250
- */
251
- if( n==0 ) return 1; /* Empty file -> text */
252
- c = *z;
262
+ if( pFlags ) *pFlags = LOOK_NONE;
263
+ if( n==0 ) return result; /* Empty file -> text */
264
+ c = *z++;
265
+ if( c==0 ){
266
+ if( pFlags ) *pFlags |= LOOK_NUL;
267
+ result = 0; /* NUL character in a file -> binary */
268
+ }
253269
j = (c!='\n');
254270
if( c&0x80 ){
255271
CHECKUTF8(c)
256272
} else if( c==0 ){
257273
return 0; /* Zero byte in a file -> binary */
258274
}
259275
while( --n>0 ){
260
- c = *++z; ++j;
276
+ c = *z++; ++j;
261277
if( c&0x80 ){
262278
CHECKUTF8(c)
263279
} else if( c==0 ){
264
- return 0; /* Zero byte in a file -> binary */
265
- } else if( c=='\n' ){
266
- if( z[-1]=='\r' ){
267
- result |= 2; /* Contains CR/NL, continue */
280
+ if( pFlags ) *pFlags |= LOOK_NUL;
281
+ result = 0; /* NUL character in a file -> binary */
282
+ }
283
+ if( c=='\n' ){
284
+ int c2 = z[-1];
285
+ if( pFlags ){
286
+ *pFlags |= LOOK_LF;
287
+ if( c2=='\r' ){
288
+ *pFlags |= LOOK_CRLF;
289
+ }
268290
}
269291
if( j>LENGTH_MASK ){
270
- return -4; /* Very long line -> binary */
292
+ if( pFlags ) *pFlags |= LOOK_LENGTH;
293
+ result = 0; /* Very long line -> binary */
271294
}
272295
j = 0;
296
+ }else if( c=='\r' ){
297
+ if( pFlags ) *pFlags |= LOOK_CR;
273298
}
274299
}
275300
if( j>LENGTH_MASK ){
276
- return -4; /* Very long line -> binary */
301
+ if( pFlags ) *pFlags |= LOOK_LENGTH;
302
+ result = 0; /* Very long line -> binary */
277303
}
278
- return 1-result; /* No problems seen -> not binary */
304
+ return result; /* No problems seen -> not binary */
279305
}
280306
281307
/*
282308
** Define the type needed to represent a Unicode (UTF-16) character.
283309
*/
@@ -309,27 +335,18 @@
309335
/*
310336
** This function attempts to scan each logical line within the blob to
311337
** determine the type of content it appears to contain. Possible return
312338
** values are:
313339
**
314
-** (1) -- The content appears to consist entirely of text, with lines
315
-** delimited by line-feed characters; however, the encoding may
316
-** not be UTF-16.
340
+** (1) -- The content appears to consist entirely of text; however, the
341
+** encoding may not be UTF-16.
317342
**
318343
** (0) -- The content appears to be binary because it contains embedded
319344
** NUL characters or an extremely long line. Since this function
320345
** does not understand UTF-8, it may falsely consider UTF-8 text
321346
** to be binary.
322347
**
323
-** (-1) -- The content appears to consist entirely of text, with lines
324
-** delimited by carriage-return, line-feed pairs; however, the
325
-** encoding may not be UTF-16.
326
-**
327
-** (-4) -- The same as 0, but the determination is based on the fact that
328
-** the blob might be text (any encoding) but it has a line length
329
-** bigger than the diff logic in fossil can handle.
330
-**
331348
************************************ WARNING **********************************
332349
**
333350
** This function does not validate that the blob content is properly formed
334351
** UTF-16. It assumes that all code points are the same size. It does not
335352
** validate any code points. It makes no attempt to detect if any [invalid]
@@ -336,41 +353,61 @@
336353
** switches between the UTF-16be and UTF-16le encodings occur.
337354
**
338355
** The only code points that this function cares about are the NUL character,
339356
** carriage-return, and line-feed.
340357
**
341
-************************************ WARNING **********************************
342
-*/
343
-int looks_like_utf16(const Blob *pContent){
344
- const WCHAR_T *z = (WCHAR_T *)blob_buffer(pContent);
345
- unsigned int n = blob_size(pContent);
346
- int j, c;
347
- int result = 1; /* Assume UTF-16 text with no CR/NL */
348
-
349
- /* Check individual lines.
350
- */
351
- if( n==0 ) return result; /* Empty file -> text */
352
- if( n%2 ) return 0; /* Odd number of bytes -> binary (or UTF-8) */
353
- c = *z;
354
- if( c==0 ) return 0; /* NUL character in a file -> binary */
355
- j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF));
356
- while( (n-=2)>0 ){
357
- c = *++z; ++j;
358
- if( c==0 ) return 0; /* NUL character in a file -> binary */
359
- if( c==UTF16BE_LF || c==UTF16LE_LF ){
360
- int c2 = z[-1];
361
- if( c2==UTF16BE_CR || c2==UTF16LE_CR ){
362
- result = -1; /* Contains CR/NL, continue */
363
- }
364
- if( j>UTF16_LENGTH_MASK ){
365
- return -4; /* Very long line -> binary */
366
- }
367
- j = 0;
368
- }
369
- }
370
- if( j>UTF16_LENGTH_MASK ){
371
- return -4; /* Very long line -> binary */
358
+** Whether or not this function examines the entire contents of the blob is
359
+** officially unspecified.
360
+**
361
+************************************ WARNING **********************************
362
+*/
363
+int looks_like_utf16(const Blob *pContent, int *pFlags){
364
+ const WCHAR_T *z = (WCHAR_T *)blob_buffer(pContent);
365
+ unsigned int n = blob_size(pContent);
366
+ int j, c, result = 1; /* Assume UTF-16 text, prove otherwise */
367
+
368
+ if( pFlags ) *pFlags = LOOK_NONE;
369
+ if( n==0 ) return result; /* Empty file -> text */
370
+ if( n%sizeof(WCHAR_T) ){
371
+ if( pFlags ) *pFlags |= LOOK_ODD;
372
+ result = 0; /* Odd number of bytes -> binary (UTF-8?) */
373
+ if ( n<sizeof(WCHAR_T) ) return result; /* One byte -> binary (UTF-8?) */
374
+ }
375
+ c = *z;
376
+ if( c==0 ){
377
+ if( pFlags ) *pFlags |= LOOK_NUL;
378
+ result = 0; /* NUL character in a file -> binary */
379
+ }
380
+ j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF));
381
+ while( 1 ){
382
+ if ( n<sizeof(WCHAR_T) ) break;
383
+ n -= sizeof(WCHAR_T);
384
+ c = *++z; ++j;
385
+ if( c==0 ){
386
+ if( pFlags ) *pFlags |= LOOK_NUL;
387
+ result = 0; /* NUL character in a file -> binary */
388
+ }
389
+ if( c==UTF16BE_LF || c==UTF16LE_LF ){
390
+ int c2 = z[-1];
391
+ if( pFlags ){
392
+ *pFlags |= LOOK_LF;
393
+ if( c2==UTF16BE_CR || c2==UTF16LE_CR ){
394
+ *pFlags |= LOOK_CRLF;
395
+ }
396
+ }
397
+ if( j>UTF16_LENGTH_MASK ){
398
+ if( pFlags ) *pFlags |= LOOK_LENGTH;
399
+ result = 0; /* Very long line -> binary */
400
+ }
401
+ j = 0;
402
+ }else if( c==UTF16BE_CR || c==UTF16LE_CR ){
403
+ if( pFlags ) *pFlags |= LOOK_CR;
404
+ }
405
+ }
406
+ if( j>UTF16_LENGTH_MASK ){
407
+ if( pFlags ) *pFlags |= LOOK_LENGTH;
408
+ result = 0; /* Very long line -> binary */
372409
}
373410
return result; /* No problems seen -> not binary */
374411
}
375412
376413
/*
@@ -410,23 +447,24 @@
410447
const Blob *pContent, /* IN: Blob content to perform BOM detection on. */
411448
int *pnByte, /* OUT: The number of bytes used for the BOM. */
412449
int *pbReverse /* OUT: Non-zero for BOM in reverse byte-order. */
413450
){
414451
const unsigned short *z = (unsigned short *)blob_buffer(pContent);
452
+ int bomSize = sizeof(unsigned short);
415453
int size = blob_size(pContent);
416454
417
- if( (size<2) || (size%2)
418
- || (size>=4 && z[1]==0) ) return 0;
419
- if( z[0] == 0xfffe ){
455
+ if( size<bomSize ) return 0; /* No: cannot read BOM. */
456
+ if( size>=(2*bomSize) && z[1]==0 ) return 0; /* No: possible UTF-32. */
457
+ if( z[0]==0xfffe ){
420458
if( pbReverse ) *pbReverse = 1;
421
- }else if( z[0] == 0xfeff ){
459
+ }else if( z[0]==0xfeff ){
422460
if( pbReverse ) *pbReverse = 0;
423461
}else{
424
- return 0;
462
+ return 0; /* No: UTF-16 byte-order-mark not found. */
425463
}
426
- if( pnByte ) *pnByte = 2;
427
- return 1;
464
+ if( pnByte ) *pnByte = bomSize;
465
+ return 1; /* Yes. */
428466
}
429467
430468
/*
431469
** Return true if two DLine elements are identical.
432470
*/
@@ -892,21 +930,33 @@
892930
/*
893931
** Simplify iStart and iStart2:
894932
**
895933
** * If iStart is a null-change then move iStart2 into iStart
896934
** * Make sure any null-changes are in canonoical form.
935
+** * Make sure all changes are at character boundaries for
936
+** multi-byte characters.
897937
*/
898
-static void sbsSimplifyLine(SbsLine *p){
899
- if( p->iStart2==p->iEnd2 ) p->iStart2 = p->iEnd2 = 0;
938
+static void sbsSimplifyLine(SbsLine *p, const char *z){
939
+ if( p->iStart2==p->iEnd2 ){
940
+ p->iStart2 = p->iEnd2 = 0;
941
+ }else if( p->iStart2 ){
942
+ while( p->iStart2>0 && (z[p->iStart2]&0xc0)==0x80 ) p->iStart2--;
943
+ while( (z[p->iEnd2]&0xc0)==0x80 ) p->iEnd2++;
944
+ }
900945
if( p->iStart==p->iEnd ){
901946
p->iStart = p->iStart2;
902947
p->iEnd = p->iEnd2;
903948
p->zStart = p->zStart2;
904949
p->iStart2 = 0;
905950
p->iEnd2 = 0;
906951
}
907
- if( p->iStart==p->iEnd ) p->iStart = p->iEnd = -1;
952
+ if( p->iStart==p->iEnd ){
953
+ p->iStart = p->iEnd = -1;
954
+ }else if( p->iStart>0 ){
955
+ while( p->iStart>0 && (z[p->iStart]&0xc0)==0x80 ) p->iStart--;
956
+ while( (z[p->iEnd]&0xc0)==0x80 ) p->iEnd++;
957
+ }
908958
}
909959
910960
/*
911961
** Write out lines that have been edited. Adjust the highlight to cover
912962
** only those parts of the line that actually changed.
@@ -918,10 +968,11 @@
918968
DLine *pRight, /* Right line of the change */
919969
int lnRight /* Line number of the right line */
920970
){
921971
int nLeft; /* Length of left line in bytes */
922972
int nRight; /* Length of right line in bytes */
973
+ int nShort; /* Shortest of left and right */
923974
int nPrefix; /* Length of common prefix */
924975
int nSuffix; /* Length of common suffix */
925976
const char *zLeft; /* Text of the left line */
926977
const char *zRight; /* Text of the right line */
927978
int nLeftDiff; /* nLeft - nPrefix - nSuffix */
@@ -933,25 +984,31 @@
933984
934985
nLeft = pLeft->h & LENGTH_MASK;
935986
zLeft = pLeft->z;
936987
nRight = pRight->h & LENGTH_MASK;
937988
zRight = pRight->z;
989
+ nShort = nLeft<nRight ? nLeft : nRight;
938990
939991
nPrefix = 0;
940
- while( nPrefix<nLeft && nPrefix<nRight && zLeft[nPrefix]==zRight[nPrefix] ){
992
+ while( nPrefix<nShort && zLeft[nPrefix]==zRight[nPrefix] ){
941993
nPrefix++;
942994
}
995
+ if( nPrefix<nShort ){
996
+ while( nPrefix>0 && (zLeft[nPrefix]&0xc0)==0x80 ) nPrefix--;
997
+ }
943998
nSuffix = 0;
944
- if( nPrefix<nLeft && nPrefix<nRight ){
945
- while( nSuffix<nLeft && nSuffix<nRight
946
- && zLeft[nLeft-nSuffix-1]==zRight[nRight-nSuffix-1] ){
999
+ if( nPrefix<nShort ){
1000
+ while( nSuffix<nShort && zLeft[nLeft-nSuffix-1]==zRight[nRight-nSuffix-1] ){
9471001
nSuffix++;
9481002
}
1003
+ if( nSuffix<nShort ){
1004
+ while( nSuffix>0 && (zLeft[nLeft-nSuffix]&0xc0)==0x80 ) nSuffix--;
1005
+ }
9491006
if( nSuffix==nLeft || nSuffix==nRight ) nPrefix = 0;
9501007
}
951
- if( nPrefix+nSuffix > nLeft ) nPrefix = nLeft - nSuffix;
952
- if( nPrefix+nSuffix > nRight ) nPrefix = nRight - nSuffix;
1008
+ if( nPrefix+nSuffix > nShort ) nPrefix = nShort - nSuffix;
1009
+
9531010
9541011
/* A single chunk of text inserted on the right */
9551012
if( nPrefix+nSuffix==nLeft ){
9561013
sbsWriteLineno(p, lnLeft);
9571014
p->iStart2 = p->iEnd2 = 0;
@@ -1007,11 +1064,11 @@
10071064
p->zStart = zClassChng;
10081065
}
10091066
p->iStart2 = nPrefix + aLCS[1];
10101067
p->iEnd2 = nLeft - nSuffix;
10111068
p->zStart2 = aLCS[3]==nRightDiff ? zClassRm : zClassChng;
1012
- sbsSimplifyLine(p);
1069
+ sbsSimplifyLine(p, zLeft+nPrefix);
10131070
sbsWriteText(p, pLeft, SBS_PAD);
10141071
sbsWrite(p, " | ", 3);
10151072
sbsWriteLineno(p, lnRight);
10161073
p->iStart = nPrefix;
10171074
p->iEnd = nPrefix + aLCS[2];
@@ -1022,11 +1079,11 @@
10221079
p->zStart = zClassChng;
10231080
}
10241081
p->iStart2 = nPrefix + aLCS[3];
10251082
p->iEnd2 = nRight - nSuffix;
10261083
p->zStart2 = aLCS[1]==nLeftDiff ? zClassAdd : zClassChng;
1027
- sbsSimplifyLine(p);
1084
+ sbsSimplifyLine(p, zRight+nPrefix);
10281085
sbsWriteText(p, pRight, SBS_NEWLINE);
10291086
return;
10301087
}
10311088
10321089
/* If all else fails, show a single big change between left and right */
@@ -1419,11 +1476,11 @@
14191476
/* Delete one line from the left */
14201477
s.n = 0;
14211478
sbsWriteLineno(&s, a);
14221479
s.iStart = 0;
14231480
s.zStart = "<span class=\"diffrm\">";
1424
- s.iEnd = s.width;
1481
+ s.iEnd = LENGTH(&A[a]);
14251482
sbsWriteText(&s, &A[a], SBS_PAD);
14261483
if( s.escHtml ){
14271484
sbsWrite(&s, " &lt;\n", 6);
14281485
}else{
14291486
sbsWrite(&s, " <\n", 3);
@@ -1452,11 +1509,11 @@
14521509
sbsWrite(&s, " > ", 3);
14531510
}
14541511
sbsWriteLineno(&s, b);
14551512
s.iStart = 0;
14561513
s.zStart = "<span class=\"diffadd\">";
1457
- s.iEnd = s.width;
1514
+ s.iEnd = LENGTH(&B[b]);
14581515
sbsWriteText(&s, &B[b], SBS_NEWLINE);
14591516
blob_append(pOut, s.zLine, s.n);
14601517
assert( mb>0 );
14611518
mb--;
14621519
b++;
@@ -1464,17 +1521,17 @@
14641521
/* Delete from the left and insert on the right */
14651522
s.n = 0;
14661523
sbsWriteLineno(&s, a);
14671524
s.iStart = 0;
14681525
s.zStart = "<span class=\"diffrm\">";
1469
- s.iEnd = s.width;
1526
+ s.iEnd = LENGTH(&A[a]);
14701527
sbsWriteText(&s, &A[a], SBS_PAD);
14711528
sbsWrite(&s, " | ", 3);
14721529
sbsWriteLineno(&s, b);
14731530
s.iStart = 0;
14741531
s.zStart = "<span class=\"diffadd\">";
1475
- s.iEnd = s.width;
1532
+ s.iEnd = LENGTH(&B[b]);
14761533
sbsWriteText(&s, &B[b], SBS_NEWLINE);
14771534
blob_append(pOut, s.zLine, s.n);
14781535
ma--;
14791536
mb--;
14801537
a++;
@@ -2446,5 +2503,38 @@
24462503
for(i=0; i<ann.nOrig; i++){
24472504
fossil_print("%s: %.*s\n",
24482505
ann.aOrig[i].zSrc, ann.aOrig[i].n, ann.aOrig[i].z);
24492506
}
24502507
}
2508
+
2509
+/*
2510
+** COMMAND: test-looks-like-utf
2511
+**
2512
+** Usage: %fossil test-looks-like-utf FILENAME
2513
+**
2514
+** FILENAME is the name of a file to check for textual content in the UTF-8
2515
+** and/or UTF-16 encodings.
2516
+*/
2517
+void looks_like_utf_test_cmd(void){
2518
+ Blob blob; /* the contents of the specified file */
2519
+ int eType; /* return value of looks_like_utf8/utf16() */
2520
+ int fUtf8; /* return value of starts_with_utf8_bom() */
2521
+ int fUtf16; /* return value of starts_with_utf16_bom() */
2522
+ int lookFlags; /* output flags from looks_like_utf8/utf16() */
2523
+ if( g.argc<3 ) usage("FILENAME");
2524
+ blob_read_from_file(&blob, g.argv[2]);
2525
+ fUtf8 = starts_with_utf8_bom(&blob, 0);
2526
+ fUtf16 = starts_with_utf16_bom(&blob, 0, 0);
2527
+ eType = fUtf16 ? looks_like_utf16(&blob, &lookFlags) :
2528
+ looks_like_utf8(&blob, &lookFlags);
2529
+ fossil_print("File \"%s\" has %d bytes.\n",g.argv[2],blob_size(&blob));
2530
+ fossil_print("Starts with UTF-8 BOM: %s\n",fUtf8?"yes":"no");
2531
+ fossil_print("Starts with UTF-16 BOM: %s\n",fUtf16?"yes":"no");
2532
+ fossil_print("Looks like UTF-%s: %s\n",fUtf16?"16":"8",eType?"yes":"no");
2533
+ fossil_print("Has flag LOOK_NUL: %s\n",(lookFlags&LOOK_NUL)?"yes":"no");
2534
+ fossil_print("Has flag LOOK_CR: %s\n",(lookFlags&LOOK_CR)?"yes":"no");
2535
+ fossil_print("Has flag LOOK_LF: %s\n",(lookFlags&LOOK_LF)?"yes":"no");
2536
+ fossil_print("Has flag LOOK_CRLF: %s\n",(lookFlags&LOOK_CRLF)?"yes":"no");
2537
+ fossil_print("Has flag LOOK_LENGTH: %s\n",(lookFlags&LOOK_LENGTH)?"yes":"no");
2538
+ fossil_print("Has flag LOOK_ODD: %s\n",(lookFlags&LOOK_ODD)?"yes":"no");
2539
+ blob_reset(&blob);
2540
+}
24512541
--- src/diff.c
+++ src/diff.c
@@ -57,11 +57,28 @@
57 "more than 10,000 changes\n"
58
59 #define DIFF_TOO_MANY_CHANGES_HTML \
60 "<p class='generalError'>More than 10,000 changes</p>\n"
61
62 #define looks_like_binary(blob) ((looks_like_utf8((blob))&3) == 0)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63 #endif /* INTERFACE */
64
65 /*
66 ** Maximum length of a line in a text file, in bytes. (2**13 = 8192 bytes)
67 */
@@ -188,21 +205,21 @@
188 ** It uses the method described in:
189 ** http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences
190 ** except for the "overlong form" which is not considered
191 ** invalid: Some languages like Java and Tcl use it.
192 **
193 ** Any invalid byte causes bit 2 of result to be set (result |= 4),
194 ** otherwise for valid multibyte utf-8 sequences n, j and z are
195 ** updated so the continuation bytes are not checked again.
196 */
197 #define CHECKUTF8(c) \
198 if( c<0xC0 || c>=0xF8 ){ \
199 result |= 4; /* Invalid 1-byte or multibyte UTF-8, continue */ \
200 }else do{ \
201 /* Check if all continuation bytes >=0x80 and <0xC0 */ \
202 if( n<2 || ((z[1]&0xC0)!=0x80) ){ \
203 result |= 4; /* Invalid continuation byte, continue */ \
204 break; \
205 }else{ \
206 /* prepare for checking remaining continuation bytes */ \
207 c<<=1; --n; ++j; ++z; \
208 } \
@@ -211,73 +228,82 @@
211 /*
212 ** This function attempts to scan each logical line within the blob to
213 ** determine the type of content it appears to contain. Possible return
214 ** values are:
215 **
216 ** (1) -- The content appears to consist entirely of text, with lines
217 ** delimited by line-feed characters.
218 **
219 ** (0) -- The content appears to be binary because it contains embedded
220 ** NUL characters or an extremely long line. Since this function
221 ** does not understand UTF-16, it may falsely consider UTF-16 text
222 ** to be binary.
223 **
224 ** (-1) -- The content appears to consist entirely of text, with lines
225 ** delimited by carriage-return, line-feed pairs.
226 **
227 ** (-3, -5) The same as (1, -1); however, the encoding is not UTF-8 or ASCII.
228 **
229 ** (-4) -- The same as 0, but the determination is based on the fact that
230 ** the blob might be text (any encoding) but it has a line length
231 ** bigger than the diff logic in fossil can handle.
232 **
233 ************************************ WARNING **********************************
234 **
235 ** This function does not validate any code points.
 
 
 
236 **
237 ** The only code points that this function cares about are the NUL character,
238 ** carriage-return, and line-feed.
 
 
 
239 **
240 ************************************ WARNING **********************************
241 */
242 int looks_like_utf8(const Blob *pContent){
243 const unsigned char *z = (unsigned char *) blob_buffer(pContent);
244 unsigned int n = blob_size(pContent);
245 unsigned int j;
246 unsigned char c;
247 int result = 0; /* Assume UTF-8 text with no CR/NL */
248
249 /* Check individual lines.
250 */
251 if( n==0 ) return 1; /* Empty file -> text */
252 c = *z;
 
 
 
253 j = (c!='\n');
254 if( c&0x80 ){
255 CHECKUTF8(c)
256 } else if( c==0 ){
257 return 0; /* Zero byte in a file -> binary */
258 }
259 while( --n>0 ){
260 c = *++z; ++j;
261 if( c&0x80 ){
262 CHECKUTF8(c)
263 } else if( c==0 ){
264 return 0; /* Zero byte in a file -> binary */
265 } else if( c=='\n' ){
266 if( z[-1]=='\r' ){
267 result |= 2; /* Contains CR/NL, continue */
 
 
 
 
 
 
268 }
269 if( j>LENGTH_MASK ){
270 return -4; /* Very long line -> binary */
 
271 }
272 j = 0;
 
 
273 }
274 }
275 if( j>LENGTH_MASK ){
276 return -4; /* Very long line -> binary */
 
277 }
278 return 1-result; /* No problems seen -> not binary */
279 }
280
281 /*
282 ** Define the type needed to represent a Unicode (UTF-16) character.
283 */
@@ -309,27 +335,18 @@
309 /*
310 ** This function attempts to scan each logical line within the blob to
311 ** determine the type of content it appears to contain. Possible return
312 ** values are:
313 **
314 ** (1) -- The content appears to consist entirely of text, with lines
315 ** delimited by line-feed characters; however, the encoding may
316 ** not be UTF-16.
317 **
318 ** (0) -- The content appears to be binary because it contains embedded
319 ** NUL characters or an extremely long line. Since this function
320 ** does not understand UTF-8, it may falsely consider UTF-8 text
321 ** to be binary.
322 **
323 ** (-1) -- The content appears to consist entirely of text, with lines
324 ** delimited by carriage-return, line-feed pairs; however, the
325 ** encoding may not be UTF-16.
326 **
327 ** (-4) -- The same as 0, but the determination is based on the fact that
328 ** the blob might be text (any encoding) but it has a line length
329 ** bigger than the diff logic in fossil can handle.
330 **
331 ************************************ WARNING **********************************
332 **
333 ** This function does not validate that the blob content is properly formed
334 ** UTF-16. It assumes that all code points are the same size. It does not
335 ** validate any code points. It makes no attempt to detect if any [invalid]
@@ -336,41 +353,61 @@
336 ** switches between the UTF-16be and UTF-16le encodings occur.
337 **
338 ** The only code points that this function cares about are the NUL character,
339 ** carriage-return, and line-feed.
340 **
341 ************************************ WARNING **********************************
342 */
343 int looks_like_utf16(const Blob *pContent){
344 const WCHAR_T *z = (WCHAR_T *)blob_buffer(pContent);
345 unsigned int n = blob_size(pContent);
346 int j, c;
347 int result = 1; /* Assume UTF-16 text with no CR/NL */
348
349 /* Check individual lines.
350 */
351 if( n==0 ) return result; /* Empty file -> text */
352 if( n%2 ) return 0; /* Odd number of bytes -> binary (or UTF-8) */
353 c = *z;
354 if( c==0 ) return 0; /* NUL character in a file -> binary */
355 j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF));
356 while( (n-=2)>0 ){
357 c = *++z; ++j;
358 if( c==0 ) return 0; /* NUL character in a file -> binary */
359 if( c==UTF16BE_LF || c==UTF16LE_LF ){
360 int c2 = z[-1];
361 if( c2==UTF16BE_CR || c2==UTF16LE_CR ){
362 result = -1; /* Contains CR/NL, continue */
363 }
364 if( j>UTF16_LENGTH_MASK ){
365 return -4; /* Very long line -> binary */
366 }
367 j = 0;
368 }
369 }
370 if( j>UTF16_LENGTH_MASK ){
371 return -4; /* Very long line -> binary */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
372 }
373 return result; /* No problems seen -> not binary */
374 }
375
376 /*
@@ -410,23 +447,24 @@
410 const Blob *pContent, /* IN: Blob content to perform BOM detection on. */
411 int *pnByte, /* OUT: The number of bytes used for the BOM. */
412 int *pbReverse /* OUT: Non-zero for BOM in reverse byte-order. */
413 ){
414 const unsigned short *z = (unsigned short *)blob_buffer(pContent);
 
415 int size = blob_size(pContent);
416
417 if( (size<2) || (size%2)
418 || (size>=4 && z[1]==0) ) return 0;
419 if( z[0] == 0xfffe ){
420 if( pbReverse ) *pbReverse = 1;
421 }else if( z[0] == 0xfeff ){
422 if( pbReverse ) *pbReverse = 0;
423 }else{
424 return 0;
425 }
426 if( pnByte ) *pnByte = 2;
427 return 1;
428 }
429
430 /*
431 ** Return true if two DLine elements are identical.
432 */
@@ -892,21 +930,33 @@
892 /*
893 ** Simplify iStart and iStart2:
894 **
895 ** * If iStart is a null-change then move iStart2 into iStart
896 ** * Make sure any null-changes are in canonoical form.
 
 
897 */
898 static void sbsSimplifyLine(SbsLine *p){
899 if( p->iStart2==p->iEnd2 ) p->iStart2 = p->iEnd2 = 0;
 
 
 
 
 
900 if( p->iStart==p->iEnd ){
901 p->iStart = p->iStart2;
902 p->iEnd = p->iEnd2;
903 p->zStart = p->zStart2;
904 p->iStart2 = 0;
905 p->iEnd2 = 0;
906 }
907 if( p->iStart==p->iEnd ) p->iStart = p->iEnd = -1;
 
 
 
 
 
908 }
909
910 /*
911 ** Write out lines that have been edited. Adjust the highlight to cover
912 ** only those parts of the line that actually changed.
@@ -918,10 +968,11 @@
918 DLine *pRight, /* Right line of the change */
919 int lnRight /* Line number of the right line */
920 ){
921 int nLeft; /* Length of left line in bytes */
922 int nRight; /* Length of right line in bytes */
 
923 int nPrefix; /* Length of common prefix */
924 int nSuffix; /* Length of common suffix */
925 const char *zLeft; /* Text of the left line */
926 const char *zRight; /* Text of the right line */
927 int nLeftDiff; /* nLeft - nPrefix - nSuffix */
@@ -933,25 +984,31 @@
933
934 nLeft = pLeft->h & LENGTH_MASK;
935 zLeft = pLeft->z;
936 nRight = pRight->h & LENGTH_MASK;
937 zRight = pRight->z;
 
938
939 nPrefix = 0;
940 while( nPrefix<nLeft && nPrefix<nRight && zLeft[nPrefix]==zRight[nPrefix] ){
941 nPrefix++;
942 }
 
 
 
943 nSuffix = 0;
944 if( nPrefix<nLeft && nPrefix<nRight ){
945 while( nSuffix<nLeft && nSuffix<nRight
946 && zLeft[nLeft-nSuffix-1]==zRight[nRight-nSuffix-1] ){
947 nSuffix++;
948 }
 
 
 
949 if( nSuffix==nLeft || nSuffix==nRight ) nPrefix = 0;
950 }
951 if( nPrefix+nSuffix > nLeft ) nPrefix = nLeft - nSuffix;
952 if( nPrefix+nSuffix > nRight ) nPrefix = nRight - nSuffix;
953
954 /* A single chunk of text inserted on the right */
955 if( nPrefix+nSuffix==nLeft ){
956 sbsWriteLineno(p, lnLeft);
957 p->iStart2 = p->iEnd2 = 0;
@@ -1007,11 +1064,11 @@
1007 p->zStart = zClassChng;
1008 }
1009 p->iStart2 = nPrefix + aLCS[1];
1010 p->iEnd2 = nLeft - nSuffix;
1011 p->zStart2 = aLCS[3]==nRightDiff ? zClassRm : zClassChng;
1012 sbsSimplifyLine(p);
1013 sbsWriteText(p, pLeft, SBS_PAD);
1014 sbsWrite(p, " | ", 3);
1015 sbsWriteLineno(p, lnRight);
1016 p->iStart = nPrefix;
1017 p->iEnd = nPrefix + aLCS[2];
@@ -1022,11 +1079,11 @@
1022 p->zStart = zClassChng;
1023 }
1024 p->iStart2 = nPrefix + aLCS[3];
1025 p->iEnd2 = nRight - nSuffix;
1026 p->zStart2 = aLCS[1]==nLeftDiff ? zClassAdd : zClassChng;
1027 sbsSimplifyLine(p);
1028 sbsWriteText(p, pRight, SBS_NEWLINE);
1029 return;
1030 }
1031
1032 /* If all else fails, show a single big change between left and right */
@@ -1419,11 +1476,11 @@
1419 /* Delete one line from the left */
1420 s.n = 0;
1421 sbsWriteLineno(&s, a);
1422 s.iStart = 0;
1423 s.zStart = "<span class=\"diffrm\">";
1424 s.iEnd = s.width;
1425 sbsWriteText(&s, &A[a], SBS_PAD);
1426 if( s.escHtml ){
1427 sbsWrite(&s, " &lt;\n", 6);
1428 }else{
1429 sbsWrite(&s, " <\n", 3);
@@ -1452,11 +1509,11 @@
1452 sbsWrite(&s, " > ", 3);
1453 }
1454 sbsWriteLineno(&s, b);
1455 s.iStart = 0;
1456 s.zStart = "<span class=\"diffadd\">";
1457 s.iEnd = s.width;
1458 sbsWriteText(&s, &B[b], SBS_NEWLINE);
1459 blob_append(pOut, s.zLine, s.n);
1460 assert( mb>0 );
1461 mb--;
1462 b++;
@@ -1464,17 +1521,17 @@
1464 /* Delete from the left and insert on the right */
1465 s.n = 0;
1466 sbsWriteLineno(&s, a);
1467 s.iStart = 0;
1468 s.zStart = "<span class=\"diffrm\">";
1469 s.iEnd = s.width;
1470 sbsWriteText(&s, &A[a], SBS_PAD);
1471 sbsWrite(&s, " | ", 3);
1472 sbsWriteLineno(&s, b);
1473 s.iStart = 0;
1474 s.zStart = "<span class=\"diffadd\">";
1475 s.iEnd = s.width;
1476 sbsWriteText(&s, &B[b], SBS_NEWLINE);
1477 blob_append(pOut, s.zLine, s.n);
1478 ma--;
1479 mb--;
1480 a++;
@@ -2446,5 +2503,38 @@
2446 for(i=0; i<ann.nOrig; i++){
2447 fossil_print("%s: %.*s\n",
2448 ann.aOrig[i].zSrc, ann.aOrig[i].n, ann.aOrig[i].z);
2449 }
2450 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2451
--- src/diff.c
+++ src/diff.c
@@ -57,11 +57,28 @@
57 "more than 10,000 changes\n"
58
59 #define DIFF_TOO_MANY_CHANGES_HTML \
60 "<p class='generalError'>More than 10,000 changes</p>\n"
61
62 /*
63 ** This macro is designed to return non-zero if the specified blob contains
64 ** data that MAY be binary in nature; otherwise, zero will be returned.
65 */
66 #define looks_like_binary(blob) (looks_like_utf8((blob), 0) == 0)
67
68 /*
69 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
70 ** to convey status information about the blob content.
71 */
72 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
73 #define LOOK_NUL ((int)0x00000001) /* One or more NUL chars were found. */
74 #define LOOK_CR ((int)0x00000002) /* One or more CR chars were found. */
75 #define LOOK_LF ((int)0x00000004) /* One or more LF chars were found. */
76 #define LOOK_CRLF ((int)0x00000008) /* One or more CR/LF pairs were found. */
77 #define LOOK_LENGTH ((int)0x00000010) /* An over length line was found. */
78 #define LOOK_ODD ((int)0x00000020) /* An odd number of bytes was found. */
79 #define LOOK_INVALID ((int)0x00000040) /* Invalid UTF-8/16 was found. */
80 #endif /* INTERFACE */
81
82 /*
83 ** Maximum length of a line in a text file, in bytes. (2**13 = 8192 bytes)
84 */
@@ -188,21 +205,21 @@
205 ** It uses the method described in:
206 ** http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences
207 ** except for the "overlong form" which is not considered
208 ** invalid: Some languages like Java and Tcl use it.
209 **
210 ** Any invalid byte causes bit LOOK_INVALID to be set,
211 ** otherwise for valid multibyte utf-8 sequences n, j and z are
212 ** updated so the continuation bytes are not checked again.
213 */
214 #define CHECKUTF8(c) \
215 if( c<0xC0 || c>=0xF8 ){ \
216 if( pFlags ) *pFlags |= LOOK_INVALID; /* Invalid 1-byte or multibyte UTF-8, continue */ \
217 }else do{ \
218 /* Check if all continuation bytes >=0x80 and <0xC0 */ \
219 if( n<2 || ((z[0]&0xC0)!=0x80) ){ \
220 if( pFlags ) *pFlags |= LOOK_INVALID; /* Invalid continuation byte, continue */ \
221 break; \
222 }else{ \
223 /* prepare for checking remaining continuation bytes */ \
224 c<<=1; --n; ++j; ++z; \
225 } \
@@ -211,73 +228,82 @@
228 /*
229 ** This function attempts to scan each logical line within the blob to
230 ** determine the type of content it appears to contain. Possible return
231 ** values are:
232 **
233 ** (1) -- The content appears to consist entirely of text; however, the
234 ** encoding may not be UTF-8.
235 **
236 ** (0) -- The content appears to be binary because it contains embedded
237 ** NUL characters or an extremely long line. Since this function
238 ** does not understand UTF-16, it may falsely consider UTF-16 text
239 ** to be binary.
240 **
 
 
 
 
 
 
 
 
 
241 ************************************ WARNING **********************************
242 **
243 ** This function does not validate that the blob content is properly formed
244 ** UTF-8. It assumes that all code points are the same size. It does not
245 ** validate any code points. It makes no attempt to detect if any [invalid]
246 ** switches between UTF-8 and other encodings occur.
247 **
248 ** The only code points that this function cares about are the NUL character,
249 ** carriage-return, and line-feed.
250 **
251 ** Whether or not this function examines the entire contents of the blob is
252 ** officially unspecified.
253 **
254 ************************************ WARNING **********************************
255 */
256 int looks_like_utf8(const Blob *pContent, int *pFlags){
257 const unsigned char *z = (unsigned char *) blob_buffer(pContent);
258 unsigned int n = blob_size(pContent);
 
259 unsigned char c;
260 int j, result = 1; /* Assume UTF-8 text, prove otherwise */
261
262 if( pFlags ) *pFlags = LOOK_NONE;
263 if( n==0 ) return result; /* Empty file -> text */
264 c = *z++;
265 if( c==0 ){
266 if( pFlags ) *pFlags |= LOOK_NUL;
267 result = 0; /* NUL character in a file -> binary */
268 }
269 j = (c!='\n');
270 if( c&0x80 ){
271 CHECKUTF8(c)
272 } else if( c==0 ){
273 return 0; /* Zero byte in a file -> binary */
274 }
275 while( --n>0 ){
276 c = *z++; ++j;
277 if( c&0x80 ){
278 CHECKUTF8(c)
279 } else if( c==0 ){
280 if( pFlags ) *pFlags |= LOOK_NUL;
281 result = 0; /* NUL character in a file -> binary */
282 }
283 if( c=='\n' ){
284 int c2 = z[-1];
285 if( pFlags ){
286 *pFlags |= LOOK_LF;
287 if( c2=='\r' ){
288 *pFlags |= LOOK_CRLF;
289 }
290 }
291 if( j>LENGTH_MASK ){
292 if( pFlags ) *pFlags |= LOOK_LENGTH;
293 result = 0; /* Very long line -> binary */
294 }
295 j = 0;
296 }else if( c=='\r' ){
297 if( pFlags ) *pFlags |= LOOK_CR;
298 }
299 }
300 if( j>LENGTH_MASK ){
301 if( pFlags ) *pFlags |= LOOK_LENGTH;
302 result = 0; /* Very long line -> binary */
303 }
304 return result; /* No problems seen -> not binary */
305 }
306
307 /*
308 ** Define the type needed to represent a Unicode (UTF-16) character.
309 */
@@ -309,27 +335,18 @@
335 /*
336 ** This function attempts to scan each logical line within the blob to
337 ** determine the type of content it appears to contain. Possible return
338 ** values are:
339 **
340 ** (1) -- The content appears to consist entirely of text; however, the
341 ** encoding may not be UTF-16.
 
342 **
343 ** (0) -- The content appears to be binary because it contains embedded
344 ** NUL characters or an extremely long line. Since this function
345 ** does not understand UTF-8, it may falsely consider UTF-8 text
346 ** to be binary.
347 **
 
 
 
 
 
 
 
 
348 ************************************ WARNING **********************************
349 **
350 ** This function does not validate that the blob content is properly formed
351 ** UTF-16. It assumes that all code points are the same size. It does not
352 ** validate any code points. It makes no attempt to detect if any [invalid]
@@ -336,41 +353,61 @@
353 ** switches between the UTF-16be and UTF-16le encodings occur.
354 **
355 ** The only code points that this function cares about are the NUL character,
356 ** carriage-return, and line-feed.
357 **
358 ** Whether or not this function examines the entire contents of the blob is
359 ** officially unspecified.
360 **
361 ************************************ WARNING **********************************
362 */
363 int looks_like_utf16(const Blob *pContent, int *pFlags){
364 const WCHAR_T *z = (WCHAR_T *)blob_buffer(pContent);
365 unsigned int n = blob_size(pContent);
366 int j, c, result = 1; /* Assume UTF-16 text, prove otherwise */
367
368 if( pFlags ) *pFlags = LOOK_NONE;
369 if( n==0 ) return result; /* Empty file -> text */
370 if( n%sizeof(WCHAR_T) ){
371 if( pFlags ) *pFlags |= LOOK_ODD;
372 result = 0; /* Odd number of bytes -> binary (UTF-8?) */
373 if ( n<sizeof(WCHAR_T) ) return result; /* One byte -> binary (UTF-8?) */
374 }
375 c = *z;
376 if( c==0 ){
377 if( pFlags ) *pFlags |= LOOK_NUL;
378 result = 0; /* NUL character in a file -> binary */
379 }
380 j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF));
381 while( 1 ){
382 if ( n<sizeof(WCHAR_T) ) break;
383 n -= sizeof(WCHAR_T);
384 c = *++z; ++j;
385 if( c==0 ){
386 if( pFlags ) *pFlags |= LOOK_NUL;
387 result = 0; /* NUL character in a file -> binary */
388 }
389 if( c==UTF16BE_LF || c==UTF16LE_LF ){
390 int c2 = z[-1];
391 if( pFlags ){
392 *pFlags |= LOOK_LF;
393 if( c2==UTF16BE_CR || c2==UTF16LE_CR ){
394 *pFlags |= LOOK_CRLF;
395 }
396 }
397 if( j>UTF16_LENGTH_MASK ){
398 if( pFlags ) *pFlags |= LOOK_LENGTH;
399 result = 0; /* Very long line -> binary */
400 }
401 j = 0;
402 }else if( c==UTF16BE_CR || c==UTF16LE_CR ){
403 if( pFlags ) *pFlags |= LOOK_CR;
404 }
405 }
406 if( j>UTF16_LENGTH_MASK ){
407 if( pFlags ) *pFlags |= LOOK_LENGTH;
408 result = 0; /* Very long line -> binary */
409 }
410 return result; /* No problems seen -> not binary */
411 }
412
413 /*
@@ -410,23 +447,24 @@
447 const Blob *pContent, /* IN: Blob content to perform BOM detection on. */
448 int *pnByte, /* OUT: The number of bytes used for the BOM. */
449 int *pbReverse /* OUT: Non-zero for BOM in reverse byte-order. */
450 ){
451 const unsigned short *z = (unsigned short *)blob_buffer(pContent);
452 int bomSize = sizeof(unsigned short);
453 int size = blob_size(pContent);
454
455 if( size<bomSize ) return 0; /* No: cannot read BOM. */
456 if( size>=(2*bomSize) && z[1]==0 ) return 0; /* No: possible UTF-32. */
457 if( z[0]==0xfffe ){
458 if( pbReverse ) *pbReverse = 1;
459 }else if( z[0]==0xfeff ){
460 if( pbReverse ) *pbReverse = 0;
461 }else{
462 return 0; /* No: UTF-16 byte-order-mark not found. */
463 }
464 if( pnByte ) *pnByte = bomSize;
465 return 1; /* Yes. */
466 }
467
468 /*
469 ** Return true if two DLine elements are identical.
470 */
@@ -892,21 +930,33 @@
930 /*
931 ** Simplify iStart and iStart2:
932 **
933 ** * If iStart is a null-change then move iStart2 into iStart
934 ** * Make sure any null-changes are in canonoical form.
935 ** * Make sure all changes are at character boundaries for
936 ** multi-byte characters.
937 */
938 static void sbsSimplifyLine(SbsLine *p, const char *z){
939 if( p->iStart2==p->iEnd2 ){
940 p->iStart2 = p->iEnd2 = 0;
941 }else if( p->iStart2 ){
942 while( p->iStart2>0 && (z[p->iStart2]&0xc0)==0x80 ) p->iStart2--;
943 while( (z[p->iEnd2]&0xc0)==0x80 ) p->iEnd2++;
944 }
945 if( p->iStart==p->iEnd ){
946 p->iStart = p->iStart2;
947 p->iEnd = p->iEnd2;
948 p->zStart = p->zStart2;
949 p->iStart2 = 0;
950 p->iEnd2 = 0;
951 }
952 if( p->iStart==p->iEnd ){
953 p->iStart = p->iEnd = -1;
954 }else if( p->iStart>0 ){
955 while( p->iStart>0 && (z[p->iStart]&0xc0)==0x80 ) p->iStart--;
956 while( (z[p->iEnd]&0xc0)==0x80 ) p->iEnd++;
957 }
958 }
959
960 /*
961 ** Write out lines that have been edited. Adjust the highlight to cover
962 ** only those parts of the line that actually changed.
@@ -918,10 +968,11 @@
968 DLine *pRight, /* Right line of the change */
969 int lnRight /* Line number of the right line */
970 ){
971 int nLeft; /* Length of left line in bytes */
972 int nRight; /* Length of right line in bytes */
973 int nShort; /* Shortest of left and right */
974 int nPrefix; /* Length of common prefix */
975 int nSuffix; /* Length of common suffix */
976 const char *zLeft; /* Text of the left line */
977 const char *zRight; /* Text of the right line */
978 int nLeftDiff; /* nLeft - nPrefix - nSuffix */
@@ -933,25 +984,31 @@
984
985 nLeft = pLeft->h & LENGTH_MASK;
986 zLeft = pLeft->z;
987 nRight = pRight->h & LENGTH_MASK;
988 zRight = pRight->z;
989 nShort = nLeft<nRight ? nLeft : nRight;
990
991 nPrefix = 0;
992 while( nPrefix<nShort && zLeft[nPrefix]==zRight[nPrefix] ){
993 nPrefix++;
994 }
995 if( nPrefix<nShort ){
996 while( nPrefix>0 && (zLeft[nPrefix]&0xc0)==0x80 ) nPrefix--;
997 }
998 nSuffix = 0;
999 if( nPrefix<nShort ){
1000 while( nSuffix<nShort && zLeft[nLeft-nSuffix-1]==zRight[nRight-nSuffix-1] ){
 
1001 nSuffix++;
1002 }
1003 if( nSuffix<nShort ){
1004 while( nSuffix>0 && (zLeft[nLeft-nSuffix]&0xc0)==0x80 ) nSuffix--;
1005 }
1006 if( nSuffix==nLeft || nSuffix==nRight ) nPrefix = 0;
1007 }
1008 if( nPrefix+nSuffix > nShort ) nPrefix = nShort - nSuffix;
1009
1010
1011 /* A single chunk of text inserted on the right */
1012 if( nPrefix+nSuffix==nLeft ){
1013 sbsWriteLineno(p, lnLeft);
1014 p->iStart2 = p->iEnd2 = 0;
@@ -1007,11 +1064,11 @@
1064 p->zStart = zClassChng;
1065 }
1066 p->iStart2 = nPrefix + aLCS[1];
1067 p->iEnd2 = nLeft - nSuffix;
1068 p->zStart2 = aLCS[3]==nRightDiff ? zClassRm : zClassChng;
1069 sbsSimplifyLine(p, zLeft+nPrefix);
1070 sbsWriteText(p, pLeft, SBS_PAD);
1071 sbsWrite(p, " | ", 3);
1072 sbsWriteLineno(p, lnRight);
1073 p->iStart = nPrefix;
1074 p->iEnd = nPrefix + aLCS[2];
@@ -1022,11 +1079,11 @@
1079 p->zStart = zClassChng;
1080 }
1081 p->iStart2 = nPrefix + aLCS[3];
1082 p->iEnd2 = nRight - nSuffix;
1083 p->zStart2 = aLCS[1]==nLeftDiff ? zClassAdd : zClassChng;
1084 sbsSimplifyLine(p, zRight+nPrefix);
1085 sbsWriteText(p, pRight, SBS_NEWLINE);
1086 return;
1087 }
1088
1089 /* If all else fails, show a single big change between left and right */
@@ -1419,11 +1476,11 @@
1476 /* Delete one line from the left */
1477 s.n = 0;
1478 sbsWriteLineno(&s, a);
1479 s.iStart = 0;
1480 s.zStart = "<span class=\"diffrm\">";
1481 s.iEnd = LENGTH(&A[a]);
1482 sbsWriteText(&s, &A[a], SBS_PAD);
1483 if( s.escHtml ){
1484 sbsWrite(&s, " &lt;\n", 6);
1485 }else{
1486 sbsWrite(&s, " <\n", 3);
@@ -1452,11 +1509,11 @@
1509 sbsWrite(&s, " > ", 3);
1510 }
1511 sbsWriteLineno(&s, b);
1512 s.iStart = 0;
1513 s.zStart = "<span class=\"diffadd\">";
1514 s.iEnd = LENGTH(&B[b]);
1515 sbsWriteText(&s, &B[b], SBS_NEWLINE);
1516 blob_append(pOut, s.zLine, s.n);
1517 assert( mb>0 );
1518 mb--;
1519 b++;
@@ -1464,17 +1521,17 @@
1521 /* Delete from the left and insert on the right */
1522 s.n = 0;
1523 sbsWriteLineno(&s, a);
1524 s.iStart = 0;
1525 s.zStart = "<span class=\"diffrm\">";
1526 s.iEnd = LENGTH(&A[a]);
1527 sbsWriteText(&s, &A[a], SBS_PAD);
1528 sbsWrite(&s, " | ", 3);
1529 sbsWriteLineno(&s, b);
1530 s.iStart = 0;
1531 s.zStart = "<span class=\"diffadd\">";
1532 s.iEnd = LENGTH(&B[b]);
1533 sbsWriteText(&s, &B[b], SBS_NEWLINE);
1534 blob_append(pOut, s.zLine, s.n);
1535 ma--;
1536 mb--;
1537 a++;
@@ -2446,5 +2503,38 @@
2503 for(i=0; i<ann.nOrig; i++){
2504 fossil_print("%s: %.*s\n",
2505 ann.aOrig[i].zSrc, ann.aOrig[i].n, ann.aOrig[i].z);
2506 }
2507 }
2508
2509 /*
2510 ** COMMAND: test-looks-like-utf
2511 **
2512 ** Usage: %fossil test-looks-like-utf FILENAME
2513 **
2514 ** FILENAME is the name of a file to check for textual content in the UTF-8
2515 ** and/or UTF-16 encodings.
2516 */
2517 void looks_like_utf_test_cmd(void){
2518 Blob blob; /* the contents of the specified file */
2519 int eType; /* return value of looks_like_utf8/utf16() */
2520 int fUtf8; /* return value of starts_with_utf8_bom() */
2521 int fUtf16; /* return value of starts_with_utf16_bom() */
2522 int lookFlags; /* output flags from looks_like_utf8/utf16() */
2523 if( g.argc<3 ) usage("FILENAME");
2524 blob_read_from_file(&blob, g.argv[2]);
2525 fUtf8 = starts_with_utf8_bom(&blob, 0);
2526 fUtf16 = starts_with_utf16_bom(&blob, 0, 0);
2527 eType = fUtf16 ? looks_like_utf16(&blob, &lookFlags) :
2528 looks_like_utf8(&blob, &lookFlags);
2529 fossil_print("File \"%s\" has %d bytes.\n",g.argv[2],blob_size(&blob));
2530 fossil_print("Starts with UTF-8 BOM: %s\n",fUtf8?"yes":"no");
2531 fossil_print("Starts with UTF-16 BOM: %s\n",fUtf16?"yes":"no");
2532 fossil_print("Looks like UTF-%s: %s\n",fUtf16?"16":"8",eType?"yes":"no");
2533 fossil_print("Has flag LOOK_NUL: %s\n",(lookFlags&LOOK_NUL)?"yes":"no");
2534 fossil_print("Has flag LOOK_CR: %s\n",(lookFlags&LOOK_CR)?"yes":"no");
2535 fossil_print("Has flag LOOK_LF: %s\n",(lookFlags&LOOK_LF)?"yes":"no");
2536 fossil_print("Has flag LOOK_CRLF: %s\n",(lookFlags&LOOK_CRLF)?"yes":"no");
2537 fossil_print("Has flag LOOK_LENGTH: %s\n",(lookFlags&LOOK_LENGTH)?"yes":"no");
2538 fossil_print("Has flag LOOK_ODD: %s\n",(lookFlags&LOOK_ODD)?"yes":"no");
2539 blob_reset(&blob);
2540 }
2541
+186 -96
--- src/diff.c
+++ src/diff.c
@@ -57,11 +57,28 @@
5757
"more than 10,000 changes\n"
5858
5959
#define DIFF_TOO_MANY_CHANGES_HTML \
6060
"<p class='generalError'>More than 10,000 changes</p>\n"
6161
62
-#define looks_like_binary(blob) ((looks_like_utf8((blob))&3) == 0)
62
+/*
63
+** This macro is designed to return non-zero if the specified blob contains
64
+** data that MAY be binary in nature; otherwise, zero will be returned.
65
+*/
66
+#define looks_like_binary(blob) (looks_like_utf8((blob), 0) == 0)
67
+
68
+/*
69
+** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
70
+** to convey status information about the blob content.
71
+*/
72
+#define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
73
+#define LOOK_NUL ((int)0x00000001) /* One or more NUL chars were found. */
74
+#define LOOK_CR ((int)0x00000002) /* One or more CR chars were found. */
75
+#define LOOK_LF ((int)0x00000004) /* One or more LF chars were found. */
76
+#define LOOK_CRLF ((int)0x00000008) /* One or more CR/LF pairs were found. */
77
+#define LOOK_LENGTH ((int)0x00000010) /* An over length line was found. */
78
+#define LOOK_ODD ((int)0x00000020) /* An odd number of bytes was found. */
79
+#define LOOK_INVALID ((int)0x00000040) /* Invalid UTF-8/16 was found. */
6380
#endif /* INTERFACE */
6481
6582
/*
6683
** Maximum length of a line in a text file, in bytes. (2**13 = 8192 bytes)
6784
*/
@@ -188,21 +205,21 @@
188205
** It uses the method described in:
189206
** http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences
190207
** except for the "overlong form" which is not considered
191208
** invalid: Some languages like Java and Tcl use it.
192209
**
193
-** Any invalid byte causes bit 2 of result to be set (result |= 4),
210
+** Any invalid byte causes bit LOOK_INVALID to be set,
194211
** otherwise for valid multibyte utf-8 sequences n, j and z are
195212
** updated so the continuation bytes are not checked again.
196213
*/
197214
#define CHECKUTF8(c) \
198215
if( c<0xC0 || c>=0xF8 ){ \
199
- result |= 4; /* Invalid 1-byte or multibyte UTF-8, continue */ \
216
+ if( pFlags ) *pFlags |= LOOK_INVALID; /* Invalid 1-byte or multibyte UTF-8, continue */ \
200217
}else do{ \
201218
/* Check if all continuation bytes >=0x80 and <0xC0 */ \
202
- if( n<2 || ((z[1]&0xC0)!=0x80) ){ \
203
- result |= 4; /* Invalid continuation byte, continue */ \
219
+ if( n<2 || ((z[0]&0xC0)!=0x80) ){ \
220
+ if( pFlags ) *pFlags |= LOOK_INVALID; /* Invalid continuation byte, continue */ \
204221
break; \
205222
}else{ \
206223
/* prepare for checking remaining continuation bytes */ \
207224
c<<=1; --n; ++j; ++z; \
208225
} \
@@ -211,73 +228,82 @@
211228
/*
212229
** This function attempts to scan each logical line within the blob to
213230
** determine the type of content it appears to contain. Possible return
214231
** values are:
215232
**
216
-** (1) -- The content appears to consist entirely of text, with lines
217
-** delimited by line-feed characters.
233
+** (1) -- The content appears to consist entirely of text; however, the
234
+** encoding may not be UTF-8.
218235
**
219236
** (0) -- The content appears to be binary because it contains embedded
220237
** NUL characters or an extremely long line. Since this function
221238
** does not understand UTF-16, it may falsely consider UTF-16 text
222239
** to be binary.
223240
**
224
-** (-1) -- The content appears to consist entirely of text, with lines
225
-** delimited by carriage-return, line-feed pairs.
226
-**
227
-** (-3, -5) The same as (1, -1); however, the encoding is not UTF-8 or ASCII.
228
-**
229
-** (-4) -- The same as 0, but the determination is based on the fact that
230
-** the blob might be text (any encoding) but it has a line length
231
-** bigger than the diff logic in fossil can handle.
232
-**
233241
************************************ WARNING **********************************
234242
**
235
-** This function does not validate any code points.
243
+** This function does not validate that the blob content is properly formed
244
+** UTF-8. It assumes that all code points are the same size. It does not
245
+** validate any code points. It makes no attempt to detect if any [invalid]
246
+** switches between UTF-8 and other encodings occur.
236247
**
237248
** The only code points that this function cares about are the NUL character,
238249
** carriage-return, and line-feed.
250
+**
251
+** Whether or not this function examines the entire contents of the blob is
252
+** officially unspecified.
239253
**
240254
************************************ WARNING **********************************
241255
*/
242
-int looks_like_utf8(const Blob *pContent){
256
+int looks_like_utf8(const Blob *pContent, int *pFlags){
243257
const unsigned char *z = (unsigned char *) blob_buffer(pContent);
244258
unsigned int n = blob_size(pContent);
245
- unsigned int j;
246259
unsigned char c;
247
- int result = 0; /* Assume UTF-8 text with no CR/NL */
260
+ int j, result = 1; /* Assume UTF-8 text, prove otherwise */
248261
249
- /* Check individual lines.
250
- */
251
- if( n==0 ) return 1; /* Empty file -> text */
252
- c = *z;
262
+ if( pFlags ) *pFlags = LOOK_NONE;
263
+ if( n==0 ) return result; /* Empty file -> text */
264
+ c = *z++;
265
+ if( c==0 ){
266
+ if( pFlags ) *pFlags |= LOOK_NUL;
267
+ result = 0; /* NUL character in a file -> binary */
268
+ }
253269
j = (c!='\n');
254270
if( c&0x80 ){
255271
CHECKUTF8(c)
256272
} else if( c==0 ){
257273
return 0; /* Zero byte in a file -> binary */
258274
}
259275
while( --n>0 ){
260
- c = *++z; ++j;
276
+ c = *z++; ++j;
261277
if( c&0x80 ){
262278
CHECKUTF8(c)
263279
} else if( c==0 ){
264
- return 0; /* Zero byte in a file -> binary */
265
- } else if( c=='\n' ){
266
- if( z[-1]=='\r' ){
267
- result |= 2; /* Contains CR/NL, continue */
280
+ if( pFlags ) *pFlags |= LOOK_NUL;
281
+ result = 0; /* NUL character in a file -> binary */
282
+ }
283
+ if( c=='\n' ){
284
+ int c2 = z[-1];
285
+ if( pFlags ){
286
+ *pFlags |= LOOK_LF;
287
+ if( c2=='\r' ){
288
+ *pFlags |= LOOK_CRLF;
289
+ }
268290
}
269291
if( j>LENGTH_MASK ){
270
- return -4; /* Very long line -> binary */
292
+ if( pFlags ) *pFlags |= LOOK_LENGTH;
293
+ result = 0; /* Very long line -> binary */
271294
}
272295
j = 0;
296
+ }else if( c=='\r' ){
297
+ if( pFlags ) *pFlags |= LOOK_CR;
273298
}
274299
}
275300
if( j>LENGTH_MASK ){
276
- return -4; /* Very long line -> binary */
301
+ if( pFlags ) *pFlags |= LOOK_LENGTH;
302
+ result = 0; /* Very long line -> binary */
277303
}
278
- return 1-result; /* No problems seen -> not binary */
304
+ return result; /* No problems seen -> not binary */
279305
}
280306
281307
/*
282308
** Define the type needed to represent a Unicode (UTF-16) character.
283309
*/
@@ -309,27 +335,18 @@
309335
/*
310336
** This function attempts to scan each logical line within the blob to
311337
** determine the type of content it appears to contain. Possible return
312338
** values are:
313339
**
314
-** (1) -- The content appears to consist entirely of text, with lines
315
-** delimited by line-feed characters; however, the encoding may
316
-** not be UTF-16.
340
+** (1) -- The content appears to consist entirely of text; however, the
341
+** encoding may not be UTF-16.
317342
**
318343
** (0) -- The content appears to be binary because it contains embedded
319344
** NUL characters or an extremely long line. Since this function
320345
** does not understand UTF-8, it may falsely consider UTF-8 text
321346
** to be binary.
322347
**
323
-** (-1) -- The content appears to consist entirely of text, with lines
324
-** delimited by carriage-return, line-feed pairs; however, the
325
-** encoding may not be UTF-16.
326
-**
327
-** (-4) -- The same as 0, but the determination is based on the fact that
328
-** the blob might be text (any encoding) but it has a line length
329
-** bigger than the diff logic in fossil can handle.
330
-**
331348
************************************ WARNING **********************************
332349
**
333350
** This function does not validate that the blob content is properly formed
334351
** UTF-16. It assumes that all code points are the same size. It does not
335352
** validate any code points. It makes no attempt to detect if any [invalid]
@@ -336,41 +353,61 @@
336353
** switches between the UTF-16be and UTF-16le encodings occur.
337354
**
338355
** The only code points that this function cares about are the NUL character,
339356
** carriage-return, and line-feed.
340357
**
341
-************************************ WARNING **********************************
342
-*/
343
-int looks_like_utf16(const Blob *pContent){
344
- const WCHAR_T *z = (WCHAR_T *)blob_buffer(pContent);
345
- unsigned int n = blob_size(pContent);
346
- int j, c;
347
- int result = 1; /* Assume UTF-16 text with no CR/NL */
348
-
349
- /* Check individual lines.
350
- */
351
- if( n==0 ) return result; /* Empty file -> text */
352
- if( n%2 ) return 0; /* Odd number of bytes -> binary (or UTF-8) */
353
- c = *z;
354
- if( c==0 ) return 0; /* NUL character in a file -> binary */
355
- j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF));
356
- while( (n-=2)>0 ){
357
- c = *++z; ++j;
358
- if( c==0 ) return 0; /* NUL character in a file -> binary */
359
- if( c==UTF16BE_LF || c==UTF16LE_LF ){
360
- int c2 = z[-1];
361
- if( c2==UTF16BE_CR || c2==UTF16LE_CR ){
362
- result = -1; /* Contains CR/NL, continue */
363
- }
364
- if( j>UTF16_LENGTH_MASK ){
365
- return -4; /* Very long line -> binary */
366
- }
367
- j = 0;
368
- }
369
- }
370
- if( j>UTF16_LENGTH_MASK ){
371
- return -4; /* Very long line -> binary */
358
+** Whether or not this function examines the entire contents of the blob is
359
+** officially unspecified.
360
+**
361
+************************************ WARNING **********************************
362
+*/
363
+int looks_like_utf16(const Blob *pContent, int *pFlags){
364
+ const WCHAR_T *z = (WCHAR_T *)blob_buffer(pContent);
365
+ unsigned int n = blob_size(pContent);
366
+ int j, c, result = 1; /* Assume UTF-16 text, prove otherwise */
367
+
368
+ if( pFlags ) *pFlags = LOOK_NONE;
369
+ if( n==0 ) return result; /* Empty file -> text */
370
+ if( n%sizeof(WCHAR_T) ){
371
+ if( pFlags ) *pFlags |= LOOK_ODD;
372
+ result = 0; /* Odd number of bytes -> binary (UTF-8?) */
373
+ if ( n<sizeof(WCHAR_T) ) return result; /* One byte -> binary (UTF-8?) */
374
+ }
375
+ c = *z;
376
+ if( c==0 ){
377
+ if( pFlags ) *pFlags |= LOOK_NUL;
378
+ result = 0; /* NUL character in a file -> binary */
379
+ }
380
+ j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF));
381
+ while( 1 ){
382
+ if ( n<sizeof(WCHAR_T) ) break;
383
+ n -= sizeof(WCHAR_T);
384
+ c = *++z; ++j;
385
+ if( c==0 ){
386
+ if( pFlags ) *pFlags |= LOOK_NUL;
387
+ result = 0; /* NUL character in a file -> binary */
388
+ }
389
+ if( c==UTF16BE_LF || c==UTF16LE_LF ){
390
+ int c2 = z[-1];
391
+ if( pFlags ){
392
+ *pFlags |= LOOK_LF;
393
+ if( c2==UTF16BE_CR || c2==UTF16LE_CR ){
394
+ *pFlags |= LOOK_CRLF;
395
+ }
396
+ }
397
+ if( j>UTF16_LENGTH_MASK ){
398
+ if( pFlags ) *pFlags |= LOOK_LENGTH;
399
+ result = 0; /* Very long line -> binary */
400
+ }
401
+ j = 0;
402
+ }else if( c==UTF16BE_CR || c==UTF16LE_CR ){
403
+ if( pFlags ) *pFlags |= LOOK_CR;
404
+ }
405
+ }
406
+ if( j>UTF16_LENGTH_MASK ){
407
+ if( pFlags ) *pFlags |= LOOK_LENGTH;
408
+ result = 0; /* Very long line -> binary */
372409
}
373410
return result; /* No problems seen -> not binary */
374411
}
375412
376413
/*
@@ -410,23 +447,24 @@
410447
const Blob *pContent, /* IN: Blob content to perform BOM detection on. */
411448
int *pnByte, /* OUT: The number of bytes used for the BOM. */
412449
int *pbReverse /* OUT: Non-zero for BOM in reverse byte-order. */
413450
){
414451
const unsigned short *z = (unsigned short *)blob_buffer(pContent);
452
+ int bomSize = sizeof(unsigned short);
415453
int size = blob_size(pContent);
416454
417
- if( (size<2) || (size%2)
418
- || (size>=4 && z[1]==0) ) return 0;
419
- if( z[0] == 0xfffe ){
455
+ if( size<bomSize ) return 0; /* No: cannot read BOM. */
456
+ if( size>=(2*bomSize) && z[1]==0 ) return 0; /* No: possible UTF-32. */
457
+ if( z[0]==0xfffe ){
420458
if( pbReverse ) *pbReverse = 1;
421
- }else if( z[0] == 0xfeff ){
459
+ }else if( z[0]==0xfeff ){
422460
if( pbReverse ) *pbReverse = 0;
423461
}else{
424
- return 0;
462
+ return 0; /* No: UTF-16 byte-order-mark not found. */
425463
}
426
- if( pnByte ) *pnByte = 2;
427
- return 1;
464
+ if( pnByte ) *pnByte = bomSize;
465
+ return 1; /* Yes. */
428466
}
429467
430468
/*
431469
** Return true if two DLine elements are identical.
432470
*/
@@ -892,21 +930,33 @@
892930
/*
893931
** Simplify iStart and iStart2:
894932
**
895933
** * If iStart is a null-change then move iStart2 into iStart
896934
** * Make sure any null-changes are in canonoical form.
935
+** * Make sure all changes are at character boundaries for
936
+** multi-byte characters.
897937
*/
898
-static void sbsSimplifyLine(SbsLine *p){
899
- if( p->iStart2==p->iEnd2 ) p->iStart2 = p->iEnd2 = 0;
938
+static void sbsSimplifyLine(SbsLine *p, const char *z){
939
+ if( p->iStart2==p->iEnd2 ){
940
+ p->iStart2 = p->iEnd2 = 0;
941
+ }else if( p->iStart2 ){
942
+ while( p->iStart2>0 && (z[p->iStart2]&0xc0)==0x80 ) p->iStart2--;
943
+ while( (z[p->iEnd2]&0xc0)==0x80 ) p->iEnd2++;
944
+ }
900945
if( p->iStart==p->iEnd ){
901946
p->iStart = p->iStart2;
902947
p->iEnd = p->iEnd2;
903948
p->zStart = p->zStart2;
904949
p->iStart2 = 0;
905950
p->iEnd2 = 0;
906951
}
907
- if( p->iStart==p->iEnd ) p->iStart = p->iEnd = -1;
952
+ if( p->iStart==p->iEnd ){
953
+ p->iStart = p->iEnd = -1;
954
+ }else if( p->iStart>0 ){
955
+ while( p->iStart>0 && (z[p->iStart]&0xc0)==0x80 ) p->iStart--;
956
+ while( (z[p->iEnd]&0xc0)==0x80 ) p->iEnd++;
957
+ }
908958
}
909959
910960
/*
911961
** Write out lines that have been edited. Adjust the highlight to cover
912962
** only those parts of the line that actually changed.
@@ -918,10 +968,11 @@
918968
DLine *pRight, /* Right line of the change */
919969
int lnRight /* Line number of the right line */
920970
){
921971
int nLeft; /* Length of left line in bytes */
922972
int nRight; /* Length of right line in bytes */
973
+ int nShort; /* Shortest of left and right */
923974
int nPrefix; /* Length of common prefix */
924975
int nSuffix; /* Length of common suffix */
925976
const char *zLeft; /* Text of the left line */
926977
const char *zRight; /* Text of the right line */
927978
int nLeftDiff; /* nLeft - nPrefix - nSuffix */
@@ -933,25 +984,31 @@
933984
934985
nLeft = pLeft->h & LENGTH_MASK;
935986
zLeft = pLeft->z;
936987
nRight = pRight->h & LENGTH_MASK;
937988
zRight = pRight->z;
989
+ nShort = nLeft<nRight ? nLeft : nRight;
938990
939991
nPrefix = 0;
940
- while( nPrefix<nLeft && nPrefix<nRight && zLeft[nPrefix]==zRight[nPrefix] ){
992
+ while( nPrefix<nShort && zLeft[nPrefix]==zRight[nPrefix] ){
941993
nPrefix++;
942994
}
995
+ if( nPrefix<nShort ){
996
+ while( nPrefix>0 && (zLeft[nPrefix]&0xc0)==0x80 ) nPrefix--;
997
+ }
943998
nSuffix = 0;
944
- if( nPrefix<nLeft && nPrefix<nRight ){
945
- while( nSuffix<nLeft && nSuffix<nRight
946
- && zLeft[nLeft-nSuffix-1]==zRight[nRight-nSuffix-1] ){
999
+ if( nPrefix<nShort ){
1000
+ while( nSuffix<nShort && zLeft[nLeft-nSuffix-1]==zRight[nRight-nSuffix-1] ){
9471001
nSuffix++;
9481002
}
1003
+ if( nSuffix<nShort ){
1004
+ while( nSuffix>0 && (zLeft[nLeft-nSuffix]&0xc0)==0x80 ) nSuffix--;
1005
+ }
9491006
if( nSuffix==nLeft || nSuffix==nRight ) nPrefix = 0;
9501007
}
951
- if( nPrefix+nSuffix > nLeft ) nPrefix = nLeft - nSuffix;
952
- if( nPrefix+nSuffix > nRight ) nPrefix = nRight - nSuffix;
1008
+ if( nPrefix+nSuffix > nShort ) nPrefix = nShort - nSuffix;
1009
+
9531010
9541011
/* A single chunk of text inserted on the right */
9551012
if( nPrefix+nSuffix==nLeft ){
9561013
sbsWriteLineno(p, lnLeft);
9571014
p->iStart2 = p->iEnd2 = 0;
@@ -1007,11 +1064,11 @@
10071064
p->zStart = zClassChng;
10081065
}
10091066
p->iStart2 = nPrefix + aLCS[1];
10101067
p->iEnd2 = nLeft - nSuffix;
10111068
p->zStart2 = aLCS[3]==nRightDiff ? zClassRm : zClassChng;
1012
- sbsSimplifyLine(p);
1069
+ sbsSimplifyLine(p, zLeft+nPrefix);
10131070
sbsWriteText(p, pLeft, SBS_PAD);
10141071
sbsWrite(p, " | ", 3);
10151072
sbsWriteLineno(p, lnRight);
10161073
p->iStart = nPrefix;
10171074
p->iEnd = nPrefix + aLCS[2];
@@ -1022,11 +1079,11 @@
10221079
p->zStart = zClassChng;
10231080
}
10241081
p->iStart2 = nPrefix + aLCS[3];
10251082
p->iEnd2 = nRight - nSuffix;
10261083
p->zStart2 = aLCS[1]==nLeftDiff ? zClassAdd : zClassChng;
1027
- sbsSimplifyLine(p);
1084
+ sbsSimplifyLine(p, zRight+nPrefix);
10281085
sbsWriteText(p, pRight, SBS_NEWLINE);
10291086
return;
10301087
}
10311088
10321089
/* If all else fails, show a single big change between left and right */
@@ -1419,11 +1476,11 @@
14191476
/* Delete one line from the left */
14201477
s.n = 0;
14211478
sbsWriteLineno(&s, a);
14221479
s.iStart = 0;
14231480
s.zStart = "<span class=\"diffrm\">";
1424
- s.iEnd = s.width;
1481
+ s.iEnd = LENGTH(&A[a]);
14251482
sbsWriteText(&s, &A[a], SBS_PAD);
14261483
if( s.escHtml ){
14271484
sbsWrite(&s, " &lt;\n", 6);
14281485
}else{
14291486
sbsWrite(&s, " <\n", 3);
@@ -1452,11 +1509,11 @@
14521509
sbsWrite(&s, " > ", 3);
14531510
}
14541511
sbsWriteLineno(&s, b);
14551512
s.iStart = 0;
14561513
s.zStart = "<span class=\"diffadd\">";
1457
- s.iEnd = s.width;
1514
+ s.iEnd = LENGTH(&B[b]);
14581515
sbsWriteText(&s, &B[b], SBS_NEWLINE);
14591516
blob_append(pOut, s.zLine, s.n);
14601517
assert( mb>0 );
14611518
mb--;
14621519
b++;
@@ -1464,17 +1521,17 @@
14641521
/* Delete from the left and insert on the right */
14651522
s.n = 0;
14661523
sbsWriteLineno(&s, a);
14671524
s.iStart = 0;
14681525
s.zStart = "<span class=\"diffrm\">";
1469
- s.iEnd = s.width;
1526
+ s.iEnd = LENGTH(&A[a]);
14701527
sbsWriteText(&s, &A[a], SBS_PAD);
14711528
sbsWrite(&s, " | ", 3);
14721529
sbsWriteLineno(&s, b);
14731530
s.iStart = 0;
14741531
s.zStart = "<span class=\"diffadd\">";
1475
- s.iEnd = s.width;
1532
+ s.iEnd = LENGTH(&B[b]);
14761533
sbsWriteText(&s, &B[b], SBS_NEWLINE);
14771534
blob_append(pOut, s.zLine, s.n);
14781535
ma--;
14791536
mb--;
14801537
a++;
@@ -2446,5 +2503,38 @@
24462503
for(i=0; i<ann.nOrig; i++){
24472504
fossil_print("%s: %.*s\n",
24482505
ann.aOrig[i].zSrc, ann.aOrig[i].n, ann.aOrig[i].z);
24492506
}
24502507
}
2508
+
2509
+/*
2510
+** COMMAND: test-looks-like-utf
2511
+**
2512
+** Usage: %fossil test-looks-like-utf FILENAME
2513
+**
2514
+** FILENAME is the name of a file to check for textual content in the UTF-8
2515
+** and/or UTF-16 encodings.
2516
+*/
2517
+void looks_like_utf_test_cmd(void){
2518
+ Blob blob; /* the contents of the specified file */
2519
+ int eType; /* return value of looks_like_utf8/utf16() */
2520
+ int fUtf8; /* return value of starts_with_utf8_bom() */
2521
+ int fUtf16; /* return value of starts_with_utf16_bom() */
2522
+ int lookFlags; /* output flags from looks_like_utf8/utf16() */
2523
+ if( g.argc<3 ) usage("FILENAME");
2524
+ blob_read_from_file(&blob, g.argv[2]);
2525
+ fUtf8 = starts_with_utf8_bom(&blob, 0);
2526
+ fUtf16 = starts_with_utf16_bom(&blob, 0, 0);
2527
+ eType = fUtf16 ? looks_like_utf16(&blob, &lookFlags) :
2528
+ looks_like_utf8(&blob, &lookFlags);
2529
+ fossil_print("File \"%s\" has %d bytes.\n",g.argv[2],blob_size(&blob));
2530
+ fossil_print("Starts with UTF-8 BOM: %s\n",fUtf8?"yes":"no");
2531
+ fossil_print("Starts with UTF-16 BOM: %s\n",fUtf16?"yes":"no");
2532
+ fossil_print("Looks like UTF-%s: %s\n",fUtf16?"16":"8",eType?"yes":"no");
2533
+ fossil_print("Has flag LOOK_NUL: %s\n",(lookFlags&LOOK_NUL)?"yes":"no");
2534
+ fossil_print("Has flag LOOK_CR: %s\n",(lookFlags&LOOK_CR)?"yes":"no");
2535
+ fossil_print("Has flag LOOK_LF: %s\n",(lookFlags&LOOK_LF)?"yes":"no");
2536
+ fossil_print("Has flag LOOK_CRLF: %s\n",(lookFlags&LOOK_CRLF)?"yes":"no");
2537
+ fossil_print("Has flag LOOK_LENGTH: %s\n",(lookFlags&LOOK_LENGTH)?"yes":"no");
2538
+ fossil_print("Has flag LOOK_ODD: %s\n",(lookFlags&LOOK_ODD)?"yes":"no");
2539
+ blob_reset(&blob);
2540
+}
24512541
--- src/diff.c
+++ src/diff.c
@@ -57,11 +57,28 @@
57 "more than 10,000 changes\n"
58
59 #define DIFF_TOO_MANY_CHANGES_HTML \
60 "<p class='generalError'>More than 10,000 changes</p>\n"
61
62 #define looks_like_binary(blob) ((looks_like_utf8((blob))&3) == 0)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63 #endif /* INTERFACE */
64
65 /*
66 ** Maximum length of a line in a text file, in bytes. (2**13 = 8192 bytes)
67 */
@@ -188,21 +205,21 @@
188 ** It uses the method described in:
189 ** http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences
190 ** except for the "overlong form" which is not considered
191 ** invalid: Some languages like Java and Tcl use it.
192 **
193 ** Any invalid byte causes bit 2 of result to be set (result |= 4),
194 ** otherwise for valid multibyte utf-8 sequences n, j and z are
195 ** updated so the continuation bytes are not checked again.
196 */
197 #define CHECKUTF8(c) \
198 if( c<0xC0 || c>=0xF8 ){ \
199 result |= 4; /* Invalid 1-byte or multibyte UTF-8, continue */ \
200 }else do{ \
201 /* Check if all continuation bytes >=0x80 and <0xC0 */ \
202 if( n<2 || ((z[1]&0xC0)!=0x80) ){ \
203 result |= 4; /* Invalid continuation byte, continue */ \
204 break; \
205 }else{ \
206 /* prepare for checking remaining continuation bytes */ \
207 c<<=1; --n; ++j; ++z; \
208 } \
@@ -211,73 +228,82 @@
211 /*
212 ** This function attempts to scan each logical line within the blob to
213 ** determine the type of content it appears to contain. Possible return
214 ** values are:
215 **
216 ** (1) -- The content appears to consist entirely of text, with lines
217 ** delimited by line-feed characters.
218 **
219 ** (0) -- The content appears to be binary because it contains embedded
220 ** NUL characters or an extremely long line. Since this function
221 ** does not understand UTF-16, it may falsely consider UTF-16 text
222 ** to be binary.
223 **
224 ** (-1) -- The content appears to consist entirely of text, with lines
225 ** delimited by carriage-return, line-feed pairs.
226 **
227 ** (-3, -5) The same as (1, -1); however, the encoding is not UTF-8 or ASCII.
228 **
229 ** (-4) -- The same as 0, but the determination is based on the fact that
230 ** the blob might be text (any encoding) but it has a line length
231 ** bigger than the diff logic in fossil can handle.
232 **
233 ************************************ WARNING **********************************
234 **
235 ** This function does not validate any code points.
 
 
 
236 **
237 ** The only code points that this function cares about are the NUL character,
238 ** carriage-return, and line-feed.
 
 
 
239 **
240 ************************************ WARNING **********************************
241 */
242 int looks_like_utf8(const Blob *pContent){
243 const unsigned char *z = (unsigned char *) blob_buffer(pContent);
244 unsigned int n = blob_size(pContent);
245 unsigned int j;
246 unsigned char c;
247 int result = 0; /* Assume UTF-8 text with no CR/NL */
248
249 /* Check individual lines.
250 */
251 if( n==0 ) return 1; /* Empty file -> text */
252 c = *z;
 
 
 
253 j = (c!='\n');
254 if( c&0x80 ){
255 CHECKUTF8(c)
256 } else if( c==0 ){
257 return 0; /* Zero byte in a file -> binary */
258 }
259 while( --n>0 ){
260 c = *++z; ++j;
261 if( c&0x80 ){
262 CHECKUTF8(c)
263 } else if( c==0 ){
264 return 0; /* Zero byte in a file -> binary */
265 } else if( c=='\n' ){
266 if( z[-1]=='\r' ){
267 result |= 2; /* Contains CR/NL, continue */
 
 
 
 
 
 
268 }
269 if( j>LENGTH_MASK ){
270 return -4; /* Very long line -> binary */
 
271 }
272 j = 0;
 
 
273 }
274 }
275 if( j>LENGTH_MASK ){
276 return -4; /* Very long line -> binary */
 
277 }
278 return 1-result; /* No problems seen -> not binary */
279 }
280
281 /*
282 ** Define the type needed to represent a Unicode (UTF-16) character.
283 */
@@ -309,27 +335,18 @@
309 /*
310 ** This function attempts to scan each logical line within the blob to
311 ** determine the type of content it appears to contain. Possible return
312 ** values are:
313 **
314 ** (1) -- The content appears to consist entirely of text, with lines
315 ** delimited by line-feed characters; however, the encoding may
316 ** not be UTF-16.
317 **
318 ** (0) -- The content appears to be binary because it contains embedded
319 ** NUL characters or an extremely long line. Since this function
320 ** does not understand UTF-8, it may falsely consider UTF-8 text
321 ** to be binary.
322 **
323 ** (-1) -- The content appears to consist entirely of text, with lines
324 ** delimited by carriage-return, line-feed pairs; however, the
325 ** encoding may not be UTF-16.
326 **
327 ** (-4) -- The same as 0, but the determination is based on the fact that
328 ** the blob might be text (any encoding) but it has a line length
329 ** bigger than the diff logic in fossil can handle.
330 **
331 ************************************ WARNING **********************************
332 **
333 ** This function does not validate that the blob content is properly formed
334 ** UTF-16. It assumes that all code points are the same size. It does not
335 ** validate any code points. It makes no attempt to detect if any [invalid]
@@ -336,41 +353,61 @@
336 ** switches between the UTF-16be and UTF-16le encodings occur.
337 **
338 ** The only code points that this function cares about are the NUL character,
339 ** carriage-return, and line-feed.
340 **
341 ************************************ WARNING **********************************
342 */
343 int looks_like_utf16(const Blob *pContent){
344 const WCHAR_T *z = (WCHAR_T *)blob_buffer(pContent);
345 unsigned int n = blob_size(pContent);
346 int j, c;
347 int result = 1; /* Assume UTF-16 text with no CR/NL */
348
349 /* Check individual lines.
350 */
351 if( n==0 ) return result; /* Empty file -> text */
352 if( n%2 ) return 0; /* Odd number of bytes -> binary (or UTF-8) */
353 c = *z;
354 if( c==0 ) return 0; /* NUL character in a file -> binary */
355 j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF));
356 while( (n-=2)>0 ){
357 c = *++z; ++j;
358 if( c==0 ) return 0; /* NUL character in a file -> binary */
359 if( c==UTF16BE_LF || c==UTF16LE_LF ){
360 int c2 = z[-1];
361 if( c2==UTF16BE_CR || c2==UTF16LE_CR ){
362 result = -1; /* Contains CR/NL, continue */
363 }
364 if( j>UTF16_LENGTH_MASK ){
365 return -4; /* Very long line -> binary */
366 }
367 j = 0;
368 }
369 }
370 if( j>UTF16_LENGTH_MASK ){
371 return -4; /* Very long line -> binary */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
372 }
373 return result; /* No problems seen -> not binary */
374 }
375
376 /*
@@ -410,23 +447,24 @@
410 const Blob *pContent, /* IN: Blob content to perform BOM detection on. */
411 int *pnByte, /* OUT: The number of bytes used for the BOM. */
412 int *pbReverse /* OUT: Non-zero for BOM in reverse byte-order. */
413 ){
414 const unsigned short *z = (unsigned short *)blob_buffer(pContent);
 
415 int size = blob_size(pContent);
416
417 if( (size<2) || (size%2)
418 || (size>=4 && z[1]==0) ) return 0;
419 if( z[0] == 0xfffe ){
420 if( pbReverse ) *pbReverse = 1;
421 }else if( z[0] == 0xfeff ){
422 if( pbReverse ) *pbReverse = 0;
423 }else{
424 return 0;
425 }
426 if( pnByte ) *pnByte = 2;
427 return 1;
428 }
429
430 /*
431 ** Return true if two DLine elements are identical.
432 */
@@ -892,21 +930,33 @@
892 /*
893 ** Simplify iStart and iStart2:
894 **
895 ** * If iStart is a null-change then move iStart2 into iStart
896 ** * Make sure any null-changes are in canonoical form.
 
 
897 */
898 static void sbsSimplifyLine(SbsLine *p){
899 if( p->iStart2==p->iEnd2 ) p->iStart2 = p->iEnd2 = 0;
 
 
 
 
 
900 if( p->iStart==p->iEnd ){
901 p->iStart = p->iStart2;
902 p->iEnd = p->iEnd2;
903 p->zStart = p->zStart2;
904 p->iStart2 = 0;
905 p->iEnd2 = 0;
906 }
907 if( p->iStart==p->iEnd ) p->iStart = p->iEnd = -1;
 
 
 
 
 
908 }
909
910 /*
911 ** Write out lines that have been edited. Adjust the highlight to cover
912 ** only those parts of the line that actually changed.
@@ -918,10 +968,11 @@
918 DLine *pRight, /* Right line of the change */
919 int lnRight /* Line number of the right line */
920 ){
921 int nLeft; /* Length of left line in bytes */
922 int nRight; /* Length of right line in bytes */
 
923 int nPrefix; /* Length of common prefix */
924 int nSuffix; /* Length of common suffix */
925 const char *zLeft; /* Text of the left line */
926 const char *zRight; /* Text of the right line */
927 int nLeftDiff; /* nLeft - nPrefix - nSuffix */
@@ -933,25 +984,31 @@
933
934 nLeft = pLeft->h & LENGTH_MASK;
935 zLeft = pLeft->z;
936 nRight = pRight->h & LENGTH_MASK;
937 zRight = pRight->z;
 
938
939 nPrefix = 0;
940 while( nPrefix<nLeft && nPrefix<nRight && zLeft[nPrefix]==zRight[nPrefix] ){
941 nPrefix++;
942 }
 
 
 
943 nSuffix = 0;
944 if( nPrefix<nLeft && nPrefix<nRight ){
945 while( nSuffix<nLeft && nSuffix<nRight
946 && zLeft[nLeft-nSuffix-1]==zRight[nRight-nSuffix-1] ){
947 nSuffix++;
948 }
 
 
 
949 if( nSuffix==nLeft || nSuffix==nRight ) nPrefix = 0;
950 }
951 if( nPrefix+nSuffix > nLeft ) nPrefix = nLeft - nSuffix;
952 if( nPrefix+nSuffix > nRight ) nPrefix = nRight - nSuffix;
953
954 /* A single chunk of text inserted on the right */
955 if( nPrefix+nSuffix==nLeft ){
956 sbsWriteLineno(p, lnLeft);
957 p->iStart2 = p->iEnd2 = 0;
@@ -1007,11 +1064,11 @@
1007 p->zStart = zClassChng;
1008 }
1009 p->iStart2 = nPrefix + aLCS[1];
1010 p->iEnd2 = nLeft - nSuffix;
1011 p->zStart2 = aLCS[3]==nRightDiff ? zClassRm : zClassChng;
1012 sbsSimplifyLine(p);
1013 sbsWriteText(p, pLeft, SBS_PAD);
1014 sbsWrite(p, " | ", 3);
1015 sbsWriteLineno(p, lnRight);
1016 p->iStart = nPrefix;
1017 p->iEnd = nPrefix + aLCS[2];
@@ -1022,11 +1079,11 @@
1022 p->zStart = zClassChng;
1023 }
1024 p->iStart2 = nPrefix + aLCS[3];
1025 p->iEnd2 = nRight - nSuffix;
1026 p->zStart2 = aLCS[1]==nLeftDiff ? zClassAdd : zClassChng;
1027 sbsSimplifyLine(p);
1028 sbsWriteText(p, pRight, SBS_NEWLINE);
1029 return;
1030 }
1031
1032 /* If all else fails, show a single big change between left and right */
@@ -1419,11 +1476,11 @@
1419 /* Delete one line from the left */
1420 s.n = 0;
1421 sbsWriteLineno(&s, a);
1422 s.iStart = 0;
1423 s.zStart = "<span class=\"diffrm\">";
1424 s.iEnd = s.width;
1425 sbsWriteText(&s, &A[a], SBS_PAD);
1426 if( s.escHtml ){
1427 sbsWrite(&s, " &lt;\n", 6);
1428 }else{
1429 sbsWrite(&s, " <\n", 3);
@@ -1452,11 +1509,11 @@
1452 sbsWrite(&s, " > ", 3);
1453 }
1454 sbsWriteLineno(&s, b);
1455 s.iStart = 0;
1456 s.zStart = "<span class=\"diffadd\">";
1457 s.iEnd = s.width;
1458 sbsWriteText(&s, &B[b], SBS_NEWLINE);
1459 blob_append(pOut, s.zLine, s.n);
1460 assert( mb>0 );
1461 mb--;
1462 b++;
@@ -1464,17 +1521,17 @@
1464 /* Delete from the left and insert on the right */
1465 s.n = 0;
1466 sbsWriteLineno(&s, a);
1467 s.iStart = 0;
1468 s.zStart = "<span class=\"diffrm\">";
1469 s.iEnd = s.width;
1470 sbsWriteText(&s, &A[a], SBS_PAD);
1471 sbsWrite(&s, " | ", 3);
1472 sbsWriteLineno(&s, b);
1473 s.iStart = 0;
1474 s.zStart = "<span class=\"diffadd\">";
1475 s.iEnd = s.width;
1476 sbsWriteText(&s, &B[b], SBS_NEWLINE);
1477 blob_append(pOut, s.zLine, s.n);
1478 ma--;
1479 mb--;
1480 a++;
@@ -2446,5 +2503,38 @@
2446 for(i=0; i<ann.nOrig; i++){
2447 fossil_print("%s: %.*s\n",
2448 ann.aOrig[i].zSrc, ann.aOrig[i].n, ann.aOrig[i].z);
2449 }
2450 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2451
--- src/diff.c
+++ src/diff.c
@@ -57,11 +57,28 @@
57 "more than 10,000 changes\n"
58
59 #define DIFF_TOO_MANY_CHANGES_HTML \
60 "<p class='generalError'>More than 10,000 changes</p>\n"
61
62 /*
63 ** This macro is designed to return non-zero if the specified blob contains
64 ** data that MAY be binary in nature; otherwise, zero will be returned.
65 */
66 #define looks_like_binary(blob) (looks_like_utf8((blob), 0) == 0)
67
68 /*
69 ** Output flags for the looks_like_utf8() and looks_like_utf16() routines used
70 ** to convey status information about the blob content.
71 */
72 #define LOOK_NONE ((int)0x00000000) /* Nothing special was found. */
73 #define LOOK_NUL ((int)0x00000001) /* One or more NUL chars were found. */
74 #define LOOK_CR ((int)0x00000002) /* One or more CR chars were found. */
75 #define LOOK_LF ((int)0x00000004) /* One or more LF chars were found. */
76 #define LOOK_CRLF ((int)0x00000008) /* One or more CR/LF pairs were found. */
77 #define LOOK_LENGTH ((int)0x00000010) /* An over length line was found. */
78 #define LOOK_ODD ((int)0x00000020) /* An odd number of bytes was found. */
79 #define LOOK_INVALID ((int)0x00000040) /* Invalid UTF-8/16 was found. */
80 #endif /* INTERFACE */
81
82 /*
83 ** Maximum length of a line in a text file, in bytes. (2**13 = 8192 bytes)
84 */
@@ -188,21 +205,21 @@
205 ** It uses the method described in:
206 ** http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences
207 ** except for the "overlong form" which is not considered
208 ** invalid: Some languages like Java and Tcl use it.
209 **
210 ** Any invalid byte causes bit LOOK_INVALID to be set,
211 ** otherwise for valid multibyte utf-8 sequences n, j and z are
212 ** updated so the continuation bytes are not checked again.
213 */
214 #define CHECKUTF8(c) \
215 if( c<0xC0 || c>=0xF8 ){ \
216 if( pFlags ) *pFlags |= LOOK_INVALID; /* Invalid 1-byte or multibyte UTF-8, continue */ \
217 }else do{ \
218 /* Check if all continuation bytes >=0x80 and <0xC0 */ \
219 if( n<2 || ((z[0]&0xC0)!=0x80) ){ \
220 if( pFlags ) *pFlags |= LOOK_INVALID; /* Invalid continuation byte, continue */ \
221 break; \
222 }else{ \
223 /* prepare for checking remaining continuation bytes */ \
224 c<<=1; --n; ++j; ++z; \
225 } \
@@ -211,73 +228,82 @@
228 /*
229 ** This function attempts to scan each logical line within the blob to
230 ** determine the type of content it appears to contain. Possible return
231 ** values are:
232 **
233 ** (1) -- The content appears to consist entirely of text; however, the
234 ** encoding may not be UTF-8.
235 **
236 ** (0) -- The content appears to be binary because it contains embedded
237 ** NUL characters or an extremely long line. Since this function
238 ** does not understand UTF-16, it may falsely consider UTF-16 text
239 ** to be binary.
240 **
 
 
 
 
 
 
 
 
 
241 ************************************ WARNING **********************************
242 **
243 ** This function does not validate that the blob content is properly formed
244 ** UTF-8. It assumes that all code points are the same size. It does not
245 ** validate any code points. It makes no attempt to detect if any [invalid]
246 ** switches between UTF-8 and other encodings occur.
247 **
248 ** The only code points that this function cares about are the NUL character,
249 ** carriage-return, and line-feed.
250 **
251 ** Whether or not this function examines the entire contents of the blob is
252 ** officially unspecified.
253 **
254 ************************************ WARNING **********************************
255 */
256 int looks_like_utf8(const Blob *pContent, int *pFlags){
257 const unsigned char *z = (unsigned char *) blob_buffer(pContent);
258 unsigned int n = blob_size(pContent);
 
259 unsigned char c;
260 int j, result = 1; /* Assume UTF-8 text, prove otherwise */
261
262 if( pFlags ) *pFlags = LOOK_NONE;
263 if( n==0 ) return result; /* Empty file -> text */
264 c = *z++;
265 if( c==0 ){
266 if( pFlags ) *pFlags |= LOOK_NUL;
267 result = 0; /* NUL character in a file -> binary */
268 }
269 j = (c!='\n');
270 if( c&0x80 ){
271 CHECKUTF8(c)
272 } else if( c==0 ){
273 return 0; /* Zero byte in a file -> binary */
274 }
275 while( --n>0 ){
276 c = *z++; ++j;
277 if( c&0x80 ){
278 CHECKUTF8(c)
279 } else if( c==0 ){
280 if( pFlags ) *pFlags |= LOOK_NUL;
281 result = 0; /* NUL character in a file -> binary */
282 }
283 if( c=='\n' ){
284 int c2 = z[-1];
285 if( pFlags ){
286 *pFlags |= LOOK_LF;
287 if( c2=='\r' ){
288 *pFlags |= LOOK_CRLF;
289 }
290 }
291 if( j>LENGTH_MASK ){
292 if( pFlags ) *pFlags |= LOOK_LENGTH;
293 result = 0; /* Very long line -> binary */
294 }
295 j = 0;
296 }else if( c=='\r' ){
297 if( pFlags ) *pFlags |= LOOK_CR;
298 }
299 }
300 if( j>LENGTH_MASK ){
301 if( pFlags ) *pFlags |= LOOK_LENGTH;
302 result = 0; /* Very long line -> binary */
303 }
304 return result; /* No problems seen -> not binary */
305 }
306
307 /*
308 ** Define the type needed to represent a Unicode (UTF-16) character.
309 */
@@ -309,27 +335,18 @@
335 /*
336 ** This function attempts to scan each logical line within the blob to
337 ** determine the type of content it appears to contain. Possible return
338 ** values are:
339 **
340 ** (1) -- The content appears to consist entirely of text; however, the
341 ** encoding may not be UTF-16.
 
342 **
343 ** (0) -- The content appears to be binary because it contains embedded
344 ** NUL characters or an extremely long line. Since this function
345 ** does not understand UTF-8, it may falsely consider UTF-8 text
346 ** to be binary.
347 **
 
 
 
 
 
 
 
 
348 ************************************ WARNING **********************************
349 **
350 ** This function does not validate that the blob content is properly formed
351 ** UTF-16. It assumes that all code points are the same size. It does not
352 ** validate any code points. It makes no attempt to detect if any [invalid]
@@ -336,41 +353,61 @@
353 ** switches between the UTF-16be and UTF-16le encodings occur.
354 **
355 ** The only code points that this function cares about are the NUL character,
356 ** carriage-return, and line-feed.
357 **
358 ** Whether or not this function examines the entire contents of the blob is
359 ** officially unspecified.
360 **
361 ************************************ WARNING **********************************
362 */
363 int looks_like_utf16(const Blob *pContent, int *pFlags){
364 const WCHAR_T *z = (WCHAR_T *)blob_buffer(pContent);
365 unsigned int n = blob_size(pContent);
366 int j, c, result = 1; /* Assume UTF-16 text, prove otherwise */
367
368 if( pFlags ) *pFlags = LOOK_NONE;
369 if( n==0 ) return result; /* Empty file -> text */
370 if( n%sizeof(WCHAR_T) ){
371 if( pFlags ) *pFlags |= LOOK_ODD;
372 result = 0; /* Odd number of bytes -> binary (UTF-8?) */
373 if ( n<sizeof(WCHAR_T) ) return result; /* One byte -> binary (UTF-8?) */
374 }
375 c = *z;
376 if( c==0 ){
377 if( pFlags ) *pFlags |= LOOK_NUL;
378 result = 0; /* NUL character in a file -> binary */
379 }
380 j = ((c!=UTF16BE_LF) && (c!=UTF16LE_LF));
381 while( 1 ){
382 if ( n<sizeof(WCHAR_T) ) break;
383 n -= sizeof(WCHAR_T);
384 c = *++z; ++j;
385 if( c==0 ){
386 if( pFlags ) *pFlags |= LOOK_NUL;
387 result = 0; /* NUL character in a file -> binary */
388 }
389 if( c==UTF16BE_LF || c==UTF16LE_LF ){
390 int c2 = z[-1];
391 if( pFlags ){
392 *pFlags |= LOOK_LF;
393 if( c2==UTF16BE_CR || c2==UTF16LE_CR ){
394 *pFlags |= LOOK_CRLF;
395 }
396 }
397 if( j>UTF16_LENGTH_MASK ){
398 if( pFlags ) *pFlags |= LOOK_LENGTH;
399 result = 0; /* Very long line -> binary */
400 }
401 j = 0;
402 }else if( c==UTF16BE_CR || c==UTF16LE_CR ){
403 if( pFlags ) *pFlags |= LOOK_CR;
404 }
405 }
406 if( j>UTF16_LENGTH_MASK ){
407 if( pFlags ) *pFlags |= LOOK_LENGTH;
408 result = 0; /* Very long line -> binary */
409 }
410 return result; /* No problems seen -> not binary */
411 }
412
413 /*
@@ -410,23 +447,24 @@
447 const Blob *pContent, /* IN: Blob content to perform BOM detection on. */
448 int *pnByte, /* OUT: The number of bytes used for the BOM. */
449 int *pbReverse /* OUT: Non-zero for BOM in reverse byte-order. */
450 ){
451 const unsigned short *z = (unsigned short *)blob_buffer(pContent);
452 int bomSize = sizeof(unsigned short);
453 int size = blob_size(pContent);
454
455 if( size<bomSize ) return 0; /* No: cannot read BOM. */
456 if( size>=(2*bomSize) && z[1]==0 ) return 0; /* No: possible UTF-32. */
457 if( z[0]==0xfffe ){
458 if( pbReverse ) *pbReverse = 1;
459 }else if( z[0]==0xfeff ){
460 if( pbReverse ) *pbReverse = 0;
461 }else{
462 return 0; /* No: UTF-16 byte-order-mark not found. */
463 }
464 if( pnByte ) *pnByte = bomSize;
465 return 1; /* Yes. */
466 }
467
468 /*
469 ** Return true if two DLine elements are identical.
470 */
@@ -892,21 +930,33 @@
930 /*
931 ** Simplify iStart and iStart2:
932 **
933 ** * If iStart is a null-change then move iStart2 into iStart
934 ** * Make sure any null-changes are in canonoical form.
935 ** * Make sure all changes are at character boundaries for
936 ** multi-byte characters.
937 */
938 static void sbsSimplifyLine(SbsLine *p, const char *z){
939 if( p->iStart2==p->iEnd2 ){
940 p->iStart2 = p->iEnd2 = 0;
941 }else if( p->iStart2 ){
942 while( p->iStart2>0 && (z[p->iStart2]&0xc0)==0x80 ) p->iStart2--;
943 while( (z[p->iEnd2]&0xc0)==0x80 ) p->iEnd2++;
944 }
945 if( p->iStart==p->iEnd ){
946 p->iStart = p->iStart2;
947 p->iEnd = p->iEnd2;
948 p->zStart = p->zStart2;
949 p->iStart2 = 0;
950 p->iEnd2 = 0;
951 }
952 if( p->iStart==p->iEnd ){
953 p->iStart = p->iEnd = -1;
954 }else if( p->iStart>0 ){
955 while( p->iStart>0 && (z[p->iStart]&0xc0)==0x80 ) p->iStart--;
956 while( (z[p->iEnd]&0xc0)==0x80 ) p->iEnd++;
957 }
958 }
959
960 /*
961 ** Write out lines that have been edited. Adjust the highlight to cover
962 ** only those parts of the line that actually changed.
@@ -918,10 +968,11 @@
968 DLine *pRight, /* Right line of the change */
969 int lnRight /* Line number of the right line */
970 ){
971 int nLeft; /* Length of left line in bytes */
972 int nRight; /* Length of right line in bytes */
973 int nShort; /* Shortest of left and right */
974 int nPrefix; /* Length of common prefix */
975 int nSuffix; /* Length of common suffix */
976 const char *zLeft; /* Text of the left line */
977 const char *zRight; /* Text of the right line */
978 int nLeftDiff; /* nLeft - nPrefix - nSuffix */
@@ -933,25 +984,31 @@
984
985 nLeft = pLeft->h & LENGTH_MASK;
986 zLeft = pLeft->z;
987 nRight = pRight->h & LENGTH_MASK;
988 zRight = pRight->z;
989 nShort = nLeft<nRight ? nLeft : nRight;
990
991 nPrefix = 0;
992 while( nPrefix<nShort && zLeft[nPrefix]==zRight[nPrefix] ){
993 nPrefix++;
994 }
995 if( nPrefix<nShort ){
996 while( nPrefix>0 && (zLeft[nPrefix]&0xc0)==0x80 ) nPrefix--;
997 }
998 nSuffix = 0;
999 if( nPrefix<nShort ){
1000 while( nSuffix<nShort && zLeft[nLeft-nSuffix-1]==zRight[nRight-nSuffix-1] ){
 
1001 nSuffix++;
1002 }
1003 if( nSuffix<nShort ){
1004 while( nSuffix>0 && (zLeft[nLeft-nSuffix]&0xc0)==0x80 ) nSuffix--;
1005 }
1006 if( nSuffix==nLeft || nSuffix==nRight ) nPrefix = 0;
1007 }
1008 if( nPrefix+nSuffix > nShort ) nPrefix = nShort - nSuffix;
1009
1010
1011 /* A single chunk of text inserted on the right */
1012 if( nPrefix+nSuffix==nLeft ){
1013 sbsWriteLineno(p, lnLeft);
1014 p->iStart2 = p->iEnd2 = 0;
@@ -1007,11 +1064,11 @@
1064 p->zStart = zClassChng;
1065 }
1066 p->iStart2 = nPrefix + aLCS[1];
1067 p->iEnd2 = nLeft - nSuffix;
1068 p->zStart2 = aLCS[3]==nRightDiff ? zClassRm : zClassChng;
1069 sbsSimplifyLine(p, zLeft+nPrefix);
1070 sbsWriteText(p, pLeft, SBS_PAD);
1071 sbsWrite(p, " | ", 3);
1072 sbsWriteLineno(p, lnRight);
1073 p->iStart = nPrefix;
1074 p->iEnd = nPrefix + aLCS[2];
@@ -1022,11 +1079,11 @@
1079 p->zStart = zClassChng;
1080 }
1081 p->iStart2 = nPrefix + aLCS[3];
1082 p->iEnd2 = nRight - nSuffix;
1083 p->zStart2 = aLCS[1]==nLeftDiff ? zClassAdd : zClassChng;
1084 sbsSimplifyLine(p, zRight+nPrefix);
1085 sbsWriteText(p, pRight, SBS_NEWLINE);
1086 return;
1087 }
1088
1089 /* If all else fails, show a single big change between left and right */
@@ -1419,11 +1476,11 @@
1476 /* Delete one line from the left */
1477 s.n = 0;
1478 sbsWriteLineno(&s, a);
1479 s.iStart = 0;
1480 s.zStart = "<span class=\"diffrm\">";
1481 s.iEnd = LENGTH(&A[a]);
1482 sbsWriteText(&s, &A[a], SBS_PAD);
1483 if( s.escHtml ){
1484 sbsWrite(&s, " &lt;\n", 6);
1485 }else{
1486 sbsWrite(&s, " <\n", 3);
@@ -1452,11 +1509,11 @@
1509 sbsWrite(&s, " > ", 3);
1510 }
1511 sbsWriteLineno(&s, b);
1512 s.iStart = 0;
1513 s.zStart = "<span class=\"diffadd\">";
1514 s.iEnd = LENGTH(&B[b]);
1515 sbsWriteText(&s, &B[b], SBS_NEWLINE);
1516 blob_append(pOut, s.zLine, s.n);
1517 assert( mb>0 );
1518 mb--;
1519 b++;
@@ -1464,17 +1521,17 @@
1521 /* Delete from the left and insert on the right */
1522 s.n = 0;
1523 sbsWriteLineno(&s, a);
1524 s.iStart = 0;
1525 s.zStart = "<span class=\"diffrm\">";
1526 s.iEnd = LENGTH(&A[a]);
1527 sbsWriteText(&s, &A[a], SBS_PAD);
1528 sbsWrite(&s, " | ", 3);
1529 sbsWriteLineno(&s, b);
1530 s.iStart = 0;
1531 s.zStart = "<span class=\"diffadd\">";
1532 s.iEnd = LENGTH(&B[b]);
1533 sbsWriteText(&s, &B[b], SBS_NEWLINE);
1534 blob_append(pOut, s.zLine, s.n);
1535 ma--;
1536 mb--;
1537 a++;
@@ -2446,5 +2503,38 @@
2503 for(i=0; i<ann.nOrig; i++){
2504 fossil_print("%s: %.*s\n",
2505 ann.aOrig[i].zSrc, ann.aOrig[i].n, ann.aOrig[i].z);
2506 }
2507 }
2508
2509 /*
2510 ** COMMAND: test-looks-like-utf
2511 **
2512 ** Usage: %fossil test-looks-like-utf FILENAME
2513 **
2514 ** FILENAME is the name of a file to check for textual content in the UTF-8
2515 ** and/or UTF-16 encodings.
2516 */
2517 void looks_like_utf_test_cmd(void){
2518 Blob blob; /* the contents of the specified file */
2519 int eType; /* return value of looks_like_utf8/utf16() */
2520 int fUtf8; /* return value of starts_with_utf8_bom() */
2521 int fUtf16; /* return value of starts_with_utf16_bom() */
2522 int lookFlags; /* output flags from looks_like_utf8/utf16() */
2523 if( g.argc<3 ) usage("FILENAME");
2524 blob_read_from_file(&blob, g.argv[2]);
2525 fUtf8 = starts_with_utf8_bom(&blob, 0);
2526 fUtf16 = starts_with_utf16_bom(&blob, 0, 0);
2527 eType = fUtf16 ? looks_like_utf16(&blob, &lookFlags) :
2528 looks_like_utf8(&blob, &lookFlags);
2529 fossil_print("File \"%s\" has %d bytes.\n",g.argv[2],blob_size(&blob));
2530 fossil_print("Starts with UTF-8 BOM: %s\n",fUtf8?"yes":"no");
2531 fossil_print("Starts with UTF-16 BOM: %s\n",fUtf16?"yes":"no");
2532 fossil_print("Looks like UTF-%s: %s\n",fUtf16?"16":"8",eType?"yes":"no");
2533 fossil_print("Has flag LOOK_NUL: %s\n",(lookFlags&LOOK_NUL)?"yes":"no");
2534 fossil_print("Has flag LOOK_CR: %s\n",(lookFlags&LOOK_CR)?"yes":"no");
2535 fossil_print("Has flag LOOK_LF: %s\n",(lookFlags&LOOK_LF)?"yes":"no");
2536 fossil_print("Has flag LOOK_CRLF: %s\n",(lookFlags&LOOK_CRLF)?"yes":"no");
2537 fossil_print("Has flag LOOK_LENGTH: %s\n",(lookFlags&LOOK_LENGTH)?"yes":"no");
2538 fossil_print("Has flag LOOK_ODD: %s\n",(lookFlags&LOOK_ODD)?"yes":"no");
2539 blob_reset(&blob);
2540 }
2541
+35 -27
--- src/file.c
+++ src/file.c
@@ -64,23 +64,24 @@
6464
** Fill stat buf with information received from stat() or lstat().
6565
** lstat() is called on Unix if isWd is TRUE and allow-symlinks setting is on.
6666
**
6767
*/
6868
static int fossil_stat(const char *zFilename, struct stat *buf, int isWd){
69
+ int rc;
6970
#if !defined(_WIN32)
71
+ char *zMbcs = fossil_utf8_to_filename(zFilename);
7072
if( isWd && g.allowSymlinks ){
71
- return lstat(zFilename, buf);
73
+ rc = lstat(zMbcs, buf);
7274
}else{
73
- return stat(zFilename, buf);
75
+ rc = stat(zMbcs, buf);
7476
}
7577
#else
76
- int rc = 0;
7778
wchar_t *zMbcs = fossil_utf8_to_filename(zFilename);
7879
rc = _wstati64(zMbcs, buf);
80
+#endif
7981
fossil_filename_free(zMbcs);
8082
return rc;
81
-#endif
8283
}
8384
8485
/*
8586
** Fill in the fileStat variable for the file named zFilename.
8687
** If zFilename==0, then use the previous value of fileStat if
@@ -305,14 +306,15 @@
305306
*/
306307
int file_access(const char *zFilename, int flags){
307308
#ifdef _WIN32
308309
wchar_t *zMbcs = fossil_utf8_to_filename(zFilename);
309310
int rc = _waccess(zMbcs, flags);
310
- fossil_filename_free(zMbcs);
311311
#else
312
- int rc = access(zFilename, flags);
312
+ char *zMbcs = fossil_utf8_to_filename(zFilename);
313
+ int rc = access(zMbcs, flags);
313314
#endif
315
+ fossil_filename_free(zMbcs);
314316
return rc;
315317
}
316318
317319
/*
318320
** Find an unused filename similar to zBase with zSuffix appended.
@@ -402,19 +404,20 @@
402404
#if !defined(_WIN32)
403405
struct timeval tv[2];
404406
memset(tv, 0, sizeof(tv[0])*2);
405407
tv[0].tv_sec = newMTime;
406408
tv[1].tv_sec = newMTime;
407
- utimes(zFilename, tv);
409
+ char *zMbcs = fossil_utf8_to_filename(zFilename);
410
+ utimes(zMbcs, tv);
408411
#else
409412
struct _utimbuf tb;
410413
wchar_t *zMbcs = fossil_utf8_to_filename(zFilename);
411414
tb.actime = newMTime;
412415
tb.modtime = newMTime;
413416
_wutime(zMbcs, &tb);
414
- fossil_filename_free(zMbcs);
415417
#endif
418
+ fossil_filename_free(zMbcs);
416419
}
417420
418421
/*
419422
** COMMAND: test-set-mtime
420423
**
@@ -443,14 +446,15 @@
443446
*/
444447
void file_delete(const char *zFilename){
445448
#ifdef _WIN32
446449
wchar_t *z = fossil_utf8_to_filename(zFilename);
447450
_wunlink(z);
448
- fossil_filename_free(z);
449451
#else
452
+ char *z = fossil_utf8_to_filename(zFilename);
450453
unlink(zFilename);
451454
#endif
455
+ fossil_filename_free(z);
452456
}
453457
454458
/*
455459
** Create the directory named in the argument, if it does not already
456460
** exist. If forceFlag is 1, delete any prior non-directory object
@@ -464,18 +468,18 @@
464468
if( !forceFlag ) return 1;
465469
file_delete(zName);
466470
}
467471
if( rc!=1 ){
468472
#if defined(_WIN32)
469
- int rc;
470473
wchar_t *zMbcs = fossil_utf8_to_filename(zName);
471474
rc = _wmkdir(zMbcs);
475
+#else
476
+ char *zMbcs = fossil_utf8_to_filename(zName);
477
+ rc = mkdir(zName, 0755);
478
+#endif
472479
fossil_filename_free(zMbcs);
473480
return rc;
474
-#else
475
- return mkdir(zName, 0755);
476
-#endif
477481
}
478482
return 0;
479483
}
480484
481485
/*
@@ -580,11 +584,11 @@
580584
}
581585
582586
/*
583587
** Simplify a filename by
584588
**
585
-** * Convert all \ into / on windows
589
+** * Convert all \ into / on windows and cygwin
586590
** * removing any trailing and duplicate /
587591
** * removing /./
588592
** * removing /A/../
589593
**
590594
** Changes are made in-place. Return the new name length.
@@ -705,13 +709,13 @@
705709
** Return true if zPath is an absolute pathname. Return false
706710
** if it is relative.
707711
*/
708712
int file_is_absolute_path(const char *zPath){
709713
if( zPath[0]=='/'
710
-#if defined(_WIN32)
714
+#if defined(_WIN32) || defined(__CYGWIN__)
711715
|| zPath[0]=='\\'
712
- || (strlen(zPath)>3 && zPath[1]==':'
716
+ || (fossil_isalpha(zPath[0]) && zPath[1]==':'
713717
&& (zPath[2]=='\\' || zPath[2]=='/'))
714718
#endif
715719
){
716720
return 1;
717721
}else{
@@ -728,21 +732,21 @@
728732
** If the slash parameter is non-zero, the trailing slash, if any,
729733
** is retained.
730734
*/
731735
void file_canonical_name(const char *zOrigName, Blob *pOut, int slash){
732736
if( file_is_absolute_path(zOrigName) ){
733
-#if defined(_WIN32)
737
+#if defined(_WIN32) || defined(__CYGWIN__)
734738
char *zOut;
735739
#endif
736740
blob_set(pOut, zOrigName);
737741
blob_materialize(pOut);
738
-#if defined(_WIN32)
742
+#if defined(_WIN32) || defined(__CYGWIN__)
739743
/*
740
- ** On Windows, normalize the drive letter to upper case.
744
+ ** On Windows/cygwin, normalize the drive letter to upper case.
741745
*/
742746
zOut = blob_str(pOut);
743
- if( fossil_isalpha(zOut[0]) && zOut[1]==':' ){
747
+ if( fossil_islower(zOut[0]) && zOut[1]==':' ){
744748
zOut[0] = fossil_toupper(zOut[0]);
745749
}
746750
#endif
747751
}else{
748752
char zPwd[2000];
@@ -749,11 +753,11 @@
749753
file_getcwd(zPwd, sizeof(zPwd)-strlen(zOrigName));
750754
#if defined(_WIN32)
751755
/*
752756
** On Windows, normalize the drive letter to upper case.
753757
*/
754
- if( fossil_isalpha(zPwd[0]) && zPwd[1]==':' ){
758
+ if( fossil_islower(zPwd[0]) && zPwd[1]==':' ){
755759
zPwd[0] = fossil_toupper(zPwd[0]);
756760
}
757761
#endif
758762
blob_zero(pOut);
759763
blob_appendf(pOut, "%//%/", zPwd, zOrigName);
@@ -798,12 +802,12 @@
798802
** contain no "/./" or "/../" terms.
799803
*/
800804
int file_is_canonical(const char *z){
801805
int i;
802806
if( z[0]!='/'
803
-#if defined(_WIN32)
804
- && (z[0]==0 || z[1]!=':' || z[2]!='/')
807
+#if defined(_WIN32) || defined(__CYGWIN__)
808
+ && (!fossil_isupper(z[0]) || z[1]!=':' || z[2]!='/')
805809
#endif
806810
) return 0;
807811
808812
for(i=0; z[i]; i++){
809813
if( z[i]=='\\' ) return 0;
@@ -1011,23 +1015,26 @@
10111015
10121016
/*
10131017
** Construct a random temporary filename into zBuf[].
10141018
*/
10151019
void file_tempname(int nBuf, char *zBuf){
1016
- static const char *azDirs[] = {
10171020
#if defined(_WIN32)
1021
+ const char *azDirs[] = {
10181022
0, /* GetTempPath */
10191023
0, /* TEMP */
10201024
0, /* TMP */
1025
+ ".",
1026
+ };
10211027
#else
1028
+ static const char *const azDirs[] = {
10221029
"/var/tmp",
10231030
"/usr/tmp",
10241031
"/tmp",
10251032
"/temp",
1026
-#endif
10271033
".",
10281034
};
1035
+#endif
10291036
static const unsigned char zChars[] =
10301037
"abcdefghijklmnopqrstuvwxyz"
10311038
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
10321039
"0123456789";
10331040
unsigned int i, j;
@@ -1070,12 +1077,13 @@
10701077
}
10711078
zBuf[j] = 0;
10721079
}while( file_size(zBuf)>=0 );
10731080
10741081
#if defined(_WIN32)
1075
- fossil_unicode_free((char *)azDirs[1]);
1076
- fossil_unicode_free((char *)azDirs[2]);
1082
+ fossil_filename_free((char *)azDirs[0]);
1083
+ fossil_filename_free((char *)azDirs[1]);
1084
+ fossil_filename_free((char *)azDirs[2]);
10771085
#endif
10781086
}
10791087
10801088
10811089
/*
10821090
--- src/file.c
+++ src/file.c
@@ -64,23 +64,24 @@
64 ** Fill stat buf with information received from stat() or lstat().
65 ** lstat() is called on Unix if isWd is TRUE and allow-symlinks setting is on.
66 **
67 */
68 static int fossil_stat(const char *zFilename, struct stat *buf, int isWd){
 
69 #if !defined(_WIN32)
 
70 if( isWd && g.allowSymlinks ){
71 return lstat(zFilename, buf);
72 }else{
73 return stat(zFilename, buf);
74 }
75 #else
76 int rc = 0;
77 wchar_t *zMbcs = fossil_utf8_to_filename(zFilename);
78 rc = _wstati64(zMbcs, buf);
 
79 fossil_filename_free(zMbcs);
80 return rc;
81 #endif
82 }
83
84 /*
85 ** Fill in the fileStat variable for the file named zFilename.
86 ** If zFilename==0, then use the previous value of fileStat if
@@ -305,14 +306,15 @@
305 */
306 int file_access(const char *zFilename, int flags){
307 #ifdef _WIN32
308 wchar_t *zMbcs = fossil_utf8_to_filename(zFilename);
309 int rc = _waccess(zMbcs, flags);
310 fossil_filename_free(zMbcs);
311 #else
312 int rc = access(zFilename, flags);
 
313 #endif
 
314 return rc;
315 }
316
317 /*
318 ** Find an unused filename similar to zBase with zSuffix appended.
@@ -402,19 +404,20 @@
402 #if !defined(_WIN32)
403 struct timeval tv[2];
404 memset(tv, 0, sizeof(tv[0])*2);
405 tv[0].tv_sec = newMTime;
406 tv[1].tv_sec = newMTime;
407 utimes(zFilename, tv);
 
408 #else
409 struct _utimbuf tb;
410 wchar_t *zMbcs = fossil_utf8_to_filename(zFilename);
411 tb.actime = newMTime;
412 tb.modtime = newMTime;
413 _wutime(zMbcs, &tb);
414 fossil_filename_free(zMbcs);
415 #endif
 
416 }
417
418 /*
419 ** COMMAND: test-set-mtime
420 **
@@ -443,14 +446,15 @@
443 */
444 void file_delete(const char *zFilename){
445 #ifdef _WIN32
446 wchar_t *z = fossil_utf8_to_filename(zFilename);
447 _wunlink(z);
448 fossil_filename_free(z);
449 #else
 
450 unlink(zFilename);
451 #endif
 
452 }
453
454 /*
455 ** Create the directory named in the argument, if it does not already
456 ** exist. If forceFlag is 1, delete any prior non-directory object
@@ -464,18 +468,18 @@
464 if( !forceFlag ) return 1;
465 file_delete(zName);
466 }
467 if( rc!=1 ){
468 #if defined(_WIN32)
469 int rc;
470 wchar_t *zMbcs = fossil_utf8_to_filename(zName);
471 rc = _wmkdir(zMbcs);
 
 
 
 
472 fossil_filename_free(zMbcs);
473 return rc;
474 #else
475 return mkdir(zName, 0755);
476 #endif
477 }
478 return 0;
479 }
480
481 /*
@@ -580,11 +584,11 @@
580 }
581
582 /*
583 ** Simplify a filename by
584 **
585 ** * Convert all \ into / on windows
586 ** * removing any trailing and duplicate /
587 ** * removing /./
588 ** * removing /A/../
589 **
590 ** Changes are made in-place. Return the new name length.
@@ -705,13 +709,13 @@
705 ** Return true if zPath is an absolute pathname. Return false
706 ** if it is relative.
707 */
708 int file_is_absolute_path(const char *zPath){
709 if( zPath[0]=='/'
710 #if defined(_WIN32)
711 || zPath[0]=='\\'
712 || (strlen(zPath)>3 && zPath[1]==':'
713 && (zPath[2]=='\\' || zPath[2]=='/'))
714 #endif
715 ){
716 return 1;
717 }else{
@@ -728,21 +732,21 @@
728 ** If the slash parameter is non-zero, the trailing slash, if any,
729 ** is retained.
730 */
731 void file_canonical_name(const char *zOrigName, Blob *pOut, int slash){
732 if( file_is_absolute_path(zOrigName) ){
733 #if defined(_WIN32)
734 char *zOut;
735 #endif
736 blob_set(pOut, zOrigName);
737 blob_materialize(pOut);
738 #if defined(_WIN32)
739 /*
740 ** On Windows, normalize the drive letter to upper case.
741 */
742 zOut = blob_str(pOut);
743 if( fossil_isalpha(zOut[0]) && zOut[1]==':' ){
744 zOut[0] = fossil_toupper(zOut[0]);
745 }
746 #endif
747 }else{
748 char zPwd[2000];
@@ -749,11 +753,11 @@
749 file_getcwd(zPwd, sizeof(zPwd)-strlen(zOrigName));
750 #if defined(_WIN32)
751 /*
752 ** On Windows, normalize the drive letter to upper case.
753 */
754 if( fossil_isalpha(zPwd[0]) && zPwd[1]==':' ){
755 zPwd[0] = fossil_toupper(zPwd[0]);
756 }
757 #endif
758 blob_zero(pOut);
759 blob_appendf(pOut, "%//%/", zPwd, zOrigName);
@@ -798,12 +802,12 @@
798 ** contain no "/./" or "/../" terms.
799 */
800 int file_is_canonical(const char *z){
801 int i;
802 if( z[0]!='/'
803 #if defined(_WIN32)
804 && (z[0]==0 || z[1]!=':' || z[2]!='/')
805 #endif
806 ) return 0;
807
808 for(i=0; z[i]; i++){
809 if( z[i]=='\\' ) return 0;
@@ -1011,23 +1015,26 @@
1011
1012 /*
1013 ** Construct a random temporary filename into zBuf[].
1014 */
1015 void file_tempname(int nBuf, char *zBuf){
1016 static const char *azDirs[] = {
1017 #if defined(_WIN32)
 
1018 0, /* GetTempPath */
1019 0, /* TEMP */
1020 0, /* TMP */
 
 
1021 #else
 
1022 "/var/tmp",
1023 "/usr/tmp",
1024 "/tmp",
1025 "/temp",
1026 #endif
1027 ".",
1028 };
 
1029 static const unsigned char zChars[] =
1030 "abcdefghijklmnopqrstuvwxyz"
1031 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1032 "0123456789";
1033 unsigned int i, j;
@@ -1070,12 +1077,13 @@
1070 }
1071 zBuf[j] = 0;
1072 }while( file_size(zBuf)>=0 );
1073
1074 #if defined(_WIN32)
1075 fossil_unicode_free((char *)azDirs[1]);
1076 fossil_unicode_free((char *)azDirs[2]);
 
1077 #endif
1078 }
1079
1080
1081 /*
1082
--- src/file.c
+++ src/file.c
@@ -64,23 +64,24 @@
64 ** Fill stat buf with information received from stat() or lstat().
65 ** lstat() is called on Unix if isWd is TRUE and allow-symlinks setting is on.
66 **
67 */
68 static int fossil_stat(const char *zFilename, struct stat *buf, int isWd){
69 int rc;
70 #if !defined(_WIN32)
71 char *zMbcs = fossil_utf8_to_filename(zFilename);
72 if( isWd && g.allowSymlinks ){
73 rc = lstat(zMbcs, buf);
74 }else{
75 rc = stat(zMbcs, buf);
76 }
77 #else
 
78 wchar_t *zMbcs = fossil_utf8_to_filename(zFilename);
79 rc = _wstati64(zMbcs, buf);
80 #endif
81 fossil_filename_free(zMbcs);
82 return rc;
 
83 }
84
85 /*
86 ** Fill in the fileStat variable for the file named zFilename.
87 ** If zFilename==0, then use the previous value of fileStat if
@@ -305,14 +306,15 @@
306 */
307 int file_access(const char *zFilename, int flags){
308 #ifdef _WIN32
309 wchar_t *zMbcs = fossil_utf8_to_filename(zFilename);
310 int rc = _waccess(zMbcs, flags);
 
311 #else
312 char *zMbcs = fossil_utf8_to_filename(zFilename);
313 int rc = access(zMbcs, flags);
314 #endif
315 fossil_filename_free(zMbcs);
316 return rc;
317 }
318
319 /*
320 ** Find an unused filename similar to zBase with zSuffix appended.
@@ -402,19 +404,20 @@
404 #if !defined(_WIN32)
405 struct timeval tv[2];
406 memset(tv, 0, sizeof(tv[0])*2);
407 tv[0].tv_sec = newMTime;
408 tv[1].tv_sec = newMTime;
409 char *zMbcs = fossil_utf8_to_filename(zFilename);
410 utimes(zMbcs, tv);
411 #else
412 struct _utimbuf tb;
413 wchar_t *zMbcs = fossil_utf8_to_filename(zFilename);
414 tb.actime = newMTime;
415 tb.modtime = newMTime;
416 _wutime(zMbcs, &tb);
 
417 #endif
418 fossil_filename_free(zMbcs);
419 }
420
421 /*
422 ** COMMAND: test-set-mtime
423 **
@@ -443,14 +446,15 @@
446 */
447 void file_delete(const char *zFilename){
448 #ifdef _WIN32
449 wchar_t *z = fossil_utf8_to_filename(zFilename);
450 _wunlink(z);
 
451 #else
452 char *z = fossil_utf8_to_filename(zFilename);
453 unlink(zFilename);
454 #endif
455 fossil_filename_free(z);
456 }
457
458 /*
459 ** Create the directory named in the argument, if it does not already
460 ** exist. If forceFlag is 1, delete any prior non-directory object
@@ -464,18 +468,18 @@
468 if( !forceFlag ) return 1;
469 file_delete(zName);
470 }
471 if( rc!=1 ){
472 #if defined(_WIN32)
 
473 wchar_t *zMbcs = fossil_utf8_to_filename(zName);
474 rc = _wmkdir(zMbcs);
475 #else
476 char *zMbcs = fossil_utf8_to_filename(zName);
477 rc = mkdir(zName, 0755);
478 #endif
479 fossil_filename_free(zMbcs);
480 return rc;
 
 
 
481 }
482 return 0;
483 }
484
485 /*
@@ -580,11 +584,11 @@
584 }
585
586 /*
587 ** Simplify a filename by
588 **
589 ** * Convert all \ into / on windows and cygwin
590 ** * removing any trailing and duplicate /
591 ** * removing /./
592 ** * removing /A/../
593 **
594 ** Changes are made in-place. Return the new name length.
@@ -705,13 +709,13 @@
709 ** Return true if zPath is an absolute pathname. Return false
710 ** if it is relative.
711 */
712 int file_is_absolute_path(const char *zPath){
713 if( zPath[0]=='/'
714 #if defined(_WIN32) || defined(__CYGWIN__)
715 || zPath[0]=='\\'
716 || (fossil_isalpha(zPath[0]) && zPath[1]==':'
717 && (zPath[2]=='\\' || zPath[2]=='/'))
718 #endif
719 ){
720 return 1;
721 }else{
@@ -728,21 +732,21 @@
732 ** If the slash parameter is non-zero, the trailing slash, if any,
733 ** is retained.
734 */
735 void file_canonical_name(const char *zOrigName, Blob *pOut, int slash){
736 if( file_is_absolute_path(zOrigName) ){
737 #if defined(_WIN32) || defined(__CYGWIN__)
738 char *zOut;
739 #endif
740 blob_set(pOut, zOrigName);
741 blob_materialize(pOut);
742 #if defined(_WIN32) || defined(__CYGWIN__)
743 /*
744 ** On Windows/cygwin, normalize the drive letter to upper case.
745 */
746 zOut = blob_str(pOut);
747 if( fossil_islower(zOut[0]) && zOut[1]==':' ){
748 zOut[0] = fossil_toupper(zOut[0]);
749 }
750 #endif
751 }else{
752 char zPwd[2000];
@@ -749,11 +753,11 @@
753 file_getcwd(zPwd, sizeof(zPwd)-strlen(zOrigName));
754 #if defined(_WIN32)
755 /*
756 ** On Windows, normalize the drive letter to upper case.
757 */
758 if( fossil_islower(zPwd[0]) && zPwd[1]==':' ){
759 zPwd[0] = fossil_toupper(zPwd[0]);
760 }
761 #endif
762 blob_zero(pOut);
763 blob_appendf(pOut, "%//%/", zPwd, zOrigName);
@@ -798,12 +802,12 @@
802 ** contain no "/./" or "/../" terms.
803 */
804 int file_is_canonical(const char *z){
805 int i;
806 if( z[0]!='/'
807 #if defined(_WIN32) || defined(__CYGWIN__)
808 && (!fossil_isupper(z[0]) || z[1]!=':' || z[2]!='/')
809 #endif
810 ) return 0;
811
812 for(i=0; z[i]; i++){
813 if( z[i]=='\\' ) return 0;
@@ -1011,23 +1015,26 @@
1015
1016 /*
1017 ** Construct a random temporary filename into zBuf[].
1018 */
1019 void file_tempname(int nBuf, char *zBuf){
 
1020 #if defined(_WIN32)
1021 const char *azDirs[] = {
1022 0, /* GetTempPath */
1023 0, /* TEMP */
1024 0, /* TMP */
1025 ".",
1026 };
1027 #else
1028 static const char *const azDirs[] = {
1029 "/var/tmp",
1030 "/usr/tmp",
1031 "/tmp",
1032 "/temp",
 
1033 ".",
1034 };
1035 #endif
1036 static const unsigned char zChars[] =
1037 "abcdefghijklmnopqrstuvwxyz"
1038 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1039 "0123456789";
1040 unsigned int i, j;
@@ -1070,12 +1077,13 @@
1077 }
1078 zBuf[j] = 0;
1079 }while( file_size(zBuf)>=0 );
1080
1081 #if defined(_WIN32)
1082 fossil_filename_free((char *)azDirs[0]);
1083 fossil_filename_free((char *)azDirs[1]);
1084 fossil_filename_free((char *)azDirs[2]);
1085 #endif
1086 }
1087
1088
1089 /*
1090
+1 -1
--- src/finfo.c
+++ src/finfo.c
@@ -418,11 +418,11 @@
418418
}else{
419419
@ <b>Deleted</b> by check-in
420420
}
421421
}
422422
hyperlink_to_uuid(zShortCkin);
423
- @ %h(zCom) (user:
423
+ @ %w(zCom) (user:
424424
hyperlink_to_user(zUser, zDate, "");
425425
@ branch: %h(zBr))
426426
if( g.perm.Hyperlink && zUuid ){
427427
const char *z = zFilename;
428428
if( fpid ){
429429
--- src/finfo.c
+++ src/finfo.c
@@ -418,11 +418,11 @@
418 }else{
419 @ <b>Deleted</b> by check-in
420 }
421 }
422 hyperlink_to_uuid(zShortCkin);
423 @ %h(zCom) (user:
424 hyperlink_to_user(zUser, zDate, "");
425 @ branch: %h(zBr))
426 if( g.perm.Hyperlink && zUuid ){
427 const char *z = zFilename;
428 if( fpid ){
429
--- src/finfo.c
+++ src/finfo.c
@@ -418,11 +418,11 @@
418 }else{
419 @ <b>Deleted</b> by check-in
420 }
421 }
422 hyperlink_to_uuid(zShortCkin);
423 @ %w(zCom) (user:
424 hyperlink_to_user(zUser, zDate, "");
425 @ branch: %h(zBr))
426 if( g.perm.Hyperlink && zUuid ){
427 const char *z = zFilename;
428 if( fpid ){
429
+40 -24
--- src/glob.c
+++ src/glob.c
@@ -29,16 +29,17 @@
2929
** zVal: "x"
3030
** zGlobList: "*.o,*.obj"
3131
**
3232
** Result: "(x GLOB '*.o' OR x GLOB '*.obj')"
3333
**
34
-** Each element of the GLOB list may optionally be enclosed in either '...'
35
-** or "...". This allows commas in the expression. Whitespace at the
36
-** beginning and end of each GLOB pattern is ignored, except when enclosed
37
-** within '...' or "...".
34
+** Commas and whitespace are considered to be element delimters. Each
35
+** element of the GLOB list may optionally be enclosed in either '...' or
36
+** "...". This allows commas and/or whitespace to be used in the elements
37
+** themselves.
3838
**
39
-** This routine makes no effort to free the memory space it uses.
39
+** This routine makes no effort to free the memory space it uses, which
40
+** currently consists of a blob object and its contents.
4041
*/
4142
char *glob_expr(const char *zVal, const char *zGlobList){
4243
Blob expr;
4344
char *zSep = "(";
4445
int nTerm = 0;
@@ -46,21 +47,24 @@
4647
int cTerm;
4748
4849
if( zGlobList==0 || zGlobList[0]==0 ) return "0";
4950
blob_zero(&expr);
5051
while( zGlobList[0] ){
51
- while( fossil_isspace(zGlobList[0]) || zGlobList[0]==',' ) zGlobList++;
52
+ while( fossil_isspace(zGlobList[0]) || zGlobList[0]==',' ){
53
+ zGlobList++; /* Skip leading commas, spaces, and newlines */
54
+ }
5255
if( zGlobList[0]==0 ) break;
5356
if( zGlobList[0]=='\'' || zGlobList[0]=='"' ){
5457
cTerm = zGlobList[0];
5558
zGlobList++;
5659
}else{
5760
cTerm = ',';
5861
}
59
- for(i=0; zGlobList[i] && zGlobList[i]!=cTerm; i++){}
60
- if( cTerm==',' ){
61
- while( i>0 && fossil_isspace(zGlobList[i-1]) ){ i--; }
62
+ /* Find the next delimter (or the end of the string). */
63
+ for(i=0; zGlobList[i] && zGlobList[i]!=cTerm; i++){
64
+ if( cTerm!=',' ) continue; /* If quoted, keep going. */
65
+ if( fossil_isspace(zGlobList[i]) ) break; /* If space, stop. */
6266
}
6367
blob_appendf(&expr, "%s%s GLOB '%#q'", zSep, zVal, i, zGlobList);
6468
zSep = " OR ";
6569
if( cTerm!=',' && zGlobList[i] ) i++;
6670
zGlobList += i;
@@ -85,24 +89,24 @@
8589
char **azPattern; /* Array of pointers to patterns */
8690
};
8791
#endif /* INTERFACE */
8892
8993
/*
90
-** zPatternList is a comma-separate list of glob patterns. Parse up
94
+** zPatternList is a comma-separated list of glob patterns. Parse up
9195
** that list and use it to create a new Glob object.
9296
**
9397
** Elements of the glob list may be optionally enclosed in single our
94
-** double-quotes. This allows a comma to be part of a glob.
98
+** double-quotes. This allows a comma to be part of a glob pattern.
9599
**
96100
** Leading and trailing spaces on unquoted glob patterns are ignored.
97101
**
98102
** An empty or null pattern list results in a null glob, which will
99103
** match nothing.
100104
*/
101105
Glob *glob_create(const char *zPatternList){
102106
int nList; /* Size of zPatternList in bytes */
103
- int i, j; /* Loop counters */
107
+ int i; /* Loop counters */
104108
Glob *p; /* The glob being created */
105109
char *z; /* Copy of the pattern list */
106110
char delimiter; /* '\'' or '\"' or 0 */
107111
108112
if( zPatternList==0 || zPatternList[0]==0 ) return 0;
@@ -110,27 +114,26 @@
110114
p = fossil_malloc( sizeof(*p) + nList+1 );
111115
memset(p, 0, sizeof(*p));
112116
z = (char*)&p[1];
113117
memcpy(z, zPatternList, nList+1);
114118
while( z[0] ){
115
- while( z[0]==',' || z[0]==' ' || z[0]=='\n' || z[0]=='\r' ){
116
- z++; /* Skip leading spaces and newlines */
119
+ while( fossil_isspace(z[0]) || z[0]==',' ){
120
+ z++; /* Skip leading commas, spaces, and newlines */
117121
}
122
+ if( z[0]==0 ) break;
118123
if( z[0]=='\'' || z[0]=='"' ){
119124
delimiter = z[0];
120125
z++;
121126
}else{
122127
delimiter = ',';
123128
}
124
- if( z[0]==0 ) break;
125129
p->azPattern = fossil_realloc(p->azPattern, (p->nPattern+1)*sizeof(char*) );
126130
p->azPattern[p->nPattern++] = z;
127
- for(i=0; z[i] && z[i]!=delimiter && z[i]!='\n' && z[i]!='\r'; i++){}
128
- if( delimiter==',' ){
129
- /* Remove trailing spaces / newlines on a comma-delimited pattern */
130
- for(j=i; j>1 && (z[j-1]==' ' || z[j-1]=='\n' || z[j-1]=='\r'); j--){}
131
- if( j<i ) z[j] = 0;
131
+ /* Find the next delimter (or the end of the string). */
132
+ for(i=0; z[i] && z[i]!=delimiter; i++){
133
+ if( delimiter!=',' ) continue; /* If quoted, keep going. */
134
+ if( fossil_isspace(z[i]) ) break; /* If space, stop. */
132135
}
133136
if( z[i]==0 ) break;
134137
z[i] = 0;
135138
z += i+1;
136139
}
@@ -245,22 +248,35 @@
245248
/*
246249
** COMMAND: test-glob
247250
**
248251
** Usage: %fossil test-glob PATTERN STRING...
249252
**
250
-** PATTERN is a comma-separated list of glob patterns. Show which of
251
-** the STRINGs that follow match the PATTERN.
253
+** PATTERN is a comma- and whitespace-separated list of optionally
254
+** quoted glob patterns. Show which of the STRINGs that follow match
255
+** the PATTERN.
256
+**
257
+** If PATTERN begins with "@" the the rest of the pattern is understood
258
+** to be a setting name (such as binary-glob, crln-glob, or encoding-glob)
259
+** and the value of that setting is used as the actually glob pattern.
252260
*/
253261
void glob_test_cmd(void){
254262
Glob *pGlob;
255263
int i;
264
+ char *zPattern;
256265
if( g.argc<4 ) usage("PATTERN STRING ...");
257
- fossil_print("SQL expression: %s\n", glob_expr("x", g.argv[2]));
258
- pGlob = glob_create(g.argv[2]);
266
+ zPattern = g.argv[2];
267
+ if( zPattern[0]=='@' ){
268
+ db_find_and_open_repository(OPEN_ANY_SCHEMA,0);
269
+ zPattern = db_get(zPattern+1, 0);
270
+ if( zPattern==0 ) fossil_fatal("no such setting: %s", g.argv[2]+1);
271
+ fossil_print("GLOB pattern: %s\n", zPattern);
272
+ }
273
+ fossil_print("SQL expression: %s\n", glob_expr("x", zPattern));
274
+ pGlob = glob_create(zPattern);
259275
for(i=0; i<pGlob->nPattern; i++){
260276
fossil_print("pattern[%d] = [%s]\n", i, pGlob->azPattern[i]);
261277
}
262278
for(i=3; i<g.argc; i++){
263279
fossil_print("%d %s\n", glob_match(pGlob, g.argv[i]), g.argv[i]);
264280
}
265281
glob_free(pGlob);
266282
}
267283
--- src/glob.c
+++ src/glob.c
@@ -29,16 +29,17 @@
29 ** zVal: "x"
30 ** zGlobList: "*.o,*.obj"
31 **
32 ** Result: "(x GLOB '*.o' OR x GLOB '*.obj')"
33 **
34 ** Each element of the GLOB list may optionally be enclosed in either '...'
35 ** or "...". This allows commas in the expression. Whitespace at the
36 ** beginning and end of each GLOB pattern is ignored, except when enclosed
37 ** within '...' or "...".
38 **
39 ** This routine makes no effort to free the memory space it uses.
 
40 */
41 char *glob_expr(const char *zVal, const char *zGlobList){
42 Blob expr;
43 char *zSep = "(";
44 int nTerm = 0;
@@ -46,21 +47,24 @@
46 int cTerm;
47
48 if( zGlobList==0 || zGlobList[0]==0 ) return "0";
49 blob_zero(&expr);
50 while( zGlobList[0] ){
51 while( fossil_isspace(zGlobList[0]) || zGlobList[0]==',' ) zGlobList++;
 
 
52 if( zGlobList[0]==0 ) break;
53 if( zGlobList[0]=='\'' || zGlobList[0]=='"' ){
54 cTerm = zGlobList[0];
55 zGlobList++;
56 }else{
57 cTerm = ',';
58 }
59 for(i=0; zGlobList[i] && zGlobList[i]!=cTerm; i++){}
60 if( cTerm==',' ){
61 while( i>0 && fossil_isspace(zGlobList[i-1]) ){ i--; }
 
62 }
63 blob_appendf(&expr, "%s%s GLOB '%#q'", zSep, zVal, i, zGlobList);
64 zSep = " OR ";
65 if( cTerm!=',' && zGlobList[i] ) i++;
66 zGlobList += i;
@@ -85,24 +89,24 @@
85 char **azPattern; /* Array of pointers to patterns */
86 };
87 #endif /* INTERFACE */
88
89 /*
90 ** zPatternList is a comma-separate list of glob patterns. Parse up
91 ** that list and use it to create a new Glob object.
92 **
93 ** Elements of the glob list may be optionally enclosed in single our
94 ** double-quotes. This allows a comma to be part of a glob.
95 **
96 ** Leading and trailing spaces on unquoted glob patterns are ignored.
97 **
98 ** An empty or null pattern list results in a null glob, which will
99 ** match nothing.
100 */
101 Glob *glob_create(const char *zPatternList){
102 int nList; /* Size of zPatternList in bytes */
103 int i, j; /* Loop counters */
104 Glob *p; /* The glob being created */
105 char *z; /* Copy of the pattern list */
106 char delimiter; /* '\'' or '\"' or 0 */
107
108 if( zPatternList==0 || zPatternList[0]==0 ) return 0;
@@ -110,27 +114,26 @@
110 p = fossil_malloc( sizeof(*p) + nList+1 );
111 memset(p, 0, sizeof(*p));
112 z = (char*)&p[1];
113 memcpy(z, zPatternList, nList+1);
114 while( z[0] ){
115 while( z[0]==',' || z[0]==' ' || z[0]=='\n' || z[0]=='\r' ){
116 z++; /* Skip leading spaces and newlines */
117 }
 
118 if( z[0]=='\'' || z[0]=='"' ){
119 delimiter = z[0];
120 z++;
121 }else{
122 delimiter = ',';
123 }
124 if( z[0]==0 ) break;
125 p->azPattern = fossil_realloc(p->azPattern, (p->nPattern+1)*sizeof(char*) );
126 p->azPattern[p->nPattern++] = z;
127 for(i=0; z[i] && z[i]!=delimiter && z[i]!='\n' && z[i]!='\r'; i++){}
128 if( delimiter==',' ){
129 /* Remove trailing spaces / newlines on a comma-delimited pattern */
130 for(j=i; j>1 && (z[j-1]==' ' || z[j-1]=='\n' || z[j-1]=='\r'); j--){}
131 if( j<i ) z[j] = 0;
132 }
133 if( z[i]==0 ) break;
134 z[i] = 0;
135 z += i+1;
136 }
@@ -245,22 +248,35 @@
245 /*
246 ** COMMAND: test-glob
247 **
248 ** Usage: %fossil test-glob PATTERN STRING...
249 **
250 ** PATTERN is a comma-separated list of glob patterns. Show which of
251 ** the STRINGs that follow match the PATTERN.
 
 
 
 
 
252 */
253 void glob_test_cmd(void){
254 Glob *pGlob;
255 int i;
 
256 if( g.argc<4 ) usage("PATTERN STRING ...");
257 fossil_print("SQL expression: %s\n", glob_expr("x", g.argv[2]));
258 pGlob = glob_create(g.argv[2]);
 
 
 
 
 
 
 
259 for(i=0; i<pGlob->nPattern; i++){
260 fossil_print("pattern[%d] = [%s]\n", i, pGlob->azPattern[i]);
261 }
262 for(i=3; i<g.argc; i++){
263 fossil_print("%d %s\n", glob_match(pGlob, g.argv[i]), g.argv[i]);
264 }
265 glob_free(pGlob);
266 }
267
--- src/glob.c
+++ src/glob.c
@@ -29,16 +29,17 @@
29 ** zVal: "x"
30 ** zGlobList: "*.o,*.obj"
31 **
32 ** Result: "(x GLOB '*.o' OR x GLOB '*.obj')"
33 **
34 ** Commas and whitespace are considered to be element delimters. Each
35 ** element of the GLOB list may optionally be enclosed in either '...' or
36 ** "...". This allows commas and/or whitespace to be used in the elements
37 ** themselves.
38 **
39 ** This routine makes no effort to free the memory space it uses, which
40 ** currently consists of a blob object and its contents.
41 */
42 char *glob_expr(const char *zVal, const char *zGlobList){
43 Blob expr;
44 char *zSep = "(";
45 int nTerm = 0;
@@ -46,21 +47,24 @@
47 int cTerm;
48
49 if( zGlobList==0 || zGlobList[0]==0 ) return "0";
50 blob_zero(&expr);
51 while( zGlobList[0] ){
52 while( fossil_isspace(zGlobList[0]) || zGlobList[0]==',' ){
53 zGlobList++; /* Skip leading commas, spaces, and newlines */
54 }
55 if( zGlobList[0]==0 ) break;
56 if( zGlobList[0]=='\'' || zGlobList[0]=='"' ){
57 cTerm = zGlobList[0];
58 zGlobList++;
59 }else{
60 cTerm = ',';
61 }
62 /* Find the next delimter (or the end of the string). */
63 for(i=0; zGlobList[i] && zGlobList[i]!=cTerm; i++){
64 if( cTerm!=',' ) continue; /* If quoted, keep going. */
65 if( fossil_isspace(zGlobList[i]) ) break; /* If space, stop. */
66 }
67 blob_appendf(&expr, "%s%s GLOB '%#q'", zSep, zVal, i, zGlobList);
68 zSep = " OR ";
69 if( cTerm!=',' && zGlobList[i] ) i++;
70 zGlobList += i;
@@ -85,24 +89,24 @@
89 char **azPattern; /* Array of pointers to patterns */
90 };
91 #endif /* INTERFACE */
92
93 /*
94 ** zPatternList is a comma-separated list of glob patterns. Parse up
95 ** that list and use it to create a new Glob object.
96 **
97 ** Elements of the glob list may be optionally enclosed in single our
98 ** double-quotes. This allows a comma to be part of a glob pattern.
99 **
100 ** Leading and trailing spaces on unquoted glob patterns are ignored.
101 **
102 ** An empty or null pattern list results in a null glob, which will
103 ** match nothing.
104 */
105 Glob *glob_create(const char *zPatternList){
106 int nList; /* Size of zPatternList in bytes */
107 int i; /* Loop counters */
108 Glob *p; /* The glob being created */
109 char *z; /* Copy of the pattern list */
110 char delimiter; /* '\'' or '\"' or 0 */
111
112 if( zPatternList==0 || zPatternList[0]==0 ) return 0;
@@ -110,27 +114,26 @@
114 p = fossil_malloc( sizeof(*p) + nList+1 );
115 memset(p, 0, sizeof(*p));
116 z = (char*)&p[1];
117 memcpy(z, zPatternList, nList+1);
118 while( z[0] ){
119 while( fossil_isspace(z[0]) || z[0]==',' ){
120 z++; /* Skip leading commas, spaces, and newlines */
121 }
122 if( z[0]==0 ) break;
123 if( z[0]=='\'' || z[0]=='"' ){
124 delimiter = z[0];
125 z++;
126 }else{
127 delimiter = ',';
128 }
 
129 p->azPattern = fossil_realloc(p->azPattern, (p->nPattern+1)*sizeof(char*) );
130 p->azPattern[p->nPattern++] = z;
131 /* Find the next delimter (or the end of the string). */
132 for(i=0; z[i] && z[i]!=delimiter; i++){
133 if( delimiter!=',' ) continue; /* If quoted, keep going. */
134 if( fossil_isspace(z[i]) ) break; /* If space, stop. */
 
135 }
136 if( z[i]==0 ) break;
137 z[i] = 0;
138 z += i+1;
139 }
@@ -245,22 +248,35 @@
248 /*
249 ** COMMAND: test-glob
250 **
251 ** Usage: %fossil test-glob PATTERN STRING...
252 **
253 ** PATTERN is a comma- and whitespace-separated list of optionally
254 ** quoted glob patterns. Show which of the STRINGs that follow match
255 ** the PATTERN.
256 **
257 ** If PATTERN begins with "@" the the rest of the pattern is understood
258 ** to be a setting name (such as binary-glob, crln-glob, or encoding-glob)
259 ** and the value of that setting is used as the actually glob pattern.
260 */
261 void glob_test_cmd(void){
262 Glob *pGlob;
263 int i;
264 char *zPattern;
265 if( g.argc<4 ) usage("PATTERN STRING ...");
266 zPattern = g.argv[2];
267 if( zPattern[0]=='@' ){
268 db_find_and_open_repository(OPEN_ANY_SCHEMA,0);
269 zPattern = db_get(zPattern+1, 0);
270 if( zPattern==0 ) fossil_fatal("no such setting: %s", g.argv[2]+1);
271 fossil_print("GLOB pattern: %s\n", zPattern);
272 }
273 fossil_print("SQL expression: %s\n", glob_expr("x", zPattern));
274 pGlob = glob_create(zPattern);
275 for(i=0; i<pGlob->nPattern; i++){
276 fossil_print("pattern[%d] = [%s]\n", i, pGlob->azPattern[i]);
277 }
278 for(i=3; i<g.argc; i++){
279 fossil_print("%d %s\n", glob_match(pGlob, g.argv[i]), g.argv[i]);
280 }
281 glob_free(pGlob);
282 }
283
+8 -10
--- src/info.c
+++ src/info.c
@@ -198,15 +198,13 @@
198198
if( g.localOpen ){
199199
fossil_print("repository: %s\n", db_repository_filename());
200200
fossil_print("local-root: %s\n", g.zLocalRoot);
201201
}
202202
if( bDetail ) extraRepoInfo();
203
-#if defined(_WIN32)
204
- if( g.zHome ){
205
- fossil_print("user-home: %s\n", g.zHome);
203
+ if( g.zConfigDbName ){
204
+ fossil_print("config-db: %s\n", g.zConfigDbName);
206205
}
207
-#endif
208206
fossil_print("project-code: %s\n", db_get("project-code", ""));
209207
vid = g.localOpen ? db_lget_int("checkout", 0) : 0;
210208
if( vid ){
211209
show_common_info(vid, "checkout:", 1, 1);
212210
}
@@ -529,14 +527,14 @@
529527
}else{
530528
@ <tr><th>User:</th><td>
531529
hyperlink_to_user(zUser,zDate,"</td></tr>");
532530
}
533531
if( zEComment ){
534
- @ <tr><th>Edited&nbsp;Comment:</th><td>%w(zEComment)</td></tr>
535
- @ <tr><th>Original&nbsp;Comment:</th><td>%w(zComment)</td></tr>
532
+ @ <tr><th>Edited&nbsp;Comment:</th><td>%!w(zEComment)</td></tr>
533
+ @ <tr><th>Original&nbsp;Comment:</th><td>%!w(zComment)</td></tr>
536534
}else{
537
- @ <tr><th>Comment:</th><td>%w(zComment)</td></tr>
535
+ @ <tr><th>Comment:</th><td>%!w(zComment)</td></tr>
538536
}
539537
if( g.perm.Admin ){
540538
db_prepare(&q,
541539
"SELECT rcvfrom.ipaddr, user.login, datetime(rcvfrom.mtime)"
542540
" FROM blob JOIN rcvfrom USING(rcvid) LEFT JOIN user USING(uid)"
@@ -1075,11 +1073,11 @@
10751073
@ - part of checkin
10761074
hyperlink_to_uuid(zVers);
10771075
if( zBr && zBr[0] ){
10781076
@ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
10791077
}
1080
- @ - %w(zCom) (user:
1078
+ @ - %!w(zCom) (user:
10811079
hyperlink_to_user(zUser,zDate,")");
10821080
if( g.perm.Hyperlink ){
10831081
@ %z(href("%R/annotate?checkin=%S&filename=%T",zVers,zName))
10841082
@ [annotate]</a>
10851083
}
@@ -1158,11 +1156,11 @@
11581156
@ Control file referencing
11591157
}
11601158
if( zType[0]!='e' ){
11611159
hyperlink_to_uuid(zUuid);
11621160
}
1163
- @ - %w(zCom) by
1161
+ @ - %!w(zCom) by
11641162
hyperlink_to_user(zUser,zDate," on");
11651163
hyperlink_to_date(zDate, ".");
11661164
if( pDownloadName && blob_size(pDownloadName)==0 ){
11671165
blob_appendf(pDownloadName, "%.10s.txt", zUuid);
11681166
}
@@ -2155,11 +2153,11 @@
21552153
if( zNewColor && zNewColor[0] ){
21562154
@ <tr><td style="background-color: %h(zNewColor);">
21572155
}else{
21582156
@ <tr><td>
21592157
}
2160
- @ %w(blob_str(&comment))
2158
+ @ %!w(blob_str(&comment))
21612159
blob_zero(&suffix);
21622160
blob_appendf(&suffix, "(user: %h", zNewUser);
21632161
db_prepare(&q, "SELECT substr(tagname,5) FROM tagxref, tag"
21642162
" WHERE tagname GLOB 'sym-*' AND tagxref.rid=%d"
21652163
" AND tagtype>1 AND tag.tagid=tagxref.tagid",
21662164
--- src/info.c
+++ src/info.c
@@ -198,15 +198,13 @@
198 if( g.localOpen ){
199 fossil_print("repository: %s\n", db_repository_filename());
200 fossil_print("local-root: %s\n", g.zLocalRoot);
201 }
202 if( bDetail ) extraRepoInfo();
203 #if defined(_WIN32)
204 if( g.zHome ){
205 fossil_print("user-home: %s\n", g.zHome);
206 }
207 #endif
208 fossil_print("project-code: %s\n", db_get("project-code", ""));
209 vid = g.localOpen ? db_lget_int("checkout", 0) : 0;
210 if( vid ){
211 show_common_info(vid, "checkout:", 1, 1);
212 }
@@ -529,14 +527,14 @@
529 }else{
530 @ <tr><th>User:</th><td>
531 hyperlink_to_user(zUser,zDate,"</td></tr>");
532 }
533 if( zEComment ){
534 @ <tr><th>Edited&nbsp;Comment:</th><td>%w(zEComment)</td></tr>
535 @ <tr><th>Original&nbsp;Comment:</th><td>%w(zComment)</td></tr>
536 }else{
537 @ <tr><th>Comment:</th><td>%w(zComment)</td></tr>
538 }
539 if( g.perm.Admin ){
540 db_prepare(&q,
541 "SELECT rcvfrom.ipaddr, user.login, datetime(rcvfrom.mtime)"
542 " FROM blob JOIN rcvfrom USING(rcvid) LEFT JOIN user USING(uid)"
@@ -1075,11 +1073,11 @@
1075 @ - part of checkin
1076 hyperlink_to_uuid(zVers);
1077 if( zBr && zBr[0] ){
1078 @ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
1079 }
1080 @ - %w(zCom) (user:
1081 hyperlink_to_user(zUser,zDate,")");
1082 if( g.perm.Hyperlink ){
1083 @ %z(href("%R/annotate?checkin=%S&filename=%T",zVers,zName))
1084 @ [annotate]</a>
1085 }
@@ -1158,11 +1156,11 @@
1158 @ Control file referencing
1159 }
1160 if( zType[0]!='e' ){
1161 hyperlink_to_uuid(zUuid);
1162 }
1163 @ - %w(zCom) by
1164 hyperlink_to_user(zUser,zDate," on");
1165 hyperlink_to_date(zDate, ".");
1166 if( pDownloadName && blob_size(pDownloadName)==0 ){
1167 blob_appendf(pDownloadName, "%.10s.txt", zUuid);
1168 }
@@ -2155,11 +2153,11 @@
2155 if( zNewColor && zNewColor[0] ){
2156 @ <tr><td style="background-color: %h(zNewColor);">
2157 }else{
2158 @ <tr><td>
2159 }
2160 @ %w(blob_str(&comment))
2161 blob_zero(&suffix);
2162 blob_appendf(&suffix, "(user: %h", zNewUser);
2163 db_prepare(&q, "SELECT substr(tagname,5) FROM tagxref, tag"
2164 " WHERE tagname GLOB 'sym-*' AND tagxref.rid=%d"
2165 " AND tagtype>1 AND tag.tagid=tagxref.tagid",
2166
--- src/info.c
+++ src/info.c
@@ -198,15 +198,13 @@
198 if( g.localOpen ){
199 fossil_print("repository: %s\n", db_repository_filename());
200 fossil_print("local-root: %s\n", g.zLocalRoot);
201 }
202 if( bDetail ) extraRepoInfo();
203 if( g.zConfigDbName ){
204 fossil_print("config-db: %s\n", g.zConfigDbName);
 
205 }
 
206 fossil_print("project-code: %s\n", db_get("project-code", ""));
207 vid = g.localOpen ? db_lget_int("checkout", 0) : 0;
208 if( vid ){
209 show_common_info(vid, "checkout:", 1, 1);
210 }
@@ -529,14 +527,14 @@
527 }else{
528 @ <tr><th>User:</th><td>
529 hyperlink_to_user(zUser,zDate,"</td></tr>");
530 }
531 if( zEComment ){
532 @ <tr><th>Edited&nbsp;Comment:</th><td>%!w(zEComment)</td></tr>
533 @ <tr><th>Original&nbsp;Comment:</th><td>%!w(zComment)</td></tr>
534 }else{
535 @ <tr><th>Comment:</th><td>%!w(zComment)</td></tr>
536 }
537 if( g.perm.Admin ){
538 db_prepare(&q,
539 "SELECT rcvfrom.ipaddr, user.login, datetime(rcvfrom.mtime)"
540 " FROM blob JOIN rcvfrom USING(rcvid) LEFT JOIN user USING(uid)"
@@ -1075,11 +1073,11 @@
1073 @ - part of checkin
1074 hyperlink_to_uuid(zVers);
1075 if( zBr && zBr[0] ){
1076 @ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
1077 }
1078 @ - %!w(zCom) (user:
1079 hyperlink_to_user(zUser,zDate,")");
1080 if( g.perm.Hyperlink ){
1081 @ %z(href("%R/annotate?checkin=%S&filename=%T",zVers,zName))
1082 @ [annotate]</a>
1083 }
@@ -1158,11 +1156,11 @@
1156 @ Control file referencing
1157 }
1158 if( zType[0]!='e' ){
1159 hyperlink_to_uuid(zUuid);
1160 }
1161 @ - %!w(zCom) by
1162 hyperlink_to_user(zUser,zDate," on");
1163 hyperlink_to_date(zDate, ".");
1164 if( pDownloadName && blob_size(pDownloadName)==0 ){
1165 blob_appendf(pDownloadName, "%.10s.txt", zUuid);
1166 }
@@ -2155,11 +2153,11 @@
2153 if( zNewColor && zNewColor[0] ){
2154 @ <tr><td style="background-color: %h(zNewColor);">
2155 }else{
2156 @ <tr><td>
2157 }
2158 @ %!w(blob_str(&comment))
2159 blob_zero(&suffix);
2160 blob_appendf(&suffix, "(user: %h", zNewUser);
2161 db_prepare(&q, "SELECT substr(tagname,5) FROM tagxref, tag"
2162 " WHERE tagname GLOB 'sym-*' AND tagxref.rid=%d"
2163 " AND tagtype>1 AND tag.tagid=tagxref.tagid",
2164
+1 -2
--- src/json.c
+++ src/json.c
@@ -1372,11 +1372,11 @@
13721372
#define VAL(K,V) cson_object_set(o, #K, (V) ? (V) : cson_value_null())
13731373
VAL(capabilities, json_cap_value());
13741374
INT(g, argc);
13751375
INT(g, isConst);
13761376
INT(g, useAttach);
1377
- INT(g, configOpen);
1377
+ CSTR(g, zConfigDbName);
13781378
INT(g, repositoryOpen);
13791379
INT(g, localOpen);
13801380
INT(g, minPrefix);
13811381
INT(g, fSqlTrace);
13821382
INT(g, fSqlStats);
@@ -1410,11 +1410,10 @@
14101410
INT(g, nAux);
14111411
INT(g, allowSymlinks);
14121412
14131413
CSTR(g, zMainDbType);
14141414
CSTR(g, zConfigDbType);
1415
- CSTR(g, zHome);
14161415
CSTR(g, zLocalRoot);
14171416
CSTR(g, zPath);
14181417
CSTR(g, zExtra);
14191418
CSTR(g, zBaseURL);
14201419
CSTR(g, zTop);
14211420
--- src/json.c
+++ src/json.c
@@ -1372,11 +1372,11 @@
1372 #define VAL(K,V) cson_object_set(o, #K, (V) ? (V) : cson_value_null())
1373 VAL(capabilities, json_cap_value());
1374 INT(g, argc);
1375 INT(g, isConst);
1376 INT(g, useAttach);
1377 INT(g, configOpen);
1378 INT(g, repositoryOpen);
1379 INT(g, localOpen);
1380 INT(g, minPrefix);
1381 INT(g, fSqlTrace);
1382 INT(g, fSqlStats);
@@ -1410,11 +1410,10 @@
1410 INT(g, nAux);
1411 INT(g, allowSymlinks);
1412
1413 CSTR(g, zMainDbType);
1414 CSTR(g, zConfigDbType);
1415 CSTR(g, zHome);
1416 CSTR(g, zLocalRoot);
1417 CSTR(g, zPath);
1418 CSTR(g, zExtra);
1419 CSTR(g, zBaseURL);
1420 CSTR(g, zTop);
1421
--- src/json.c
+++ src/json.c
@@ -1372,11 +1372,11 @@
1372 #define VAL(K,V) cson_object_set(o, #K, (V) ? (V) : cson_value_null())
1373 VAL(capabilities, json_cap_value());
1374 INT(g, argc);
1375 INT(g, isConst);
1376 INT(g, useAttach);
1377 CSTR(g, zConfigDbName);
1378 INT(g, repositoryOpen);
1379 INT(g, localOpen);
1380 INT(g, minPrefix);
1381 INT(g, fSqlTrace);
1382 INT(g, fSqlStats);
@@ -1410,11 +1410,10 @@
1410 INT(g, nAux);
1411 INT(g, allowSymlinks);
1412
1413 CSTR(g, zMainDbType);
1414 CSTR(g, zConfigDbType);
 
1415 CSTR(g, zLocalRoot);
1416 CSTR(g, zPath);
1417 CSTR(g, zExtra);
1418 CSTR(g, zBaseURL);
1419 CSTR(g, zTop);
1420
--- src/json_status.c
+++ src/json_status.c
@@ -37,11 +37,10 @@
3737
/*
3838
** Implementation of the /json/status page.
3939
**
4040
*/
4141
cson_value * json_page_status(){
42
- char const * zSql = NULL;
4342
Stmt q = empty_Stmt;
4443
cson_object * oPay;
4544
/*cson_object * files;*/
4645
int vid, nErr = 0;
4746
cson_object * tmpO;
@@ -101,11 +100,10 @@
101100
" WHERE is_selected(id)"
102101
" AND (chnged OR deleted OR rid=0 OR pathname!=origname) ORDER BY 1"
103102
);
104103
while( db_step(&q)==SQLITE_ROW ){
105104
const char *zPathname = db_column_text(&q,0);
106
- const char *zDisplayName = zPathname;
107105
int isDeleted = db_column_int(&q, 1);
108106
int isChnged = db_column_int(&q,2);
109107
int isNew = db_column_int(&q,3)==0;
110108
int isRenamed = db_column_int(&q,4);
111109
cson_object * oFile;
112110
--- src/json_status.c
+++ src/json_status.c
@@ -37,11 +37,10 @@
37 /*
38 ** Implementation of the /json/status page.
39 **
40 */
41 cson_value * json_page_status(){
42 char const * zSql = NULL;
43 Stmt q = empty_Stmt;
44 cson_object * oPay;
45 /*cson_object * files;*/
46 int vid, nErr = 0;
47 cson_object * tmpO;
@@ -101,11 +100,10 @@
101 " WHERE is_selected(id)"
102 " AND (chnged OR deleted OR rid=0 OR pathname!=origname) ORDER BY 1"
103 );
104 while( db_step(&q)==SQLITE_ROW ){
105 const char *zPathname = db_column_text(&q,0);
106 const char *zDisplayName = zPathname;
107 int isDeleted = db_column_int(&q, 1);
108 int isChnged = db_column_int(&q,2);
109 int isNew = db_column_int(&q,3)==0;
110 int isRenamed = db_column_int(&q,4);
111 cson_object * oFile;
112
--- src/json_status.c
+++ src/json_status.c
@@ -37,11 +37,10 @@
37 /*
38 ** Implementation of the /json/status page.
39 **
40 */
41 cson_value * json_page_status(){
 
42 Stmt q = empty_Stmt;
43 cson_object * oPay;
44 /*cson_object * files;*/
45 int vid, nErr = 0;
46 cson_object * tmpO;
@@ -101,11 +100,10 @@
100 " WHERE is_selected(id)"
101 " AND (chnged OR deleted OR rid=0 OR pathname!=origname) ORDER BY 1"
102 );
103 while( db_step(&q)==SQLITE_ROW ){
104 const char *zPathname = db_column_text(&q,0);
 
105 int isDeleted = db_column_int(&q, 1);
106 int isChnged = db_column_int(&q,2);
107 int isNew = db_column_int(&q,3)==0;
108 int isRenamed = db_column_int(&q,4);
109 cson_object * oFile;
110
+2 -3
--- src/main.c
+++ src/main.c
@@ -114,17 +114,16 @@
114114
char *nameOfExe; /* Full path of executable. */
115115
int isConst; /* True if the output is unchanging */
116116
sqlite3 *db; /* The connection to the databases */
117117
sqlite3 *dbConfig; /* Separate connection for global_config table */
118118
int useAttach; /* True if global_config is attached to repository */
119
- int configOpen; /* True if the config database is open */
119
+ const char *zConfigDbName;/* Path of the config database. NULL if not open */
120120
sqlite3_int64 now; /* Seconds since 1970 */
121121
int repositoryOpen; /* True if the main repository database is open */
122122
char *zRepositoryName; /* Name of the repository database */
123123
const char *zMainDbType;/* "configdb", "localdb", or "repository" */
124124
const char *zConfigDbType; /* "configdb", "localdb", or "repository" */
125
- const char *zHome; /* Name of user home directory */
126125
int localOpen; /* True if the local database is open */
127126
char *zLocalRoot; /* The directory holding the local database */
128127
int minPrefix; /* Number of digits needed for a distinct UUID */
129128
int fSqlTrace; /* True if --sqltrace flag is present */
130129
int fSqlStats; /* True if --sqltrace or --sqlstats are present */
@@ -605,11 +604,11 @@
605604
606605
/*
607606
** Print a usage comment and quit
608607
*/
609608
void usage(const char *zFormat){
610
- fossil_fatal("Usage: %s %s %s\n", g.argv[0], g.argv[1], zFormat);
609
+ fossil_fatal("Usage: %s %s %s", g.argv[0], g.argv[1], zFormat);
611610
}
612611
613612
/*
614613
** Remove n elements from g.argv beginning with the i-th element.
615614
*/
616615
--- src/main.c
+++ src/main.c
@@ -114,17 +114,16 @@
114 char *nameOfExe; /* Full path of executable. */
115 int isConst; /* True if the output is unchanging */
116 sqlite3 *db; /* The connection to the databases */
117 sqlite3 *dbConfig; /* Separate connection for global_config table */
118 int useAttach; /* True if global_config is attached to repository */
119 int configOpen; /* True if the config database is open */
120 sqlite3_int64 now; /* Seconds since 1970 */
121 int repositoryOpen; /* True if the main repository database is open */
122 char *zRepositoryName; /* Name of the repository database */
123 const char *zMainDbType;/* "configdb", "localdb", or "repository" */
124 const char *zConfigDbType; /* "configdb", "localdb", or "repository" */
125 const char *zHome; /* Name of user home directory */
126 int localOpen; /* True if the local database is open */
127 char *zLocalRoot; /* The directory holding the local database */
128 int minPrefix; /* Number of digits needed for a distinct UUID */
129 int fSqlTrace; /* True if --sqltrace flag is present */
130 int fSqlStats; /* True if --sqltrace or --sqlstats are present */
@@ -605,11 +604,11 @@
605
606 /*
607 ** Print a usage comment and quit
608 */
609 void usage(const char *zFormat){
610 fossil_fatal("Usage: %s %s %s\n", g.argv[0], g.argv[1], zFormat);
611 }
612
613 /*
614 ** Remove n elements from g.argv beginning with the i-th element.
615 */
616
--- src/main.c
+++ src/main.c
@@ -114,17 +114,16 @@
114 char *nameOfExe; /* Full path of executable. */
115 int isConst; /* True if the output is unchanging */
116 sqlite3 *db; /* The connection to the databases */
117 sqlite3 *dbConfig; /* Separate connection for global_config table */
118 int useAttach; /* True if global_config is attached to repository */
119 const char *zConfigDbName;/* Path of the config database. NULL if not open */
120 sqlite3_int64 now; /* Seconds since 1970 */
121 int repositoryOpen; /* True if the main repository database is open */
122 char *zRepositoryName; /* Name of the repository database */
123 const char *zMainDbType;/* "configdb", "localdb", or "repository" */
124 const char *zConfigDbType; /* "configdb", "localdb", or "repository" */
 
125 int localOpen; /* True if the local database is open */
126 char *zLocalRoot; /* The directory holding the local database */
127 int minPrefix; /* Number of digits needed for a distinct UUID */
128 int fSqlTrace; /* True if --sqltrace flag is present */
129 int fSqlStats; /* True if --sqltrace or --sqlstats are present */
@@ -605,11 +604,11 @@
604
605 /*
606 ** Print a usage comment and quit
607 */
608 void usage(const char *zFormat){
609 fossil_fatal("Usage: %s %s %s", g.argv[0], g.argv[1], zFormat);
610 }
611
612 /*
613 ** Remove n elements from g.argv beginning with the i-th element.
614 */
615
+1 -2
--- src/md5.c
+++ src/md5.c
@@ -258,12 +258,11 @@
258258
memset(p, 0, count-8);
259259
}
260260
byteReverse(ctx->in, 14);
261261
262262
/* Append length in bits and transform */
263
- ((uint32 *)ctx->in)[ 14 ] = ctx->bits[0];
264
- ((uint32 *)ctx->in)[ 15 ] = ctx->bits[1];
263
+ memcpy(&ctx->in[14*sizeof(uint32)], ctx->bits, 2*sizeof(uint32));
265264
266265
MD5Transform(ctx->buf, (uint32 *)ctx->in);
267266
byteReverse((unsigned char *)ctx->buf, 4);
268267
memcpy(digest, ctx->buf, 16);
269268
memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
270269
--- src/md5.c
+++ src/md5.c
@@ -258,12 +258,11 @@
258 memset(p, 0, count-8);
259 }
260 byteReverse(ctx->in, 14);
261
262 /* Append length in bits and transform */
263 ((uint32 *)ctx->in)[ 14 ] = ctx->bits[0];
264 ((uint32 *)ctx->in)[ 15 ] = ctx->bits[1];
265
266 MD5Transform(ctx->buf, (uint32 *)ctx->in);
267 byteReverse((unsigned char *)ctx->buf, 4);
268 memcpy(digest, ctx->buf, 16);
269 memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
270
--- src/md5.c
+++ src/md5.c
@@ -258,12 +258,11 @@
258 memset(p, 0, count-8);
259 }
260 byteReverse(ctx->in, 14);
261
262 /* Append length in bits and transform */
263 memcpy(&ctx->in[14*sizeof(uint32)], ctx->bits, 2*sizeof(uint32));
 
264
265 MD5Transform(ctx->buf, (uint32 *)ctx->in);
266 byteReverse((unsigned char *)ctx->buf, 4);
267 memcpy(digest, ctx->buf, 16);
268 memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
269
+8 -3
--- src/printf.c
+++ src/printf.c
@@ -164,15 +164,20 @@
164164
165165
/*
166166
** Return an appropriate set of flags for wiki_convert() for displaying
167167
** comments on a timeline. These flag settings are determined by
168168
** configuration parameters.
169
+**
170
+** The altForm2 argument is true for "%!w" (with the "!" alternate-form-2
171
+** flags) and is false for plain "%w". The ! indicates that the text is
172
+** to be rendered on a form rather than the timeline and that block markup
173
+** is acceptable even if the "timeline-block-markup" setting is false.
169174
*/
170
-static int wiki_convert_flags(void){
175
+static int wiki_convert_flags(int altForm2){
171176
static int wikiFlags = 0;
172177
if( wikiFlags==0 ){
173
- if( db_get_boolean("timeline-block-markup", 0) ){
178
+ if( altForm2 || db_get_boolean("timeline-block-markup", 0) ){
174179
wikiFlags = WIKI_INLINE | WIKI_NOBADLINKS;
175180
}else{
176181
wikiFlags = WIKI_INLINE | WIKI_NOBLOCK | WIKI_NOBADLINKS;
177182
}
178183
if( db_get_boolean("timeline-plaintext", 0) ){
@@ -722,11 +727,11 @@
722727
case etWIKISTR: {
723728
int limit = flag_alternateform ? va_arg(ap,int) : -1;
724729
char *zWiki = va_arg(ap, char*);
725730
Blob wiki;
726731
blob_init(&wiki, zWiki, limit);
727
- wiki_convert(&wiki, pBlob, wiki_convert_flags());
732
+ wiki_convert(&wiki, pBlob, wiki_convert_flags(flag_altform2));
728733
blob_reset(&wiki);
729734
length = width = 0;
730735
break;
731736
}
732737
case etERROR:
733738
--- src/printf.c
+++ src/printf.c
@@ -164,15 +164,20 @@
164
165 /*
166 ** Return an appropriate set of flags for wiki_convert() for displaying
167 ** comments on a timeline. These flag settings are determined by
168 ** configuration parameters.
 
 
 
 
 
169 */
170 static int wiki_convert_flags(void){
171 static int wikiFlags = 0;
172 if( wikiFlags==0 ){
173 if( db_get_boolean("timeline-block-markup", 0) ){
174 wikiFlags = WIKI_INLINE | WIKI_NOBADLINKS;
175 }else{
176 wikiFlags = WIKI_INLINE | WIKI_NOBLOCK | WIKI_NOBADLINKS;
177 }
178 if( db_get_boolean("timeline-plaintext", 0) ){
@@ -722,11 +727,11 @@
722 case etWIKISTR: {
723 int limit = flag_alternateform ? va_arg(ap,int) : -1;
724 char *zWiki = va_arg(ap, char*);
725 Blob wiki;
726 blob_init(&wiki, zWiki, limit);
727 wiki_convert(&wiki, pBlob, wiki_convert_flags());
728 blob_reset(&wiki);
729 length = width = 0;
730 break;
731 }
732 case etERROR:
733
--- src/printf.c
+++ src/printf.c
@@ -164,15 +164,20 @@
164
165 /*
166 ** Return an appropriate set of flags for wiki_convert() for displaying
167 ** comments on a timeline. These flag settings are determined by
168 ** configuration parameters.
169 **
170 ** The altForm2 argument is true for "%!w" (with the "!" alternate-form-2
171 ** flags) and is false for plain "%w". The ! indicates that the text is
172 ** to be rendered on a form rather than the timeline and that block markup
173 ** is acceptable even if the "timeline-block-markup" setting is false.
174 */
175 static int wiki_convert_flags(int altForm2){
176 static int wikiFlags = 0;
177 if( wikiFlags==0 ){
178 if( altForm2 || db_get_boolean("timeline-block-markup", 0) ){
179 wikiFlags = WIKI_INLINE | WIKI_NOBADLINKS;
180 }else{
181 wikiFlags = WIKI_INLINE | WIKI_NOBLOCK | WIKI_NOBADLINKS;
182 }
183 if( db_get_boolean("timeline-plaintext", 0) ){
@@ -722,11 +727,11 @@
727 case etWIKISTR: {
728 int limit = flag_alternateform ? va_arg(ap,int) : -1;
729 char *zWiki = va_arg(ap, char*);
730 Blob wiki;
731 blob_init(&wiki, zWiki, limit);
732 wiki_convert(&wiki, pBlob, wiki_convert_flags(flag_altform2));
733 blob_reset(&wiki);
734 length = width = 0;
735 break;
736 }
737 case etERROR:
738
+3 -2
--- src/regexp.c
+++ src/regexp.c
@@ -111,11 +111,11 @@
111111
ReInput sIn; /* Regular expression text */
112112
const char *zErr; /* Error message to return */
113113
char *aOp; /* Operators for the virtual machine */
114114
int *aArg; /* Arguments to each operator */
115115
unsigned (*xNextChar)(ReInput*); /* Next character function */
116
- char zInit[12]; /* Initial text to match */
116
+ unsigned char zInit[12]; /* Initial text to match */
117117
int nInit; /* Number of characters in zInit */
118118
unsigned nState; /* Number of entries in aOp[] and aArg[] */
119119
unsigned nAlloc; /* Slots allocated for aOp[] and aArg[] */
120120
};
121121
#endif
@@ -197,11 +197,12 @@
197197
198198
/* Look for the initial prefix match, if there is one. */
199199
if( pRe->nInit ){
200200
unsigned char x = pRe->zInit[0];
201201
while( in.i+pRe->nInit<=in.mx
202
- && (zIn[in.i]!=x || memcmp(zIn+in.i, pRe->zInit, pRe->nInit)!=0)
202
+ && (zIn[in.i]!=x ||
203
+ strncmp((const char*)zIn+in.i, (const char*)pRe->zInit, pRe->nInit)!=0)
203204
){
204205
in.i++;
205206
}
206207
if( in.i+pRe->nInit>in.mx ) return 0;
207208
}
208209
--- src/regexp.c
+++ src/regexp.c
@@ -111,11 +111,11 @@
111 ReInput sIn; /* Regular expression text */
112 const char *zErr; /* Error message to return */
113 char *aOp; /* Operators for the virtual machine */
114 int *aArg; /* Arguments to each operator */
115 unsigned (*xNextChar)(ReInput*); /* Next character function */
116 char zInit[12]; /* Initial text to match */
117 int nInit; /* Number of characters in zInit */
118 unsigned nState; /* Number of entries in aOp[] and aArg[] */
119 unsigned nAlloc; /* Slots allocated for aOp[] and aArg[] */
120 };
121 #endif
@@ -197,11 +197,12 @@
197
198 /* Look for the initial prefix match, if there is one. */
199 if( pRe->nInit ){
200 unsigned char x = pRe->zInit[0];
201 while( in.i+pRe->nInit<=in.mx
202 && (zIn[in.i]!=x || memcmp(zIn+in.i, pRe->zInit, pRe->nInit)!=0)
 
203 ){
204 in.i++;
205 }
206 if( in.i+pRe->nInit>in.mx ) return 0;
207 }
208
--- src/regexp.c
+++ src/regexp.c
@@ -111,11 +111,11 @@
111 ReInput sIn; /* Regular expression text */
112 const char *zErr; /* Error message to return */
113 char *aOp; /* Operators for the virtual machine */
114 int *aArg; /* Arguments to each operator */
115 unsigned (*xNextChar)(ReInput*); /* Next character function */
116 unsigned char zInit[12]; /* Initial text to match */
117 int nInit; /* Number of characters in zInit */
118 unsigned nState; /* Number of entries in aOp[] and aArg[] */
119 unsigned nAlloc; /* Slots allocated for aOp[] and aArg[] */
120 };
121 #endif
@@ -197,11 +197,12 @@
197
198 /* Look for the initial prefix match, if there is one. */
199 if( pRe->nInit ){
200 unsigned char x = pRe->zInit[0];
201 while( in.i+pRe->nInit<=in.mx
202 && (zIn[in.i]!=x ||
203 strncmp((const char*)zIn+in.i, (const char*)pRe->zInit, pRe->nInit)!=0)
204 ){
205 in.i++;
206 }
207 if( in.i+pRe->nInit>in.mx ) return 0;
208 }
209
+1 -1
--- src/setup.c
+++ src/setup.c
@@ -1678,11 +1678,11 @@
16781678
@
16791679
@ <p>Only a the first statement in the entry box will be run.
16801680
@ Any subsequent statements will be silently ignored.</p>
16811681
@
16821682
@ <p>Database names:<ul><li>repository &rarr; %s(db_name("repository"))
1683
- if( g.configOpen ){
1683
+ if( g.zConfigDbName ){
16841684
@ <li>config &rarr; %s(db_name("configdb"))
16851685
}
16861686
if( g.localOpen ){
16871687
@ <li>local-checkout &rarr; %s(db_name("localdb"))
16881688
}
16891689
--- src/setup.c
+++ src/setup.c
@@ -1678,11 +1678,11 @@
1678 @
1679 @ <p>Only a the first statement in the entry box will be run.
1680 @ Any subsequent statements will be silently ignored.</p>
1681 @
1682 @ <p>Database names:<ul><li>repository &rarr; %s(db_name("repository"))
1683 if( g.configOpen ){
1684 @ <li>config &rarr; %s(db_name("configdb"))
1685 }
1686 if( g.localOpen ){
1687 @ <li>local-checkout &rarr; %s(db_name("localdb"))
1688 }
1689
--- src/setup.c
+++ src/setup.c
@@ -1678,11 +1678,11 @@
1678 @
1679 @ <p>Only a the first statement in the entry box will be run.
1680 @ Any subsequent statements will be silently ignored.</p>
1681 @
1682 @ <p>Database names:<ul><li>repository &rarr; %s(db_name("repository"))
1683 if( g.zConfigDbName ){
1684 @ <li>config &rarr; %s(db_name("configdb"))
1685 }
1686 if( g.localOpen ){
1687 @ <li>local-checkout &rarr; %s(db_name("localdb"))
1688 }
1689
+2 -1
--- src/shell.c
+++ src/shell.c
@@ -88,11 +88,12 @@
8888
/* ctype macros that work with signed characters */
8989
#define IsSpace(X) isspace((unsigned char)X)
9090
#define IsDigit(X) isdigit((unsigned char)X)
9191
#define ToLower(X) (char)tolower((unsigned char)X)
9292
93
-#if !defined(_WIN32) && !defined(WIN32) && !defined(_WRS_KERNEL)
93
+#if !defined(_WIN32) && !defined(WIN32) && !defined(_WRS_KERNEL) \
94
+ && !defined(__minux)
9495
#include <sys/time.h>
9596
#include <sys/resource.h>
9697
9798
/* Saved resource information for the beginning of an operation */
9899
static struct rusage sBegin;
99100
--- src/shell.c
+++ src/shell.c
@@ -88,11 +88,12 @@
88 /* ctype macros that work with signed characters */
89 #define IsSpace(X) isspace((unsigned char)X)
90 #define IsDigit(X) isdigit((unsigned char)X)
91 #define ToLower(X) (char)tolower((unsigned char)X)
92
93 #if !defined(_WIN32) && !defined(WIN32) && !defined(_WRS_KERNEL)
 
94 #include <sys/time.h>
95 #include <sys/resource.h>
96
97 /* Saved resource information for the beginning of an operation */
98 static struct rusage sBegin;
99
--- src/shell.c
+++ src/shell.c
@@ -88,11 +88,12 @@
88 /* ctype macros that work with signed characters */
89 #define IsSpace(X) isspace((unsigned char)X)
90 #define IsDigit(X) isdigit((unsigned char)X)
91 #define ToLower(X) (char)tolower((unsigned char)X)
92
93 #if !defined(_WIN32) && !defined(WIN32) && !defined(_WRS_KERNEL) \
94 && !defined(__minux)
95 #include <sys/time.h>
96 #include <sys/resource.h>
97
98 /* Saved resource information for the beginning of an operation */
99 static struct rusage sBegin;
100
+374 -212
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -438,11 +438,12 @@
438438
** if it is already defined or if it is unneeded because we are
439439
** not doing a threadsafe build. Ticket #2681.
440440
**
441441
** See also ticket #2741.
442442
*/
443
-#if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) && SQLITE_THREADSAFE
443
+#if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) \
444
+ && !defined(__APPLE__) && SQLITE_THREADSAFE
444445
# define _XOPEN_SOURCE 500 /* Needed to enable pthread recursive mutexes */
445446
#endif
446447
447448
/*
448449
** The TCL headers are only needed when compiling the TCL bindings.
@@ -673,11 +674,11 @@
673674
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
674675
** [sqlite_version()] and [sqlite_source_id()].
675676
*/
676677
#define SQLITE_VERSION "3.7.16"
677678
#define SQLITE_VERSION_NUMBER 3007016
678
-#define SQLITE_SOURCE_ID "2013-02-13 14:04:28 7e10a62d0eb1cb2bdafb6752b78a9d368e9f21f5"
679
+#define SQLITE_SOURCE_ID "2013-03-06 01:55:27 7097241c1220ada318f8eda938c3e3430b94a606"
679680
680681
/*
681682
** CAPI3REF: Run-Time Library Version Numbers
682683
** KEYWORDS: sqlite3_version, sqlite3_sourceid
683684
**
@@ -1047,10 +1048,11 @@
10471048
#define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
10481049
#define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
10491050
#define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8))
10501051
#define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8))
10511052
#define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8))
1053
+#define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3<<8))
10521054
#define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8))
10531055
#define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8))
10541056
#define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8))
10551057
#define SQLITE_CONSTRAINT_FOREIGNKEY (SQLITE_CONSTRAINT | (3<<8))
10561058
#define SQLITE_CONSTRAINT_FUNCTION (SQLITE_CONSTRAINT | (4<<8))
@@ -11915,11 +11917,11 @@
1191511917
SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*);
1191611918
SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*);
1191711919
SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, int);
1191811920
SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
1191911921
#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
11920
-SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse *, SrcList *, Expr *, ExprList *, Expr *, Expr *, char *);
11922
+SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse*,SrcList*,Expr*,ExprList*,Expr*,Expr*,char*);
1192111923
#endif
1192211924
SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
1192311925
SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
1192411926
SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*,SrcList*,Expr*,ExprList*,ExprList*,u16,int);
1192511927
SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo*);
@@ -12096,12 +12098,15 @@
1209612098
**
1209712099
** x = getVarint32( A, B );
1209812100
** x = putVarint32( A, B );
1209912101
**
1210012102
*/
12101
-#define getVarint32(A,B) (u8)((*(A)<(u8)0x80) ? ((B) = (u32)*(A)),1 : sqlite3GetVarint32((A), (u32 *)&(B)))
12102
-#define putVarint32(A,B) (u8)(((u32)(B)<(u32)0x80) ? (*(A) = (unsigned char)(B)),1 : sqlite3PutVarint32((A), (B)))
12103
+#define getVarint32(A,B) \
12104
+ (u8)((*(A)<(u8)0x80)?((B)=(u32)*(A)),1:sqlite3GetVarint32((A),(u32 *)&(B)))
12105
+#define putVarint32(A,B) \
12106
+ (u8)(((u32)(B)<(u32)0x80)?(*(A)=(unsigned char)(B)),1:\
12107
+ sqlite3PutVarint32((A),(B)))
1210312108
#define getVarint sqlite3GetVarint
1210412109
#define putVarint sqlite3PutVarint
1210512110
1210612111
1210712112
SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *, Index *);
@@ -23455,11 +23460,14 @@
2345523460
#endif
2345623461
}while( fd<0 && errno==EINTR );
2345723462
if( fd>=0 ){
2345823463
if( m!=0 ){
2345923464
struct stat statbuf;
23460
- if( osFstat(fd, &statbuf)==0 && (statbuf.st_mode&0777)!=m ){
23465
+ if( osFstat(fd, &statbuf)==0
23466
+ && statbuf.st_size==0
23467
+ && (statbuf.st_mode&0777)!=m
23468
+ ){
2346123469
osFchmod(fd, m);
2346223470
}
2346323471
}
2346423472
#if defined(FD_CLOEXEC) && (!defined(O_CLOEXEC) || O_CLOEXEC==0)
2346523473
osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
@@ -27655,11 +27663,11 @@
2765527663
pNew->ctrlFlags = (u8)ctrlFlags;
2765627664
if( sqlite3_uri_boolean(((ctrlFlags & UNIXFILE_URI) ? zFilename : 0),
2765727665
"psow", SQLITE_POWERSAFE_OVERWRITE) ){
2765827666
pNew->ctrlFlags |= UNIXFILE_PSOW;
2765927667
}
27660
- if( memcmp(pVfs->zName,"unix-excl",10)==0 ){
27668
+ if( strcmp(pVfs->zName,"unix-excl")==0 ){
2766127669
pNew->ctrlFlags |= UNIXFILE_EXCL;
2766227670
}
2766327671
2766427672
#if OS_VXWORKS
2766527673
pNew->pId = vxworksFindFileId(zFilename);
@@ -31959,21 +31967,23 @@
3195931967
bReturn = TRUE;
3196031968
}
3196131969
}
3196231970
3196331971
/* Want a pending lock? */
31964
- else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToLockLow == 1){
31972
+ else if (dwFileOffsetLow == (DWORD)PENDING_BYTE
31973
+ && nNumberOfBytesToLockLow == 1){
3196531974
/* If no pending lock has been acquired, then acquire it */
3196631975
if (pFile->shared->bPending == 0) {
3196731976
pFile->shared->bPending = TRUE;
3196831977
pFile->local.bPending = TRUE;
3196931978
bReturn = TRUE;
3197031979
}
3197131980
}
3197231981
3197331982
/* Want a reserved lock? */
31974
- else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToLockLow == 1){
31983
+ else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE
31984
+ && nNumberOfBytesToLockLow == 1){
3197531985
if (pFile->shared->bReserved == 0) {
3197631986
pFile->shared->bReserved = TRUE;
3197731987
pFile->local.bReserved = TRUE;
3197831988
bReturn = TRUE;
3197931989
}
@@ -32012,11 +32022,12 @@
3201232022
bReturn = TRUE;
3201332023
}
3201432024
3201532025
/* Did we just have a reader lock? */
3201632026
else if (pFile->local.nReaders){
32017
- assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE || nNumberOfBytesToUnlockLow == 1);
32027
+ assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE
32028
+ || nNumberOfBytesToUnlockLow == 1);
3201832029
pFile->local.nReaders --;
3201932030
if (pFile->local.nReaders == 0)
3202032031
{
3202132032
pFile->shared->nReaders --;
3202232033
}
@@ -32023,19 +32034,21 @@
3202332034
bReturn = TRUE;
3202432035
}
3202532036
}
3202632037
3202732038
/* Releasing a pending lock */
32028
- else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToUnlockLow == 1){
32039
+ else if (dwFileOffsetLow == (DWORD)PENDING_BYTE
32040
+ && nNumberOfBytesToUnlockLow == 1){
3202932041
if (pFile->local.bPending){
3203032042
pFile->local.bPending = FALSE;
3203132043
pFile->shared->bPending = FALSE;
3203232044
bReturn = TRUE;
3203332045
}
3203432046
}
3203532047
/* Releasing a reserved lock */
32036
- else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToUnlockLow == 1){
32048
+ else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE
32049
+ && nNumberOfBytesToUnlockLow == 1){
3203732050
if (pFile->local.bReserved) {
3203832051
pFile->local.bReserved = FALSE;
3203932052
pFile->shared->bReserved = FALSE;
3204032053
bReturn = TRUE;
3204132054
}
@@ -32197,10 +32210,11 @@
3219732210
assert( id!=0 );
3219832211
#ifndef SQLITE_OMIT_WAL
3219932212
assert( pFile->pShm==0 );
3220032213
#endif
3220132214
OSTRACE(("CLOSE %d\n", pFile->h));
32215
+ assert( pFile->h!=NULL && pFile->h!=INVALID_HANDLE_VALUE );
3220232216
do{
3220332217
rc = osCloseHandle(pFile->h);
3220432218
/* SimulateIOError( rc=0; cnt=MX_CLOSE_ATTEMPT; ); */
3220532219
}while( rc==0 && ++cnt < MX_CLOSE_ATTEMPT && (sqlite3_win32_sleep(100), 1) );
3220632220
#if SQLITE_OS_WINCE
@@ -33113,11 +33127,11 @@
3311333127
bRc = osCloseHandle(p->aRegion[i].hMap);
3311433128
OSTRACE(("SHM-PURGE pid-%d close region=%d %s\n",
3311533129
(int)osGetCurrentProcessId(), i,
3311633130
bRc ? "ok" : "failed"));
3311733131
}
33118
- if( p->hFile.h != INVALID_HANDLE_VALUE ){
33132
+ if( p->hFile.h!=NULL && p->hFile.h!=INVALID_HANDLE_VALUE ){
3311933133
SimulateIOErrorBenign(1);
3312033134
winClose((sqlite3_file *)&p->hFile);
3312133135
SimulateIOErrorBenign(0);
3312233136
}
3312333137
if( deleteFlag ){
@@ -33193,11 +33207,11 @@
3319333207
}
3319433208
3319533209
rc = winOpen(pDbFd->pVfs,
3319633210
pShmNode->zFilename, /* Name of the file (UTF-8) */
3319733211
(sqlite3_file*)&pShmNode->hFile, /* File handle here */
33198
- SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, /* Mode flags */
33212
+ SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
3319933213
0);
3320033214
if( SQLITE_OK!=rc ){
3320133215
goto shm_open_err;
3320233216
}
3320333217
@@ -33808,22 +33822,21 @@
3380833822
|| eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL
3380933823
|| eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL
3381033824
|| eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
3381133825
);
3381233826
33813
- assert( id!=0 );
33814
- UNUSED_PARAMETER(pVfs);
33827
+ assert( pFile!=0 );
33828
+ memset(pFile, 0, sizeof(winFile));
33829
+ pFile->h = INVALID_HANDLE_VALUE;
3381533830
3381633831
#if SQLITE_OS_WINRT
3381733832
if( !sqlite3_temp_directory ){
3381833833
sqlite3_log(SQLITE_ERROR,
3381933834
"sqlite3_temp_directory variable should be set for WinRT");
3382033835
}
3382133836
#endif
3382233837
33823
- pFile->h = INVALID_HANDLE_VALUE;
33824
-
3382533838
/* If the second argument to this function is NULL, generate a
3382633839
** temporary file name to use
3382733840
*/
3382833841
if( !zUtf8Name ){
3382933842
assert(isDelete && !isOpenJournal);
@@ -33948,11 +33961,13 @@
3394833961
pFile->lastErrno = lastErrno;
3394933962
winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name);
3395033963
sqlite3_free(zConverted);
3395133964
if( isReadWrite && !isExclusive ){
3395233965
return winOpen(pVfs, zName, id,
33953
- ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)), pOutFlags);
33966
+ ((flags|SQLITE_OPEN_READONLY) &
33967
+ ~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)),
33968
+ pOutFlags);
3395433969
}else{
3395533970
return SQLITE_CANTOPEN_BKPT;
3395633971
}
3395733972
}
3395833973
@@ -33962,23 +33977,10 @@
3396233977
}else{
3396333978
*pOutFlags = SQLITE_OPEN_READONLY;
3396433979
}
3396533980
}
3396633981
33967
- memset(pFile, 0, sizeof(*pFile));
33968
- pFile->pMethod = &winIoMethod;
33969
- pFile->h = h;
33970
- pFile->lastErrno = NO_ERROR;
33971
- pFile->pVfs = pVfs;
33972
-#ifndef SQLITE_OMIT_WAL
33973
- pFile->pShm = 0;
33974
-#endif
33975
- pFile->zPath = zName;
33976
- if( sqlite3_uri_boolean(zName, "psow", SQLITE_POWERSAFE_OVERWRITE) ){
33977
- pFile->ctrlFlags |= WINFILE_PSOW;
33978
- }
33979
-
3398033982
#if SQLITE_OS_WINCE
3398133983
if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB
3398233984
&& (rc = winceCreateLock(zName, pFile))!=SQLITE_OK
3398333985
){
3398433986
osCloseHandle(h);
@@ -33990,10 +33992,19 @@
3399033992
}else
3399133993
#endif
3399233994
{
3399333995
sqlite3_free(zConverted);
3399433996
}
33997
+
33998
+ pFile->pMethod = &winIoMethod;
33999
+ pFile->pVfs = pVfs;
34000
+ pFile->h = h;
34001
+ if( sqlite3_uri_boolean(zName, "psow", SQLITE_POWERSAFE_OVERWRITE) ){
34002
+ pFile->ctrlFlags |= WINFILE_PSOW;
34003
+ }
34004
+ pFile->lastErrno = NO_ERROR;
34005
+ pFile->zPath = zName;
3399534006
3399634007
OpenCounter(+1);
3399734008
return rc;
3399834009
}
3399934010
@@ -34035,11 +34046,12 @@
3403534046
if ( osGetFileAttributesExW(zConverted, GetFileExInfoStandard,
3403634047
&sAttrData) ){
3403734048
attr = sAttrData.dwFileAttributes;
3403834049
}else{
3403934050
lastErrno = osGetLastError();
34040
- if( lastErrno==ERROR_FILE_NOT_FOUND || lastErrno==ERROR_PATH_NOT_FOUND ){
34051
+ if( lastErrno==ERROR_FILE_NOT_FOUND
34052
+ || lastErrno==ERROR_PATH_NOT_FOUND ){
3404134053
rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */
3404234054
}else{
3404334055
rc = SQLITE_ERROR;
3404434056
}
3404534057
break;
@@ -34047,11 +34059,12 @@
3404734059
#else
3404834060
attr = osGetFileAttributesW(zConverted);
3404934061
#endif
3405034062
if ( attr==INVALID_FILE_ATTRIBUTES ){
3405134063
lastErrno = osGetLastError();
34052
- if( lastErrno==ERROR_FILE_NOT_FOUND || lastErrno==ERROR_PATH_NOT_FOUND ){
34064
+ if( lastErrno==ERROR_FILE_NOT_FOUND
34065
+ || lastErrno==ERROR_PATH_NOT_FOUND ){
3405334066
rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */
3405434067
}else{
3405534068
rc = SQLITE_ERROR;
3405634069
}
3405734070
break;
@@ -34074,11 +34087,12 @@
3407434087
else{
3407534088
do {
3407634089
attr = osGetFileAttributesA(zConverted);
3407734090
if ( attr==INVALID_FILE_ATTRIBUTES ){
3407834091
lastErrno = osGetLastError();
34079
- if( lastErrno==ERROR_FILE_NOT_FOUND || lastErrno==ERROR_PATH_NOT_FOUND ){
34092
+ if( lastErrno==ERROR_FILE_NOT_FOUND
34093
+ || lastErrno==ERROR_PATH_NOT_FOUND ){
3408034094
rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */
3408134095
}else{
3408234096
rc = SQLITE_ERROR;
3408334097
}
3408434098
break;
@@ -34242,20 +34256,16 @@
3424234256
** for converting the relative path name to an absolute
3424334257
** one by prepending the data directory and a slash.
3424434258
*/
3424534259
char zOut[MAX_PATH+1];
3424634260
memset(zOut, 0, MAX_PATH+1);
34247
- cygwin_conv_to_win32_path(zRelative, zOut); /* POSIX to Win32 */
34261
+ cygwin_conv_path(CCP_POSIX_TO_WIN_A|CCP_RELATIVE, zRelative, zOut,
34262
+ MAX_PATH+1);
3424834263
sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s\\%s",
3424934264
sqlite3_data_directory, zOut);
3425034265
}else{
34251
- /*
34252
- ** NOTE: The Cygwin docs state that the maximum length needed
34253
- ** for the buffer passed to cygwin_conv_to_full_win32_path
34254
- ** is MAX_PATH.
34255
- */
34256
- cygwin_conv_to_full_win32_path(zRelative, zFull);
34266
+ cygwin_conv_path(CCP_POSIX_TO_WIN_A, zRelative, zFull, nFull);
3425734267
}
3425834268
return SQLITE_OK;
3425934269
#endif
3426034270
3426134271
#if (SQLITE_OS_WINCE || SQLITE_OS_WINRT) && !defined(__CYGWIN__)
@@ -34409,13 +34419,13 @@
3440934419
}
3441034420
static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
3441134421
UNUSED_PARAMETER(pVfs);
3441234422
getLastErrorMsg(osGetLastError(), nBuf, zBufOut);
3441334423
}
34414
-static void (*winDlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){
34424
+static void (*winDlSym(sqlite3_vfs *pVfs,void *pH,const char *zSym))(void){
3441534425
UNUSED_PARAMETER(pVfs);
34416
- return (void(*)(void))osGetProcAddressA((HANDLE)pHandle, zSymbol);
34426
+ return (void(*)(void))osGetProcAddressA((HANDLE)pH, zSym);
3441734427
}
3441834428
static void winDlClose(sqlite3_vfs *pVfs, void *pHandle){
3441934429
UNUSED_PARAMETER(pVfs);
3442034430
osFreeLibrary((HANDLE)pHandle);
3442134431
}
@@ -34509,11 +34519,12 @@
3450934519
#ifdef SQLITE_TEST
3451034520
static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
3451134521
#endif
3451234522
/* 2^32 - to avoid use of LL and warnings in gcc */
3451334523
static const sqlite3_int64 max32BitValue =
34514
- (sqlite3_int64)2000000000 + (sqlite3_int64)2000000000 + (sqlite3_int64)294967296;
34524
+ (sqlite3_int64)2000000000 + (sqlite3_int64)2000000000 +
34525
+ (sqlite3_int64)294967296;
3451534526
3451634527
#if SQLITE_OS_WINCE
3451734528
SYSTEMTIME time;
3451834529
osGetSystemTime(&time);
3451934530
/* if SystemTimeToFileTime() fails, it returns zero. */
@@ -39187,10 +39198,12 @@
3918739198
pPager->eState = PAGER_ERROR;
3918839199
}
3918939200
return rc;
3919039201
}
3919139202
39203
+static int pager_truncate(Pager *pPager, Pgno nPage);
39204
+
3919239205
/*
3919339206
** This routine ends a transaction. A transaction is usually ended by
3919439207
** either a COMMIT or a ROLLBACK operation. This routine may be called
3919539208
** after rollback of a hot-journal, or if an error occurs while opening
3919639209
** the journal file or writing the very first journal-header of a
@@ -39240,11 +39253,11 @@
3924039253
** tries to unlock the database file if not in exclusive mode. If the
3924139254
** unlock operation fails as well, then the first error code related
3924239255
** to the first error encountered (the journal finalization one) is
3924339256
** returned.
3924439257
*/
39245
-static int pager_end_transaction(Pager *pPager, int hasMaster){
39258
+static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){
3924639259
int rc = SQLITE_OK; /* Error code from journal finalization operation */
3924739260
int rc2 = SQLITE_OK; /* Error code from db file unlock operation */
3924839261
3924939262
/* Do nothing if the pager does not have an open write transaction
3925039263
** or at least a RESERVED lock. This function may be called when there
@@ -39326,11 +39339,21 @@
3932639339
** locking_mode=exclusive mode but is no longer, drop the EXCLUSIVE
3932739340
** lock held on the database file.
3932839341
*/
3932939342
rc2 = sqlite3WalEndWriteTransaction(pPager->pWal);
3933039343
assert( rc2==SQLITE_OK );
39344
+ }else if( rc==SQLITE_OK && bCommit && pPager->dbFileSize>pPager->dbSize ){
39345
+ /* This branch is taken when committing a transaction in rollback-journal
39346
+ ** mode if the database file on disk is larger than the database image.
39347
+ ** At this point the journal has been finalized and the transaction
39348
+ ** successfully committed, but the EXCLUSIVE lock is still held on the
39349
+ ** file. So it is safe to truncate the database file to its minimum
39350
+ ** required size. */
39351
+ assert( pPager->eLock==EXCLUSIVE_LOCK );
39352
+ rc = pager_truncate(pPager, pPager->dbSize);
3933139353
}
39354
+
3933239355
if( !pPager->exclusiveMode
3933339356
&& (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0))
3933439357
){
3933539358
rc2 = pagerUnlockDb(pPager, SHARED_LOCK);
3933639359
pPager->changeCountDone = 0;
@@ -39365,11 +39388,11 @@
3936539388
sqlite3BeginBenignMalloc();
3936639389
sqlite3PagerRollback(pPager);
3936739390
sqlite3EndBenignMalloc();
3936839391
}else if( !pPager->exclusiveMode ){
3936939392
assert( pPager->eState==PAGER_READER );
39370
- pager_end_transaction(pPager, 0);
39393
+ pager_end_transaction(pPager, 0, 0);
3937139394
}
3937239395
}
3937339396
pager_unlock(pPager);
3937439397
}
3937539398
@@ -40140,11 +40163,11 @@
4014040163
&& (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
4014140164
){
4014240165
rc = sqlite3PagerSync(pPager);
4014340166
}
4014440167
if( rc==SQLITE_OK ){
40145
- rc = pager_end_transaction(pPager, zMaster[0]!='\0');
40168
+ rc = pager_end_transaction(pPager, zMaster[0]!='\0', 0);
4014640169
testcase( rc!=SQLITE_OK );
4014740170
}
4014840171
if( rc==SQLITE_OK && zMaster[0] && res ){
4014940172
/* If there was a master journal and this routine will return success,
4015040173
** see if it is possible to delete the master journal.
@@ -41092,16 +41115,30 @@
4109241115
/*
4109341116
** Truncate the in-memory database file image to nPage pages. This
4109441117
** function does not actually modify the database file on disk. It
4109541118
** just sets the internal state of the pager object so that the
4109641119
** truncation will be done when the current transaction is committed.
41120
+**
41121
+** This function is only called right before committing a transaction.
41122
+** Once this function has been called, the transaction must either be
41123
+** rolled back or committed. It is not safe to call this function and
41124
+** then continue writing to the database.
4109741125
*/
4109841126
SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){
4109941127
assert( pPager->dbSize>=nPage );
4110041128
assert( pPager->eState>=PAGER_WRITER_CACHEMOD );
4110141129
pPager->dbSize = nPage;
41102
- assertTruncateConstraint(pPager);
41130
+
41131
+ /* At one point the code here called assertTruncateConstraint() to
41132
+ ** ensure that all pages being truncated away by this operation are,
41133
+ ** if one or more savepoints are open, present in the savepoint
41134
+ ** journal so that they can be restored if the savepoint is rolled
41135
+ ** back. This is no longer necessary as this function is now only
41136
+ ** called right before committing a transaction. So although the
41137
+ ** Pager object may still have open savepoints (Pager.nSavepoint!=0),
41138
+ ** they cannot be rolled back. So the assertTruncateConstraint() call
41139
+ ** is no longer correct. */
4110341140
}
4110441141
4110541142
4110641143
/*
4110741144
** This function is called before attempting a hot-journal rollback. It
@@ -42150,10 +42187,15 @@
4215042187
}
4215142188
if( rc!=SQLITE_OK ){
4215242189
goto failed;
4215342190
}
4215442191
if( bHotJournal ){
42192
+ if( pPager->readOnly ){
42193
+ rc = SQLITE_READONLY_ROLLBACK;
42194
+ goto failed;
42195
+ }
42196
+
4215542197
/* Get an EXCLUSIVE lock on the database file. At this point it is
4215642198
** important that a RESERVED lock is not obtained on the way to the
4215742199
** EXCLUSIVE lock. If it were, another process might open the
4215842200
** database file, detect the RESERVED lock, and conclude that the
4215942201
** database is safe to read while this process is still rolling the
@@ -43234,40 +43276,10 @@
4323443276
#else
4323543277
rc = pager_incr_changecounter(pPager, 0);
4323643278
#endif
4323743279
if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
4323843280
43239
- /* If this transaction has made the database smaller, then all pages
43240
- ** being discarded by the truncation must be written to the journal
43241
- ** file.
43242
- **
43243
- ** Before reading the pages with page numbers larger than the
43244
- ** current value of Pager.dbSize, set dbSize back to the value
43245
- ** that it took at the start of the transaction. Otherwise, the
43246
- ** calls to sqlite3PagerGet() return zeroed pages instead of
43247
- ** reading data from the database file.
43248
- */
43249
- if( pPager->dbSize<pPager->dbOrigSize
43250
- && pPager->journalMode!=PAGER_JOURNALMODE_OFF
43251
- ){
43252
- Pgno i; /* Iterator variable */
43253
- const Pgno iSkip = PAGER_MJ_PGNO(pPager); /* Pending lock page */
43254
- const Pgno dbSize = pPager->dbSize; /* Database image size */
43255
- pPager->dbSize = pPager->dbOrigSize;
43256
- for( i=dbSize+1; i<=pPager->dbOrigSize; i++ ){
43257
- if( !sqlite3BitvecTest(pPager->pInJournal, i) && i!=iSkip ){
43258
- PgHdr *pPage; /* Page to journal */
43259
- rc = sqlite3PagerGet(pPager, i, &pPage);
43260
- if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
43261
- rc = sqlite3PagerWrite(pPage);
43262
- sqlite3PagerUnref(pPage);
43263
- if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
43264
- }
43265
- }
43266
- pPager->dbSize = dbSize;
43267
- }
43268
-
4326943281
/* Write the master journal name into the journal file. If a master
4327043282
** journal file name has already been written to the journal file,
4327143283
** or if zMaster is NULL (no master journal), then this call is a no-op.
4327243284
*/
4327343285
rc = writeMasterJournal(pPager, zMaster);
@@ -43291,15 +43303,18 @@
4329143303
if( rc!=SQLITE_OK ){
4329243304
assert( rc!=SQLITE_IOERR_BLOCKED );
4329343305
goto commit_phase_one_exit;
4329443306
}
4329543307
sqlite3PcacheCleanAll(pPager->pPCache);
43296
-
43297
- /* If the file on disk is not the same size as the database image,
43298
- ** then use pager_truncate to grow or shrink the file here.
43299
- */
43300
- if( pPager->dbSize!=pPager->dbFileSize ){
43308
+
43309
+ /* If the file on disk is smaller than the database image, use
43310
+ ** pager_truncate to grow the file here. This can happen if the database
43311
+ ** image was extended as part of the current transaction and then the
43312
+ ** last page in the db image moved to the free-list. In this case the
43313
+ ** last page is never written out to disk, leaving the database file
43314
+ ** undersized. Fix this now if it is the case. */
43315
+ if( pPager->dbSize>pPager->dbFileSize ){
4330143316
Pgno nNew = pPager->dbSize - (pPager->dbSize==PAGER_MJ_PGNO(pPager));
4330243317
assert( pPager->eState==PAGER_WRITER_DBMOD );
4330343318
rc = pager_truncate(pPager, nNew);
4330443319
if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
4330543320
}
@@ -43368,11 +43383,11 @@
4336843383
pPager->eState = PAGER_READER;
4336943384
return SQLITE_OK;
4337043385
}
4337143386
4337243387
PAGERTRACE(("COMMIT %d\n", PAGERID(pPager)));
43373
- rc = pager_end_transaction(pPager, pPager->setMaster);
43388
+ rc = pager_end_transaction(pPager, pPager->setMaster, 1);
4337443389
return pager_error(pPager, rc);
4337543390
}
4337643391
4337743392
/*
4337843393
** If a write transaction is open, then all changes made within the
@@ -43413,15 +43428,15 @@
4341343428
if( pPager->eState<=PAGER_READER ) return SQLITE_OK;
4341443429
4341543430
if( pagerUseWal(pPager) ){
4341643431
int rc2;
4341743432
rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, -1);
43418
- rc2 = pager_end_transaction(pPager, pPager->setMaster);
43433
+ rc2 = pager_end_transaction(pPager, pPager->setMaster, 0);
4341943434
if( rc==SQLITE_OK ) rc = rc2;
4342043435
}else if( !isOpen(pPager->jfd) || pPager->eState==PAGER_WRITER_LOCKED ){
4342143436
int eState = pPager->eState;
43422
- rc = pager_end_transaction(pPager, 0);
43437
+ rc = pager_end_transaction(pPager, 0, 0);
4342343438
if( !MEMDB && eState>PAGER_WRITER_LOCKED ){
4342443439
/* This can happen using journal_mode=off. Move the pager to the error
4342543440
** state to indicate that the contents of the cache may not be trusted.
4342643441
** Any active readers will get SQLITE_ABORT.
4342743442
*/
@@ -43815,11 +43830,12 @@
4381543830
** the journal needs to be sync()ed before database page pPg->pgno
4381643831
** can be written to. The caller has already promised not to write to it.
4381743832
*/
4381843833
if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){
4381943834
needSyncPgno = pPg->pgno;
43820
- assert( pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize );
43835
+ assert( pPager->journalMode==PAGER_JOURNALMODE_OFF ||
43836
+ pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize );
4382143837
assert( pPg->flags&PGHDR_DIRTY );
4382243838
}
4382343839
4382443840
/* If the cache contains a page with page-number pgno, remove it
4382543841
** from its hash chain. Also, if the PGHDR_NEED_SYNC flag was set for
@@ -47819,10 +47835,11 @@
4781947835
MemPage *pPage1; /* First page of the database */
4782047836
u8 openFlags; /* Flags to sqlite3BtreeOpen() */
4782147837
#ifndef SQLITE_OMIT_AUTOVACUUM
4782247838
u8 autoVacuum; /* True if auto-vacuum is enabled */
4782347839
u8 incrVacuum; /* True if incr-vacuum is enabled */
47840
+ u8 bDoTruncate; /* True to truncate db on commit */
4782447841
#endif
4782547842
u8 inTransaction; /* Transaction state */
4782647843
u8 max1bytePayload; /* Maximum first byte of cell for a 1-byte payload */
4782747844
u16 btsFlags; /* Boolean parameters. See BTS_* macros below */
4782847845
u16 maxLocal; /* Maximum local payload in non-LEAFDATA tables */
@@ -50937,10 +50954,11 @@
5093750954
** is requested, this is a no-op.
5093850955
*/
5093950956
if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){
5094050957
goto trans_begun;
5094150958
}
50959
+ assert( pBt->bDoTruncate==0 );
5094250960
5094350961
/* Write transactions are not possible on a read-only database */
5094450962
if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){
5094550963
rc = SQLITE_READONLY;
5094650964
goto trans_begun;
@@ -51251,30 +51269,32 @@
5125151269
return rc;
5125251270
}
5125351271
5125451272
/* Forward declaration required by incrVacuumStep(). */
5125551273
static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8);
51274
+#define BTALLOC_ANY 0 /* Allocate any page */
51275
+#define BTALLOC_EXACT 1 /* Allocate exact page if possible */
51276
+#define BTALLOC_LE 2 /* Allocate any page <= the parameter */
5125651277
5125751278
/*
51258
-** Perform a single step of an incremental-vacuum. If successful,
51259
-** return SQLITE_OK. If there is no work to do (and therefore no
51260
-** point in calling this function again), return SQLITE_DONE.
51261
-**
51262
-** More specificly, this function attempts to re-organize the
51263
-** database so that the last page of the file currently in use
51264
-** is no longer in use.
51265
-**
51266
-** If the nFin parameter is non-zero, this function assumes
51267
-** that the caller will keep calling incrVacuumStep() until
51268
-** it returns SQLITE_DONE or an error, and that nFin is the
51269
-** number of pages the database file will contain after this
51270
-** process is complete. If nFin is zero, it is assumed that
51271
-** incrVacuumStep() will be called a finite amount of times
51272
-** which may or may not empty the freelist. A full autovacuum
51273
-** has nFin>0. A "PRAGMA incremental_vacuum" has nFin==0.
51274
-*/
51275
-static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg){
51279
+** Perform a single step of an incremental-vacuum. If successful, return
51280
+** SQLITE_OK. If there is no work to do (and therefore no point in
51281
+** calling this function again), return SQLITE_DONE. Or, if an error
51282
+** occurs, return some other error code.
51283
+**
51284
+** More specificly, this function attempts to re-organize the database so
51285
+** that the last page of the file currently in use is no longer in use.
51286
+**
51287
+** Parameter nFin is the number of pages that this database would contain
51288
+** were this function called until it returns SQLITE_DONE.
51289
+**
51290
+** If the bCommit parameter is non-zero, this function assumes that the
51291
+** caller will keep calling incrVacuumStep() until it returns SQLITE_DONE
51292
+** or an error. bCommit is passed true for an auto-vacuum-on-commmit
51293
+** operation, or false for an incremental vacuum.
51294
+*/
51295
+static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg, int bCommit){
5127651296
Pgno nFreeList; /* Number of pages still on the free-list */
5127751297
int rc;
5127851298
5127951299
assert( sqlite3_mutex_held(pBt->mutex) );
5128051300
assert( iLastPg>nFin );
@@ -51295,85 +51315,98 @@
5129551315
if( eType==PTRMAP_ROOTPAGE ){
5129651316
return SQLITE_CORRUPT_BKPT;
5129751317
}
5129851318
5129951319
if( eType==PTRMAP_FREEPAGE ){
51300
- if( nFin==0 ){
51320
+ if( bCommit==0 ){
5130151321
/* Remove the page from the files free-list. This is not required
51302
- ** if nFin is non-zero. In that case, the free-list will be
51322
+ ** if bCommit is non-zero. In that case, the free-list will be
5130351323
** truncated to zero after this function returns, so it doesn't
5130451324
** matter if it still contains some garbage entries.
5130551325
*/
5130651326
Pgno iFreePg;
5130751327
MemPage *pFreePg;
51308
- rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, 1);
51328
+ rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, BTALLOC_EXACT);
5130951329
if( rc!=SQLITE_OK ){
5131051330
return rc;
5131151331
}
5131251332
assert( iFreePg==iLastPg );
5131351333
releasePage(pFreePg);
5131451334
}
5131551335
} else {
5131651336
Pgno iFreePg; /* Index of free page to move pLastPg to */
5131751337
MemPage *pLastPg;
51338
+ u8 eMode = BTALLOC_ANY; /* Mode parameter for allocateBtreePage() */
51339
+ Pgno iNear = 0; /* nearby parameter for allocateBtreePage() */
5131851340
5131951341
rc = btreeGetPage(pBt, iLastPg, &pLastPg, 0);
5132051342
if( rc!=SQLITE_OK ){
5132151343
return rc;
5132251344
}
5132351345
51324
- /* If nFin is zero, this loop runs exactly once and page pLastPg
51346
+ /* If bCommit is zero, this loop runs exactly once and page pLastPg
5132551347
** is swapped with the first free page pulled off the free list.
5132651348
**
51327
- ** On the other hand, if nFin is greater than zero, then keep
51349
+ ** On the other hand, if bCommit is greater than zero, then keep
5132851350
** looping until a free-page located within the first nFin pages
5132951351
** of the file is found.
5133051352
*/
51353
+ if( bCommit==0 ){
51354
+ eMode = BTALLOC_LE;
51355
+ iNear = nFin;
51356
+ }
5133151357
do {
5133251358
MemPage *pFreePg;
51333
- rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, 0, 0);
51359
+ rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iNear, eMode);
5133451360
if( rc!=SQLITE_OK ){
5133551361
releasePage(pLastPg);
5133651362
return rc;
5133751363
}
5133851364
releasePage(pFreePg);
51339
- }while( nFin!=0 && iFreePg>nFin );
51365
+ }while( bCommit && iFreePg>nFin );
5134051366
assert( iFreePg<iLastPg );
5134151367
51342
- rc = sqlite3PagerWrite(pLastPg->pDbPage);
51343
- if( rc==SQLITE_OK ){
51344
- rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, nFin!=0);
51345
- }
51368
+ rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, bCommit);
5134651369
releasePage(pLastPg);
5134751370
if( rc!=SQLITE_OK ){
5134851371
return rc;
5134951372
}
5135051373
}
5135151374
}
5135251375
51353
- if( nFin==0 ){
51354
- iLastPg--;
51355
- while( iLastPg==PENDING_BYTE_PAGE(pBt)||PTRMAP_ISPAGE(pBt, iLastPg) ){
51356
- if( PTRMAP_ISPAGE(pBt, iLastPg) ){
51357
- MemPage *pPg;
51358
- rc = btreeGetPage(pBt, iLastPg, &pPg, 0);
51359
- if( rc!=SQLITE_OK ){
51360
- return rc;
51361
- }
51362
- rc = sqlite3PagerWrite(pPg->pDbPage);
51363
- releasePage(pPg);
51364
- if( rc!=SQLITE_OK ){
51365
- return rc;
51366
- }
51367
- }
51368
- iLastPg--;
51369
- }
51370
- sqlite3PagerTruncateImage(pBt->pPager, iLastPg);
51376
+ if( bCommit==0 ){
51377
+ do {
51378
+ iLastPg--;
51379
+ }while( iLastPg==PENDING_BYTE_PAGE(pBt) || PTRMAP_ISPAGE(pBt, iLastPg) );
51380
+ pBt->bDoTruncate = 1;
5137151381
pBt->nPage = iLastPg;
5137251382
}
5137351383
return SQLITE_OK;
5137451384
}
51385
+
51386
+/*
51387
+** The database opened by the first argument is an auto-vacuum database
51388
+** nOrig pages in size containing nFree free pages. Return the expected
51389
+** size of the database in pages following an auto-vacuum operation.
51390
+*/
51391
+static Pgno finalDbSize(BtShared *pBt, Pgno nOrig, Pgno nFree){
51392
+ int nEntry; /* Number of entries on one ptrmap page */
51393
+ Pgno nPtrmap; /* Number of PtrMap pages to be freed */
51394
+ Pgno nFin; /* Return value */
51395
+
51396
+ nEntry = pBt->usableSize/5;
51397
+ nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry;
51398
+ nFin = nOrig - nFree - nPtrmap;
51399
+ if( nOrig>PENDING_BYTE_PAGE(pBt) && nFin<PENDING_BYTE_PAGE(pBt) ){
51400
+ nFin--;
51401
+ }
51402
+ while( PTRMAP_ISPAGE(pBt, nFin) || nFin==PENDING_BYTE_PAGE(pBt) ){
51403
+ nFin--;
51404
+ }
51405
+
51406
+ return nFin;
51407
+}
5137551408
5137651409
/*
5137751410
** A write-transaction must be opened before calling this function.
5137851411
** It performs a single unit of work towards an incremental vacuum.
5137951412
**
@@ -51388,15 +51421,25 @@
5138851421
sqlite3BtreeEnter(p);
5138951422
assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE );
5139051423
if( !pBt->autoVacuum ){
5139151424
rc = SQLITE_DONE;
5139251425
}else{
51393
- invalidateAllOverflowCache(pBt);
51394
- rc = incrVacuumStep(pBt, 0, btreePagecount(pBt));
51395
- if( rc==SQLITE_OK ){
51396
- rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
51397
- put4byte(&pBt->pPage1->aData[28], pBt->nPage);
51426
+ Pgno nOrig = btreePagecount(pBt);
51427
+ Pgno nFree = get4byte(&pBt->pPage1->aData[36]);
51428
+ Pgno nFin = finalDbSize(pBt, nOrig, nFree);
51429
+
51430
+ if( nOrig<nFin ){
51431
+ rc = SQLITE_CORRUPT_BKPT;
51432
+ }else if( nFree>0 ){
51433
+ invalidateAllOverflowCache(pBt);
51434
+ rc = incrVacuumStep(pBt, nFin, nOrig, 0);
51435
+ if( rc==SQLITE_OK ){
51436
+ rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
51437
+ put4byte(&pBt->pPage1->aData[28], pBt->nPage);
51438
+ }
51439
+ }else{
51440
+ rc = SQLITE_DONE;
5139851441
}
5139951442
}
5140051443
sqlite3BtreeLeave(p);
5140151444
return rc;
5140251445
}
@@ -51419,13 +51462,11 @@
5141951462
invalidateAllOverflowCache(pBt);
5142051463
assert(pBt->autoVacuum);
5142151464
if( !pBt->incrVacuum ){
5142251465
Pgno nFin; /* Number of pages in database after autovacuuming */
5142351466
Pgno nFree; /* Number of pages on the freelist initially */
51424
- Pgno nPtrmap; /* Number of PtrMap pages to be freed */
5142551467
Pgno iFree; /* The next page to be freed */
51426
- int nEntry; /* Number of entries on one ptrmap page */
5142751468
Pgno nOrig; /* Database size before freeing */
5142851469
5142951470
nOrig = btreePagecount(pBt);
5143051471
if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){
5143151472
/* It is not possible to create a database for which the final page
@@ -51434,30 +51475,22 @@
5143451475
*/
5143551476
return SQLITE_CORRUPT_BKPT;
5143651477
}
5143751478
5143851479
nFree = get4byte(&pBt->pPage1->aData[36]);
51439
- nEntry = pBt->usableSize/5;
51440
- nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry;
51441
- nFin = nOrig - nFree - nPtrmap;
51442
- if( nOrig>PENDING_BYTE_PAGE(pBt) && nFin<PENDING_BYTE_PAGE(pBt) ){
51443
- nFin--;
51444
- }
51445
- while( PTRMAP_ISPAGE(pBt, nFin) || nFin==PENDING_BYTE_PAGE(pBt) ){
51446
- nFin--;
51447
- }
51480
+ nFin = finalDbSize(pBt, nOrig, nFree);
5144851481
if( nFin>nOrig ) return SQLITE_CORRUPT_BKPT;
5144951482
5145051483
for(iFree=nOrig; iFree>nFin && rc==SQLITE_OK; iFree--){
51451
- rc = incrVacuumStep(pBt, nFin, iFree);
51484
+ rc = incrVacuumStep(pBt, nFin, iFree, 1);
5145251485
}
5145351486
if( (rc==SQLITE_DONE || rc==SQLITE_OK) && nFree>0 ){
5145451487
rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
5145551488
put4byte(&pBt->pPage1->aData[32], 0);
5145651489
put4byte(&pBt->pPage1->aData[36], 0);
5145751490
put4byte(&pBt->pPage1->aData[28], nFin);
51458
- sqlite3PagerTruncateImage(pBt->pPager, nFin);
51491
+ pBt->bDoTruncate = 1;
5145951492
pBt->nPage = nFin;
5146051493
}
5146151494
if( rc!=SQLITE_OK ){
5146251495
sqlite3PagerRollback(pPager);
5146351496
}
@@ -51508,10 +51541,13 @@
5150851541
if( rc!=SQLITE_OK ){
5150951542
sqlite3BtreeLeave(p);
5151051543
return rc;
5151151544
}
5151251545
}
51546
+ if( pBt->bDoTruncate ){
51547
+ sqlite3PagerTruncateImage(pBt->pPager, pBt->nPage);
51548
+ }
5151351549
#endif
5151451550
rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zMaster, 0);
5151551551
sqlite3BtreeLeave(p);
5151651552
}
5151751553
return rc;
@@ -51523,10 +51559,13 @@
5152351559
*/
5152451560
static void btreeEndTransaction(Btree *p){
5152551561
BtShared *pBt = p->pBt;
5152651562
assert( sqlite3BtreeHoldsMutex(p) );
5152751563
51564
+#ifndef SQLITE_OMIT_AUTOVACUUM
51565
+ pBt->bDoTruncate = 0;
51566
+#endif
5152851567
btreeClearHasContent(pBt);
5152951568
if( p->inTrans>TRANS_NONE && p->db->activeVdbeCnt>1 ){
5153051569
/* If there are other active statements that belong to this database
5153151570
** handle, downgrade to a read-only transaction. The other statements
5153251571
** may still be reading from the database. */
@@ -53195,25 +53234,27 @@
5319553234
**
5319653235
** SQLITE_OK is returned on success. Any other return value indicates
5319753236
** an error. *ppPage and *pPgno are undefined in the event of an error.
5319853237
** Do not invoke sqlite3PagerUnref() on *ppPage if an error is returned.
5319953238
**
53200
-** If the "nearby" parameter is not 0, then a (feeble) effort is made to
53239
+** If the "nearby" parameter is not 0, then an effort is made to
5320153240
** locate a page close to the page number "nearby". This can be used in an
5320253241
** attempt to keep related pages close to each other in the database file,
5320353242
** which in turn can make database access faster.
5320453243
**
53205
-** If the "exact" parameter is not 0, and the page-number nearby exists
53206
-** anywhere on the free-list, then it is guarenteed to be returned. This
53207
-** is only used by auto-vacuum databases when allocating a new table.
53244
+** If the eMode parameter is BTALLOC_EXACT and the nearby page exists
53245
+** anywhere on the free-list, then it is guaranteed to be returned. If
53246
+** eMode is BTALLOC_LT then the page returned will be less than or equal
53247
+** to nearby if any such page exists. If eMode is BTALLOC_ANY then there
53248
+** are no restrictions on which page is returned.
5320853249
*/
5320953250
static int allocateBtreePage(
53210
- BtShared *pBt,
53211
- MemPage **ppPage,
53212
- Pgno *pPgno,
53213
- Pgno nearby,
53214
- u8 exact
53251
+ BtShared *pBt, /* The btree */
53252
+ MemPage **ppPage, /* Store pointer to the allocated page here */
53253
+ Pgno *pPgno, /* Store the page number here */
53254
+ Pgno nearby, /* Search for a page near this one */
53255
+ u8 eMode /* BTALLOC_EXACT, BTALLOC_LT, or BTALLOC_ANY */
5321553256
){
5321653257
MemPage *pPage1;
5321753258
int rc;
5321853259
u32 n; /* Number of pages on the freelist */
5321953260
u32 k; /* Number of leaves on the trunk of the freelist */
@@ -53220,10 +53261,11 @@
5322053261
MemPage *pTrunk = 0;
5322153262
MemPage *pPrevTrunk = 0;
5322253263
Pgno mxPage; /* Total size of the database file */
5322353264
5322453265
assert( sqlite3_mutex_held(pBt->mutex) );
53266
+ assert( eMode==BTALLOC_ANY || (nearby>0 && pBt->autoVacuum) );
5322553267
pPage1 = pBt->pPage1;
5322653268
mxPage = btreePagecount(pBt);
5322753269
n = get4byte(&pPage1->aData[36]);
5322853270
testcase( n==mxPage-1 );
5322953271
if( n>=mxPage ){
@@ -53232,25 +53274,28 @@
5323253274
if( n>0 ){
5323353275
/* There are pages on the freelist. Reuse one of those pages. */
5323453276
Pgno iTrunk;
5323553277
u8 searchList = 0; /* If the free-list must be searched for 'nearby' */
5323653278
53237
- /* If the 'exact' parameter was true and a query of the pointer-map
53279
+ /* If eMode==BTALLOC_EXACT and a query of the pointer-map
5323853280
** shows that the page 'nearby' is somewhere on the free-list, then
5323953281
** the entire-list will be searched for that page.
5324053282
*/
5324153283
#ifndef SQLITE_OMIT_AUTOVACUUM
53242
- if( exact && nearby<=mxPage ){
53243
- u8 eType;
53244
- assert( nearby>0 );
53245
- assert( pBt->autoVacuum );
53246
- rc = ptrmapGet(pBt, nearby, &eType, 0);
53247
- if( rc ) return rc;
53248
- if( eType==PTRMAP_FREEPAGE ){
53249
- searchList = 1;
53250
- }
53251
- *pPgno = nearby;
53284
+ if( eMode==BTALLOC_EXACT ){
53285
+ if( nearby<=mxPage ){
53286
+ u8 eType;
53287
+ assert( nearby>0 );
53288
+ assert( pBt->autoVacuum );
53289
+ rc = ptrmapGet(pBt, nearby, &eType, 0);
53290
+ if( rc ) return rc;
53291
+ if( eType==PTRMAP_FREEPAGE ){
53292
+ searchList = 1;
53293
+ }
53294
+ }
53295
+ }else if( eMode==BTALLOC_LE ){
53296
+ searchList = 1;
5325253297
}
5325353298
#endif
5325453299
5325553300
/* Decrement the free-list count by 1. Set iTrunk to the index of the
5325653301
** first free-list trunk page. iPrevTrunk is initially 1.
@@ -53259,11 +53304,12 @@
5325953304
if( rc ) return rc;
5326053305
put4byte(&pPage1->aData[36], n-1);
5326153306
5326253307
/* The code within this loop is run only once if the 'searchList' variable
5326353308
** is not true. Otherwise, it runs once for each trunk-page on the
53264
- ** free-list until the page 'nearby' is located.
53309
+ ** free-list until the page 'nearby' is located (eMode==BTALLOC_EXACT)
53310
+ ** or until a page less than 'nearby' is located (eMode==BTALLOC_LT)
5326553311
*/
5326653312
do {
5326753313
pPrevTrunk = pTrunk;
5326853314
if( pPrevTrunk ){
5326953315
iTrunk = get4byte(&pPrevTrunk->aData[0]);
@@ -53301,15 +53347,17 @@
5330153347
}else if( k>(u32)(pBt->usableSize/4 - 2) ){
5330253348
/* Value of k is out of range. Database corruption */
5330353349
rc = SQLITE_CORRUPT_BKPT;
5330453350
goto end_allocate_page;
5330553351
#ifndef SQLITE_OMIT_AUTOVACUUM
53306
- }else if( searchList && nearby==iTrunk ){
53352
+ }else if( searchList
53353
+ && (nearby==iTrunk || (iTrunk<nearby && eMode==BTALLOC_LE))
53354
+ ){
5330753355
/* The list is being searched and this trunk page is the page
5330853356
** to allocate, regardless of whether it has leaves.
5330953357
*/
53310
- assert( *pPgno==iTrunk );
53358
+ *pPgno = iTrunk;
5331153359
*ppPage = pTrunk;
5331253360
searchList = 0;
5331353361
rc = sqlite3PagerWrite(pTrunk->pDbPage);
5331453362
if( rc ){
5331553363
goto end_allocate_page;
@@ -53368,18 +53416,28 @@
5336853416
u32 closest;
5336953417
Pgno iPage;
5337053418
unsigned char *aData = pTrunk->aData;
5337153419
if( nearby>0 ){
5337253420
u32 i;
53373
- int dist;
5337453421
closest = 0;
53375
- dist = sqlite3AbsInt32(get4byte(&aData[8]) - nearby);
53376
- for(i=1; i<k; i++){
53377
- int d2 = sqlite3AbsInt32(get4byte(&aData[8+i*4]) - nearby);
53378
- if( d2<dist ){
53379
- closest = i;
53380
- dist = d2;
53422
+ if( eMode==BTALLOC_LE ){
53423
+ for(i=0; i<k; i++){
53424
+ iPage = get4byte(&aData[8+i*4]);
53425
+ if( iPage<=nearby ){
53426
+ closest = i;
53427
+ break;
53428
+ }
53429
+ }
53430
+ }else{
53431
+ int dist;
53432
+ dist = sqlite3AbsInt32(get4byte(&aData[8]) - nearby);
53433
+ for(i=1; i<k; i++){
53434
+ int d2 = sqlite3AbsInt32(get4byte(&aData[8+i*4]) - nearby);
53435
+ if( d2<dist ){
53436
+ closest = i;
53437
+ dist = d2;
53438
+ }
5338153439
}
5338253440
}
5338353441
}else{
5338453442
closest = 0;
5338553443
}
@@ -53389,11 +53447,13 @@
5338953447
if( iPage>mxPage ){
5339053448
rc = SQLITE_CORRUPT_BKPT;
5339153449
goto end_allocate_page;
5339253450
}
5339353451
testcase( iPage==mxPage );
53394
- if( !searchList || iPage==nearby ){
53452
+ if( !searchList
53453
+ || (iPage==nearby || (iPage<nearby && eMode==BTALLOC_LE))
53454
+ ){
5339553455
int noContent;
5339653456
*pPgno = iPage;
5339753457
TRACE(("ALLOCATE: %d was leaf %d of %d on trunk %d"
5339853458
": %d more free pages\n",
5339953459
*pPgno, closest+1, k, pTrunk->pgno, n-1));
@@ -53416,12 +53476,30 @@
5341653476
}
5341753477
releasePage(pPrevTrunk);
5341853478
pPrevTrunk = 0;
5341953479
}while( searchList );
5342053480
}else{
53421
- /* There are no pages on the freelist, so create a new page at the
53422
- ** end of the file */
53481
+ /* There are no pages on the freelist, so append a new page to the
53482
+ ** database image.
53483
+ **
53484
+ ** Normally, new pages allocated by this block can be requested from the
53485
+ ** pager layer with the 'no-content' flag set. This prevents the pager
53486
+ ** from trying to read the pages content from disk. However, if the
53487
+ ** current transaction has already run one or more incremental-vacuum
53488
+ ** steps, then the page we are about to allocate may contain content
53489
+ ** that is required in the event of a rollback. In this case, do
53490
+ ** not set the no-content flag. This causes the pager to load and journal
53491
+ ** the current page content before overwriting it.
53492
+ **
53493
+ ** Note that the pager will not actually attempt to load or journal
53494
+ ** content for any page that really does lie past the end of the database
53495
+ ** file on disk. So the effects of disabling the no-content optimization
53496
+ ** here are confined to those pages that lie between the end of the
53497
+ ** database image and the end of the database file.
53498
+ */
53499
+ int bNoContent = (0==pBt->bDoTruncate);
53500
+
5342353501
rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
5342453502
if( rc ) return rc;
5342553503
pBt->nPage++;
5342653504
if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ) pBt->nPage++;
5342753505
@@ -53432,11 +53510,11 @@
5343253510
** becomes a new pointer-map page, the second is used by the caller.
5343353511
*/
5343453512
MemPage *pPg = 0;
5343553513
TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", pBt->nPage));
5343653514
assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) );
53437
- rc = btreeGetPage(pBt, pBt->nPage, &pPg, 1);
53515
+ rc = btreeGetPage(pBt, pBt->nPage, &pPg, bNoContent);
5343853516
if( rc==SQLITE_OK ){
5343953517
rc = sqlite3PagerWrite(pPg->pDbPage);
5344053518
releasePage(pPg);
5344153519
}
5344253520
if( rc ) return rc;
@@ -53446,11 +53524,11 @@
5344653524
#endif
5344753525
put4byte(28 + (u8*)pBt->pPage1->aData, pBt->nPage);
5344853526
*pPgno = pBt->nPage;
5344953527
5345053528
assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );
53451
- rc = btreeGetPage(pBt, *pPgno, ppPage, 1);
53529
+ rc = btreeGetPage(pBt, *pPgno, ppPage, bNoContent);
5345253530
if( rc ) return rc;
5345353531
rc = sqlite3PagerWrite((*ppPage)->pDbPage);
5345453532
if( rc!=SQLITE_OK ){
5345553533
releasePage(*ppPage);
5345653534
}
@@ -55461,11 +55539,11 @@
5546155539
5546255540
/* Allocate a page. The page that currently resides at pgnoRoot will
5546355541
** be moved to the allocated page (unless the allocated page happens
5546455542
** to reside at pgnoRoot).
5546555543
*/
55466
- rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, 1);
55544
+ rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, BTALLOC_EXACT);
5546755545
if( rc!=SQLITE_OK ){
5546855546
return rc;
5546955547
}
5547055548
5547155549
if( pgnoMove!=pgnoRoot ){
@@ -57153,11 +57231,10 @@
5715357231
}
5715457232
}else{
5715557233
nDestTruncate = nSrcPage * (pgszSrc/pgszDest);
5715657234
}
5715757235
assert( nDestTruncate>0 );
57158
- sqlite3PagerTruncateImage(pDestPager, nDestTruncate);
5715957236
5716057237
if( pgszSrc<pgszDest ){
5716157238
/* If the source page-size is smaller than the destination page-size,
5716257239
** two extra things may need to happen:
5716357240
**
@@ -57167,10 +57244,12 @@
5716757244
** pending-byte page in the source database may need to be
5716857245
** copied into the destination database.
5716957246
*/
5717057247
const i64 iSize = (i64)pgszSrc * (i64)nSrcPage;
5717157248
sqlite3_file * const pFile = sqlite3PagerFile(pDestPager);
57249
+ Pgno iPg;
57250
+ int nDstPage;
5717257251
i64 iOff;
5717357252
i64 iEnd;
5717457253
5717557254
assert( pFile );
5717657255
assert( nDestTruncate==0
@@ -57177,17 +57256,30 @@
5717757256
|| (i64)nDestTruncate*(i64)pgszDest >= iSize || (
5717857257
nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1)
5717957258
&& iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest
5718057259
));
5718157260
57182
- /* This call ensures that all data required to recreate the original
57261
+ /* This block ensures that all data required to recreate the original
5718357262
** database has been stored in the journal for pDestPager and the
5718457263
** journal synced to disk. So at this point we may safely modify
5718557264
** the database file in any way, knowing that if a power failure
5718657265
** occurs, the original database will be reconstructed from the
5718757266
** journal file. */
57188
- rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1);
57267
+ sqlite3PagerPagecount(pDestPager, &nDstPage);
57268
+ for(iPg=nDestTruncate; rc==SQLITE_OK && iPg<=(Pgno)nDstPage; iPg++){
57269
+ if( iPg!=PENDING_BYTE_PAGE(p->pDest->pBt) ){
57270
+ DbPage *pPg;
57271
+ rc = sqlite3PagerGet(pDestPager, iPg, &pPg);
57272
+ if( rc==SQLITE_OK ){
57273
+ rc = sqlite3PagerWrite(pPg);
57274
+ sqlite3PagerUnref(pPg);
57275
+ }
57276
+ }
57277
+ }
57278
+ if( rc==SQLITE_OK ){
57279
+ rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1);
57280
+ }
5718957281
5719057282
/* Write the extra pages and truncate the database file as required */
5719157283
iEnd = MIN(PENDING_BYTE + pgszDest, iSize);
5719257284
for(
5719357285
iOff=PENDING_BYTE+pgszSrc;
@@ -57210,10 +57302,11 @@
5721057302
/* Sync the database file to disk. */
5721157303
if( rc==SQLITE_OK ){
5721257304
rc = sqlite3PagerSync(pDestPager);
5721357305
}
5721457306
}else{
57307
+ sqlite3PagerTruncateImage(pDestPager, nDestTruncate);
5721557308
rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 0);
5721657309
}
5721757310
5721857311
/* Finish committing the transaction to the destination database. */
5721957312
if( SQLITE_OK==rc
@@ -63039,11 +63132,11 @@
6303963132
return 0;
6304063133
}
6304163134
if( zName ){
6304263135
for(i=0; i<p->nzVar; i++){
6304363136
const char *z = p->azVar[i];
63044
- if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){
63137
+ if( z && strncmp(z,zName,nName)==0 && z[nName]==0 ){
6304563138
return i+1;
6304663139
}
6304763140
}
6304863141
}
6304963142
return 0;
@@ -72691,16 +72784,16 @@
7269172784
const char *zTab,
7269272785
const char *zDb
7269372786
){
7269472787
int n;
7269572788
for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){}
72696
- if( zDb && sqlite3StrNICmp(zSpan, zDb, n)!=0 ){
72789
+ if( zDb && (sqlite3StrNICmp(zSpan, zDb, n)!=0 || zDb[n]!=0) ){
7269772790
return 0;
7269872791
}
7269972792
zSpan += n+1;
7270072793
for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){}
72701
- if( zTab && sqlite3StrNICmp(zSpan, zTab, n)!=0 ){
72794
+ if( zTab && (sqlite3StrNICmp(zSpan, zTab, n)!=0 || zTab[n]!=0) ){
7270272795
return 0;
7270372796
}
7270472797
zSpan += n+1;
7270572798
if( zCol && sqlite3StrICmp(zSpan, zCol)!=0 ){
7270672799
return 0;
@@ -74493,11 +74586,11 @@
7449374586
** number as the prior appearance of the same name, or if the name
7449474587
** has never appeared before, reuse the same variable number
7449574588
*/
7449674589
ynVar i;
7449774590
for(i=0; i<pParse->nzVar; i++){
74498
- if( pParse->azVar[i] && memcmp(pParse->azVar[i],z,n+1)==0 ){
74591
+ if( pParse->azVar[i] && strcmp(pParse->azVar[i],z)==0 ){
7449974592
pExpr->iColumn = x = (ynVar)i+1;
7450074593
break;
7450174594
}
7450274595
}
7450374596
if( x==0 ) x = pExpr->iColumn = (ynVar)(++pParse->nVar);
@@ -79350,11 +79443,11 @@
7935079443
}
7935179444
if( pTab->tnum==0 ){
7935279445
/* Do not gather statistics on views or virtual tables */
7935379446
return;
7935479447
}
79355
- if( memcmp(pTab->zName, "sqlite_", 7)==0 ){
79448
+ if( sqlite3_strnicmp(pTab->zName, "sqlite_", 7)==0 ){
7935679449
/* Do not gather statistics on system tables */
7935779450
return;
7935879451
}
7935979452
assert( sqlite3BtreeHoldsAllMutexes(db) );
7936079453
iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
@@ -79760,11 +79853,11 @@
7976079853
}
7976179854
if( i==0 ) pTable->nRowEst = v;
7976279855
if( pIndex==0 ) break;
7976379856
pIndex->aiRowEst[i] = v;
7976479857
if( *z==' ' ) z++;
79765
- if( memcmp(z, "unordered", 10)==0 ){
79858
+ if( strcmp(z, "unordered")==0 ){
7976679859
pIndex->bUnordered = 1;
7976779860
break;
7976879861
}
7976979862
}
7977079863
return 0;
@@ -83409,11 +83502,11 @@
8340983502
pDb = &db->aDb[iDb];
8341083503
8341183504
assert( pTab!=0 );
8341283505
assert( pParse->nErr==0 );
8341383506
if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0
83414
- && memcmp(&pTab->zName[7],"altertab_",9)!=0 ){
83507
+ && sqlite3StrNICmp(&pTab->zName[7],"altertab_",9)!=0 ){
8341583508
sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName);
8341683509
goto exit_create_index;
8341783510
}
8341883511
#ifndef SQLITE_OMIT_VIEW
8341983512
if( pTab->pSelect ){
@@ -86787,10 +86880,61 @@
8678786880
sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
8678886881
break;
8678986882
}
8679086883
}
8679186884
}
86885
+
86886
+/*
86887
+** The unicode() function. Return the integer unicode code-point value
86888
+** for the first character of the input string.
86889
+*/
86890
+static void unicodeFunc(
86891
+ sqlite3_context *context,
86892
+ int argc,
86893
+ sqlite3_value **argv
86894
+){
86895
+ const unsigned char *z = sqlite3_value_text(argv[0]);
86896
+ (void)argc;
86897
+ if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
86898
+}
86899
+
86900
+/*
86901
+** The char() function takes zero or more arguments, each of which is
86902
+** an integer. It constructs a string where each character of the string
86903
+** is the unicode character for the corresponding integer argument.
86904
+*/
86905
+static void charFunc(
86906
+ sqlite3_context *context,
86907
+ int argc,
86908
+ sqlite3_value **argv
86909
+){
86910
+ unsigned char *z, *zOut;
86911
+ int i;
86912
+ zOut = z = sqlite3_malloc( argc*4 );
86913
+ if( z==0 ){
86914
+ sqlite3_result_error_nomem(context);
86915
+ return;
86916
+ }
86917
+ for(i=0; i<argc; i++){
86918
+ sqlite3_int64 x;
86919
+ unsigned c;
86920
+ x = sqlite3_value_int64(argv[i]);
86921
+ if( x<0 || x>0x10ffff ) x = 0xfffd;
86922
+ c = (unsigned)(x & 0x1fffff);
86923
+ if( c<=0xFFFF ){
86924
+ if( c>=0xd800 && c<=0xdfff ) c = 0xfffd;
86925
+ *zOut++ = (u8)(c&0x00FF);
86926
+ *zOut++ = (u8)((c>>8)&0x00FF);
86927
+ }else{
86928
+ *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0));
86929
+ *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03));
86930
+ *zOut++ = (u8)(c&0x00FF);
86931
+ *zOut++ = (u8)(0x00DC + ((c>>8)&0x03));
86932
+ }
86933
+ }
86934
+ sqlite3_result_text16le(context, (char*)z, (int)(zOut-z), sqlite3_free);
86935
+}
8679286936
8679386937
/*
8679486938
** The hex() function. Interpret the argument as a blob. Return
8679586939
** a hexadecimal rendering as text.
8679686940
*/
@@ -87415,10 +87559,12 @@
8741587559
FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
8741687560
FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
8741787561
FUNCTION(instr, 2, 0, 0, instrFunc ),
8741887562
FUNCTION(substr, 2, 0, 0, substrFunc ),
8741987563
FUNCTION(substr, 3, 0, 0, substrFunc ),
87564
+ FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
87565
+ FUNCTION(char, -1, 0, 0, charFunc ),
8742087566
FUNCTION(abs, 1, 0, 0, absFunc ),
8742187567
#ifndef SQLITE_OMIT_FLOATING_POINT
8742287568
FUNCTION(round, 1, 0, 0, roundFunc ),
8742387569
FUNCTION(round, 2, 0, 0, roundFunc ),
8742487570
#endif
@@ -91626,10 +91772,23 @@
9162691772
0,
9162791773
#endif
9162891774
sqlite3_blob_reopen,
9162991775
sqlite3_vtab_config,
9163091776
sqlite3_vtab_on_conflict,
91777
+ sqlite3_close_v2,
91778
+ sqlite3_db_filename,
91779
+ sqlite3_db_readonly,
91780
+ sqlite3_db_release_memory,
91781
+ sqlite3_errstr,
91782
+ sqlite3_stmt_busy,
91783
+ sqlite3_stmt_readonly,
91784
+ sqlite3_stricmp,
91785
+ sqlite3_uri_boolean,
91786
+ sqlite3_uri_int64,
91787
+ sqlite3_uri_parameter,
91788
+ sqlite3_vsnprintf,
91789
+ sqlite3_wal_checkpoint_v2
9163191790
};
9163291791
9163391792
/*
9163491793
** Attempt to load an SQLite extension library contained in the file
9163591794
** zFile. The entry point is zProc. zProc may be 0 in which case a
@@ -92866,10 +93025,11 @@
9286693025
Column *pCol;
9286793026
Index *pPk;
9286893027
for(pPk=pTab->pIndex; pPk && pPk->autoIndex!=2; pPk=pPk->pNext){}
9286993028
sqlite3VdbeSetNumCols(v, 6);
9287093029
pParse->nMem = 6;
93030
+ sqlite3CodeVerifySchema(pParse, iDb);
9287193031
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cid", SQLITE_STATIC);
9287293032
sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
9287393033
sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "type", SQLITE_STATIC);
9287493034
sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "notnull", SQLITE_STATIC);
9287593035
sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "dflt_value", SQLITE_STATIC);
@@ -92911,10 +93071,11 @@
9291193071
if( pIdx ){
9291293072
int i;
9291393073
pTab = pIdx->pTable;
9291493074
sqlite3VdbeSetNumCols(v, 3);
9291593075
pParse->nMem = 3;
93076
+ sqlite3CodeVerifySchema(pParse, iDb);
9291693077
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seqno", SQLITE_STATIC);
9291793078
sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "cid", SQLITE_STATIC);
9291893079
sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "name", SQLITE_STATIC);
9291993080
for(i=0; i<pIdx->nColumn; i++){
9292093081
int cnum = pIdx->aiColumn[i];
@@ -92937,10 +93098,11 @@
9293793098
pIdx = pTab->pIndex;
9293893099
if( pIdx ){
9293993100
int i = 0;
9294093101
sqlite3VdbeSetNumCols(v, 3);
9294193102
pParse->nMem = 3;
93103
+ sqlite3CodeVerifySchema(pParse, iDb);
9294293104
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
9294393105
sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
9294493106
sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC);
9294593107
while(pIdx){
9294693108
sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
@@ -93000,10 +93162,11 @@
9300093162
pFK = pTab->pFKey;
9300193163
if( pFK ){
9300293164
int i = 0;
9300393165
sqlite3VdbeSetNumCols(v, 8);
9300493166
pParse->nMem = 8;
93167
+ sqlite3CodeVerifySchema(pParse, iDb);
9300593168
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "id", SQLITE_STATIC);
9300693169
sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "seq", SQLITE_STATIC);
9300793170
sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "table", SQLITE_STATIC);
9300893171
sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "from", SQLITE_STATIC);
9300993172
sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "to", SQLITE_STATIC);
@@ -96914,11 +97077,12 @@
9691497077
if( op==TK_ALL ){
9691597078
regPrev = 0;
9691697079
}else{
9691797080
int nExpr = p->pEList->nExpr;
9691897081
assert( nOrderBy>=nExpr || db->mallocFailed );
96919
- regPrev = sqlite3GetTempRange(pParse, nExpr+1);
97082
+ regPrev = pParse->nMem+1;
97083
+ pParse->nMem += nExpr+1;
9692097084
sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev);
9692197085
pKeyDup = sqlite3DbMallocZero(db,
9692297086
sizeof(*pKeyDup) + nExpr*(sizeof(CollSeq*)+1) );
9692397087
if( pKeyDup ){
9692497088
pKeyDup->aSortOrder = (u8*)&pKeyDup->aColl[nExpr];
@@ -97096,16 +97260,10 @@
9709697260
sqlite3VdbeAddOp4(v, OP_Compare, destA.iSdst, destB.iSdst, nOrderBy,
9709797261
(char*)pKeyMerge, P4_KEYINFO_HANDOFF);
9709897262
sqlite3VdbeChangeP5(v, OPFLAG_PERMUTE);
9709997263
sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB);
9710097264
97101
- /* Release temporary registers
97102
- */
97103
- if( regPrev ){
97104
- sqlite3ReleaseTempRange(pParse, regPrev, nOrderBy+1);
97105
- }
97106
-
9710797265
/* Jump to the this point in order to terminate the query.
9710897266
*/
9710997267
sqlite3VdbeResolveLabel(v, labelEnd);
9711097268
9711197269
/* Set the number of output columns
@@ -103426,13 +103584,12 @@
103426103584
**
103427103585
** If there are multiple terms in the WHERE clause of the form "X <op> <expr>"
103428103586
** then try for the one with no dependencies on <expr> - in other words where
103429103587
** <expr> is a constant expression of some kind. Only return entries of
103430103588
** the form "X <op> Y" where Y is a column in another table if no terms of
103431
-** the form "X <op> <const-expr>" exist. Other than this priority, if there
103432
-** are two or more terms that match, then the choice of which term to return
103433
-** is arbitrary.
103589
+** the form "X <op> <const-expr>" exist. If no terms with a constant RHS
103590
+** exist, try to return a term that does not use WO_EQUIV.
103434103591
*/
103435103592
static WhereTerm *findTerm(
103436103593
WhereClause *pWC, /* The WHERE clause to be searched */
103437103594
int iCur, /* Cursor number of LHS */
103438103595
int iColumn, /* Column number of LHS */
@@ -103487,12 +103644,16 @@
103487103644
}
103488103645
if( sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ){
103489103646
continue;
103490103647
}
103491103648
}
103492
- pResult = pTerm;
103493
- if( pTerm->prereqRight==0 ) goto findTerm_success;
103649
+ if( pTerm->prereqRight==0 ){
103650
+ pResult = pTerm;
103651
+ goto findTerm_success;
103652
+ }else if( pResult==0 ){
103653
+ pResult = pTerm;
103654
+ }
103494103655
}
103495103656
if( (pTerm->eOperator & WO_EQUIV)!=0
103496103657
&& nEquiv<ArraySize(aEquiv)
103497103658
){
103498103659
pX = sqlite3ExprSkipCollate(pTerm->pExpr->pRight);
@@ -107014,10 +107175,11 @@
107014107175
testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
107015107176
iRowidReg = codeEqualityTerm(pParse, pTerm, pLevel, iReleaseReg);
107016107177
addrNxt = pLevel->addrNxt;
107017107178
sqlite3VdbeAddOp2(v, OP_MustBeInt, iRowidReg, addrNxt);
107018107179
sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addrNxt, iRowidReg);
107180
+ sqlite3ExprCacheAffinityChange(pParse, iRowidReg, 1);
107019107181
sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
107020107182
VdbeComment((v, "pk"));
107021107183
pLevel->op = OP_Noop;
107022107184
}else if( pLevel->plan.wsFlags & WHERE_ROWID_RANGE ){
107023107185
/* Case 2: We have an inequality comparison against the ROWID field.
@@ -114105,11 +114267,11 @@
114105114267
}
114106114268
}
114107114269
sqlite3VtabRollback(db);
114108114270
sqlite3EndBenignMalloc();
114109114271
114110
- if( db->flags&SQLITE_InternChanges ){
114272
+ if( (db->flags&SQLITE_InternChanges)!=0 && db->init.busy==0 ){
114111114273
sqlite3ExpirePreparedStatements(db);
114112114274
sqlite3ResetAllSchemasOfConnection(db);
114113114275
}
114114114276
114115114277
/* Any deferred constraint violations have now been resolved. */
114116114278
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -438,11 +438,12 @@
438 ** if it is already defined or if it is unneeded because we are
439 ** not doing a threadsafe build. Ticket #2681.
440 **
441 ** See also ticket #2741.
442 */
443 #if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) && SQLITE_THREADSAFE
 
444 # define _XOPEN_SOURCE 500 /* Needed to enable pthread recursive mutexes */
445 #endif
446
447 /*
448 ** The TCL headers are only needed when compiling the TCL bindings.
@@ -673,11 +674,11 @@
673 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
674 ** [sqlite_version()] and [sqlite_source_id()].
675 */
676 #define SQLITE_VERSION "3.7.16"
677 #define SQLITE_VERSION_NUMBER 3007016
678 #define SQLITE_SOURCE_ID "2013-02-13 14:04:28 7e10a62d0eb1cb2bdafb6752b78a9d368e9f21f5"
679
680 /*
681 ** CAPI3REF: Run-Time Library Version Numbers
682 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
683 **
@@ -1047,10 +1048,11 @@
1047 #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
1048 #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
1049 #define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8))
1050 #define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8))
1051 #define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8))
 
1052 #define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8))
1053 #define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8))
1054 #define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8))
1055 #define SQLITE_CONSTRAINT_FOREIGNKEY (SQLITE_CONSTRAINT | (3<<8))
1056 #define SQLITE_CONSTRAINT_FUNCTION (SQLITE_CONSTRAINT | (4<<8))
@@ -11915,11 +11917,11 @@
11915 SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*);
11916 SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*);
11917 SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, int);
11918 SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
11919 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
11920 SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse *, SrcList *, Expr *, ExprList *, Expr *, Expr *, char *);
11921 #endif
11922 SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
11923 SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
11924 SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*,SrcList*,Expr*,ExprList*,ExprList*,u16,int);
11925 SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo*);
@@ -12096,12 +12098,15 @@
12096 **
12097 ** x = getVarint32( A, B );
12098 ** x = putVarint32( A, B );
12099 **
12100 */
12101 #define getVarint32(A,B) (u8)((*(A)<(u8)0x80) ? ((B) = (u32)*(A)),1 : sqlite3GetVarint32((A), (u32 *)&(B)))
12102 #define putVarint32(A,B) (u8)(((u32)(B)<(u32)0x80) ? (*(A) = (unsigned char)(B)),1 : sqlite3PutVarint32((A), (B)))
 
 
 
12103 #define getVarint sqlite3GetVarint
12104 #define putVarint sqlite3PutVarint
12105
12106
12107 SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *, Index *);
@@ -23455,11 +23460,14 @@
23455 #endif
23456 }while( fd<0 && errno==EINTR );
23457 if( fd>=0 ){
23458 if( m!=0 ){
23459 struct stat statbuf;
23460 if( osFstat(fd, &statbuf)==0 && (statbuf.st_mode&0777)!=m ){
 
 
 
23461 osFchmod(fd, m);
23462 }
23463 }
23464 #if defined(FD_CLOEXEC) && (!defined(O_CLOEXEC) || O_CLOEXEC==0)
23465 osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
@@ -27655,11 +27663,11 @@
27655 pNew->ctrlFlags = (u8)ctrlFlags;
27656 if( sqlite3_uri_boolean(((ctrlFlags & UNIXFILE_URI) ? zFilename : 0),
27657 "psow", SQLITE_POWERSAFE_OVERWRITE) ){
27658 pNew->ctrlFlags |= UNIXFILE_PSOW;
27659 }
27660 if( memcmp(pVfs->zName,"unix-excl",10)==0 ){
27661 pNew->ctrlFlags |= UNIXFILE_EXCL;
27662 }
27663
27664 #if OS_VXWORKS
27665 pNew->pId = vxworksFindFileId(zFilename);
@@ -31959,21 +31967,23 @@
31959 bReturn = TRUE;
31960 }
31961 }
31962
31963 /* Want a pending lock? */
31964 else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToLockLow == 1){
 
31965 /* If no pending lock has been acquired, then acquire it */
31966 if (pFile->shared->bPending == 0) {
31967 pFile->shared->bPending = TRUE;
31968 pFile->local.bPending = TRUE;
31969 bReturn = TRUE;
31970 }
31971 }
31972
31973 /* Want a reserved lock? */
31974 else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToLockLow == 1){
 
31975 if (pFile->shared->bReserved == 0) {
31976 pFile->shared->bReserved = TRUE;
31977 pFile->local.bReserved = TRUE;
31978 bReturn = TRUE;
31979 }
@@ -32012,11 +32022,12 @@
32012 bReturn = TRUE;
32013 }
32014
32015 /* Did we just have a reader lock? */
32016 else if (pFile->local.nReaders){
32017 assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE || nNumberOfBytesToUnlockLow == 1);
 
32018 pFile->local.nReaders --;
32019 if (pFile->local.nReaders == 0)
32020 {
32021 pFile->shared->nReaders --;
32022 }
@@ -32023,19 +32034,21 @@
32023 bReturn = TRUE;
32024 }
32025 }
32026
32027 /* Releasing a pending lock */
32028 else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToUnlockLow == 1){
 
32029 if (pFile->local.bPending){
32030 pFile->local.bPending = FALSE;
32031 pFile->shared->bPending = FALSE;
32032 bReturn = TRUE;
32033 }
32034 }
32035 /* Releasing a reserved lock */
32036 else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToUnlockLow == 1){
 
32037 if (pFile->local.bReserved) {
32038 pFile->local.bReserved = FALSE;
32039 pFile->shared->bReserved = FALSE;
32040 bReturn = TRUE;
32041 }
@@ -32197,10 +32210,11 @@
32197 assert( id!=0 );
32198 #ifndef SQLITE_OMIT_WAL
32199 assert( pFile->pShm==0 );
32200 #endif
32201 OSTRACE(("CLOSE %d\n", pFile->h));
 
32202 do{
32203 rc = osCloseHandle(pFile->h);
32204 /* SimulateIOError( rc=0; cnt=MX_CLOSE_ATTEMPT; ); */
32205 }while( rc==0 && ++cnt < MX_CLOSE_ATTEMPT && (sqlite3_win32_sleep(100), 1) );
32206 #if SQLITE_OS_WINCE
@@ -33113,11 +33127,11 @@
33113 bRc = osCloseHandle(p->aRegion[i].hMap);
33114 OSTRACE(("SHM-PURGE pid-%d close region=%d %s\n",
33115 (int)osGetCurrentProcessId(), i,
33116 bRc ? "ok" : "failed"));
33117 }
33118 if( p->hFile.h != INVALID_HANDLE_VALUE ){
33119 SimulateIOErrorBenign(1);
33120 winClose((sqlite3_file *)&p->hFile);
33121 SimulateIOErrorBenign(0);
33122 }
33123 if( deleteFlag ){
@@ -33193,11 +33207,11 @@
33193 }
33194
33195 rc = winOpen(pDbFd->pVfs,
33196 pShmNode->zFilename, /* Name of the file (UTF-8) */
33197 (sqlite3_file*)&pShmNode->hFile, /* File handle here */
33198 SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, /* Mode flags */
33199 0);
33200 if( SQLITE_OK!=rc ){
33201 goto shm_open_err;
33202 }
33203
@@ -33808,22 +33822,21 @@
33808 || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL
33809 || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL
33810 || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
33811 );
33812
33813 assert( id!=0 );
33814 UNUSED_PARAMETER(pVfs);
 
33815
33816 #if SQLITE_OS_WINRT
33817 if( !sqlite3_temp_directory ){
33818 sqlite3_log(SQLITE_ERROR,
33819 "sqlite3_temp_directory variable should be set for WinRT");
33820 }
33821 #endif
33822
33823 pFile->h = INVALID_HANDLE_VALUE;
33824
33825 /* If the second argument to this function is NULL, generate a
33826 ** temporary file name to use
33827 */
33828 if( !zUtf8Name ){
33829 assert(isDelete && !isOpenJournal);
@@ -33948,11 +33961,13 @@
33948 pFile->lastErrno = lastErrno;
33949 winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name);
33950 sqlite3_free(zConverted);
33951 if( isReadWrite && !isExclusive ){
33952 return winOpen(pVfs, zName, id,
33953 ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)), pOutFlags);
 
 
33954 }else{
33955 return SQLITE_CANTOPEN_BKPT;
33956 }
33957 }
33958
@@ -33962,23 +33977,10 @@
33962 }else{
33963 *pOutFlags = SQLITE_OPEN_READONLY;
33964 }
33965 }
33966
33967 memset(pFile, 0, sizeof(*pFile));
33968 pFile->pMethod = &winIoMethod;
33969 pFile->h = h;
33970 pFile->lastErrno = NO_ERROR;
33971 pFile->pVfs = pVfs;
33972 #ifndef SQLITE_OMIT_WAL
33973 pFile->pShm = 0;
33974 #endif
33975 pFile->zPath = zName;
33976 if( sqlite3_uri_boolean(zName, "psow", SQLITE_POWERSAFE_OVERWRITE) ){
33977 pFile->ctrlFlags |= WINFILE_PSOW;
33978 }
33979
33980 #if SQLITE_OS_WINCE
33981 if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB
33982 && (rc = winceCreateLock(zName, pFile))!=SQLITE_OK
33983 ){
33984 osCloseHandle(h);
@@ -33990,10 +33992,19 @@
33990 }else
33991 #endif
33992 {
33993 sqlite3_free(zConverted);
33994 }
 
 
 
 
 
 
 
 
 
33995
33996 OpenCounter(+1);
33997 return rc;
33998 }
33999
@@ -34035,11 +34046,12 @@
34035 if ( osGetFileAttributesExW(zConverted, GetFileExInfoStandard,
34036 &sAttrData) ){
34037 attr = sAttrData.dwFileAttributes;
34038 }else{
34039 lastErrno = osGetLastError();
34040 if( lastErrno==ERROR_FILE_NOT_FOUND || lastErrno==ERROR_PATH_NOT_FOUND ){
 
34041 rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */
34042 }else{
34043 rc = SQLITE_ERROR;
34044 }
34045 break;
@@ -34047,11 +34059,12 @@
34047 #else
34048 attr = osGetFileAttributesW(zConverted);
34049 #endif
34050 if ( attr==INVALID_FILE_ATTRIBUTES ){
34051 lastErrno = osGetLastError();
34052 if( lastErrno==ERROR_FILE_NOT_FOUND || lastErrno==ERROR_PATH_NOT_FOUND ){
 
34053 rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */
34054 }else{
34055 rc = SQLITE_ERROR;
34056 }
34057 break;
@@ -34074,11 +34087,12 @@
34074 else{
34075 do {
34076 attr = osGetFileAttributesA(zConverted);
34077 if ( attr==INVALID_FILE_ATTRIBUTES ){
34078 lastErrno = osGetLastError();
34079 if( lastErrno==ERROR_FILE_NOT_FOUND || lastErrno==ERROR_PATH_NOT_FOUND ){
 
34080 rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */
34081 }else{
34082 rc = SQLITE_ERROR;
34083 }
34084 break;
@@ -34242,20 +34256,16 @@
34242 ** for converting the relative path name to an absolute
34243 ** one by prepending the data directory and a slash.
34244 */
34245 char zOut[MAX_PATH+1];
34246 memset(zOut, 0, MAX_PATH+1);
34247 cygwin_conv_to_win32_path(zRelative, zOut); /* POSIX to Win32 */
 
34248 sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s\\%s",
34249 sqlite3_data_directory, zOut);
34250 }else{
34251 /*
34252 ** NOTE: The Cygwin docs state that the maximum length needed
34253 ** for the buffer passed to cygwin_conv_to_full_win32_path
34254 ** is MAX_PATH.
34255 */
34256 cygwin_conv_to_full_win32_path(zRelative, zFull);
34257 }
34258 return SQLITE_OK;
34259 #endif
34260
34261 #if (SQLITE_OS_WINCE || SQLITE_OS_WINRT) && !defined(__CYGWIN__)
@@ -34409,13 +34419,13 @@
34409 }
34410 static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
34411 UNUSED_PARAMETER(pVfs);
34412 getLastErrorMsg(osGetLastError(), nBuf, zBufOut);
34413 }
34414 static void (*winDlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){
34415 UNUSED_PARAMETER(pVfs);
34416 return (void(*)(void))osGetProcAddressA((HANDLE)pHandle, zSymbol);
34417 }
34418 static void winDlClose(sqlite3_vfs *pVfs, void *pHandle){
34419 UNUSED_PARAMETER(pVfs);
34420 osFreeLibrary((HANDLE)pHandle);
34421 }
@@ -34509,11 +34519,12 @@
34509 #ifdef SQLITE_TEST
34510 static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
34511 #endif
34512 /* 2^32 - to avoid use of LL and warnings in gcc */
34513 static const sqlite3_int64 max32BitValue =
34514 (sqlite3_int64)2000000000 + (sqlite3_int64)2000000000 + (sqlite3_int64)294967296;
 
34515
34516 #if SQLITE_OS_WINCE
34517 SYSTEMTIME time;
34518 osGetSystemTime(&time);
34519 /* if SystemTimeToFileTime() fails, it returns zero. */
@@ -39187,10 +39198,12 @@
39187 pPager->eState = PAGER_ERROR;
39188 }
39189 return rc;
39190 }
39191
 
 
39192 /*
39193 ** This routine ends a transaction. A transaction is usually ended by
39194 ** either a COMMIT or a ROLLBACK operation. This routine may be called
39195 ** after rollback of a hot-journal, or if an error occurs while opening
39196 ** the journal file or writing the very first journal-header of a
@@ -39240,11 +39253,11 @@
39240 ** tries to unlock the database file if not in exclusive mode. If the
39241 ** unlock operation fails as well, then the first error code related
39242 ** to the first error encountered (the journal finalization one) is
39243 ** returned.
39244 */
39245 static int pager_end_transaction(Pager *pPager, int hasMaster){
39246 int rc = SQLITE_OK; /* Error code from journal finalization operation */
39247 int rc2 = SQLITE_OK; /* Error code from db file unlock operation */
39248
39249 /* Do nothing if the pager does not have an open write transaction
39250 ** or at least a RESERVED lock. This function may be called when there
@@ -39326,11 +39339,21 @@
39326 ** locking_mode=exclusive mode but is no longer, drop the EXCLUSIVE
39327 ** lock held on the database file.
39328 */
39329 rc2 = sqlite3WalEndWriteTransaction(pPager->pWal);
39330 assert( rc2==SQLITE_OK );
 
 
 
 
 
 
 
 
 
39331 }
 
39332 if( !pPager->exclusiveMode
39333 && (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0))
39334 ){
39335 rc2 = pagerUnlockDb(pPager, SHARED_LOCK);
39336 pPager->changeCountDone = 0;
@@ -39365,11 +39388,11 @@
39365 sqlite3BeginBenignMalloc();
39366 sqlite3PagerRollback(pPager);
39367 sqlite3EndBenignMalloc();
39368 }else if( !pPager->exclusiveMode ){
39369 assert( pPager->eState==PAGER_READER );
39370 pager_end_transaction(pPager, 0);
39371 }
39372 }
39373 pager_unlock(pPager);
39374 }
39375
@@ -40140,11 +40163,11 @@
40140 && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
40141 ){
40142 rc = sqlite3PagerSync(pPager);
40143 }
40144 if( rc==SQLITE_OK ){
40145 rc = pager_end_transaction(pPager, zMaster[0]!='\0');
40146 testcase( rc!=SQLITE_OK );
40147 }
40148 if( rc==SQLITE_OK && zMaster[0] && res ){
40149 /* If there was a master journal and this routine will return success,
40150 ** see if it is possible to delete the master journal.
@@ -41092,16 +41115,30 @@
41092 /*
41093 ** Truncate the in-memory database file image to nPage pages. This
41094 ** function does not actually modify the database file on disk. It
41095 ** just sets the internal state of the pager object so that the
41096 ** truncation will be done when the current transaction is committed.
 
 
 
 
 
41097 */
41098 SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){
41099 assert( pPager->dbSize>=nPage );
41100 assert( pPager->eState>=PAGER_WRITER_CACHEMOD );
41101 pPager->dbSize = nPage;
41102 assertTruncateConstraint(pPager);
 
 
 
 
 
 
 
 
 
41103 }
41104
41105
41106 /*
41107 ** This function is called before attempting a hot-journal rollback. It
@@ -42150,10 +42187,15 @@
42150 }
42151 if( rc!=SQLITE_OK ){
42152 goto failed;
42153 }
42154 if( bHotJournal ){
 
 
 
 
 
42155 /* Get an EXCLUSIVE lock on the database file. At this point it is
42156 ** important that a RESERVED lock is not obtained on the way to the
42157 ** EXCLUSIVE lock. If it were, another process might open the
42158 ** database file, detect the RESERVED lock, and conclude that the
42159 ** database is safe to read while this process is still rolling the
@@ -43234,40 +43276,10 @@
43234 #else
43235 rc = pager_incr_changecounter(pPager, 0);
43236 #endif
43237 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
43238
43239 /* If this transaction has made the database smaller, then all pages
43240 ** being discarded by the truncation must be written to the journal
43241 ** file.
43242 **
43243 ** Before reading the pages with page numbers larger than the
43244 ** current value of Pager.dbSize, set dbSize back to the value
43245 ** that it took at the start of the transaction. Otherwise, the
43246 ** calls to sqlite3PagerGet() return zeroed pages instead of
43247 ** reading data from the database file.
43248 */
43249 if( pPager->dbSize<pPager->dbOrigSize
43250 && pPager->journalMode!=PAGER_JOURNALMODE_OFF
43251 ){
43252 Pgno i; /* Iterator variable */
43253 const Pgno iSkip = PAGER_MJ_PGNO(pPager); /* Pending lock page */
43254 const Pgno dbSize = pPager->dbSize; /* Database image size */
43255 pPager->dbSize = pPager->dbOrigSize;
43256 for( i=dbSize+1; i<=pPager->dbOrigSize; i++ ){
43257 if( !sqlite3BitvecTest(pPager->pInJournal, i) && i!=iSkip ){
43258 PgHdr *pPage; /* Page to journal */
43259 rc = sqlite3PagerGet(pPager, i, &pPage);
43260 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
43261 rc = sqlite3PagerWrite(pPage);
43262 sqlite3PagerUnref(pPage);
43263 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
43264 }
43265 }
43266 pPager->dbSize = dbSize;
43267 }
43268
43269 /* Write the master journal name into the journal file. If a master
43270 ** journal file name has already been written to the journal file,
43271 ** or if zMaster is NULL (no master journal), then this call is a no-op.
43272 */
43273 rc = writeMasterJournal(pPager, zMaster);
@@ -43291,15 +43303,18 @@
43291 if( rc!=SQLITE_OK ){
43292 assert( rc!=SQLITE_IOERR_BLOCKED );
43293 goto commit_phase_one_exit;
43294 }
43295 sqlite3PcacheCleanAll(pPager->pPCache);
43296
43297 /* If the file on disk is not the same size as the database image,
43298 ** then use pager_truncate to grow or shrink the file here.
43299 */
43300 if( pPager->dbSize!=pPager->dbFileSize ){
 
 
 
43301 Pgno nNew = pPager->dbSize - (pPager->dbSize==PAGER_MJ_PGNO(pPager));
43302 assert( pPager->eState==PAGER_WRITER_DBMOD );
43303 rc = pager_truncate(pPager, nNew);
43304 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
43305 }
@@ -43368,11 +43383,11 @@
43368 pPager->eState = PAGER_READER;
43369 return SQLITE_OK;
43370 }
43371
43372 PAGERTRACE(("COMMIT %d\n", PAGERID(pPager)));
43373 rc = pager_end_transaction(pPager, pPager->setMaster);
43374 return pager_error(pPager, rc);
43375 }
43376
43377 /*
43378 ** If a write transaction is open, then all changes made within the
@@ -43413,15 +43428,15 @@
43413 if( pPager->eState<=PAGER_READER ) return SQLITE_OK;
43414
43415 if( pagerUseWal(pPager) ){
43416 int rc2;
43417 rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, -1);
43418 rc2 = pager_end_transaction(pPager, pPager->setMaster);
43419 if( rc==SQLITE_OK ) rc = rc2;
43420 }else if( !isOpen(pPager->jfd) || pPager->eState==PAGER_WRITER_LOCKED ){
43421 int eState = pPager->eState;
43422 rc = pager_end_transaction(pPager, 0);
43423 if( !MEMDB && eState>PAGER_WRITER_LOCKED ){
43424 /* This can happen using journal_mode=off. Move the pager to the error
43425 ** state to indicate that the contents of the cache may not be trusted.
43426 ** Any active readers will get SQLITE_ABORT.
43427 */
@@ -43815,11 +43830,12 @@
43815 ** the journal needs to be sync()ed before database page pPg->pgno
43816 ** can be written to. The caller has already promised not to write to it.
43817 */
43818 if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){
43819 needSyncPgno = pPg->pgno;
43820 assert( pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize );
 
43821 assert( pPg->flags&PGHDR_DIRTY );
43822 }
43823
43824 /* If the cache contains a page with page-number pgno, remove it
43825 ** from its hash chain. Also, if the PGHDR_NEED_SYNC flag was set for
@@ -47819,10 +47835,11 @@
47819 MemPage *pPage1; /* First page of the database */
47820 u8 openFlags; /* Flags to sqlite3BtreeOpen() */
47821 #ifndef SQLITE_OMIT_AUTOVACUUM
47822 u8 autoVacuum; /* True if auto-vacuum is enabled */
47823 u8 incrVacuum; /* True if incr-vacuum is enabled */
 
47824 #endif
47825 u8 inTransaction; /* Transaction state */
47826 u8 max1bytePayload; /* Maximum first byte of cell for a 1-byte payload */
47827 u16 btsFlags; /* Boolean parameters. See BTS_* macros below */
47828 u16 maxLocal; /* Maximum local payload in non-LEAFDATA tables */
@@ -50937,10 +50954,11 @@
50937 ** is requested, this is a no-op.
50938 */
50939 if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){
50940 goto trans_begun;
50941 }
 
50942
50943 /* Write transactions are not possible on a read-only database */
50944 if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){
50945 rc = SQLITE_READONLY;
50946 goto trans_begun;
@@ -51251,30 +51269,32 @@
51251 return rc;
51252 }
51253
51254 /* Forward declaration required by incrVacuumStep(). */
51255 static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8);
 
 
 
51256
51257 /*
51258 ** Perform a single step of an incremental-vacuum. If successful,
51259 ** return SQLITE_OK. If there is no work to do (and therefore no
51260 ** point in calling this function again), return SQLITE_DONE.
51261 **
51262 ** More specificly, this function attempts to re-organize the
51263 ** database so that the last page of the file currently in use
51264 ** is no longer in use.
51265 **
51266 ** If the nFin parameter is non-zero, this function assumes
51267 ** that the caller will keep calling incrVacuumStep() until
51268 ** it returns SQLITE_DONE or an error, and that nFin is the
51269 ** number of pages the database file will contain after this
51270 ** process is complete. If nFin is zero, it is assumed that
51271 ** incrVacuumStep() will be called a finite amount of times
51272 ** which may or may not empty the freelist. A full autovacuum
51273 ** has nFin>0. A "PRAGMA incremental_vacuum" has nFin==0.
51274 */
51275 static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg){
51276 Pgno nFreeList; /* Number of pages still on the free-list */
51277 int rc;
51278
51279 assert( sqlite3_mutex_held(pBt->mutex) );
51280 assert( iLastPg>nFin );
@@ -51295,85 +51315,98 @@
51295 if( eType==PTRMAP_ROOTPAGE ){
51296 return SQLITE_CORRUPT_BKPT;
51297 }
51298
51299 if( eType==PTRMAP_FREEPAGE ){
51300 if( nFin==0 ){
51301 /* Remove the page from the files free-list. This is not required
51302 ** if nFin is non-zero. In that case, the free-list will be
51303 ** truncated to zero after this function returns, so it doesn't
51304 ** matter if it still contains some garbage entries.
51305 */
51306 Pgno iFreePg;
51307 MemPage *pFreePg;
51308 rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, 1);
51309 if( rc!=SQLITE_OK ){
51310 return rc;
51311 }
51312 assert( iFreePg==iLastPg );
51313 releasePage(pFreePg);
51314 }
51315 } else {
51316 Pgno iFreePg; /* Index of free page to move pLastPg to */
51317 MemPage *pLastPg;
 
 
51318
51319 rc = btreeGetPage(pBt, iLastPg, &pLastPg, 0);
51320 if( rc!=SQLITE_OK ){
51321 return rc;
51322 }
51323
51324 /* If nFin is zero, this loop runs exactly once and page pLastPg
51325 ** is swapped with the first free page pulled off the free list.
51326 **
51327 ** On the other hand, if nFin is greater than zero, then keep
51328 ** looping until a free-page located within the first nFin pages
51329 ** of the file is found.
51330 */
 
 
 
 
51331 do {
51332 MemPage *pFreePg;
51333 rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, 0, 0);
51334 if( rc!=SQLITE_OK ){
51335 releasePage(pLastPg);
51336 return rc;
51337 }
51338 releasePage(pFreePg);
51339 }while( nFin!=0 && iFreePg>nFin );
51340 assert( iFreePg<iLastPg );
51341
51342 rc = sqlite3PagerWrite(pLastPg->pDbPage);
51343 if( rc==SQLITE_OK ){
51344 rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, nFin!=0);
51345 }
51346 releasePage(pLastPg);
51347 if( rc!=SQLITE_OK ){
51348 return rc;
51349 }
51350 }
51351 }
51352
51353 if( nFin==0 ){
51354 iLastPg--;
51355 while( iLastPg==PENDING_BYTE_PAGE(pBt)||PTRMAP_ISPAGE(pBt, iLastPg) ){
51356 if( PTRMAP_ISPAGE(pBt, iLastPg) ){
51357 MemPage *pPg;
51358 rc = btreeGetPage(pBt, iLastPg, &pPg, 0);
51359 if( rc!=SQLITE_OK ){
51360 return rc;
51361 }
51362 rc = sqlite3PagerWrite(pPg->pDbPage);
51363 releasePage(pPg);
51364 if( rc!=SQLITE_OK ){
51365 return rc;
51366 }
51367 }
51368 iLastPg--;
51369 }
51370 sqlite3PagerTruncateImage(pBt->pPager, iLastPg);
51371 pBt->nPage = iLastPg;
51372 }
51373 return SQLITE_OK;
51374 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51375
51376 /*
51377 ** A write-transaction must be opened before calling this function.
51378 ** It performs a single unit of work towards an incremental vacuum.
51379 **
@@ -51388,15 +51421,25 @@
51388 sqlite3BtreeEnter(p);
51389 assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE );
51390 if( !pBt->autoVacuum ){
51391 rc = SQLITE_DONE;
51392 }else{
51393 invalidateAllOverflowCache(pBt);
51394 rc = incrVacuumStep(pBt, 0, btreePagecount(pBt));
51395 if( rc==SQLITE_OK ){
51396 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
51397 put4byte(&pBt->pPage1->aData[28], pBt->nPage);
 
 
 
 
 
 
 
 
 
 
51398 }
51399 }
51400 sqlite3BtreeLeave(p);
51401 return rc;
51402 }
@@ -51419,13 +51462,11 @@
51419 invalidateAllOverflowCache(pBt);
51420 assert(pBt->autoVacuum);
51421 if( !pBt->incrVacuum ){
51422 Pgno nFin; /* Number of pages in database after autovacuuming */
51423 Pgno nFree; /* Number of pages on the freelist initially */
51424 Pgno nPtrmap; /* Number of PtrMap pages to be freed */
51425 Pgno iFree; /* The next page to be freed */
51426 int nEntry; /* Number of entries on one ptrmap page */
51427 Pgno nOrig; /* Database size before freeing */
51428
51429 nOrig = btreePagecount(pBt);
51430 if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){
51431 /* It is not possible to create a database for which the final page
@@ -51434,30 +51475,22 @@
51434 */
51435 return SQLITE_CORRUPT_BKPT;
51436 }
51437
51438 nFree = get4byte(&pBt->pPage1->aData[36]);
51439 nEntry = pBt->usableSize/5;
51440 nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry;
51441 nFin = nOrig - nFree - nPtrmap;
51442 if( nOrig>PENDING_BYTE_PAGE(pBt) && nFin<PENDING_BYTE_PAGE(pBt) ){
51443 nFin--;
51444 }
51445 while( PTRMAP_ISPAGE(pBt, nFin) || nFin==PENDING_BYTE_PAGE(pBt) ){
51446 nFin--;
51447 }
51448 if( nFin>nOrig ) return SQLITE_CORRUPT_BKPT;
51449
51450 for(iFree=nOrig; iFree>nFin && rc==SQLITE_OK; iFree--){
51451 rc = incrVacuumStep(pBt, nFin, iFree);
51452 }
51453 if( (rc==SQLITE_DONE || rc==SQLITE_OK) && nFree>0 ){
51454 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
51455 put4byte(&pBt->pPage1->aData[32], 0);
51456 put4byte(&pBt->pPage1->aData[36], 0);
51457 put4byte(&pBt->pPage1->aData[28], nFin);
51458 sqlite3PagerTruncateImage(pBt->pPager, nFin);
51459 pBt->nPage = nFin;
51460 }
51461 if( rc!=SQLITE_OK ){
51462 sqlite3PagerRollback(pPager);
51463 }
@@ -51508,10 +51541,13 @@
51508 if( rc!=SQLITE_OK ){
51509 sqlite3BtreeLeave(p);
51510 return rc;
51511 }
51512 }
 
 
 
51513 #endif
51514 rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zMaster, 0);
51515 sqlite3BtreeLeave(p);
51516 }
51517 return rc;
@@ -51523,10 +51559,13 @@
51523 */
51524 static void btreeEndTransaction(Btree *p){
51525 BtShared *pBt = p->pBt;
51526 assert( sqlite3BtreeHoldsMutex(p) );
51527
 
 
 
51528 btreeClearHasContent(pBt);
51529 if( p->inTrans>TRANS_NONE && p->db->activeVdbeCnt>1 ){
51530 /* If there are other active statements that belong to this database
51531 ** handle, downgrade to a read-only transaction. The other statements
51532 ** may still be reading from the database. */
@@ -53195,25 +53234,27 @@
53195 **
53196 ** SQLITE_OK is returned on success. Any other return value indicates
53197 ** an error. *ppPage and *pPgno are undefined in the event of an error.
53198 ** Do not invoke sqlite3PagerUnref() on *ppPage if an error is returned.
53199 **
53200 ** If the "nearby" parameter is not 0, then a (feeble) effort is made to
53201 ** locate a page close to the page number "nearby". This can be used in an
53202 ** attempt to keep related pages close to each other in the database file,
53203 ** which in turn can make database access faster.
53204 **
53205 ** If the "exact" parameter is not 0, and the page-number nearby exists
53206 ** anywhere on the free-list, then it is guarenteed to be returned. This
53207 ** is only used by auto-vacuum databases when allocating a new table.
 
 
53208 */
53209 static int allocateBtreePage(
53210 BtShared *pBt,
53211 MemPage **ppPage,
53212 Pgno *pPgno,
53213 Pgno nearby,
53214 u8 exact
53215 ){
53216 MemPage *pPage1;
53217 int rc;
53218 u32 n; /* Number of pages on the freelist */
53219 u32 k; /* Number of leaves on the trunk of the freelist */
@@ -53220,10 +53261,11 @@
53220 MemPage *pTrunk = 0;
53221 MemPage *pPrevTrunk = 0;
53222 Pgno mxPage; /* Total size of the database file */
53223
53224 assert( sqlite3_mutex_held(pBt->mutex) );
 
53225 pPage1 = pBt->pPage1;
53226 mxPage = btreePagecount(pBt);
53227 n = get4byte(&pPage1->aData[36]);
53228 testcase( n==mxPage-1 );
53229 if( n>=mxPage ){
@@ -53232,25 +53274,28 @@
53232 if( n>0 ){
53233 /* There are pages on the freelist. Reuse one of those pages. */
53234 Pgno iTrunk;
53235 u8 searchList = 0; /* If the free-list must be searched for 'nearby' */
53236
53237 /* If the 'exact' parameter was true and a query of the pointer-map
53238 ** shows that the page 'nearby' is somewhere on the free-list, then
53239 ** the entire-list will be searched for that page.
53240 */
53241 #ifndef SQLITE_OMIT_AUTOVACUUM
53242 if( exact && nearby<=mxPage ){
53243 u8 eType;
53244 assert( nearby>0 );
53245 assert( pBt->autoVacuum );
53246 rc = ptrmapGet(pBt, nearby, &eType, 0);
53247 if( rc ) return rc;
53248 if( eType==PTRMAP_FREEPAGE ){
53249 searchList = 1;
53250 }
53251 *pPgno = nearby;
 
 
 
53252 }
53253 #endif
53254
53255 /* Decrement the free-list count by 1. Set iTrunk to the index of the
53256 ** first free-list trunk page. iPrevTrunk is initially 1.
@@ -53259,11 +53304,12 @@
53259 if( rc ) return rc;
53260 put4byte(&pPage1->aData[36], n-1);
53261
53262 /* The code within this loop is run only once if the 'searchList' variable
53263 ** is not true. Otherwise, it runs once for each trunk-page on the
53264 ** free-list until the page 'nearby' is located.
 
53265 */
53266 do {
53267 pPrevTrunk = pTrunk;
53268 if( pPrevTrunk ){
53269 iTrunk = get4byte(&pPrevTrunk->aData[0]);
@@ -53301,15 +53347,17 @@
53301 }else if( k>(u32)(pBt->usableSize/4 - 2) ){
53302 /* Value of k is out of range. Database corruption */
53303 rc = SQLITE_CORRUPT_BKPT;
53304 goto end_allocate_page;
53305 #ifndef SQLITE_OMIT_AUTOVACUUM
53306 }else if( searchList && nearby==iTrunk ){
 
 
53307 /* The list is being searched and this trunk page is the page
53308 ** to allocate, regardless of whether it has leaves.
53309 */
53310 assert( *pPgno==iTrunk );
53311 *ppPage = pTrunk;
53312 searchList = 0;
53313 rc = sqlite3PagerWrite(pTrunk->pDbPage);
53314 if( rc ){
53315 goto end_allocate_page;
@@ -53368,18 +53416,28 @@
53368 u32 closest;
53369 Pgno iPage;
53370 unsigned char *aData = pTrunk->aData;
53371 if( nearby>0 ){
53372 u32 i;
53373 int dist;
53374 closest = 0;
53375 dist = sqlite3AbsInt32(get4byte(&aData[8]) - nearby);
53376 for(i=1; i<k; i++){
53377 int d2 = sqlite3AbsInt32(get4byte(&aData[8+i*4]) - nearby);
53378 if( d2<dist ){
53379 closest = i;
53380 dist = d2;
 
 
 
 
 
 
 
 
 
 
 
53381 }
53382 }
53383 }else{
53384 closest = 0;
53385 }
@@ -53389,11 +53447,13 @@
53389 if( iPage>mxPage ){
53390 rc = SQLITE_CORRUPT_BKPT;
53391 goto end_allocate_page;
53392 }
53393 testcase( iPage==mxPage );
53394 if( !searchList || iPage==nearby ){
 
 
53395 int noContent;
53396 *pPgno = iPage;
53397 TRACE(("ALLOCATE: %d was leaf %d of %d on trunk %d"
53398 ": %d more free pages\n",
53399 *pPgno, closest+1, k, pTrunk->pgno, n-1));
@@ -53416,12 +53476,30 @@
53416 }
53417 releasePage(pPrevTrunk);
53418 pPrevTrunk = 0;
53419 }while( searchList );
53420 }else{
53421 /* There are no pages on the freelist, so create a new page at the
53422 ** end of the file */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53423 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
53424 if( rc ) return rc;
53425 pBt->nPage++;
53426 if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ) pBt->nPage++;
53427
@@ -53432,11 +53510,11 @@
53432 ** becomes a new pointer-map page, the second is used by the caller.
53433 */
53434 MemPage *pPg = 0;
53435 TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", pBt->nPage));
53436 assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) );
53437 rc = btreeGetPage(pBt, pBt->nPage, &pPg, 1);
53438 if( rc==SQLITE_OK ){
53439 rc = sqlite3PagerWrite(pPg->pDbPage);
53440 releasePage(pPg);
53441 }
53442 if( rc ) return rc;
@@ -53446,11 +53524,11 @@
53446 #endif
53447 put4byte(28 + (u8*)pBt->pPage1->aData, pBt->nPage);
53448 *pPgno = pBt->nPage;
53449
53450 assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );
53451 rc = btreeGetPage(pBt, *pPgno, ppPage, 1);
53452 if( rc ) return rc;
53453 rc = sqlite3PagerWrite((*ppPage)->pDbPage);
53454 if( rc!=SQLITE_OK ){
53455 releasePage(*ppPage);
53456 }
@@ -55461,11 +55539,11 @@
55461
55462 /* Allocate a page. The page that currently resides at pgnoRoot will
55463 ** be moved to the allocated page (unless the allocated page happens
55464 ** to reside at pgnoRoot).
55465 */
55466 rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, 1);
55467 if( rc!=SQLITE_OK ){
55468 return rc;
55469 }
55470
55471 if( pgnoMove!=pgnoRoot ){
@@ -57153,11 +57231,10 @@
57153 }
57154 }else{
57155 nDestTruncate = nSrcPage * (pgszSrc/pgszDest);
57156 }
57157 assert( nDestTruncate>0 );
57158 sqlite3PagerTruncateImage(pDestPager, nDestTruncate);
57159
57160 if( pgszSrc<pgszDest ){
57161 /* If the source page-size is smaller than the destination page-size,
57162 ** two extra things may need to happen:
57163 **
@@ -57167,10 +57244,12 @@
57167 ** pending-byte page in the source database may need to be
57168 ** copied into the destination database.
57169 */
57170 const i64 iSize = (i64)pgszSrc * (i64)nSrcPage;
57171 sqlite3_file * const pFile = sqlite3PagerFile(pDestPager);
 
 
57172 i64 iOff;
57173 i64 iEnd;
57174
57175 assert( pFile );
57176 assert( nDestTruncate==0
@@ -57177,17 +57256,30 @@
57177 || (i64)nDestTruncate*(i64)pgszDest >= iSize || (
57178 nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1)
57179 && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest
57180 ));
57181
57182 /* This call ensures that all data required to recreate the original
57183 ** database has been stored in the journal for pDestPager and the
57184 ** journal synced to disk. So at this point we may safely modify
57185 ** the database file in any way, knowing that if a power failure
57186 ** occurs, the original database will be reconstructed from the
57187 ** journal file. */
57188 rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1);
 
 
 
 
 
 
 
 
 
 
 
 
 
57189
57190 /* Write the extra pages and truncate the database file as required */
57191 iEnd = MIN(PENDING_BYTE + pgszDest, iSize);
57192 for(
57193 iOff=PENDING_BYTE+pgszSrc;
@@ -57210,10 +57302,11 @@
57210 /* Sync the database file to disk. */
57211 if( rc==SQLITE_OK ){
57212 rc = sqlite3PagerSync(pDestPager);
57213 }
57214 }else{
 
57215 rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 0);
57216 }
57217
57218 /* Finish committing the transaction to the destination database. */
57219 if( SQLITE_OK==rc
@@ -63039,11 +63132,11 @@
63039 return 0;
63040 }
63041 if( zName ){
63042 for(i=0; i<p->nzVar; i++){
63043 const char *z = p->azVar[i];
63044 if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){
63045 return i+1;
63046 }
63047 }
63048 }
63049 return 0;
@@ -72691,16 +72784,16 @@
72691 const char *zTab,
72692 const char *zDb
72693 ){
72694 int n;
72695 for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){}
72696 if( zDb && sqlite3StrNICmp(zSpan, zDb, n)!=0 ){
72697 return 0;
72698 }
72699 zSpan += n+1;
72700 for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){}
72701 if( zTab && sqlite3StrNICmp(zSpan, zTab, n)!=0 ){
72702 return 0;
72703 }
72704 zSpan += n+1;
72705 if( zCol && sqlite3StrICmp(zSpan, zCol)!=0 ){
72706 return 0;
@@ -74493,11 +74586,11 @@
74493 ** number as the prior appearance of the same name, or if the name
74494 ** has never appeared before, reuse the same variable number
74495 */
74496 ynVar i;
74497 for(i=0; i<pParse->nzVar; i++){
74498 if( pParse->azVar[i] && memcmp(pParse->azVar[i],z,n+1)==0 ){
74499 pExpr->iColumn = x = (ynVar)i+1;
74500 break;
74501 }
74502 }
74503 if( x==0 ) x = pExpr->iColumn = (ynVar)(++pParse->nVar);
@@ -79350,11 +79443,11 @@
79350 }
79351 if( pTab->tnum==0 ){
79352 /* Do not gather statistics on views or virtual tables */
79353 return;
79354 }
79355 if( memcmp(pTab->zName, "sqlite_", 7)==0 ){
79356 /* Do not gather statistics on system tables */
79357 return;
79358 }
79359 assert( sqlite3BtreeHoldsAllMutexes(db) );
79360 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
@@ -79760,11 +79853,11 @@
79760 }
79761 if( i==0 ) pTable->nRowEst = v;
79762 if( pIndex==0 ) break;
79763 pIndex->aiRowEst[i] = v;
79764 if( *z==' ' ) z++;
79765 if( memcmp(z, "unordered", 10)==0 ){
79766 pIndex->bUnordered = 1;
79767 break;
79768 }
79769 }
79770 return 0;
@@ -83409,11 +83502,11 @@
83409 pDb = &db->aDb[iDb];
83410
83411 assert( pTab!=0 );
83412 assert( pParse->nErr==0 );
83413 if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0
83414 && memcmp(&pTab->zName[7],"altertab_",9)!=0 ){
83415 sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName);
83416 goto exit_create_index;
83417 }
83418 #ifndef SQLITE_OMIT_VIEW
83419 if( pTab->pSelect ){
@@ -86787,10 +86880,61 @@
86787 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
86788 break;
86789 }
86790 }
86791 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86792
86793 /*
86794 ** The hex() function. Interpret the argument as a blob. Return
86795 ** a hexadecimal rendering as text.
86796 */
@@ -87415,10 +87559,12 @@
87415 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
87416 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
87417 FUNCTION(instr, 2, 0, 0, instrFunc ),
87418 FUNCTION(substr, 2, 0, 0, substrFunc ),
87419 FUNCTION(substr, 3, 0, 0, substrFunc ),
 
 
87420 FUNCTION(abs, 1, 0, 0, absFunc ),
87421 #ifndef SQLITE_OMIT_FLOATING_POINT
87422 FUNCTION(round, 1, 0, 0, roundFunc ),
87423 FUNCTION(round, 2, 0, 0, roundFunc ),
87424 #endif
@@ -91626,10 +91772,23 @@
91626 0,
91627 #endif
91628 sqlite3_blob_reopen,
91629 sqlite3_vtab_config,
91630 sqlite3_vtab_on_conflict,
 
 
 
 
 
 
 
 
 
 
 
 
 
91631 };
91632
91633 /*
91634 ** Attempt to load an SQLite extension library contained in the file
91635 ** zFile. The entry point is zProc. zProc may be 0 in which case a
@@ -92866,10 +93025,11 @@
92866 Column *pCol;
92867 Index *pPk;
92868 for(pPk=pTab->pIndex; pPk && pPk->autoIndex!=2; pPk=pPk->pNext){}
92869 sqlite3VdbeSetNumCols(v, 6);
92870 pParse->nMem = 6;
 
92871 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cid", SQLITE_STATIC);
92872 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
92873 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "type", SQLITE_STATIC);
92874 sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "notnull", SQLITE_STATIC);
92875 sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "dflt_value", SQLITE_STATIC);
@@ -92911,10 +93071,11 @@
92911 if( pIdx ){
92912 int i;
92913 pTab = pIdx->pTable;
92914 sqlite3VdbeSetNumCols(v, 3);
92915 pParse->nMem = 3;
 
92916 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seqno", SQLITE_STATIC);
92917 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "cid", SQLITE_STATIC);
92918 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "name", SQLITE_STATIC);
92919 for(i=0; i<pIdx->nColumn; i++){
92920 int cnum = pIdx->aiColumn[i];
@@ -92937,10 +93098,11 @@
92937 pIdx = pTab->pIndex;
92938 if( pIdx ){
92939 int i = 0;
92940 sqlite3VdbeSetNumCols(v, 3);
92941 pParse->nMem = 3;
 
92942 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
92943 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
92944 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC);
92945 while(pIdx){
92946 sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
@@ -93000,10 +93162,11 @@
93000 pFK = pTab->pFKey;
93001 if( pFK ){
93002 int i = 0;
93003 sqlite3VdbeSetNumCols(v, 8);
93004 pParse->nMem = 8;
 
93005 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "id", SQLITE_STATIC);
93006 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "seq", SQLITE_STATIC);
93007 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "table", SQLITE_STATIC);
93008 sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "from", SQLITE_STATIC);
93009 sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "to", SQLITE_STATIC);
@@ -96914,11 +97077,12 @@
96914 if( op==TK_ALL ){
96915 regPrev = 0;
96916 }else{
96917 int nExpr = p->pEList->nExpr;
96918 assert( nOrderBy>=nExpr || db->mallocFailed );
96919 regPrev = sqlite3GetTempRange(pParse, nExpr+1);
 
96920 sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev);
96921 pKeyDup = sqlite3DbMallocZero(db,
96922 sizeof(*pKeyDup) + nExpr*(sizeof(CollSeq*)+1) );
96923 if( pKeyDup ){
96924 pKeyDup->aSortOrder = (u8*)&pKeyDup->aColl[nExpr];
@@ -97096,16 +97260,10 @@
97096 sqlite3VdbeAddOp4(v, OP_Compare, destA.iSdst, destB.iSdst, nOrderBy,
97097 (char*)pKeyMerge, P4_KEYINFO_HANDOFF);
97098 sqlite3VdbeChangeP5(v, OPFLAG_PERMUTE);
97099 sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB);
97100
97101 /* Release temporary registers
97102 */
97103 if( regPrev ){
97104 sqlite3ReleaseTempRange(pParse, regPrev, nOrderBy+1);
97105 }
97106
97107 /* Jump to the this point in order to terminate the query.
97108 */
97109 sqlite3VdbeResolveLabel(v, labelEnd);
97110
97111 /* Set the number of output columns
@@ -103426,13 +103584,12 @@
103426 **
103427 ** If there are multiple terms in the WHERE clause of the form "X <op> <expr>"
103428 ** then try for the one with no dependencies on <expr> - in other words where
103429 ** <expr> is a constant expression of some kind. Only return entries of
103430 ** the form "X <op> Y" where Y is a column in another table if no terms of
103431 ** the form "X <op> <const-expr>" exist. Other than this priority, if there
103432 ** are two or more terms that match, then the choice of which term to return
103433 ** is arbitrary.
103434 */
103435 static WhereTerm *findTerm(
103436 WhereClause *pWC, /* The WHERE clause to be searched */
103437 int iCur, /* Cursor number of LHS */
103438 int iColumn, /* Column number of LHS */
@@ -103487,12 +103644,16 @@
103487 }
103488 if( sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ){
103489 continue;
103490 }
103491 }
103492 pResult = pTerm;
103493 if( pTerm->prereqRight==0 ) goto findTerm_success;
 
 
 
 
103494 }
103495 if( (pTerm->eOperator & WO_EQUIV)!=0
103496 && nEquiv<ArraySize(aEquiv)
103497 ){
103498 pX = sqlite3ExprSkipCollate(pTerm->pExpr->pRight);
@@ -107014,10 +107175,11 @@
107014 testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
107015 iRowidReg = codeEqualityTerm(pParse, pTerm, pLevel, iReleaseReg);
107016 addrNxt = pLevel->addrNxt;
107017 sqlite3VdbeAddOp2(v, OP_MustBeInt, iRowidReg, addrNxt);
107018 sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addrNxt, iRowidReg);
 
107019 sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
107020 VdbeComment((v, "pk"));
107021 pLevel->op = OP_Noop;
107022 }else if( pLevel->plan.wsFlags & WHERE_ROWID_RANGE ){
107023 /* Case 2: We have an inequality comparison against the ROWID field.
@@ -114105,11 +114267,11 @@
114105 }
114106 }
114107 sqlite3VtabRollback(db);
114108 sqlite3EndBenignMalloc();
114109
114110 if( db->flags&SQLITE_InternChanges ){
114111 sqlite3ExpirePreparedStatements(db);
114112 sqlite3ResetAllSchemasOfConnection(db);
114113 }
114114
114115 /* Any deferred constraint violations have now been resolved. */
114116
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -438,11 +438,12 @@
438 ** if it is already defined or if it is unneeded because we are
439 ** not doing a threadsafe build. Ticket #2681.
440 **
441 ** See also ticket #2741.
442 */
443 #if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) \
444 && !defined(__APPLE__) && SQLITE_THREADSAFE
445 # define _XOPEN_SOURCE 500 /* Needed to enable pthread recursive mutexes */
446 #endif
447
448 /*
449 ** The TCL headers are only needed when compiling the TCL bindings.
@@ -673,11 +674,11 @@
674 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
675 ** [sqlite_version()] and [sqlite_source_id()].
676 */
677 #define SQLITE_VERSION "3.7.16"
678 #define SQLITE_VERSION_NUMBER 3007016
679 #define SQLITE_SOURCE_ID "2013-03-06 01:55:27 7097241c1220ada318f8eda938c3e3430b94a606"
680
681 /*
682 ** CAPI3REF: Run-Time Library Version Numbers
683 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
684 **
@@ -1047,10 +1048,11 @@
1048 #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
1049 #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
1050 #define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8))
1051 #define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8))
1052 #define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8))
1053 #define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3<<8))
1054 #define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8))
1055 #define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8))
1056 #define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8))
1057 #define SQLITE_CONSTRAINT_FOREIGNKEY (SQLITE_CONSTRAINT | (3<<8))
1058 #define SQLITE_CONSTRAINT_FUNCTION (SQLITE_CONSTRAINT | (4<<8))
@@ -11915,11 +11917,11 @@
11917 SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*);
11918 SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*);
11919 SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, int);
11920 SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
11921 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
11922 SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse*,SrcList*,Expr*,ExprList*,Expr*,Expr*,char*);
11923 #endif
11924 SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
11925 SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
11926 SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*,SrcList*,Expr*,ExprList*,ExprList*,u16,int);
11927 SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo*);
@@ -12096,12 +12098,15 @@
12098 **
12099 ** x = getVarint32( A, B );
12100 ** x = putVarint32( A, B );
12101 **
12102 */
12103 #define getVarint32(A,B) \
12104 (u8)((*(A)<(u8)0x80)?((B)=(u32)*(A)),1:sqlite3GetVarint32((A),(u32 *)&(B)))
12105 #define putVarint32(A,B) \
12106 (u8)(((u32)(B)<(u32)0x80)?(*(A)=(unsigned char)(B)),1:\
12107 sqlite3PutVarint32((A),(B)))
12108 #define getVarint sqlite3GetVarint
12109 #define putVarint sqlite3PutVarint
12110
12111
12112 SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *, Index *);
@@ -23455,11 +23460,14 @@
23460 #endif
23461 }while( fd<0 && errno==EINTR );
23462 if( fd>=0 ){
23463 if( m!=0 ){
23464 struct stat statbuf;
23465 if( osFstat(fd, &statbuf)==0
23466 && statbuf.st_size==0
23467 && (statbuf.st_mode&0777)!=m
23468 ){
23469 osFchmod(fd, m);
23470 }
23471 }
23472 #if defined(FD_CLOEXEC) && (!defined(O_CLOEXEC) || O_CLOEXEC==0)
23473 osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
@@ -27655,11 +27663,11 @@
27663 pNew->ctrlFlags = (u8)ctrlFlags;
27664 if( sqlite3_uri_boolean(((ctrlFlags & UNIXFILE_URI) ? zFilename : 0),
27665 "psow", SQLITE_POWERSAFE_OVERWRITE) ){
27666 pNew->ctrlFlags |= UNIXFILE_PSOW;
27667 }
27668 if( strcmp(pVfs->zName,"unix-excl")==0 ){
27669 pNew->ctrlFlags |= UNIXFILE_EXCL;
27670 }
27671
27672 #if OS_VXWORKS
27673 pNew->pId = vxworksFindFileId(zFilename);
@@ -31959,21 +31967,23 @@
31967 bReturn = TRUE;
31968 }
31969 }
31970
31971 /* Want a pending lock? */
31972 else if (dwFileOffsetLow == (DWORD)PENDING_BYTE
31973 && nNumberOfBytesToLockLow == 1){
31974 /* If no pending lock has been acquired, then acquire it */
31975 if (pFile->shared->bPending == 0) {
31976 pFile->shared->bPending = TRUE;
31977 pFile->local.bPending = TRUE;
31978 bReturn = TRUE;
31979 }
31980 }
31981
31982 /* Want a reserved lock? */
31983 else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE
31984 && nNumberOfBytesToLockLow == 1){
31985 if (pFile->shared->bReserved == 0) {
31986 pFile->shared->bReserved = TRUE;
31987 pFile->local.bReserved = TRUE;
31988 bReturn = TRUE;
31989 }
@@ -32012,11 +32022,12 @@
32022 bReturn = TRUE;
32023 }
32024
32025 /* Did we just have a reader lock? */
32026 else if (pFile->local.nReaders){
32027 assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE
32028 || nNumberOfBytesToUnlockLow == 1);
32029 pFile->local.nReaders --;
32030 if (pFile->local.nReaders == 0)
32031 {
32032 pFile->shared->nReaders --;
32033 }
@@ -32023,19 +32034,21 @@
32034 bReturn = TRUE;
32035 }
32036 }
32037
32038 /* Releasing a pending lock */
32039 else if (dwFileOffsetLow == (DWORD)PENDING_BYTE
32040 && nNumberOfBytesToUnlockLow == 1){
32041 if (pFile->local.bPending){
32042 pFile->local.bPending = FALSE;
32043 pFile->shared->bPending = FALSE;
32044 bReturn = TRUE;
32045 }
32046 }
32047 /* Releasing a reserved lock */
32048 else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE
32049 && nNumberOfBytesToUnlockLow == 1){
32050 if (pFile->local.bReserved) {
32051 pFile->local.bReserved = FALSE;
32052 pFile->shared->bReserved = FALSE;
32053 bReturn = TRUE;
32054 }
@@ -32197,10 +32210,11 @@
32210 assert( id!=0 );
32211 #ifndef SQLITE_OMIT_WAL
32212 assert( pFile->pShm==0 );
32213 #endif
32214 OSTRACE(("CLOSE %d\n", pFile->h));
32215 assert( pFile->h!=NULL && pFile->h!=INVALID_HANDLE_VALUE );
32216 do{
32217 rc = osCloseHandle(pFile->h);
32218 /* SimulateIOError( rc=0; cnt=MX_CLOSE_ATTEMPT; ); */
32219 }while( rc==0 && ++cnt < MX_CLOSE_ATTEMPT && (sqlite3_win32_sleep(100), 1) );
32220 #if SQLITE_OS_WINCE
@@ -33113,11 +33127,11 @@
33127 bRc = osCloseHandle(p->aRegion[i].hMap);
33128 OSTRACE(("SHM-PURGE pid-%d close region=%d %s\n",
33129 (int)osGetCurrentProcessId(), i,
33130 bRc ? "ok" : "failed"));
33131 }
33132 if( p->hFile.h!=NULL && p->hFile.h!=INVALID_HANDLE_VALUE ){
33133 SimulateIOErrorBenign(1);
33134 winClose((sqlite3_file *)&p->hFile);
33135 SimulateIOErrorBenign(0);
33136 }
33137 if( deleteFlag ){
@@ -33193,11 +33207,11 @@
33207 }
33208
33209 rc = winOpen(pDbFd->pVfs,
33210 pShmNode->zFilename, /* Name of the file (UTF-8) */
33211 (sqlite3_file*)&pShmNode->hFile, /* File handle here */
33212 SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
33213 0);
33214 if( SQLITE_OK!=rc ){
33215 goto shm_open_err;
33216 }
33217
@@ -33808,22 +33822,21 @@
33822 || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL
33823 || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL
33824 || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
33825 );
33826
33827 assert( pFile!=0 );
33828 memset(pFile, 0, sizeof(winFile));
33829 pFile->h = INVALID_HANDLE_VALUE;
33830
33831 #if SQLITE_OS_WINRT
33832 if( !sqlite3_temp_directory ){
33833 sqlite3_log(SQLITE_ERROR,
33834 "sqlite3_temp_directory variable should be set for WinRT");
33835 }
33836 #endif
33837
 
 
33838 /* If the second argument to this function is NULL, generate a
33839 ** temporary file name to use
33840 */
33841 if( !zUtf8Name ){
33842 assert(isDelete && !isOpenJournal);
@@ -33948,11 +33961,13 @@
33961 pFile->lastErrno = lastErrno;
33962 winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name);
33963 sqlite3_free(zConverted);
33964 if( isReadWrite && !isExclusive ){
33965 return winOpen(pVfs, zName, id,
33966 ((flags|SQLITE_OPEN_READONLY) &
33967 ~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)),
33968 pOutFlags);
33969 }else{
33970 return SQLITE_CANTOPEN_BKPT;
33971 }
33972 }
33973
@@ -33962,23 +33977,10 @@
33977 }else{
33978 *pOutFlags = SQLITE_OPEN_READONLY;
33979 }
33980 }
33981
 
 
 
 
 
 
 
 
 
 
 
 
 
33982 #if SQLITE_OS_WINCE
33983 if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB
33984 && (rc = winceCreateLock(zName, pFile))!=SQLITE_OK
33985 ){
33986 osCloseHandle(h);
@@ -33990,10 +33992,19 @@
33992 }else
33993 #endif
33994 {
33995 sqlite3_free(zConverted);
33996 }
33997
33998 pFile->pMethod = &winIoMethod;
33999 pFile->pVfs = pVfs;
34000 pFile->h = h;
34001 if( sqlite3_uri_boolean(zName, "psow", SQLITE_POWERSAFE_OVERWRITE) ){
34002 pFile->ctrlFlags |= WINFILE_PSOW;
34003 }
34004 pFile->lastErrno = NO_ERROR;
34005 pFile->zPath = zName;
34006
34007 OpenCounter(+1);
34008 return rc;
34009 }
34010
@@ -34035,11 +34046,12 @@
34046 if ( osGetFileAttributesExW(zConverted, GetFileExInfoStandard,
34047 &sAttrData) ){
34048 attr = sAttrData.dwFileAttributes;
34049 }else{
34050 lastErrno = osGetLastError();
34051 if( lastErrno==ERROR_FILE_NOT_FOUND
34052 || lastErrno==ERROR_PATH_NOT_FOUND ){
34053 rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */
34054 }else{
34055 rc = SQLITE_ERROR;
34056 }
34057 break;
@@ -34047,11 +34059,12 @@
34059 #else
34060 attr = osGetFileAttributesW(zConverted);
34061 #endif
34062 if ( attr==INVALID_FILE_ATTRIBUTES ){
34063 lastErrno = osGetLastError();
34064 if( lastErrno==ERROR_FILE_NOT_FOUND
34065 || lastErrno==ERROR_PATH_NOT_FOUND ){
34066 rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */
34067 }else{
34068 rc = SQLITE_ERROR;
34069 }
34070 break;
@@ -34074,11 +34087,12 @@
34087 else{
34088 do {
34089 attr = osGetFileAttributesA(zConverted);
34090 if ( attr==INVALID_FILE_ATTRIBUTES ){
34091 lastErrno = osGetLastError();
34092 if( lastErrno==ERROR_FILE_NOT_FOUND
34093 || lastErrno==ERROR_PATH_NOT_FOUND ){
34094 rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */
34095 }else{
34096 rc = SQLITE_ERROR;
34097 }
34098 break;
@@ -34242,20 +34256,16 @@
34256 ** for converting the relative path name to an absolute
34257 ** one by prepending the data directory and a slash.
34258 */
34259 char zOut[MAX_PATH+1];
34260 memset(zOut, 0, MAX_PATH+1);
34261 cygwin_conv_path(CCP_POSIX_TO_WIN_A|CCP_RELATIVE, zRelative, zOut,
34262 MAX_PATH+1);
34263 sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s\\%s",
34264 sqlite3_data_directory, zOut);
34265 }else{
34266 cygwin_conv_path(CCP_POSIX_TO_WIN_A, zRelative, zFull, nFull);
 
 
 
 
 
34267 }
34268 return SQLITE_OK;
34269 #endif
34270
34271 #if (SQLITE_OS_WINCE || SQLITE_OS_WINRT) && !defined(__CYGWIN__)
@@ -34409,13 +34419,13 @@
34419 }
34420 static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
34421 UNUSED_PARAMETER(pVfs);
34422 getLastErrorMsg(osGetLastError(), nBuf, zBufOut);
34423 }
34424 static void (*winDlSym(sqlite3_vfs *pVfs,void *pH,const char *zSym))(void){
34425 UNUSED_PARAMETER(pVfs);
34426 return (void(*)(void))osGetProcAddressA((HANDLE)pH, zSym);
34427 }
34428 static void winDlClose(sqlite3_vfs *pVfs, void *pHandle){
34429 UNUSED_PARAMETER(pVfs);
34430 osFreeLibrary((HANDLE)pHandle);
34431 }
@@ -34509,11 +34519,12 @@
34519 #ifdef SQLITE_TEST
34520 static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
34521 #endif
34522 /* 2^32 - to avoid use of LL and warnings in gcc */
34523 static const sqlite3_int64 max32BitValue =
34524 (sqlite3_int64)2000000000 + (sqlite3_int64)2000000000 +
34525 (sqlite3_int64)294967296;
34526
34527 #if SQLITE_OS_WINCE
34528 SYSTEMTIME time;
34529 osGetSystemTime(&time);
34530 /* if SystemTimeToFileTime() fails, it returns zero. */
@@ -39187,10 +39198,12 @@
39198 pPager->eState = PAGER_ERROR;
39199 }
39200 return rc;
39201 }
39202
39203 static int pager_truncate(Pager *pPager, Pgno nPage);
39204
39205 /*
39206 ** This routine ends a transaction. A transaction is usually ended by
39207 ** either a COMMIT or a ROLLBACK operation. This routine may be called
39208 ** after rollback of a hot-journal, or if an error occurs while opening
39209 ** the journal file or writing the very first journal-header of a
@@ -39240,11 +39253,11 @@
39253 ** tries to unlock the database file if not in exclusive mode. If the
39254 ** unlock operation fails as well, then the first error code related
39255 ** to the first error encountered (the journal finalization one) is
39256 ** returned.
39257 */
39258 static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){
39259 int rc = SQLITE_OK; /* Error code from journal finalization operation */
39260 int rc2 = SQLITE_OK; /* Error code from db file unlock operation */
39261
39262 /* Do nothing if the pager does not have an open write transaction
39263 ** or at least a RESERVED lock. This function may be called when there
@@ -39326,11 +39339,21 @@
39339 ** locking_mode=exclusive mode but is no longer, drop the EXCLUSIVE
39340 ** lock held on the database file.
39341 */
39342 rc2 = sqlite3WalEndWriteTransaction(pPager->pWal);
39343 assert( rc2==SQLITE_OK );
39344 }else if( rc==SQLITE_OK && bCommit && pPager->dbFileSize>pPager->dbSize ){
39345 /* This branch is taken when committing a transaction in rollback-journal
39346 ** mode if the database file on disk is larger than the database image.
39347 ** At this point the journal has been finalized and the transaction
39348 ** successfully committed, but the EXCLUSIVE lock is still held on the
39349 ** file. So it is safe to truncate the database file to its minimum
39350 ** required size. */
39351 assert( pPager->eLock==EXCLUSIVE_LOCK );
39352 rc = pager_truncate(pPager, pPager->dbSize);
39353 }
39354
39355 if( !pPager->exclusiveMode
39356 && (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0))
39357 ){
39358 rc2 = pagerUnlockDb(pPager, SHARED_LOCK);
39359 pPager->changeCountDone = 0;
@@ -39365,11 +39388,11 @@
39388 sqlite3BeginBenignMalloc();
39389 sqlite3PagerRollback(pPager);
39390 sqlite3EndBenignMalloc();
39391 }else if( !pPager->exclusiveMode ){
39392 assert( pPager->eState==PAGER_READER );
39393 pager_end_transaction(pPager, 0, 0);
39394 }
39395 }
39396 pager_unlock(pPager);
39397 }
39398
@@ -40140,11 +40163,11 @@
40163 && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
40164 ){
40165 rc = sqlite3PagerSync(pPager);
40166 }
40167 if( rc==SQLITE_OK ){
40168 rc = pager_end_transaction(pPager, zMaster[0]!='\0', 0);
40169 testcase( rc!=SQLITE_OK );
40170 }
40171 if( rc==SQLITE_OK && zMaster[0] && res ){
40172 /* If there was a master journal and this routine will return success,
40173 ** see if it is possible to delete the master journal.
@@ -41092,16 +41115,30 @@
41115 /*
41116 ** Truncate the in-memory database file image to nPage pages. This
41117 ** function does not actually modify the database file on disk. It
41118 ** just sets the internal state of the pager object so that the
41119 ** truncation will be done when the current transaction is committed.
41120 **
41121 ** This function is only called right before committing a transaction.
41122 ** Once this function has been called, the transaction must either be
41123 ** rolled back or committed. It is not safe to call this function and
41124 ** then continue writing to the database.
41125 */
41126 SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){
41127 assert( pPager->dbSize>=nPage );
41128 assert( pPager->eState>=PAGER_WRITER_CACHEMOD );
41129 pPager->dbSize = nPage;
41130
41131 /* At one point the code here called assertTruncateConstraint() to
41132 ** ensure that all pages being truncated away by this operation are,
41133 ** if one or more savepoints are open, present in the savepoint
41134 ** journal so that they can be restored if the savepoint is rolled
41135 ** back. This is no longer necessary as this function is now only
41136 ** called right before committing a transaction. So although the
41137 ** Pager object may still have open savepoints (Pager.nSavepoint!=0),
41138 ** they cannot be rolled back. So the assertTruncateConstraint() call
41139 ** is no longer correct. */
41140 }
41141
41142
41143 /*
41144 ** This function is called before attempting a hot-journal rollback. It
@@ -42150,10 +42187,15 @@
42187 }
42188 if( rc!=SQLITE_OK ){
42189 goto failed;
42190 }
42191 if( bHotJournal ){
42192 if( pPager->readOnly ){
42193 rc = SQLITE_READONLY_ROLLBACK;
42194 goto failed;
42195 }
42196
42197 /* Get an EXCLUSIVE lock on the database file. At this point it is
42198 ** important that a RESERVED lock is not obtained on the way to the
42199 ** EXCLUSIVE lock. If it were, another process might open the
42200 ** database file, detect the RESERVED lock, and conclude that the
42201 ** database is safe to read while this process is still rolling the
@@ -43234,40 +43276,10 @@
43276 #else
43277 rc = pager_incr_changecounter(pPager, 0);
43278 #endif
43279 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
43280
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43281 /* Write the master journal name into the journal file. If a master
43282 ** journal file name has already been written to the journal file,
43283 ** or if zMaster is NULL (no master journal), then this call is a no-op.
43284 */
43285 rc = writeMasterJournal(pPager, zMaster);
@@ -43291,15 +43303,18 @@
43303 if( rc!=SQLITE_OK ){
43304 assert( rc!=SQLITE_IOERR_BLOCKED );
43305 goto commit_phase_one_exit;
43306 }
43307 sqlite3PcacheCleanAll(pPager->pPCache);
43308
43309 /* If the file on disk is smaller than the database image, use
43310 ** pager_truncate to grow the file here. This can happen if the database
43311 ** image was extended as part of the current transaction and then the
43312 ** last page in the db image moved to the free-list. In this case the
43313 ** last page is never written out to disk, leaving the database file
43314 ** undersized. Fix this now if it is the case. */
43315 if( pPager->dbSize>pPager->dbFileSize ){
43316 Pgno nNew = pPager->dbSize - (pPager->dbSize==PAGER_MJ_PGNO(pPager));
43317 assert( pPager->eState==PAGER_WRITER_DBMOD );
43318 rc = pager_truncate(pPager, nNew);
43319 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
43320 }
@@ -43368,11 +43383,11 @@
43383 pPager->eState = PAGER_READER;
43384 return SQLITE_OK;
43385 }
43386
43387 PAGERTRACE(("COMMIT %d\n", PAGERID(pPager)));
43388 rc = pager_end_transaction(pPager, pPager->setMaster, 1);
43389 return pager_error(pPager, rc);
43390 }
43391
43392 /*
43393 ** If a write transaction is open, then all changes made within the
@@ -43413,15 +43428,15 @@
43428 if( pPager->eState<=PAGER_READER ) return SQLITE_OK;
43429
43430 if( pagerUseWal(pPager) ){
43431 int rc2;
43432 rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, -1);
43433 rc2 = pager_end_transaction(pPager, pPager->setMaster, 0);
43434 if( rc==SQLITE_OK ) rc = rc2;
43435 }else if( !isOpen(pPager->jfd) || pPager->eState==PAGER_WRITER_LOCKED ){
43436 int eState = pPager->eState;
43437 rc = pager_end_transaction(pPager, 0, 0);
43438 if( !MEMDB && eState>PAGER_WRITER_LOCKED ){
43439 /* This can happen using journal_mode=off. Move the pager to the error
43440 ** state to indicate that the contents of the cache may not be trusted.
43441 ** Any active readers will get SQLITE_ABORT.
43442 */
@@ -43815,11 +43830,12 @@
43830 ** the journal needs to be sync()ed before database page pPg->pgno
43831 ** can be written to. The caller has already promised not to write to it.
43832 */
43833 if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){
43834 needSyncPgno = pPg->pgno;
43835 assert( pPager->journalMode==PAGER_JOURNALMODE_OFF ||
43836 pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize );
43837 assert( pPg->flags&PGHDR_DIRTY );
43838 }
43839
43840 /* If the cache contains a page with page-number pgno, remove it
43841 ** from its hash chain. Also, if the PGHDR_NEED_SYNC flag was set for
@@ -47819,10 +47835,11 @@
47835 MemPage *pPage1; /* First page of the database */
47836 u8 openFlags; /* Flags to sqlite3BtreeOpen() */
47837 #ifndef SQLITE_OMIT_AUTOVACUUM
47838 u8 autoVacuum; /* True if auto-vacuum is enabled */
47839 u8 incrVacuum; /* True if incr-vacuum is enabled */
47840 u8 bDoTruncate; /* True to truncate db on commit */
47841 #endif
47842 u8 inTransaction; /* Transaction state */
47843 u8 max1bytePayload; /* Maximum first byte of cell for a 1-byte payload */
47844 u16 btsFlags; /* Boolean parameters. See BTS_* macros below */
47845 u16 maxLocal; /* Maximum local payload in non-LEAFDATA tables */
@@ -50937,10 +50954,11 @@
50954 ** is requested, this is a no-op.
50955 */
50956 if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){
50957 goto trans_begun;
50958 }
50959 assert( pBt->bDoTruncate==0 );
50960
50961 /* Write transactions are not possible on a read-only database */
50962 if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){
50963 rc = SQLITE_READONLY;
50964 goto trans_begun;
@@ -51251,30 +51269,32 @@
51269 return rc;
51270 }
51271
51272 /* Forward declaration required by incrVacuumStep(). */
51273 static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8);
51274 #define BTALLOC_ANY 0 /* Allocate any page */
51275 #define BTALLOC_EXACT 1 /* Allocate exact page if possible */
51276 #define BTALLOC_LE 2 /* Allocate any page <= the parameter */
51277
51278 /*
51279 ** Perform a single step of an incremental-vacuum. If successful, return
51280 ** SQLITE_OK. If there is no work to do (and therefore no point in
51281 ** calling this function again), return SQLITE_DONE. Or, if an error
51282 ** occurs, return some other error code.
51283 **
51284 ** More specificly, this function attempts to re-organize the database so
51285 ** that the last page of the file currently in use is no longer in use.
51286 **
51287 ** Parameter nFin is the number of pages that this database would contain
51288 ** were this function called until it returns SQLITE_DONE.
51289 **
51290 ** If the bCommit parameter is non-zero, this function assumes that the
51291 ** caller will keep calling incrVacuumStep() until it returns SQLITE_DONE
51292 ** or an error. bCommit is passed true for an auto-vacuum-on-commmit
51293 ** operation, or false for an incremental vacuum.
51294 */
51295 static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg, int bCommit){
 
51296 Pgno nFreeList; /* Number of pages still on the free-list */
51297 int rc;
51298
51299 assert( sqlite3_mutex_held(pBt->mutex) );
51300 assert( iLastPg>nFin );
@@ -51295,85 +51315,98 @@
51315 if( eType==PTRMAP_ROOTPAGE ){
51316 return SQLITE_CORRUPT_BKPT;
51317 }
51318
51319 if( eType==PTRMAP_FREEPAGE ){
51320 if( bCommit==0 ){
51321 /* Remove the page from the files free-list. This is not required
51322 ** if bCommit is non-zero. In that case, the free-list will be
51323 ** truncated to zero after this function returns, so it doesn't
51324 ** matter if it still contains some garbage entries.
51325 */
51326 Pgno iFreePg;
51327 MemPage *pFreePg;
51328 rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, BTALLOC_EXACT);
51329 if( rc!=SQLITE_OK ){
51330 return rc;
51331 }
51332 assert( iFreePg==iLastPg );
51333 releasePage(pFreePg);
51334 }
51335 } else {
51336 Pgno iFreePg; /* Index of free page to move pLastPg to */
51337 MemPage *pLastPg;
51338 u8 eMode = BTALLOC_ANY; /* Mode parameter for allocateBtreePage() */
51339 Pgno iNear = 0; /* nearby parameter for allocateBtreePage() */
51340
51341 rc = btreeGetPage(pBt, iLastPg, &pLastPg, 0);
51342 if( rc!=SQLITE_OK ){
51343 return rc;
51344 }
51345
51346 /* If bCommit is zero, this loop runs exactly once and page pLastPg
51347 ** is swapped with the first free page pulled off the free list.
51348 **
51349 ** On the other hand, if bCommit is greater than zero, then keep
51350 ** looping until a free-page located within the first nFin pages
51351 ** of the file is found.
51352 */
51353 if( bCommit==0 ){
51354 eMode = BTALLOC_LE;
51355 iNear = nFin;
51356 }
51357 do {
51358 MemPage *pFreePg;
51359 rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iNear, eMode);
51360 if( rc!=SQLITE_OK ){
51361 releasePage(pLastPg);
51362 return rc;
51363 }
51364 releasePage(pFreePg);
51365 }while( bCommit && iFreePg>nFin );
51366 assert( iFreePg<iLastPg );
51367
51368 rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, bCommit);
 
 
 
51369 releasePage(pLastPg);
51370 if( rc!=SQLITE_OK ){
51371 return rc;
51372 }
51373 }
51374 }
51375
51376 if( bCommit==0 ){
51377 do {
51378 iLastPg--;
51379 }while( iLastPg==PENDING_BYTE_PAGE(pBt) || PTRMAP_ISPAGE(pBt, iLastPg) );
51380 pBt->bDoTruncate = 1;
 
 
 
 
 
 
 
 
 
 
 
 
 
51381 pBt->nPage = iLastPg;
51382 }
51383 return SQLITE_OK;
51384 }
51385
51386 /*
51387 ** The database opened by the first argument is an auto-vacuum database
51388 ** nOrig pages in size containing nFree free pages. Return the expected
51389 ** size of the database in pages following an auto-vacuum operation.
51390 */
51391 static Pgno finalDbSize(BtShared *pBt, Pgno nOrig, Pgno nFree){
51392 int nEntry; /* Number of entries on one ptrmap page */
51393 Pgno nPtrmap; /* Number of PtrMap pages to be freed */
51394 Pgno nFin; /* Return value */
51395
51396 nEntry = pBt->usableSize/5;
51397 nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry;
51398 nFin = nOrig - nFree - nPtrmap;
51399 if( nOrig>PENDING_BYTE_PAGE(pBt) && nFin<PENDING_BYTE_PAGE(pBt) ){
51400 nFin--;
51401 }
51402 while( PTRMAP_ISPAGE(pBt, nFin) || nFin==PENDING_BYTE_PAGE(pBt) ){
51403 nFin--;
51404 }
51405
51406 return nFin;
51407 }
51408
51409 /*
51410 ** A write-transaction must be opened before calling this function.
51411 ** It performs a single unit of work towards an incremental vacuum.
51412 **
@@ -51388,15 +51421,25 @@
51421 sqlite3BtreeEnter(p);
51422 assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE );
51423 if( !pBt->autoVacuum ){
51424 rc = SQLITE_DONE;
51425 }else{
51426 Pgno nOrig = btreePagecount(pBt);
51427 Pgno nFree = get4byte(&pBt->pPage1->aData[36]);
51428 Pgno nFin = finalDbSize(pBt, nOrig, nFree);
51429
51430 if( nOrig<nFin ){
51431 rc = SQLITE_CORRUPT_BKPT;
51432 }else if( nFree>0 ){
51433 invalidateAllOverflowCache(pBt);
51434 rc = incrVacuumStep(pBt, nFin, nOrig, 0);
51435 if( rc==SQLITE_OK ){
51436 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
51437 put4byte(&pBt->pPage1->aData[28], pBt->nPage);
51438 }
51439 }else{
51440 rc = SQLITE_DONE;
51441 }
51442 }
51443 sqlite3BtreeLeave(p);
51444 return rc;
51445 }
@@ -51419,13 +51462,11 @@
51462 invalidateAllOverflowCache(pBt);
51463 assert(pBt->autoVacuum);
51464 if( !pBt->incrVacuum ){
51465 Pgno nFin; /* Number of pages in database after autovacuuming */
51466 Pgno nFree; /* Number of pages on the freelist initially */
 
51467 Pgno iFree; /* The next page to be freed */
 
51468 Pgno nOrig; /* Database size before freeing */
51469
51470 nOrig = btreePagecount(pBt);
51471 if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){
51472 /* It is not possible to create a database for which the final page
@@ -51434,30 +51475,22 @@
51475 */
51476 return SQLITE_CORRUPT_BKPT;
51477 }
51478
51479 nFree = get4byte(&pBt->pPage1->aData[36]);
51480 nFin = finalDbSize(pBt, nOrig, nFree);
 
 
 
 
 
 
 
 
51481 if( nFin>nOrig ) return SQLITE_CORRUPT_BKPT;
51482
51483 for(iFree=nOrig; iFree>nFin && rc==SQLITE_OK; iFree--){
51484 rc = incrVacuumStep(pBt, nFin, iFree, 1);
51485 }
51486 if( (rc==SQLITE_DONE || rc==SQLITE_OK) && nFree>0 ){
51487 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
51488 put4byte(&pBt->pPage1->aData[32], 0);
51489 put4byte(&pBt->pPage1->aData[36], 0);
51490 put4byte(&pBt->pPage1->aData[28], nFin);
51491 pBt->bDoTruncate = 1;
51492 pBt->nPage = nFin;
51493 }
51494 if( rc!=SQLITE_OK ){
51495 sqlite3PagerRollback(pPager);
51496 }
@@ -51508,10 +51541,13 @@
51541 if( rc!=SQLITE_OK ){
51542 sqlite3BtreeLeave(p);
51543 return rc;
51544 }
51545 }
51546 if( pBt->bDoTruncate ){
51547 sqlite3PagerTruncateImage(pBt->pPager, pBt->nPage);
51548 }
51549 #endif
51550 rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zMaster, 0);
51551 sqlite3BtreeLeave(p);
51552 }
51553 return rc;
@@ -51523,10 +51559,13 @@
51559 */
51560 static void btreeEndTransaction(Btree *p){
51561 BtShared *pBt = p->pBt;
51562 assert( sqlite3BtreeHoldsMutex(p) );
51563
51564 #ifndef SQLITE_OMIT_AUTOVACUUM
51565 pBt->bDoTruncate = 0;
51566 #endif
51567 btreeClearHasContent(pBt);
51568 if( p->inTrans>TRANS_NONE && p->db->activeVdbeCnt>1 ){
51569 /* If there are other active statements that belong to this database
51570 ** handle, downgrade to a read-only transaction. The other statements
51571 ** may still be reading from the database. */
@@ -53195,25 +53234,27 @@
53234 **
53235 ** SQLITE_OK is returned on success. Any other return value indicates
53236 ** an error. *ppPage and *pPgno are undefined in the event of an error.
53237 ** Do not invoke sqlite3PagerUnref() on *ppPage if an error is returned.
53238 **
53239 ** If the "nearby" parameter is not 0, then an effort is made to
53240 ** locate a page close to the page number "nearby". This can be used in an
53241 ** attempt to keep related pages close to each other in the database file,
53242 ** which in turn can make database access faster.
53243 **
53244 ** If the eMode parameter is BTALLOC_EXACT and the nearby page exists
53245 ** anywhere on the free-list, then it is guaranteed to be returned. If
53246 ** eMode is BTALLOC_LT then the page returned will be less than or equal
53247 ** to nearby if any such page exists. If eMode is BTALLOC_ANY then there
53248 ** are no restrictions on which page is returned.
53249 */
53250 static int allocateBtreePage(
53251 BtShared *pBt, /* The btree */
53252 MemPage **ppPage, /* Store pointer to the allocated page here */
53253 Pgno *pPgno, /* Store the page number here */
53254 Pgno nearby, /* Search for a page near this one */
53255 u8 eMode /* BTALLOC_EXACT, BTALLOC_LT, or BTALLOC_ANY */
53256 ){
53257 MemPage *pPage1;
53258 int rc;
53259 u32 n; /* Number of pages on the freelist */
53260 u32 k; /* Number of leaves on the trunk of the freelist */
@@ -53220,10 +53261,11 @@
53261 MemPage *pTrunk = 0;
53262 MemPage *pPrevTrunk = 0;
53263 Pgno mxPage; /* Total size of the database file */
53264
53265 assert( sqlite3_mutex_held(pBt->mutex) );
53266 assert( eMode==BTALLOC_ANY || (nearby>0 && pBt->autoVacuum) );
53267 pPage1 = pBt->pPage1;
53268 mxPage = btreePagecount(pBt);
53269 n = get4byte(&pPage1->aData[36]);
53270 testcase( n==mxPage-1 );
53271 if( n>=mxPage ){
@@ -53232,25 +53274,28 @@
53274 if( n>0 ){
53275 /* There are pages on the freelist. Reuse one of those pages. */
53276 Pgno iTrunk;
53277 u8 searchList = 0; /* If the free-list must be searched for 'nearby' */
53278
53279 /* If eMode==BTALLOC_EXACT and a query of the pointer-map
53280 ** shows that the page 'nearby' is somewhere on the free-list, then
53281 ** the entire-list will be searched for that page.
53282 */
53283 #ifndef SQLITE_OMIT_AUTOVACUUM
53284 if( eMode==BTALLOC_EXACT ){
53285 if( nearby<=mxPage ){
53286 u8 eType;
53287 assert( nearby>0 );
53288 assert( pBt->autoVacuum );
53289 rc = ptrmapGet(pBt, nearby, &eType, 0);
53290 if( rc ) return rc;
53291 if( eType==PTRMAP_FREEPAGE ){
53292 searchList = 1;
53293 }
53294 }
53295 }else if( eMode==BTALLOC_LE ){
53296 searchList = 1;
53297 }
53298 #endif
53299
53300 /* Decrement the free-list count by 1. Set iTrunk to the index of the
53301 ** first free-list trunk page. iPrevTrunk is initially 1.
@@ -53259,11 +53304,12 @@
53304 if( rc ) return rc;
53305 put4byte(&pPage1->aData[36], n-1);
53306
53307 /* The code within this loop is run only once if the 'searchList' variable
53308 ** is not true. Otherwise, it runs once for each trunk-page on the
53309 ** free-list until the page 'nearby' is located (eMode==BTALLOC_EXACT)
53310 ** or until a page less than 'nearby' is located (eMode==BTALLOC_LT)
53311 */
53312 do {
53313 pPrevTrunk = pTrunk;
53314 if( pPrevTrunk ){
53315 iTrunk = get4byte(&pPrevTrunk->aData[0]);
@@ -53301,15 +53347,17 @@
53347 }else if( k>(u32)(pBt->usableSize/4 - 2) ){
53348 /* Value of k is out of range. Database corruption */
53349 rc = SQLITE_CORRUPT_BKPT;
53350 goto end_allocate_page;
53351 #ifndef SQLITE_OMIT_AUTOVACUUM
53352 }else if( searchList
53353 && (nearby==iTrunk || (iTrunk<nearby && eMode==BTALLOC_LE))
53354 ){
53355 /* The list is being searched and this trunk page is the page
53356 ** to allocate, regardless of whether it has leaves.
53357 */
53358 *pPgno = iTrunk;
53359 *ppPage = pTrunk;
53360 searchList = 0;
53361 rc = sqlite3PagerWrite(pTrunk->pDbPage);
53362 if( rc ){
53363 goto end_allocate_page;
@@ -53368,18 +53416,28 @@
53416 u32 closest;
53417 Pgno iPage;
53418 unsigned char *aData = pTrunk->aData;
53419 if( nearby>0 ){
53420 u32 i;
 
53421 closest = 0;
53422 if( eMode==BTALLOC_LE ){
53423 for(i=0; i<k; i++){
53424 iPage = get4byte(&aData[8+i*4]);
53425 if( iPage<=nearby ){
53426 closest = i;
53427 break;
53428 }
53429 }
53430 }else{
53431 int dist;
53432 dist = sqlite3AbsInt32(get4byte(&aData[8]) - nearby);
53433 for(i=1; i<k; i++){
53434 int d2 = sqlite3AbsInt32(get4byte(&aData[8+i*4]) - nearby);
53435 if( d2<dist ){
53436 closest = i;
53437 dist = d2;
53438 }
53439 }
53440 }
53441 }else{
53442 closest = 0;
53443 }
@@ -53389,11 +53447,13 @@
53447 if( iPage>mxPage ){
53448 rc = SQLITE_CORRUPT_BKPT;
53449 goto end_allocate_page;
53450 }
53451 testcase( iPage==mxPage );
53452 if( !searchList
53453 || (iPage==nearby || (iPage<nearby && eMode==BTALLOC_LE))
53454 ){
53455 int noContent;
53456 *pPgno = iPage;
53457 TRACE(("ALLOCATE: %d was leaf %d of %d on trunk %d"
53458 ": %d more free pages\n",
53459 *pPgno, closest+1, k, pTrunk->pgno, n-1));
@@ -53416,12 +53476,30 @@
53476 }
53477 releasePage(pPrevTrunk);
53478 pPrevTrunk = 0;
53479 }while( searchList );
53480 }else{
53481 /* There are no pages on the freelist, so append a new page to the
53482 ** database image.
53483 **
53484 ** Normally, new pages allocated by this block can be requested from the
53485 ** pager layer with the 'no-content' flag set. This prevents the pager
53486 ** from trying to read the pages content from disk. However, if the
53487 ** current transaction has already run one or more incremental-vacuum
53488 ** steps, then the page we are about to allocate may contain content
53489 ** that is required in the event of a rollback. In this case, do
53490 ** not set the no-content flag. This causes the pager to load and journal
53491 ** the current page content before overwriting it.
53492 **
53493 ** Note that the pager will not actually attempt to load or journal
53494 ** content for any page that really does lie past the end of the database
53495 ** file on disk. So the effects of disabling the no-content optimization
53496 ** here are confined to those pages that lie between the end of the
53497 ** database image and the end of the database file.
53498 */
53499 int bNoContent = (0==pBt->bDoTruncate);
53500
53501 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
53502 if( rc ) return rc;
53503 pBt->nPage++;
53504 if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ) pBt->nPage++;
53505
@@ -53432,11 +53510,11 @@
53510 ** becomes a new pointer-map page, the second is used by the caller.
53511 */
53512 MemPage *pPg = 0;
53513 TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", pBt->nPage));
53514 assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) );
53515 rc = btreeGetPage(pBt, pBt->nPage, &pPg, bNoContent);
53516 if( rc==SQLITE_OK ){
53517 rc = sqlite3PagerWrite(pPg->pDbPage);
53518 releasePage(pPg);
53519 }
53520 if( rc ) return rc;
@@ -53446,11 +53524,11 @@
53524 #endif
53525 put4byte(28 + (u8*)pBt->pPage1->aData, pBt->nPage);
53526 *pPgno = pBt->nPage;
53527
53528 assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );
53529 rc = btreeGetPage(pBt, *pPgno, ppPage, bNoContent);
53530 if( rc ) return rc;
53531 rc = sqlite3PagerWrite((*ppPage)->pDbPage);
53532 if( rc!=SQLITE_OK ){
53533 releasePage(*ppPage);
53534 }
@@ -55461,11 +55539,11 @@
55539
55540 /* Allocate a page. The page that currently resides at pgnoRoot will
55541 ** be moved to the allocated page (unless the allocated page happens
55542 ** to reside at pgnoRoot).
55543 */
55544 rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, BTALLOC_EXACT);
55545 if( rc!=SQLITE_OK ){
55546 return rc;
55547 }
55548
55549 if( pgnoMove!=pgnoRoot ){
@@ -57153,11 +57231,10 @@
57231 }
57232 }else{
57233 nDestTruncate = nSrcPage * (pgszSrc/pgszDest);
57234 }
57235 assert( nDestTruncate>0 );
 
57236
57237 if( pgszSrc<pgszDest ){
57238 /* If the source page-size is smaller than the destination page-size,
57239 ** two extra things may need to happen:
57240 **
@@ -57167,10 +57244,12 @@
57244 ** pending-byte page in the source database may need to be
57245 ** copied into the destination database.
57246 */
57247 const i64 iSize = (i64)pgszSrc * (i64)nSrcPage;
57248 sqlite3_file * const pFile = sqlite3PagerFile(pDestPager);
57249 Pgno iPg;
57250 int nDstPage;
57251 i64 iOff;
57252 i64 iEnd;
57253
57254 assert( pFile );
57255 assert( nDestTruncate==0
@@ -57177,17 +57256,30 @@
57256 || (i64)nDestTruncate*(i64)pgszDest >= iSize || (
57257 nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1)
57258 && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest
57259 ));
57260
57261 /* This block ensures that all data required to recreate the original
57262 ** database has been stored in the journal for pDestPager and the
57263 ** journal synced to disk. So at this point we may safely modify
57264 ** the database file in any way, knowing that if a power failure
57265 ** occurs, the original database will be reconstructed from the
57266 ** journal file. */
57267 sqlite3PagerPagecount(pDestPager, &nDstPage);
57268 for(iPg=nDestTruncate; rc==SQLITE_OK && iPg<=(Pgno)nDstPage; iPg++){
57269 if( iPg!=PENDING_BYTE_PAGE(p->pDest->pBt) ){
57270 DbPage *pPg;
57271 rc = sqlite3PagerGet(pDestPager, iPg, &pPg);
57272 if( rc==SQLITE_OK ){
57273 rc = sqlite3PagerWrite(pPg);
57274 sqlite3PagerUnref(pPg);
57275 }
57276 }
57277 }
57278 if( rc==SQLITE_OK ){
57279 rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1);
57280 }
57281
57282 /* Write the extra pages and truncate the database file as required */
57283 iEnd = MIN(PENDING_BYTE + pgszDest, iSize);
57284 for(
57285 iOff=PENDING_BYTE+pgszSrc;
@@ -57210,10 +57302,11 @@
57302 /* Sync the database file to disk. */
57303 if( rc==SQLITE_OK ){
57304 rc = sqlite3PagerSync(pDestPager);
57305 }
57306 }else{
57307 sqlite3PagerTruncateImage(pDestPager, nDestTruncate);
57308 rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 0);
57309 }
57310
57311 /* Finish committing the transaction to the destination database. */
57312 if( SQLITE_OK==rc
@@ -63039,11 +63132,11 @@
63132 return 0;
63133 }
63134 if( zName ){
63135 for(i=0; i<p->nzVar; i++){
63136 const char *z = p->azVar[i];
63137 if( z && strncmp(z,zName,nName)==0 && z[nName]==0 ){
63138 return i+1;
63139 }
63140 }
63141 }
63142 return 0;
@@ -72691,16 +72784,16 @@
72784 const char *zTab,
72785 const char *zDb
72786 ){
72787 int n;
72788 for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){}
72789 if( zDb && (sqlite3StrNICmp(zSpan, zDb, n)!=0 || zDb[n]!=0) ){
72790 return 0;
72791 }
72792 zSpan += n+1;
72793 for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){}
72794 if( zTab && (sqlite3StrNICmp(zSpan, zTab, n)!=0 || zTab[n]!=0) ){
72795 return 0;
72796 }
72797 zSpan += n+1;
72798 if( zCol && sqlite3StrICmp(zSpan, zCol)!=0 ){
72799 return 0;
@@ -74493,11 +74586,11 @@
74586 ** number as the prior appearance of the same name, or if the name
74587 ** has never appeared before, reuse the same variable number
74588 */
74589 ynVar i;
74590 for(i=0; i<pParse->nzVar; i++){
74591 if( pParse->azVar[i] && strcmp(pParse->azVar[i],z)==0 ){
74592 pExpr->iColumn = x = (ynVar)i+1;
74593 break;
74594 }
74595 }
74596 if( x==0 ) x = pExpr->iColumn = (ynVar)(++pParse->nVar);
@@ -79350,11 +79443,11 @@
79443 }
79444 if( pTab->tnum==0 ){
79445 /* Do not gather statistics on views or virtual tables */
79446 return;
79447 }
79448 if( sqlite3_strnicmp(pTab->zName, "sqlite_", 7)==0 ){
79449 /* Do not gather statistics on system tables */
79450 return;
79451 }
79452 assert( sqlite3BtreeHoldsAllMutexes(db) );
79453 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
@@ -79760,11 +79853,11 @@
79853 }
79854 if( i==0 ) pTable->nRowEst = v;
79855 if( pIndex==0 ) break;
79856 pIndex->aiRowEst[i] = v;
79857 if( *z==' ' ) z++;
79858 if( strcmp(z, "unordered")==0 ){
79859 pIndex->bUnordered = 1;
79860 break;
79861 }
79862 }
79863 return 0;
@@ -83409,11 +83502,11 @@
83502 pDb = &db->aDb[iDb];
83503
83504 assert( pTab!=0 );
83505 assert( pParse->nErr==0 );
83506 if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0
83507 && sqlite3StrNICmp(&pTab->zName[7],"altertab_",9)!=0 ){
83508 sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName);
83509 goto exit_create_index;
83510 }
83511 #ifndef SQLITE_OMIT_VIEW
83512 if( pTab->pSelect ){
@@ -86787,10 +86880,61 @@
86880 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
86881 break;
86882 }
86883 }
86884 }
86885
86886 /*
86887 ** The unicode() function. Return the integer unicode code-point value
86888 ** for the first character of the input string.
86889 */
86890 static void unicodeFunc(
86891 sqlite3_context *context,
86892 int argc,
86893 sqlite3_value **argv
86894 ){
86895 const unsigned char *z = sqlite3_value_text(argv[0]);
86896 (void)argc;
86897 if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z));
86898 }
86899
86900 /*
86901 ** The char() function takes zero or more arguments, each of which is
86902 ** an integer. It constructs a string where each character of the string
86903 ** is the unicode character for the corresponding integer argument.
86904 */
86905 static void charFunc(
86906 sqlite3_context *context,
86907 int argc,
86908 sqlite3_value **argv
86909 ){
86910 unsigned char *z, *zOut;
86911 int i;
86912 zOut = z = sqlite3_malloc( argc*4 );
86913 if( z==0 ){
86914 sqlite3_result_error_nomem(context);
86915 return;
86916 }
86917 for(i=0; i<argc; i++){
86918 sqlite3_int64 x;
86919 unsigned c;
86920 x = sqlite3_value_int64(argv[i]);
86921 if( x<0 || x>0x10ffff ) x = 0xfffd;
86922 c = (unsigned)(x & 0x1fffff);
86923 if( c<=0xFFFF ){
86924 if( c>=0xd800 && c<=0xdfff ) c = 0xfffd;
86925 *zOut++ = (u8)(c&0x00FF);
86926 *zOut++ = (u8)((c>>8)&0x00FF);
86927 }else{
86928 *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0));
86929 *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03));
86930 *zOut++ = (u8)(c&0x00FF);
86931 *zOut++ = (u8)(0x00DC + ((c>>8)&0x03));
86932 }
86933 }
86934 sqlite3_result_text16le(context, (char*)z, (int)(zOut-z), sqlite3_free);
86935 }
86936
86937 /*
86938 ** The hex() function. Interpret the argument as a blob. Return
86939 ** a hexadecimal rendering as text.
86940 */
@@ -87415,10 +87559,12 @@
87559 FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
87560 FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
87561 FUNCTION(instr, 2, 0, 0, instrFunc ),
87562 FUNCTION(substr, 2, 0, 0, substrFunc ),
87563 FUNCTION(substr, 3, 0, 0, substrFunc ),
87564 FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
87565 FUNCTION(char, -1, 0, 0, charFunc ),
87566 FUNCTION(abs, 1, 0, 0, absFunc ),
87567 #ifndef SQLITE_OMIT_FLOATING_POINT
87568 FUNCTION(round, 1, 0, 0, roundFunc ),
87569 FUNCTION(round, 2, 0, 0, roundFunc ),
87570 #endif
@@ -91626,10 +91772,23 @@
91772 0,
91773 #endif
91774 sqlite3_blob_reopen,
91775 sqlite3_vtab_config,
91776 sqlite3_vtab_on_conflict,
91777 sqlite3_close_v2,
91778 sqlite3_db_filename,
91779 sqlite3_db_readonly,
91780 sqlite3_db_release_memory,
91781 sqlite3_errstr,
91782 sqlite3_stmt_busy,
91783 sqlite3_stmt_readonly,
91784 sqlite3_stricmp,
91785 sqlite3_uri_boolean,
91786 sqlite3_uri_int64,
91787 sqlite3_uri_parameter,
91788 sqlite3_vsnprintf,
91789 sqlite3_wal_checkpoint_v2
91790 };
91791
91792 /*
91793 ** Attempt to load an SQLite extension library contained in the file
91794 ** zFile. The entry point is zProc. zProc may be 0 in which case a
@@ -92866,10 +93025,11 @@
93025 Column *pCol;
93026 Index *pPk;
93027 for(pPk=pTab->pIndex; pPk && pPk->autoIndex!=2; pPk=pPk->pNext){}
93028 sqlite3VdbeSetNumCols(v, 6);
93029 pParse->nMem = 6;
93030 sqlite3CodeVerifySchema(pParse, iDb);
93031 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cid", SQLITE_STATIC);
93032 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
93033 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "type", SQLITE_STATIC);
93034 sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "notnull", SQLITE_STATIC);
93035 sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "dflt_value", SQLITE_STATIC);
@@ -92911,10 +93071,11 @@
93071 if( pIdx ){
93072 int i;
93073 pTab = pIdx->pTable;
93074 sqlite3VdbeSetNumCols(v, 3);
93075 pParse->nMem = 3;
93076 sqlite3CodeVerifySchema(pParse, iDb);
93077 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seqno", SQLITE_STATIC);
93078 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "cid", SQLITE_STATIC);
93079 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "name", SQLITE_STATIC);
93080 for(i=0; i<pIdx->nColumn; i++){
93081 int cnum = pIdx->aiColumn[i];
@@ -92937,10 +93098,11 @@
93098 pIdx = pTab->pIndex;
93099 if( pIdx ){
93100 int i = 0;
93101 sqlite3VdbeSetNumCols(v, 3);
93102 pParse->nMem = 3;
93103 sqlite3CodeVerifySchema(pParse, iDb);
93104 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
93105 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
93106 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC);
93107 while(pIdx){
93108 sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
@@ -93000,10 +93162,11 @@
93162 pFK = pTab->pFKey;
93163 if( pFK ){
93164 int i = 0;
93165 sqlite3VdbeSetNumCols(v, 8);
93166 pParse->nMem = 8;
93167 sqlite3CodeVerifySchema(pParse, iDb);
93168 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "id", SQLITE_STATIC);
93169 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "seq", SQLITE_STATIC);
93170 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "table", SQLITE_STATIC);
93171 sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "from", SQLITE_STATIC);
93172 sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "to", SQLITE_STATIC);
@@ -96914,11 +97077,12 @@
97077 if( op==TK_ALL ){
97078 regPrev = 0;
97079 }else{
97080 int nExpr = p->pEList->nExpr;
97081 assert( nOrderBy>=nExpr || db->mallocFailed );
97082 regPrev = pParse->nMem+1;
97083 pParse->nMem += nExpr+1;
97084 sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev);
97085 pKeyDup = sqlite3DbMallocZero(db,
97086 sizeof(*pKeyDup) + nExpr*(sizeof(CollSeq*)+1) );
97087 if( pKeyDup ){
97088 pKeyDup->aSortOrder = (u8*)&pKeyDup->aColl[nExpr];
@@ -97096,16 +97260,10 @@
97260 sqlite3VdbeAddOp4(v, OP_Compare, destA.iSdst, destB.iSdst, nOrderBy,
97261 (char*)pKeyMerge, P4_KEYINFO_HANDOFF);
97262 sqlite3VdbeChangeP5(v, OPFLAG_PERMUTE);
97263 sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB);
97264
 
 
 
 
 
 
97265 /* Jump to the this point in order to terminate the query.
97266 */
97267 sqlite3VdbeResolveLabel(v, labelEnd);
97268
97269 /* Set the number of output columns
@@ -103426,13 +103584,12 @@
103584 **
103585 ** If there are multiple terms in the WHERE clause of the form "X <op> <expr>"
103586 ** then try for the one with no dependencies on <expr> - in other words where
103587 ** <expr> is a constant expression of some kind. Only return entries of
103588 ** the form "X <op> Y" where Y is a column in another table if no terms of
103589 ** the form "X <op> <const-expr>" exist. If no terms with a constant RHS
103590 ** exist, try to return a term that does not use WO_EQUIV.
 
103591 */
103592 static WhereTerm *findTerm(
103593 WhereClause *pWC, /* The WHERE clause to be searched */
103594 int iCur, /* Cursor number of LHS */
103595 int iColumn, /* Column number of LHS */
@@ -103487,12 +103644,16 @@
103644 }
103645 if( sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ){
103646 continue;
103647 }
103648 }
103649 if( pTerm->prereqRight==0 ){
103650 pResult = pTerm;
103651 goto findTerm_success;
103652 }else if( pResult==0 ){
103653 pResult = pTerm;
103654 }
103655 }
103656 if( (pTerm->eOperator & WO_EQUIV)!=0
103657 && nEquiv<ArraySize(aEquiv)
103658 ){
103659 pX = sqlite3ExprSkipCollate(pTerm->pExpr->pRight);
@@ -107014,10 +107175,11 @@
107175 testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
107176 iRowidReg = codeEqualityTerm(pParse, pTerm, pLevel, iReleaseReg);
107177 addrNxt = pLevel->addrNxt;
107178 sqlite3VdbeAddOp2(v, OP_MustBeInt, iRowidReg, addrNxt);
107179 sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addrNxt, iRowidReg);
107180 sqlite3ExprCacheAffinityChange(pParse, iRowidReg, 1);
107181 sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
107182 VdbeComment((v, "pk"));
107183 pLevel->op = OP_Noop;
107184 }else if( pLevel->plan.wsFlags & WHERE_ROWID_RANGE ){
107185 /* Case 2: We have an inequality comparison against the ROWID field.
@@ -114105,11 +114267,11 @@
114267 }
114268 }
114269 sqlite3VtabRollback(db);
114270 sqlite3EndBenignMalloc();
114271
114272 if( (db->flags&SQLITE_InternChanges)!=0 && db->init.busy==0 ){
114273 sqlite3ExpirePreparedStatements(db);
114274 sqlite3ResetAllSchemasOfConnection(db);
114275 }
114276
114277 /* Any deferred constraint violations have now been resolved. */
114278
+2 -1
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -107,11 +107,11 @@
107107
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108108
** [sqlite_version()] and [sqlite_source_id()].
109109
*/
110110
#define SQLITE_VERSION "3.7.16"
111111
#define SQLITE_VERSION_NUMBER 3007016
112
-#define SQLITE_SOURCE_ID "2013-02-13 14:04:28 7e10a62d0eb1cb2bdafb6752b78a9d368e9f21f5"
112
+#define SQLITE_SOURCE_ID "2013-03-06 01:55:27 7097241c1220ada318f8eda938c3e3430b94a606"
113113
114114
/*
115115
** CAPI3REF: Run-Time Library Version Numbers
116116
** KEYWORDS: sqlite3_version, sqlite3_sourceid
117117
**
@@ -481,10 +481,11 @@
481481
#define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
482482
#define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
483483
#define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8))
484484
#define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8))
485485
#define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8))
486
+#define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3<<8))
486487
#define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8))
487488
#define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8))
488489
#define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8))
489490
#define SQLITE_CONSTRAINT_FOREIGNKEY (SQLITE_CONSTRAINT | (3<<8))
490491
#define SQLITE_CONSTRAINT_FUNCTION (SQLITE_CONSTRAINT | (4<<8))
491492
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -107,11 +107,11 @@
107 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108 ** [sqlite_version()] and [sqlite_source_id()].
109 */
110 #define SQLITE_VERSION "3.7.16"
111 #define SQLITE_VERSION_NUMBER 3007016
112 #define SQLITE_SOURCE_ID "2013-02-13 14:04:28 7e10a62d0eb1cb2bdafb6752b78a9d368e9f21f5"
113
114 /*
115 ** CAPI3REF: Run-Time Library Version Numbers
116 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
117 **
@@ -481,10 +481,11 @@
481 #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
482 #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
483 #define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8))
484 #define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8))
485 #define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8))
 
486 #define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8))
487 #define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8))
488 #define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8))
489 #define SQLITE_CONSTRAINT_FOREIGNKEY (SQLITE_CONSTRAINT | (3<<8))
490 #define SQLITE_CONSTRAINT_FUNCTION (SQLITE_CONSTRAINT | (4<<8))
491
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -107,11 +107,11 @@
107 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108 ** [sqlite_version()] and [sqlite_source_id()].
109 */
110 #define SQLITE_VERSION "3.7.16"
111 #define SQLITE_VERSION_NUMBER 3007016
112 #define SQLITE_SOURCE_ID "2013-03-06 01:55:27 7097241c1220ada318f8eda938c3e3430b94a606"
113
114 /*
115 ** CAPI3REF: Run-Time Library Version Numbers
116 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
117 **
@@ -481,10 +481,11 @@
481 #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
482 #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
483 #define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8))
484 #define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8))
485 #define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8))
486 #define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3<<8))
487 #define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8))
488 #define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8))
489 #define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8))
490 #define SQLITE_CONSTRAINT_FOREIGNKEY (SQLITE_CONSTRAINT | (3<<8))
491 #define SQLITE_CONSTRAINT_FUNCTION (SQLITE_CONSTRAINT | (4<<8))
492
+1
--- src/sync.c
+++ src/sync.c
@@ -245,10 +245,11 @@
245245
usage("remote-url ?URL|off?");
246246
}
247247
if( g.argc==3 ){
248248
db_unset("last-sync-url", 0);
249249
db_unset("last-sync-pw", 0);
250
+ if( is_false(g.argv[2]) ) return;
250251
url_parse(g.argv[2], URL_REMEMBER|URL_PROMPT_PW);
251252
}
252253
zUrl = db_get("last-sync-url", 0);
253254
if( zUrl==0 ){
254255
fossil_print("off\n");
255256
--- src/sync.c
+++ src/sync.c
@@ -245,10 +245,11 @@
245 usage("remote-url ?URL|off?");
246 }
247 if( g.argc==3 ){
248 db_unset("last-sync-url", 0);
249 db_unset("last-sync-pw", 0);
 
250 url_parse(g.argv[2], URL_REMEMBER|URL_PROMPT_PW);
251 }
252 zUrl = db_get("last-sync-url", 0);
253 if( zUrl==0 ){
254 fossil_print("off\n");
255
--- src/sync.c
+++ src/sync.c
@@ -245,10 +245,11 @@
245 usage("remote-url ?URL|off?");
246 }
247 if( g.argc==3 ){
248 db_unset("last-sync-url", 0);
249 db_unset("last-sync-pw", 0);
250 if( is_false(g.argv[2]) ) return;
251 url_parse(g.argv[2], URL_REMEMBER|URL_PROMPT_PW);
252 }
253 zUrl = db_get("last-sync-url", 0);
254 if( zUrl==0 ){
255 fossil_print("off\n");
256
+1 -1
--- src/tkt.c
+++ src/tkt.c
@@ -934,11 +934,11 @@
934934
@
935935
@ <li><p>Delete attachment "%h(zFile)"
936936
}else{
937937
@
938938
@ <li><p>Add attachment
939
- @ "%z(href("%R/artifact/%S",zSrc))%h(zFile)</a>"
939
+ @ "%z(href("%R/artifact/%S",zSrc))%s(zFile)</a>"
940940
}
941941
@ [%z(href("%R/artifact/%T",zChngUuid))%s(zShort)</a>]
942942
@ (rid %d(rid)) by
943943
hyperlink_to_user(zUser,zDate," on");
944944
hyperlink_to_date(zDate, ".</p>");
945945
--- src/tkt.c
+++ src/tkt.c
@@ -934,11 +934,11 @@
934 @
935 @ <li><p>Delete attachment "%h(zFile)"
936 }else{
937 @
938 @ <li><p>Add attachment
939 @ "%z(href("%R/artifact/%S",zSrc))%h(zFile)</a>"
940 }
941 @ [%z(href("%R/artifact/%T",zChngUuid))%s(zShort)</a>]
942 @ (rid %d(rid)) by
943 hyperlink_to_user(zUser,zDate," on");
944 hyperlink_to_date(zDate, ".</p>");
945
--- src/tkt.c
+++ src/tkt.c
@@ -934,11 +934,11 @@
934 @
935 @ <li><p>Delete attachment "%h(zFile)"
936 }else{
937 @
938 @ <li><p>Add attachment
939 @ "%z(href("%R/artifact/%S",zSrc))%s(zFile)</a>"
940 }
941 @ [%z(href("%R/artifact/%T",zChngUuid))%s(zShort)</a>]
942 @ (rid %d(rid)) by
943 hyperlink_to_user(zUser,zDate," on");
944 hyperlink_to_date(zDate, ".</p>");
945
+1
--- src/url.c
+++ src/url.c
@@ -429,10 +429,11 @@
429429
/*
430430
** Prompt the user for the password for g.urlUser. Store the result
431431
** in g.urlPasswd.
432432
*/
433433
void url_prompt_for_password(void){
434
+ if( g.urlIsSsh || g.urlIsFile ) return;
434435
if( isatty(fileno(stdin))
435436
&& (g.urlFlags & URL_PROMPT_PW)!=0
436437
&& (g.urlFlags & URL_PROMPTED)==0
437438
){
438439
char *zPrompt = mprintf("\rpassword for %s: ", g.urlUser);
439440
--- src/url.c
+++ src/url.c
@@ -429,10 +429,11 @@
429 /*
430 ** Prompt the user for the password for g.urlUser. Store the result
431 ** in g.urlPasswd.
432 */
433 void url_prompt_for_password(void){
 
434 if( isatty(fileno(stdin))
435 && (g.urlFlags & URL_PROMPT_PW)!=0
436 && (g.urlFlags & URL_PROMPTED)==0
437 ){
438 char *zPrompt = mprintf("\rpassword for %s: ", g.urlUser);
439
--- src/url.c
+++ src/url.c
@@ -429,10 +429,11 @@
429 /*
430 ** Prompt the user for the password for g.urlUser. Store the result
431 ** in g.urlPasswd.
432 */
433 void url_prompt_for_password(void){
434 if( g.urlIsSsh || g.urlIsFile ) return;
435 if( isatty(fileno(stdin))
436 && (g.urlFlags & URL_PROMPT_PW)!=0
437 && (g.urlFlags & URL_PROMPTED)==0
438 ){
439 char *zPrompt = mprintf("\rpassword for %s: ", g.urlUser);
440
+49 -9
--- src/utf8.c
+++ src/utf8.c
@@ -23,10 +23,18 @@
2323
#include "utf8.h"
2424
#include <sqlite3.h>
2525
#ifdef _WIN32
2626
# include <windows.h>
2727
#endif
28
+#ifdef __CYGWIN__
29
+# include <sys/cygwin.h>
30
+# define CP_UTF8 65001
31
+ __declspec(dllimport) extern __stdcall int WideCharToMultiByte(int, int,
32
+ const char *, int, const char *, int, const char *, const char *);
33
+ __declspec(dllimport) extern __stdcall int MultiByteToWideChar(int, int,
34
+ const char *, int, wchar_t*, int);
35
+#endif
2836
2937
#ifdef _WIN32
3038
/*
3139
** Translate MBCS to UTF-8. Return a pointer to the translated text.
3240
** Call fossil_mbcs_free() to deallocate any memory used to store the
@@ -42,38 +50,39 @@
4250
** any memory used to hold the translation
4351
*/
4452
void fossil_mbcs_free(char *zOld){
4553
sqlite3_free(zOld);
4654
}
55
+#endif /* _WIN32 */
4756
4857
/*
4958
** Translate Unicode text into UTF-8.
5059
** Return a pointer to the translated text.
5160
** Call fossil_unicode_free() to deallocate any memory used to store the
5261
** returned pointer when done.
5362
*/
5463
char *fossil_unicode_to_utf8(const void *zUnicode){
55
-#ifdef _WIN32
64
+#if defined(_WIN32) || defined(__CYGWIN__)
5665
int nByte = WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, 0, 0, 0, 0);
5766
char *zUtf = sqlite3_malloc( nByte );
5867
if( zUtf==0 ){
5968
return 0;
6069
}
6170
WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, zUtf, nByte, 0, 0);
6271
return zUtf;
6372
#else
64
- return fossil_strdup(zUtf8); /* TODO: implement for unix */
73
+ return fossil_strdup(zUnicode); /* TODO: implement for unix */
6574
#endif
6675
}
6776
6877
/*
6978
** Translate UTF-8 to unicode for use in system calls. Return a pointer to the
7079
** translated text.. Call fossil_unicode_free() to deallocate any memory
7180
** used to store the returned pointer when done.
7281
*/
7382
void *fossil_utf8_to_unicode(const char *zUtf8){
74
-#ifdef _WIN32
83
+#if defined(_WIN32) || defined(__CYGWIN__)
7584
int nByte = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, 0, 0);
7685
wchar_t *zUnicode = sqlite3_malloc( nByte * 2 );
7786
if( zUnicode==0 ){
7887
return 0;
7988
}
@@ -87,17 +96,16 @@
8796
/*
8897
** Deallocate any memory that was previously allocated by
8998
** fossil_unicode_to_utf8().
9099
*/
91100
void fossil_unicode_free(void *pOld){
92
-#ifdef _WIN32
101
+#if defined(_WIN32) || defined(__CYGWIN__)
93102
sqlite3_free(pOld);
94103
#else
95104
fossil_free(pOld);
96105
#endif
97106
}
98
-#endif /* _WIN32 */
99107
100108
#if defined(__APPLE__) && !defined(WITHOUT_ICONV)
101109
# include <iconv.h>
102110
#endif
103111
@@ -118,10 +126,14 @@
118126
if( zUtf==0 ){
119127
return 0;
120128
}
121129
WideCharToMultiByte(CP_UTF8, 0, zFilename, -1, zUtf, nByte, 0, 0);
122130
return zUtf;
131
+#elif defined(__CYGWIN__)
132
+ char *zOut;
133
+ zOut = fossil_strdup(zFilename);
134
+ return zOut;
123135
#elif defined(__APPLE__) && !defined(WITHOUT_ICONV)
124136
char *zIn = (char*)zFilename;
125137
char *zOut;
126138
iconv_t cd;
127139
size_t n, x;
@@ -156,24 +168,52 @@
156168
** Call fossil_filename_free() to deallocate any memory used to store the
157169
** returned pointer when done.
158170
*/
159171
void *fossil_utf8_to_filename(const char *zUtf8){
160172
#ifdef _WIN32
161
- int nByte = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, 0, 0);
162
- wchar_t *zUnicode = sqlite3_malloc( nByte * 2 );
173
+ int nChar = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, 0, 0);
174
+ wchar_t *zUnicode = sqlite3_malloc( nChar * 2 );
163175
wchar_t *wUnicode = zUnicode;
164176
if( zUnicode==0 ){
165177
return 0;
166178
}
167
- MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nByte);
179
+ MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nChar);
168180
while( *wUnicode != '\0' ){
169181
if( *wUnicode == '/' ){
170182
*wUnicode = '\\';
171183
}
172184
++wUnicode;
173185
}
174186
return zUnicode;
187
+#elif defined(__CYGWIN__)
188
+ char *zPath, *p;
189
+ if( fossil_isalpha(zUtf8[0]) && (zUtf8[1]==':')
190
+ && (zUtf8[2]=='\\' || zUtf8[2]=='/')) {
191
+ /* win32 absolute path starting with drive specifier. */
192
+ int nByte;
193
+ wchar_t zUnicode[2000];
194
+ wchar_t *wUnicode = zUnicode;
195
+ MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, count(zUnicode));
196
+ while( *wUnicode != '\0' ){
197
+ if( *wUnicode == '/' ){
198
+ *wUnicode = '\\';
199
+ }
200
+ ++wUnicode;
201
+ }
202
+ nByte = cygwin_conv_path(CCP_WIN_W_TO_POSIX, zUnicode, NULL, 0);
203
+ zPath = fossil_malloc(nByte);
204
+ cygwin_conv_path(CCP_WIN_W_TO_POSIX, zUnicode, zPath, nByte);
205
+ } else {
206
+ zPath = fossil_strdup(zUtf8);
207
+ zUtf8 = p = zPath;
208
+ while( (*p = *zUtf8++) != 0){
209
+ if (*p++ == '\\' ) {
210
+ p[-1] = '/';
211
+ }
212
+ }
213
+ }
214
+ return zPath;
175215
#elif defined(__APPLE__) && !defined(WITHOUT_ICONV)
176216
return fossil_strdup(zUtf8);
177217
#else
178218
return (void *)zUtf8; /* No-op on unix */
179219
#endif
@@ -184,11 +224,11 @@
184224
** fossil_filename_to_utf8() or fossil_utf8_to_filename().
185225
*/
186226
void fossil_filename_free(void *pOld){
187227
#if defined(_WIN32)
188228
sqlite3_free(pOld);
189
-#elif defined(__APPLE__) && !defined(WITHOUT_ICONV)
229
+#elif (defined(__APPLE__) && !defined(WITHOUT_ICONV)) || defined(__CYGWIN__)
190230
fossil_free(pOld);
191231
#else
192232
/* No-op on all other unix */
193233
#endif
194234
}
195235
196236
ADDED test/Greek-Lipsum-1.txt
197237
ADDED test/Greek-Lipsum-2.txt
--- src/utf8.c
+++ src/utf8.c
@@ -23,10 +23,18 @@
23 #include "utf8.h"
24 #include <sqlite3.h>
25 #ifdef _WIN32
26 # include <windows.h>
27 #endif
 
 
 
 
 
 
 
 
28
29 #ifdef _WIN32
30 /*
31 ** Translate MBCS to UTF-8. Return a pointer to the translated text.
32 ** Call fossil_mbcs_free() to deallocate any memory used to store the
@@ -42,38 +50,39 @@
42 ** any memory used to hold the translation
43 */
44 void fossil_mbcs_free(char *zOld){
45 sqlite3_free(zOld);
46 }
 
47
48 /*
49 ** Translate Unicode text into UTF-8.
50 ** Return a pointer to the translated text.
51 ** Call fossil_unicode_free() to deallocate any memory used to store the
52 ** returned pointer when done.
53 */
54 char *fossil_unicode_to_utf8(const void *zUnicode){
55 #ifdef _WIN32
56 int nByte = WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, 0, 0, 0, 0);
57 char *zUtf = sqlite3_malloc( nByte );
58 if( zUtf==0 ){
59 return 0;
60 }
61 WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, zUtf, nByte, 0, 0);
62 return zUtf;
63 #else
64 return fossil_strdup(zUtf8); /* TODO: implement for unix */
65 #endif
66 }
67
68 /*
69 ** Translate UTF-8 to unicode for use in system calls. Return a pointer to the
70 ** translated text.. Call fossil_unicode_free() to deallocate any memory
71 ** used to store the returned pointer when done.
72 */
73 void *fossil_utf8_to_unicode(const char *zUtf8){
74 #ifdef _WIN32
75 int nByte = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, 0, 0);
76 wchar_t *zUnicode = sqlite3_malloc( nByte * 2 );
77 if( zUnicode==0 ){
78 return 0;
79 }
@@ -87,17 +96,16 @@
87 /*
88 ** Deallocate any memory that was previously allocated by
89 ** fossil_unicode_to_utf8().
90 */
91 void fossil_unicode_free(void *pOld){
92 #ifdef _WIN32
93 sqlite3_free(pOld);
94 #else
95 fossil_free(pOld);
96 #endif
97 }
98 #endif /* _WIN32 */
99
100 #if defined(__APPLE__) && !defined(WITHOUT_ICONV)
101 # include <iconv.h>
102 #endif
103
@@ -118,10 +126,14 @@
118 if( zUtf==0 ){
119 return 0;
120 }
121 WideCharToMultiByte(CP_UTF8, 0, zFilename, -1, zUtf, nByte, 0, 0);
122 return zUtf;
 
 
 
 
123 #elif defined(__APPLE__) && !defined(WITHOUT_ICONV)
124 char *zIn = (char*)zFilename;
125 char *zOut;
126 iconv_t cd;
127 size_t n, x;
@@ -156,24 +168,52 @@
156 ** Call fossil_filename_free() to deallocate any memory used to store the
157 ** returned pointer when done.
158 */
159 void *fossil_utf8_to_filename(const char *zUtf8){
160 #ifdef _WIN32
161 int nByte = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, 0, 0);
162 wchar_t *zUnicode = sqlite3_malloc( nByte * 2 );
163 wchar_t *wUnicode = zUnicode;
164 if( zUnicode==0 ){
165 return 0;
166 }
167 MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nByte);
168 while( *wUnicode != '\0' ){
169 if( *wUnicode == '/' ){
170 *wUnicode = '\\';
171 }
172 ++wUnicode;
173 }
174 return zUnicode;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175 #elif defined(__APPLE__) && !defined(WITHOUT_ICONV)
176 return fossil_strdup(zUtf8);
177 #else
178 return (void *)zUtf8; /* No-op on unix */
179 #endif
@@ -184,11 +224,11 @@
184 ** fossil_filename_to_utf8() or fossil_utf8_to_filename().
185 */
186 void fossil_filename_free(void *pOld){
187 #if defined(_WIN32)
188 sqlite3_free(pOld);
189 #elif defined(__APPLE__) && !defined(WITHOUT_ICONV)
190 fossil_free(pOld);
191 #else
192 /* No-op on all other unix */
193 #endif
194 }
195
196 DDED test/Greek-Lipsum-1.txt
197 DDED test/Greek-Lipsum-2.txt
--- src/utf8.c
+++ src/utf8.c
@@ -23,10 +23,18 @@
23 #include "utf8.h"
24 #include <sqlite3.h>
25 #ifdef _WIN32
26 # include <windows.h>
27 #endif
28 #ifdef __CYGWIN__
29 # include <sys/cygwin.h>
30 # define CP_UTF8 65001
31 __declspec(dllimport) extern __stdcall int WideCharToMultiByte(int, int,
32 const char *, int, const char *, int, const char *, const char *);
33 __declspec(dllimport) extern __stdcall int MultiByteToWideChar(int, int,
34 const char *, int, wchar_t*, int);
35 #endif
36
37 #ifdef _WIN32
38 /*
39 ** Translate MBCS to UTF-8. Return a pointer to the translated text.
40 ** Call fossil_mbcs_free() to deallocate any memory used to store the
@@ -42,38 +50,39 @@
50 ** any memory used to hold the translation
51 */
52 void fossil_mbcs_free(char *zOld){
53 sqlite3_free(zOld);
54 }
55 #endif /* _WIN32 */
56
57 /*
58 ** Translate Unicode text into UTF-8.
59 ** Return a pointer to the translated text.
60 ** Call fossil_unicode_free() to deallocate any memory used to store the
61 ** returned pointer when done.
62 */
63 char *fossil_unicode_to_utf8(const void *zUnicode){
64 #if defined(_WIN32) || defined(__CYGWIN__)
65 int nByte = WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, 0, 0, 0, 0);
66 char *zUtf = sqlite3_malloc( nByte );
67 if( zUtf==0 ){
68 return 0;
69 }
70 WideCharToMultiByte(CP_UTF8, 0, zUnicode, -1, zUtf, nByte, 0, 0);
71 return zUtf;
72 #else
73 return fossil_strdup(zUnicode); /* TODO: implement for unix */
74 #endif
75 }
76
77 /*
78 ** Translate UTF-8 to unicode for use in system calls. Return a pointer to the
79 ** translated text.. Call fossil_unicode_free() to deallocate any memory
80 ** used to store the returned pointer when done.
81 */
82 void *fossil_utf8_to_unicode(const char *zUtf8){
83 #if defined(_WIN32) || defined(__CYGWIN__)
84 int nByte = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, 0, 0);
85 wchar_t *zUnicode = sqlite3_malloc( nByte * 2 );
86 if( zUnicode==0 ){
87 return 0;
88 }
@@ -87,17 +96,16 @@
96 /*
97 ** Deallocate any memory that was previously allocated by
98 ** fossil_unicode_to_utf8().
99 */
100 void fossil_unicode_free(void *pOld){
101 #if defined(_WIN32) || defined(__CYGWIN__)
102 sqlite3_free(pOld);
103 #else
104 fossil_free(pOld);
105 #endif
106 }
 
107
108 #if defined(__APPLE__) && !defined(WITHOUT_ICONV)
109 # include <iconv.h>
110 #endif
111
@@ -118,10 +126,14 @@
126 if( zUtf==0 ){
127 return 0;
128 }
129 WideCharToMultiByte(CP_UTF8, 0, zFilename, -1, zUtf, nByte, 0, 0);
130 return zUtf;
131 #elif defined(__CYGWIN__)
132 char *zOut;
133 zOut = fossil_strdup(zFilename);
134 return zOut;
135 #elif defined(__APPLE__) && !defined(WITHOUT_ICONV)
136 char *zIn = (char*)zFilename;
137 char *zOut;
138 iconv_t cd;
139 size_t n, x;
@@ -156,24 +168,52 @@
168 ** Call fossil_filename_free() to deallocate any memory used to store the
169 ** returned pointer when done.
170 */
171 void *fossil_utf8_to_filename(const char *zUtf8){
172 #ifdef _WIN32
173 int nChar = MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, 0, 0);
174 wchar_t *zUnicode = sqlite3_malloc( nChar * 2 );
175 wchar_t *wUnicode = zUnicode;
176 if( zUnicode==0 ){
177 return 0;
178 }
179 MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, nChar);
180 while( *wUnicode != '\0' ){
181 if( *wUnicode == '/' ){
182 *wUnicode = '\\';
183 }
184 ++wUnicode;
185 }
186 return zUnicode;
187 #elif defined(__CYGWIN__)
188 char *zPath, *p;
189 if( fossil_isalpha(zUtf8[0]) && (zUtf8[1]==':')
190 && (zUtf8[2]=='\\' || zUtf8[2]=='/')) {
191 /* win32 absolute path starting with drive specifier. */
192 int nByte;
193 wchar_t zUnicode[2000];
194 wchar_t *wUnicode = zUnicode;
195 MultiByteToWideChar(CP_UTF8, 0, zUtf8, -1, zUnicode, count(zUnicode));
196 while( *wUnicode != '\0' ){
197 if( *wUnicode == '/' ){
198 *wUnicode = '\\';
199 }
200 ++wUnicode;
201 }
202 nByte = cygwin_conv_path(CCP_WIN_W_TO_POSIX, zUnicode, NULL, 0);
203 zPath = fossil_malloc(nByte);
204 cygwin_conv_path(CCP_WIN_W_TO_POSIX, zUnicode, zPath, nByte);
205 } else {
206 zPath = fossil_strdup(zUtf8);
207 zUtf8 = p = zPath;
208 while( (*p = *zUtf8++) != 0){
209 if (*p++ == '\\' ) {
210 p[-1] = '/';
211 }
212 }
213 }
214 return zPath;
215 #elif defined(__APPLE__) && !defined(WITHOUT_ICONV)
216 return fossil_strdup(zUtf8);
217 #else
218 return (void *)zUtf8; /* No-op on unix */
219 #endif
@@ -184,11 +224,11 @@
224 ** fossil_filename_to_utf8() or fossil_utf8_to_filename().
225 */
226 void fossil_filename_free(void *pOld){
227 #if defined(_WIN32)
228 sqlite3_free(pOld);
229 #elif (defined(__APPLE__) && !defined(WITHOUT_ICONV)) || defined(__CYGWIN__)
230 fossil_free(pOld);
231 #else
232 /* No-op on all other unix */
233 #endif
234 }
235
236 DDED test/Greek-Lipsum-1.txt
237 DDED test/Greek-Lipsum-2.txt
--- a/test/Greek-Lipsum-1.txt
+++ b/test/Greek-Lipsum-1.txt
@@ -0,0 +1,77 @@
1
+Κυο εξ υνυμ δισπυθανδο, ερος αλιενυμ κυι θε. Νες εξ ελωκυενθιαμ
2
+ινστρυσθιορ. Θεμπορ νοσθερ συ εως. Πυρθο μωφεθ μωδερατιυς ατ μελ. Συ δυο
3
+αμετ ειυς. Πρι δεσωρε ινθεγρε ασυμσαν αδ, πρω αν ρεβυμ εφφισιανθυρ
4
+νεσεσιταθιβυς.
5
+
6
+Νοσθρυμ συσιπιαντυρ ηας ει, ορναθυς ρεσυσαβο πρι ιδ, περ νολυισε οπωρθερε
7
+ιδ. Θε παρτιενδω περτινασια ινσωρρυπτε φις. Δισθας φαβυλας γυβεργρεν εως
8
+ιν, αλιι σολυμ ηις θε, ποσθυλανθ ασυσαμυς ετ ηας. Νο ινανι φαβυλας
9
+θχεωπηραστυς ναμ, ευμ διστα ηομερω εα. Μαγνα φυγιθ υθ περ, εσθ ατ νοσθρυμ
10
+δεσερυισε.
11
+
12
+Φις αυδιαμ λαβορες παθριοκυε εξ, ετ φευγιαθ δεφινιεβας σιθ. Αμετ εριπυιτ
13
+δελισατα υσυ ετ, σενσιβυς φολυπθατιβυς περ εξ. Κυωδ ιγνωθα τιβικυε ατ εαμ,
14
+νυλλα ηωνεσθαθις υθ νες. Φιξ αν μυτατ εξερσι λαβωρε. Σεδ νονυμυ κυοδσι
15
+δελενιτ νε, συμο φιδε εα κυι. Ποπυλω μαιορυμ περσεκυερις αν πρω.
16
+
17
+Σολυμ σωνφενιρε αδ ηας, αν ευμ σολυτα ρεγιονε προδεσεθ. Φερο λαβορες
18
+σαλυταθυς θε δυο, ηις νε φερο βλανδιτ πραεσενθ, ιδ φις σολεατ φιφενδυμ. Συ
19
+συμ μωδω συμμο δολορες. Θε ναμ πωσιθ φευγιαθ τινσιδυνθ.
20
+
21
+Υθ ιψυμ νεμωρε σαπιενθεμ μεα, ει εφερτι εφφισιενδι ηας. Ευμ αλβυσιυς
22
+πραεσενθ συ, δεσωρε σεθερο ινδοστυμ μει ει. Ηις υθ συμμο μαλορυμ μανδαμυς,
23
+κυι ιν συαφιθαθε περισυλις, ιισκυε οφφισιις κυο νο. Νε νονυμυ ηαβεμυς
24
+πχιλωσοπηια φις. Ετ ηας υταμυρ ρεφορμιδανς. Ινερμις δεθραξιθ νεγλεγενθυρ
25
+δυο υθ, τωρκυαθος δισεντιυνθ φιθυπερατοριβυς φιξ νε. Εα σεδ συας μελιυς,
26
+φιμ προβο ινδοστυμ ρεπριμικυε ευ.
27
+
28
+Πρι ιν λυδυς αυδιρε, συμμο περτινασια σωνσεθεθυρ φις ιν, σιθ εξ επισυρι
29
+μαλυισετ σωνσεπθαμ. Αν δετρασθο ελειφενδ εξπλισαρι πρω. Ιυδισο σομμοδο συμ
30
+αδ. Δισαμ δισυντ φυλπυτατε ιν πρω, εξ ηις δελενιτ μαιεσθατις. Ρεβυμ νονυμυ
31
+αππαρεατ σιθ εα, σιθ ιδ νυλλα σολεατ πεθενθιυμ, ει οπθιων περσεκυερις ευμ.
32
+Υθ νισλ ινσωλενς φιξ, εσθ φερι ιισκυε αργυμενθυμ συ, σεθερο μολεστιε
33
+αδιπισινγ ευ μεα.
34
+
35
+Ετ μεα μυσιυς λατινε, μει σεμπερ δεσερυντ περτινασια αν. Συ φενιαμ ποπυλω
36
+αθωμωρυμ κυο. Νο ιυς ρεβυμ φιθυπεραθα δισπυτατιονι, ατ αλθερυμ χενδρεριτ
37
+φιθυπεραθα συμ. Ευμ αυτεμ αππετερε αδιπισινγ ετ, νο κυο συας ελειφενδ. Εαμ
38
+θαλε δισαμ εξ.
39
+
40
+Ετ σομμοδο λεγενδως φελ, διαμ φωλυπθαρια νο μελ, δυο φελιτ νεμωρε αδ. Αν
41
+εξπετενδα συαφιθαθε φελ, ενιμ ασυμσαν περ αδ, εα φιμ μωδω υνυμ. Εα κυωδ
42
+προβο περσεσυτι φελ, ευ φερι πρωπριαε ινσιδεριντ νες. Εξ νες οδιο δελενιτ,
43
+ελιτ ιυδισο ινθεγρε δυο ιδ. Μελ αλικυιπ περισυλις ετ, ατ ηας αυγυε λαβορες
44
+ασεντιορ.
45
+
46
+Συ νυλλα δωσενδι δεφινιτιωνες φελ. Δωλορε δισερετ ρεφορμιδανς αδ πρω.
47
+Εφερτι πρωβατυς υρβανιθας νο μελ. Ιν φιξ φασεθε δεθραξιθ ομιθταντυρ, ζριλ
48
+υτιναμ παθριοκυε συ νες. Κυο ει δισενθιετ ασομμοδαρε.
49
+
50
+Ηας θε ομνεσκυε δελισαθισιμι. Εξερσι δελισατα ινιμισυς ευμ ευ, ιδ ελιτρ
51
+μελιορε αβχορρεανθ εσθ, εως οπθιων προδεσεθ σονσεσθεθυερ ιν. Ναμ διαμ ασυμ
52
+τεμποριβυς αν. Σομμυνε δεφινιθιονεμ κυο ιν, ηας νωμιναφι φιφενδυμ ατ.
53
+Ομνεσκυε δεφινιεβας μεα θε.
54
+
55
+Εαμ σανστυς αλβυσιυς ευ, φελ στετ επισυρι ιν, κυο αδ περτιναξ σενσεριτ
56
+τωρκυαθος. Λαβωρε νυσκυαμ ιν κυι, ερος σαεπε τιβικυε εσθ ατ. Φερο υτιναμ
57
+φελ νε, αδ απεριρι ομιθταντυρ δεφινιτιωνες δυο. Ινφενιρε ελειφενδ παθριοκυε
58
+εξ ναμ. Ιδ ναμ μινιμ υθροκυε. Αδ ναθυμ αππετερε σεα.
59
+
60
+Μολλις φολυμυς κυι νο, θε φιμ υβικυε αδιπισι διγνισιμ. Νοβις νοσθρω
61
+μενανδρι υσυ νο, πριμα ελιτρ κυαεκυε ιδ ηας. Πρω εα παρτεμ δομινγ. Θε
62
+φασεθε αυδιρε φολυπθατιβυς ιυς. Φις δεθραξιθ ινφενιρε ετ, αν ιυς πωσθεα
63
+μεδιοσριθαθεμ.
64
+
65
+Εα αδχυς υταμυρ φις. Σιβω λαυδεμ υσυ αδ, φις λεγιμυς πλασεραθ φερθερεμ συ.
66
+Φιμ ατ ειυς αλθερυμ φιθυπερατοριβυς, ατ λατινε ηαβεμυς φολυτπατ μεα. Γραεσω
67
+λυσιλιυς εα φελ.
68
+
69
+Θε φιξ βρυτε συμμο, φελ ωμιτθαμ ιμπερδιετ εξ. Μεα ιν μωδω νυμκυαμ, σεα
70
+τρασθατος εξπετενδα αδ. Γραεσε πλαθονεμ ρεπυδιανδαε φιξ εα, εα ετιαμ
71
+σωνσθιτυθο ασυεφεριθ σιθ. Ατ πυρθο ναθυμ σονγυε φιξ, κυι ετ δισαμ ινερμις
72
+ινιμισυς.
73
+
74
+Περ υθ διστα ινθεγρε, περ ρεκυε φιερενθ αδ. Νε δεσερυντ ινφενιρε σωνσεθεθυρ
75
+μει, αν ηομερω αργυμενθυμ ρεπυδιανδαε περ, ηις σωνσυλ μελιορε ινθελλεγαμ
76
+υθ. Νες εα λαβιθυρ δολορεμ υλλαμσορπερ. Μει εσεντ νεσεσιταθιβυς ιν, αφφερθ
77
+σαυσαε ινθερεσετ ηας αν.
--- a/test/Greek-Lipsum-1.txt
+++ b/test/Greek-Lipsum-1.txt
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/test/Greek-Lipsum-1.txt
+++ b/test/Greek-Lipsum-1.txt
@@ -0,0 +1,77 @@
1 Κυο εξ υνυμ δισπυθανδο, ερος αλιενυμ κυι θε. Νες εξ ελωκυενθιαμ
2 ινστρυσθιορ. Θεμπορ νοσθερ συ εως. Πυρθο μωφεθ μωδερατιυς ατ μελ. Συ δυο
3 αμετ ειυς. Πρι δεσωρε ινθεγρε ασυμσαν αδ, πρω αν ρεβυμ εφφισιανθυρ
4 νεσεσιταθιβυς.
5
6 Νοσθρυμ συσιπιαντυρ ηας ει, ορναθυς ρεσυσαβο πρι ιδ, περ νολυισε οπωρθερε
7 ιδ. Θε παρτιενδω περτινασια ινσωρρυπτε φις. Δισθας φαβυλας γυβεργρεν εως
8 ιν, αλιι σολυμ ηις θε, ποσθυλανθ ασυσαμυς ετ ηας. Νο ινανι φαβυλας
9 θχεωπηραστυς ναμ, ευμ διστα ηομερω εα. Μαγνα φυγιθ υθ περ, εσθ ατ νοσθρυμ
10 δεσερυισε.
11
12 Φις αυδιαμ λαβορες παθριοκυε εξ, ετ φευγιαθ δεφινιεβας σιθ. Αμετ εριπυιτ
13 δελισατα υσυ ετ, σενσιβυς φολυπθατιβυς περ εξ. Κυωδ ιγνωθα τιβικυε ατ εαμ,
14 νυλλα ηωνεσθαθις υθ νες. Φιξ αν μυτατ εξερσι λαβωρε. Σεδ νονυμυ κυοδσι
15 δελενιτ νε, συμο φιδε εα κυι. Ποπυλω μαιορυμ περσεκυερις αν πρω.
16
17 Σολυμ σωνφενιρε αδ ηας, αν ευμ σολυτα ρεγιονε προδεσεθ. Φερο λαβορες
18 σαλυταθυς θε δυο, ηις νε φερο βλανδιτ πραεσενθ, ιδ φις σολεατ φιφενδυμ. Συ
19 συμ μωδω συμμο δολορες. Θε ναμ πωσιθ φευγιαθ τινσιδυνθ.
20
21 Υθ ιψυμ νεμωρε σαπιενθεμ μεα, ει εφερτι εφφισιενδι ηας. Ευμ αλβυσιυς
22 πραεσενθ συ, δεσωρε σεθερο ινδοστυμ μει ει. Ηις υθ συμμο μαλορυμ μανδαμυς,
23 κυι ιν συαφιθαθε περισυλις, ιισκυε οφφισιις κυο νο. Νε νονυμυ ηαβεμυς
24 πχιλωσοπηια φις. Ετ ηας υταμυρ ρεφορμιδανς. Ινερμις δεθραξιθ νεγλεγενθυρ
25 δυο υθ, τωρκυαθος δισεντιυνθ φιθυπερατοριβυς φιξ νε. Εα σεδ συας μελιυς,
26 φιμ προβο ινδοστυμ ρεπριμικυε ευ.
27
28 Πρι ιν λυδυς αυδιρε, συμμο περτινασια σωνσεθεθυρ φις ιν, σιθ εξ επισυρι
29 μαλυισετ σωνσεπθαμ. Αν δετρασθο ελειφενδ εξπλισαρι πρω. Ιυδισο σομμοδο συμ
30 αδ. Δισαμ δισυντ φυλπυτατε ιν πρω, εξ ηις δελενιτ μαιεσθατις. Ρεβυμ νονυμυ
31 αππαρεατ σιθ εα, σιθ ιδ νυλλα σολεατ πεθενθιυμ, ει οπθιων περσεκυερις ευμ.
32 Υθ νισλ ινσωλενς φιξ, εσθ φερι ιισκυε αργυμενθυμ συ, σεθερο μολεστιε
33 αδιπισινγ ευ μεα.
34
35 Ετ μεα μυσιυς λατινε, μει σεμπερ δεσερυντ περτινασια αν. Συ φενιαμ ποπυλω
36 αθωμωρυμ κυο. Νο ιυς ρεβυμ φιθυπεραθα δισπυτατιονι, ατ αλθερυμ χενδρεριτ
37 φιθυπεραθα συμ. Ευμ αυτεμ αππετερε αδιπισινγ ετ, νο κυο συας ελειφενδ. Εαμ
38 θαλε δισαμ εξ.
39
40 Ετ σομμοδο λεγενδως φελ, διαμ φωλυπθαρια νο μελ, δυο φελιτ νεμωρε αδ. Αν
41 εξπετενδα συαφιθαθε φελ, ενιμ ασυμσαν περ αδ, εα φιμ μωδω υνυμ. Εα κυωδ
42 προβο περσεσυτι φελ, ευ φερι πρωπριαε ινσιδεριντ νες. Εξ νες οδιο δελενιτ,
43 ελιτ ιυδισο ινθεγρε δυο ιδ. Μελ αλικυιπ περισυλις ετ, ατ ηας αυγυε λαβορες
44 ασεντιορ.
45
46 Συ νυλλα δωσενδι δεφινιτιωνες φελ. Δωλορε δισερετ ρεφορμιδανς αδ πρω.
47 Εφερτι πρωβατυς υρβανιθας νο μελ. Ιν φιξ φασεθε δεθραξιθ ομιθταντυρ, ζριλ
48 υτιναμ παθριοκυε συ νες. Κυο ει δισενθιετ ασομμοδαρε.
49
50 Ηας θε ομνεσκυε δελισαθισιμι. Εξερσι δελισατα ινιμισυς ευμ ευ, ιδ ελιτρ
51 μελιορε αβχορρεανθ εσθ, εως οπθιων προδεσεθ σονσεσθεθυερ ιν. Ναμ διαμ ασυμ
52 τεμποριβυς αν. Σομμυνε δεφινιθιονεμ κυο ιν, ηας νωμιναφι φιφενδυμ ατ.
53 Ομνεσκυε δεφινιεβας μεα θε.
54
55 Εαμ σανστυς αλβυσιυς ευ, φελ στετ επισυρι ιν, κυο αδ περτιναξ σενσεριτ
56 τωρκυαθος. Λαβωρε νυσκυαμ ιν κυι, ερος σαεπε τιβικυε εσθ ατ. Φερο υτιναμ
57 φελ νε, αδ απεριρι ομιθταντυρ δεφινιτιωνες δυο. Ινφενιρε ελειφενδ παθριοκυε
58 εξ ναμ. Ιδ ναμ μινιμ υθροκυε. Αδ ναθυμ αππετερε σεα.
59
60 Μολλις φολυμυς κυι νο, θε φιμ υβικυε αδιπισι διγνισιμ. Νοβις νοσθρω
61 μενανδρι υσυ νο, πριμα ελιτρ κυαεκυε ιδ ηας. Πρω εα παρτεμ δομινγ. Θε
62 φασεθε αυδιρε φολυπθατιβυς ιυς. Φις δεθραξιθ ινφενιρε ετ, αν ιυς πωσθεα
63 μεδιοσριθαθεμ.
64
65 Εα αδχυς υταμυρ φις. Σιβω λαυδεμ υσυ αδ, φις λεγιμυς πλασεραθ φερθερεμ συ.
66 Φιμ ατ ειυς αλθερυμ φιθυπερατοριβυς, ατ λατινε ηαβεμυς φολυτπατ μεα. Γραεσω
67 λυσιλιυς εα φελ.
68
69 Θε φιξ βρυτε συμμο, φελ ωμιτθαμ ιμπερδιετ εξ. Μεα ιν μωδω νυμκυαμ, σεα
70 τρασθατος εξπετενδα αδ. Γραεσε πλαθονεμ ρεπυδιανδαε φιξ εα, εα ετιαμ
71 σωνσθιτυθο ασυεφεριθ σιθ. Ατ πυρθο ναθυμ σονγυε φιξ, κυι ετ δισαμ ινερμις
72 ινιμισυς.
73
74 Περ υθ διστα ινθεγρε, περ ρεκυε φιερενθ αδ. Νε δεσερυντ ινφενιρε σωνσεθεθυρ
75 μει, αν ηομερω αργυμενθυμ ρεπυδιανδαε περ, ηις σωνσυλ μελιορε ινθελλεγαμ
76 υθ. Νες εα λαβιθυρ δολορεμ υλλαμσορπερ. Μει εσεντ νεσεσιταθιβυς ιν, αφφερθ
77 σαυσαε ινθερεσετ ηας αν.
--- a/test/Greek-Lipsum-2.txt
+++ b/test/Greek-Lipsum-2.txt
@@ -0,0 +1,77 @@
1
+Κυο εξ υνυμ δισπυθανδο, ερος αλιενυμ κυι θε. Νες εξ ελωκυενθιαμ
2
+ινστρυσθιορ. Θεμπορ νοσθερ συ εως. Πυρθο μωφεθ μωδερατιυς ατ μελ. Συ δυο
3
+αμετ ειυς. Πρι δεσωρε ινθεγρε ασυμσαν αδ, Φιξ αν ρεβυμ εφφισιανθυρ
4
+νεσεσιταθιβυς.
5
+
6
+Νοσθρυμ συσιπιαντυρ ηας ει, ορναθυς ρεσυσαβο πρι ιδ, περ νολυισε
7
+οπωρθερε ιδ. Θε παρτιενδω περτινασια ινσωρρυπτε φις. Δισθας φαβυλας
8
+γυβεργρεν εως ιν, αλιι σολυμ ηις θε, ποσθυλανθ ασυσαμυς ετ ηας. Νο ινανι
9
+φαβυλας θχεωπηραστυς ναμ, ευμ διστα ηομερω εα. Μαγνα φυγιθ υθ περ, εσθ
10
+ατ νοσθρυμ δεσερυισε.
11
+
12
+Φις αυδιαμ λαβορες παθριοκυε εξ, ετ φευγιαθ δεφινιεβας σιθ. Αμετ εριπυιτ
13
+δελισατα υσυ ετ, σενσιβυς φολυπθατιβυς περ εξ. Κυωδ ιγνωθα τιβικυε ατ
14
+εαμ, νυλλα ηωνεσθαθις υθ νες. Φιξ αν μυτατ εξερσι λαβωρε. Σεδ νονυμυ
15
+κυοδσι δελενιτ νε, συμο φιδε εα κυι. Ποπυλω μαιορυμ περσεκυερις αν πρω.
16
+
17
+Σολυμ σωνφενιρε αδ ηας, αν ευμ σολυτα ρεγιονε προδεσεθ. Φερο λαβορες
18
+σαλυταθυς θε δυο, ηις νε φερο βλανδιτ πραεσενθ, ιδ φις σολεατ φιφενδυμ.
19
+Συ συμ μωδω συμμο δολορες. Θε ναμ πωσιθ φευγιαθ τινσιδυνθ.
20
+
21
+Υθ ιψυμ νεμωρε σαπιενθεμ μεα, ει εφερτι εφφισιενδι ηας. Ευμ αλβυσιυς
22
+πραεσενθ συ, δεσωρε σεθερο ινδοστυμ μει ει. Ηις υθ συμμο μαλορυμ
23
+μανδαμυς, κυι ιν συαφιθαθε περισυλις, ιισκυε οφφισιις κυο νο. Νε νονυμυ
24
+ηαβεμυς πχιλωσοπηια φις. Ετ ηας υταμυρ ρεφορμιδανς. Ινερμις δεθραξιθ
25
+νεγλεγενθυρ δυο υθ, τωρκυαθος δισεντιυνθ φιθυπερατοριβυς φιξ νε. Εα σεδ
26
+συας μελιυς, φιμ προβο ινδοστυμ ρεπριμικυε ευ.
27
+
28
+Πρι ιν λυδυς αυδιρε, συμμο περτινασια σωνσεθεθυρ φις ιν, σιθ εξ επισυρι
29
+μαλυισετ σωνσεπθαμ. Αν δετρασθο ελειφενδ εξπλισαρι πρω. Ιυδισο σομμοδο
30
+συμ αδ. Δισαμ δισυντ φυλπυτατε ιν πρω, εξ ηις δελενιτ μαιεσθατις. Ρεβυμ
31
+νονυμυ αππαρεατ σιθ εα, σιθ ιδ νυλλα σολεατ πεθενθιυμ, ει οπθιων
32
+περσεκυερις ευμ. Υθ νισλ ινσωλενς φιξ, εσθ φερι ιισκυε αργυμενθυμ συ,
33
+σεθερο μολεστιε αδιπισινγ ευ μεα.
34
+
35
+Ετ μεα μυσιυς λατινε, μει σεμπερ δεσερυντ περτινασια αν. Συ φενιαμ
36
+ποπυλω αθωμωρυμ κυο. Νο ιυς ρεβυμ φιθυπεραθα δισπυτατιονι, ατ αλθερυμ
37
+χενδρεριτ φιθυπεραθα συμ. Ευμ αυτεμ αππετερε αδιπισινγ ετ, νο κυο συας
38
+ελειφενδ. Εαμ θαλε δισαμ εξ.
39
+
40
+Ετ σομμοδο λεγενδως φελ, διαμ φωλυπθαρια νο μελ, δυο φελιτ νεμωρε αδ. Αν
41
+εξπετενδα συαφιθαθε φελ, ενιμ ασυμσαν περ αδ, εα φιμ μωδω υνυμ. Εα κυωδ
42
+προβο περσεσυτι φελ, ευ φερι πρωπριαε ινσιδεριντ νες. Εξ νες οδιο
43
+δελενιτ, ελιτ ιυδισο ινθεγρε δυο ιδ. Μελ αλικυιπ περισυλις ετ, ατ ηας
44
+αυγυε λαβορες ασεντιορ.
45
+
46
+Συ νυλλα δωσενδι δεφινιτιωνες φελ. Δωλορε δισερετ ρεφορμιδανς αδ πρω.
47
+Εφερτι πρωβατυς υρβανιθας νο μελ. Ιν φιξ φασεθε δεθραξιθ ομιθταντυρ,
48
+ζριλ υτιναμ παθριοκυε συ νες. Κυο ει δισενθιετ ασομμοδαρε.
49
+
50
+Ηας θε ομνεσκυε δελισαθισιμι. Εξερσι δελισατα ινιμισυς ευμ ευ, ιδ ελιτρ
51
+μελιορε αβχορρεανθ εσθ, εως οπθιων προδεσεθ σονσεσθεθυερ ιν. Ναμ διαμ
52
+ασυμ τεμποριβυς αν. Σομμυνε δεφινιθιονεμ κυο ιν, ηας νωμιναφι φιφενδυμ
53
+ατ. Ομνεσκυε δεφινιεβας μεα θε.
54
+
55
+Εαμ σανστυς αλβυσιυς ευ, φελ στετ επισυρι ιν, κυο αδ περτιναξ σενσεριτ
56
+τωρκυαθος. Λαβωρε νυσκυαμ ιν κυι, ερος σαεπε τιβικυε εσθ ατ. Φερο υτιναμ
57
+φελ νε, αδ απεριρι ομιθταντυρ δεφινιτιωνες δυο. Ινφενιρε ελειφενδ
58
+παθριοκυε εξ ναμ. Ιδ ναμ μινιμ υθροκυε. Αδ ναθυμ αππετερε σεα.
59
+
60
+Μολλις φολυμυς κυι νο, θε φιμ υβικυε αδιπισι διγνισιμ. Νοβις νοσθρω
61
+μενανδρι υσυ νο, πριμα ελιτρ κυαεκυε ιδ ηας. Πρω εα παρτεμ δομινγ. Θε
62
+φασεθε αυδιρε φολυπθατιβυς ιυς. Φις δεθραξιθ ινφενιρε ετ, αν ιυς πωσθεα
63
+μεδιοσριθαθεμ.
64
+
65
+Εα αδχυς υταμυρ φις. Σιβω λαυδεμ υσυ αδ, φις λεγιμυς πλασεραθ φερθερεμ
66
+συ. Φιμ ατ ειυς αλθερυμ φιθυπερατοριβυς, ατ λατινε ηαβεμυς φολυτπατ
67
+μεα. Γραεσω λυσιλιυς εα φελ.
68
+
69
+Θε φιξ βρυτε συμμο, φελ ωμιτθαμ ιμπερδιετ εξ. Μεα ιν μωδω νυμκυαμ, σεα
70
+τρασθατος εξπετενδα αδ. Γραεσε πλαθονεμ ρεπυδιανδαε φιξ εα, εα ετιαμ
71
+σωνσθιτυθο ασυεφεριθ σιθ. Ατ πυρθο ναθυμ σονγυε φιξ, κυι ετ δισαμ
72
+ινερμις ινιμισυς.
73
+
74
+Περ υθ διστα ινθεγρε, περ ρεκυε φιερενθ αδ. Νε δεσερυντ ινφενιρε
75
+σωνσεθεθυρ μει, αν ηομερω αργυμενθυμ ρεπυδιανδαε περ, ηις σωνσυλ μελιορε
76
+ινθελλεγαμ υθ. Νες εα λαβιθυρ δολορεμ υλλαμσορπερ. Μει εσεντ
77
+νεσεσιταθιβυς ιν, αφφερθ σαυσαε ινθερεσετ ηας αν.
--- a/test/Greek-Lipsum-2.txt
+++ b/test/Greek-Lipsum-2.txt
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/test/Greek-Lipsum-2.txt
+++ b/test/Greek-Lipsum-2.txt
@@ -0,0 +1,77 @@
1 Κυο εξ υνυμ δισπυθανδο, ερος αλιενυμ κυι θε. Νες εξ ελωκυενθιαμ
2 ινστρυσθιορ. Θεμπορ νοσθερ συ εως. Πυρθο μωφεθ μωδερατιυς ατ μελ. Συ δυο
3 αμετ ειυς. Πρι δεσωρε ινθεγρε ασυμσαν αδ, Φιξ αν ρεβυμ εφφισιανθυρ
4 νεσεσιταθιβυς.
5
6 Νοσθρυμ συσιπιαντυρ ηας ει, ορναθυς ρεσυσαβο πρι ιδ, περ νολυισε
7 οπωρθερε ιδ. Θε παρτιενδω περτινασια ινσωρρυπτε φις. Δισθας φαβυλας
8 γυβεργρεν εως ιν, αλιι σολυμ ηις θε, ποσθυλανθ ασυσαμυς ετ ηας. Νο ινανι
9 φαβυλας θχεωπηραστυς ναμ, ευμ διστα ηομερω εα. Μαγνα φυγιθ υθ περ, εσθ
10 ατ νοσθρυμ δεσερυισε.
11
12 Φις αυδιαμ λαβορες παθριοκυε εξ, ετ φευγιαθ δεφινιεβας σιθ. Αμετ εριπυιτ
13 δελισατα υσυ ετ, σενσιβυς φολυπθατιβυς περ εξ. Κυωδ ιγνωθα τιβικυε ατ
14 εαμ, νυλλα ηωνεσθαθις υθ νες. Φιξ αν μυτατ εξερσι λαβωρε. Σεδ νονυμυ
15 κυοδσι δελενιτ νε, συμο φιδε εα κυι. Ποπυλω μαιορυμ περσεκυερις αν πρω.
16
17 Σολυμ σωνφενιρε αδ ηας, αν ευμ σολυτα ρεγιονε προδεσεθ. Φερο λαβορες
18 σαλυταθυς θε δυο, ηις νε φερο βλανδιτ πραεσενθ, ιδ φις σολεατ φιφενδυμ.
19 Συ συμ μωδω συμμο δολορες. Θε ναμ πωσιθ φευγιαθ τινσιδυνθ.
20
21 Υθ ιψυμ νεμωρε σαπιενθεμ μεα, ει εφερτι εφφισιενδι ηας. Ευμ αλβυσιυς
22 πραεσενθ συ, δεσωρε σεθερο ινδοστυμ μει ει. Ηις υθ συμμο μαλορυμ
23 μανδαμυς, κυι ιν συαφιθαθε περισυλις, ιισκυε οφφισιις κυο νο. Νε νονυμυ
24 ηαβεμυς πχιλωσοπηια φις. Ετ ηας υταμυρ ρεφορμιδανς. Ινερμις δεθραξιθ
25 νεγλεγενθυρ δυο υθ, τωρκυαθος δισεντιυνθ φιθυπερατοριβυς φιξ νε. Εα σεδ
26 συας μελιυς, φιμ προβο ινδοστυμ ρεπριμικυε ευ.
27
28 Πρι ιν λυδυς αυδιρε, συμμο περτινασια σωνσεθεθυρ φις ιν, σιθ εξ επισυρι
29 μαλυισετ σωνσεπθαμ. Αν δετρασθο ελειφενδ εξπλισαρι πρω. Ιυδισο σομμοδο
30 συμ αδ. Δισαμ δισυντ φυλπυτατε ιν πρω, εξ ηις δελενιτ μαιεσθατις. Ρεβυμ
31 νονυμυ αππαρεατ σιθ εα, σιθ ιδ νυλλα σολεατ πεθενθιυμ, ει οπθιων
32 περσεκυερις ευμ. Υθ νισλ ινσωλενς φιξ, εσθ φερι ιισκυε αργυμενθυμ συ,
33 σεθερο μολεστιε αδιπισινγ ευ μεα.
34
35 Ετ μεα μυσιυς λατινε, μει σεμπερ δεσερυντ περτινασια αν. Συ φενιαμ
36 ποπυλω αθωμωρυμ κυο. Νο ιυς ρεβυμ φιθυπεραθα δισπυτατιονι, ατ αλθερυμ
37 χενδρεριτ φιθυπεραθα συμ. Ευμ αυτεμ αππετερε αδιπισινγ ετ, νο κυο συας
38 ελειφενδ. Εαμ θαλε δισαμ εξ.
39
40 Ετ σομμοδο λεγενδως φελ, διαμ φωλυπθαρια νο μελ, δυο φελιτ νεμωρε αδ. Αν
41 εξπετενδα συαφιθαθε φελ, ενιμ ασυμσαν περ αδ, εα φιμ μωδω υνυμ. Εα κυωδ
42 προβο περσεσυτι φελ, ευ φερι πρωπριαε ινσιδεριντ νες. Εξ νες οδιο
43 δελενιτ, ελιτ ιυδισο ινθεγρε δυο ιδ. Μελ αλικυιπ περισυλις ετ, ατ ηας
44 αυγυε λαβορες ασεντιορ.
45
46 Συ νυλλα δωσενδι δεφινιτιωνες φελ. Δωλορε δισερετ ρεφορμιδανς αδ πρω.
47 Εφερτι πρωβατυς υρβανιθας νο μελ. Ιν φιξ φασεθε δεθραξιθ ομιθταντυρ,
48 ζριλ υτιναμ παθριοκυε συ νες. Κυο ει δισενθιετ ασομμοδαρε.
49
50 Ηας θε ομνεσκυε δελισαθισιμι. Εξερσι δελισατα ινιμισυς ευμ ευ, ιδ ελιτρ
51 μελιορε αβχορρεανθ εσθ, εως οπθιων προδεσεθ σονσεσθεθυερ ιν. Ναμ διαμ
52 ασυμ τεμποριβυς αν. Σομμυνε δεφινιθιονεμ κυο ιν, ηας νωμιναφι φιφενδυμ
53 ατ. Ομνεσκυε δεφινιεβας μεα θε.
54
55 Εαμ σανστυς αλβυσιυς ευ, φελ στετ επισυρι ιν, κυο αδ περτιναξ σενσεριτ
56 τωρκυαθος. Λαβωρε νυσκυαμ ιν κυι, ερος σαεπε τιβικυε εσθ ατ. Φερο υτιναμ
57 φελ νε, αδ απεριρι ομιθταντυρ δεφινιτιωνες δυο. Ινφενιρε ελειφενδ
58 παθριοκυε εξ ναμ. Ιδ ναμ μινιμ υθροκυε. Αδ ναθυμ αππετερε σεα.
59
60 Μολλις φολυμυς κυι νο, θε φιμ υβικυε αδιπισι διγνισιμ. Νοβις νοσθρω
61 μενανδρι υσυ νο, πριμα ελιτρ κυαεκυε ιδ ηας. Πρω εα παρτεμ δομινγ. Θε
62 φασεθε αυδιρε φολυπθατιβυς ιυς. Φις δεθραξιθ ινφενιρε ετ, αν ιυς πωσθεα
63 μεδιοσριθαθεμ.
64
65 Εα αδχυς υταμυρ φις. Σιβω λαυδεμ υσυ αδ, φις λεγιμυς πλασεραθ φερθερεμ
66 συ. Φιμ ατ ειυς αλθερυμ φιθυπερατοριβυς, ατ λατινε ηαβεμυς φολυτπατ
67 μεα. Γραεσω λυσιλιυς εα φελ.
68
69 Θε φιξ βρυτε συμμο, φελ ωμιτθαμ ιμπερδιετ εξ. Μεα ιν μωδω νυμκυαμ, σεα
70 τρασθατος εξπετενδα αδ. Γραεσε πλαθονεμ ρεπυδιανδαε φιξ εα, εα ετιαμ
71 σωνσθιτυθο ασυεφεριθ σιθ. Ατ πυρθο ναθυμ σονγυε φιξ, κυι ετ δισαμ
72 ινερμις ινιμισυς.
73
74 Περ υθ διστα ινθεγρε, περ ρεκυε φιερενθ αδ. Νε δεσερυντ ινφενιρε
75 σωνσεθεθυρ μει, αν ηομερω αργυμενθυμ ρεπυδιανδαε περ, ηις σωνσυλ μελιορε
76 ινθελλεγαμ υθ. Νες εα λαβιθυρ δολορεμ υλλαμσορπερ. Μει εσεντ
77 νεσεσιταθιβυς ιν, αφφερθ σαυσαε ινθερεσετ ηας αν.
--- test/diff-test-1.wiki
+++ test/diff-test-1.wiki
@@ -33,10 +33,14 @@
3333
* <a href="../../../fdiff?v1=21f9a00fe2fa4a17&v2=d5c4ff0532bd89c3#chunk5"
3434
target="testwindow">sqlite3.c changes</a>
3535
that are difficult to align.
3636
* <a href="../../../fdiff?v2=21f9a00fe2fa4a17&v1=d5c4ff0532bd89c3#chunk5"
3737
target="testwindow">sqlite3.c changes inverted.</a>
38
+ * <a href="../../../fdiff?v1=4f70c682e44f&v2=55659c6e062994f"
39
+ target="testwindow">Lorem Ipsum in Greek.</a>
40
+ * <a href="../../../fdiff?v2=4f70c682e44f&v1=55659c6e062994f"
41
+ target="testwindow">Lorem Ipsum in Greek inverted.</a>
3842
3943
External:
4044
4145
* <a href="http://www.sqlite.org/src/fdiff?v1=aafcb21a74e41f9a&v2=a6d127dd05daf0f9#chunk3" target="testwindow">
4246
Code indentation change.</a>
4347
4448
ADDED test/glob.test
4549
ADDED test/utf.test
--- test/diff-test-1.wiki
+++ test/diff-test-1.wiki
@@ -33,10 +33,14 @@
33 * <a href="../../../fdiff?v1=21f9a00fe2fa4a17&v2=d5c4ff0532bd89c3#chunk5"
34 target="testwindow">sqlite3.c changes</a>
35 that are difficult to align.
36 * <a href="../../../fdiff?v2=21f9a00fe2fa4a17&v1=d5c4ff0532bd89c3#chunk5"
37 target="testwindow">sqlite3.c changes inverted.</a>
 
 
 
 
38
39 External:
40
41 * <a href="http://www.sqlite.org/src/fdiff?v1=aafcb21a74e41f9a&v2=a6d127dd05daf0f9#chunk3" target="testwindow">
42 Code indentation change.</a>
43
44 DDED test/glob.test
45 DDED test/utf.test
--- test/diff-test-1.wiki
+++ test/diff-test-1.wiki
@@ -33,10 +33,14 @@
33 * <a href="../../../fdiff?v1=21f9a00fe2fa4a17&v2=d5c4ff0532bd89c3#chunk5"
34 target="testwindow">sqlite3.c changes</a>
35 that are difficult to align.
36 * <a href="../../../fdiff?v2=21f9a00fe2fa4a17&v1=d5c4ff0532bd89c3#chunk5"
37 target="testwindow">sqlite3.c changes inverted.</a>
38 * <a href="../../../fdiff?v1=4f70c682e44f&v2=55659c6e062994f"
39 target="testwindow">Lorem Ipsum in Greek.</a>
40 * <a href="../../../fdiff?v2=4f70c682e44f&v1=55659c6e062994f"
41 target="testwindow">Lorem Ipsum in Greek inverted.</a>
42
43 External:
44
45 * <a href="http://www.sqlite.org/src/fdiff?v1=aafcb21a74e41f9a&v2=a6d127dd05daf0f9#chunk3" target="testwindow">
46 Code indentation change.</a>
47
48 DDED test/glob.test
49 DDED test/utf.test
--- a/test/glob.test
+++ b/test/glob.test
@@ -0,0 +1,118 @@
1
+#
2
+# Copyright (c) 2013 D. Richard Hipp
3
+#
4
+# This program is free software; you can redistribute it and/or
5
+# modify it under the terms of the Simplified BSD License (also
6
+# known as the "2-Clause License" or "FreeBSD License".)
7
+#
8
+# This program is distributed in the hope that it will be useful,
9
+# but without any warranty; without even the implied warranty of
10
+# merchantability or fitness for a particular purpose.
11
+#
12
+# Author contact information:
13
+# [email protected]
14
+# http://www.hwaci.com/drh/
15
+#
16
+############################################################################
17
+#
18
+# Test glob pattern parsing
19
+#
20
+
21
+ parsing
22
+#
23
+
24
+test_setup ""
25
+
26
+proc glob-parse {testname args} {
27
+ set i 1
28
+ foreach {pattern string result} $args {
29
+ fossil test-glob $pattern $string
30
+ test glob-parse-$testname.$i {$::RESULT eq $result}
31
+ incr i
32
+ }
33
+}
34
+
35
+glob-parse 100 test test [string map [list \r\n \n] \
36
+{SQL expression: (x GLOB 'test')
37
+pattern[0] = [test]
38
+1 t*')
39
+pattern[0] = [t*]
40
+1 1 test}]
41
+
42
+glob-parse 101 "one two" one [string map [list \r\n \n] \
43
+{SQL expression: (x GLOB 'one' OR x GLOB 'two')
44
+pattern[0] = 0 two one}]
45
+
46
+glob-p02 t* test-parse 108 "\"o*\rtwo\" \"thrt*#
47
+# Copyright (c)#
48
+# 1 test}]
49
+
50
+glob-parse 103 "o*test}]
51
+
52
+glob-parse 101 "one two" one [string map [list \r\n \n] \
53
+*' OR x GLOB 'two')
54
+pattern[0] =0 two one}]
55
+
56
+glob-p04 {"o* two" "three four"} "one two" [string map [list \r\n \n] \
57
+{SQL expression: (x GLOB 'o* two' OR x GLOB 'three four')
58
+pattern[0] = [o* two]
59
+pone two}]
60
+
61
+glob-parse 105 {"o* two" "three four"} "5 {"o* two" "three four"} "two one" [string map [list \r\n \n] \
62
+{SQL expression: (x GLOB 'o* two' OR x GLOB 'three four')
63
+pattern[0] = [o* two]
64
+p]
65
+0 0 two one}]
66
+
67
+glob-p0 0 two one}]
68
+
69
+glob-parse 106 "\"o*\ntwo\" \"three\nfour\"" "one\ntwo" \
70
+[string map [list \r\n \n] \
71
+{SQL expression: (x GLOB 'o*
72
+two' OR x GLOB 'three
73
+fou] = [one]
74
+pattern[1] = 1 1 one
75
+two}]
76
+
77
+glob-parse 107 "\"o*\ntwo\" \"three\nfour\"" "two\none" \
78
+[string map [list \r\n \n] \
79
+{SQL expression: (x GLOB 'o*
80
+two' OR x GLOB 'three
81
+foutwo
82
+0 two one}]
83
+
84
+glob-p08 "\"o*\rtwo\" \"three\rfour\"" "one\rtwo" \
85
+[string map [list \r\n \n] \
86
+{SQL expression: (x GLOB 'o*
87
+two' OR x GLOB 'three
88
+four')
89
+pattern[0] = [o*
90
+two]
91
+p] = [one]
92
+pattern[1] =
93
+ foreach {pattern string result} $args {
94
+ fossil test-glob $pattern $string
95
+ test glob-parse-$testname.$i {$::RESULT eq $result}
96
+ incr i
97
+ }
98
+}
99
+
100
+gtwo
101
+0 two one}]
102
+
103
+glob-patring map [list \r\n \n] \
104
+{SQL expression: (x GLOB 'test')
105
+pattern[0] = [test]
106
+1 1 test}]
107
+
108
+glob-parse 101 "one two" one [string map [list \r\n \n] \
109
+{] = [one]
110
+pattern[1] = [two]
111
+1 1 one}]
112
+
113
+glob-parse 102 t* test [string map [list \r\n \n] \
114
+{SQL expression: (x GLOB 't*')
115
+pattern[0] = [t*]
116
+1 1 test}]
117
+
118
+glob-parse 103 "o* two" one [st
--- a/test/glob.test
+++ b/test/glob.test
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/test/glob.test
+++ b/test/glob.test
@@ -0,0 +1,118 @@
1 #
2 # Copyright (c) 2013 D. Richard Hipp
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the Simplified BSD License (also
6 # known as the "2-Clause License" or "FreeBSD License".)
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but without any warranty; without even the implied warranty of
10 # merchantability or fitness for a particular purpose.
11 #
12 # Author contact information:
13 # [email protected]
14 # http://www.hwaci.com/drh/
15 #
16 ############################################################################
17 #
18 # Test glob pattern parsing
19 #
20
21 parsing
22 #
23
24 test_setup ""
25
26 proc glob-parse {testname args} {
27 set i 1
28 foreach {pattern string result} $args {
29 fossil test-glob $pattern $string
30 test glob-parse-$testname.$i {$::RESULT eq $result}
31 incr i
32 }
33 }
34
35 glob-parse 100 test test [string map [list \r\n \n] \
36 {SQL expression: (x GLOB 'test')
37 pattern[0] = [test]
38 1 t*')
39 pattern[0] = [t*]
40 1 1 test}]
41
42 glob-parse 101 "one two" one [string map [list \r\n \n] \
43 {SQL expression: (x GLOB 'one' OR x GLOB 'two')
44 pattern[0] = 0 two one}]
45
46 glob-p02 t* test-parse 108 "\"o*\rtwo\" \"thrt*#
47 # Copyright (c)#
48 # 1 test}]
49
50 glob-parse 103 "o*test}]
51
52 glob-parse 101 "one two" one [string map [list \r\n \n] \
53 *' OR x GLOB 'two')
54 pattern[0] =0 two one}]
55
56 glob-p04 {"o* two" "three four"} "one two" [string map [list \r\n \n] \
57 {SQL expression: (x GLOB 'o* two' OR x GLOB 'three four')
58 pattern[0] = [o* two]
59 pone two}]
60
61 glob-parse 105 {"o* two" "three four"} "5 {"o* two" "three four"} "two one" [string map [list \r\n \n] \
62 {SQL expression: (x GLOB 'o* two' OR x GLOB 'three four')
63 pattern[0] = [o* two]
64 p]
65 0 0 two one}]
66
67 glob-p0 0 two one}]
68
69 glob-parse 106 "\"o*\ntwo\" \"three\nfour\"" "one\ntwo" \
70 [string map [list \r\n \n] \
71 {SQL expression: (x GLOB 'o*
72 two' OR x GLOB 'three
73 fou] = [one]
74 pattern[1] = 1 1 one
75 two}]
76
77 glob-parse 107 "\"o*\ntwo\" \"three\nfour\"" "two\none" \
78 [string map [list \r\n \n] \
79 {SQL expression: (x GLOB 'o*
80 two' OR x GLOB 'three
81 foutwo
82 0 two one}]
83
84 glob-p08 "\"o*\rtwo\" \"three\rfour\"" "one\rtwo" \
85 [string map [list \r\n \n] \
86 {SQL expression: (x GLOB 'o*
87 two' OR x GLOB 'three
88 four')
89 pattern[0] = [o*
90 two]
91 p] = [one]
92 pattern[1] =
93 foreach {pattern string result} $args {
94 fossil test-glob $pattern $string
95 test glob-parse-$testname.$i {$::RESULT eq $result}
96 incr i
97 }
98 }
99
100 gtwo
101 0 two one}]
102
103 glob-patring map [list \r\n \n] \
104 {SQL expression: (x GLOB 'test')
105 pattern[0] = [test]
106 1 1 test}]
107
108 glob-parse 101 "one two" one [string map [list \r\n \n] \
109 {] = [one]
110 pattern[1] = [two]
111 1 1 one}]
112
113 glob-parse 102 t* test [string map [list \r\n \n] \
114 {SQL expression: (x GLOB 't*')
115 pattern[0] = [t*]
116 1 1 test}]
117
118 glob-parse 103 "o* two" one [st
+5341
--- a/test/utf.test
+++ b/test/utf.test
@@ -0,0 +1,5341 @@
1
+#
2
+0\x81\
3
+ 162 \xC0\x81\
4
+ 163 \xC0\x81\
5
+ 164 \xC0\x81\
6
+ 165 \xC1111E \
7
+ 170 \xE \
8
+ 171 \xE \
9
+ 172 \xE \
10
+ 1777777718#
11
+431-0-1#
12
+#
13
+#
14
+437-0437-0-168#
15
+438-04441 #
16
+44#
17
+#
18
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
19
+9459-0#
20
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
21
+7474474-1-4-1-6#
22
+#475-1-61-7477 477-1477-1-78#
23
+479 utf-check-479-1474808480-1-9481#
24
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
25
+525-1-32265226-1-32#
26
+#
27
+32528-1-35295229532-1-3#
28
+#
29
+53#
30
+5334-1k-5338-1-3#
31
+#
32
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
33
+ 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
34
+ 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
35
+ "\xFF\xFE" : "\xFE\xFF"}]CR LONE_CR
36
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
37
+s: ANY_CR LONE_CR
38
+\
39
+ 1-1-57578578-1-578-12#
40
+0\x81\
41
+ 162 \x##
42
+0\x81\
43
+ 162 \xC0\x81\
44
+ 163 \xC0\x81\
45
+ 164 \xC0\x81\
46
+ 165 \xC1111E \
47
+ 170 \xE \ \
48
+ 171 \xE \
49
+ 172 \xE \
50
+ 1777777718#
51
+431-0-1#
52
+#
53
+#
54
+437-0437-0-168#
55
+438-04441 #
56
+44#
57
+#
58
+446-0446-0-1\4524-1524-1-31#
59
+525-1-32265226-1-32#
60
+#
61
+32528-1-35295229-1-#
62
+5331
63
+31-1-3#
64
+532-1-3#
65
+#
66
+53#
67
+5334-1-335 535-15336-1-337 utf-check-537-1#
68
+38 utf-check-5338-1-3#
69
+#
70
+#
71
+40 5440-1-39#
72
+#
73
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
74
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
75
+5331
76
+31635 535-15336-1-337 7f-check-537-1#
77
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
78
+#
79
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
80
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
81
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
82
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
83
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
84
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
85
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
86
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
87
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
88
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
89
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
90
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
91
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
92
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
93
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
94
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
95
+ 33593-1593-1-6#
96
+595934
97
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
98
+2337-1-57578578-1-578-38#
99
+0\x81\
100
+ 162 \#
101
+#
102
+0\x81\
103
+ 162 \xC0\x81\
104
+ 163 \xC0\x81\
105
+ 164 \xC0\x81\
106
+ 165 \xC1111E \
107
+ 170 \xE \
108
+ 171 \xE \
109
+ 172 \xE \
110
+ 1777777718#
111
+431-0-1#
112
+#
113
+#
114
+437-0437-0-168#
115
+438-04441 #
116
+44#
117
+#
118
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
119
+9459-0#
120
+461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
121
+ 163 \xC0\x81\
122
+ 164 \xC0115-0-71116-0-9-0#
123
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
124
+7474474-1-4-1-6#
125
+#475-1-61-7477 477-1477-1-78#
126
+479 utf-check-479-1474808480-#
127
+0\x81\
128
+ 162 \xC0\x81\
129
+ 163 \xC0\x81\
130
+ 164 \xC0\x81\
131
+ 165 \xC1111E \
132
+ 170 \xE \
133
+ 171 \xE \
134
+ 172 \xE \
135
+ 1777777718#
136
+431-0-1#
137
+#
138
+#
139
+437-0437-0-168#
140
+438-04441 #
141
+44#
142
+#
143
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
144
+9459-0#
145
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
146
+0\x81\
147
+ 162 \xC0\x81\
148
+ 163BB\2131-0-1133-0 162 \xC0\x81\
149
+ 163 \xC0\x81\
150
+63 \xC134-0-171381\
151
+ 162 \xC0\x81\
152
+ 163 \xC0\x81\
153
+ 164 \xC0\x81\
154
+ 165 \xC1111E \
155
+ 170 \xE \
156
+ 171 \xE \
157
+ 172 \xE \
158
+ 1777777718#
159
+431-0-1#
160
+#
161
+#
162
+437-0437-0-168#
163
+438-04441 #
164
+44#
165
+#
166
+446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
167
+ 164 \xC0\x81\
168
+ 165 \xC1111E \
169
+ 170 \xE \
170
+ 171 \xE \
171
+ 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
172
+0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
173
+ 164 \xC0\x81\
174
+ 165 \xC1111E \
175
+ 170 \xE \
176
+ 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
177
+#
178
+#
179
+437-0437-0-168#
180
+438-04441 #
181
+44#
182
+#
183
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
184
+0\x81\
185
+ 162 \xC0\x81\
186
+ 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
187
+ 163 \xC0\x81\
188
+63 \154-0-25155-0155-0-27156-0156-0-289-1-#
189
+5331
190
+31635 #
191
+0\x81\
192
+ 162 \xC0\x81\
193
+ 163 \xC0\x81\
194
+ 164 \xC0\x81\
195
+ 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
196
+0\x81\
197
+ -3#
198
+#
199
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
200
+ 0 binary 56-7-01W@Xt5159-0159-0-2#
201
+0\x81\
202
+ -3#
203
+#
204
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
205
+ 0 binary 56-7-01W@XtW60-0160-0-30#
206
+0\x81\
207
+ 162 \xC0\x81\
208
+ 163 \xC0\x81\
209
+ 164 \xC0\x81\
210
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
211
+0\x81\
212
+ 162 \xC0\x81\
213
+ 163 \xC0\x81\
214
+ 164 \xC0\x81\
215
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
216
+ 163 \xC0\x81\
217
+63 \xC0\x81\
218
+ 164 \xC0\x81\
219
+ 165 \xC1111E \
220
+ 170 \xE \
221
+ 171 \xE \
222
+ 172 \xE \
223
+ 1777777718#
224
+431-0-1#
225
+#
226
+#
227
+437-0437-0-168#
228
+438-04441 #
229
+44#
230
+#
231
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
232
+96111169-0-3169-0-34-0-1#
233
+#
234
+#
235
+437-0437-0-168#
236
+438-04441 #
237
+44#
238
+#
239
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
240
+0\x81\
241
+ 162 \xC0\x81\
242
+ 163 1170-0-3170-0-3 162 \xC0\x81\
243
+ 163 \xC0\x81\
244
+ 164 \xC0\x81\
245
+ 165 \xC1111E \
246
+ 170 \xE \
247
+ 171 \xE \
248
+ 172 \xE \
249
+ 1777777718#
250
+431-0-1#
251
+#
252
+#
253
+437-0437-0-168#
254
+438-04441 #
255
+44#
256
+#
257
+44proc dele\xC1111E \
258
+ 170 \xE \
259
+ 11#
260
+0\x81\
261
+ 162 \xC0\x81\
262
+ 163646171438-04441 #
263
+44#
264
+#
265
+446-0446-0-1\452#
266
+01711818 162 \xC0\x81\
267
+ 163 \xC0\x81\
268
+ -04441 #
269
+44#
270
+#
271
+446-0.jnk]
272
+ incr fn\x81\
273
+ 163 \xC0\x81\
274
+ 164 \xC0\x81\
275
+ 165 \xC1111E \
276
+ 170 \xE \
277
+ 11#
278
+0\x81\
279
+ 162 \xC0\x81\
280
+ 163646171438-04441 #
281
+44#
282
+#
283
+446-044-17#
284
+0\x81\-$fn-$i-$j2#
285
+0\x81\
286
+ -3#
287
+0159-0-2#
288
+ 0 binary 56-7-01W@XtW60-163 \xC0\x81\
289
+ 11E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
290
+0\x81\
291
+ 162 \} else {
292
+FE\xFF"}]CR LONE6161-0-3161$::data($j)
293
+ }
294
+0\x81\
295
+ 164 \xC0\x81\
296
+ }
297
+ }
298
+0\x81\
299
+ 162 \xC0\x81\
300
+ 163 \xC0\x81\
301
+ 164 \xC0\x81\
302
+ 165 \xC1111E \
303
+ 170 \xE \
304
+ 171 \xE \
305
+ 172 \xE \
306
+ 1777777718#
307
+431-0-1#
308
+#
309
+#
310
+437-0437-0-168#
311
+438-04441 #
312
+44#
313
+#
314
+446-0446 162 \xC0\100101\
315
+ 162 \xC0\x81\
316
+ 163 \xC0\x81\
317
+ 164 \xC0\x81\
318
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2#
319
+0\x81\
320
+ 162 \xC0\x81\
321
+ 163BB\22220\x81\
322
+ 163 \xC0\x81\
323
+ 164 \0\x81\
324
+ 163 \xC0\x81\
325
+ 164 \xC0\x81\
326
+ 165 \xC1111E \
327
+ 170 \xE \
328
+ 171 \xE \
329
+ 1720ABC\rX@dMG,j:Line endings: ANY_CR \
330
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
331
+018 49449-052 52-0-17454 454-0-1754-05 456#
332
+9459-0#
333
+461-0462-1334-0-6234-0-67#
334
+0\x81\
335
+ -441546 546-1-42#
336
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
337
+5331
338
+31635 535-15336-235-0#
339
+0\x81\
340
+ 162 \xC0\x81\
341
+ 163 \xC0\x81\
342
+ 164 \xC0\x81\
343
+ 165 \xC1111E \
344
+ Other f11-578-12LO\
345
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
346
+ 21 \x00A\rX@dMG,j:Line ending2-0-254545-1-441546 546-1-42#
347
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
348
+5331
349
+31635 535-15336-1-337 7f-check-537-1#
350
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
351
+#
352
+560512O@1~fl,Z:L8dM,1:7Z@16Other flags: NONEV17 \x03-0-3338-1-3#
353
+#
354
+#
355
+40 5440-1-39#
356
+#
357
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#352 52-0-17454 454-0-1754-05 456#
358
+9459-0#
359
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1#
360
+0\x81\
361
+ 162 \xC0\x81\
362
+ 163 \xC0\x81\
363
+ 164 \xC0\x81\
364
+ 165 \xC1111E \
365
+ 0\
366
+ 162 \xC0\x81\
367
+ 163 \xC0\x\x81\
368
+LO\
369
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
370
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
371
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
372
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
373
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
374
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
375
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
376
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
377
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
378
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
379
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
380
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
381
+ 33593-1593-1-6#
382
+595934
383
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
384
+2337-1-57578578-1-578-38#
385
+0\x81\
386
+ 162 \#
387
+#
388
+0\x81\
389
+ 162 \xC0\x81\
390
+ 163 \xC0\x81\
391
+ 164 \xC0\x81\
392
+ 165 \xC1111E \
393
+ 170 \xE \
394
+ 171 \xE \
395
+ 172 \xE \
396
+ 1777777718#
397
+431-0-1#
398
+#
399
+#
400
+437-0437-0-168#
401
+438-04441 #
402
+44#
403
+#
404
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
405
+9459-0#
406
+461-0462-1-46463-1-4646446464#
407
+0\x81\
408
+ -441546 546-1-42#
409
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
410
+5331
411
+31635 535-15336-323239-040-0-7240-0-70578578-1-578-12#
412
+0\x81\
413
+ 162 \x##
414
+0\x81\
415
+ 162 \xC0\x81\
416
+ 163 \xC0\x81\
417
+ 164 \xC0\x81\
418
+ 165 \xC1111E \
419
+ 170 \xE \
420
+ #
421
+0\x81\
422
+ 4241-0241-0-702245-0-725-0-7#
423
+0\x81\
424
+ -3#
425
+#
426
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
427
+ 0 binary 56-7-01W@XtW4250-0-7250-0-752554-0-7254-0-77578578-1-578-12#
428
+0\x81\
429
+ 162 \x##
430
+0\x81\
431
+ 162 \xC0\x81\
432
+ 163 \xC0\x81\
433
+ 164 \x#
434
+0\x81\
435
+ 55558-0-7559-063 \xC0\x81\
436
+ 164 \xC0\x81\
437
+ 165 \xC1111E \
438
+ 170 \xE \
439
+ 171 \xE \
440
+0\x81\
441
+ 168#
442
+438-04441 #
443
+44#
444
+#
445
+446-0446-0-1\4524-1524-1-31#
446
+525-1-32265226-1-32#
447
+#
448
+32528-1-35295229-1-#
449
+5331
450
+31-1-3#
451
+532-1-3#
452
+#
453
+53#
454
+5334-1-335 535-15336-1-337 utf-check-537-1#
455
+38 utf-check-5338-1-3#
456
+#
457
+#
458
+40 5440-1-39#
459
+#
460
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
461
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
462
+5331
463
+31635 535-15336-1-337 7f-check-537-1#
464
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
465
+#
466
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
467
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
468
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
469
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
470
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
471
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
472
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
473
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
474
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
475
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
476
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
477
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
478
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
479
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
480
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
481
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
482
+ 33593-1593-1-6#
483
+595934
484
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
485
+2337-1-57578578-1-578-38#
486
+0\x81\
487
+ 162 \#
488
+#
489
+0\x81\
490
+ 162 \xC0\x81\
491
+ 163 \xC0\x81\
492
+ 164 \xC0\x81\
493
+ 165 \xC1111E \
494
+ 170 \xE \
495
+ 171 \xE \
496
+ 172 \xE \
497
+ 1777777718#
498
+431-0-1#
499
+#
500
+#
501
+437-0437-0-168#
502
+438-04441 #
503
+44#
504
+#
505
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
506
+9459-0#
507
+461-0462-1-46463-1-4646446464#
508
+0\x81\
509
+ 2626262-0-8262-0-863-0-8263-0-811-578-12#
510
+0\x81\
511
+ 162 \x##
512
+0\x81\
513
+ 162 \xC0\x81\
514
+ 163 \xC0\x81\
515
+ 164 \xC0\x81\
516
+ 165 \xC1111E \
517
+ 170 \xE \
518
+ 171 \xE \
519
+ 172 \x#
520
+0\x81\
521
+ 162 \xC0\x81\
522
+ 163 \xC0\x81\
523
+ 164 \xC0\x81\
524
+ 165 \xC1111E \
525
+ 170267-0267-0-83-1#
526
+0\x81\
527
+ 162 \334-1-335 535-15336-1-337 utf-check-537-1#
528
+38 utf-check-5338-1-3#
529
+#
530
+#
531
+40 5440-1-39#27271-0271-0-854-1524-1-31#
532
+525-1-32265226-1-32#
533
+#
534
+0\x272-0-8#
535
+0\x81\
536
+ 162 \xC0\x81\
537
+ 163 \xC0\x81\
538
+ 164 \xC0\x81\
539
+ 165 \xC1111E \485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
540
+525-1-32265226-1-32#7275-0-8#
541
+0\x81\
542
+ 162 \xC0\x81\
543
+ 1636469469276-0-88#
544
+0\x81\
545
+ 162 \xC0\x81\
546
+ 163 \xC0\x81\
547
+ 164 \xC0\x81\
548
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE27779-0-880-0280-0-90#
549
+0\x81\
550
+ 162 \xC
551
+5334-1-335 535-15336-1-337 utf-check-537-1#
552
+38 utf-check-5338-1-3#
553
+#
554
+#
555
+40 5440-1-39\xFE" : "\xFE\xFF"}]CR LONE_CR
556
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
557
+s: ANY_CR LONE_CR
558
+\
559
+ -1-32#
560
+#
561
+32528-1-35295229-1-#
562
+5331
563
+31-1-3#
564
+532-1-3#
565
+#
566
+53#
567
+5334-1-335 535-15336-1-337 utf-check-537-1#
568
+38 utf-check-5338-1-3#
569
+#
570
+#
571
+40 5440-1-39#
572
+#
573
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
574
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
575
+5331
576
+31635 535-15336-1-337 7f-che#
577
+0\x81\
578
+ 162 \xC0\x81\
579
+ 163 \xC0\x81\
580
+ 164 \xC0\x81\
581
+ 165 \xC1111E \
582
+ 170284-0-984-0-92578578-1-578-12#
583
+0\x81\
584
+ 162 \x##
585
+0\x81\
586
+ 162 \xC0\x81\
587
+ 163 \xC0\x81\
588
+ 164 \x#
589
+0\x81\
590
+ 1@8wU,2:7-_@9LW,5:0-7\
591
+s: AN282888-032528-1-35295229-1-#
592
+5331
593
+31-1-3#
594
+532-1-3#
595
+#
596
+53#
597
+5334-1-335 535-15336-1-337 utf-check-537-1#
598
+38 utf-check-5338-1-3#
599
+#
600
+#
601
+40 5440-1-39#
602
+#
603
+342#
604
+0\x81\
605
+ 162 \xC0\x81\
606
+ 163 \xC0\x81\
607
+ 164 \xC0\x81\
608
+ 165 \xC1111E \
609
+ 17089-0-9289-093#
610
+5334-1-335 535-15336-1-337 utf-check-537-1#
611
+38 utf-check-5338-1-3#
612
+#
613
+#
614
+40 5440-1-39#
615
+#
616
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
617
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
618
+5331
619
+31635 535-15336-1-337 7f-check-537-1#
620
+38 u843-1-5#
621
+0\x81\
622
+ 162 \xC0\x81\
623
+ 163 \xC0\x81\
624
+ 164 \xC0\x81\
625
+ 165 \xC1111E \
626
+ 170292-0-92993-0-9293-0-96#
627
+0\x81\
628
+ 162 \xC0\x81\
629
+ 163 \xC0\x81\
630
+ 164 \xC0\x81\
631
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2922296-1-296-1-2297-1-35-15336-1-337 utf-check-537-1#
632
+38 utf-check-5338-1-3#
633
+#
634
+#
635
+40 5440-1-39#
636
+#
637
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
638
+547-15450-1-44551551-1-4455#
639
+0\x81\
640
+ 162 \xC0\x81\
641
+ 163 \xC0\x81\
642
+ 164 \xC0\x81\
643
+ 165 \xC1111E \
644
+ 29check-5338-1-3#
645
+#
646
+#
647
+40 5440-1-39#
648
+#
649
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
650
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
651
+5331
652
+31635 535-15336-1-337 7f-check-537-1#
653
+38 u843-1-5444 544-1-41595450-1-4#
654
+0\x81\
655
+ 162 \xC0\x81\
656
+ 163 \xC0\x81\
657
+ 164 \xC0\x81\
658
+ 165 \xC1111E \
659
+ 17301-1-01-1-302-1-163 \xC0\x81\
660
+ 164 \xC0\x81\
661
+ #
662
+0\x81\
663
+ 163 \xC0\x81\
664
+ 164 \xC0\x81\
665
+ 165 \xC1111E \
666
+ 170 \xE \
667
+ 171 \xE \
668
+ 172 \xE \
669
+ 1777777718#
670
+431-0-1#
671
+#
672
+#
673
+437-0437-0-168#
674
+438-162 \xC0\x81\
675
+ 163 \xC0\x81\
676
+ 164 \xC0\x81\
677
+ 165 \xC1111E \
678
+ 170 \xE \
679
+ #
680
+0\x81\
681
+ 162 \xC0\x81\
682
+ 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
683
+7474474-1-4-1-6#
684
+#475-1-61-7477 477-1477-1-78#
685
+479 utf-check-479-1474808480-1-9481#
686
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-146-0446-0-1747448 49449-052 52-0-1#
687
+0\x8310-1-311-1-11-1-1312-1-312-1-1163 \xC0\x81\
688
+ 164 \xC0\x81\
689
+ #
690
+0\x13-1-314-1-1314-1-1xC0\x81\
691
+ 163 \xC0\x81\
692
+ 164 \xC0\x315-1-1316-1-1316-1-11117-1-1317-1-11118-1318-1-1221635 535-15336-1-337 7f-check-537-1#
693
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
694
+#
695
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
696
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR#
697
+0\x81\
698
+ 162 \xC0\x81\
699
+325-1-1325-1-15#
700
+0\x81\
701
+ 162 \xC0\x81\
702
+ 16469469-326-1-16O\
703
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
704
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_C0\x81\
705
+ 163 \xC0\x81\
706
+ 164 \0\x332-1-1332-1-19333-1333-1-193334-1334-1-20335-1-2335-1-2#
707
+0\x81\
708
+ 162 \xC0\x81\
709
+ 16469469-337-1-2337-1-21338-1-238-1-2339-1-2339-1-244ary 56-7-01W@XtW,j:Line enther #
710
+0\x81\
711
+ 162 \xC0\x81\
712
+ 163 \xC0\x81\
713
+ 164 \xC0\x81\
714
+ 165 \xC1111E \
715
+ 170 \xE \
716
+ 171 \xE \
717
+ 172 \xE \
718
+ 1777777718#
719
+431-0-1#
720
+#
721
+#
722
+437-0437-0-168#
723
+438-04441 #
724
+44#
725
+#
726
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#4#
727
+0\x81\
728
+ 162 \xC0\x81\
729
+ 16469447-1-2350-1351-1-251-1-285352-1-2352-1-29#
730
+0\x81\
731
+ -3#
732
+#
733
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
734
+ 0 binary 56-7-01W@Xt5#
735
+0\x81\
736
+ 162 \xC0\x81\
737
+ 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
738
+7474474-1-4-1-6#
739
+#475-1-61-7477 477-1477-1-78#
740
+479 utf-check-479-1474808480-1-9481#
741
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
742
+525-57-111485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
743
+525-1-32265226#
744
+0\x81\
745
+ 162 \xC0\x81\
746
+ 163 \xC0\x81\
747
+ 164 \xC0\x81\
748
+ 165 \xC1111E \
749
+ 170 \xE \
750
+ 171 \xE \
751
+ 172 \xE \
752
+ 359-1-329-1-3 162 \xC0\x81\
753
+ 163 \xC0\x81\
754
+ 164 \xC0\x81\
755
+ 165 \xC1111E \
756
+ 170 \xE 6361-1361-1-36362-1362-1-3363-1-3363-1-36364-1-3364-1-356365-1-3366-1-3NY_CR LON\
757
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
758
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
759
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
760
+ 22 \x00#
761
+0\x81\
762
+ 162 \xC0\x81\
763
+ 163 \xC0\x81\
764
+ 164 \xC0\x81\
765
+ 165 \xC1111E \
766
+ 1368-1-3370-1-3#
767
+0\x81\
768
+ 162 \xC0\x81\
769
+ 163 \xC0\x81\
770
+ 164 \xC0\x81\
771
+ 165 \xC1111E \
772
+ 17371-14-1524-1-31#
773
+525-1-32265226-1-32#
774
+#
775
+0\x81372-1-39163 \xC0\x81\
776
+ 164 \xC0\x81\
777
+ #
778
+0\x813-1-397374-1-4374-1-40O\
779
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
780
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
781
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
782
+ 25 \x00A#
783
+0\x81\
784
+ 162 \xC0\x81\
785
+ 163 \xC0\x81\
786
+ 164 \xC0\x81\
787
+ 165 \xC1111E \
788
+ 1375-1-4375-1-40#
789
+0\x81\
790
+ 162 \xC0\x81\
791
+ 1636468#
792
+0\x81\
793
+ 162 \xC0\x81\
794
+ 163 \xC0\x81\
795
+ 164 \xC0\x81\
796
+ 165 \xC1111E \
797
+ 178endings: ANY_CR L\
798
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
799
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
800
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
801
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
802
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
803
+ 26 \x00AB\nX@dMG,j:Line endings:#
804
+0\x81\
805
+ 162 \xC0\x81\
806
+ 163 \xC0\x81\
807
+ 164 \xC0\x81\
808
+ 165 \xC1111E \
809
+ 17384-1855-1-4385-1-458#
810
+0\x81\
811
+ 162 \xC0\x81\
812
+ 16469469-386-1-46#
813
+0\x81\
814
+ -3#
815
+#
816
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
817
+ 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:f {$::RESULT ne $result}11kG,7:1\
818
+s: ANY_CR LONE_CR
819
+Other flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
820
+ 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
821
+ "\xFF\xFE" : "\xFE\88392-1392-1-499-1-#
822
+5331
823
+31635 535-15336-1-337 7f-check-537-1#
824
+38 u843-1-5444 544-1-41595450-1-44551551-1-1#
825
+0\x81\
826
+ 162 \xC0\x81\
827
+ 163 9163 \xC0\x81\
828
+ 164 \xC0\x81\
829
+ #
830
+0\x893-1-49 162 \xC0\x81\
831
+ 163 \xC0\x81\
832
+163 \xC395-1-5397-1998-19443 \xC0\x81\
833
+ 164 \xC0\x81\
834
+ 165 \xC1111E \
835
+ 170 \xE \
836
+ 171 \xE \
837
+ 172 \xE \
838
+ 1777777718#
839
+431-0-1#
840
+#
841
+#
842
+437-0437-0-168#
843
+438-04441 #
844
+44#
845
+#
846
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
847
+9459-0#
848
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1- 163 \xC0\x81\
849
+ 164 \xC0\x81\
850
+ 165 \xC1111E \
851
+ 170 \xE \
852
+ 171 \xE \
853
+4005-1-505-1-554406-1-5406-1-5640407-1-5407-1-56403 \xC0\x81\
854
+ 164 \xC0\x81\
855
+ 63 \xC0\x81\
856
+ 164 \xC0\x81\
857
+ 165 \xC1111E \
858
+ 170 \xE \
859
+ 171 \xE \
860
+ 172 \xE \
861
+ 1777777718#
862
+431-0-1#
863
+#
864
+#
865
+437-0437-0-168#
866
+438-04441 #
867
+44#
868
+#
869
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
870
+915-1-6#
871
+0\x81\
872
+ 162 \xC0\x81\
873
+ 16469469-416-1-61#
874
+0\x81\
875
+ -3#
876
+#
877
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
878
+ 0 binary 56-7-01W@XtW417-1-6417-1-61444262 \xC0\x81\
879
+ 163 \xC0\x423 \xC0\x81\
880
+ 164 \xC0\x81\
881
+ 63 \#
882
+0\x81\
883
+ 162 \xC0\x81\
884
+ 163 \xC0\x81\
885
+ 164 \xC0\x81\
886
+ 165 \xC1111E \
887
+ 170 \xE \
888
+ 171 \xE \
889
+ 172 \xE \
890
+ 1-13489 ut524524-1524-1-31#4223-1-6423-1-64-142#
891
+0\x81\
892
+ 162 \xC0\x81\
893
+ 163 \xC0\x81\
894
+ 164 \xC0\x81\
895
+ 165 \xC1111E \
896
+ 170 \xE \
897
+ 171 \xE \
898
+ 172 \xE \
899
+ 1777777718#
900
+431-0-1#
901
+#
902
+#
903
+437-0437-0-168#
904
+438-04441 #
905
+44#
906
+#
907
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456
908
+525-1-32265226-1-32#
909
+#
910
+32528-1-35295229-1-#
911
+5331
912
+31-1-3#
913
+532-1-3#
914
+#
915
+53#
916
+5334-1-335 535-153#
917
+0\x81\
918
+ 162 \xC0\x81\
919
+ 163 \xC0\x81\
920
+ 164 \xC0\x81\
921
+ 165 \xC1111E \
922
+ 170 \xE \
923
+ 171 \xE \
924
+ 172 \xE \
925
+ 1777777718#
926
+431-0-1#
927
+#
928
+#
929
+437-0437-0-168#
930
+438-04441 #
931
+44#
932
+#
933
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#l,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
934
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NON2#
935
+0\x81\
936
+ 162 \xC0\x81\
937
+ 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
938
+7474474-1-4-1-6#
939
+#475-1-61-7477 477-1477-1-78#
940
+479 utf-check-479-1474808480-1-9481#
941
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
942
+525-1-rX@dMG,j:Line endings: ANY_CR\
943
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
944
+ 26 \x00ABBB\xBFOther flags: \
945
+ 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
946
+ 2428-1-6428-1-67578578-1-578-12#
947
+0\x#
948
+0\x81\
949
+ 162 \xC0\x81\
950
+ 163 \xC0\x81\
951
+ 164 \xC0\x81\
952
+ 165 #
953
+0\x81\
954
+ -441546 546-1-42#
955
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
956
+5331
957
+31635 535-15336-#
958
+0\x81\
959
+ 162 \xC0\x81\
960
+ 163 \xC0\x81\
961
+ 164 \xC0\x81\
962
+ 165 \xC1111E \
963
+ 170 \xE \
964
+ 171 \xE \
965
+ 172 \xE \
966
+ 1777777718#
967
+431-0-1#
968
+#
969
+#
970
+437-0437-0-168#
971
+438-04441 #
972
+44#
973
+#
974
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#E_CR
975
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
976
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
977
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
978
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
979
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
980
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
981
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
982
+ 24 endings: ANY_CR L\
983
+ 23 431-1-6432-1432-1-69#
984
+0\x81\
985
+ -441546 546-1-42#
986
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
987
+5331
988
+31635 535-153363436-1#
989
+0\x81\
990
+ 162 \xC0\x81\
991
+ 163 \xC0\x81\
992
+ 164 \xC0\x81\
993
+ 165 \xC1111E \
994
+ 170 endings: ANY_CR L\
995
+ 23 \x00AB437-1-7437-1-71#
996
+0\x81\
997
+ -441546 546-1-42#
998
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
999
+5331
1000
+31635 535-15336-1 endings: ANY_CR L\
1001
+ 23 \x00AB439-1-724440-1440-1-73578578-1-578-12#
1002
+0\x#
1003
+0\x81\
1004
+ 162 \xC0\x81\
1005
+ 163 \xC0\x81\
1006
+ 164 \xC0\x81\
1007
+ 165 \xC1111E \4#
1008
+0\x81\
1009
+ 162 \xC0\x81\
1010
+ 163 \xC441-1-73#
1011
+0\x81\
1012
+ 162 \xC0\x81\
1013
+ 163 \xC0\x81\
1014
+ 164 \xC0\x81\
1015
+ 165 \xC1111E \
1016
+ 17endings: ANY_43 \xC0\x81\
1017
+ 164 \xC0\x81\
1018
+ 63 \xC0\x81\
1019
+ 164 \xC0\x81\
1020
+ 165 \xC1111E \
1021
+ 170 \xE \
1022
+ 171 \xE \
1023
+ 172 \xE \
1024
+ 1777777718#
1025
+431-0-1#
1026
+#
1027
+#
1028
+437-0437-0-168#
1029
+438-04441 #
1030
+44#
1031
+#
1032
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1033
+9459-0#
1034
+461-0462-1-46463-1-46464ary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:f {$::RESULT ne $result}11kG,7:1\
1035
+s: ANY_CR LONE_CR
1036
+Other flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
1037
+ 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
1038
+ "\xF#
1039
+0\x81\
1040
+ 162 \xC0\x81\
1041
+ 163 \xC0\x81\
1042
+ 164 \xC0\x81\
1043
+ 165 \xC1111E \
1044
+ 17444-1-7444-1-7 162 \xC0\x81\
1045
+ 163 \xC0\x81\
1046
+ 164 \xC0\x81\
1047
+ 165 \xC1111E \
1048
+ 170 \xE \
1049
+ 171 \xE \
1050
+ 172 \xE \
1051
+ 1777777718#
1052
+431-0-1#
1053
+#
1054
+#
1055
+437-0437-0-168#
1056
+438-04441 #
1057
+44#
1058
+#
1059
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1060
+9459-0#
1061
+461 162 \xC0\x81\
1062
+ 163 \xC0\x81\
1063
+ 164 \xC0\x81\
1064
+ 165 \xC1111E \
1065
+ 170 \xE \
1066
+ 4#
1067
+0\x81\
1068
+ 162 \xC0\x81\
1069
+ 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1070
+7474474-1-4-1-6#
1071
+#475-1-61-7477 477-1477-1-78#
1072
+479 utf-check-479-1474808480-1-9481#
1073
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
1074
+525-1-34447-1-7447-1-76 162 \xC0\x81\
1075
+ 163 \xC0\x81\
1076
+ 164 \xC0\x81\
1077
+ 165 \xC1111E \
1078
+ 170 \xE \
1079
+ 171 \xE \
1080
+ 172 \xE \
1081
+ 1777777718#
1082
+431-0-1#
1083
+#
1084
+#
1085
+437-0437-0-168#
1086
+438-04441 #
1087
+44#
1088
+#
1089
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1090
+9459-0#
1091
+461163 \xC0\x81\
1092
+ 164 \xC0\x81\
1093
+ 165 \xC1111E \
1094
+ 170 \xE \
1095
+ 171 \xE \
1096
+ 450-1#
1097
+0\x81\
1098
+ 162 \xC0\x81\
1099
+ 163 \xC0\451-153 \xC0\x81\
1100
+ 164 \xC0\x81\
1101
+ 63 \xC0\x81\
1102
+ 164 \xC0\x81\
1103
+ 165 \xC1111E \
1104
+ 170 \xE \
1105
+ 171 \xE \
1106
+ 172 \xE \
1107
+ 1777777718#
1108
+431-0-1#
1109
+#
1110
+#
1111
+4374-0-4 \xE \
1112
+ 172 \xE \
1113
+ 1777777718#
1114
+431-0-1#
1115
+#
1116
+#
1117
+437-0437-0-168#
1118
+438-04441 #
1119
+44#
1120
+#
1121
+1105-0-5\nX@dMG,j:Line endings: ANY_CR LO\
1122
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
1123
+ 27564 \xC0\x81\
1124
+ 165 \xC1111E \
1125
+ 170 \xE \
1126
+ 171 \xE \
1127
+ 172 \x#
1128
+0\x81\
1129
+ 162 \xC0\x81\
1130
+ 163 \xC0\x81\
1131
+ 164 \xx81\
1132
+ 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1133
+7474474-1-4-11\
1134
+ 164 \xC0\x81\
1135
+ 165 \xC11106-0-6LO\
1136
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1137
+ 21 \x00A\rX@dMG,j:Line ending6-0-652 52-0-17454 454-0-1754-05 456#
1138
+9459-0#
1139
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-#
1140
+0\x81\
1141
+ 162 \xC0\x81\
1142
+ 163 \xC0\x81\
1143
+ 164 \xC0\x81\
1144
+ 165 \xC1111E 107-0-7\
1145
+ 1777777718#
1146
+431-0-1#
1147
+#
1148
+#
1149
+437-0437-0-168#
1150
+438-04441 #
1151
+44#
1152
+#
1153
+446-0446-0-1\4524-1524-7 \xE \
1154
+ 172 \xE \
1155
+ 1777777718#
1156
+431-0-1#
1157
+#
1158
+#
1159
+437-0437-0-168#
1160
+438-04441 #
1161
+44#
1162
+#
1163
+10108-0-8LO\
1164
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1165
+ 21 \x00A\rX@dMG,j:Line ending8-0-8\xC0\x81\
1166
+ 163 \xC0\x81\
1167
+ 164 \xC0\x81\
1168
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE27779-0-880-0280-0-90#
1169
+0\x81\
1170
+ 162 \xC
1171
+5334-1-335 535-15336-1-337 utf-check-537-1#
1172
+38 utf-check-5338-1-3#
1173
+#
1174
+#
1175
+40 5440-10109-0-9LO\
1176
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1177
+ 21 \x00A\rX@dMG,j:Line endings: A964 \xC0\x81\
1178
+ 165 \xC1111E \
1179
+ 170 \xE \
1180
+ 171 \xE \
1181
+ 172 \x#
1182
+0\x81\
1183
+ 162 \xC0\x81\
1184
+ 163 \xC0\x81\
1185
+ 164 \xC0\x81\
1186
+ 165 \xC1111E \
1187
+ 170267-0267-0-83-1#
1188
+0\x81\
1189
+ 162 \334-1-335 535110-0-1tW,j:Line enther #
1190
+0\x643-2-7dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line ending10-0-178#
1191
+479 utf-check-479-1474808480-1-9481#
1192
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut521 \xE \
1193
+ 172 \xE \
1194
+ 1777777718#
1195
+431-0-1#
1196
+#
1197
+#
1198
+437-0437-0-168#
1199
+438-044411111-0-10ABC\rX@dMG,j:Line endings: ANY_CR \
1200
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
1201
+ 212-57#
1202
+0\x81\
1203
+ 162 \xC0\x81\
1204
+ 163469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1- 162 \xC0\x81\
1205
+ 16469447-1-2350-1351-1-251-1-285352-1-2352-1-29#
1206
+0\x81\
1207
+ -3#
1208
+#
1209
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1210
+ 0 binary 56-7-01W@Xt: ANY_CR \
1211
+ 12x81\
1212
+ 2626262-0-8262-0-863-0-8263-0-811-578-12#
1213
+0\x81\
1214
+ 162 \x##
1215
+0\x81\
1216
+ 1622-0-1243-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
1217
+#
1218
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
1219
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR#
1220
+18dM,1:7Z@16Other flags: NONEV17 \x13-0-13x81\
1221
+ 2626262-0-8262-0-863-0-8263-0-811-578-12#
1222
+0\x81\
1223
+ 162 \x##
1224
+0\x81\
1225
+ 1623-0-1352 52-0-17454 454-0-1754-05 456#
1226
+9459-0#
1227
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-#
1228
+0\x81\
1229
+ 162 \xC0\x81\
1230
+ 163 \xC0\x81\
1231
+ 164 \xC0\x81\
1232
+ 165 \xC1111E \114-0-14x81\
1233
+ 2626262-0-8262-0-863-0-8263-0-811-578-12#
1234
+0\x81\
1235
+ 162 \x##
1236
+0\x81\
1237
+ 1624-0-14 \xE \
1238
+ 172 \xE \
1239
+ 1777777718#
1240
+431-0-1#
1241
+#
1242
+#
1243
+437-0437-0-168#
1244
+438-04441 #
1245
+44#
1246
+#
1247
+11115-0-15x81\
1248
+ 2626262-0-8262-0-863-0-8263-0-811-578-12#
1249
+0\x81\
1250
+ 162 \x##
1251
+0\x81\
1252
+ 1625-0-15\xC0\x81\
1253
+ 163 \xC0\x81\
1254
+ 164 \xC0\x81\
1255
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE27779-0-880-0280-0-90#
1256
+0\x81\
1257
+ 162 \xC
1258
+5334-1-335 535-1533631
1259
+31635 535-15336-1-337 7f-check-537-1#
1260
+38 u843-1-5444 544-1-41595450-1-44551551-1-10555116-0-16x81\
1261
+ 2626262-0-8262-0-863-0-8263-0-811-578-12#
1262
+0\x81\
1263
+ 162 \x##
1264
+0\x81\
1265
+ 1626-0-167777718#
1266
+431-0-1#
1267
+#
1268
+#
1269
+437-0437-0-168#
1270
+438-04441 #
1271
+44#
1272
+#
1273
+446-0446-0-1747448 49449-052 52-0-1117-0-17x81\
1274
+ 2626262-0-8262-0-863-0-8263-0-811-578-12#
1275
+0\x81\
1276
+ 162 \x##
1277
+0\x81\
1278
+ 1627-0-17449-052 52-0-17454 454-0-1754-05 456#
1279
+9459-0#
1280
+461-0462-1334-0-6234-0-67#
1281
+0\x81\
1282
+ -441546 546-1-42#
1283
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1284
+5331
1285
+31635 535-15336-235-0#
1286
+0\x81\
1287
+ 162 \xC0\x81\
1288
+ 163 1118-0-18x81\
1289
+ 2626262-0-8262-0-863-0-8263-0-811-578-12#
1290
+0\x81\
1291
+ 162 \x##
1292
+0\x81\
1293
+ 162 \xC18449-052 52-0-17454 454-0-1754-05 456#
1294
+9459-0#
1295
+461-0462-1334-0-6234-0-67#
1296
+0\x81\
1297
+ -441546 546-1-42#
1298
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1299
+5331
1300
+31635 535-15336-235-0#
1301
+0\x81\
1302
+ 162 \xC0\x81\
1303
+ 163 \x81\
1304
+ 164 \xC0\x81\
1305
+ 165 \x119-0-19x81\
1306
+ 2626262-0-8262-0-863-0-8263-0-811-578-12#
1307
+0\x81\
1308
+ 162 \x##
1309
+0\x81\
1310
+ 1629-0-19449-052 52-0-17454 454-0-1754-05 456#
1311
+9459-0#
1312
+461-0462-1334-0-6234-0-67#
1313
+0\x81\
1314
+ -441546 546-1-42#
1315
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1316
+5331
1317
+31635 535-15336-235-0#
1318
+0\x81\
1319
+ 162 \xC0\x81\
1320
+ 163 120-0-2tW,j:Line enther #
1321
+0\x643-2-7dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line ending20-0-20449-052 52-0-17454 454-0-1754-05 456#
1322
+9459-0#
1323
+461-0462-1334-0-6234-0-67#
1324
+0\x81\
1325
+ -441546 546-1-42#
1326
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1327
+5331
1328
+31635 535-15336-235-0#
1329
+0\x81\
1330
+ 162 \xC0\x81\
1331
+ 163 121-0-20ABC\rX@dMG,j:Line endings: ANY_CR \
1332
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
1333
+21-0-2154545-1-441546 546-1-42#
1334
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1335
+5331
1336
+31635 535-15336-1-337 7f-check-537-1#
1337
+38 u843-1-544x81\
1338
+ 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1339
+7474474-1-4-1122-0-22ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
1340
+s: ANY_CR LONE_CR
1341
+\
1342
+ 1-1-57578578-1-578-122-0-2264 \xC0\x81\
1343
+ 165 \xC1111E \
1344
+ 170 \xE \
1345
+ 171 \xE \
1346
+ 172 \x#
1347
+0\x81\
1348
+ 162 \xC0\x81\
1349
+ 163 \xC0\x81\
1350
+ 164 \xx81\
1351
+ 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1352
+7474474-1-4-1 4542-1-40543543-1-5444 544-1-4154123-0-23ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
1353
+s: ANY_CR LONE_CR
1354
+\
1355
+ 1-1-57578578-1-578-123-0-2364 \xC0\x81\
1356
+ 165 \xC1111E \
1357
+ 170 \xE \
1358
+ 171 \xE \
1359
+ 172 \x#
1360
+0\x81\
1361
+ 162 \xC0\x81\
1362
+ 163 \xC0\x81\
1363
+ 164 \xx81\
1364
+ 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1365
+7474474-1-4-12\
1366
+ 162 \xC0\x81\
1367
+ 163 \xC0\x\x81\
1368
+ ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
1369
+s: ANY_CR LONE_CR
1370
+\
1371
+ 1-1-57578578-1-578-12#
1372
+0\x81\
1373
+ 162 \x##
1374
+0\x81\
1375
+ 162 \xC0\x81\
1376
+ 163 \xC0\x81\
1377
+ 164 \xC0\x81\
1378
+ 165 \xC1111E \
1379
+ 170 \xE \
1380
+ 171 \xE \
1381
+ 172 \xE \
1382
+ 1777777718#
1383
+431-0-1#
1384
+#
1385
+#
1386
+437-0437-0-168#
1387
+438-04441 #
1388
+44#
1389
+#
1390
+446-0446-0-1\4524-1524-1-31#
1391
+525-1-32265226-1-32#
1392
+#
1393
+32528-1-35295229-1-#
1394
+5331
1395
+31-1-3#
1396
+532-1-3#
1397
+#
1398
+53#
1399
+5334-1-335 535-15336-1-337 utf-check-537-1#
1400
+38 utf-check-5338-1-3#
1401
+#
1402
+#
1403
+40 5440-1-39#
1404
+#
1405
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
1406
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1407
+5331
1408
+31635 535-15336-1-337 7f-check-537-1#
1409
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
1410
+#
1411
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
1412
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
1413
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
1414
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
1415
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1416
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
1417
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
1418
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
1419
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
1420
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
1421
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
1422
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
1423
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
1424
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
1425
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
1426
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
1427
+ 33593-1593-1-6#
1428
+595934
1429
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
1430
+2337-1-57578578-1-578-38#
1431
+0\x81\
1432
+ 162 \#
1433
+#
1434
+0\x81\
1435
+ 162 \xC0\x81\
1436
+ 163 \xC0\x81\
1437
+ 164 \xC0\x81\
1438
+ 165 \xC1111E \
1439
+ 170 \xE \
1440
+ 171 \xE \
1441
+ 172 \xE \
1442
+ 1777777718#
1443
+431-0-1#
1444
+#
1445
+#
1446
+437-0437-0-168#
1447
+438-04441 #
1448
+44#
1449
+#
1450
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1451
+9459-0#
1452
+461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
1453
+ 163 \xC0\x81\
1454
+ 164 \xC0115-0-71116-0-9-0#
1455
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1456
+7474474-1-4-1-6#
1457
+#475-1-61-7477 477-1477-1-78#
1458
+479 utf-check-479-1474808480-#
1459
+0\x81\
1460
+ 162 \xC0\x81\
1461
+ 163 \xC0\x81\
1462
+ 164 \xC0\x81\
1463
+ 165 \xC1111E \
1464
+ 170 \xE \
1465
+ 171 \xE \
1466
+ 172 \xE \
1467
+ 1777777718#
1468
+431-0-1#
1469
+#
1470
+#
1471
+437-0437-0-168#
1472
+438-04441 #
1473
+44#
1474
+#
1475
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1476
+9459-0#
1477
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
1478
+0\x81\
1479
+ 162 \xC0\x81\
1480
+ 163BB\2131-0-1133-0 162 \xC0\x81\
1481
+ 163 \xC0\x81\
1482
+63 \xC134-0-171381\
1483
+ 162 \xC0\x81\
1484
+ 163 \xC0\x81\
1485
+ 164 \xC0\x81\
1486
+ 165 \xC1111E \
1487
+ 170 \xE \
1488
+ 171 \xE \
1489
+ 172 \xE \
1490
+ 1777777718#
1491
+431-0-1#
1492
+#
1493
+#
1494
+437-0437-0-168#
1495
+438-04441 #
1496
+44#
1497
+#
1498
+446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
1499
+ 164 \xC0\x81\
1500
+ 165 \xC1111E \
1501
+ 170 \xE \
1502
+ 171 \xE \
1503
+ 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
1504
+0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
1505
+ 164 \xC0\x81\
1506
+ 165 \xC1111E \
1507
+ 170 \xE \
1508
+ 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
1509
+#
1510
+#
1511
+437-0437-0-168#
1512
+438-04441 #
1513
+44#
1514
+#
1515
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
1516
+0\x81\
1517
+ 162 \xC0\x81\
1518
+ 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
1519
+ 163 \xC0\x81\
1520
+63 \154-0-25155-0155-0-27156-0156-0-289-1-#
1521
+5331
1522
+31635 #
1523
+0\x81\
1524
+ 162 \xC0\x81\
1525
+ 163 \xC0\x81\
1526
+ 164 \xC0\x81\
1527
+ 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
1528
+0\x81\
1529
+ -3#
1530
+#
1531
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1532
+ 0 binary 56-7-01W@Xt5159-0159-0-2#
1533
+0\x81\
1534
+ -3#
1535
+#
1536
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1537
+ 0 binary 56-7-01W@XtW60-0160-0-30#
1538
+0\x81\
1539
+ 162 \xC0\x81\
1540
+ 163 \xC0\x81\
1541
+ 164 \xC0\x81\
1542
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
1543
+0\x81\
1544
+ 162 \xC0\x81\
1545
+ 163 \xC0\x81\
1546
+ 164 \xC0\x81\
1547
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
1548
+ 163 \xC0\x81\
1549
+63 \xC0\x81\
1550
+ 164 \xC0\x81\
1551
+ 165 \xC1111E \
1552
+ 170 \xE \
1553
+ 171 \xE \
1554
+ 172 \xE \
1555
+ 1777777718#
1556
+431-0-1#
1557
+#
1558
+#
1559
+437-0437-0-168#
1560
+438-04441 #
1561
+44#
1562
+#
1563
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1564
+96111169-0-3169-0-34-0-1#
1565
+#
1566
+#
1567
+437-0437-0-168#
1568
+438-04441 #
1569
+44#
1570
+#
1571
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
1572
+0\x81\
1573
+ 162 \xC0\x81\
1574
+ 163 1170-0-3170-0-3 162 \xC0\x81\
1575
+ 163 \xC0\x81\
1576
+ 164 \xC0\x81\
1577
+ 165 \xC1111E \
1578
+ 170 \xE \
1579
+ 171 \xE \
1580
+ 172 \xE \
1581
+ 1777777718#
1582
+431-0-1#
1583
+#
1584
+#
1585
+437-0437-0-168#
1586
+438-04441 #
1587
+44#
1588
+#
1589
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1590
+9459-0#
1591
+461-0462-1-46463-1-4646446464-1- \xC0\x81\
1592
+ 163 \xC0\x81\
1593
+ 164 \xC0\x81\
1594
+ 165 \xC1111E \
1595
+ 170 \xE \
1596
+ 117 162 \xC0\x81\
1597
+ 163 \xC0\x81\
1598
+63 \xC0\x81\
1599
+ 164 \xC0\x81\
1600
+ 165 \xC1111E \
1601
+ 170 \xE \
1602
+ 171 \xE \
1603
+ 172 \xE \
1604
+ 1777777718#
1605
+431-0-1#
1606
+#
1607
+#
1608
+437-0437-0-168#
1609
+438-04441 #
1610
+44#
1611
+#
1612
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1613
+91xC0\x81\
1614
+ 163 \xC0\x81\
1615
+ 164 \xC0\x81\
1616
+ 165 \xC1111E \
1617
+ 170 \xE \
1618
+ 11#
1619
+0\x81\
1620
+ 162 \xC0\x81\
1621
+ 163646171438-04441 #
1622
+44#
1623
+#
1624
+446-0446-0-1\452#
1625
+01711818 162 \xC0\x81\
1626
+ 163 \xC0\x81\
1627
+ 164 \xC0\x81\
1628
+ 165 \xC1111E \
1629
+ 170 \xE \
1630
+ 171 \xE \
1631
+ 172 \xE \
1632
+ 1777777718#
1633
+431-0-1#
1634
+#
1635
+#
1636
+437-0437-0-168#
1637
+438-04441 #
1638
+44#
1639
+#
1640
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1641
+9459-0#
1642
+461-0462-1-46463-1-4646446464-1-163 \xC0\x81\
1643
+ 164 \xC0\x55-0-4197-0-498-0198-0-492200-0-5222220205-0-505-0-52006-0-506-0-53-0@8wU,2:7-_@9LW,5:0-7\
1644
+s: ANY_CR LONE_CR
1645
+\
1646
+ 1-1-57578578-1-578-12#
1647
+0\x81\
1648
+ 162 \x##2007-0-5207-0-532208-0-508-0-54#
1649
+0\x81\
1650
+ 162 \xC0\x81\
1651
+ 163 \xC0\x81\
1652
+ 164 \xC0\x81\
1653
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
1654
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1655
+s: ANY_CR LONE_CR
1656
+\2009-0-5209-0-54#
1657
+0\x81\
1658
+ 162 \xC0\x81\
1659
+ 163 \xC0\x81\
1660
+ 164 \xC0\x81\
1661
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
1662
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1663
+s: ANY_CR LONE_CR
1664
+\2110-0-5210-0-5#
1665
+0\x81\
1666
+ 162 \xC0\x81\
1667
+ 163 \xC0\x81\
1668
+ 164 \xC0\x81\
1669
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
1670
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1671
+s: ANY_CR LONE_CR
1672
+\2211-0-511-0-55#
1673
+0\x81\
1674
+ 162 \xC0\x81\
1675
+ 163 \xC0\x81\
1676
+ 164 \xC0\x81\
1677
+ 165 \xC1111E \485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
1678
+525-1-32265226-1-321212-0-5212-0-56#
1679
+0\x81\
1680
+ 162 \xC0\x81\
1681
+ 163 \xC0\x81\
1682
+ 164 \xC0\x81\
1683
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
1684
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1685
+s: ANY_CR LONE_CR
1686
+\2113-0-5213-0-562214-0214-0-57-02xC0\x81\
1687
+ 163 \xC0\x81\
1688
+ 164 \xC0215-0-572216-0216-0-582117-0217-0-582118-0218-0-599-1-#
1689
+5331
1690
+31635 #
1691
+0\x81\
1692
+ 162 \xC0\x81\
1693
+ 163 \xC0\x81\
1694
+ 164 \xC0\x81\
1695
+ 165 \xC1111E 2219-0-5219-0-592220-0-6220-0-602#
1696
+0\x81\
1697
+ 162 \xC0\x81\
1698
+ 1632 \xC0\21-0-6022222-0-6222-0-6#
1699
+0\x81\
1700
+ -3#
1701
+#
1702
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1703
+ 0 binary 56-7-01W@XtW23-0-6223-0-61#
1704
+0\x81\
1705
+ 162 \xC0\x81\
1706
+ 163 \xC0\x81\
1707
+ 164 \xC0\x81\
1708
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2224-0224-0-629-1-#
1709
+5331
1710
+31635 #
1711
+0\x81\
1712
+ 162 \xC0\x81\
1713
+ 163 \xC0\x81\
1714
+ 164 \xC0\x81\
1715
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2225-0225-0-6#
1716
+0\x81\
1717
+ 162 \xC0\x81\
1718
+ 163 \xC0\x81\
1719
+ 164 \xC0\x81\
1720
+ 165 \xC1111E \485485-1-481-16-1-487 utf-c2226-0226-0-63#
1721
+0\x81\
1722
+ 162 \xC0\x81\
1723
+ 163 \xC0\x81\
1724
+ 164 \xC0\x81\
1725
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2#
1726
+0\x81\
1727
+ 162 \xC0\x81\
1728
+ 163BB\22220\x81\
1729
+ 163 \xC0\x81\
1730
+ 164 \0\x81\
1731
+ 163 \xC0\x81\
1732
+ 164 \xC0\x81\
1733
+ 165 \xC1111E \
1734
+ 170 \xE \
1735
+ 171 \xE \
1736
+ 172 \xE \
1737
+ 1777777718#
1738
+431-0-1#
1739
+#
1740
+#
1741
+437-0437-0-168#
1742
+438-04441 #
1743
+44#
1744
+#
1745
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1746
+9459-0#
1747
+461-0462-1334-0-6234-0-67#
1748
+0\x81\
1749
+ -441546 546-1-42#
1750
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1751
+5331
1752
+31635 535-15336-235-0#
1753
+0\x81\
1754
+ 162 \xC0\x81\
1755
+ 163 \xC0\x81\
1756
+ 164 \xC0\x81\
1757
+ 165 \xC1111E \
1758
+ Other f11-578-12#
1759
+0\x81\
1760
+ 162 \x##
1761
+0\x81\
1762
+ 162 \xC0\x81\
1763
+ 163 \xC0\x81\
1764
+ 164 \xC0\x81\
1765
+ 165 \xC1111E \
1766
+ 170 \xE \
1767
+ 171 \xE \
1768
+ 172 \xE \
1769
+ 1777777718#
1770
+431-0-1#
1771
+#
1772
+#
1773
+437-0437-0-168#
1774
+438-04441 #
1775
+44#
1776
+#
1777
+446-0446-0-1\4524-1524-1-31#
1778
+525-1-32265226-1-32#
1779
+#
1780
+32528-1-35295229-1-#
1781
+5331
1782
+31-1-3#
1783
+532-1-3#
1784
+#
1785
+53#
1786
+5334-1-335 535-15336-1-337 utf-check-537-1#
1787
+38 utf-check-5338-1-3#
1788
+#
1789
+#
1790
+40 5440-1-39#
1791
+#
1792
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
1793
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1794
+5331
1795
+31635 535-15336-1-337 7f-check-537-1#
1796
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
1797
+#
1798
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
1799
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
1800
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
1801
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
1802
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1803
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
1804
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
1805
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
1806
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
1807
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
1808
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
1809
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
1810
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
1811
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
1812
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
1813
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
1814
+ 33593-1593-1-6#
1815
+595934
1816
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
1817
+2337-1-57578578-1-578-38#
1818
+0\x81\
1819
+ 162 \#
1820
+#
1821
+0\x81\
1822
+ 162 \xC0\x81\
1823
+ 163 \xC0\x81\
1824
+ 164 \xC0\x81\
1825
+ 165 \xC1111E \
1826
+ 170 \xE \
1827
+ 171 \xE \
1828
+ 172 \xE \
1829
+ 1777777718#
1830
+431-0-1#
1831
+#
1832
+#
1833
+437-0437-0-168#
1834
+438-04441 #
1835
+44#
1836
+#
1837
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1838
+9459-0#
1839
+461-0462-1-46463-1-4646446464#
1840
+0\x81\
1841
+ -441546 546-1-42#
1842
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1843
+5331
1844
+31635 535-15336-323239-040-0-7240-0-70578578-1-578-12#
1845
+0\x81\
1846
+ 162 \x##
1847
+0\x81\
1848
+ 162 \xC0\x81\
1849
+ 163 \xC0\x81\
1850
+ 164 \xC0\x81\
1851
+ 165 \xC1111E \
1852
+ 170 \xE \
1853
+ #
1854
+0\x81\
1855
+ 4241-0241-0-702245-0-725-0-7#
1856
+0\x81\
1857
+ -3#
1858
+#
1859
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1860
+ 0 binary 56-7-01W@XtW4250-0-7250-0-752554-0-7254-0-77578578-1-578-12#
1861
+0\x81\
1862
+ 162 \x##
1863
+0\x81\
1864
+ 162 \xC0\x81\
1865
+ 163 \xC0\x81\
1866
+ 164 \x#
1867
+0\x81\
1868
+ 55558-0-7559-063 \xC0\x81\
1869
+ 164 \xC0\x81\
1870
+ 165 \xC1111E \
1871
+ 170 \xE \
1872
+ 171 \xE \
1873
+0\x81\
1874
+ 168#
1875
+438-04441 #
1876
+44#
1877
+#
1878
+446-0446-0-1\4524-1524-1-31#
1879
+525-1-32265226-1-32#
1880
+#
1881
+32528-1-35295229-1-#
1882
+5331
1883
+31-1-3#
1884
+532-1-3#
1885
+#
1886
+53#
1887
+5334-1-335 535-15336-1-337 utf-check-537-1#
1888
+38 utf-check-5338-1-3#
1889
+#
1890
+#
1891
+40 5440-1-39#
1892
+#
1893
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
1894
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1895
+5331
1896
+31635 535-15336-1-337 7f-check-537-1#
1897
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
1898
+#
1899
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
1900
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
1901
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
1902
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
1903
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1904
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
1905
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
1906
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_C620-2-6620-2-666E_CR
1907
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1908
+s: ANY_CR LONE_CR
1909
+\
1910
+ -1-32#
1911
+#
1912
+32528-1-352952292
1913
+0\x893-1-49 162 \xC0\x81\
1914
+ 163 \xC0\x81\
1915
+163 \xC395-1-5397-1998-19443 \xC0\x81\
1916
+ 164 2626-2626-2-694627-2627-2-6963E_CR
1917
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1918
+s: ANY_CR LONE_CR
1919
+\
1920
+ -1-32#
1921
+#
1922
+32528-1-35295229
1923
+0\x893-1-49 162 \xC0\x81\
1924
+ 163 \xC0\x81\
1925
+163 \xC395-1-5397-1998-19443 \xC0\x81\
1926
+ 164 56658-2658-2-85658 #
1927
+#
1928
+560512O@1~fl,Z:Line endi13z#
1929
+0\x81\
1930
+ 162 \xC0\x81\
1931
+ 163 \xC0\x81\
1932
+ 164 \xC0\x81\
1933
+ 165 \xC1111E \
1934
+ 170 \xE \
1935
+ 171 \xE \
1936
+ 172 \xE \
1937
+ 1777777718#
1938
+431-0-1#
1939
+#
1940
+#
1941
+437-0437-0-168#
1942
+438-04441 #
1943
+44#
1944
+#
1945
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1946
+9459-0#
1947
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1948
+7474474-1-4-1-6#
1949
+#475-1-61-7477 477-1477-1-78#
1950
+479 utf-check-479-1474808480-1-9481#
1951
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
1952
+525-1-32265226-1-32#
1953
+#
1954
+32528-1-35295229532-1-3#
1955
+#
1956
+53#
1957
+5334-1k-5338-1-3#
1958
+#
1959
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1960
+ 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
1961
+ 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
1962
+ "\xFF\xFE" : "\xFE\xFF"}]CR LONE_CR
1963
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1964
+s: ANY_CR LONE_CR
1965
+\
1966
+ 1-1-57578578-1-578-12#
1967
+0\x81\
1968
+ 162 \x##
1969
+0\x81\
1970
+ 162 \xC0\x81\
1971
+ 163 \xC0\x81\
1972
+ 164 \xC0\x81\
1973
+ 165 \xC1111E \
1974
+ 170 \xE \
1975
+ 171 \xE \
1976
+ 172 \xE \
1977
+ 1777777718#
1978
+431-0-1#
1979
+#
1980
+#
1981
+437-0437-0-168#
1982
+438-04441 #
1983
+44#
1984
+#
1985
+446-0446-0-1\4524-1524-1-31#
1986
+525-1-32265226-1-32#
1987
+#
1988
+32528-1-35295229-1-#
1989
+5331
1990
+31-1-3#
1991
+532-1-3#
1992
+#
1993
+53#
1994
+5334-1-335 535-15336-1-337 utf-check-537-1#
1995
+38 utf-check-5338-1-3#
1996
+#
1997
+#
1998
+40 5440-1-39#
1999
+#
2000
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
2001
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
2002
+5331
2003
+31635 535-15336-1-337 7f-check-537-1#
2004
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
2005
+#
2006
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
2007
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
2008
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
2009
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
2010
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
2011
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
2012
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
2013
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
2014
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
2015
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
2016
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
2017
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
2018
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
2019
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
2020
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
2021
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
2022
+ 33593-1593-1-6#
2023
+595934
2024
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
2025
+2337-1-57578578-1-578-38#
2026
+0\x81\
2027
+ 162 \#
2028
+#
2029
+0\x81\
2030
+ 162 \xC0\x81\
2031
+ 163 \xC0\x81\
2032
+ 164 \xC0\x81\
2033
+ 165 \xC1111E \
2034
+ 170 \xE \
2035
+ 171 \xE \
2036
+ 172 \xE \
2037
+ 1777777718#
2038
+431-0-1#
2039
+#
2040
+#
2041
+437-0437-0-168#
2042
+438-04441 #
2043
+44#
2044
+#
2045
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2046
+9459-0#
2047
+461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
2048
+ 163 \xC0\x81\
2049
+ 164 \xC0115-0-71116-0-9-0#
2050
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
2051
+7474474-1-4-1-6#
2052
+#475-1-61-7477 477-1477-1-78#
2053
+479 utf-check-479-1474808480-#
2054
+0\x81\
2055
+ 162 \xC0\x81\
2056
+ 163 \xC0\x81\
2057
+ 164 \xC0\x81\
2058
+ 165 \xC1111E \
2059
+ 170 \xE \
2060
+ 171 \xE \
2061
+ 172 \xE \
2062
+ 1777777718#
2063
+431-0-1#
2064
+#
2065
+#
2066
+437-0437-0-168#
2067
+438-04441 #
2068
+44#
2069
+#
2070
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2071
+9459-0#
2072
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
2073
+0\x81\
2074
+ 162 \xC0\x81\
2075
+ 163BB\2131-0-1133-0 162 \xC0\x81\
2076
+ 163 \xC0\x81\
2077
+63 \xC134-0-171381\
2078
+ 162 \xC0\x81\
2079
+ 163 \xC0\x81\
2080
+ 164 \xC0\x81\
2081
+ 165 \xC1111E \
2082
+ 170 \xE \
2083
+ 171 \xE \
2084
+ 172 \xE \
2085
+ 1777777718#
2086
+431-0-1#
2087
+#
2088
+#
2089
+437-0437-0-168#
2090
+438-04441 #
2091
+44#
2092
+#
2093
+446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
2094
+ 164 \xC0\x81\
2095
+ 165 \xC1111E \
2096
+ 170 \xE \
2097
+ 171 \xE \
2098
+ 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
2099
+0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
2100
+ 164 \xC0\x81\
2101
+ 165 \xC1111E \
2102
+ 170 \xE \
2103
+ 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
2104
+#
2105
+#
2106
+437-0437-0-168#
2107
+438-04441 #
2108
+44#
2109
+#
2110
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
2111
+0\x81\
2112
+ 162 \xC0\x81\
2113
+ 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
2114
+ 163 \xC0\x81\
2115
+63 \154-0-25155-0155-0-27156-0156-0-289-1-#
2116
+5331
2117
+31635 #
2118
+0\x81\
2119
+ 162 \xC0\x81\
2120
+ 163 \xC0\x81\
2121
+ 164 \xC0\x81\
2122
+ 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
2123
+0\x81\
2124
+ -3#
2125
+#
2126
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
2127
+ 0 binary 56-7-01W@Xt5159-0159-0-2#
2128
+0\x81\
2129
+ -3#
2130
+#
2131
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
2132
+ 0 binary 56-7-01W@XtW60-0160-0-30#
2133
+0\x81\
2134
+ 162 \xC0\x81\
2135
+ 163 \xC0\x81\
2136
+ 164 \xC0\x81\
2137
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
2138
+0\x81\
2139
+ 162 \xC0\x81\
2140
+ 163 \xC0\x81\
2141
+ 164 \xC0\x81\
2142
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
2143
+ 163 \xC0\x81\
2144
+63 \xC0\x81\
2145
+ 164 \xC0\x81\
2146
+ 165 \xC1111E \
2147
+ 170 \xE \
2148
+ 171 \xE \
2149
+ 172 \xE \
2150
+ 1777777718#
2151
+431-0-1#
2152
+#
2153
+#
2154
+437-0437-0-168#
2155
+438-04441 #
2156
+44#
2157
+#
2158
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2159
+96111169-0-3169-0-34-0-1#
2160
+#
2161
+#
2162
+437-0437-0-168#
2163
+438-04441 #
2164
+44#
2165
+#
2166
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
2167
+0\x81\
2168
+ 162 \xC0\x81\
2169
+ 163 1170-0-3170-0-3 162 \xC0\x81\
2170
+ 163 \xC0\x81\
2171
+ 164 \xC0\x81\
2172
+ 165 \xC1111E \
2173
+ 170 \xE \
2174
+ 171 \xE \
2175
+ 172 \xE \
2176
+ 1777777718#
2177
+431-0-1#
2178
+#
2179
+#
2180
+437-0437-0-168#
2181
+438-04441 #
2182
+44#
2183
+#
2184
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2185
+9459-0#
2186
+461-0462-1-46463-1-4646446464-1- \xC0\x81\
2187
+ 163 \xC0\x81\
2188
+ 164 \xC0\x81\
2189
+ 165 \xC1111E \
2190
+ 170 \xE \
2191
+ 117 162 \xC0\x81\
2192
+ 163 \xC0\x81\
2193
+63 \xC0\x81\
2194
+ 164 \xC0\x81\
2195
+ 165 \xC1111E \
2196
+ 170 \xE \
2197
+ 171 \xE \
2198
+ 172 \xE \
2199
+ 1777777718#
2200
+431-0-1#
2201
+#
2202
+#
2203
+437-0437-0-168#
2204
+438-04441 #
2205
+44#
2206
+#
2207
+446-0446-0-1747448 49449-052 52-0-174524-0-2464 \xC0\x81\
2208
+ 165 \xC1111E \
2209
+ 170 \xE \
2210
+ 171 \xE \
2211
+ 172 \x#
2212
+0\x81\
2213
+ 162 \xC0\x81\
2214
+ 163 \xC0\x81\
2215
+ 164 \xx81\
2216
+ 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
2217
+7474474-1-4-12125-0-25ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2218
+s: ANY_CR LONE_CR
2219
+\
2220
+ 1-1-57578578-1-578-125-0-2564 \xC0\x81\
2221
+ 165 \xC1111E \
2222
+ 170 \xE \
2223
+ 171 \xE \
2224
+ 172 \x#
2225
+0\x81\
2226
+ 162 \xC0\x81\
2227
+ 163 \xC0\x81\
2228
+ 164 \xC0\x81\
2229
+ 165 \xC1111E \
2230
+ 170267-0267-0-83-1#
2231
+0\x81\
2232
+ 162 \334-1-335 532R L\
2233
+ 21 \x00A\rX@dMG,j:Line en26-0-26ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2234
+s: ANY_CR LONE_CR
2235
+\
2236
+ 1-1-57578578-1-578-126-0-2664 \xC0\x81\
2237
+ 165 \xC1111E \
2238
+ 170 \xE \
2239
+ 171 \xE \
2240
+ 172 \x#
2241
+0\x81\
2242
+ 162 \xC0\x81\
2243
+ 163 \xC0\x81\
2244
+ 164 \xC0\x81\
2245
+ 165 \xC1111E \
2246
+ 170267-0267-0-83-1#
2247
+0\x81\
2248
+ 162 \334-1-335 53127-0-27ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2249
+s: ANY_CR LONE_CR
2250
+\
2251
+ 1-1-57578578-1-578-127-0-2764 \xC0\x81\
2252
+ 165 \xC1111E \
2253
+ 170 \xE \
2254
+ 171 \xE \
2255
+ 172 \x#
2256
+0\x81\
2257
+ 162 \xC0\x81\
2258
+ 163 \xC0\x81\
2259
+ 164 \xC0\x81\
2260
+ 165 \xC1111E \
2261
+ 170267-0267-0-83-1#
2262
+0\x81\
2263
+ 162 \334-1-335 53128-0-28ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2264
+s: ANY_CR LONE_CR
2265
+\
2266
+ 1-1-57578578-1-578-128-0-2864 \xC0\x81\
2267
+ 165 \xC1111E \
2268
+ 170 \xE \
2269
+ 171 \xE \
2270
+ 172 \x#
2271
+0\x81\
2272
+ 162 \xC0\x81\
2273
+ 163 \xC0\x81\
2274
+ 164 \xC0\x81\
2275
+ 165 \xC1111E \
2276
+ 170267-0267-0-83-1#
2277
+0\x81\
2278
+ 162 \334-1-335 532-1-19333-13329ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2279
+s: ANY_CR LONE_CR
2280
+\
2281
+ 1-1-57578578-1-578-129-0-2952 52-0-17454 454-0-1754-05 456#
2282
+9459-0#
2283
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-#
2284
+0\x81\
2285
+ 162 \xC0\x81\
2286
+ 163 \xC0\x81\
2287
+ 164 \xC0\x81\
2288
+ 165 \xC1111E \3130-0-3 1777777718#
2289
+431-0-1#
2290
+#
2291
+#
2292
+437-0437-0-168#
2293
+438-04441 #
2294
+44#
2295
+#
2296
+446-0446-0-1747448 494490-0-378#
2297
+479 utf-check-479-1474808480-1-9481#
2298
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
2299
+525-57-111485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524523131-0-30ABC\rX@dMG,j:Line endings: ANY_CR \
2300
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
2301
+31-0-3152 52-0-17454 454-0-1754-05 456#
2302
+9459-0#
2303
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-#
2304
+0\x81\
2305
+ 162 \xC0\x81\
2306
+ 163 \xC0\x81\
2307
+ 164 \xC0\x81\
2308
+ 165 \xC1111E \4LW,O@1~fl,Z:Line\
2309
+ 0 binary 132-0-32 \xE \
2310
+ 172 \xE \
2311
+ 1777777718#
2312
+431-0-1#
2313
+#
2314
+#
2315
+437-0437-0-168#
2316
+438-04441 #
2317
+2-0-3252 52-0-17454 454-0-1754-05 456#
2318
+9459-0#
2319
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-#
2320
+0\x81\
2321
+ 162 \xC0\x81\
2322
+ 163 \xC0\x81\
2323
+ 164 \xC0\x81\
2324
+ 165 \xC1111E \38dM,1:7Z@16Other flags: NONEV17 \x33-0-33 \xE \
2325
+ 172 \xE \
2326
+ 1777777718#
2327
+431-0-1#
2328
+#
2329
+#
2330
+437-0437-0-168#
2331
+438-04441 #
2332
+44#
2333
+3364 \xC0\x81\
2334
+ 165 \xC1111E \
2335
+ 170 \xE \
2336
+ 171 \xE \
2337
+ 172 \x#
2338
+0\x81\
2339
+ 1\
2340
+ 164 \xC34 \xE \
2341
+ 172 \xE \
2342
+ 1777777718#
2343
+431-0-1#
2344
+#
2345
+#
2346
+437-0437-0-168#
2347
+438-04441 #
2348
+4-0-3452 52-0-17454 454-0-1754-05 456#
2349
+9459-0#
2350
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
2351
+0\x81\
2352
+ 162 \xC0\x81\
2353
+ 163 \xC0\x81\
2354
+ 164 \xC0\x81\
2355
+ 165 \xC1111E \
2356
+ 170 \xE \
2357
+ 171 \xE \
2358
+ 172 \xE \
2359
+ 1777777718#1135-0-35 \xE \
2360
+ 172 \xE \
2361
+ 1777777718#
2362
+431-0-1#
2363
+#
2364
+#
2365
+437-0437-0-168#
2366
+438-04441 #
2367
+5-0-35-57#
2368
+0\x81\
2369
+ 162 \xC0\x81\
2370
+ 163469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
2371
+7474474-1-4-1-6#
2372
+#475-1-61-7477 477-1477-1-78#
2373
+479 utf-check-479-1474808480-1-9481#
2374
+848282-1-1482-1-10148484484-1-1484-1\x81\
2375
+ 164 \xC0\x81\
2376
+ 165 \x136-0-36 \xE \
2377
+ 172 \xE \
2378
+ 1777777718#
2379
+431-0-1#
2380
+#
2381
+#
2382
+437-0437-0-168#
2383
+438-04441 #
2384
+6-0-3643-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
2385
+#
2386
+560512O@1~fl,Z:L \
2387
+ 171 \x37 \xE \
2388
+ 172 \xE \
2389
+ 1777777718#
2390
+431-0-1#
2391
+#
2392
+#
2393
+437-0437-0-168#
2394
+438-04441 #
2395
+7-0-3752 52-0-17454 454-0-1754-05 456#
2396
+9459-0#
2397
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
2398
+0\x81\
2399
+ 162 \xC0\x81\
2400
+ 163 \xC0\x81\
2401
+ 164 \xC0\x81\
2402
+ 165 \xC1111E \
2403
+ 170 \xE \
2404
+ 171 \xE \
2405
+ 172 \xE \
2406
+ 1777777718#
2407
+4138-0-38 \xE \
2408
+ 172 \xE \
2409
+ 1777777718#
2410
+431-0-1#
2411
+#
2412
+#
2413
+437-0437-0-168#
2414
+438-04441 #
2415
+8-0-38eq "littleEndian" ? \
2416
+ "\xF#
2417
+0\x81\
2418
+ 162 \xC0\x81\
2419
+ 163 \xC0\x81\
2420
+ 164 \xC0\x81\
2421
+ 165 \xC1111E \
2422
+ 17444-1-7444-1-7 162 \xC0\x81\
2423
+ 163 \xC0\x81\
2424
+ 164 \xC0\x81\
2425
+ 165 \xC1111E \
2426
+ 3139-0-39 \xE \
2427
+ 172 \xE \
2428
+ 1777777718#
2429
+431-0-1#
2430
+#
2431
+#
2432
+437-0437-0-168#
2433
+438-04441 #
2434
+9-0-3943-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
2435
+#
2436
+560512O@1~fl,Z:LxE \
2437
+ 1777777718#
2438
+431-0-1#
2439
+#
2440
+#
2441
+437-0437-0-168#
2442
+438-04441 #
2443
+44#
2444
+#
2445
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2446
+9459-0#
2447
+461 162 \xC0\x4140-0-4tW,j:Line enther #
2448
+0\x643-2-7dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line ending40-0-4 \
2449
+ 170 \xE \
2450
+ 171 \xE \
2451
+ 172 \xE \
2452
+ 1777777718#
2453
+431-0-1#
2454
+#
2455
+#
2456
+437-0437-0-168#
2457
+438-04441 #
2458
+44#
2459
+#
2460
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2461
+9459-0#
2462
+461 162 \xC0\x141-0-40ABC\rX@dMG,j:Line endings: ANY_CR \
2463
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
2464
+41-0-4152 52-0-17454 454-0-1754-05 456#
2465
+9459-0#
2466
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
2467
+0\x81\
2468
+ 162 \xC0\x81\
2469
+ 163 \xC0\x81\
2470
+ 164 \xC0\x81\
2471
+ 165 \xC1111E \
2472
+ 170 \xE \
2473
+ 171 \xE \
2474
+ 172 \xE \
2475
+ 1777777718#
2476
+4142-0-42ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2477
+s: ANY_CR LONE_CR
2478
+\
2479
+ 1-1-57578578-1-578-142-0-42 \xE \
2480
+ 172 \xE \
2481
+ 1777777718#
2482
+431-0-1#
2483
+#
2484
+#
2485
+437-0437-0-168#
2486
+438-04441 #
2487
+44#
2488
+#
2489
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2490
+9459-0#
2491
+461-0462-1-46463-1-464642 \xC0\x81\
2492
+ 163 \xC0\x81\
2493
+ 1143-0-43ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2494
+s: ANY_CR LONE_CR
2495
+\
2496
+ 1-1-57578578-1-578-143-0-4343-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
2497
+#
2498
+560512O@1~fl,Z:L-5397-1998-19443 \xC0\x81\
2499
+ 516-2-1516-2-14117-2517-2-14
2500
+0\x893-1-49 162 \xC0\x81\
2501
+ 163 \xC0\x81\
2502
+163 \xC395-1-5397-1998-19443 \xC0\x81\
2503
+ 1518-25144-0-44ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2504
+s: ANY_CR LONE_CR
2505
+\
2506
+ 1-1-57578578-1-578-144-0-447777718#
2507
+431-0-1#
2508
+#
2509
+#
2510
+437-0437-0-168#
2511
+438-04441 #
2512
+44#
2513
+#
2514
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2515
+9r flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
2516
+ 2 [1-16-1-487 utf-chec145-0-45ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2517
+s: ANY_CR LONE_CR
2518
+\
2519
+ 1-1-57578578-1-578-145-0-45eq "littleEndian" ? \
2520
+ "\xF#
2521
+0\x81\
2522
+ 162 \xC0\x81\
2523
+ 163 \xC0\x81\
2524
+ 164 \xC0\x81\
2525
+ 165 \xC1111E \
2526
+ 17444-1-7444-1-7 162 \xC0\x81\
2527
+31
2528
+31635 535-15336-1-337 7f-check-537-1#
2529
+38 u843-1-5444 544-1-41595450-1-44551551-1-10555146-0-46ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2530
+s: ANY_CR LONE_CR
2531
+\
2532
+ 1-1-57578578-1-578-146-0-4643-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
2533
+#
2534
+560512O@1~fl,Z:L163 \xC0\x81\
2535
+ 164 \xC0\x81\
2536
+ 165 \xC1111E \
2537
+ 170 \xE \
2538
+ 171 \xE \
2539
+ 172 \xE \
2540
+ 1777777718#
2541
+431-0-1#
2542
+#
2543
+#
2544
+437-0437-0-168#
2545
+438-04\
2546
+ 171 \xE \
2547
+ 172 \xE 47-0-47ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2548
+s: ANY_CR LONE_CR
2549
+\
2550
+ 1-1-57578578-1-578-147-0-475 \xC1111E \
2551
+ 170 \xE \
2552
+ 171 \xE \
2553
+ 172 \xE \
2554
+ 1777777718#
2555
+431-0-1#
2556
+#
2557
+#
2558
+437-0437-0-168#
2559
+438-04441 #
2560
+44#
2561
+#
2562
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2563
+9459-0#
2564
+461-0462-1-46463-1-46148-0-48ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2565
+s: ANY_CR LONE_CR
2566
+\
2567
+ 1-1-57578578-1-578-148-0-4855117-1-47558 #
2568
+#
2569
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
2570
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
2571
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
2572
+ 11149-0-49ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2573
+s: ANY_CR LONE_CR
2574
+\
2575
+ 1-1-57578578-1-578-149-0-4964 \xC0\x81\
2576
+ 165 \xC1111E \
2577
+ 170 \xE \
2578
+ 171 \xE \
2579
+ 172 \x#
2580
+0\x81\
2581
+ 1150-0-5 162 \xC0\x81\
2582
+ 163 \xC0\x81\
2583
+ 164 \xC0\x81\
2584
+ 165 \xC1111E \
2585
+ \xE \
2586
+0-0-52 \xC0\x81\
2587
+ 163 \xC0\x81\
2588
+ 164 \xC0\x81\
2589
+ 165 \xC1111E \
2590
+ 5569-2-4569-2-40yes71-2571-2-41yes57yesO@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
2591
+0\x8yes5#
2592
+0\x81\
2593
+ 162 \xC0\x81\
2594
+ 1636469469577-2-477-2-44yes55151-0-50ABC\rX@dMG,j:Line endings: ANY_CR \
2595
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
2596
+51-0-5154545-1-441546 546-1-42#
2597
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
2598
+5331
2599
+31635 5162 \xC0\x81\
2600
+52 164 \xC0\x81\
2601
+ 165 \xC1111E \
2602
+ 170 \xE \
2603
+ 171 \xE \
2604
+ 172 \x2-0-5264 \xC0\x81\
2605
+ 165 \xC1111E \
2606
+ 170 \xE \
2607
+ 171 \xE \
2608
+ 172 \x#
2609
+0\x81\
2610
+ 158dM,1:7Z@16Other flags: NONEV17 \x53-0-53 164 \xC0\x81\
2611
+ 165 \xC1111E \
2612
+ 170 \xE \
2613
+ 171 \xE \
2614
+ 172 \x3-0-5352 52-0-17454 454-0-1754-05 456#
2615
+9459-0#
2616
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
2617
+0\x81\
2618
+ 162 \xC0\x81\
2619
+ 163 \xC0\x81\
2620
+ 164 \xC0\x81\
2621
+ 165 \xC1111E \
2622
+ 170 \xE \
2623
+ 171 \xE \
2624
+ 172 \xE \
2625
+ 1777777718#
2626
+43\
2627
+ 162 \xC0\x81\
2628
+ 163 \xC0\x\x81\
2629
+ 164 \xC0\x81\
2630
+ 165 \xC1111E \
2631
+ 170 \xE \
2632
+ 171 \xE \
2633
+ 172 \xE \
2634
+ 1777777718#
2635
+431-0-1#
2636
+#
2637
+#
2638
+437-0437-0-168#
2639
+438-04441 #
2640
+44#
2641
+#
2642
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2643
+9459-0#
2644
+461163 \xC0\x81\
2645
+ 164 \xC0\x81\
2646
+ 165 \xC1111E \
2647
+ 170 \xE \
2648
+ 171 \xE \
2649
+ 450-1#
2650
+0\x81\
2651
+ 162 \xC0\x81\
2652
+ 163 \xC0\451-153 \xC0\x81\
2653
+ 164 \xC0\x81\
2654
+ 63 \xC0\x81\
2655
+ 164 \xC0\x81\
2656
+ 165 \xC1111E \
2657
+ 170 \xE \
2658
+ 171 \xE \
2659
+ 172 \xE \
2660
+ 1777777718#
2661
+431-0-1#
2662
+#
2663
+#
2664
+437-0437-0-168#
2665
+438-04441 #
2666
+44#
2667
+#
2668
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2669
+9459-0#
2670
+461-0462-1-46463-1-4646453-163 \xC0\x81\
2671
+ 164 \xC0\x81\
2672
+ 165 \xC1111E \
2673
+ 170 \xE \
2674
+ 171 \xE \
2675
+0\x81\
2676
+ 163 \xC0\x81\
2677
+ 164 \xC0\x81\
2678
+ 165 \xC1111E \
2679
+ 170 \xE \
2680
+ 171 \xE \
2681
+ 172 \xE \
2682
+ 1777777718#
2683
+431-0-1554-1xC0\x81\
2684
+ 163 \xC0\x81\
2685
+ 164 \xC0\x81\
2686
+ 165 \xC1111E \
2687
+ 170 \xE \
2688
+ #
2689
+0\x81\5457-1-8457-1-81#
2690
+0\x81\
2691
+ 162 \xC0\x81\
2692
+ 163 \xC0\x81\
2693
+ 164 \xC0\x81\
2694
+ 165 \xC1111E \
2695
+ 17endings: ANY_458-1458-1-826#
2696
+0\x81\
2697
+ 162 \xC0\x81\
2698
+ 163 \xC461-1-8363 \xC0\x81\
2699
+ 164 \xC0\x81\
2700
+ 63 \xC0\x81\
2701
+ 164 \xC0\x81\
2702
+ 165 \xC1111E \
2703
+ 170 \xE \
2704
+ 171 \xE \
2705
+ 172 \xE \
2706
+ 1777777718#
2707
+431-0-1#
2708
+#
2709
+#
2710
+437-0437-0-168#
2711
+438-04441 #
2712
+44#
2713
+#
2714
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2715
+9459-0#
2716
+461-0462-1-46463-1-46464664-1-8464-1-856467-1468-1-8468-17#
2717
+0\x81\
2718
+ 162 \xC0\x81\
2719
+ 163 \xC471-1-8873 \xC0\x81\
2720
+ 164 \xC0\x81\
2721
+ 63 \xC0\x81\
2722
+ 164 \xC0\x81\
2723
+ 165 \xC1111E \
2724
+ 170 \xE \
2725
+ 171 \xE \
2726
+ 172 \xE \
2727
+ 1777777718#
2728
+431-0-1#
2729
+#
2730
+#
2731
+437-0437-0-168#
2732
+438-04441 #
2733
+44#
2734
+#
2735
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2736
+9459-0#
2737
+461-0462-1-46463-1-4646774-1#
2738
+0\x81\
2739
+ 162 \xC0\x81\
2740
+ 1636469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
2741
+7474474-1-4-1-6#
2742
+#475-1-61-7477 477-1477-1-78#
2743
+479 utf-check-479-1474808480-1-9481#
2744
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
2745
+525-17477-1-962 \xC0\x81\
2746
+ 163 \xC0\x81\
2747
+ 164 \xC0\x81\
2748
+ 165 \xC1111E \
2749
+ 170 \xE \
2750
+ 171 \xE \
2751
+ 172 \xE \
2752
+ 1777777718#
2753
+4#
2754
+0\x81\
2755
+ 162 \xC0\x81\
2756
+ 163 \xC0\x81\
2757
+ 164 \xC0\x81\
2758
+ 165 \xC1111E \
2759
+ 170438-04441 #
2760
+44#
2761
+#
2762
+446-0446-0-1\452#
2763
+0\x8178-1-92#
2764
+0\x81\
2765
+ -3#
2766
+#
2767
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
2768
+ 0 binary 56-7-01W@XtW78#
2769
+0\x81\
2770
+ 162 \xC0\x81\
2771
+ 163 \xC0\81-1-93-13 \xC0\x81\
2772
+ 164 \xC0\x81\
2773
+ 63 \xC0\x81\
2774
+ 164 \xC0\x81\
2775
+ 165 \xC1111E \
2776
+ 170 \xE \
2777
+ 171 \xE \
2778
+ 172 \xE \
2779
+ 1777777718#
2780
+431-0-1#
2781
+#
2782
+#
2783
+437-0437-0-168#
2784
+438-04441 #
2785
+44#
2786
+#
2787
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2788
+9459-0#
2789
+461-0462-1-46463-1-464648484-1#
2790
+0\x81\
2791
+ 162 \xC0\x81\
2792
+ 163 \xC0\x81\
2793
+ 164 \xC0\x81\
2794
+ 165 \xC1111E \
2795
+ \xE \
2796
+ 172 \xE \
2797
+ 1777777718#
2798
+431-0-1#
2799
+#
2800
+#
2801
+437-0437-0-168#
2802
+438-04441 #
2803
+44#
2804
+#
2805
+446-0446-0-1\4524-1524-1-31#
2806
+525-1-32265226-1-32#4889-2-89-2-0yes49490-2-yes49yes494495-2-95-2-3yes4496-2-496-2-44497-2-yesyes00-2-yes12#
2807
+0\x81\
2808
+ 162 \x##
2809
+0\x81\
2810
+ 162 \xC0\x81\
2811
+ 163 \xC0\x81\
2812
+ 164 \xC0\x81\
2813
+ 165 \xC1111E \
2814
+ 170 \xE \
2815
+ 171 \xE \
2816
+ 172 \xE \
2817
+ 1777777718#
2818
+431-0-1#
2819
+#
2820
+#
2821
+437-0437-0-168#
2822
+438-04441 #
2823
+44#
2824
+#
2825
+446-0446-0-1\4524-1524-1-31#
2826
+525-1-32265226-1-32#
2827
+#
2828
+32528-1-35295229-#
2829
+0\x81\
2830
+ 162 \xC0\x81\
2831
+ 163 \xC0\x81\
2832
+ 164 \xC0\x81\
2833
+ 165 \xyes04-2-yes06-2-0507-2-9 \xC0\x81\
2834
+ 164 \xC0\x81\
2835
+ 165 \xC1111E \
2836
+ 170 \xE \
2837
+ 171 \xE \
2838
+ 172 \xE \
2839
+ 1777777718#
2840
+431-0-1#
2841
+#
2842
+#
2843
+437-0437-0-168#
2844
+438-04441 #
2845
+44#
2846
+0\x81\
2847
+ 162 \xC0\x81\
2848
+ 163 \xC0\x81\
2849
+ 164 \xC0\x81\
2850
+ 165 \xCyes508-2-1009-2-1yes10-2-110-2-1111-2-111-2-11yesyesxC0\x81\
2851
+ 163 \xC0\x81\
2852
+ 164 \xC0\x81\
2853
+ 165 \xC1111E \
2854
+ 170 \xE \
2855
+ 171 \xE \
2856
+ 172 \xE \
2857
+ 1777777718#
2858
+431-0-1#
2859
+#
2860
+#
2861
+437-0437-0-168#
2862
+438-04441 #
2863
+44#
2864
+#
2865
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2866
+9459-0#
2867
+461-0462-1-46463-1-4646446464-1-1465 465-1-2 \xC0\x81\
2868
+ 163 \xC0\x81\
2869
+ 164 \xC0\x81\
2870
+ 165 \xC1111E \
2871
+ yes16-2-1516-2-14#
2872
+0\x81\
2873
+ -3#
2874
+#
2875
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
2876
+ 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:f {$::RESULT ne $result}11kG,7:1\
2877
+s: ANY_CR LONE_CR
2878
+Other flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
2879
+ 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
2880
+ "\xFF\xFE" : "\xFE\xyesyes5220-2-1520-2-1652yes55224-2524-2-15525-2525-2-15226-2-126-2-1#
2881
+0\x81\
2882
+ 162 \xC0\x81\
2883
+ 163BB\xB438-04441 #
2884
+44#
2885
+#
2886
+446-0446-0-1\4524-1524-1-31#
2887
+525-1-32265226-1-32#
2888
+#
2889
+32528-1-35295229-1-#
2890
+5331
2891
+31-1-3#
2892
+532-1-3#
2893
+#
2894
+53#
2895
+5334-1-335 535-15336-1-337 utf-check-537-1#
2896
+38 utf-check-5338-1-3#
2897
+#
2898
+#
2899
+40 5440-1-39#
2900
+#
2901
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
2902
+547-15450-1-44551551-1-4#
2903
+0\x81\
2904
+ 162 \xC0\x81\
2905
+ 163 \xC0\x81\
2906
+ 164 \xC0\x81\
2907
+ 165 \xC1111E \
2908
+ 0\x81\
2909
+ 163 \xC0\x81\
2910
+ 164 \xC0\x81\
2911
+ 165 \xC1111E \
2912
+ 170 \xE \
2913
+ 171 \xE \
2914
+ 172 \xE \
2915
+ 1777777718#
2916
+431-0-1#
2917
+#
2918
+#
2919
+437-0437-0-168#
2920
+438-04441 #
2921
+44#
2922
+#
2923
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2924
+9459-0#
2925
+461-0462-1-46463-1-4646446464-1-1465 465-1-4C0\x81\
2926
+ 163 \xC0\x81\
2927
+ 164 \xC0\x81\
2928
+ 165 \xC1111E \
2929
+ 170 \xE \
2930
+ 175531-2-2438-04441 #
2931
+44#
2932
+#
2933
+446-0446-0-1\4524-1524-1-31#
2934
+525-1-32265226-1-32#
2935
+#
2936
+32528-1-35295229-1-#
2937
+5331
2938
+31-1-3#
2939
+532-1-3#
2940
+#
2941
+53#
2942
+5334-1-335 535-15336-1-337 utf-check-537-1#
2943
+38 utf-check-5338-1-3#
2944
+#
2945
+#
2946
+40 5440-1-39#
2947
+#
2948
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
2949
+547-15450-1-44551551-1-44#
2950
+0\x81\
2951
+ 162 \xC0\x81\
2952
+ 163 \xC0\x81\
2953
+ 164 \xC0\x81\
2954
+ 165 \xC1111E \
2955
+ 0\x81\
2956
+ 163 \xC0\x81\
2957
+ 164 \xC0\x81\
2958
+ 165 \xC1111E \
2959
+ 170 \xE \
2960
+ 171 \xE \
2961
+ 172 \xE \
2962
+ 1777777718#
2963
+431-0-1#
2964
+#
2965
+#
2966
+437-0437-0-168#
2967
+438-04441 #
2968
+44#
2969
+#
2970
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2971
+9459-0#
2972
+461-0462-1-46463-1-4646446464-1-1465 465-1-46\x81\
2973
+ 163 \xC0\x81\
2974
+ 164 \xC0\x81\
2975
+ 165 \xC1111E \
2976
+ 170 \xE \
2977
+ 171 5535-25336-2536-2-243537-2537-2-2453538-2-238-2-25539-2-2539-2-2540-2-2540-2-2641-2-241-2-26O@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
2978
+0\x81\
2979
+ 162 \xC0\x81\
2980
+ 163 \xC0\x81\
2981
+ 164 \xC0\x81\
2982
+ 165 \xC1111E \
2983
+ 170 \xE \
2984
+ 171 \xE \
2985
+ 172 \xE \
2986
+ 1777777718#
2987
+431-0-1#
2988
+#
2989
+#
2990
+437-0437-0-168#
2991
+438-04441 #
2992
+44#
2993
+#
2994
+446-0446-0-1747448 49449-052548-249-2-3549-2-30#
2995
+0\x81\
2996
+ -3#
2997
+#
2998
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
2999
+ 0 binary 56-7-01W@X5554-2 163 \xC0\x81\
3000
+ 164 \xC0\x81\
3001
+ 165 \xC1111E \
3002
+ 170 \xE \
3003
+ 171 \xE 62 \xC055O@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
3004
+0\555-2-3yes5556-255557-2-357-2-3yes5559-2-3yes5560-2-35661-2-361-2-36yes5662-2-362-2-375563-2-3563-2-37yes5664-2-364-2-38O@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
3005
+0\x81\
3006
+ 162 \xC0\x81\
3007
+ 163 \xC0\x81\
3008
+ 164 \xC0\x81\
3009
+ 165 \xC1111E \
3010
+ 170 \xE \
3011
+ 171 \xE \
3012
+ 172 \xE \
3013
+ 1777777718#
3014
+431-0-1#
3015
+#
3016
+#
3017
+437-0437-0-168#
3018
+438-04441 #
3019
+44#
3020
+#
3021
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456yes5yes1-4154545-1-441546 546-1-42#
3022
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
3023
+5331
3024
+31635 535-15336-1-337 7f-check-537-1#
3025
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
3026
+#
3027
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
3028
+Other#
3029
+0\x81\
3030
+ 162 \xC0\x81\
3031
+ 163 \xC0\x81\
3032
+ 164 \xC0\x81\
3033
+ 165 \xC1111E \
3034
+ 5569-2-4569-2-40yes71-2571-2-41yes57yesO@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
3035
+0\x8yes5#
3036
+0\x81\
3037
+ 162 \xC0\x81\
3038
+ 1636469469577-2-477-2-44yes57yes5881-2581-2-46#
3039
+0\x81\
3040
+ -3#
3041
+#
3042
+Z@Yyk,6:155-6-19@14Lyes82-2582-2-475endings: ANY_CR L\
3043
+ 21 \x00A\rX#
3044
+0\x81\
3045
+ 162 \xC0\x81\
3046
+ 163 \xC0\x81\
3047
+ 164 \xC0\x81\
3048
+ 165 \xC1111E \
3049
+ 170 \xE \
3050
+ 171 \xE \
3051
+ 172 \xE \
3052
+ 1777777718#
3053
+431-0-1#
3054
+#
3055
+#
3056
+437-0437-0-168#
3057
+438-04441 #
3058
+44#
3059
+#
3060
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#yes58O@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
3061
+0\x8585-2-48#
3062
+0\x81\
3063
+ -3#
3064
+#
3065
+Z@Yyk,6:155-6-19@14Lyes5587-2-4987-2-498588-2-5588-2-505889-2-56 455117-1-47558 #
3066
+#
3067
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
3068
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
3069
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
3070
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
3071
+ 20 \x00ABCDX@dMG,j:Line #
3072
+0\x81\
3073
+ 162 \xC0\x81\
3074
+ 163 \xC0\x81\
3075
+ 164 \xC0\x81\
3076
+ 165 \xC1111E \
3077
+ 595955596-2-55999-2-56600-2-500-2-566601-2-56602-2602-2-57603-2603-2-57#
3078
+0\x81\
3079
+ 162 \xC0\x81\
3080
+ 163469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3081
+7474474-1-4-1-6#
3082
+#475-1-61-7477 477-1477-1-78#
3083
+479 utf-check-479-1474808480-1-9481#
3084
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-146-0446-0-1747448 49449-052 52-0-1#
3085
+0\x81\
3086
+ 162 \xC0\x81\
3087
+ 163 \xC0\x81\
3088
+ 164 \xC0\x81\
3089
+ 165 \xC1111E \
3090
+ 170 \xE \
3091
+ 171 \xE \
3092
+ 172 \xE \
3093
+ 1777777718#
3094
+431-0-1#
3095
+#
3096
+#
3097
+437-0437-0-168#
3098
+438-04441 #
3099
+44#
3100
+#
3101
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3102
+0\x81\
3103
+ 162 \xC0\x81\
3104
+ 163 \xC0\x81\
3105
+ 164 \xC0\x81\
3106
+ 165 \xC1111E \
3107
+ 171612-2612-2-62#
3108
+0\x81\
3109
+ -3#
3110
+#
3111
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3112
+ 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:f {$::RESULT ne $result}11kG,7:1\
3113
+s: ANY_CR LONE_CR
3114
+Other flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
3115
+ 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
3116
+ "\xFF\xFE" : "\xFExC0\x81\
3117
+ 163 \xC0\x81\
3118
+ 164 \xC0\x81\
3119
+ 163 \xC0\x81\
3120
+ 164 \xC0\x81\
3121
+ 165 \xC1111E \
3122
+ 170 \xE \
3123
+ 171 \xE \
3124
+ 172 \xE \
3125
+ 1777777718#
3126
+431-0-1#
3127
+#
3128
+#
3129
+437-0437-0-168#
3130
+438-04441 #
3131
+44#
3132
+#
3133
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3134
+9459-0#
3135
+461-04\xC0\x81\
3136
+ 164 \xC0\x81\
3137
+ 165 \xC1111E \
3138
+ 170 \xE \
3139
+ 171 \xE \
3140
+ 1721617-2-6618-2#
3141
+0\x81\
3142
+ 162 \xC0\x81\
3143
+ 163 \xC0\x81\
3144
+ 164 \xC0\x81\
3145
+ 165 \xC1111E \
3146
+ -1-32268yes621-2-6yes623-2#
3147
+0\x81\
3148
+ 162 \xC0\x81\
3149
+ 163 \xC0\x81\
3150
+ 164 \xC0\x81\
3151
+ 165 \xC1111E \
3152
+ Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
3153
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
3154
+ yes62624-2yes62#
3155
+0\x81\
3156
+ 162 \xC0\x81\
3157
+ 163469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3158
+7474474-1-4-1-6#
3159
+#475-1-61-7477 477-1477-1-78#
3160
+479 utf-check-479-1474808480-1-9481#
3161
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
3162
+525-1-3 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
3163
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
3164
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
3165
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
3166
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
3167
+ 24 \x00ABCD\rX@dMG,j:Li#
3168
+0\x81\
3169
+ 162 \xC0\x81\
3170
+ 163 \xC0\x81\
3171
+ 164 \xC0\x81\
3172
+ 165 \xCyesyes631-2-7631-2-71yes6633-2-723-2-7yes63#
3173
+0\x81\
3174
+ 162 \xC0\x81\
3175
+ 163469469G,j:Line endings: ANY_CR L\
3176
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
3177
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
3178
+ 23 \x00ABC\rX@#
3179
+0\x81\
3180
+ 162 \xC0\x81\
3181
+ 163 \xC0\x81\
3182
+ 164 \xC0\x81\
3183
+ 165 \xC1111E \
3184
+ 170637-2-7637-2-74#
3185
+0\x81\
3186
+ 162 \xC0\x81\
3187
+ 163 \xC0\x81\
3188
+ 164 \xC0\x81\
3189
+ 165 \xC1111E \48548640-2-740-2-76#
3190
+0\x81\
3191
+ 162 \xC0\x81\
3192
+ 163 \xC0\x81\
3193
+ 164 \xC0\x81\
3194
+ 165 \xC1111E \485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
3195
+525-1-32265226-1-32#
3196
+#
3197
+32528-1-35295229532-1-3#
3198
+#
3199
+53#
3200
+5334-1k-5338-1-3#
3201
+#
3202
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3203
+ 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:f {$::RESULT ne $result}11kG,7:1\
3204
+s: ANY_CR LONE_CR
3205
+Other flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
3206
+ 642-2-7642-2-7ary 56-7-01W@XtW,j:Line enther #
3207
+0\x643-2-7dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
3208
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
3209
+ 19 \x00ABCX@dMG,j:Li#
3210
+0\x81\
3211
+ 162 \xC0\x81\
3212
+ 163 \xC0\x81\
3213
+ 164 \xC0\x81\
3214
+ 165 \xC1111E \
3215
+ 174#
3216
+0\x81\
3217
+ 162 \xC0\x81\
3218
+ 163469469646-2-79O\
3219
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
3220
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
3221
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
3222
+ 29 \x00A\r#
3223
+0\x81\
3224
+ 162 \xC0\x81\
3225
+ 163 \xC0\x81\
3226
+ 164 \xC0\x81\
3227
+ 165 \xC1111E \
3228
+ 170 63 \xC0\x81\
3229
+ 164 \xC0\x81\
3230
+ 165 \xC1111E \
3231
+ 170 \xE \
3232
+ 171 \xE \
3233
+ 172 \xE \
3234
+ 1777777718#
3235
+431-0-1#
3236
+#
3237
+#
3238
+437-0437-0-168#
3239
+438-04441 #
3240
+44#
3241
+#
3242
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3243
+9459-0#
3244
+461-0462-1-46463-1-464642 \xC0\x81\
3245
+ 163 \xC0\x81\
3246
+ 164 \xC0\x81\
3247
+ 165 \xC1111E \
3248
+ 170 \xE \
3249
+ 17649-2-8649-2-80#
3250
+0\x81\
3251
+ 162 651-2-8yes65652-2652-2-8yes55yes65657-2-8 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
3252
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
3253
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
3254
+ #
3255
+0\x81\
3256
+ 162 \xC0\x81\
3257
+ 163 \xC0\x81\
3258
+ 164 \xC0\x81\
3259
+ 165 \xC1yes659-2659-2-85yes6yesyes665yes667-2-89\xC0\x81\
3260
+ 164 \xC0\x81\
3261
+ 165 \xC1111E \
3262
+ 170 \xE \
3263
+ 171 \xE \
3264
+ #
3265
+0\x81670-2-97671-2-94-1524-1-31#
3266
+525-1-32265226-1-32#
3267
+#
3268
+0\x81\
3269
+ 162 \xC0\x81\
3270
+ 163 \xC0\x81\
3271
+ 164 \xC0\x81\
3272
+ 165 \xC1111E \
3273
+ 170 \xE \
3274
+ 171 \xE \
3275
+ 172 \xE \
3276
+ 1777777718#
3277
+431-0-1#
3278
+#
3279
+#
3280
+437-0437-0-168#
3281
+438-04441 #
3282
+44#
3283
+#
3284
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3285
+9673-27\xC0\x81\
3286
+ 164 \xC0\x81\
3287
+ 165 \xC1111E \
3288
+ 170 \xE \
3289
+ 171 \xE \
3290
+ 172 \xE \
3291
+ 1777777718#
3292
+431-0-1#
3293
+#
3294
+#
3295
+437-0437-0-168#
3296
+438-04441 #
3297
+44#
3298
+#
3299
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3300
+9459-0#
3301
+461-0462-1-46463-1-4646446462 \xC0\x81\
3302
+ 163 \xC0\x81\
3303
+ 164 \xC0\x81\
3304
+ 165 \xC1111E \
3305
+ 170 \xE \
3306
+ #
3307
+0\x81\
3308
+ 162 \xC0\x81\
3309
+ 163 \xC0\x81\
3310
+ 164 \xC0\x81\
3311
+ 165 \xC1111E \
3312
+ 170 \xE \
3313
+ 171 \xE \
3314
+ 172 \xE \
3315
+ 1777777718#
3316
+431-0-1#
3317
+#
3318
+#
3319
+437-0437-0-168#
3320
+438-04441 #
3321
+44#
3322
+#
3323
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3324
+9459-0#
3325
+6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3326
+7474474-1-4-1-6#
3327
+#475-1-61-7477 7677-2-9677-2-94#
3328
+0\x81\
3329
+ 162 438-04441 #
3330
+44#
3331
+#
3332
+446-0446-0-1\452#
3333
+0\x81\
3334
+ 162 \xC0\x81\
3335
+ 163 \xC0\x81\
3336
+ 164 \xC0\x81\
3337
+ 165 \xC1111E \
3338
+ 170 \xE \
3339
+ 171 \xE \
3340
+ 172 \xE \
3341
+ 1777777718#
3342
+431-0-1#
3343
+#
3344
+#
3345
+437-0437-0-168#
3346
+438-04441 #
3347
+44#
3348
+#
3349
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3350
+ 171 \xE \
3351
+ 172 \xE \
3352
+ 1777777718#
3353
+431-0-1#
3354
+#
3355
+#
3356
+437-0437-0-168#
3357
+438-04441 #
3358
+44#7#
3359
+0\x81\
3360
+ 162 \xC0\x81\
3361
+ 163 \xC0\x81\
3362
+ 164 \xC0\x81\
3363
+ 165 \xC1111E \
3364
+ 170 \xE \
3365
+ 171 \xE \
3366
+ 172 \xE \
3367
+ 1777777718#
3368
+431-0-1#
3369
+#
3370
+#
3371
+437-0437-0-168#
3372
+438-04441 #
3373
+44#
3374
+#
3375
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3376
+5450-1-44551551-1-105555555-1-4556 455117-1-47558 #
3377
+#
3378
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40680-2-9#
3379
+0\x81\
3380
+ 162 \xC0\x81\
3381
+ 163 \xC0\x81\
3382
+ 164 \xC0\x81\
3383
+ 165 \xC1111E \
3384
+ 170 \xE \
3385
+ 171 \xE \
3386
+ 172 \xE \
3387
+ MG,j:Line endings: ANY_CR\
3388
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
3389
+ 26 \x00AB\nX@d8#
3390
+0\x81\
3391
+ 162 \xC0\x81\
3392
+ 163 \xC0\x81\
3393
+ 164 \xC0\x81\
3394
+ 165 \xC1111E \
3395
+ 170 \xE \
3396
+ 171 \xE \
3397
+ 172 \xE \
3398
+ 1777777718#
3399
+431-0-1#
3400
+#
3401
+#
3402
+437-0437-0-168#
3403
+438-04441 #
3404
+44#
3405
+#
3406
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3407
+9r flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
3408
+ 2 [1-16-1-487 utf-check-487-148 END#
3409
+
3410
+$tempPath 100
3411
+492-2-492-2-498-2-498-2-5502-2-506-2-E_CR
3412
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3413
+s: ANY_CR LONE_CR
3414
+\
3415
+ -1-32#
3416
+#
3417
+32528-1-3520508-2508-2-1009-2-1509-2-10E_CR
3418
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3419
+s: ANY_CR LONE_CR
3420
+\
3421
+ -1-32#
3422
+#
3423
+32528-1-352E_CR
3424
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3425
+s: ANY_CR LONE_CR
3426
+\
3427
+ -1-32#
3428
+#
3429
+32528-1-352: ANY_CR \
3430
+ 30 \x00AB\r\nX@dMG,E_CR
3431
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3432
+s: ANY_CR LONE_CR
3433
+\
3434
+ -1-32#
3435
+#
3436
+32528-1-352514-29-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3437
+7474474-1-4-1-6#
3438
+#475-1-61-7477 47514-2-131
3439
+0\x893-1-49 162 \xC0\x81\
3440
+ 163 \xC0\x81\
3441
+163 \xC395-1-5397-1998-19443 \xC0\x81\
3442
+ 516-2-1516-2-14117-2517-2-14
3443
+0\x893-1-49 162 \xC0\x81\
3444
+ 163 \xC0\x81\
3445
+163 \xC395-1-5397-1998-19443 \xC0\x81\
3446
+ 1518-2518-2-15437-0437-0-168#
3447
+438-04441 #
3448
+44#
3449
+#
3450
+446-0446-0-1\4524-1524-1-31#
3451
+525-1-32265226-1-32#
3452
+#
3453
+32528-1-35295229-1-#
3454
+5331
3455
+31-1-3#
3456
+532-1-3#
3457
+#
3458
+53#
3459
+5334-1-335 535-15336-1-337 utf-check-537-1#
3460
+38 utf-check-5338-1-3#
3461
+#
3462
+#
3463
+40 5440-1-39#
3464
+#
3465
+3#
3466
+0\x81\
3467
+ 162 \xC0\x81\
3468
+ 163519-2-119-2-15
3469
+0\x893-1-49 162 \xC0\x81\
3470
+ 163 \xC0\x81\
3471
+163 \xC395-1-5397-1998-19443 \xC0\x81\
3472
+ 520-2eOrder) eq "littleEndian" ? \
3473
+ "\xFF\xFE" : "\xFE\88392-1392-1-499-1-#
3474
+5331
3475
+316520-2-162521-2-1521-2-16
3476
+0\x893-1-49 162 \xC0\x81\
3477
+ 163 \xC0\x81\
3478
+163 \xC395-1-5397-1998-19443 \xC0\x81\
3479
+ 560-2-3560-2-3561-2-36\
3480
+ 162 \xC0\x81\
3481
+ 163 \xC0\x0\x81\
3482
+ 163 \xC0\x81\
3483
+ 164 \xC0\x81\
3484
+ 165 \xC1111E \
3485
+ 170 \xE \
3486
+ 171 \xE \
3487
+ 172 \xE \
3488
+ 1777777718#
3489
+431-0-1#
3490
+#
3491
+#
3492
+437-0437-0-168#
3493
+438-04441 #
3494
+44#
3495
+#
3496
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3497
+9459-0#
3498
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3499
+7474474-1-4-1-6#
3500
+#475-1-61-7477 477-1477-1-78#
3501
+479 utf-check-479-1474808480-1-9481#
3502
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-458 #
3503
+#
3504
+560512O@1~fl,Z:Line endi13z#
3505
+0\x8166-2-39437-0437-0-168#
3506
+438-04441 #
3507
+44#
3508
+#
3509
+446-0446-0-1\4524-1524-1-31#
3510
+525-1-32265226-1-32#
3511
+#
3512
+32528-1-35295229-1-#
3513
+5331
3514
+31-1-3#
3515
+532-1-3#
3516
+#
3517
+53#
3518
+5334-1-335 535-15336-1-337#
3519
+0\x81\
3520
+ 162 \xC0\x81\
3521
+ 163 \xC0\x81\
3522
+ 164 \xC0\x81\
3523
+ 165 \xC1111E \
3524
+ 667-2-37572-2 164 \xC0\x81\
3525
+ 165 \xC1111E \
3526
+ 170 63 \xC0\x81\
3527
+ 164 \xC0\x81\
3528
+ 165 \572-2-42585-1-481-16-1-487 utf-check-487-14#
3529
+0\x81573-2-427574-2CR L\
3530
+ 21 \x00A\rX@dMG,j:Line e78 \
3531
+ 172 \xE \
3532
+ 1777777718#
3533
+0\x81\87-0437-0-168#
3534
+438-04441 #
3535
+44#
3536
+#
3537
+44#
3538
+0\x81\
3539
+ 162 \xC0\x81\
3540
+ 163 \xC0\x81\
3541
+ 164 \xC0\x81\
3542
+ 165 \xC1111E \
3543
+ 170 \xE \
3544
+ 171 \xE \
3545
+ 172 \xE \
3546
+ 1777777718#
3547
+431-0-1#
3548
+#
3549
+#
3550
+437-0437-0-168#
3551
+438-04441 #
3552
+44#
3553
+#
3554
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3555
+9459-0#
3556
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3557
+7474474-1-4-1-6#
3558
+#475-1-61-7477 477-1477-1-78#
3559
+479 utf-check-479-1474808480-1-9481#
3560
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
3561
+525-1-32265226-1-32#
3562
+#
3563
+32528-1-35295229532-1-3#
3564
+#
3565
+53#
3566
+5334-1k-5338-1-3#
3567
+#
3568
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3569
+ 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
3570
+ 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
3571
+ "\xFF\xFE" : "\xFE\xFF"}]CR LONE_CR
3572
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3573
+s: ANY_CR LONE_CR
3574
+\
3575
+ 1-1-57578578-1-578-12#
3576
+0\x81\
3577
+ 162 \x##
3578
+0\x81\
3579
+ 162 \xC0\x81\
3580
+ 163 \xC0\x81\
3581
+ 164 \xC0\x81\
3582
+ 165 \xC1111E \
3583
+ 170 \xE \
3584
+ 171 \xE \
3585
+ 172 \xE \
3586
+ 1777777718#
3587
+431-0-1#
3588
+#
3589
+#
3590
+437-0437-0-168#
3591
+438-04441 #
3592
+44#
3593
+#
3594
+446-0446-0-1\4524-1524-1-31#
3595
+525-1-32265226-1-32#
3596
+#
3597
+32528-1-35295229-1-#
3598
+5331
3599
+31-1-3#
3600
+532-1-3#
3601
+#
3602
+53#
3603
+5334-1-335 535-15336-1-337 utf-check-537-1#
3604
+38 utf-check-5338-1-3#
3605
+#
3606
+#
3607
+40 5440-1-39#
3608
+#
3609
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
3610
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
3611
+5331
3612
+31635 535-15336-1-337 7f-check-537-1#
3613
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
3614
+#
3615
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
3616
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
3617
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
3618
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
3619
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
3620
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
3621
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
3622
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
3623
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
3624
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
3625
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
3626
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
3627
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
3628
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
3629
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
3630
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
3631
+ 33593-1593-1-6#
3632
+595934
3633
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
3634
+2337-1-57578578-1-578-38#
3635
+0\x81\
3636
+ 162 \#
3637
+#
3638
+0\x81\
3639
+ 162 \xC0\x81\
3640
+ 163 \xC0\x81\
3641
+ 164 \xC0\x81\
3642
+ 165 \xC1111E \
3643
+ 170 \xE \
3644
+ 171 \xE \
3645
+ 172 \xE \
3646
+ 1777777718#
3647
+431-0-1#
3648
+#
3649
+#
3650
+437-0437-0-168#
3651
+438-04441 #
3652
+44#
3653
+#
3654
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3655
+9459-0#
3656
+461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
3657
+ 163 \xC0\x81\
3658
+ 164 \xC0115-0-71116-0-9-0#
3659
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3660
+7474474-1-4-1-6#
3661
+#475-1-61-7477 477-1477-1-78#
3662
+479 utf-check-479-1474808480-#
3663
+0\x81\
3664
+ 162 \xC0\x81\
3665
+ 163 \xC0\x81\
3666
+ 164 \xC0\x81\
3667
+ 165 \xC1111E \
3668
+ 170 \xE \
3669
+ 171 \xE \
3670
+ 172 \xE \
3671
+ 1777777718#
3672
+431-0-1#
3673
+#
3674
+#
3675
+437-0437-0-168#
3676
+438-04441 #
3677
+44#
3678
+#
3679
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3680
+9459-0#
3681
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
3682
+0\x81\
3683
+ 162 \xC0\x81\
3684
+ 163BB\2131-0-1133-0 162 \xC0\x81\
3685
+ 163 \xC0\x81\
3686
+63 \xC134-0-171381\
3687
+ 162 \xC0\x81\
3688
+ 163 \xC0\x81\
3689
+ 164 \xC0\x81\
3690
+ 165 \xC1111E \
3691
+ 170 \xE \
3692
+ 171 \xE \
3693
+ 172 \xE \
3694
+ 1777777718#
3695
+431-0-1#
3696
+#
3697
+#
3698
+437-0437-0-168#
3699
+438-04441 #
3700
+44#
3701
+#
3702
+446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
3703
+ 164 \xC0\x81\
3704
+ 165 \xC1111E \
3705
+ 170 \xE \
3706
+ 171 \xE \
3707
+ 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
3708
+0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
3709
+ 164 \xC0\x81\
3710
+ 165 \xC1111E \
3711
+ 170 \xE \
3712
+ 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
3713
+#
3714
+#
3715
+437-0437-0-168#
3716
+438-04441 #
3717
+44#
3718
+#
3719
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
3720
+0\x81\
3721
+ 162 \xC0\x81\
3722
+ 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
3723
+ 163 \xC0\x81\
3724
+63 \154-0-25155-0155-0-27156-0156-0-289-1-#
3725
+5331
3726
+31635 #
3727
+0\x81\
3728
+ 162 \xC0\x81\
3729
+ 163 \xC0\x81\
3730
+ 164 \xC0\x81\
3731
+ 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
3732
+0\x81\
3733
+ -3#
3734
+#
3735
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3736
+ 0 binary 56-7-01W@Xt5159-0159-0-2#
3737
+0\x81\
3738
+ -3#
3739
+#
3740
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3741
+ 0 binary 56-7-01W@XtW60-0160-0-30#
3742
+0\x81\
3743
+ 162 \xC0\x81\
3744
+ 163 \xC0\x81\
3745
+ 164 \xC0\x81\
3746
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
3747
+0\x81\
3748
+ 162 \xC0\x81\
3749
+ 163 \xC0\x81\
3750
+ 164 \xC0\x81\
3751
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
3752
+ 163 \xC0\x81\
3753
+63 \xC0\x81\
3754
+ 164 \xC0\x81\
3755
+ 165 \xC1111E \
3756
+ 170 \xE \
3757
+ 171 \xE \
3758
+ 172 \xE \
3759
+ 1777777718#
3760
+431-0-1#
3761
+#
3762
+#
3763
+437-0437-0-168#
3764
+438-04441 #
3765
+44#
3766
+#
3767
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3768
+96111169-0-3169-0-34-0-1#
3769
+#
3770
+#
3771
+437-0437-0-168#
3772
+438-04441 #
3773
+44#
3774
+#
3775
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
3776
+0\x81\
3777
+ 162 \xC0\x81\
3778
+ 163 1170-0-3170-0-3 162 \xC0\x81\
3779
+ 163 \xC0\x81\
3780
+ 164 \xC0\x81\
3781
+ 165 \xC1111E \
3782
+ 170 \xE \
3783
+ 171 \xE \
3784
+ 172 \xE \
3785
+ 1777777718#
3786
+431-0-1#
3787
+#
3788
+#
3789
+437-0437-0-168#
3790
+438-04441 #
3791
+44#
3792
+#
3793
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3794
+9459-0#
3795
+461-0462-1-46463-1-4646446464-1- \xC0\x81\
3796
+ 163 \xC0\x81\
3797
+ 164 \xC0\x81\
3798
+ 165 \xC1111E \
3799
+ 170 \xE \
3800
+ 117 162 \xC0\x81\
3801
+ 163 \xC0\x81\
3802
+63 \xC0\x81\
3803
+ 164 \xC0\x81\
3804
+ 165 \xC1111E \
3805
+ 170 \xE \
3806
+ 171 \xE \
3807
+ 172 \xE \
3808
+ 1777777718#
3809
+431-0-1#
3810
+#
3811
+#
3812
+437-0437-0-168#
3813
+438-04441 #
3814
+44#
3815
+#
3816
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3817
+91xC0\x81\
3818
+ 163 \xC0\x81\
3819
+ 164 \xC0\x81\
3820
+ 165 \xC1111E \
3821
+ 170 \xE \
3822
+ 11#
3823
+0\x81\
3824
+ 162 \xC0\x81\
3825
+ 163646171438-04441 #
3826
+44#
3827
+#
3828
+446-0446-0-1\452#
3829
+01711818 162 \xC0\x81\
3830
+ 163 \xC0\x81\
3831
+ 164 \xC0\x81\
3832
+ 165 \xC1111E \
3833
+ 170 \xE \
3834
+ 171 \xE \
3835
+ 172 \xE \
3836
+ 1777777718#
3837
+431-0-1#
3838
+#
3839
+#
3840
+437-0437-0-168#
3841
+438-04441 #
3842
+44#
3843
+#
3844
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3845
+9459-0#
3846
+461-0462-1-46463-1-4646446464-1-163 \xC0\x81\
3847
+ 164 \xC0\x55-0-4197-0-498-0198-0-492200-0-5222220205-0-505-0-52006-0-506-0-53-0@8wU,2:7-_@9LW,5:0-7\
3848
+s: ANY_CR LONE_CR
3849
+\
3850
+ 1-1-57578578-1-578-12#
3851
+0\x81\
3852
+ 162 \x##2007-0-5207-0-532208-0-508-0-54#
3853
+0\x81\
3854
+ 162 \xC0\x81\
3855
+ 163 \xC0\x81\
3856
+ 164 \xC0\x81\
3857
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
3858
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3859
+s: ANY_CR LONE_CR
3860
+\2009-0-5209-0-54#
3861
+0\x81\
3862
+ 162 \xC0\x81\
3863
+ 163 \xC0\x81\
3864
+ 164 \xC0\x81\
3865
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
3866
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3867
+s: ANY_CR LONE_CR
3868
+\2110-0-5210-0-5#
3869
+0\x81\
3870
+ 162 \xC0\x81\
3871
+ 163 \xC0\x81\
3872
+ 164 \xC0\x81\
3873
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
3874
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3875
+s: ANY_CR LONE_CR
3876
+\2211-0-511-0-55#
3877
+0\x81\
3878
+ 162 \xC0\x81\
3879
+ 163 \xC0\x81\
3880
+ 164 \xC0\x81\
3881
+ 165 \xC1111E \485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
3882
+525-1-32265226-1-321212-0-5212-0-56#
3883
+0\x81\
3884
+ 162 \xC0\x81\
3885
+ 163 \xC0\x81\
3886
+ 164 \xC0\x81\
3887
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
3888
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3889
+s: ANY_CR LONE_CR
3890
+\2113-0-5213-0-562214-0214-0-57-02xC0\x81\
3891
+ 163 \xC0\x81\
3892
+ 164 \xC0215-0-572216-0216-0-582117-0217-0-582118-0218-0-599-1-#
3893
+5331
3894
+31635 #
3895
+0\x81\
3896
+ 162 \xC0\x81\
3897
+ 163 \xC0\x81\
3898
+ 164 \xC0\x81\
3899
+ 165 \xC1111E 2219-0-5219-0-592220-0-6220-0-602#
3900
+0\x81\
3901
+ 162 \xC0\x81\
3902
+ 1632 \xC0\21-0-6022222-0-6222-0-6#
3903
+0\x81\
3904
+ -3#
3905
+#
3906
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3907
+ 0 binary 56-7-01W@XtW23-0-6223-0-61#
3908
+0\x81\
3909
+ 162 \xC0\x81\
3910
+ 163 \xC0\x81\
3911
+ 164 \xC0\x81\
3912
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2224-0224-0-629-1-#
3913
+5331
3914
+31635 #
3915
+0\x81\
3916
+ 162 \xC0\x81\
3917
+ 163 \xC0\x81\
3918
+ 164 \xC0\x81\
3919
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2225-0225-0-6#
3920
+0\x81\
3921
+ 162 \xC0\x81\
3922
+ 163 \xC0\x81\
3923
+ 164 \xC0\x81\
3924
+ 165 \xC1111E \485485-1-481-16-1-487 utf-c2226-0226-0-63#
3925
+0\x81\
3926
+ 162 \xC0\x81\
3927
+ 163 \xC0\x81\
3928
+ 164 \xC0\x81\
3929
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2#
3930
+0\x81\
3931
+ 162 \xC0\x81\
3932
+ 163BB\22220\x81\
3933
+ 163 \xC0\x81\
3934
+ 164 \0\x81\
3935
+ 163 \xC0\x81\
3936
+ 164 \xC0\x81\
3937
+ 165 \xC1111E \
3938
+ 170 \xE \
3939
+ 171 \xE \
3940
+ 172 \xE \
3941
+ 1777777718#
3942
+431-0-1#
3943
+#
3944
+#
3945
+437-0437-0-168#
3946
+438-04441 #
3947
+44#
3948
+#
3949
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3950
+9459-0#
3951
+461-0462-1334-0-6234-0-67#
3952
+0\x81\
3953
+ -441546 546-1-42#
3954
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
3955
+5331
3956
+31635 535-15336-235-0#
3957
+0\x81\
3958
+ 162 \xC0\x81\
3959
+ 163 \xC0\x81\
3960
+ 164 \xC0\x81\
3961
+ 165 \xC1111E \
3962
+ Other f11-578-12#
3963
+0\x81\
3964
+ 162 \x##
3965
+0\x81\
3966
+ 162 \xC0\x81\
3967
+ 163 \xC0\x81\
3968
+ 164 \xC0\x81\
3969
+ 165 \xC1111E \
3970
+ 170 \xE \
3971
+ 171 \xE \
3972
+ 172 \xE \
3973
+ 1777777718#
3974
+431-0-1#
3975
+#
3976
+#
3977
+437-0437-0-168#
3978
+438-04441 #
3979
+44#
3980
+#
3981
+446-0446-0-1\4524-1524-1-31#
3982
+525-1-32265226-1-32#
3983
+#
3984
+32528-1-35295229-1-#
3985
+5331
3986
+31-1-3#
3987
+532-1-3#
3988
+#
3989
+53#
3990
+5334-1-335 535-15336-1-337 utf-check-537-1#
3991
+38 utf-check-5338-1-3#
3992
+#
3993
+#
3994
+40 5440-1-39#
3995
+#
3996
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
3997
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
3998
+5331
3999
+31635 535-15336-1-337 7f-check-537-1#
4000
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
4001
+#
4002
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
4003
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
4004
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
4005
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
4006
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
4007
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
4008
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
4009
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
4010
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
4011
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
4012
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
4013
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
4014
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
4015
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
4016
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
4017
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
4018
+ 33593-1593-1-6#
4019
+595934
4020
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
4021
+2337-1-57578578-1-578-38#
4022
+0\x81\
4023
+ 162 \#
4024
+#
4025
+0\x81\
4026
+ 162 \xC0\x81\
4027
+ 163 \xC0\x81\
4028
+ 164 \xC0\x81\
4029
+ 165 \xC1111E \
4030
+ 170 \xE \
4031
+ 171 \xE \
4032
+ 172 \xE \
4033
+ 1777777718#
4034
+431-0-1#
4035
+#
4036
+#
4037
+437-0437-0-168#
4038
+438-04441 #
4039
+44#
4040
+#
4041
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4042
+9459-0#
4043
+461-0462-1-46463-1-4646446464#
4044
+0\x81\
4045
+ -441546 546-1-42#
4046
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4047
+5331
4048
+31635 535-15336-323239-040-0-7240-0-70578578-1-578-12#
4049
+0\x81\
4050
+ 162 \x##
4051
+0\x81\
4052
+ 162 \xC0\x81\
4053
+ 163 \xC0\x81\
4054
+ 164 \xC0\x81\
4055
+ 165 \xC1111E \
4056
+ 170 \xE \
4057
+ #
4058
+0\x81\
4059
+ 4241-0241-0-702245-0-725-0-7#
4060
+0\x81\
4061
+ -3#
4062
+#
4063
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4064
+ 0 binary 56-7-01W@XtW4250-0-7250-0-752554-0-7254-0-77578578-1-578-12#
4065
+0\x81\
4066
+ 162 \x##
4067
+0\x81\
4068
+ 162 \xC0\x81\
4069
+ 163 \xC0\x81\
4070
+ 164 \x#
4071
+0\x81\
4072
+ 55558-0-7559-063 \xC0\x81\
4073
+ 164 \xC0\x81\
4074
+ 165 \xC1111E \
4075
+ 170 \xE \
4076
+ 171 \xE \
4077
+0\x81\
4078
+ 168#
4079
+438-04441 #
4080
+44#
4081
+#
4082
+446-0446-0-1\4524-1524-1-31#
4083
+525-1-32265226-1-32#
4084
+#
4085
+32528-1-35295229-1-#
4086
+5331
4087
+31-1-3#
4088
+532-1-3#
4089
+#
4090
+53#
4091
+5334-1-335 535-15336-1-337 utf-check-537-1#
4092
+38 utf-check-5338-1-3#
4093
+#
4094
+#
4095
+40 5440-1-39#
4096
+#
4097
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
4098
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4099
+5331
4100
+31635 535-15336-1-337 7f-check-537-1#
4101
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
4102
+#
4103
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
4104
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
4105
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
4106
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
4107
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
4108
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
4109
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
4110
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_C620-2-6620-2-666E_CR
4111
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4112
+s: ANY_CR LONE_CR
4113
+\
4114
+ -1-32#
4115
+#
4116
+32528-1-352952292
4117
+0\x893-1-49 162 \xC0\x81\
4118
+ 163 \xC0\x81\
4119
+163 \xC395-1-5397-1998-19443 \xC0\x81\
4120
+ 164 2626-2626-2-694627-2627-2-6963E_CR
4121
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4122
+s: ANY_CR LONE_CR
4123
+\
4124
+ -1-32#
4125
+#
4126
+32528-1-35295229
4127
+0\x893-1-49 162 \xC0\x81\
4128
+ 163 \xC0\x81\
4129
+163 \xC395-1-5397-1998-19443 \xC0\x81\
4130
+ 164 56658-2658-2-85658 #
4131
+#
4132
+560512O@1~fl,Z:Line endi13z#
4133
+0\x81\
4134
+ 162 \xC0\x81\
4135
+ 163 \xC0\x81\
4136
+ 164 \xC0\x81\
4137
+ 165 \xC1111E \
4138
+ 170 \xE \
4139
+ 171 \xE \
4140
+ 172 \xE \
4141
+ 1777777718#
4142
+431-0-1#
4143
+#
4144
+#
4145
+437-0437-0-168#
4146
+438-04441 #
4147
+44#
4148
+#
4149
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4150
+9459-0#
4151
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
4152
+7474474-1-4-1-6#
4153
+#475-1-61-7477 477-1477-1-78#
4154
+479 utf-check-479-1474808480-1-9481#
4155
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
4156
+525-1-32265226-1-32#
4157
+#
4158
+32528-1-35295229532-1-3#
4159
+#
4160
+53#
4161
+5334-1k-5338-1-3#
4162
+#
4163
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4164
+ 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
4165
+ 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
4166
+ "\xFF\xFE" : "\xFE\xFF"}]CR LONE_CR
4167
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4168
+s: ANY_CR LONE_CR
4169
+\
4170
+ 1-1-57578578-1-578-12#
4171
+0\x81\
4172
+ 162 \x##
4173
+0\x81\
4174
+ 162 \xC0\x81\
4175
+ 163 \xC0\x81\
4176
+ 164 \xC0\x81\
4177
+ 165 \xC1111E \
4178
+ 170 \xE \
4179
+ 171 \xE \
4180
+ 172 \xE \
4181
+ 1777777718#
4182
+431-0-1#
4183
+#
4184
+#
4185
+437-0437-0-168#
4186
+438-04441 #
4187
+44#
4188
+#
4189
+446-0446-0-1\4524-1524-1-31#
4190
+525-1-32265226-1-32#
4191
+#
4192
+32528-1-35295229-1-#
4193
+5331
4194
+31-1-3#
4195
+532-1-3#
4196
+#
4197
+53#
4198
+5334-1-335 535-15336-1-337 utf-check-537-1#
4199
+38 utf-check-5338-1-3#
4200
+#
4201
+#
4202
+40 5440-1-39#
4203
+#
4204
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
4205
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4206
+5331
4207
+31635 535-15336-1-337 7f-check-537-1#
4208
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
4209
+#
4210
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
4211
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
4212
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
4213
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
4214
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
4215
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
4216
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
4217
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
4218
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
4219
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
4220
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
4221
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
4222
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
4223
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
4224
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
4225
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
4226
+ 33593-1593-1-6#
4227
+595934
4228
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
4229
+2337-1-57578578-1-578-38#
4230
+0\x81\
4231
+ 162 \#
4232
+#
4233
+0\x81\
4234
+ 162 \xC0\x81\
4235
+ 163 \xC0\x81\
4236
+ 164 \xC0\x81\
4237
+ 165 \xC1111E \
4238
+ 170 \xE \
4239
+ 171 \xE \
4240
+ 172 \xE \
4241
+ 1777777718#
4242
+431-0-1#
4243
+#
4244
+#
4245
+437-0437-0-168#
4246
+438-04441 #
4247
+44#
4248
+#
4249
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4250
+9459-0#
4251
+461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
4252
+ 163 \xC0\x81\
4253
+ 164 \xC0115-0-71116-0-9-0#
4254
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
4255
+7474474-1-4-1-6#
4256
+#475-1-61-7477 477-1477-1-78#
4257
+479 utf-check-479-1474808480-#
4258
+0\x81\
4259
+ 162 \xC0\x81\
4260
+ 163 \xC0\x81\
4261
+ 164 \xC0\x81\
4262
+ 165 \xC1111E \
4263
+ 170 \xE \
4264
+ 171 \xE \
4265
+ 172 \xE \
4266
+ 1777777718#
4267
+431-0-1#
4268
+#
4269
+#
4270
+437-0437-0-168#
4271
+438-04441 #
4272
+44#
4273
+#
4274
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4275
+9459-0#
4276
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
4277
+0\x81\
4278
+ 162 \xC0\x81\
4279
+ 163BB\2131-0-1133-0 162 \xC0\x81\
4280
+ 163 \xC0\x81\
4281
+63 \xC134-0-171381\
4282
+ 162 \xC0\x81\
4283
+ 163 \xC0\x81\
4284
+ 164 \xC0\x81\
4285
+ 165 \xC1111E \
4286
+ 170 \xE \
4287
+ 171 \xE \
4288
+ 172 \xE \
4289
+ 1777777718#
4290
+431-0-1#
4291
+#
4292
+#
4293
+437-0437-0-168#
4294
+438-04441 #
4295
+44#
4296
+#
4297
+446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
4298
+ 164 \xC0\x81\
4299
+ 165 \xC1111E \
4300
+ 170 \xE \
4301
+ 171 \xE \
4302
+ 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
4303
+0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
4304
+ 164 \xC0\x81\
4305
+ 165 \xC1111E \
4306
+ 170 \xE \
4307
+ 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
4308
+#
4309
+#
4310
+437-0437-0-168#
4311
+438-04441 #
4312
+44#
4313
+#
4314
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
4315
+0\x81\
4316
+ 162 \xC0\x81\
4317
+ 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
4318
+ 163 \xC0\x81\
4319
+63 \154-0-25155-0155-0-27156-0156-0-289-1-#
4320
+5331
4321
+31635 #
4322
+0\x81\
4323
+ 162 \xC0\x81\
4324
+ 163 \xC0\x81\
4325
+ 164 \xC0\x81\
4326
+ 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
4327
+0\x81\
4328
+ -3#
4329
+#
4330
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4331
+ 0 binary 56-7-01W@Xt5159-0159-0-2#
4332
+0\x81\
4333
+ -3#
4334
+#
4335
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4336
+ 0 binary 56-7-01W@XtW60-0160-0-30#
4337
+0\x81\
4338
+ 162 \xC0\x81\
4339
+ 163 \xC0\x81\
4340
+ 164 \xC0\x81\
4341
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
4342
+0\x81\
4343
+ 162 \xC0\x81\
4344
+ 163 \xC0\x81\
4345
+ 164 \xC0\x81\
4346
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
4347
+ 163 \xC0\x81\
4348
+63 \xC0\x81\
4349
+ 164 \xC0\x81\
4350
+ 165 \xC1111E \
4351
+ 170 \xE \
4352
+ 171 \xE \
4353
+ 172 \xE \
4354
+ 1777777718#
4355
+431-0-1#
4356
+#
4357
+#
4358
+437-0437-0-168#
4359
+438-04441 #
4360
+44#
4361
+#
4362
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4363
+96111169-0-3169-0-34-0-1#
4364
+#
4365
+#
4366
+437-0437-0-168#
4367
+438-04441 #
4368
+44#
4369
+#
4370
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
4371
+0\x81\
4372
+ 162 \xC0\x81\
4373
+ 163 1170-0-3170-0-3 162 \xC0\x81\
4374
+ 163 \xC0\x81\
4375
+ 164 \xC0\x81\
4376
+ 165 \xC1111E \
4377
+ 170 \xE \
4378
+ 171 \xE \
4379
+ 172 \xE \
4380
+ 1777777718#
4381
+431-0-1#
4382
+#
4383
+#
4384
+437-0437-0-168#
4385
+438-04441 #
4386
+44#
4387
+#
4388
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4389
+9459-0#
4390
+461-0462-1-46463-1-4646446464-1- \xC0\x81\
4391
+ 163 \xC0\x81\
4392
+ 164 \xC0\x81\
4393
+ 165 \xC1111E \
4394
+ 170 \xE \
4395
+ 117 162 \xC0\x81\
4396
+ 163 \xC0\x81\
4397
+63 \xC0\x81\
4398
+ 164 \xC0\x81\
4399
+ 165 \xC1111E \
4400
+ 170 \xE \
4401
+ 171 \xE \
4402
+ 172 \xE \
4403
+ 1777777718#
4404
+431-0-1#
4405
+#
4406
+#
4407
+437-0437-0-168#
4408
+438-04441 #
4409
+44#
4410
+#
4411
+446-0446-0-1747448 49449-052 52-0-17454-0-5452 52-0-17454 454-0-1754-05 456#
4412
+9459-0#
4413
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4414
+0\x81\
4415
+ 162 \xC0\x81\
4416
+ 163 \xC0\x81\
4417
+ 164 \xC0\x81\
4418
+ 165 \xC1111E \
4419
+ 170 \xE \
4420
+ 171 \xE \
4421
+ 172 \xE \
4422
+ 1777777718#
4423
+43155-0-55 164 \xC0\x81\
4424
+ 165 \xC1111E \
4425
+ 170 \xE \
4426
+ 171 \xE \
4427
+ 172 \x5-0-5552 52-0-17454 454-0-1754-05 456#
4428
+9459-0#
4429
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4430
+0\x81\
4431
+ 162 \xC0\x81\
4432
+ 163 \xC0\x81\
4433
+ 164 \xC0\x81\
4434
+ 165 \xC1111E \
4435
+ 170 \xE \
4436
+ 171 \xE \
4437
+ 172 \xE \
4438
+ 1777777718#
4439
+43R L\
4440
+ 21 \x00A\rX@dMG,j:Line en56-0-56 164 \xC0\x81\
4441
+ 165 \xC1111E \
4442
+ 170 \xE \
4443
+ 171 \xE \
4444
+ 172 \x6-0-5652 52-0-17454 454-0-1754-05 456#
4445
+9459-0#
4446
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4447
+0\x81\
4448
+ 162 \xC0\x81\
4449
+ 163 \xC0\x81\
4450
+ 164 \xC0\x81\
4451
+ 165 \xC1111E \
4452
+ 170 \xE \
4453
+ 171 \xE \
4454
+ 172 \xE \
4455
+ 1777777718#
4456
+43\
4457
+ 171 \xE \
4458
+ 172 \xE 57-0-57 164 \xC0\x81\
4459
+ 165 \xC1111E \
4460
+ 170 \xE \
4461
+ 171 \xE \
4462
+ 172 \x7-0-5752 52-0-17454 454-0-1754-05 456#
4463
+9459-0#
4464
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4465
+0\x81\
4466
+ 162 \xC0\x81\
4467
+ 163 \xC0\x81\
4468
+ 164 \xC0\x81\
4469
+ 165 \xC1111E \
4470
+ 170 \xE \
4471
+ 171 \xE \
4472
+ 172 \xE \
4473
+ 1777777718#
4474
+4158-0-58 164 \xC0\x81\
4475
+ 165 \xC1111E \
4476
+ 170 \xE \
4477
+ 171 \xE \
4478
+ 172 \x8-0-5852 52-0-17454 454-0-1754-05 456#
4479
+9459-0#
4480
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4481
+0\x81\
4482
+ 162 \xC0\x81\
4483
+ 163 \xC0\x81\
4484
+ 164 \xC0\x81\
4485
+ 165 \xC1111E \
4486
+ 170 \xE \
4487
+ 171 \xE \
4488
+ 172 \xE \
4489
+ 1777777718#
4490
+4159-0-59 164 \xC0\x81\
4491
+ 165 \xC1111E \
4492
+ 170 \xE \
4493
+ 171 \xE \
4494
+ 172 \x9-0-5952 52-0-17454 454-0-1754-05 456#
4495
+9459-0#
4496
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4497
+0\x81\
4498
+ 162 \xC0\x81\
4499
+ 163 \xC0\x81\
4500
+ 164 \xC0\x81\
4501
+ 165 \xC1111E \
4502
+ 170 \xE \
4503
+ 171 \xE \
4504
+ 172 \xE \
4505
+ 1777777718#
4506
+4160-0-6 165 \xC1111E \
4507
+ yes16-2-1516-2-14#
4508
+0\x81\
4509
+ -3#
4510
+#
4511
+Z@Yyk,6:155-6-19@14LW,O0-0-6 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
4512
+7474474-1-4-1-6#
4513
+#475-1-61-7477 477-1477-1-78#
4514
+479 utf-check-479-1474808480-1-9481#
4515
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-chec161-0-60ABC\rX@dMG,j:Line endings: ANY_CR \
4516
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
4517
+61-0-61eq "littleEndian" ? \
4518
+ "\xF#
4519
+0\x81\
4520
+ 162 \xC0\x81\
4521
+ 163 \xC0\x81\
4522
+ 164 \xC0\x81\
4523
+ 165 \xC1111E \
4524
+ 17444-1-7444-1-7 162 \xC0\x81\
4525
+31
4526
+31635 535-15336-1-337 7f-check-537-1#
4527
+38 u843-1-5444 544-1-41595450-1-44551551-1-1055552 \xC0\x81\
4528
+ 163 \xC0\451-153 \62-0-62ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
4529
+s: ANY_CR LONE_CR
4530
+\
4531
+ 1-1-57578578-1-578-162-0-62eq "littleEndian" ? \
4532
+ "\xF#
4533
+0\x81\
4534
+ 162 \xC0\x81\
4535
+ 163 \xC0\x81\
4536
+ 164 \xC0\x81\
4537
+ 165 \xC1111E \
4538
+ 17444-1-7444-1-7 162 \xC0\x81\
4539
+31
4540
+31635 535-15336-1-337 7f-check-537-1#
4541
+38 u843-1-5444 544-1-41595450-1-44551551-1-1055558dM,1:7Z@16Other flags: NONEV17 \x63-0-63ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
4542
+s: ANY_CR LONE_CR
4543
+\
4544
+ 1-1-57578578-1-578-163-0-63eq "littleEndian" ? \
4545
+ "\xF#
4546
+0\x81\
4547
+ 162 \xC0\x81\
4548
+ 163 \xC0\x81\
4549
+ 164 \xC0\x81\
4550
+ 165 \xC1111E \
4551
+ 17444-1-7444-1-7 162 \xC0\x81\
4552
+31
4553
+31635 535-15336-1-337 7f-check-537-1#
4554
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555\
4555
+ 162 \x\xther flags: NONV@8wU,2:7-_@9LW,5:0-7\
4556
+s: ANY_CR LONE_CR
4557
+\
4558
+ 1-1-57578578-1-578-12#
4559
+0\x81\
4560
+ 162 \x##
4561
+0\x81\
4562
+ 162 \xC0\x81\
4563
+ 163 \xC0\x81\
4564
+ 164 \xC0\x81\
4565
+ 165 \xC1111E \
4566
+ 170 \xE \
4567
+ 171 \xE \
4568
+ 172 \xE \
4569
+ 1777777718#
4570
+431-0-1#
4571
+#
4572
+#
4573
+437-0437-0-168#
4574
+438-04441 #
4575
+44#
4576
+#
4577
+446-0446-0-1\4524-1524-1-31#
4578
+525-1-32265226-1-32#
4579
+#
4580
+32528-1-35295229-1-#
4581
+5331
4582
+31-1-3#
4583
+532-1-3#
4584
+#
4585
+53#
4586
+5334-1-335 535-15336-1-337 utf-check-537-1#
4587
+38 utf-check-5338-1-3#
4588
+#
4589
+#
4590
+40 5440-1-39#
4591
+#
4592
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
4593
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4594
+5331
4595
+31635 535-15336-1-337 7f-check-537-1#
4596
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
4597
+#
4598
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
4599
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
4600
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
4601
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
4602
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
4603
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
4604
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
4605
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
4606
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
4607
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
4608
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
4609
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
4610
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
4611
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
4612
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
4613
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
4614
+ 33593-1593-1-6#
4615
+595934
4616
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
4617
+2337-1-57578578-1-578-38#
4618
+0\x81\
4619
+ 162 \#
4620
+#
4621
+0\x81\
4622
+ 162 \xC0\x81\
4623
+ 163 \xC0\x81\
4624
+ 164 \xC0\x81\
4625
+ 165 \xC1111E \
4626
+ 170 \xE \
4627
+ 171 \xE \
4628
+ 172 \xE \
4629
+ 1777777718#
4630
+431-0-1#
4631
+#
4632
+#
4633
+437-0437-0-168#
4634
+438-04441 #
4635
+44#
4636
+#
4637
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4638
+9459-0#
4639
+461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
4640
+ 163 \xC0\x81\
4641
+ 164 \xC0115-0-71116-0-9-0#
4642
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
4643
+7474474-1-4-1-6#
4644
+#475-1-61-7477 477-1477-1-78#
4645
+479 utf-check-479-1474808480-#
4646
+0\x81\
4647
+ 162 \xC0\x81\
4648
+ 163 \xC0\x81\
4649
+ 164 \xC0\x81\
4650
+ 165 \xC1111E \
4651
+ 170 \xE \
4652
+ 171 \xE \
4653
+ 172 \xE \
4654
+ 1777777718#
4655
+431-0-1#
4656
+#
4657
+#
4658
+437-0437-0-168#
4659
+438-04441 #
4660
+44#
4661
+#
4662
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4663
+9459-0#
4664
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
4665
+0\x81\
4666
+ 162 \xC0\x81\
4667
+ 163BB\2131-0-1133-0 162 \xC0\x81\
4668
+ 163 \xC0\x81\
4669
+63 \xC134-0-171381\
4670
+ 162 \xC0\x81\
4671
+ 163 \xC0\x81\
4672
+ 164 \xC0\x81\
4673
+ 165 \xC1111E \
4674
+ 170 \xE \
4675
+ 171 \xE \
4676
+ 172 \xE \
4677
+ 1777777718#
4678
+431-0-1#
4679
+#
4680
+#
4681
+437-0437-0-168#
4682
+438-04441 #
4683
+44#
4684
+#
4685
+446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
4686
+ 164 \xC0\x81\
4687
+ 165 \xC1111E \
4688
+ 170 \xE \
4689
+ 171 \xE \
4690
+ 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
4691
+0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
4692
+ 164 \xC0\x81\
4693
+ 165 \xC1111E \
4694
+ 170 \xE \
4695
+ 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
4696
+#
4697
+#
4698
+437-0437-0-168#
4699
+438-04441 #
4700
+44#
4701
+#
4702
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
4703
+0\x81\
4704
+ 162 \xC0\x81\
4705
+ 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
4706
+ 163 \xC0\x81\
4707
+63 \154-0-25155-0155-0-27156-0156-0-289-1-#
4708
+5331
4709
+31635 #
4710
+0\x81\
4711
+ 162 \xC0\x81\
4712
+ 163 \xC0\x81\
4713
+ 164 \xC0\x81\
4714
+ 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
4715
+0\x81\
4716
+ -3#
4717
+#
4718
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4719
+ 0 binary 56-7-01W@Xt5159-0159-0-2#
4720
+0\x81\
4721
+ -3#
4722
+#
4723
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4724
+ 0 binary 56-7-01W@XtW60-0160-0-30#
4725
+0\x81\
4726
+ 162 \xC0\x81\
4727
+ 163 \xC0\x81\
4728
+ 164 \xC0\x81\
4729
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
4730
+0\x81\
4731
+ 162 \xC0\x81\
4732
+ 163 \xC0\x81\
4733
+ 164 \xC0\x81\
4734
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
4735
+ 163 \xC0\x81\
4736
+63 \xC0\x81\
4737
+ 164 \xC0\x81\
4738
+ 165 \xC1111E \
4739
+ 170 \xE \
4740
+ 171 \xE \
4741
+ 172 \xE \
4742
+ 1777777718#
4743
+431-0-1#
4744
+#
4745
+#
4746
+437-0437-0-168#
4747
+438-04441 #
4748
+44#
4749
+#
4750
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4751
+96111169-0-3169-0-34-0-1#
4752
+#
4753
+#
4754
+437-0437-0-168#
4755
+438-04441 #
4756
+44#
4757
+#
4758
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
4759
+0\x81\
4760
+ 162 \xC0\x81\
4761
+ 163 1170-0-3170-0-3 162 \xC0\x81\
4762
+ 163 \xC0\x81\
4763
+ 164 \xC0\x81\
4764
+ 165 \xC1111E \
4765
+ 170 \xE \
4766
+ 171 \xE \
4767
+ 172 \xE \
4768
+ 1777777718#
4769
+431-0-1#
4770
+#
4771
+#
4772
+437-0437-0-168#
4773
+438-04441 #
4774
+44#
4775
+#
4776
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4777
+9459-0#
4778
+461-0462-1-46463-1-4646446464-1- \xC0\x81\
4779
+ 163 \xC0\x81\
4780
+ 164 \xC0\x81\
4781
+ 165 \xC1111E \
4782
+ 170 \xE \
4783
+ 117 162 \xC0\x81\
4784
+ 163 \xC0\x81\
4785
+63 \xC0\x81\
4786
+ 164 \xC0\x81\
4787
+ 165 \xC1111E \
4788
+ 170 \xE \
4789
+ 171 \xE \
4790
+ 172 \xE \
4791
+ 1777777718#
4792
+431-0-1#
4793
+#
4794
+#
4795
+437-0437-0-168#
4796
+438-04441 #
4797
+44#
4798
+#
4799
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4800
+91xC0\x81\
4801
+ 163 \xC0\x81\
4802
+ 164 \xC0\x81\
4803
+ 165 \xC1111E \
4804
+ 170 \xE \
4805
+ 11#
4806
+0\x81\
4807
+ 162 \xC0\x81\
4808
+ 163646171438-04441 #
4809
+44#
4810
+#
4811
+446-0446-0-1\452#
4812
+01711818 162 \xC0\x81\
4813
+ 163 \xC0\x81\
4814
+ 164 \xC0\x81\
4815
+ 165 \xC1111E \
4816
+ 170 \xE \
4817
+ 171 \xE \
4818
+ 172 \xE \
4819
+ 1777777718#
4820
+431-0-1#
4821
+#
4822
+#
4823
+437-0437-0-168#
4824
+438-04441 #
4825
+44#
4826
+#
4827
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4828
+9459-0#
4829
+461-0462-1-46463-1-4646446464-1-163 \xC0\x81\
4830
+ 164 \xC0\x55-0-4197-0-498-0198-0-492200-0-5222220205-0-505-0-52006-0-506-0-53-0@8wU,2:7-_@9LW,5:0-7\
4831
+s: ANY_CR LONE_CR
4832
+\
4833
+ 1-1-57578578-1-578-12#
4834
+0\x81\
4835
+ 162 \x##2007-0-5207-0-532208-0-508-0-54#
4836
+0\x81\
4837
+ 162 \xC0\x81\
4838
+ 163 \xC0\x81\
4839
+ 164 \xC0\x81\
4840
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
4841
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4842
+s: ANY_CR LONE_CR
4843
+\2009-0-5209-0-54#
4844
+0\x81\
4845
+ 162 \xC0\x81\
4846
+ 163 \xC0\x81\
4847
+ 164 \xC0\x81\
4848
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
4849
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4850
+s: ANY_CR LONE_CR
4851
+\2110-0-5210-0-5#
4852
+0\x81\
4853
+ 162 \xC0\x81\
4854
+ 163 \xC0\x81\
4855
+ 164 \xC0\x81\
4856
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
4857
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4858
+s: ANY_CR LONE_CR
4859
+\2211-0-511-0-55#
4860
+0\x81\
4861
+ 162 \xC0\x81\
4862
+ 163 \xC0\x81\
4863
+ 164 \xC0\x81\
4864
+ 165 \xC1111E \485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
4865
+525-1-32265226-1-321212-0-5212-0-56#
4866
+0\x81\
4867
+ 162 \xC0\x81\
4868
+ 163 \xC0\x81\
4869
+ 164 \xC0\x81\
4870
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
4871
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4872
+s: ANY_CR LONE_CR
4873
+\2113-0-5213-0-562214-0214-0-57-02xC0\x81\
4874
+ 163 \xC0\x81\
4875
+ 164 \xC0215-0-572216-0216-0-582117-0217-0-582118-0218-0-599-1-#
4876
+5331
4877
+31635 #
4878
+0\x81\
4879
+ 162 \xC0\x81\
4880
+ 163 \xC0\x81\
4881
+ 164 \xC0\x81\
4882
+ 165 \xC1111E 2219-0-5219-0-592220-0-6220-0-602#
4883
+0\x81\
4884
+ 162 \xC0\x81\
4885
+ 1632 \xC0\21-0-6022222-0-6222-0-6#
4886
+0\x81\
4887
+ -3#
4888
+#
4889
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4890
+ 0 binary 56-7-01W@XtW23-0-6223-0-61#
4891
+0\x81\
4892
+ 162 \xC0\x81\
4893
+ 163 \xC0\x81\
4894
+ 164 \xC0\x81\
4895
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2224-0224-0-629-1-#
4896
+5331
4897
+31635 #
4898
+0\x81\
4899
+ 162 \xC0\x81\
4900
+ 163 \xC0\x81\
4901
+ 164 \xC0\x81\
4902
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2225-0225-0-6#
4903
+0\x81\
4904
+ 162 \xC0\x81\
4905
+ 163 \xC0\x81\
4906
+ 164 \xC0\x81\
4907
+ 165 \xC1111E \485485-1-481-16-1-487 utf-c2226-0226-0-63#
4908
+0\x81\
4909
+ 162 \xC0\x81\
4910
+ 163 \xC0\x81\
4911
+ 164 \xC0\x81\
4912
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2#
4913
+0\x81\
4914
+ 162 \xC0\x81\
4915
+ 163BB\22220\x81\
4916
+ 163 \xC0\x81\
4917
+ 164 \0\x81\
4918
+ 163 \xC0\x81\
4919
+ 164 \xC0\x81\
4920
+ 165 \xC1111E \
4921
+ 170 \xE \
4922
+ 171 \xE \
4923
+ 172 \xE \
4924
+ 1777777718#
4925
+431-0-1#
4926
+#
4927
+#
4928
+437-0437-0-168#
4929
+438-04441 #
4930
+44#
4931
+#
4932
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4933
+9459-0#
4934
+461-0462-1334-0-6234-0-67#
4935
+0\x81\
4936
+ -441546 546-1-42#
4937
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4938
+5331
4939
+31635 535-15336-235-0#
4940
+0\x81\
4941
+ 162 \xC0\x81\
4942
+ 163 \xC0\x81\
4943
+ 164 \xC0\x81\
4944
+ 165 \xC1111E \
4945
+ Other f11-578-12#
4946
+0\x81\
4947
+ 162 \x##
4948
+0\x81\
4949
+ 162 \xC0\x81\
4950
+ 163 \xC0\x81\
4951
+ 164 \xC0\x81\
4952
+ 165 \xC1111E \
4953
+ 170 \xE \
4954
+ 171 \xE \
4955
+ 172 \xE \
4956
+ 1777777718#
4957
+431-0-1#
4958
+#
4959
+#
4960
+437-0437-0-168#
4961
+438-04441 #
4962
+44#
4963
+#
4964
+446-0446-0-1\4524-1524-1-31#
4965
+525-1-32265226-1-32#
4966
+#
4967
+32528-1-35295229-1-#
4968
+5331
4969
+31-1-3#
4970
+532-1-3#
4971
+#
4972
+53#
4973
+5334-1-335 535-15336-1-337 utf-check-537-1#
4974
+38 utf-check-5338-1-3#
4975
+#
4976
+#
4977
+40 5440-1-39#
4978
+#
4979
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
4980
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4981
+5331
4982
+31635 535-15336-1-337 7f-check-537-1#
4983
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
4984
+#
4985
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
4986
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
4987
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
4988
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
4989
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
4990
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
4991
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
4992
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
4993
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
4994
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
4995
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
4996
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
4997
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
4998
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
4999
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
5000
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
5001
+ 33593-1593-1-6#
5002
+595934
5003
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
5004
+2337-1-57578578-1-578-38#
5005
+0\x81\
5006
+ 162 \#
5007
+#
5008
+0\x81\
5009
+ 162 \xC0\x81\
5010
+ 163 \xC0\x81\
5011
+ 164 \xC0\x81\
5012
+ 165 \xC1111E \
5013
+ 170 \xE \
5014
+ 171 \xE \
5015
+ 172 \xE \
5016
+ 1777777718#
5017
+431-0-1#
5018
+#
5019
+#
5020
+437-0437-0-168#
5021
+438-04441 #
5022
+44#
5023
+#
5024
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
5025
+9459-0#
5026
+461-0462-1-46463-1-4646446464#
5027
+0\x81\
5028
+ -441546 546-1-42#
5029
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
5030
+5331
5031
+31635 535-15336-323239-040-0-7240-0-70578578-1-578-12#
5032
+0\x81\
5033
+ 162 \x##
5034
+0\x81\
5035
+ 162 \xC0\x81\
5036
+ 163 \xC0\x81\
5037
+ 164 \xC0\x81\
5038
+ 165 \xC1111E \
5039
+ 170 \xE \
5040
+ #
5041
+0\x81\
5042
+ 4241-0241-0-702245-0-725-0-7#
5043
+0\x81\
5044
+ -3#
5045
+#
5046
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
5047
+ 0 binary 56-7-01W@XtW4250-0-7250-0-752554-0-7254-0-77578578-1-578-12#
5048
+0\x81\
5049
+ 162 \x##
5050
+0\x81\
5051
+ 162 \xC0\x81\
5052
+ 163 \xC0\x81\
5053
+ 164 \x#
5054
+0\x81\
5055
+ 55558-0-7559-063 \xC0\x81\
5056
+ 164 \xC0\x81\
5057
+ 165 \xC1111E \
5058
+ 170 \xE \
5059
+ 171 \xE \
5060
+0\x81\
5061
+ 168#
5062
+438-04441 #
5063
+44#
5064
+#
5065
+446-0446-0-1\4524-1524-1-31#
5066
+525-1-32265226-1-32#
5067
+#
5068
+32528-1-35295229-1-#
5069
+5331
5070
+31-1-3#
5071
+532-1-3#
5072
+#
5073
+53#
5074
+5334-1-335 535-15336-1-337 utf-check-537-1#
5075
+38 utf-check-5338-1-3#
5076
+#
5077
+#
5078
+40 5440-1-39#
5079
+#
5080
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
5081
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
5082
+5331
5083
+31635 535-15336-1-337 7f-check-537-1#
5084
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
5085
+#
5086
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
5087
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
5088
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
5089
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
5090
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
5091
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
5092
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
5093
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_C620-2-6620-2-666E_CR
5094
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
5095
+s: ANY_CR LONE_CR
5096
+\
5097
+ -1-32#
5098
+#
5099
+32528-1-352952292
5100
+0\x893-1-49 162 \xC0\x81\
5101
+ 163 \xC0\x81\
5102
+163 \xC395-1-5397-1998-19443 \xC0\x81\
5103
+ 164 2626-2626-2-694627-2627-2-6963E_CR
5104
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
5105
+s: ANY_CR LONE_CR
5106
+\
5107
+ -1-32#
5108
+#
5109
+32528-1-35295229
5110
+0\x893-1-49 162 \xC0\x81\
5111
+ 163 \xC0\x81\
5112
+163 \xC395-1-5397-1998-19443 \xC0\x81\
5113
+ 164 56658-2658-2-85658 #
5114
+#
5115
+560512O@1~fl,Z:Line endi13z#
5116
+0\x81\
5117
+ 162 \xC0\x81\
5118
+ 163 \xC0\x81\
5119
+ 164 \xC0\x81\
5120
+ 165 \xC1111E \
5121
+ 170 \xE \
5122
+ 171 \xE \
5123
+ 172 \xE \
5124
+ 1777777718#
5125
+431-0-1#
5126
+#
5127
+#
5128
+437-0437-0-168#
5129
+438-04441 #
5130
+44#
5131
+#
5132
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
5133
+9459-0#
5134
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
5135
+7474474-1-4-1-6#
5136
+#475-1-61-7477 477-1477-1-78#
5137
+479 utf-check-479-1474808480-1-9481#
5138
+848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
5139
+525-1-32265226-1-32#
5140
+#
5141
+32528-1-35295229532-1-3#
5142
+#
5143
+53#
5144
+5334-1k-5338-1-3#
5145
+#
5146
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
5147
+ 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
5148
+ 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
5149
+ "\xFF\xFE" : "\xFE\xFF"}]CR LONE_CR
5150
+Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
5151
+s: ANY_CR LONE_CR
5152
+\
5153
+ 1-1-57578578-1-578-12#
5154
+0\x81\
5155
+ 162 \x##
5156
+0\x81\
5157
+ 162 \xC0\x81\
5158
+ 163 \xC0\x81\
5159
+ 164 \xC0\x81\
5160
+ 165 \xC1111E \
5161
+ 170 \xE \
5162
+ 171 \xE \
5163
+ 172 \xE \
5164
+ 1777777718#
5165
+431-0-1#
5166
+#
5167
+#
5168
+437-0437-0-168#
5169
+438-04441 #
5170
+44#
5171
+#
5172
+446-0446-0-1\4524-1524-1-31#
5173
+525-1-32265226-1-32#
5174
+#
5175
+32528-1-35295229-1-#
5176
+5331
5177
+31-1-3#
5178
+532-1-3#
5179
+#
5180
+53#
5181
+5334-1-335 535-15336-1-337 utf-check-537-1#
5182
+38 utf-check-5338-1-3#
5183
+#
5184
+#
5185
+40 5440-1-39#
5186
+#
5187
+342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
5188
+547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
5189
+5331
5190
+31635 535-15336-1-337 7f-check-537-1#
5191
+38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
5192
+#
5193
+560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
5194
+Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
5195
+ 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
5196
+ 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
5197
+ 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
5198
+ 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
5199
+ 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
5200
+ 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
5201
+ 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
5202
+ 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
5203
+ 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
5204
+ 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
5205
+ 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
5206
+ 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
5207
+ 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
5208
+ 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
5209
+ 33593-1593-1-6#
5210
+595934
5211
+03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
5212
+2337-1-57578578-1-578-38#
5213
+0\x81\
5214
+ 162 \#
5215
+#
5216
+0\x81\
5217
+ 162 \xC0\x81\
5218
+ 163 \xC0\x81\
5219
+ 164 \xC0\x81\
5220
+ 165 \xC1111E \
5221
+ 170 \xE \
5222
+ 171 \xE \
5223
+ 172 \xE \
5224
+ 1777777718#
5225
+431-0-1#
5226
+#
5227
+#
5228
+437-0437-0-168#
5229
+438-04441 #
5230
+44#
5231
+#
5232
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
5233
+9459-0#
5234
+461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
5235
+ 163 \xC0\x81\
5236
+ 164 \xC0115-0-71116-0-9-0#
5237
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
5238
+7474474-1-4-1-6#
5239
+#475-1-61-7477 477-1477-1-78#
5240
+479 utf-check-479-1474808480-#
5241
+0\x81\
5242
+ 162 \xC0\x81\
5243
+ 163 \xC0\x81\
5244
+ 164 \xC0\x81\
5245
+ 165 \xC1111E \
5246
+ 170 \xE \
5247
+ 171 \xE \
5248
+ 172 \xE \
5249
+ 1777777718#
5250
+431-0-1#
5251
+#
5252
+#
5253
+437-0437-0-168#
5254
+438-04441 #
5255
+44#
5256
+#
5257
+446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
5258
+9459-0#
5259
+461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
5260
+0\x81\
5261
+ 162 \xC0\x81\
5262
+ 163BB\2131-0-1133-0 162 \xC0\x81\
5263
+ 163 \xC0\x81\
5264
+63 \xC134-0-171381\
5265
+ 162 \xC0\x81\
5266
+ 163 \xC0\x81\
5267
+ 164 \xC0\x81\
5268
+ 165 \xC1111E \
5269
+ 170 \xE \
5270
+ 171 \xE \
5271
+ 172 \xE \
5272
+ 1777777718#
5273
+431-0-1#
5274
+#
5275
+#
5276
+437-0437-0-168#
5277
+438-04441 #
5278
+44#
5279
+#
5280
+446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
5281
+ 164 \xC0\x81\
5282
+ 165 \xC1111E \
5283
+ 170 \xE \
5284
+ 171 \xE \
5285
+ 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
5286
+0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
5287
+ 164 \xC0\x81\
5288
+ 165 \xC1111E \
5289
+ 170 \xE \
5290
+ 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
5291
+#
5292
+#
5293
+437-0437-0-168#
5294
+438-04441 #
5295
+44#
5296
+#
5297
+446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
5298
+0\x81\
5299
+ 162 \xC0\x81\
5300
+ 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
5301
+ 163 \xC0\x81\
5302
+63 \154-0-25155-0155-0-27156-0156-0-289-1-#
5303
+5331
5304
+31635 #
5305
+0\x81\
5306
+ 162 \xC0\x81\
5307
+ 163 \xC0\x81\
5308
+ 164 \xC0\x81\
5309
+ 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
5310
+0\x81\
5311
+ -3#
5312
+#
5313
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
5314
+ 0 binary 56-7-01W@Xt5159-0159-0-2#
5315
+0\x81\
5316
+ -3#
5317
+#
5318
+Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
5319
+ 0 binary 56-7-01W@XtW60-0160-0-30#
5320
+0\x81\
5321
+ 162 \xC0\x81\
5322
+ 163 \xC0\x81\
5323
+ 164 \xC0\x81\
5324
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
5325
+0\x81\
5326
+ 162 \xC0\x81\
5327
+ 163 \xC0\x81\
5328
+ 164 \xC0\x81\
5329
+ 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
5330
+ 163 \xC0\x81\
5331
+63 \xC0\x81\
5332
+ 164 \xC0\x81\
5333
+ 165 \xC1111E \
5334
+ 170 \xE \
5335
+ 171 \xE \
5336
+ 172 \xE \
5337
+ 1777777718#
5338
+431-0-1#
5339
+#
5340
+#
5341
+4
--- a/test/utf.test
+++ b/test/utf.test
@@ -0,0 +1,5341 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/test/utf.test
+++ b/test/utf.test
@@ -0,0 +1,5341 @@
1 #
2 0\x81\
3 162 \xC0\x81\
4 163 \xC0\x81\
5 164 \xC0\x81\
6 165 \xC1111E \
7 170 \xE \
8 171 \xE \
9 172 \xE \
10 1777777718#
11 431-0-1#
12 #
13 #
14 437-0437-0-168#
15 438-04441 #
16 44#
17 #
18 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
19 9459-0#
20 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
21 7474474-1-4-1-6#
22 #475-1-61-7477 477-1477-1-78#
23 479 utf-check-479-1474808480-1-9481#
24 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
25 525-1-32265226-1-32#
26 #
27 32528-1-35295229532-1-3#
28 #
29 53#
30 5334-1k-5338-1-3#
31 #
32 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
33 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
34 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
35 "\xFF\xFE" : "\xFE\xFF"}]CR LONE_CR
36 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
37 s: ANY_CR LONE_CR
38 \
39 1-1-57578578-1-578-12#
40 0\x81\
41 162 \x##
42 0\x81\
43 162 \xC0\x81\
44 163 \xC0\x81\
45 164 \xC0\x81\
46 165 \xC1111E \
47 170 \xE \ \
48 171 \xE \
49 172 \xE \
50 1777777718#
51 431-0-1#
52 #
53 #
54 437-0437-0-168#
55 438-04441 #
56 44#
57 #
58 446-0446-0-1\4524-1524-1-31#
59 525-1-32265226-1-32#
60 #
61 32528-1-35295229-1-#
62 5331
63 31-1-3#
64 532-1-3#
65 #
66 53#
67 5334-1-335 535-15336-1-337 utf-check-537-1#
68 38 utf-check-5338-1-3#
69 #
70 #
71 40 5440-1-39#
72 #
73 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
74 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
75 5331
76 31635 535-15336-1-337 7f-check-537-1#
77 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
78 #
79 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
80 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
81 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
82 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
83 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
84 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
85 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
86 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
87 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
88 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
89 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
90 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
91 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
92 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
93 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
94 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
95 33593-1593-1-6#
96 595934
97 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
98 2337-1-57578578-1-578-38#
99 0\x81\
100 162 \#
101 #
102 0\x81\
103 162 \xC0\x81\
104 163 \xC0\x81\
105 164 \xC0\x81\
106 165 \xC1111E \
107 170 \xE \
108 171 \xE \
109 172 \xE \
110 1777777718#
111 431-0-1#
112 #
113 #
114 437-0437-0-168#
115 438-04441 #
116 44#
117 #
118 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
119 9459-0#
120 461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
121 163 \xC0\x81\
122 164 \xC0115-0-71116-0-9-0#
123 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
124 7474474-1-4-1-6#
125 #475-1-61-7477 477-1477-1-78#
126 479 utf-check-479-1474808480-#
127 0\x81\
128 162 \xC0\x81\
129 163 \xC0\x81\
130 164 \xC0\x81\
131 165 \xC1111E \
132 170 \xE \
133 171 \xE \
134 172 \xE \
135 1777777718#
136 431-0-1#
137 #
138 #
139 437-0437-0-168#
140 438-04441 #
141 44#
142 #
143 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
144 9459-0#
145 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
146 0\x81\
147 162 \xC0\x81\
148 163BB\2131-0-1133-0 162 \xC0\x81\
149 163 \xC0\x81\
150 63 \xC134-0-171381\
151 162 \xC0\x81\
152 163 \xC0\x81\
153 164 \xC0\x81\
154 165 \xC1111E \
155 170 \xE \
156 171 \xE \
157 172 \xE \
158 1777777718#
159 431-0-1#
160 #
161 #
162 437-0437-0-168#
163 438-04441 #
164 44#
165 #
166 446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
167 164 \xC0\x81\
168 165 \xC1111E \
169 170 \xE \
170 171 \xE \
171 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
172 0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
173 164 \xC0\x81\
174 165 \xC1111E \
175 170 \xE \
176 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
177 #
178 #
179 437-0437-0-168#
180 438-04441 #
181 44#
182 #
183 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
184 0\x81\
185 162 \xC0\x81\
186 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
187 163 \xC0\x81\
188 63 \154-0-25155-0155-0-27156-0156-0-289-1-#
189 5331
190 31635 #
191 0\x81\
192 162 \xC0\x81\
193 163 \xC0\x81\
194 164 \xC0\x81\
195 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
196 0\x81\
197 -3#
198 #
199 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
200 0 binary 56-7-01W@Xt5159-0159-0-2#
201 0\x81\
202 -3#
203 #
204 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
205 0 binary 56-7-01W@XtW60-0160-0-30#
206 0\x81\
207 162 \xC0\x81\
208 163 \xC0\x81\
209 164 \xC0\x81\
210 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
211 0\x81\
212 162 \xC0\x81\
213 163 \xC0\x81\
214 164 \xC0\x81\
215 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
216 163 \xC0\x81\
217 63 \xC0\x81\
218 164 \xC0\x81\
219 165 \xC1111E \
220 170 \xE \
221 171 \xE \
222 172 \xE \
223 1777777718#
224 431-0-1#
225 #
226 #
227 437-0437-0-168#
228 438-04441 #
229 44#
230 #
231 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
232 96111169-0-3169-0-34-0-1#
233 #
234 #
235 437-0437-0-168#
236 438-04441 #
237 44#
238 #
239 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
240 0\x81\
241 162 \xC0\x81\
242 163 1170-0-3170-0-3 162 \xC0\x81\
243 163 \xC0\x81\
244 164 \xC0\x81\
245 165 \xC1111E \
246 170 \xE \
247 171 \xE \
248 172 \xE \
249 1777777718#
250 431-0-1#
251 #
252 #
253 437-0437-0-168#
254 438-04441 #
255 44#
256 #
257 44proc dele\xC1111E \
258 170 \xE \
259 11#
260 0\x81\
261 162 \xC0\x81\
262 163646171438-04441 #
263 44#
264 #
265 446-0446-0-1\452#
266 01711818 162 \xC0\x81\
267 163 \xC0\x81\
268 -04441 #
269 44#
270 #
271 446-0.jnk]
272 incr fn\x81\
273 163 \xC0\x81\
274 164 \xC0\x81\
275 165 \xC1111E \
276 170 \xE \
277 11#
278 0\x81\
279 162 \xC0\x81\
280 163646171438-04441 #
281 44#
282 #
283 446-044-17#
284 0\x81\-$fn-$i-$j2#
285 0\x81\
286 -3#
287 0159-0-2#
288 0 binary 56-7-01W@XtW60-163 \xC0\x81\
289 11E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
290 0\x81\
291 162 \} else {
292 FE\xFF"}]CR LONE6161-0-3161$::data($j)
293 }
294 0\x81\
295 164 \xC0\x81\
296 }
297 }
298 0\x81\
299 162 \xC0\x81\
300 163 \xC0\x81\
301 164 \xC0\x81\
302 165 \xC1111E \
303 170 \xE \
304 171 \xE \
305 172 \xE \
306 1777777718#
307 431-0-1#
308 #
309 #
310 437-0437-0-168#
311 438-04441 #
312 44#
313 #
314 446-0446 162 \xC0\100101\
315 162 \xC0\x81\
316 163 \xC0\x81\
317 164 \xC0\x81\
318 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2#
319 0\x81\
320 162 \xC0\x81\
321 163BB\22220\x81\
322 163 \xC0\x81\
323 164 \0\x81\
324 163 \xC0\x81\
325 164 \xC0\x81\
326 165 \xC1111E \
327 170 \xE \
328 171 \xE \
329 1720ABC\rX@dMG,j:Line endings: ANY_CR \
330 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
331 018 49449-052 52-0-17454 454-0-1754-05 456#
332 9459-0#
333 461-0462-1334-0-6234-0-67#
334 0\x81\
335 -441546 546-1-42#
336 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
337 5331
338 31635 535-15336-235-0#
339 0\x81\
340 162 \xC0\x81\
341 163 \xC0\x81\
342 164 \xC0\x81\
343 165 \xC1111E \
344 Other f11-578-12LO\
345 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
346 21 \x00A\rX@dMG,j:Line ending2-0-254545-1-441546 546-1-42#
347 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
348 5331
349 31635 535-15336-1-337 7f-check-537-1#
350 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
351 #
352 560512O@1~fl,Z:L8dM,1:7Z@16Other flags: NONEV17 \x03-0-3338-1-3#
353 #
354 #
355 40 5440-1-39#
356 #
357 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#352 52-0-17454 454-0-1754-05 456#
358 9459-0#
359 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1#
360 0\x81\
361 162 \xC0\x81\
362 163 \xC0\x81\
363 164 \xC0\x81\
364 165 \xC1111E \
365 0\
366 162 \xC0\x81\
367 163 \xC0\x\x81\
368 LO\
369 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
370 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
371 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
372 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
373 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
374 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
375 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
376 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
377 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
378 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
379 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
380 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
381 33593-1593-1-6#
382 595934
383 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
384 2337-1-57578578-1-578-38#
385 0\x81\
386 162 \#
387 #
388 0\x81\
389 162 \xC0\x81\
390 163 \xC0\x81\
391 164 \xC0\x81\
392 165 \xC1111E \
393 170 \xE \
394 171 \xE \
395 172 \xE \
396 1777777718#
397 431-0-1#
398 #
399 #
400 437-0437-0-168#
401 438-04441 #
402 44#
403 #
404 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
405 9459-0#
406 461-0462-1-46463-1-4646446464#
407 0\x81\
408 -441546 546-1-42#
409 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
410 5331
411 31635 535-15336-323239-040-0-7240-0-70578578-1-578-12#
412 0\x81\
413 162 \x##
414 0\x81\
415 162 \xC0\x81\
416 163 \xC0\x81\
417 164 \xC0\x81\
418 165 \xC1111E \
419 170 \xE \
420 #
421 0\x81\
422 4241-0241-0-702245-0-725-0-7#
423 0\x81\
424 -3#
425 #
426 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
427 0 binary 56-7-01W@XtW4250-0-7250-0-752554-0-7254-0-77578578-1-578-12#
428 0\x81\
429 162 \x##
430 0\x81\
431 162 \xC0\x81\
432 163 \xC0\x81\
433 164 \x#
434 0\x81\
435 55558-0-7559-063 \xC0\x81\
436 164 \xC0\x81\
437 165 \xC1111E \
438 170 \xE \
439 171 \xE \
440 0\x81\
441 168#
442 438-04441 #
443 44#
444 #
445 446-0446-0-1\4524-1524-1-31#
446 525-1-32265226-1-32#
447 #
448 32528-1-35295229-1-#
449 5331
450 31-1-3#
451 532-1-3#
452 #
453 53#
454 5334-1-335 535-15336-1-337 utf-check-537-1#
455 38 utf-check-5338-1-3#
456 #
457 #
458 40 5440-1-39#
459 #
460 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
461 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
462 5331
463 31635 535-15336-1-337 7f-check-537-1#
464 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
465 #
466 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
467 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
468 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
469 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
470 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
471 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
472 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
473 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
474 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
475 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
476 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
477 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
478 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
479 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
480 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
481 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
482 33593-1593-1-6#
483 595934
484 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
485 2337-1-57578578-1-578-38#
486 0\x81\
487 162 \#
488 #
489 0\x81\
490 162 \xC0\x81\
491 163 \xC0\x81\
492 164 \xC0\x81\
493 165 \xC1111E \
494 170 \xE \
495 171 \xE \
496 172 \xE \
497 1777777718#
498 431-0-1#
499 #
500 #
501 437-0437-0-168#
502 438-04441 #
503 44#
504 #
505 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
506 9459-0#
507 461-0462-1-46463-1-4646446464#
508 0\x81\
509 2626262-0-8262-0-863-0-8263-0-811-578-12#
510 0\x81\
511 162 \x##
512 0\x81\
513 162 \xC0\x81\
514 163 \xC0\x81\
515 164 \xC0\x81\
516 165 \xC1111E \
517 170 \xE \
518 171 \xE \
519 172 \x#
520 0\x81\
521 162 \xC0\x81\
522 163 \xC0\x81\
523 164 \xC0\x81\
524 165 \xC1111E \
525 170267-0267-0-83-1#
526 0\x81\
527 162 \334-1-335 535-15336-1-337 utf-check-537-1#
528 38 utf-check-5338-1-3#
529 #
530 #
531 40 5440-1-39#27271-0271-0-854-1524-1-31#
532 525-1-32265226-1-32#
533 #
534 0\x272-0-8#
535 0\x81\
536 162 \xC0\x81\
537 163 \xC0\x81\
538 164 \xC0\x81\
539 165 \xC1111E \485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
540 525-1-32265226-1-32#7275-0-8#
541 0\x81\
542 162 \xC0\x81\
543 1636469469276-0-88#
544 0\x81\
545 162 \xC0\x81\
546 163 \xC0\x81\
547 164 \xC0\x81\
548 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE27779-0-880-0280-0-90#
549 0\x81\
550 162 \xC
551 5334-1-335 535-15336-1-337 utf-check-537-1#
552 38 utf-check-5338-1-3#
553 #
554 #
555 40 5440-1-39\xFE" : "\xFE\xFF"}]CR LONE_CR
556 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
557 s: ANY_CR LONE_CR
558 \
559 -1-32#
560 #
561 32528-1-35295229-1-#
562 5331
563 31-1-3#
564 532-1-3#
565 #
566 53#
567 5334-1-335 535-15336-1-337 utf-check-537-1#
568 38 utf-check-5338-1-3#
569 #
570 #
571 40 5440-1-39#
572 #
573 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
574 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
575 5331
576 31635 535-15336-1-337 7f-che#
577 0\x81\
578 162 \xC0\x81\
579 163 \xC0\x81\
580 164 \xC0\x81\
581 165 \xC1111E \
582 170284-0-984-0-92578578-1-578-12#
583 0\x81\
584 162 \x##
585 0\x81\
586 162 \xC0\x81\
587 163 \xC0\x81\
588 164 \x#
589 0\x81\
590 1@8wU,2:7-_@9LW,5:0-7\
591 s: AN282888-032528-1-35295229-1-#
592 5331
593 31-1-3#
594 532-1-3#
595 #
596 53#
597 5334-1-335 535-15336-1-337 utf-check-537-1#
598 38 utf-check-5338-1-3#
599 #
600 #
601 40 5440-1-39#
602 #
603 342#
604 0\x81\
605 162 \xC0\x81\
606 163 \xC0\x81\
607 164 \xC0\x81\
608 165 \xC1111E \
609 17089-0-9289-093#
610 5334-1-335 535-15336-1-337 utf-check-537-1#
611 38 utf-check-5338-1-3#
612 #
613 #
614 40 5440-1-39#
615 #
616 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
617 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
618 5331
619 31635 535-15336-1-337 7f-check-537-1#
620 38 u843-1-5#
621 0\x81\
622 162 \xC0\x81\
623 163 \xC0\x81\
624 164 \xC0\x81\
625 165 \xC1111E \
626 170292-0-92993-0-9293-0-96#
627 0\x81\
628 162 \xC0\x81\
629 163 \xC0\x81\
630 164 \xC0\x81\
631 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2922296-1-296-1-2297-1-35-15336-1-337 utf-check-537-1#
632 38 utf-check-5338-1-3#
633 #
634 #
635 40 5440-1-39#
636 #
637 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
638 547-15450-1-44551551-1-4455#
639 0\x81\
640 162 \xC0\x81\
641 163 \xC0\x81\
642 164 \xC0\x81\
643 165 \xC1111E \
644 29check-5338-1-3#
645 #
646 #
647 40 5440-1-39#
648 #
649 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
650 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
651 5331
652 31635 535-15336-1-337 7f-check-537-1#
653 38 u843-1-5444 544-1-41595450-1-4#
654 0\x81\
655 162 \xC0\x81\
656 163 \xC0\x81\
657 164 \xC0\x81\
658 165 \xC1111E \
659 17301-1-01-1-302-1-163 \xC0\x81\
660 164 \xC0\x81\
661 #
662 0\x81\
663 163 \xC0\x81\
664 164 \xC0\x81\
665 165 \xC1111E \
666 170 \xE \
667 171 \xE \
668 172 \xE \
669 1777777718#
670 431-0-1#
671 #
672 #
673 437-0437-0-168#
674 438-162 \xC0\x81\
675 163 \xC0\x81\
676 164 \xC0\x81\
677 165 \xC1111E \
678 170 \xE \
679 #
680 0\x81\
681 162 \xC0\x81\
682 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
683 7474474-1-4-1-6#
684 #475-1-61-7477 477-1477-1-78#
685 479 utf-check-479-1474808480-1-9481#
686 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-146-0446-0-1747448 49449-052 52-0-1#
687 0\x8310-1-311-1-11-1-1312-1-312-1-1163 \xC0\x81\
688 164 \xC0\x81\
689 #
690 0\x13-1-314-1-1314-1-1xC0\x81\
691 163 \xC0\x81\
692 164 \xC0\x315-1-1316-1-1316-1-11117-1-1317-1-11118-1318-1-1221635 535-15336-1-337 7f-check-537-1#
693 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
694 #
695 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
696 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR#
697 0\x81\
698 162 \xC0\x81\
699 325-1-1325-1-15#
700 0\x81\
701 162 \xC0\x81\
702 16469469-326-1-16O\
703 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
704 23 \x00ABC\rX@dMG,j:Line endings: ANY_C0\x81\
705 163 \xC0\x81\
706 164 \0\x332-1-1332-1-19333-1333-1-193334-1334-1-20335-1-2335-1-2#
707 0\x81\
708 162 \xC0\x81\
709 16469469-337-1-2337-1-21338-1-238-1-2339-1-2339-1-244ary 56-7-01W@XtW,j:Line enther #
710 0\x81\
711 162 \xC0\x81\
712 163 \xC0\x81\
713 164 \xC0\x81\
714 165 \xC1111E \
715 170 \xE \
716 171 \xE \
717 172 \xE \
718 1777777718#
719 431-0-1#
720 #
721 #
722 437-0437-0-168#
723 438-04441 #
724 44#
725 #
726 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#4#
727 0\x81\
728 162 \xC0\x81\
729 16469447-1-2350-1351-1-251-1-285352-1-2352-1-29#
730 0\x81\
731 -3#
732 #
733 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
734 0 binary 56-7-01W@Xt5#
735 0\x81\
736 162 \xC0\x81\
737 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
738 7474474-1-4-1-6#
739 #475-1-61-7477 477-1477-1-78#
740 479 utf-check-479-1474808480-1-9481#
741 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
742 525-57-111485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
743 525-1-32265226#
744 0\x81\
745 162 \xC0\x81\
746 163 \xC0\x81\
747 164 \xC0\x81\
748 165 \xC1111E \
749 170 \xE \
750 171 \xE \
751 172 \xE \
752 359-1-329-1-3 162 \xC0\x81\
753 163 \xC0\x81\
754 164 \xC0\x81\
755 165 \xC1111E \
756 170 \xE 6361-1361-1-36362-1362-1-3363-1-3363-1-36364-1-3364-1-356365-1-3366-1-3NY_CR LON\
757 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
758 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
759 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
760 22 \x00#
761 0\x81\
762 162 \xC0\x81\
763 163 \xC0\x81\
764 164 \xC0\x81\
765 165 \xC1111E \
766 1368-1-3370-1-3#
767 0\x81\
768 162 \xC0\x81\
769 163 \xC0\x81\
770 164 \xC0\x81\
771 165 \xC1111E \
772 17371-14-1524-1-31#
773 525-1-32265226-1-32#
774 #
775 0\x81372-1-39163 \xC0\x81\
776 164 \xC0\x81\
777 #
778 0\x813-1-397374-1-4374-1-40O\
779 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
780 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
781 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
782 25 \x00A#
783 0\x81\
784 162 \xC0\x81\
785 163 \xC0\x81\
786 164 \xC0\x81\
787 165 \xC1111E \
788 1375-1-4375-1-40#
789 0\x81\
790 162 \xC0\x81\
791 1636468#
792 0\x81\
793 162 \xC0\x81\
794 163 \xC0\x81\
795 164 \xC0\x81\
796 165 \xC1111E \
797 178endings: ANY_CR L\
798 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
799 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
800 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
801 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
802 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
803 26 \x00AB\nX@dMG,j:Line endings:#
804 0\x81\
805 162 \xC0\x81\
806 163 \xC0\x81\
807 164 \xC0\x81\
808 165 \xC1111E \
809 17384-1855-1-4385-1-458#
810 0\x81\
811 162 \xC0\x81\
812 16469469-386-1-46#
813 0\x81\
814 -3#
815 #
816 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
817 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:f {$::RESULT ne $result}11kG,7:1\
818 s: ANY_CR LONE_CR
819 Other flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
820 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
821 "\xFF\xFE" : "\xFE\88392-1392-1-499-1-#
822 5331
823 31635 535-15336-1-337 7f-check-537-1#
824 38 u843-1-5444 544-1-41595450-1-44551551-1-1#
825 0\x81\
826 162 \xC0\x81\
827 163 9163 \xC0\x81\
828 164 \xC0\x81\
829 #
830 0\x893-1-49 162 \xC0\x81\
831 163 \xC0\x81\
832 163 \xC395-1-5397-1998-19443 \xC0\x81\
833 164 \xC0\x81\
834 165 \xC1111E \
835 170 \xE \
836 171 \xE \
837 172 \xE \
838 1777777718#
839 431-0-1#
840 #
841 #
842 437-0437-0-168#
843 438-04441 #
844 44#
845 #
846 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
847 9459-0#
848 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1- 163 \xC0\x81\
849 164 \xC0\x81\
850 165 \xC1111E \
851 170 \xE \
852 171 \xE \
853 4005-1-505-1-554406-1-5406-1-5640407-1-5407-1-56403 \xC0\x81\
854 164 \xC0\x81\
855 63 \xC0\x81\
856 164 \xC0\x81\
857 165 \xC1111E \
858 170 \xE \
859 171 \xE \
860 172 \xE \
861 1777777718#
862 431-0-1#
863 #
864 #
865 437-0437-0-168#
866 438-04441 #
867 44#
868 #
869 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
870 915-1-6#
871 0\x81\
872 162 \xC0\x81\
873 16469469-416-1-61#
874 0\x81\
875 -3#
876 #
877 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
878 0 binary 56-7-01W@XtW417-1-6417-1-61444262 \xC0\x81\
879 163 \xC0\x423 \xC0\x81\
880 164 \xC0\x81\
881 63 \#
882 0\x81\
883 162 \xC0\x81\
884 163 \xC0\x81\
885 164 \xC0\x81\
886 165 \xC1111E \
887 170 \xE \
888 171 \xE \
889 172 \xE \
890 1-13489 ut524524-1524-1-31#4223-1-6423-1-64-142#
891 0\x81\
892 162 \xC0\x81\
893 163 \xC0\x81\
894 164 \xC0\x81\
895 165 \xC1111E \
896 170 \xE \
897 171 \xE \
898 172 \xE \
899 1777777718#
900 431-0-1#
901 #
902 #
903 437-0437-0-168#
904 438-04441 #
905 44#
906 #
907 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456
908 525-1-32265226-1-32#
909 #
910 32528-1-35295229-1-#
911 5331
912 31-1-3#
913 532-1-3#
914 #
915 53#
916 5334-1-335 535-153#
917 0\x81\
918 162 \xC0\x81\
919 163 \xC0\x81\
920 164 \xC0\x81\
921 165 \xC1111E \
922 170 \xE \
923 171 \xE \
924 172 \xE \
925 1777777718#
926 431-0-1#
927 #
928 #
929 437-0437-0-168#
930 438-04441 #
931 44#
932 #
933 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#l,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
934 Other f15s: NONEV@8dM,1:7Z@16Other flags: NON2#
935 0\x81\
936 162 \xC0\x81\
937 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
938 7474474-1-4-1-6#
939 #475-1-61-7477 477-1477-1-78#
940 479 utf-check-479-1474808480-1-9481#
941 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
942 525-1-rX@dMG,j:Line endings: ANY_CR\
943 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
944 26 \x00ABBB\xBFOther flags: \
945 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
946 2428-1-6428-1-67578578-1-578-12#
947 0\x#
948 0\x81\
949 162 \xC0\x81\
950 163 \xC0\x81\
951 164 \xC0\x81\
952 165 #
953 0\x81\
954 -441546 546-1-42#
955 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
956 5331
957 31635 535-15336-#
958 0\x81\
959 162 \xC0\x81\
960 163 \xC0\x81\
961 164 \xC0\x81\
962 165 \xC1111E \
963 170 \xE \
964 171 \xE \
965 172 \xE \
966 1777777718#
967 431-0-1#
968 #
969 #
970 437-0437-0-168#
971 438-04441 #
972 44#
973 #
974 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#E_CR
975 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
976 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
977 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
978 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
979 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
980 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
981 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
982 24 endings: ANY_CR L\
983 23 431-1-6432-1432-1-69#
984 0\x81\
985 -441546 546-1-42#
986 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
987 5331
988 31635 535-153363436-1#
989 0\x81\
990 162 \xC0\x81\
991 163 \xC0\x81\
992 164 \xC0\x81\
993 165 \xC1111E \
994 170 endings: ANY_CR L\
995 23 \x00AB437-1-7437-1-71#
996 0\x81\
997 -441546 546-1-42#
998 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
999 5331
1000 31635 535-15336-1 endings: ANY_CR L\
1001 23 \x00AB439-1-724440-1440-1-73578578-1-578-12#
1002 0\x#
1003 0\x81\
1004 162 \xC0\x81\
1005 163 \xC0\x81\
1006 164 \xC0\x81\
1007 165 \xC1111E \4#
1008 0\x81\
1009 162 \xC0\x81\
1010 163 \xC441-1-73#
1011 0\x81\
1012 162 \xC0\x81\
1013 163 \xC0\x81\
1014 164 \xC0\x81\
1015 165 \xC1111E \
1016 17endings: ANY_43 \xC0\x81\
1017 164 \xC0\x81\
1018 63 \xC0\x81\
1019 164 \xC0\x81\
1020 165 \xC1111E \
1021 170 \xE \
1022 171 \xE \
1023 172 \xE \
1024 1777777718#
1025 431-0-1#
1026 #
1027 #
1028 437-0437-0-168#
1029 438-04441 #
1030 44#
1031 #
1032 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1033 9459-0#
1034 461-0462-1-46463-1-46464ary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:f {$::RESULT ne $result}11kG,7:1\
1035 s: ANY_CR LONE_CR
1036 Other flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
1037 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
1038 "\xF#
1039 0\x81\
1040 162 \xC0\x81\
1041 163 \xC0\x81\
1042 164 \xC0\x81\
1043 165 \xC1111E \
1044 17444-1-7444-1-7 162 \xC0\x81\
1045 163 \xC0\x81\
1046 164 \xC0\x81\
1047 165 \xC1111E \
1048 170 \xE \
1049 171 \xE \
1050 172 \xE \
1051 1777777718#
1052 431-0-1#
1053 #
1054 #
1055 437-0437-0-168#
1056 438-04441 #
1057 44#
1058 #
1059 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1060 9459-0#
1061 461 162 \xC0\x81\
1062 163 \xC0\x81\
1063 164 \xC0\x81\
1064 165 \xC1111E \
1065 170 \xE \
1066 4#
1067 0\x81\
1068 162 \xC0\x81\
1069 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1070 7474474-1-4-1-6#
1071 #475-1-61-7477 477-1477-1-78#
1072 479 utf-check-479-1474808480-1-9481#
1073 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
1074 525-1-34447-1-7447-1-76 162 \xC0\x81\
1075 163 \xC0\x81\
1076 164 \xC0\x81\
1077 165 \xC1111E \
1078 170 \xE \
1079 171 \xE \
1080 172 \xE \
1081 1777777718#
1082 431-0-1#
1083 #
1084 #
1085 437-0437-0-168#
1086 438-04441 #
1087 44#
1088 #
1089 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1090 9459-0#
1091 461163 \xC0\x81\
1092 164 \xC0\x81\
1093 165 \xC1111E \
1094 170 \xE \
1095 171 \xE \
1096 450-1#
1097 0\x81\
1098 162 \xC0\x81\
1099 163 \xC0\451-153 \xC0\x81\
1100 164 \xC0\x81\
1101 63 \xC0\x81\
1102 164 \xC0\x81\
1103 165 \xC1111E \
1104 170 \xE \
1105 171 \xE \
1106 172 \xE \
1107 1777777718#
1108 431-0-1#
1109 #
1110 #
1111 4374-0-4 \xE \
1112 172 \xE \
1113 1777777718#
1114 431-0-1#
1115 #
1116 #
1117 437-0437-0-168#
1118 438-04441 #
1119 44#
1120 #
1121 1105-0-5\nX@dMG,j:Line endings: ANY_CR LO\
1122 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
1123 27564 \xC0\x81\
1124 165 \xC1111E \
1125 170 \xE \
1126 171 \xE \
1127 172 \x#
1128 0\x81\
1129 162 \xC0\x81\
1130 163 \xC0\x81\
1131 164 \xx81\
1132 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1133 7474474-1-4-11\
1134 164 \xC0\x81\
1135 165 \xC11106-0-6LO\
1136 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1137 21 \x00A\rX@dMG,j:Line ending6-0-652 52-0-17454 454-0-1754-05 456#
1138 9459-0#
1139 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-#
1140 0\x81\
1141 162 \xC0\x81\
1142 163 \xC0\x81\
1143 164 \xC0\x81\
1144 165 \xC1111E 107-0-7\
1145 1777777718#
1146 431-0-1#
1147 #
1148 #
1149 437-0437-0-168#
1150 438-04441 #
1151 44#
1152 #
1153 446-0446-0-1\4524-1524-7 \xE \
1154 172 \xE \
1155 1777777718#
1156 431-0-1#
1157 #
1158 #
1159 437-0437-0-168#
1160 438-04441 #
1161 44#
1162 #
1163 10108-0-8LO\
1164 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1165 21 \x00A\rX@dMG,j:Line ending8-0-8\xC0\x81\
1166 163 \xC0\x81\
1167 164 \xC0\x81\
1168 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE27779-0-880-0280-0-90#
1169 0\x81\
1170 162 \xC
1171 5334-1-335 535-15336-1-337 utf-check-537-1#
1172 38 utf-check-5338-1-3#
1173 #
1174 #
1175 40 5440-10109-0-9LO\
1176 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1177 21 \x00A\rX@dMG,j:Line endings: A964 \xC0\x81\
1178 165 \xC1111E \
1179 170 \xE \
1180 171 \xE \
1181 172 \x#
1182 0\x81\
1183 162 \xC0\x81\
1184 163 \xC0\x81\
1185 164 \xC0\x81\
1186 165 \xC1111E \
1187 170267-0267-0-83-1#
1188 0\x81\
1189 162 \334-1-335 535110-0-1tW,j:Line enther #
1190 0\x643-2-7dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line ending10-0-178#
1191 479 utf-check-479-1474808480-1-9481#
1192 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut521 \xE \
1193 172 \xE \
1194 1777777718#
1195 431-0-1#
1196 #
1197 #
1198 437-0437-0-168#
1199 438-044411111-0-10ABC\rX@dMG,j:Line endings: ANY_CR \
1200 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
1201 212-57#
1202 0\x81\
1203 162 \xC0\x81\
1204 163469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1- 162 \xC0\x81\
1205 16469447-1-2350-1351-1-251-1-285352-1-2352-1-29#
1206 0\x81\
1207 -3#
1208 #
1209 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1210 0 binary 56-7-01W@Xt: ANY_CR \
1211 12x81\
1212 2626262-0-8262-0-863-0-8263-0-811-578-12#
1213 0\x81\
1214 162 \x##
1215 0\x81\
1216 1622-0-1243-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
1217 #
1218 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
1219 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR#
1220 18dM,1:7Z@16Other flags: NONEV17 \x13-0-13x81\
1221 2626262-0-8262-0-863-0-8263-0-811-578-12#
1222 0\x81\
1223 162 \x##
1224 0\x81\
1225 1623-0-1352 52-0-17454 454-0-1754-05 456#
1226 9459-0#
1227 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-#
1228 0\x81\
1229 162 \xC0\x81\
1230 163 \xC0\x81\
1231 164 \xC0\x81\
1232 165 \xC1111E \114-0-14x81\
1233 2626262-0-8262-0-863-0-8263-0-811-578-12#
1234 0\x81\
1235 162 \x##
1236 0\x81\
1237 1624-0-14 \xE \
1238 172 \xE \
1239 1777777718#
1240 431-0-1#
1241 #
1242 #
1243 437-0437-0-168#
1244 438-04441 #
1245 44#
1246 #
1247 11115-0-15x81\
1248 2626262-0-8262-0-863-0-8263-0-811-578-12#
1249 0\x81\
1250 162 \x##
1251 0\x81\
1252 1625-0-15\xC0\x81\
1253 163 \xC0\x81\
1254 164 \xC0\x81\
1255 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE27779-0-880-0280-0-90#
1256 0\x81\
1257 162 \xC
1258 5334-1-335 535-1533631
1259 31635 535-15336-1-337 7f-check-537-1#
1260 38 u843-1-5444 544-1-41595450-1-44551551-1-10555116-0-16x81\
1261 2626262-0-8262-0-863-0-8263-0-811-578-12#
1262 0\x81\
1263 162 \x##
1264 0\x81\
1265 1626-0-167777718#
1266 431-0-1#
1267 #
1268 #
1269 437-0437-0-168#
1270 438-04441 #
1271 44#
1272 #
1273 446-0446-0-1747448 49449-052 52-0-1117-0-17x81\
1274 2626262-0-8262-0-863-0-8263-0-811-578-12#
1275 0\x81\
1276 162 \x##
1277 0\x81\
1278 1627-0-17449-052 52-0-17454 454-0-1754-05 456#
1279 9459-0#
1280 461-0462-1334-0-6234-0-67#
1281 0\x81\
1282 -441546 546-1-42#
1283 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1284 5331
1285 31635 535-15336-235-0#
1286 0\x81\
1287 162 \xC0\x81\
1288 163 1118-0-18x81\
1289 2626262-0-8262-0-863-0-8263-0-811-578-12#
1290 0\x81\
1291 162 \x##
1292 0\x81\
1293 162 \xC18449-052 52-0-17454 454-0-1754-05 456#
1294 9459-0#
1295 461-0462-1334-0-6234-0-67#
1296 0\x81\
1297 -441546 546-1-42#
1298 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1299 5331
1300 31635 535-15336-235-0#
1301 0\x81\
1302 162 \xC0\x81\
1303 163 \x81\
1304 164 \xC0\x81\
1305 165 \x119-0-19x81\
1306 2626262-0-8262-0-863-0-8263-0-811-578-12#
1307 0\x81\
1308 162 \x##
1309 0\x81\
1310 1629-0-19449-052 52-0-17454 454-0-1754-05 456#
1311 9459-0#
1312 461-0462-1334-0-6234-0-67#
1313 0\x81\
1314 -441546 546-1-42#
1315 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1316 5331
1317 31635 535-15336-235-0#
1318 0\x81\
1319 162 \xC0\x81\
1320 163 120-0-2tW,j:Line enther #
1321 0\x643-2-7dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line ending20-0-20449-052 52-0-17454 454-0-1754-05 456#
1322 9459-0#
1323 461-0462-1334-0-6234-0-67#
1324 0\x81\
1325 -441546 546-1-42#
1326 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1327 5331
1328 31635 535-15336-235-0#
1329 0\x81\
1330 162 \xC0\x81\
1331 163 121-0-20ABC\rX@dMG,j:Line endings: ANY_CR \
1332 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
1333 21-0-2154545-1-441546 546-1-42#
1334 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1335 5331
1336 31635 535-15336-1-337 7f-check-537-1#
1337 38 u843-1-544x81\
1338 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1339 7474474-1-4-1122-0-22ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
1340 s: ANY_CR LONE_CR
1341 \
1342 1-1-57578578-1-578-122-0-2264 \xC0\x81\
1343 165 \xC1111E \
1344 170 \xE \
1345 171 \xE \
1346 172 \x#
1347 0\x81\
1348 162 \xC0\x81\
1349 163 \xC0\x81\
1350 164 \xx81\
1351 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1352 7474474-1-4-1 4542-1-40543543-1-5444 544-1-4154123-0-23ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
1353 s: ANY_CR LONE_CR
1354 \
1355 1-1-57578578-1-578-123-0-2364 \xC0\x81\
1356 165 \xC1111E \
1357 170 \xE \
1358 171 \xE \
1359 172 \x#
1360 0\x81\
1361 162 \xC0\x81\
1362 163 \xC0\x81\
1363 164 \xx81\
1364 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1365 7474474-1-4-12\
1366 162 \xC0\x81\
1367 163 \xC0\x\x81\
1368 ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
1369 s: ANY_CR LONE_CR
1370 \
1371 1-1-57578578-1-578-12#
1372 0\x81\
1373 162 \x##
1374 0\x81\
1375 162 \xC0\x81\
1376 163 \xC0\x81\
1377 164 \xC0\x81\
1378 165 \xC1111E \
1379 170 \xE \
1380 171 \xE \
1381 172 \xE \
1382 1777777718#
1383 431-0-1#
1384 #
1385 #
1386 437-0437-0-168#
1387 438-04441 #
1388 44#
1389 #
1390 446-0446-0-1\4524-1524-1-31#
1391 525-1-32265226-1-32#
1392 #
1393 32528-1-35295229-1-#
1394 5331
1395 31-1-3#
1396 532-1-3#
1397 #
1398 53#
1399 5334-1-335 535-15336-1-337 utf-check-537-1#
1400 38 utf-check-5338-1-3#
1401 #
1402 #
1403 40 5440-1-39#
1404 #
1405 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
1406 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1407 5331
1408 31635 535-15336-1-337 7f-check-537-1#
1409 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
1410 #
1411 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
1412 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
1413 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
1414 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
1415 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1416 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
1417 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
1418 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
1419 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
1420 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
1421 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
1422 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
1423 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
1424 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
1425 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
1426 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
1427 33593-1593-1-6#
1428 595934
1429 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
1430 2337-1-57578578-1-578-38#
1431 0\x81\
1432 162 \#
1433 #
1434 0\x81\
1435 162 \xC0\x81\
1436 163 \xC0\x81\
1437 164 \xC0\x81\
1438 165 \xC1111E \
1439 170 \xE \
1440 171 \xE \
1441 172 \xE \
1442 1777777718#
1443 431-0-1#
1444 #
1445 #
1446 437-0437-0-168#
1447 438-04441 #
1448 44#
1449 #
1450 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1451 9459-0#
1452 461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
1453 163 \xC0\x81\
1454 164 \xC0115-0-71116-0-9-0#
1455 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1456 7474474-1-4-1-6#
1457 #475-1-61-7477 477-1477-1-78#
1458 479 utf-check-479-1474808480-#
1459 0\x81\
1460 162 \xC0\x81\
1461 163 \xC0\x81\
1462 164 \xC0\x81\
1463 165 \xC1111E \
1464 170 \xE \
1465 171 \xE \
1466 172 \xE \
1467 1777777718#
1468 431-0-1#
1469 #
1470 #
1471 437-0437-0-168#
1472 438-04441 #
1473 44#
1474 #
1475 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1476 9459-0#
1477 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
1478 0\x81\
1479 162 \xC0\x81\
1480 163BB\2131-0-1133-0 162 \xC0\x81\
1481 163 \xC0\x81\
1482 63 \xC134-0-171381\
1483 162 \xC0\x81\
1484 163 \xC0\x81\
1485 164 \xC0\x81\
1486 165 \xC1111E \
1487 170 \xE \
1488 171 \xE \
1489 172 \xE \
1490 1777777718#
1491 431-0-1#
1492 #
1493 #
1494 437-0437-0-168#
1495 438-04441 #
1496 44#
1497 #
1498 446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
1499 164 \xC0\x81\
1500 165 \xC1111E \
1501 170 \xE \
1502 171 \xE \
1503 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
1504 0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
1505 164 \xC0\x81\
1506 165 \xC1111E \
1507 170 \xE \
1508 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
1509 #
1510 #
1511 437-0437-0-168#
1512 438-04441 #
1513 44#
1514 #
1515 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
1516 0\x81\
1517 162 \xC0\x81\
1518 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
1519 163 \xC0\x81\
1520 63 \154-0-25155-0155-0-27156-0156-0-289-1-#
1521 5331
1522 31635 #
1523 0\x81\
1524 162 \xC0\x81\
1525 163 \xC0\x81\
1526 164 \xC0\x81\
1527 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
1528 0\x81\
1529 -3#
1530 #
1531 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1532 0 binary 56-7-01W@Xt5159-0159-0-2#
1533 0\x81\
1534 -3#
1535 #
1536 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1537 0 binary 56-7-01W@XtW60-0160-0-30#
1538 0\x81\
1539 162 \xC0\x81\
1540 163 \xC0\x81\
1541 164 \xC0\x81\
1542 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
1543 0\x81\
1544 162 \xC0\x81\
1545 163 \xC0\x81\
1546 164 \xC0\x81\
1547 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
1548 163 \xC0\x81\
1549 63 \xC0\x81\
1550 164 \xC0\x81\
1551 165 \xC1111E \
1552 170 \xE \
1553 171 \xE \
1554 172 \xE \
1555 1777777718#
1556 431-0-1#
1557 #
1558 #
1559 437-0437-0-168#
1560 438-04441 #
1561 44#
1562 #
1563 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1564 96111169-0-3169-0-34-0-1#
1565 #
1566 #
1567 437-0437-0-168#
1568 438-04441 #
1569 44#
1570 #
1571 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
1572 0\x81\
1573 162 \xC0\x81\
1574 163 1170-0-3170-0-3 162 \xC0\x81\
1575 163 \xC0\x81\
1576 164 \xC0\x81\
1577 165 \xC1111E \
1578 170 \xE \
1579 171 \xE \
1580 172 \xE \
1581 1777777718#
1582 431-0-1#
1583 #
1584 #
1585 437-0437-0-168#
1586 438-04441 #
1587 44#
1588 #
1589 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1590 9459-0#
1591 461-0462-1-46463-1-4646446464-1- \xC0\x81\
1592 163 \xC0\x81\
1593 164 \xC0\x81\
1594 165 \xC1111E \
1595 170 \xE \
1596 117 162 \xC0\x81\
1597 163 \xC0\x81\
1598 63 \xC0\x81\
1599 164 \xC0\x81\
1600 165 \xC1111E \
1601 170 \xE \
1602 171 \xE \
1603 172 \xE \
1604 1777777718#
1605 431-0-1#
1606 #
1607 #
1608 437-0437-0-168#
1609 438-04441 #
1610 44#
1611 #
1612 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1613 91xC0\x81\
1614 163 \xC0\x81\
1615 164 \xC0\x81\
1616 165 \xC1111E \
1617 170 \xE \
1618 11#
1619 0\x81\
1620 162 \xC0\x81\
1621 163646171438-04441 #
1622 44#
1623 #
1624 446-0446-0-1\452#
1625 01711818 162 \xC0\x81\
1626 163 \xC0\x81\
1627 164 \xC0\x81\
1628 165 \xC1111E \
1629 170 \xE \
1630 171 \xE \
1631 172 \xE \
1632 1777777718#
1633 431-0-1#
1634 #
1635 #
1636 437-0437-0-168#
1637 438-04441 #
1638 44#
1639 #
1640 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1641 9459-0#
1642 461-0462-1-46463-1-4646446464-1-163 \xC0\x81\
1643 164 \xC0\x55-0-4197-0-498-0198-0-492200-0-5222220205-0-505-0-52006-0-506-0-53-0@8wU,2:7-_@9LW,5:0-7\
1644 s: ANY_CR LONE_CR
1645 \
1646 1-1-57578578-1-578-12#
1647 0\x81\
1648 162 \x##2007-0-5207-0-532208-0-508-0-54#
1649 0\x81\
1650 162 \xC0\x81\
1651 163 \xC0\x81\
1652 164 \xC0\x81\
1653 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
1654 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1655 s: ANY_CR LONE_CR
1656 \2009-0-5209-0-54#
1657 0\x81\
1658 162 \xC0\x81\
1659 163 \xC0\x81\
1660 164 \xC0\x81\
1661 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
1662 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1663 s: ANY_CR LONE_CR
1664 \2110-0-5210-0-5#
1665 0\x81\
1666 162 \xC0\x81\
1667 163 \xC0\x81\
1668 164 \xC0\x81\
1669 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
1670 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1671 s: ANY_CR LONE_CR
1672 \2211-0-511-0-55#
1673 0\x81\
1674 162 \xC0\x81\
1675 163 \xC0\x81\
1676 164 \xC0\x81\
1677 165 \xC1111E \485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
1678 525-1-32265226-1-321212-0-5212-0-56#
1679 0\x81\
1680 162 \xC0\x81\
1681 163 \xC0\x81\
1682 164 \xC0\x81\
1683 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
1684 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1685 s: ANY_CR LONE_CR
1686 \2113-0-5213-0-562214-0214-0-57-02xC0\x81\
1687 163 \xC0\x81\
1688 164 \xC0215-0-572216-0216-0-582117-0217-0-582118-0218-0-599-1-#
1689 5331
1690 31635 #
1691 0\x81\
1692 162 \xC0\x81\
1693 163 \xC0\x81\
1694 164 \xC0\x81\
1695 165 \xC1111E 2219-0-5219-0-592220-0-6220-0-602#
1696 0\x81\
1697 162 \xC0\x81\
1698 1632 \xC0\21-0-6022222-0-6222-0-6#
1699 0\x81\
1700 -3#
1701 #
1702 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1703 0 binary 56-7-01W@XtW23-0-6223-0-61#
1704 0\x81\
1705 162 \xC0\x81\
1706 163 \xC0\x81\
1707 164 \xC0\x81\
1708 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2224-0224-0-629-1-#
1709 5331
1710 31635 #
1711 0\x81\
1712 162 \xC0\x81\
1713 163 \xC0\x81\
1714 164 \xC0\x81\
1715 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2225-0225-0-6#
1716 0\x81\
1717 162 \xC0\x81\
1718 163 \xC0\x81\
1719 164 \xC0\x81\
1720 165 \xC1111E \485485-1-481-16-1-487 utf-c2226-0226-0-63#
1721 0\x81\
1722 162 \xC0\x81\
1723 163 \xC0\x81\
1724 164 \xC0\x81\
1725 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2#
1726 0\x81\
1727 162 \xC0\x81\
1728 163BB\22220\x81\
1729 163 \xC0\x81\
1730 164 \0\x81\
1731 163 \xC0\x81\
1732 164 \xC0\x81\
1733 165 \xC1111E \
1734 170 \xE \
1735 171 \xE \
1736 172 \xE \
1737 1777777718#
1738 431-0-1#
1739 #
1740 #
1741 437-0437-0-168#
1742 438-04441 #
1743 44#
1744 #
1745 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1746 9459-0#
1747 461-0462-1334-0-6234-0-67#
1748 0\x81\
1749 -441546 546-1-42#
1750 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1751 5331
1752 31635 535-15336-235-0#
1753 0\x81\
1754 162 \xC0\x81\
1755 163 \xC0\x81\
1756 164 \xC0\x81\
1757 165 \xC1111E \
1758 Other f11-578-12#
1759 0\x81\
1760 162 \x##
1761 0\x81\
1762 162 \xC0\x81\
1763 163 \xC0\x81\
1764 164 \xC0\x81\
1765 165 \xC1111E \
1766 170 \xE \
1767 171 \xE \
1768 172 \xE \
1769 1777777718#
1770 431-0-1#
1771 #
1772 #
1773 437-0437-0-168#
1774 438-04441 #
1775 44#
1776 #
1777 446-0446-0-1\4524-1524-1-31#
1778 525-1-32265226-1-32#
1779 #
1780 32528-1-35295229-1-#
1781 5331
1782 31-1-3#
1783 532-1-3#
1784 #
1785 53#
1786 5334-1-335 535-15336-1-337 utf-check-537-1#
1787 38 utf-check-5338-1-3#
1788 #
1789 #
1790 40 5440-1-39#
1791 #
1792 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
1793 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1794 5331
1795 31635 535-15336-1-337 7f-check-537-1#
1796 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
1797 #
1798 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
1799 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
1800 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
1801 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
1802 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1803 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
1804 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
1805 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
1806 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
1807 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
1808 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
1809 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
1810 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
1811 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
1812 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
1813 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
1814 33593-1593-1-6#
1815 595934
1816 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
1817 2337-1-57578578-1-578-38#
1818 0\x81\
1819 162 \#
1820 #
1821 0\x81\
1822 162 \xC0\x81\
1823 163 \xC0\x81\
1824 164 \xC0\x81\
1825 165 \xC1111E \
1826 170 \xE \
1827 171 \xE \
1828 172 \xE \
1829 1777777718#
1830 431-0-1#
1831 #
1832 #
1833 437-0437-0-168#
1834 438-04441 #
1835 44#
1836 #
1837 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1838 9459-0#
1839 461-0462-1-46463-1-4646446464#
1840 0\x81\
1841 -441546 546-1-42#
1842 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1843 5331
1844 31635 535-15336-323239-040-0-7240-0-70578578-1-578-12#
1845 0\x81\
1846 162 \x##
1847 0\x81\
1848 162 \xC0\x81\
1849 163 \xC0\x81\
1850 164 \xC0\x81\
1851 165 \xC1111E \
1852 170 \xE \
1853 #
1854 0\x81\
1855 4241-0241-0-702245-0-725-0-7#
1856 0\x81\
1857 -3#
1858 #
1859 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1860 0 binary 56-7-01W@XtW4250-0-7250-0-752554-0-7254-0-77578578-1-578-12#
1861 0\x81\
1862 162 \x##
1863 0\x81\
1864 162 \xC0\x81\
1865 163 \xC0\x81\
1866 164 \x#
1867 0\x81\
1868 55558-0-7559-063 \xC0\x81\
1869 164 \xC0\x81\
1870 165 \xC1111E \
1871 170 \xE \
1872 171 \xE \
1873 0\x81\
1874 168#
1875 438-04441 #
1876 44#
1877 #
1878 446-0446-0-1\4524-1524-1-31#
1879 525-1-32265226-1-32#
1880 #
1881 32528-1-35295229-1-#
1882 5331
1883 31-1-3#
1884 532-1-3#
1885 #
1886 53#
1887 5334-1-335 535-15336-1-337 utf-check-537-1#
1888 38 utf-check-5338-1-3#
1889 #
1890 #
1891 40 5440-1-39#
1892 #
1893 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
1894 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
1895 5331
1896 31635 535-15336-1-337 7f-check-537-1#
1897 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
1898 #
1899 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
1900 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
1901 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
1902 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
1903 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
1904 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
1905 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
1906 23 \x00ABC\rX@dMG,j:Line endings: ANY_C620-2-6620-2-666E_CR
1907 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1908 s: ANY_CR LONE_CR
1909 \
1910 -1-32#
1911 #
1912 32528-1-352952292
1913 0\x893-1-49 162 \xC0\x81\
1914 163 \xC0\x81\
1915 163 \xC395-1-5397-1998-19443 \xC0\x81\
1916 164 2626-2626-2-694627-2627-2-6963E_CR
1917 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1918 s: ANY_CR LONE_CR
1919 \
1920 -1-32#
1921 #
1922 32528-1-35295229
1923 0\x893-1-49 162 \xC0\x81\
1924 163 \xC0\x81\
1925 163 \xC395-1-5397-1998-19443 \xC0\x81\
1926 164 56658-2658-2-85658 #
1927 #
1928 560512O@1~fl,Z:Line endi13z#
1929 0\x81\
1930 162 \xC0\x81\
1931 163 \xC0\x81\
1932 164 \xC0\x81\
1933 165 \xC1111E \
1934 170 \xE \
1935 171 \xE \
1936 172 \xE \
1937 1777777718#
1938 431-0-1#
1939 #
1940 #
1941 437-0437-0-168#
1942 438-04441 #
1943 44#
1944 #
1945 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
1946 9459-0#
1947 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
1948 7474474-1-4-1-6#
1949 #475-1-61-7477 477-1477-1-78#
1950 479 utf-check-479-1474808480-1-9481#
1951 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
1952 525-1-32265226-1-32#
1953 #
1954 32528-1-35295229532-1-3#
1955 #
1956 53#
1957 5334-1k-5338-1-3#
1958 #
1959 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
1960 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
1961 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
1962 "\xFF\xFE" : "\xFE\xFF"}]CR LONE_CR
1963 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
1964 s: ANY_CR LONE_CR
1965 \
1966 1-1-57578578-1-578-12#
1967 0\x81\
1968 162 \x##
1969 0\x81\
1970 162 \xC0\x81\
1971 163 \xC0\x81\
1972 164 \xC0\x81\
1973 165 \xC1111E \
1974 170 \xE \
1975 171 \xE \
1976 172 \xE \
1977 1777777718#
1978 431-0-1#
1979 #
1980 #
1981 437-0437-0-168#
1982 438-04441 #
1983 44#
1984 #
1985 446-0446-0-1\4524-1524-1-31#
1986 525-1-32265226-1-32#
1987 #
1988 32528-1-35295229-1-#
1989 5331
1990 31-1-3#
1991 532-1-3#
1992 #
1993 53#
1994 5334-1-335 535-15336-1-337 utf-check-537-1#
1995 38 utf-check-5338-1-3#
1996 #
1997 #
1998 40 5440-1-39#
1999 #
2000 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
2001 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
2002 5331
2003 31635 535-15336-1-337 7f-check-537-1#
2004 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
2005 #
2006 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
2007 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
2008 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
2009 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
2010 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
2011 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
2012 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
2013 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
2014 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
2015 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
2016 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
2017 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
2018 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
2019 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
2020 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
2021 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
2022 33593-1593-1-6#
2023 595934
2024 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
2025 2337-1-57578578-1-578-38#
2026 0\x81\
2027 162 \#
2028 #
2029 0\x81\
2030 162 \xC0\x81\
2031 163 \xC0\x81\
2032 164 \xC0\x81\
2033 165 \xC1111E \
2034 170 \xE \
2035 171 \xE \
2036 172 \xE \
2037 1777777718#
2038 431-0-1#
2039 #
2040 #
2041 437-0437-0-168#
2042 438-04441 #
2043 44#
2044 #
2045 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2046 9459-0#
2047 461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
2048 163 \xC0\x81\
2049 164 \xC0115-0-71116-0-9-0#
2050 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
2051 7474474-1-4-1-6#
2052 #475-1-61-7477 477-1477-1-78#
2053 479 utf-check-479-1474808480-#
2054 0\x81\
2055 162 \xC0\x81\
2056 163 \xC0\x81\
2057 164 \xC0\x81\
2058 165 \xC1111E \
2059 170 \xE \
2060 171 \xE \
2061 172 \xE \
2062 1777777718#
2063 431-0-1#
2064 #
2065 #
2066 437-0437-0-168#
2067 438-04441 #
2068 44#
2069 #
2070 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2071 9459-0#
2072 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
2073 0\x81\
2074 162 \xC0\x81\
2075 163BB\2131-0-1133-0 162 \xC0\x81\
2076 163 \xC0\x81\
2077 63 \xC134-0-171381\
2078 162 \xC0\x81\
2079 163 \xC0\x81\
2080 164 \xC0\x81\
2081 165 \xC1111E \
2082 170 \xE \
2083 171 \xE \
2084 172 \xE \
2085 1777777718#
2086 431-0-1#
2087 #
2088 #
2089 437-0437-0-168#
2090 438-04441 #
2091 44#
2092 #
2093 446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
2094 164 \xC0\x81\
2095 165 \xC1111E \
2096 170 \xE \
2097 171 \xE \
2098 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
2099 0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
2100 164 \xC0\x81\
2101 165 \xC1111E \
2102 170 \xE \
2103 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
2104 #
2105 #
2106 437-0437-0-168#
2107 438-04441 #
2108 44#
2109 #
2110 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
2111 0\x81\
2112 162 \xC0\x81\
2113 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
2114 163 \xC0\x81\
2115 63 \154-0-25155-0155-0-27156-0156-0-289-1-#
2116 5331
2117 31635 #
2118 0\x81\
2119 162 \xC0\x81\
2120 163 \xC0\x81\
2121 164 \xC0\x81\
2122 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
2123 0\x81\
2124 -3#
2125 #
2126 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
2127 0 binary 56-7-01W@Xt5159-0159-0-2#
2128 0\x81\
2129 -3#
2130 #
2131 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
2132 0 binary 56-7-01W@XtW60-0160-0-30#
2133 0\x81\
2134 162 \xC0\x81\
2135 163 \xC0\x81\
2136 164 \xC0\x81\
2137 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
2138 0\x81\
2139 162 \xC0\x81\
2140 163 \xC0\x81\
2141 164 \xC0\x81\
2142 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
2143 163 \xC0\x81\
2144 63 \xC0\x81\
2145 164 \xC0\x81\
2146 165 \xC1111E \
2147 170 \xE \
2148 171 \xE \
2149 172 \xE \
2150 1777777718#
2151 431-0-1#
2152 #
2153 #
2154 437-0437-0-168#
2155 438-04441 #
2156 44#
2157 #
2158 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2159 96111169-0-3169-0-34-0-1#
2160 #
2161 #
2162 437-0437-0-168#
2163 438-04441 #
2164 44#
2165 #
2166 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
2167 0\x81\
2168 162 \xC0\x81\
2169 163 1170-0-3170-0-3 162 \xC0\x81\
2170 163 \xC0\x81\
2171 164 \xC0\x81\
2172 165 \xC1111E \
2173 170 \xE \
2174 171 \xE \
2175 172 \xE \
2176 1777777718#
2177 431-0-1#
2178 #
2179 #
2180 437-0437-0-168#
2181 438-04441 #
2182 44#
2183 #
2184 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2185 9459-0#
2186 461-0462-1-46463-1-4646446464-1- \xC0\x81\
2187 163 \xC0\x81\
2188 164 \xC0\x81\
2189 165 \xC1111E \
2190 170 \xE \
2191 117 162 \xC0\x81\
2192 163 \xC0\x81\
2193 63 \xC0\x81\
2194 164 \xC0\x81\
2195 165 \xC1111E \
2196 170 \xE \
2197 171 \xE \
2198 172 \xE \
2199 1777777718#
2200 431-0-1#
2201 #
2202 #
2203 437-0437-0-168#
2204 438-04441 #
2205 44#
2206 #
2207 446-0446-0-1747448 49449-052 52-0-174524-0-2464 \xC0\x81\
2208 165 \xC1111E \
2209 170 \xE \
2210 171 \xE \
2211 172 \x#
2212 0\x81\
2213 162 \xC0\x81\
2214 163 \xC0\x81\
2215 164 \xx81\
2216 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
2217 7474474-1-4-12125-0-25ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2218 s: ANY_CR LONE_CR
2219 \
2220 1-1-57578578-1-578-125-0-2564 \xC0\x81\
2221 165 \xC1111E \
2222 170 \xE \
2223 171 \xE \
2224 172 \x#
2225 0\x81\
2226 162 \xC0\x81\
2227 163 \xC0\x81\
2228 164 \xC0\x81\
2229 165 \xC1111E \
2230 170267-0267-0-83-1#
2231 0\x81\
2232 162 \334-1-335 532R L\
2233 21 \x00A\rX@dMG,j:Line en26-0-26ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2234 s: ANY_CR LONE_CR
2235 \
2236 1-1-57578578-1-578-126-0-2664 \xC0\x81\
2237 165 \xC1111E \
2238 170 \xE \
2239 171 \xE \
2240 172 \x#
2241 0\x81\
2242 162 \xC0\x81\
2243 163 \xC0\x81\
2244 164 \xC0\x81\
2245 165 \xC1111E \
2246 170267-0267-0-83-1#
2247 0\x81\
2248 162 \334-1-335 53127-0-27ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2249 s: ANY_CR LONE_CR
2250 \
2251 1-1-57578578-1-578-127-0-2764 \xC0\x81\
2252 165 \xC1111E \
2253 170 \xE \
2254 171 \xE \
2255 172 \x#
2256 0\x81\
2257 162 \xC0\x81\
2258 163 \xC0\x81\
2259 164 \xC0\x81\
2260 165 \xC1111E \
2261 170267-0267-0-83-1#
2262 0\x81\
2263 162 \334-1-335 53128-0-28ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2264 s: ANY_CR LONE_CR
2265 \
2266 1-1-57578578-1-578-128-0-2864 \xC0\x81\
2267 165 \xC1111E \
2268 170 \xE \
2269 171 \xE \
2270 172 \x#
2271 0\x81\
2272 162 \xC0\x81\
2273 163 \xC0\x81\
2274 164 \xC0\x81\
2275 165 \xC1111E \
2276 170267-0267-0-83-1#
2277 0\x81\
2278 162 \334-1-335 532-1-19333-13329ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2279 s: ANY_CR LONE_CR
2280 \
2281 1-1-57578578-1-578-129-0-2952 52-0-17454 454-0-1754-05 456#
2282 9459-0#
2283 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-#
2284 0\x81\
2285 162 \xC0\x81\
2286 163 \xC0\x81\
2287 164 \xC0\x81\
2288 165 \xC1111E \3130-0-3 1777777718#
2289 431-0-1#
2290 #
2291 #
2292 437-0437-0-168#
2293 438-04441 #
2294 44#
2295 #
2296 446-0446-0-1747448 494490-0-378#
2297 479 utf-check-479-1474808480-1-9481#
2298 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
2299 525-57-111485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524523131-0-30ABC\rX@dMG,j:Line endings: ANY_CR \
2300 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
2301 31-0-3152 52-0-17454 454-0-1754-05 456#
2302 9459-0#
2303 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-#
2304 0\x81\
2305 162 \xC0\x81\
2306 163 \xC0\x81\
2307 164 \xC0\x81\
2308 165 \xC1111E \4LW,O@1~fl,Z:Line\
2309 0 binary 132-0-32 \xE \
2310 172 \xE \
2311 1777777718#
2312 431-0-1#
2313 #
2314 #
2315 437-0437-0-168#
2316 438-04441 #
2317 2-0-3252 52-0-17454 454-0-1754-05 456#
2318 9459-0#
2319 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-#
2320 0\x81\
2321 162 \xC0\x81\
2322 163 \xC0\x81\
2323 164 \xC0\x81\
2324 165 \xC1111E \38dM,1:7Z@16Other flags: NONEV17 \x33-0-33 \xE \
2325 172 \xE \
2326 1777777718#
2327 431-0-1#
2328 #
2329 #
2330 437-0437-0-168#
2331 438-04441 #
2332 44#
2333 3364 \xC0\x81\
2334 165 \xC1111E \
2335 170 \xE \
2336 171 \xE \
2337 172 \x#
2338 0\x81\
2339 1\
2340 164 \xC34 \xE \
2341 172 \xE \
2342 1777777718#
2343 431-0-1#
2344 #
2345 #
2346 437-0437-0-168#
2347 438-04441 #
2348 4-0-3452 52-0-17454 454-0-1754-05 456#
2349 9459-0#
2350 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
2351 0\x81\
2352 162 \xC0\x81\
2353 163 \xC0\x81\
2354 164 \xC0\x81\
2355 165 \xC1111E \
2356 170 \xE \
2357 171 \xE \
2358 172 \xE \
2359 1777777718#1135-0-35 \xE \
2360 172 \xE \
2361 1777777718#
2362 431-0-1#
2363 #
2364 #
2365 437-0437-0-168#
2366 438-04441 #
2367 5-0-35-57#
2368 0\x81\
2369 162 \xC0\x81\
2370 163469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
2371 7474474-1-4-1-6#
2372 #475-1-61-7477 477-1477-1-78#
2373 479 utf-check-479-1474808480-1-9481#
2374 848282-1-1482-1-10148484484-1-1484-1\x81\
2375 164 \xC0\x81\
2376 165 \x136-0-36 \xE \
2377 172 \xE \
2378 1777777718#
2379 431-0-1#
2380 #
2381 #
2382 437-0437-0-168#
2383 438-04441 #
2384 6-0-3643-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
2385 #
2386 560512O@1~fl,Z:L \
2387 171 \x37 \xE \
2388 172 \xE \
2389 1777777718#
2390 431-0-1#
2391 #
2392 #
2393 437-0437-0-168#
2394 438-04441 #
2395 7-0-3752 52-0-17454 454-0-1754-05 456#
2396 9459-0#
2397 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
2398 0\x81\
2399 162 \xC0\x81\
2400 163 \xC0\x81\
2401 164 \xC0\x81\
2402 165 \xC1111E \
2403 170 \xE \
2404 171 \xE \
2405 172 \xE \
2406 1777777718#
2407 4138-0-38 \xE \
2408 172 \xE \
2409 1777777718#
2410 431-0-1#
2411 #
2412 #
2413 437-0437-0-168#
2414 438-04441 #
2415 8-0-38eq "littleEndian" ? \
2416 "\xF#
2417 0\x81\
2418 162 \xC0\x81\
2419 163 \xC0\x81\
2420 164 \xC0\x81\
2421 165 \xC1111E \
2422 17444-1-7444-1-7 162 \xC0\x81\
2423 163 \xC0\x81\
2424 164 \xC0\x81\
2425 165 \xC1111E \
2426 3139-0-39 \xE \
2427 172 \xE \
2428 1777777718#
2429 431-0-1#
2430 #
2431 #
2432 437-0437-0-168#
2433 438-04441 #
2434 9-0-3943-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
2435 #
2436 560512O@1~fl,Z:LxE \
2437 1777777718#
2438 431-0-1#
2439 #
2440 #
2441 437-0437-0-168#
2442 438-04441 #
2443 44#
2444 #
2445 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2446 9459-0#
2447 461 162 \xC0\x4140-0-4tW,j:Line enther #
2448 0\x643-2-7dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line ending40-0-4 \
2449 170 \xE \
2450 171 \xE \
2451 172 \xE \
2452 1777777718#
2453 431-0-1#
2454 #
2455 #
2456 437-0437-0-168#
2457 438-04441 #
2458 44#
2459 #
2460 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2461 9459-0#
2462 461 162 \xC0\x141-0-40ABC\rX@dMG,j:Line endings: ANY_CR \
2463 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
2464 41-0-4152 52-0-17454 454-0-1754-05 456#
2465 9459-0#
2466 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
2467 0\x81\
2468 162 \xC0\x81\
2469 163 \xC0\x81\
2470 164 \xC0\x81\
2471 165 \xC1111E \
2472 170 \xE \
2473 171 \xE \
2474 172 \xE \
2475 1777777718#
2476 4142-0-42ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2477 s: ANY_CR LONE_CR
2478 \
2479 1-1-57578578-1-578-142-0-42 \xE \
2480 172 \xE \
2481 1777777718#
2482 431-0-1#
2483 #
2484 #
2485 437-0437-0-168#
2486 438-04441 #
2487 44#
2488 #
2489 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2490 9459-0#
2491 461-0462-1-46463-1-464642 \xC0\x81\
2492 163 \xC0\x81\
2493 1143-0-43ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2494 s: ANY_CR LONE_CR
2495 \
2496 1-1-57578578-1-578-143-0-4343-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
2497 #
2498 560512O@1~fl,Z:L-5397-1998-19443 \xC0\x81\
2499 516-2-1516-2-14117-2517-2-14
2500 0\x893-1-49 162 \xC0\x81\
2501 163 \xC0\x81\
2502 163 \xC395-1-5397-1998-19443 \xC0\x81\
2503 1518-25144-0-44ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2504 s: ANY_CR LONE_CR
2505 \
2506 1-1-57578578-1-578-144-0-447777718#
2507 431-0-1#
2508 #
2509 #
2510 437-0437-0-168#
2511 438-04441 #
2512 44#
2513 #
2514 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2515 9r flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
2516 2 [1-16-1-487 utf-chec145-0-45ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2517 s: ANY_CR LONE_CR
2518 \
2519 1-1-57578578-1-578-145-0-45eq "littleEndian" ? \
2520 "\xF#
2521 0\x81\
2522 162 \xC0\x81\
2523 163 \xC0\x81\
2524 164 \xC0\x81\
2525 165 \xC1111E \
2526 17444-1-7444-1-7 162 \xC0\x81\
2527 31
2528 31635 535-15336-1-337 7f-check-537-1#
2529 38 u843-1-5444 544-1-41595450-1-44551551-1-10555146-0-46ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2530 s: ANY_CR LONE_CR
2531 \
2532 1-1-57578578-1-578-146-0-4643-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
2533 #
2534 560512O@1~fl,Z:L163 \xC0\x81\
2535 164 \xC0\x81\
2536 165 \xC1111E \
2537 170 \xE \
2538 171 \xE \
2539 172 \xE \
2540 1777777718#
2541 431-0-1#
2542 #
2543 #
2544 437-0437-0-168#
2545 438-04\
2546 171 \xE \
2547 172 \xE 47-0-47ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2548 s: ANY_CR LONE_CR
2549 \
2550 1-1-57578578-1-578-147-0-475 \xC1111E \
2551 170 \xE \
2552 171 \xE \
2553 172 \xE \
2554 1777777718#
2555 431-0-1#
2556 #
2557 #
2558 437-0437-0-168#
2559 438-04441 #
2560 44#
2561 #
2562 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2563 9459-0#
2564 461-0462-1-46463-1-46148-0-48ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2565 s: ANY_CR LONE_CR
2566 \
2567 1-1-57578578-1-578-148-0-4855117-1-47558 #
2568 #
2569 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
2570 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
2571 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
2572 11149-0-49ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
2573 s: ANY_CR LONE_CR
2574 \
2575 1-1-57578578-1-578-149-0-4964 \xC0\x81\
2576 165 \xC1111E \
2577 170 \xE \
2578 171 \xE \
2579 172 \x#
2580 0\x81\
2581 1150-0-5 162 \xC0\x81\
2582 163 \xC0\x81\
2583 164 \xC0\x81\
2584 165 \xC1111E \
2585 \xE \
2586 0-0-52 \xC0\x81\
2587 163 \xC0\x81\
2588 164 \xC0\x81\
2589 165 \xC1111E \
2590 5569-2-4569-2-40yes71-2571-2-41yes57yesO@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
2591 0\x8yes5#
2592 0\x81\
2593 162 \xC0\x81\
2594 1636469469577-2-477-2-44yes55151-0-50ABC\rX@dMG,j:Line endings: ANY_CR \
2595 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
2596 51-0-5154545-1-441546 546-1-42#
2597 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
2598 5331
2599 31635 5162 \xC0\x81\
2600 52 164 \xC0\x81\
2601 165 \xC1111E \
2602 170 \xE \
2603 171 \xE \
2604 172 \x2-0-5264 \xC0\x81\
2605 165 \xC1111E \
2606 170 \xE \
2607 171 \xE \
2608 172 \x#
2609 0\x81\
2610 158dM,1:7Z@16Other flags: NONEV17 \x53-0-53 164 \xC0\x81\
2611 165 \xC1111E \
2612 170 \xE \
2613 171 \xE \
2614 172 \x3-0-5352 52-0-17454 454-0-1754-05 456#
2615 9459-0#
2616 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
2617 0\x81\
2618 162 \xC0\x81\
2619 163 \xC0\x81\
2620 164 \xC0\x81\
2621 165 \xC1111E \
2622 170 \xE \
2623 171 \xE \
2624 172 \xE \
2625 1777777718#
2626 43\
2627 162 \xC0\x81\
2628 163 \xC0\x\x81\
2629 164 \xC0\x81\
2630 165 \xC1111E \
2631 170 \xE \
2632 171 \xE \
2633 172 \xE \
2634 1777777718#
2635 431-0-1#
2636 #
2637 #
2638 437-0437-0-168#
2639 438-04441 #
2640 44#
2641 #
2642 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2643 9459-0#
2644 461163 \xC0\x81\
2645 164 \xC0\x81\
2646 165 \xC1111E \
2647 170 \xE \
2648 171 \xE \
2649 450-1#
2650 0\x81\
2651 162 \xC0\x81\
2652 163 \xC0\451-153 \xC0\x81\
2653 164 \xC0\x81\
2654 63 \xC0\x81\
2655 164 \xC0\x81\
2656 165 \xC1111E \
2657 170 \xE \
2658 171 \xE \
2659 172 \xE \
2660 1777777718#
2661 431-0-1#
2662 #
2663 #
2664 437-0437-0-168#
2665 438-04441 #
2666 44#
2667 #
2668 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2669 9459-0#
2670 461-0462-1-46463-1-4646453-163 \xC0\x81\
2671 164 \xC0\x81\
2672 165 \xC1111E \
2673 170 \xE \
2674 171 \xE \
2675 0\x81\
2676 163 \xC0\x81\
2677 164 \xC0\x81\
2678 165 \xC1111E \
2679 170 \xE \
2680 171 \xE \
2681 172 \xE \
2682 1777777718#
2683 431-0-1554-1xC0\x81\
2684 163 \xC0\x81\
2685 164 \xC0\x81\
2686 165 \xC1111E \
2687 170 \xE \
2688 #
2689 0\x81\5457-1-8457-1-81#
2690 0\x81\
2691 162 \xC0\x81\
2692 163 \xC0\x81\
2693 164 \xC0\x81\
2694 165 \xC1111E \
2695 17endings: ANY_458-1458-1-826#
2696 0\x81\
2697 162 \xC0\x81\
2698 163 \xC461-1-8363 \xC0\x81\
2699 164 \xC0\x81\
2700 63 \xC0\x81\
2701 164 \xC0\x81\
2702 165 \xC1111E \
2703 170 \xE \
2704 171 \xE \
2705 172 \xE \
2706 1777777718#
2707 431-0-1#
2708 #
2709 #
2710 437-0437-0-168#
2711 438-04441 #
2712 44#
2713 #
2714 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2715 9459-0#
2716 461-0462-1-46463-1-46464664-1-8464-1-856467-1468-1-8468-17#
2717 0\x81\
2718 162 \xC0\x81\
2719 163 \xC471-1-8873 \xC0\x81\
2720 164 \xC0\x81\
2721 63 \xC0\x81\
2722 164 \xC0\x81\
2723 165 \xC1111E \
2724 170 \xE \
2725 171 \xE \
2726 172 \xE \
2727 1777777718#
2728 431-0-1#
2729 #
2730 #
2731 437-0437-0-168#
2732 438-04441 #
2733 44#
2734 #
2735 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2736 9459-0#
2737 461-0462-1-46463-1-4646774-1#
2738 0\x81\
2739 162 \xC0\x81\
2740 1636469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
2741 7474474-1-4-1-6#
2742 #475-1-61-7477 477-1477-1-78#
2743 479 utf-check-479-1474808480-1-9481#
2744 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
2745 525-17477-1-962 \xC0\x81\
2746 163 \xC0\x81\
2747 164 \xC0\x81\
2748 165 \xC1111E \
2749 170 \xE \
2750 171 \xE \
2751 172 \xE \
2752 1777777718#
2753 4#
2754 0\x81\
2755 162 \xC0\x81\
2756 163 \xC0\x81\
2757 164 \xC0\x81\
2758 165 \xC1111E \
2759 170438-04441 #
2760 44#
2761 #
2762 446-0446-0-1\452#
2763 0\x8178-1-92#
2764 0\x81\
2765 -3#
2766 #
2767 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
2768 0 binary 56-7-01W@XtW78#
2769 0\x81\
2770 162 \xC0\x81\
2771 163 \xC0\81-1-93-13 \xC0\x81\
2772 164 \xC0\x81\
2773 63 \xC0\x81\
2774 164 \xC0\x81\
2775 165 \xC1111E \
2776 170 \xE \
2777 171 \xE \
2778 172 \xE \
2779 1777777718#
2780 431-0-1#
2781 #
2782 #
2783 437-0437-0-168#
2784 438-04441 #
2785 44#
2786 #
2787 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2788 9459-0#
2789 461-0462-1-46463-1-464648484-1#
2790 0\x81\
2791 162 \xC0\x81\
2792 163 \xC0\x81\
2793 164 \xC0\x81\
2794 165 \xC1111E \
2795 \xE \
2796 172 \xE \
2797 1777777718#
2798 431-0-1#
2799 #
2800 #
2801 437-0437-0-168#
2802 438-04441 #
2803 44#
2804 #
2805 446-0446-0-1\4524-1524-1-31#
2806 525-1-32265226-1-32#4889-2-89-2-0yes49490-2-yes49yes494495-2-95-2-3yes4496-2-496-2-44497-2-yesyes00-2-yes12#
2807 0\x81\
2808 162 \x##
2809 0\x81\
2810 162 \xC0\x81\
2811 163 \xC0\x81\
2812 164 \xC0\x81\
2813 165 \xC1111E \
2814 170 \xE \
2815 171 \xE \
2816 172 \xE \
2817 1777777718#
2818 431-0-1#
2819 #
2820 #
2821 437-0437-0-168#
2822 438-04441 #
2823 44#
2824 #
2825 446-0446-0-1\4524-1524-1-31#
2826 525-1-32265226-1-32#
2827 #
2828 32528-1-35295229-#
2829 0\x81\
2830 162 \xC0\x81\
2831 163 \xC0\x81\
2832 164 \xC0\x81\
2833 165 \xyes04-2-yes06-2-0507-2-9 \xC0\x81\
2834 164 \xC0\x81\
2835 165 \xC1111E \
2836 170 \xE \
2837 171 \xE \
2838 172 \xE \
2839 1777777718#
2840 431-0-1#
2841 #
2842 #
2843 437-0437-0-168#
2844 438-04441 #
2845 44#
2846 0\x81\
2847 162 \xC0\x81\
2848 163 \xC0\x81\
2849 164 \xC0\x81\
2850 165 \xCyes508-2-1009-2-1yes10-2-110-2-1111-2-111-2-11yesyesxC0\x81\
2851 163 \xC0\x81\
2852 164 \xC0\x81\
2853 165 \xC1111E \
2854 170 \xE \
2855 171 \xE \
2856 172 \xE \
2857 1777777718#
2858 431-0-1#
2859 #
2860 #
2861 437-0437-0-168#
2862 438-04441 #
2863 44#
2864 #
2865 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2866 9459-0#
2867 461-0462-1-46463-1-4646446464-1-1465 465-1-2 \xC0\x81\
2868 163 \xC0\x81\
2869 164 \xC0\x81\
2870 165 \xC1111E \
2871 yes16-2-1516-2-14#
2872 0\x81\
2873 -3#
2874 #
2875 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
2876 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:f {$::RESULT ne $result}11kG,7:1\
2877 s: ANY_CR LONE_CR
2878 Other flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
2879 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
2880 "\xFF\xFE" : "\xFE\xyesyes5220-2-1520-2-1652yes55224-2524-2-15525-2525-2-15226-2-126-2-1#
2881 0\x81\
2882 162 \xC0\x81\
2883 163BB\xB438-04441 #
2884 44#
2885 #
2886 446-0446-0-1\4524-1524-1-31#
2887 525-1-32265226-1-32#
2888 #
2889 32528-1-35295229-1-#
2890 5331
2891 31-1-3#
2892 532-1-3#
2893 #
2894 53#
2895 5334-1-335 535-15336-1-337 utf-check-537-1#
2896 38 utf-check-5338-1-3#
2897 #
2898 #
2899 40 5440-1-39#
2900 #
2901 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
2902 547-15450-1-44551551-1-4#
2903 0\x81\
2904 162 \xC0\x81\
2905 163 \xC0\x81\
2906 164 \xC0\x81\
2907 165 \xC1111E \
2908 0\x81\
2909 163 \xC0\x81\
2910 164 \xC0\x81\
2911 165 \xC1111E \
2912 170 \xE \
2913 171 \xE \
2914 172 \xE \
2915 1777777718#
2916 431-0-1#
2917 #
2918 #
2919 437-0437-0-168#
2920 438-04441 #
2921 44#
2922 #
2923 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2924 9459-0#
2925 461-0462-1-46463-1-4646446464-1-1465 465-1-4C0\x81\
2926 163 \xC0\x81\
2927 164 \xC0\x81\
2928 165 \xC1111E \
2929 170 \xE \
2930 175531-2-2438-04441 #
2931 44#
2932 #
2933 446-0446-0-1\4524-1524-1-31#
2934 525-1-32265226-1-32#
2935 #
2936 32528-1-35295229-1-#
2937 5331
2938 31-1-3#
2939 532-1-3#
2940 #
2941 53#
2942 5334-1-335 535-15336-1-337 utf-check-537-1#
2943 38 utf-check-5338-1-3#
2944 #
2945 #
2946 40 5440-1-39#
2947 #
2948 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
2949 547-15450-1-44551551-1-44#
2950 0\x81\
2951 162 \xC0\x81\
2952 163 \xC0\x81\
2953 164 \xC0\x81\
2954 165 \xC1111E \
2955 0\x81\
2956 163 \xC0\x81\
2957 164 \xC0\x81\
2958 165 \xC1111E \
2959 170 \xE \
2960 171 \xE \
2961 172 \xE \
2962 1777777718#
2963 431-0-1#
2964 #
2965 #
2966 437-0437-0-168#
2967 438-04441 #
2968 44#
2969 #
2970 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
2971 9459-0#
2972 461-0462-1-46463-1-4646446464-1-1465 465-1-46\x81\
2973 163 \xC0\x81\
2974 164 \xC0\x81\
2975 165 \xC1111E \
2976 170 \xE \
2977 171 5535-25336-2536-2-243537-2537-2-2453538-2-238-2-25539-2-2539-2-2540-2-2540-2-2641-2-241-2-26O@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
2978 0\x81\
2979 162 \xC0\x81\
2980 163 \xC0\x81\
2981 164 \xC0\x81\
2982 165 \xC1111E \
2983 170 \xE \
2984 171 \xE \
2985 172 \xE \
2986 1777777718#
2987 431-0-1#
2988 #
2989 #
2990 437-0437-0-168#
2991 438-04441 #
2992 44#
2993 #
2994 446-0446-0-1747448 49449-052548-249-2-3549-2-30#
2995 0\x81\
2996 -3#
2997 #
2998 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
2999 0 binary 56-7-01W@X5554-2 163 \xC0\x81\
3000 164 \xC0\x81\
3001 165 \xC1111E \
3002 170 \xE \
3003 171 \xE 62 \xC055O@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
3004 0\555-2-3yes5556-255557-2-357-2-3yes5559-2-3yes5560-2-35661-2-361-2-36yes5662-2-362-2-375563-2-3563-2-37yes5664-2-364-2-38O@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
3005 0\x81\
3006 162 \xC0\x81\
3007 163 \xC0\x81\
3008 164 \xC0\x81\
3009 165 \xC1111E \
3010 170 \xE \
3011 171 \xE \
3012 172 \xE \
3013 1777777718#
3014 431-0-1#
3015 #
3016 #
3017 437-0437-0-168#
3018 438-04441 #
3019 44#
3020 #
3021 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456yes5yes1-4154545-1-441546 546-1-42#
3022 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
3023 5331
3024 31635 535-15336-1-337 7f-check-537-1#
3025 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
3026 #
3027 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
3028 Other#
3029 0\x81\
3030 162 \xC0\x81\
3031 163 \xC0\x81\
3032 164 \xC0\x81\
3033 165 \xC1111E \
3034 5569-2-4569-2-40yes71-2571-2-41yes57yesO@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
3035 0\x8yes5#
3036 0\x81\
3037 162 \xC0\x81\
3038 1636469469577-2-477-2-44yes57yes5881-2581-2-46#
3039 0\x81\
3040 -3#
3041 #
3042 Z@Yyk,6:155-6-19@14Lyes82-2582-2-475endings: ANY_CR L\
3043 21 \x00A\rX#
3044 0\x81\
3045 162 \xC0\x81\
3046 163 \xC0\x81\
3047 164 \xC0\x81\
3048 165 \xC1111E \
3049 170 \xE \
3050 171 \xE \
3051 172 \xE \
3052 1777777718#
3053 431-0-1#
3054 #
3055 #
3056 437-0437-0-168#
3057 438-04441 #
3058 44#
3059 #
3060 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#yes58O@1~fl,Z:Line endi13z,2:7-Z@1m40,6#
3061 0\x8585-2-48#
3062 0\x81\
3063 -3#
3064 #
3065 Z@Yyk,6:155-6-19@14Lyes5587-2-4987-2-498588-2-5588-2-505889-2-56 455117-1-47558 #
3066 #
3067 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
3068 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
3069 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
3070 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
3071 20 \x00ABCDX@dMG,j:Line #
3072 0\x81\
3073 162 \xC0\x81\
3074 163 \xC0\x81\
3075 164 \xC0\x81\
3076 165 \xC1111E \
3077 595955596-2-55999-2-56600-2-500-2-566601-2-56602-2602-2-57603-2603-2-57#
3078 0\x81\
3079 162 \xC0\x81\
3080 163469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3081 7474474-1-4-1-6#
3082 #475-1-61-7477 477-1477-1-78#
3083 479 utf-check-479-1474808480-1-9481#
3084 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-146-0446-0-1747448 49449-052 52-0-1#
3085 0\x81\
3086 162 \xC0\x81\
3087 163 \xC0\x81\
3088 164 \xC0\x81\
3089 165 \xC1111E \
3090 170 \xE \
3091 171 \xE \
3092 172 \xE \
3093 1777777718#
3094 431-0-1#
3095 #
3096 #
3097 437-0437-0-168#
3098 438-04441 #
3099 44#
3100 #
3101 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3102 0\x81\
3103 162 \xC0\x81\
3104 163 \xC0\x81\
3105 164 \xC0\x81\
3106 165 \xC1111E \
3107 171612-2612-2-62#
3108 0\x81\
3109 -3#
3110 #
3111 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3112 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:f {$::RESULT ne $result}11kG,7:1\
3113 s: ANY_CR LONE_CR
3114 Other flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
3115 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
3116 "\xFF\xFE" : "\xFExC0\x81\
3117 163 \xC0\x81\
3118 164 \xC0\x81\
3119 163 \xC0\x81\
3120 164 \xC0\x81\
3121 165 \xC1111E \
3122 170 \xE \
3123 171 \xE \
3124 172 \xE \
3125 1777777718#
3126 431-0-1#
3127 #
3128 #
3129 437-0437-0-168#
3130 438-04441 #
3131 44#
3132 #
3133 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3134 9459-0#
3135 461-04\xC0\x81\
3136 164 \xC0\x81\
3137 165 \xC1111E \
3138 170 \xE \
3139 171 \xE \
3140 1721617-2-6618-2#
3141 0\x81\
3142 162 \xC0\x81\
3143 163 \xC0\x81\
3144 164 \xC0\x81\
3145 165 \xC1111E \
3146 -1-32268yes621-2-6yes623-2#
3147 0\x81\
3148 162 \xC0\x81\
3149 163 \xC0\x81\
3150 164 \xC0\x81\
3151 165 \xC1111E \
3152 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
3153 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
3154 yes62624-2yes62#
3155 0\x81\
3156 162 \xC0\x81\
3157 163469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3158 7474474-1-4-1-6#
3159 #475-1-61-7477 477-1477-1-78#
3160 479 utf-check-479-1474808480-1-9481#
3161 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
3162 525-1-3 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
3163 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
3164 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
3165 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
3166 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
3167 24 \x00ABCD\rX@dMG,j:Li#
3168 0\x81\
3169 162 \xC0\x81\
3170 163 \xC0\x81\
3171 164 \xC0\x81\
3172 165 \xCyesyes631-2-7631-2-71yes6633-2-723-2-7yes63#
3173 0\x81\
3174 162 \xC0\x81\
3175 163469469G,j:Line endings: ANY_CR L\
3176 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
3177 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
3178 23 \x00ABC\rX@#
3179 0\x81\
3180 162 \xC0\x81\
3181 163 \xC0\x81\
3182 164 \xC0\x81\
3183 165 \xC1111E \
3184 170637-2-7637-2-74#
3185 0\x81\
3186 162 \xC0\x81\
3187 163 \xC0\x81\
3188 164 \xC0\x81\
3189 165 \xC1111E \48548640-2-740-2-76#
3190 0\x81\
3191 162 \xC0\x81\
3192 163 \xC0\x81\
3193 164 \xC0\x81\
3194 165 \xC1111E \485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
3195 525-1-32265226-1-32#
3196 #
3197 32528-1-35295229532-1-3#
3198 #
3199 53#
3200 5334-1k-5338-1-3#
3201 #
3202 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3203 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:f {$::RESULT ne $result}11kG,7:1\
3204 s: ANY_CR LONE_CR
3205 Other flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
3206 642-2-7642-2-7ary 56-7-01W@XtW,j:Line enther #
3207 0\x643-2-7dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
3208 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
3209 19 \x00ABCX@dMG,j:Li#
3210 0\x81\
3211 162 \xC0\x81\
3212 163 \xC0\x81\
3213 164 \xC0\x81\
3214 165 \xC1111E \
3215 174#
3216 0\x81\
3217 162 \xC0\x81\
3218 163469469646-2-79O\
3219 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
3220 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
3221 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
3222 29 \x00A\r#
3223 0\x81\
3224 162 \xC0\x81\
3225 163 \xC0\x81\
3226 164 \xC0\x81\
3227 165 \xC1111E \
3228 170 63 \xC0\x81\
3229 164 \xC0\x81\
3230 165 \xC1111E \
3231 170 \xE \
3232 171 \xE \
3233 172 \xE \
3234 1777777718#
3235 431-0-1#
3236 #
3237 #
3238 437-0437-0-168#
3239 438-04441 #
3240 44#
3241 #
3242 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3243 9459-0#
3244 461-0462-1-46463-1-464642 \xC0\x81\
3245 163 \xC0\x81\
3246 164 \xC0\x81\
3247 165 \xC1111E \
3248 170 \xE \
3249 17649-2-8649-2-80#
3250 0\x81\
3251 162 651-2-8yes65652-2652-2-8yes55yes65657-2-8 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
3252 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
3253 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
3254 #
3255 0\x81\
3256 162 \xC0\x81\
3257 163 \xC0\x81\
3258 164 \xC0\x81\
3259 165 \xC1yes659-2659-2-85yes6yesyes665yes667-2-89\xC0\x81\
3260 164 \xC0\x81\
3261 165 \xC1111E \
3262 170 \xE \
3263 171 \xE \
3264 #
3265 0\x81670-2-97671-2-94-1524-1-31#
3266 525-1-32265226-1-32#
3267 #
3268 0\x81\
3269 162 \xC0\x81\
3270 163 \xC0\x81\
3271 164 \xC0\x81\
3272 165 \xC1111E \
3273 170 \xE \
3274 171 \xE \
3275 172 \xE \
3276 1777777718#
3277 431-0-1#
3278 #
3279 #
3280 437-0437-0-168#
3281 438-04441 #
3282 44#
3283 #
3284 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3285 9673-27\xC0\x81\
3286 164 \xC0\x81\
3287 165 \xC1111E \
3288 170 \xE \
3289 171 \xE \
3290 172 \xE \
3291 1777777718#
3292 431-0-1#
3293 #
3294 #
3295 437-0437-0-168#
3296 438-04441 #
3297 44#
3298 #
3299 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3300 9459-0#
3301 461-0462-1-46463-1-4646446462 \xC0\x81\
3302 163 \xC0\x81\
3303 164 \xC0\x81\
3304 165 \xC1111E \
3305 170 \xE \
3306 #
3307 0\x81\
3308 162 \xC0\x81\
3309 163 \xC0\x81\
3310 164 \xC0\x81\
3311 165 \xC1111E \
3312 170 \xE \
3313 171 \xE \
3314 172 \xE \
3315 1777777718#
3316 431-0-1#
3317 #
3318 #
3319 437-0437-0-168#
3320 438-04441 #
3321 44#
3322 #
3323 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3324 9459-0#
3325 6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3326 7474474-1-4-1-6#
3327 #475-1-61-7477 7677-2-9677-2-94#
3328 0\x81\
3329 162 438-04441 #
3330 44#
3331 #
3332 446-0446-0-1\452#
3333 0\x81\
3334 162 \xC0\x81\
3335 163 \xC0\x81\
3336 164 \xC0\x81\
3337 165 \xC1111E \
3338 170 \xE \
3339 171 \xE \
3340 172 \xE \
3341 1777777718#
3342 431-0-1#
3343 #
3344 #
3345 437-0437-0-168#
3346 438-04441 #
3347 44#
3348 #
3349 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3350 171 \xE \
3351 172 \xE \
3352 1777777718#
3353 431-0-1#
3354 #
3355 #
3356 437-0437-0-168#
3357 438-04441 #
3358 44#7#
3359 0\x81\
3360 162 \xC0\x81\
3361 163 \xC0\x81\
3362 164 \xC0\x81\
3363 165 \xC1111E \
3364 170 \xE \
3365 171 \xE \
3366 172 \xE \
3367 1777777718#
3368 431-0-1#
3369 #
3370 #
3371 437-0437-0-168#
3372 438-04441 #
3373 44#
3374 #
3375 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3376 5450-1-44551551-1-105555555-1-4556 455117-1-47558 #
3377 #
3378 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40680-2-9#
3379 0\x81\
3380 162 \xC0\x81\
3381 163 \xC0\x81\
3382 164 \xC0\x81\
3383 165 \xC1111E \
3384 170 \xE \
3385 171 \xE \
3386 172 \xE \
3387 MG,j:Line endings: ANY_CR\
3388 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
3389 26 \x00AB\nX@d8#
3390 0\x81\
3391 162 \xC0\x81\
3392 163 \xC0\x81\
3393 164 \xC0\x81\
3394 165 \xC1111E \
3395 170 \xE \
3396 171 \xE \
3397 172 \xE \
3398 1777777718#
3399 431-0-1#
3400 #
3401 #
3402 437-0437-0-168#
3403 438-04441 #
3404 44#
3405 #
3406 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3407 9r flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
3408 2 [1-16-1-487 utf-check-487-148 END#
3409
3410 $tempPath 100
3411 492-2-492-2-498-2-498-2-5502-2-506-2-E_CR
3412 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3413 s: ANY_CR LONE_CR
3414 \
3415 -1-32#
3416 #
3417 32528-1-3520508-2508-2-1009-2-1509-2-10E_CR
3418 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3419 s: ANY_CR LONE_CR
3420 \
3421 -1-32#
3422 #
3423 32528-1-352E_CR
3424 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3425 s: ANY_CR LONE_CR
3426 \
3427 -1-32#
3428 #
3429 32528-1-352: ANY_CR \
3430 30 \x00AB\r\nX@dMG,E_CR
3431 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3432 s: ANY_CR LONE_CR
3433 \
3434 -1-32#
3435 #
3436 32528-1-352514-29-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3437 7474474-1-4-1-6#
3438 #475-1-61-7477 47514-2-131
3439 0\x893-1-49 162 \xC0\x81\
3440 163 \xC0\x81\
3441 163 \xC395-1-5397-1998-19443 \xC0\x81\
3442 516-2-1516-2-14117-2517-2-14
3443 0\x893-1-49 162 \xC0\x81\
3444 163 \xC0\x81\
3445 163 \xC395-1-5397-1998-19443 \xC0\x81\
3446 1518-2518-2-15437-0437-0-168#
3447 438-04441 #
3448 44#
3449 #
3450 446-0446-0-1\4524-1524-1-31#
3451 525-1-32265226-1-32#
3452 #
3453 32528-1-35295229-1-#
3454 5331
3455 31-1-3#
3456 532-1-3#
3457 #
3458 53#
3459 5334-1-335 535-15336-1-337 utf-check-537-1#
3460 38 utf-check-5338-1-3#
3461 #
3462 #
3463 40 5440-1-39#
3464 #
3465 3#
3466 0\x81\
3467 162 \xC0\x81\
3468 163519-2-119-2-15
3469 0\x893-1-49 162 \xC0\x81\
3470 163 \xC0\x81\
3471 163 \xC395-1-5397-1998-19443 \xC0\x81\
3472 520-2eOrder) eq "littleEndian" ? \
3473 "\xFF\xFE" : "\xFE\88392-1392-1-499-1-#
3474 5331
3475 316520-2-162521-2-1521-2-16
3476 0\x893-1-49 162 \xC0\x81\
3477 163 \xC0\x81\
3478 163 \xC395-1-5397-1998-19443 \xC0\x81\
3479 560-2-3560-2-3561-2-36\
3480 162 \xC0\x81\
3481 163 \xC0\x0\x81\
3482 163 \xC0\x81\
3483 164 \xC0\x81\
3484 165 \xC1111E \
3485 170 \xE \
3486 171 \xE \
3487 172 \xE \
3488 1777777718#
3489 431-0-1#
3490 #
3491 #
3492 437-0437-0-168#
3493 438-04441 #
3494 44#
3495 #
3496 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3497 9459-0#
3498 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3499 7474474-1-4-1-6#
3500 #475-1-61-7477 477-1477-1-78#
3501 479 utf-check-479-1474808480-1-9481#
3502 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-458 #
3503 #
3504 560512O@1~fl,Z:Line endi13z#
3505 0\x8166-2-39437-0437-0-168#
3506 438-04441 #
3507 44#
3508 #
3509 446-0446-0-1\4524-1524-1-31#
3510 525-1-32265226-1-32#
3511 #
3512 32528-1-35295229-1-#
3513 5331
3514 31-1-3#
3515 532-1-3#
3516 #
3517 53#
3518 5334-1-335 535-15336-1-337#
3519 0\x81\
3520 162 \xC0\x81\
3521 163 \xC0\x81\
3522 164 \xC0\x81\
3523 165 \xC1111E \
3524 667-2-37572-2 164 \xC0\x81\
3525 165 \xC1111E \
3526 170 63 \xC0\x81\
3527 164 \xC0\x81\
3528 165 \572-2-42585-1-481-16-1-487 utf-check-487-14#
3529 0\x81573-2-427574-2CR L\
3530 21 \x00A\rX@dMG,j:Line e78 \
3531 172 \xE \
3532 1777777718#
3533 0\x81\87-0437-0-168#
3534 438-04441 #
3535 44#
3536 #
3537 44#
3538 0\x81\
3539 162 \xC0\x81\
3540 163 \xC0\x81\
3541 164 \xC0\x81\
3542 165 \xC1111E \
3543 170 \xE \
3544 171 \xE \
3545 172 \xE \
3546 1777777718#
3547 431-0-1#
3548 #
3549 #
3550 437-0437-0-168#
3551 438-04441 #
3552 44#
3553 #
3554 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3555 9459-0#
3556 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3557 7474474-1-4-1-6#
3558 #475-1-61-7477 477-1477-1-78#
3559 479 utf-check-479-1474808480-1-9481#
3560 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
3561 525-1-32265226-1-32#
3562 #
3563 32528-1-35295229532-1-3#
3564 #
3565 53#
3566 5334-1k-5338-1-3#
3567 #
3568 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3569 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
3570 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
3571 "\xFF\xFE" : "\xFE\xFF"}]CR LONE_CR
3572 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3573 s: ANY_CR LONE_CR
3574 \
3575 1-1-57578578-1-578-12#
3576 0\x81\
3577 162 \x##
3578 0\x81\
3579 162 \xC0\x81\
3580 163 \xC0\x81\
3581 164 \xC0\x81\
3582 165 \xC1111E \
3583 170 \xE \
3584 171 \xE \
3585 172 \xE \
3586 1777777718#
3587 431-0-1#
3588 #
3589 #
3590 437-0437-0-168#
3591 438-04441 #
3592 44#
3593 #
3594 446-0446-0-1\4524-1524-1-31#
3595 525-1-32265226-1-32#
3596 #
3597 32528-1-35295229-1-#
3598 5331
3599 31-1-3#
3600 532-1-3#
3601 #
3602 53#
3603 5334-1-335 535-15336-1-337 utf-check-537-1#
3604 38 utf-check-5338-1-3#
3605 #
3606 #
3607 40 5440-1-39#
3608 #
3609 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
3610 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
3611 5331
3612 31635 535-15336-1-337 7f-check-537-1#
3613 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
3614 #
3615 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
3616 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
3617 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
3618 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
3619 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
3620 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
3621 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
3622 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
3623 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
3624 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
3625 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
3626 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
3627 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
3628 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
3629 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
3630 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
3631 33593-1593-1-6#
3632 595934
3633 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
3634 2337-1-57578578-1-578-38#
3635 0\x81\
3636 162 \#
3637 #
3638 0\x81\
3639 162 \xC0\x81\
3640 163 \xC0\x81\
3641 164 \xC0\x81\
3642 165 \xC1111E \
3643 170 \xE \
3644 171 \xE \
3645 172 \xE \
3646 1777777718#
3647 431-0-1#
3648 #
3649 #
3650 437-0437-0-168#
3651 438-04441 #
3652 44#
3653 #
3654 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3655 9459-0#
3656 461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
3657 163 \xC0\x81\
3658 164 \xC0115-0-71116-0-9-0#
3659 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
3660 7474474-1-4-1-6#
3661 #475-1-61-7477 477-1477-1-78#
3662 479 utf-check-479-1474808480-#
3663 0\x81\
3664 162 \xC0\x81\
3665 163 \xC0\x81\
3666 164 \xC0\x81\
3667 165 \xC1111E \
3668 170 \xE \
3669 171 \xE \
3670 172 \xE \
3671 1777777718#
3672 431-0-1#
3673 #
3674 #
3675 437-0437-0-168#
3676 438-04441 #
3677 44#
3678 #
3679 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3680 9459-0#
3681 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
3682 0\x81\
3683 162 \xC0\x81\
3684 163BB\2131-0-1133-0 162 \xC0\x81\
3685 163 \xC0\x81\
3686 63 \xC134-0-171381\
3687 162 \xC0\x81\
3688 163 \xC0\x81\
3689 164 \xC0\x81\
3690 165 \xC1111E \
3691 170 \xE \
3692 171 \xE \
3693 172 \xE \
3694 1777777718#
3695 431-0-1#
3696 #
3697 #
3698 437-0437-0-168#
3699 438-04441 #
3700 44#
3701 #
3702 446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
3703 164 \xC0\x81\
3704 165 \xC1111E \
3705 170 \xE \
3706 171 \xE \
3707 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
3708 0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
3709 164 \xC0\x81\
3710 165 \xC1111E \
3711 170 \xE \
3712 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
3713 #
3714 #
3715 437-0437-0-168#
3716 438-04441 #
3717 44#
3718 #
3719 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
3720 0\x81\
3721 162 \xC0\x81\
3722 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
3723 163 \xC0\x81\
3724 63 \154-0-25155-0155-0-27156-0156-0-289-1-#
3725 5331
3726 31635 #
3727 0\x81\
3728 162 \xC0\x81\
3729 163 \xC0\x81\
3730 164 \xC0\x81\
3731 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
3732 0\x81\
3733 -3#
3734 #
3735 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3736 0 binary 56-7-01W@Xt5159-0159-0-2#
3737 0\x81\
3738 -3#
3739 #
3740 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3741 0 binary 56-7-01W@XtW60-0160-0-30#
3742 0\x81\
3743 162 \xC0\x81\
3744 163 \xC0\x81\
3745 164 \xC0\x81\
3746 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
3747 0\x81\
3748 162 \xC0\x81\
3749 163 \xC0\x81\
3750 164 \xC0\x81\
3751 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
3752 163 \xC0\x81\
3753 63 \xC0\x81\
3754 164 \xC0\x81\
3755 165 \xC1111E \
3756 170 \xE \
3757 171 \xE \
3758 172 \xE \
3759 1777777718#
3760 431-0-1#
3761 #
3762 #
3763 437-0437-0-168#
3764 438-04441 #
3765 44#
3766 #
3767 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3768 96111169-0-3169-0-34-0-1#
3769 #
3770 #
3771 437-0437-0-168#
3772 438-04441 #
3773 44#
3774 #
3775 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
3776 0\x81\
3777 162 \xC0\x81\
3778 163 1170-0-3170-0-3 162 \xC0\x81\
3779 163 \xC0\x81\
3780 164 \xC0\x81\
3781 165 \xC1111E \
3782 170 \xE \
3783 171 \xE \
3784 172 \xE \
3785 1777777718#
3786 431-0-1#
3787 #
3788 #
3789 437-0437-0-168#
3790 438-04441 #
3791 44#
3792 #
3793 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3794 9459-0#
3795 461-0462-1-46463-1-4646446464-1- \xC0\x81\
3796 163 \xC0\x81\
3797 164 \xC0\x81\
3798 165 \xC1111E \
3799 170 \xE \
3800 117 162 \xC0\x81\
3801 163 \xC0\x81\
3802 63 \xC0\x81\
3803 164 \xC0\x81\
3804 165 \xC1111E \
3805 170 \xE \
3806 171 \xE \
3807 172 \xE \
3808 1777777718#
3809 431-0-1#
3810 #
3811 #
3812 437-0437-0-168#
3813 438-04441 #
3814 44#
3815 #
3816 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3817 91xC0\x81\
3818 163 \xC0\x81\
3819 164 \xC0\x81\
3820 165 \xC1111E \
3821 170 \xE \
3822 11#
3823 0\x81\
3824 162 \xC0\x81\
3825 163646171438-04441 #
3826 44#
3827 #
3828 446-0446-0-1\452#
3829 01711818 162 \xC0\x81\
3830 163 \xC0\x81\
3831 164 \xC0\x81\
3832 165 \xC1111E \
3833 170 \xE \
3834 171 \xE \
3835 172 \xE \
3836 1777777718#
3837 431-0-1#
3838 #
3839 #
3840 437-0437-0-168#
3841 438-04441 #
3842 44#
3843 #
3844 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3845 9459-0#
3846 461-0462-1-46463-1-4646446464-1-163 \xC0\x81\
3847 164 \xC0\x55-0-4197-0-498-0198-0-492200-0-5222220205-0-505-0-52006-0-506-0-53-0@8wU,2:7-_@9LW,5:0-7\
3848 s: ANY_CR LONE_CR
3849 \
3850 1-1-57578578-1-578-12#
3851 0\x81\
3852 162 \x##2007-0-5207-0-532208-0-508-0-54#
3853 0\x81\
3854 162 \xC0\x81\
3855 163 \xC0\x81\
3856 164 \xC0\x81\
3857 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
3858 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3859 s: ANY_CR LONE_CR
3860 \2009-0-5209-0-54#
3861 0\x81\
3862 162 \xC0\x81\
3863 163 \xC0\x81\
3864 164 \xC0\x81\
3865 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
3866 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3867 s: ANY_CR LONE_CR
3868 \2110-0-5210-0-5#
3869 0\x81\
3870 162 \xC0\x81\
3871 163 \xC0\x81\
3872 164 \xC0\x81\
3873 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
3874 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3875 s: ANY_CR LONE_CR
3876 \2211-0-511-0-55#
3877 0\x81\
3878 162 \xC0\x81\
3879 163 \xC0\x81\
3880 164 \xC0\x81\
3881 165 \xC1111E \485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
3882 525-1-32265226-1-321212-0-5212-0-56#
3883 0\x81\
3884 162 \xC0\x81\
3885 163 \xC0\x81\
3886 164 \xC0\x81\
3887 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
3888 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
3889 s: ANY_CR LONE_CR
3890 \2113-0-5213-0-562214-0214-0-57-02xC0\x81\
3891 163 \xC0\x81\
3892 164 \xC0215-0-572216-0216-0-582117-0217-0-582118-0218-0-599-1-#
3893 5331
3894 31635 #
3895 0\x81\
3896 162 \xC0\x81\
3897 163 \xC0\x81\
3898 164 \xC0\x81\
3899 165 \xC1111E 2219-0-5219-0-592220-0-6220-0-602#
3900 0\x81\
3901 162 \xC0\x81\
3902 1632 \xC0\21-0-6022222-0-6222-0-6#
3903 0\x81\
3904 -3#
3905 #
3906 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
3907 0 binary 56-7-01W@XtW23-0-6223-0-61#
3908 0\x81\
3909 162 \xC0\x81\
3910 163 \xC0\x81\
3911 164 \xC0\x81\
3912 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2224-0224-0-629-1-#
3913 5331
3914 31635 #
3915 0\x81\
3916 162 \xC0\x81\
3917 163 \xC0\x81\
3918 164 \xC0\x81\
3919 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2225-0225-0-6#
3920 0\x81\
3921 162 \xC0\x81\
3922 163 \xC0\x81\
3923 164 \xC0\x81\
3924 165 \xC1111E \485485-1-481-16-1-487 utf-c2226-0226-0-63#
3925 0\x81\
3926 162 \xC0\x81\
3927 163 \xC0\x81\
3928 164 \xC0\x81\
3929 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2#
3930 0\x81\
3931 162 \xC0\x81\
3932 163BB\22220\x81\
3933 163 \xC0\x81\
3934 164 \0\x81\
3935 163 \xC0\x81\
3936 164 \xC0\x81\
3937 165 \xC1111E \
3938 170 \xE \
3939 171 \xE \
3940 172 \xE \
3941 1777777718#
3942 431-0-1#
3943 #
3944 #
3945 437-0437-0-168#
3946 438-04441 #
3947 44#
3948 #
3949 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
3950 9459-0#
3951 461-0462-1334-0-6234-0-67#
3952 0\x81\
3953 -441546 546-1-42#
3954 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
3955 5331
3956 31635 535-15336-235-0#
3957 0\x81\
3958 162 \xC0\x81\
3959 163 \xC0\x81\
3960 164 \xC0\x81\
3961 165 \xC1111E \
3962 Other f11-578-12#
3963 0\x81\
3964 162 \x##
3965 0\x81\
3966 162 \xC0\x81\
3967 163 \xC0\x81\
3968 164 \xC0\x81\
3969 165 \xC1111E \
3970 170 \xE \
3971 171 \xE \
3972 172 \xE \
3973 1777777718#
3974 431-0-1#
3975 #
3976 #
3977 437-0437-0-168#
3978 438-04441 #
3979 44#
3980 #
3981 446-0446-0-1\4524-1524-1-31#
3982 525-1-32265226-1-32#
3983 #
3984 32528-1-35295229-1-#
3985 5331
3986 31-1-3#
3987 532-1-3#
3988 #
3989 53#
3990 5334-1-335 535-15336-1-337 utf-check-537-1#
3991 38 utf-check-5338-1-3#
3992 #
3993 #
3994 40 5440-1-39#
3995 #
3996 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
3997 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
3998 5331
3999 31635 535-15336-1-337 7f-check-537-1#
4000 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
4001 #
4002 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
4003 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
4004 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
4005 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
4006 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
4007 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
4008 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
4009 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
4010 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
4011 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
4012 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
4013 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
4014 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
4015 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
4016 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
4017 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
4018 33593-1593-1-6#
4019 595934
4020 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
4021 2337-1-57578578-1-578-38#
4022 0\x81\
4023 162 \#
4024 #
4025 0\x81\
4026 162 \xC0\x81\
4027 163 \xC0\x81\
4028 164 \xC0\x81\
4029 165 \xC1111E \
4030 170 \xE \
4031 171 \xE \
4032 172 \xE \
4033 1777777718#
4034 431-0-1#
4035 #
4036 #
4037 437-0437-0-168#
4038 438-04441 #
4039 44#
4040 #
4041 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4042 9459-0#
4043 461-0462-1-46463-1-4646446464#
4044 0\x81\
4045 -441546 546-1-42#
4046 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4047 5331
4048 31635 535-15336-323239-040-0-7240-0-70578578-1-578-12#
4049 0\x81\
4050 162 \x##
4051 0\x81\
4052 162 \xC0\x81\
4053 163 \xC0\x81\
4054 164 \xC0\x81\
4055 165 \xC1111E \
4056 170 \xE \
4057 #
4058 0\x81\
4059 4241-0241-0-702245-0-725-0-7#
4060 0\x81\
4061 -3#
4062 #
4063 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4064 0 binary 56-7-01W@XtW4250-0-7250-0-752554-0-7254-0-77578578-1-578-12#
4065 0\x81\
4066 162 \x##
4067 0\x81\
4068 162 \xC0\x81\
4069 163 \xC0\x81\
4070 164 \x#
4071 0\x81\
4072 55558-0-7559-063 \xC0\x81\
4073 164 \xC0\x81\
4074 165 \xC1111E \
4075 170 \xE \
4076 171 \xE \
4077 0\x81\
4078 168#
4079 438-04441 #
4080 44#
4081 #
4082 446-0446-0-1\4524-1524-1-31#
4083 525-1-32265226-1-32#
4084 #
4085 32528-1-35295229-1-#
4086 5331
4087 31-1-3#
4088 532-1-3#
4089 #
4090 53#
4091 5334-1-335 535-15336-1-337 utf-check-537-1#
4092 38 utf-check-5338-1-3#
4093 #
4094 #
4095 40 5440-1-39#
4096 #
4097 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
4098 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4099 5331
4100 31635 535-15336-1-337 7f-check-537-1#
4101 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
4102 #
4103 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
4104 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
4105 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
4106 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
4107 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
4108 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
4109 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
4110 23 \x00ABC\rX@dMG,j:Line endings: ANY_C620-2-6620-2-666E_CR
4111 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4112 s: ANY_CR LONE_CR
4113 \
4114 -1-32#
4115 #
4116 32528-1-352952292
4117 0\x893-1-49 162 \xC0\x81\
4118 163 \xC0\x81\
4119 163 \xC395-1-5397-1998-19443 \xC0\x81\
4120 164 2626-2626-2-694627-2627-2-6963E_CR
4121 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4122 s: ANY_CR LONE_CR
4123 \
4124 -1-32#
4125 #
4126 32528-1-35295229
4127 0\x893-1-49 162 \xC0\x81\
4128 163 \xC0\x81\
4129 163 \xC395-1-5397-1998-19443 \xC0\x81\
4130 164 56658-2658-2-85658 #
4131 #
4132 560512O@1~fl,Z:Line endi13z#
4133 0\x81\
4134 162 \xC0\x81\
4135 163 \xC0\x81\
4136 164 \xC0\x81\
4137 165 \xC1111E \
4138 170 \xE \
4139 171 \xE \
4140 172 \xE \
4141 1777777718#
4142 431-0-1#
4143 #
4144 #
4145 437-0437-0-168#
4146 438-04441 #
4147 44#
4148 #
4149 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4150 9459-0#
4151 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
4152 7474474-1-4-1-6#
4153 #475-1-61-7477 477-1477-1-78#
4154 479 utf-check-479-1474808480-1-9481#
4155 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
4156 525-1-32265226-1-32#
4157 #
4158 32528-1-35295229532-1-3#
4159 #
4160 53#
4161 5334-1k-5338-1-3#
4162 #
4163 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4164 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
4165 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
4166 "\xFF\xFE" : "\xFE\xFF"}]CR LONE_CR
4167 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4168 s: ANY_CR LONE_CR
4169 \
4170 1-1-57578578-1-578-12#
4171 0\x81\
4172 162 \x##
4173 0\x81\
4174 162 \xC0\x81\
4175 163 \xC0\x81\
4176 164 \xC0\x81\
4177 165 \xC1111E \
4178 170 \xE \
4179 171 \xE \
4180 172 \xE \
4181 1777777718#
4182 431-0-1#
4183 #
4184 #
4185 437-0437-0-168#
4186 438-04441 #
4187 44#
4188 #
4189 446-0446-0-1\4524-1524-1-31#
4190 525-1-32265226-1-32#
4191 #
4192 32528-1-35295229-1-#
4193 5331
4194 31-1-3#
4195 532-1-3#
4196 #
4197 53#
4198 5334-1-335 535-15336-1-337 utf-check-537-1#
4199 38 utf-check-5338-1-3#
4200 #
4201 #
4202 40 5440-1-39#
4203 #
4204 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
4205 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4206 5331
4207 31635 535-15336-1-337 7f-check-537-1#
4208 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
4209 #
4210 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
4211 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
4212 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
4213 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
4214 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
4215 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
4216 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
4217 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
4218 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
4219 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
4220 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
4221 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
4222 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
4223 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
4224 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
4225 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
4226 33593-1593-1-6#
4227 595934
4228 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
4229 2337-1-57578578-1-578-38#
4230 0\x81\
4231 162 \#
4232 #
4233 0\x81\
4234 162 \xC0\x81\
4235 163 \xC0\x81\
4236 164 \xC0\x81\
4237 165 \xC1111E \
4238 170 \xE \
4239 171 \xE \
4240 172 \xE \
4241 1777777718#
4242 431-0-1#
4243 #
4244 #
4245 437-0437-0-168#
4246 438-04441 #
4247 44#
4248 #
4249 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4250 9459-0#
4251 461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
4252 163 \xC0\x81\
4253 164 \xC0115-0-71116-0-9-0#
4254 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
4255 7474474-1-4-1-6#
4256 #475-1-61-7477 477-1477-1-78#
4257 479 utf-check-479-1474808480-#
4258 0\x81\
4259 162 \xC0\x81\
4260 163 \xC0\x81\
4261 164 \xC0\x81\
4262 165 \xC1111E \
4263 170 \xE \
4264 171 \xE \
4265 172 \xE \
4266 1777777718#
4267 431-0-1#
4268 #
4269 #
4270 437-0437-0-168#
4271 438-04441 #
4272 44#
4273 #
4274 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4275 9459-0#
4276 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
4277 0\x81\
4278 162 \xC0\x81\
4279 163BB\2131-0-1133-0 162 \xC0\x81\
4280 163 \xC0\x81\
4281 63 \xC134-0-171381\
4282 162 \xC0\x81\
4283 163 \xC0\x81\
4284 164 \xC0\x81\
4285 165 \xC1111E \
4286 170 \xE \
4287 171 \xE \
4288 172 \xE \
4289 1777777718#
4290 431-0-1#
4291 #
4292 #
4293 437-0437-0-168#
4294 438-04441 #
4295 44#
4296 #
4297 446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
4298 164 \xC0\x81\
4299 165 \xC1111E \
4300 170 \xE \
4301 171 \xE \
4302 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
4303 0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
4304 164 \xC0\x81\
4305 165 \xC1111E \
4306 170 \xE \
4307 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
4308 #
4309 #
4310 437-0437-0-168#
4311 438-04441 #
4312 44#
4313 #
4314 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
4315 0\x81\
4316 162 \xC0\x81\
4317 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
4318 163 \xC0\x81\
4319 63 \154-0-25155-0155-0-27156-0156-0-289-1-#
4320 5331
4321 31635 #
4322 0\x81\
4323 162 \xC0\x81\
4324 163 \xC0\x81\
4325 164 \xC0\x81\
4326 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
4327 0\x81\
4328 -3#
4329 #
4330 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4331 0 binary 56-7-01W@Xt5159-0159-0-2#
4332 0\x81\
4333 -3#
4334 #
4335 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4336 0 binary 56-7-01W@XtW60-0160-0-30#
4337 0\x81\
4338 162 \xC0\x81\
4339 163 \xC0\x81\
4340 164 \xC0\x81\
4341 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
4342 0\x81\
4343 162 \xC0\x81\
4344 163 \xC0\x81\
4345 164 \xC0\x81\
4346 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
4347 163 \xC0\x81\
4348 63 \xC0\x81\
4349 164 \xC0\x81\
4350 165 \xC1111E \
4351 170 \xE \
4352 171 \xE \
4353 172 \xE \
4354 1777777718#
4355 431-0-1#
4356 #
4357 #
4358 437-0437-0-168#
4359 438-04441 #
4360 44#
4361 #
4362 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4363 96111169-0-3169-0-34-0-1#
4364 #
4365 #
4366 437-0437-0-168#
4367 438-04441 #
4368 44#
4369 #
4370 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
4371 0\x81\
4372 162 \xC0\x81\
4373 163 1170-0-3170-0-3 162 \xC0\x81\
4374 163 \xC0\x81\
4375 164 \xC0\x81\
4376 165 \xC1111E \
4377 170 \xE \
4378 171 \xE \
4379 172 \xE \
4380 1777777718#
4381 431-0-1#
4382 #
4383 #
4384 437-0437-0-168#
4385 438-04441 #
4386 44#
4387 #
4388 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4389 9459-0#
4390 461-0462-1-46463-1-4646446464-1- \xC0\x81\
4391 163 \xC0\x81\
4392 164 \xC0\x81\
4393 165 \xC1111E \
4394 170 \xE \
4395 117 162 \xC0\x81\
4396 163 \xC0\x81\
4397 63 \xC0\x81\
4398 164 \xC0\x81\
4399 165 \xC1111E \
4400 170 \xE \
4401 171 \xE \
4402 172 \xE \
4403 1777777718#
4404 431-0-1#
4405 #
4406 #
4407 437-0437-0-168#
4408 438-04441 #
4409 44#
4410 #
4411 446-0446-0-1747448 49449-052 52-0-17454-0-5452 52-0-17454 454-0-1754-05 456#
4412 9459-0#
4413 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4414 0\x81\
4415 162 \xC0\x81\
4416 163 \xC0\x81\
4417 164 \xC0\x81\
4418 165 \xC1111E \
4419 170 \xE \
4420 171 \xE \
4421 172 \xE \
4422 1777777718#
4423 43155-0-55 164 \xC0\x81\
4424 165 \xC1111E \
4425 170 \xE \
4426 171 \xE \
4427 172 \x5-0-5552 52-0-17454 454-0-1754-05 456#
4428 9459-0#
4429 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4430 0\x81\
4431 162 \xC0\x81\
4432 163 \xC0\x81\
4433 164 \xC0\x81\
4434 165 \xC1111E \
4435 170 \xE \
4436 171 \xE \
4437 172 \xE \
4438 1777777718#
4439 43R L\
4440 21 \x00A\rX@dMG,j:Line en56-0-56 164 \xC0\x81\
4441 165 \xC1111E \
4442 170 \xE \
4443 171 \xE \
4444 172 \x6-0-5652 52-0-17454 454-0-1754-05 456#
4445 9459-0#
4446 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4447 0\x81\
4448 162 \xC0\x81\
4449 163 \xC0\x81\
4450 164 \xC0\x81\
4451 165 \xC1111E \
4452 170 \xE \
4453 171 \xE \
4454 172 \xE \
4455 1777777718#
4456 43\
4457 171 \xE \
4458 172 \xE 57-0-57 164 \xC0\x81\
4459 165 \xC1111E \
4460 170 \xE \
4461 171 \xE \
4462 172 \x7-0-5752 52-0-17454 454-0-1754-05 456#
4463 9459-0#
4464 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4465 0\x81\
4466 162 \xC0\x81\
4467 163 \xC0\x81\
4468 164 \xC0\x81\
4469 165 \xC1111E \
4470 170 \xE \
4471 171 \xE \
4472 172 \xE \
4473 1777777718#
4474 4158-0-58 164 \xC0\x81\
4475 165 \xC1111E \
4476 170 \xE \
4477 171 \xE \
4478 172 \x8-0-5852 52-0-17454 454-0-1754-05 456#
4479 9459-0#
4480 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4481 0\x81\
4482 162 \xC0\x81\
4483 163 \xC0\x81\
4484 164 \xC0\x81\
4485 165 \xC1111E \
4486 170 \xE \
4487 171 \xE \
4488 172 \xE \
4489 1777777718#
4490 4159-0-59 164 \xC0\x81\
4491 165 \xC1111E \
4492 170 \xE \
4493 171 \xE \
4494 172 \x9-0-5952 52-0-17454 454-0-1754-05 456#
4495 9459-0#
4496 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-#
4497 0\x81\
4498 162 \xC0\x81\
4499 163 \xC0\x81\
4500 164 \xC0\x81\
4501 165 \xC1111E \
4502 170 \xE \
4503 171 \xE \
4504 172 \xE \
4505 1777777718#
4506 4160-0-6 165 \xC1111E \
4507 yes16-2-1516-2-14#
4508 0\x81\
4509 -3#
4510 #
4511 Z@Yyk,6:155-6-19@14LW,O0-0-6 16469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
4512 7474474-1-4-1-6#
4513 #475-1-61-7477 477-1477-1-78#
4514 479 utf-check-479-1474808480-1-9481#
4515 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-chec161-0-60ABC\rX@dMG,j:Line endings: ANY_CR \
4516 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
4517 61-0-61eq "littleEndian" ? \
4518 "\xF#
4519 0\x81\
4520 162 \xC0\x81\
4521 163 \xC0\x81\
4522 164 \xC0\x81\
4523 165 \xC1111E \
4524 17444-1-7444-1-7 162 \xC0\x81\
4525 31
4526 31635 535-15336-1-337 7f-check-537-1#
4527 38 u843-1-5444 544-1-41595450-1-44551551-1-1055552 \xC0\x81\
4528 163 \xC0\451-153 \62-0-62ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
4529 s: ANY_CR LONE_CR
4530 \
4531 1-1-57578578-1-578-162-0-62eq "littleEndian" ? \
4532 "\xF#
4533 0\x81\
4534 162 \xC0\x81\
4535 163 \xC0\x81\
4536 164 \xC0\x81\
4537 165 \xC1111E \
4538 17444-1-7444-1-7 162 \xC0\x81\
4539 31
4540 31635 535-15336-1-337 7f-check-537-1#
4541 38 u843-1-5444 544-1-41595450-1-44551551-1-1055558dM,1:7Z@16Other flags: NONEV17 \x63-0-63ther flags: NONV@8wU,2:7-_@9LW,5:0-7\
4542 s: ANY_CR LONE_CR
4543 \
4544 1-1-57578578-1-578-163-0-63eq "littleEndian" ? \
4545 "\xF#
4546 0\x81\
4547 162 \xC0\x81\
4548 163 \xC0\x81\
4549 164 \xC0\x81\
4550 165 \xC1111E \
4551 17444-1-7444-1-7 162 \xC0\x81\
4552 31
4553 31635 535-15336-1-337 7f-check-537-1#
4554 38 u843-1-5444 544-1-41595450-1-44551551-1-105555\
4555 162 \x\xther flags: NONV@8wU,2:7-_@9LW,5:0-7\
4556 s: ANY_CR LONE_CR
4557 \
4558 1-1-57578578-1-578-12#
4559 0\x81\
4560 162 \x##
4561 0\x81\
4562 162 \xC0\x81\
4563 163 \xC0\x81\
4564 164 \xC0\x81\
4565 165 \xC1111E \
4566 170 \xE \
4567 171 \xE \
4568 172 \xE \
4569 1777777718#
4570 431-0-1#
4571 #
4572 #
4573 437-0437-0-168#
4574 438-04441 #
4575 44#
4576 #
4577 446-0446-0-1\4524-1524-1-31#
4578 525-1-32265226-1-32#
4579 #
4580 32528-1-35295229-1-#
4581 5331
4582 31-1-3#
4583 532-1-3#
4584 #
4585 53#
4586 5334-1-335 535-15336-1-337 utf-check-537-1#
4587 38 utf-check-5338-1-3#
4588 #
4589 #
4590 40 5440-1-39#
4591 #
4592 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
4593 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4594 5331
4595 31635 535-15336-1-337 7f-check-537-1#
4596 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
4597 #
4598 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
4599 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
4600 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
4601 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
4602 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
4603 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
4604 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
4605 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
4606 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
4607 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
4608 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
4609 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
4610 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
4611 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
4612 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
4613 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
4614 33593-1593-1-6#
4615 595934
4616 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
4617 2337-1-57578578-1-578-38#
4618 0\x81\
4619 162 \#
4620 #
4621 0\x81\
4622 162 \xC0\x81\
4623 163 \xC0\x81\
4624 164 \xC0\x81\
4625 165 \xC1111E \
4626 170 \xE \
4627 171 \xE \
4628 172 \xE \
4629 1777777718#
4630 431-0-1#
4631 #
4632 #
4633 437-0437-0-168#
4634 438-04441 #
4635 44#
4636 #
4637 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4638 9459-0#
4639 461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
4640 163 \xC0\x81\
4641 164 \xC0115-0-71116-0-9-0#
4642 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
4643 7474474-1-4-1-6#
4644 #475-1-61-7477 477-1477-1-78#
4645 479 utf-check-479-1474808480-#
4646 0\x81\
4647 162 \xC0\x81\
4648 163 \xC0\x81\
4649 164 \xC0\x81\
4650 165 \xC1111E \
4651 170 \xE \
4652 171 \xE \
4653 172 \xE \
4654 1777777718#
4655 431-0-1#
4656 #
4657 #
4658 437-0437-0-168#
4659 438-04441 #
4660 44#
4661 #
4662 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4663 9459-0#
4664 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
4665 0\x81\
4666 162 \xC0\x81\
4667 163BB\2131-0-1133-0 162 \xC0\x81\
4668 163 \xC0\x81\
4669 63 \xC134-0-171381\
4670 162 \xC0\x81\
4671 163 \xC0\x81\
4672 164 \xC0\x81\
4673 165 \xC1111E \
4674 170 \xE \
4675 171 \xE \
4676 172 \xE \
4677 1777777718#
4678 431-0-1#
4679 #
4680 #
4681 437-0437-0-168#
4682 438-04441 #
4683 44#
4684 #
4685 446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
4686 164 \xC0\x81\
4687 165 \xC1111E \
4688 170 \xE \
4689 171 \xE \
4690 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
4691 0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
4692 164 \xC0\x81\
4693 165 \xC1111E \
4694 170 \xE \
4695 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
4696 #
4697 #
4698 437-0437-0-168#
4699 438-04441 #
4700 44#
4701 #
4702 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
4703 0\x81\
4704 162 \xC0\x81\
4705 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
4706 163 \xC0\x81\
4707 63 \154-0-25155-0155-0-27156-0156-0-289-1-#
4708 5331
4709 31635 #
4710 0\x81\
4711 162 \xC0\x81\
4712 163 \xC0\x81\
4713 164 \xC0\x81\
4714 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
4715 0\x81\
4716 -3#
4717 #
4718 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4719 0 binary 56-7-01W@Xt5159-0159-0-2#
4720 0\x81\
4721 -3#
4722 #
4723 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4724 0 binary 56-7-01W@XtW60-0160-0-30#
4725 0\x81\
4726 162 \xC0\x81\
4727 163 \xC0\x81\
4728 164 \xC0\x81\
4729 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
4730 0\x81\
4731 162 \xC0\x81\
4732 163 \xC0\x81\
4733 164 \xC0\x81\
4734 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
4735 163 \xC0\x81\
4736 63 \xC0\x81\
4737 164 \xC0\x81\
4738 165 \xC1111E \
4739 170 \xE \
4740 171 \xE \
4741 172 \xE \
4742 1777777718#
4743 431-0-1#
4744 #
4745 #
4746 437-0437-0-168#
4747 438-04441 #
4748 44#
4749 #
4750 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4751 96111169-0-3169-0-34-0-1#
4752 #
4753 #
4754 437-0437-0-168#
4755 438-04441 #
4756 44#
4757 #
4758 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
4759 0\x81\
4760 162 \xC0\x81\
4761 163 1170-0-3170-0-3 162 \xC0\x81\
4762 163 \xC0\x81\
4763 164 \xC0\x81\
4764 165 \xC1111E \
4765 170 \xE \
4766 171 \xE \
4767 172 \xE \
4768 1777777718#
4769 431-0-1#
4770 #
4771 #
4772 437-0437-0-168#
4773 438-04441 #
4774 44#
4775 #
4776 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4777 9459-0#
4778 461-0462-1-46463-1-4646446464-1- \xC0\x81\
4779 163 \xC0\x81\
4780 164 \xC0\x81\
4781 165 \xC1111E \
4782 170 \xE \
4783 117 162 \xC0\x81\
4784 163 \xC0\x81\
4785 63 \xC0\x81\
4786 164 \xC0\x81\
4787 165 \xC1111E \
4788 170 \xE \
4789 171 \xE \
4790 172 \xE \
4791 1777777718#
4792 431-0-1#
4793 #
4794 #
4795 437-0437-0-168#
4796 438-04441 #
4797 44#
4798 #
4799 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4800 91xC0\x81\
4801 163 \xC0\x81\
4802 164 \xC0\x81\
4803 165 \xC1111E \
4804 170 \xE \
4805 11#
4806 0\x81\
4807 162 \xC0\x81\
4808 163646171438-04441 #
4809 44#
4810 #
4811 446-0446-0-1\452#
4812 01711818 162 \xC0\x81\
4813 163 \xC0\x81\
4814 164 \xC0\x81\
4815 165 \xC1111E \
4816 170 \xE \
4817 171 \xE \
4818 172 \xE \
4819 1777777718#
4820 431-0-1#
4821 #
4822 #
4823 437-0437-0-168#
4824 438-04441 #
4825 44#
4826 #
4827 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4828 9459-0#
4829 461-0462-1-46463-1-4646446464-1-163 \xC0\x81\
4830 164 \xC0\x55-0-4197-0-498-0198-0-492200-0-5222220205-0-505-0-52006-0-506-0-53-0@8wU,2:7-_@9LW,5:0-7\
4831 s: ANY_CR LONE_CR
4832 \
4833 1-1-57578578-1-578-12#
4834 0\x81\
4835 162 \x##2007-0-5207-0-532208-0-508-0-54#
4836 0\x81\
4837 162 \xC0\x81\
4838 163 \xC0\x81\
4839 164 \xC0\x81\
4840 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
4841 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4842 s: ANY_CR LONE_CR
4843 \2009-0-5209-0-54#
4844 0\x81\
4845 162 \xC0\x81\
4846 163 \xC0\x81\
4847 164 \xC0\x81\
4848 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
4849 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4850 s: ANY_CR LONE_CR
4851 \2110-0-5210-0-5#
4852 0\x81\
4853 162 \xC0\x81\
4854 163 \xC0\x81\
4855 164 \xC0\x81\
4856 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
4857 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4858 s: ANY_CR LONE_CR
4859 \2211-0-511-0-55#
4860 0\x81\
4861 162 \xC0\x81\
4862 163 \xC0\x81\
4863 164 \xC0\x81\
4864 165 \xC1111E \485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
4865 525-1-32265226-1-321212-0-5212-0-56#
4866 0\x81\
4867 162 \xC0\x81\
4868 163 \xC0\x81\
4869 164 \xC0\x81\
4870 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE_CR
4871 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
4872 s: ANY_CR LONE_CR
4873 \2113-0-5213-0-562214-0214-0-57-02xC0\x81\
4874 163 \xC0\x81\
4875 164 \xC0215-0-572216-0216-0-582117-0217-0-582118-0218-0-599-1-#
4876 5331
4877 31635 #
4878 0\x81\
4879 162 \xC0\x81\
4880 163 \xC0\x81\
4881 164 \xC0\x81\
4882 165 \xC1111E 2219-0-5219-0-592220-0-6220-0-602#
4883 0\x81\
4884 162 \xC0\x81\
4885 1632 \xC0\21-0-6022222-0-6222-0-6#
4886 0\x81\
4887 -3#
4888 #
4889 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
4890 0 binary 56-7-01W@XtW23-0-6223-0-61#
4891 0\x81\
4892 162 \xC0\x81\
4893 163 \xC0\x81\
4894 164 \xC0\x81\
4895 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2224-0224-0-629-1-#
4896 5331
4897 31635 #
4898 0\x81\
4899 162 \xC0\x81\
4900 163 \xC0\x81\
4901 164 \xC0\x81\
4902 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2225-0225-0-6#
4903 0\x81\
4904 162 \xC0\x81\
4905 163 \xC0\x81\
4906 164 \xC0\x81\
4907 165 \xC1111E \485485-1-481-16-1-487 utf-c2226-0226-0-63#
4908 0\x81\
4909 162 \xC0\x81\
4910 163 \xC0\x81\
4911 164 \xC0\x81\
4912 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE2#
4913 0\x81\
4914 162 \xC0\x81\
4915 163BB\22220\x81\
4916 163 \xC0\x81\
4917 164 \0\x81\
4918 163 \xC0\x81\
4919 164 \xC0\x81\
4920 165 \xC1111E \
4921 170 \xE \
4922 171 \xE \
4923 172 \xE \
4924 1777777718#
4925 431-0-1#
4926 #
4927 #
4928 437-0437-0-168#
4929 438-04441 #
4930 44#
4931 #
4932 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
4933 9459-0#
4934 461-0462-1334-0-6234-0-67#
4935 0\x81\
4936 -441546 546-1-42#
4937 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4938 5331
4939 31635 535-15336-235-0#
4940 0\x81\
4941 162 \xC0\x81\
4942 163 \xC0\x81\
4943 164 \xC0\x81\
4944 165 \xC1111E \
4945 Other f11-578-12#
4946 0\x81\
4947 162 \x##
4948 0\x81\
4949 162 \xC0\x81\
4950 163 \xC0\x81\
4951 164 \xC0\x81\
4952 165 \xC1111E \
4953 170 \xE \
4954 171 \xE \
4955 172 \xE \
4956 1777777718#
4957 431-0-1#
4958 #
4959 #
4960 437-0437-0-168#
4961 438-04441 #
4962 44#
4963 #
4964 446-0446-0-1\4524-1524-1-31#
4965 525-1-32265226-1-32#
4966 #
4967 32528-1-35295229-1-#
4968 5331
4969 31-1-3#
4970 532-1-3#
4971 #
4972 53#
4973 5334-1-335 535-15336-1-337 utf-check-537-1#
4974 38 utf-check-5338-1-3#
4975 #
4976 #
4977 40 5440-1-39#
4978 #
4979 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
4980 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
4981 5331
4982 31635 535-15336-1-337 7f-check-537-1#
4983 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
4984 #
4985 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
4986 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
4987 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
4988 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
4989 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
4990 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
4991 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
4992 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
4993 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
4994 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
4995 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
4996 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
4997 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
4998 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
4999 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
5000 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
5001 33593-1593-1-6#
5002 595934
5003 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
5004 2337-1-57578578-1-578-38#
5005 0\x81\
5006 162 \#
5007 #
5008 0\x81\
5009 162 \xC0\x81\
5010 163 \xC0\x81\
5011 164 \xC0\x81\
5012 165 \xC1111E \
5013 170 \xE \
5014 171 \xE \
5015 172 \xE \
5016 1777777718#
5017 431-0-1#
5018 #
5019 #
5020 437-0437-0-168#
5021 438-04441 #
5022 44#
5023 #
5024 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
5025 9459-0#
5026 461-0462-1-46463-1-4646446464#
5027 0\x81\
5028 -441546 546-1-42#
5029 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
5030 5331
5031 31635 535-15336-323239-040-0-7240-0-70578578-1-578-12#
5032 0\x81\
5033 162 \x##
5034 0\x81\
5035 162 \xC0\x81\
5036 163 \xC0\x81\
5037 164 \xC0\x81\
5038 165 \xC1111E \
5039 170 \xE \
5040 #
5041 0\x81\
5042 4241-0241-0-702245-0-725-0-7#
5043 0\x81\
5044 -3#
5045 #
5046 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
5047 0 binary 56-7-01W@XtW4250-0-7250-0-752554-0-7254-0-77578578-1-578-12#
5048 0\x81\
5049 162 \x##
5050 0\x81\
5051 162 \xC0\x81\
5052 163 \xC0\x81\
5053 164 \x#
5054 0\x81\
5055 55558-0-7559-063 \xC0\x81\
5056 164 \xC0\x81\
5057 165 \xC1111E \
5058 170 \xE \
5059 171 \xE \
5060 0\x81\
5061 168#
5062 438-04441 #
5063 44#
5064 #
5065 446-0446-0-1\4524-1524-1-31#
5066 525-1-32265226-1-32#
5067 #
5068 32528-1-35295229-1-#
5069 5331
5070 31-1-3#
5071 532-1-3#
5072 #
5073 53#
5074 5334-1-335 535-15336-1-337 utf-check-537-1#
5075 38 utf-check-5338-1-3#
5076 #
5077 #
5078 40 5440-1-39#
5079 #
5080 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
5081 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
5082 5331
5083 31635 535-15336-1-337 7f-check-537-1#
5084 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
5085 #
5086 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
5087 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
5088 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
5089 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
5090 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
5091 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
5092 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
5093 23 \x00ABC\rX@dMG,j:Line endings: ANY_C620-2-6620-2-666E_CR
5094 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
5095 s: ANY_CR LONE_CR
5096 \
5097 -1-32#
5098 #
5099 32528-1-352952292
5100 0\x893-1-49 162 \xC0\x81\
5101 163 \xC0\x81\
5102 163 \xC395-1-5397-1998-19443 \xC0\x81\
5103 164 2626-2626-2-694627-2627-2-6963E_CR
5104 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
5105 s: ANY_CR LONE_CR
5106 \
5107 -1-32#
5108 #
5109 32528-1-35295229
5110 0\x893-1-49 162 \xC0\x81\
5111 163 \xC0\x81\
5112 163 \xC395-1-5397-1998-19443 \xC0\x81\
5113 164 56658-2658-2-85658 #
5114 #
5115 560512O@1~fl,Z:Line endi13z#
5116 0\x81\
5117 162 \xC0\x81\
5118 163 \xC0\x81\
5119 164 \xC0\x81\
5120 165 \xC1111E \
5121 170 \xE \
5122 171 \xE \
5123 172 \xE \
5124 1777777718#
5125 431-0-1#
5126 #
5127 #
5128 437-0437-0-168#
5129 438-04441 #
5130 44#
5131 #
5132 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
5133 9459-0#
5134 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
5135 7474474-1-4-1-6#
5136 #475-1-61-7477 477-1477-1-78#
5137 479 utf-check-479-1474808480-1-9481#
5138 848282-1-1482-1-10148484484-1-1484-1-11485485-1-481-16-1-487 utf-check-487-148488-1-13489 ut524524-1524-1-31#
5139 525-1-32265226-1-32#
5140 #
5141 32528-1-35295229532-1-3#
5142 #
5143 53#
5144 5334-1k-5338-1-3#
5145 #
5146 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
5147 0 binary 56-7-01W@XtW,j:Line enther flags: NONEV@8dM,1:7Z@11kG,7:flags: NONEV@8jj,1:7Z@YU0,6:158-7-i@1uLl,q1 \xEF\xBB\xBFOther flags: \
5148 2 [expr {$tcl_platform(byteOrder) eq "littleEndian" ? \
5149 "\xFF\xFE" : "\xFE\xFF"}]CR LONE_CR
5150 Other flags: NONV@8wU,2:7-_@9LW,5:0-7\
5151 s: ANY_CR LONE_CR
5152 \
5153 1-1-57578578-1-578-12#
5154 0\x81\
5155 162 \x##
5156 0\x81\
5157 162 \xC0\x81\
5158 163 \xC0\x81\
5159 164 \xC0\x81\
5160 165 \xC1111E \
5161 170 \xE \
5162 171 \xE \
5163 172 \xE \
5164 1777777718#
5165 431-0-1#
5166 #
5167 #
5168 437-0437-0-168#
5169 438-04441 #
5170 44#
5171 #
5172 446-0446-0-1\4524-1524-1-31#
5173 525-1-32265226-1-32#
5174 #
5175 32528-1-35295229-1-#
5176 5331
5177 31-1-3#
5178 532-1-3#
5179 #
5180 53#
5181 5334-1-335 535-15336-1-337 utf-check-537-1#
5182 38 utf-check-5338-1-3#
5183 #
5184 #
5185 40 5440-1-39#
5186 #
5187 342 4542-1-40543543-1-5444 544-1-4154545-1-441546 546-1-42#
5188 547-15450-1-44551551-1-44552 552-1-4553 55295229-1-#
5189 5331
5190 31635 535-15336-1-337 7f-check-537-1#
5191 38 u843-1-5444 544-1-41595450-1-44551551-1-105555555-1-4556 455117-1-47558 #
5192 #
5193 560512O@1~fl,Z:Line endi13z,2:7-Z@1m40,6:56-14CR LONE_CR
5194 Other f15s: NONEV@8dM,1:7Z@16Other flags: NONEV17 \x00AX@dMG,j:Line endings: ANY_CR LONE\
5195 18 \x00ABX@dMG,j:Line endings: ANY_CR LON\
5196 19 \x00ABCX@dMG,j:Line endings: ANY_CR LO\
5197 20 \x00ABCDX@dMG,j:Line endings: ANY_CR L\
5198 21 \x00A\rX@dMG,j:Line endings: ANY_CR LO\
5199 22 \x00AB\rX@dMG,j:Line endings: ANY_CR L\
5200 23 \x00ABC\rX@dMG,j:Line endings: ANY_CR \
5201 24 \x00ABCD\rX@dMG,j:Line endings: ANY_CR\
5202 25 \x00A\nX@dMG,j:Line endings: ANY_CR LO\
5203 26 \x00AB\nX@dMG,j:Line endings: ANY_CR L\
5204 27 \x00ABC\nX@dMG,j:Line endings: ANY_CR \
5205 28 \x00ABCD\nX@dMG,j:Line endings: ANY_CR\
5206 29 \x00A\r\nX@dMG,j:Line endings: ANY_CR \
5207 30 \x00AB\r\nX@dMG,j:Line endings: ANY_CR\
5208 31 \x00ABC\r\ns: NONEV@8dM,1:7Z@11kG,7:157-7-0h32 \x00ABCD\r\nX@dMG,j:Line endings: ANY_\
5209 33593-1593-1-6#
5210 595934
5211 03-1-70604-160560350607-1-760608-1-6036-check-6119-1-7
5212 2337-1-57578578-1-578-38#
5213 0\x81\
5214 162 \#
5215 #
5216 0\x81\
5217 162 \xC0\x81\
5218 163 \xC0\x81\
5219 164 \xC0\x81\
5220 165 \xC1111E \
5221 170 \xE \
5222 171 \xE \
5223 172 \xE \
5224 1777777718#
5225 431-0-1#
5226 #
5227 #
5228 437-0437-0-168#
5229 438-04441 #
5230 44#
5231 #
5232 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
5233 9459-0#
5234 461-0462-1-46463-1-46464464641101-011104-0-104-0-210105-0-101108-0-08-0-4-010109-0-111111114-0114-0-7-01xC0\x81\
5235 163 \xC0\x81\
5236 164 \xC0115-0-71116-0-9-0#
5237 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6469469-1-469-1-347070-1-70-1-471 471-1-47472 47472-1-473#
5238 7474474-1-4-1-6#
5239 #475-1-61-7477 477-1477-1-78#
5240 479 utf-check-479-1474808480-#
5241 0\x81\
5242 162 \xC0\x81\
5243 163 \xC0\x81\
5244 164 \xC0\x81\
5245 165 \xC1111E \
5246 170 \xE \
5247 171 \xE \
5248 172 \xE \
5249 1777777718#
5250 431-0-1#
5251 #
5252 #
5253 437-0437-0-168#
5254 438-04441 #
5255 44#
5256 #
5257 446-0446-0-1747448 49449-052 52-0-17454 454-0-1754-05 456#
5258 9459-0#
5259 461-0462-1-46463-1-4646446464-1-1465 465-1-465-1-166466-1-6467-1-468 utf-check-468-1-6#
5260 0\x81\
5261 162 \xC0\x81\
5262 163BB\2131-0-1133-0 162 \xC0\x81\
5263 163 \xC0\x81\
5264 63 \xC134-0-171381\
5265 162 \xC0\x81\
5266 163 \xC0\x81\
5267 164 \xC0\x81\
5268 165 \xC1111E \
5269 170 \xE \
5270 171 \xE \
5271 172 \xE \
5272 1777777718#
5273 431-0-1#
5274 #
5275 #
5276 437-0437-0-168#
5277 438-04441 #
5278 44#
5279 #
5280 446-0446-0-1747448 49449-052 52-0163 \xC0\x81\
5281 164 \xC0\x81\
5282 165 \xC1111E \
5283 170 \xE \
5284 171 \xE \
5285 1311414141-0-2141-0-201442-0-242-0-21ary 56-7-01W@XtW,j:Line enther #
5286 0\x81143-0-21144-0-2144-0-21145-0-2145-0-21446-0-2 163 \xC0\x81\
5287 164 \xC0\x81\
5288 165 \xC1111E \
5289 170 \xE \
5290 171 \xE \xC0\x14147-0147-0-21148-0148-0-21149-0149-0-21150-0-2150-0-25151-0-2151-0-25-0-1#
5291 #
5292 #
5293 437-0437-0-168#
5294 438-04441 #
5295 44#
5296 #
5297 446-0446-0-1747448 49449-052 52-0-17454 454-0-17#
5298 0\x81\
5299 162 \xC0\x81\
5300 163 552-0-2152-0-26-0153-0-2153-0-265 162 \xC0\x81\
5301 163 \xC0\x81\
5302 63 \154-0-25155-0155-0-27156-0156-0-289-1-#
5303 5331
5304 31635 #
5305 0\x81\
5306 162 \xC0\x81\
5307 163 \xC0\x81\
5308 164 \xC0\x81\
5309 165 \xC1111E 5157-0-2157-0-28558-0-2158-0-2#
5310 0\x81\
5311 -3#
5312 #
5313 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
5314 0 binary 56-7-01W@Xt5159-0159-0-2#
5315 0\x81\
5316 -3#
5317 #
5318 Z@Yyk,6:155-6-19@14LW,O@1~fl,Z:Line\
5319 0 binary 56-7-01W@XtW60-0160-0-30#
5320 0\x81\
5321 162 \xC0\x81\
5322 163 \xC0\x81\
5323 164 \xC0\x81\
5324 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE6161-0-3161-0-30#
5325 0\x81\
5326 162 \xC0\x81\
5327 163 \xC0\x81\
5328 164 \xC0\x81\
5329 165 \xC1111E \\xFE" : "\xFE\xFF"}]CR LONE66 162 \xC0\x81\
5330 163 \xC0\x81\
5331 63 \xC0\x81\
5332 164 \xC0\x81\
5333 165 \xC1111E \
5334 170 \xE \
5335 171 \xE \
5336 172 \xE \
5337 1777777718#
5338 431-0-1#
5339 #
5340 #
5341 4
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -301,10 +301,11 @@
301301
$(SRCDIR)/json_dir.c \
302302
$(SRCDIR)/json_finfo.c \
303303
$(SRCDIR)/json_login.c \
304304
$(SRCDIR)/json_query.c \
305305
$(SRCDIR)/json_report.c \
306
+ $(SRCDIR)/json_status.c \
306307
$(SRCDIR)/json_tag.c \
307308
$(SRCDIR)/json_timeline.c \
308309
$(SRCDIR)/json_user.c \
309310
$(SRCDIR)/json_wiki.c \
310311
$(SRCDIR)/leaf.c \
@@ -348,10 +349,11 @@
348349
$(SRCDIR)/unicode.c \
349350
$(SRCDIR)/update.c \
350351
$(SRCDIR)/url.c \
351352
$(SRCDIR)/user.c \
352353
$(SRCDIR)/utf8.c \
354
+ $(SRCDIR)/util.c \
353355
$(SRCDIR)/verify.c \
354356
$(SRCDIR)/vfile.c \
355357
$(SRCDIR)/wiki.c \
356358
$(SRCDIR)/wikiformat.c \
357359
$(SRCDIR)/winhttp.c \
@@ -407,10 +409,11 @@
407409
$(OBJDIR)/json_dir_.c \
408410
$(OBJDIR)/json_finfo_.c \
409411
$(OBJDIR)/json_login_.c \
410412
$(OBJDIR)/json_query_.c \
411413
$(OBJDIR)/json_report_.c \
414
+ $(OBJDIR)/json_status_.c \
412415
$(OBJDIR)/json_tag_.c \
413416
$(OBJDIR)/json_timeline_.c \
414417
$(OBJDIR)/json_user_.c \
415418
$(OBJDIR)/json_wiki_.c \
416419
$(OBJDIR)/leaf_.c \
@@ -454,10 +457,11 @@
454457
$(OBJDIR)/unicode_.c \
455458
$(OBJDIR)/update_.c \
456459
$(OBJDIR)/url_.c \
457460
$(OBJDIR)/user_.c \
458461
$(OBJDIR)/utf8_.c \
462
+ $(OBJDIR)/util_.c \
459463
$(OBJDIR)/verify_.c \
460464
$(OBJDIR)/vfile_.c \
461465
$(OBJDIR)/wiki_.c \
462466
$(OBJDIR)/wikiformat_.c \
463467
$(OBJDIR)/winhttp_.c \
@@ -513,10 +517,11 @@
513517
$(OBJDIR)/json_dir.o \
514518
$(OBJDIR)/json_finfo.o \
515519
$(OBJDIR)/json_login.o \
516520
$(OBJDIR)/json_query.o \
517521
$(OBJDIR)/json_report.o \
522
+ $(OBJDIR)/json_status.o \
518523
$(OBJDIR)/json_tag.o \
519524
$(OBJDIR)/json_timeline.o \
520525
$(OBJDIR)/json_user.o \
521526
$(OBJDIR)/json_wiki.o \
522527
$(OBJDIR)/leaf.o \
@@ -560,10 +565,11 @@
560565
$(OBJDIR)/unicode.o \
561566
$(OBJDIR)/update.o \
562567
$(OBJDIR)/url.o \
563568
$(OBJDIR)/user.o \
564569
$(OBJDIR)/utf8.o \
570
+ $(OBJDIR)/util.o \
565571
$(OBJDIR)/verify.o \
566572
$(OBJDIR)/vfile.o \
567573
$(OBJDIR)/wiki.o \
568574
$(OBJDIR)/wikiformat.o \
569575
$(OBJDIR)/winhttp.o \
@@ -732,10 +738,11 @@
732738
$(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h \
733739
$(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h \
734740
$(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h \
735741
$(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h \
736742
$(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h \
743
+ $(OBJDIR)/json_status_.c:$(OBJDIR)/json_status.h \
737744
$(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h \
738745
$(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h \
739746
$(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h \
740747
$(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h \
741748
$(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h \
@@ -779,10 +786,11 @@
779786
$(OBJDIR)/unicode_.c:$(OBJDIR)/unicode.h \
780787
$(OBJDIR)/update_.c:$(OBJDIR)/update.h \
781788
$(OBJDIR)/url_.c:$(OBJDIR)/url.h \
782789
$(OBJDIR)/user_.c:$(OBJDIR)/user.h \
783790
$(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \
791
+ $(OBJDIR)/util_.c:$(OBJDIR)/util.h \
784792
$(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \
785793
$(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \
786794
$(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \
787795
$(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \
788796
$(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \
@@ -1180,10 +1188,18 @@
11801188
11811189
$(OBJDIR)/json_report.o: $(OBJDIR)/json_report_.c $(OBJDIR)/json_report.h $(SRCDIR)/config.h
11821190
$(XTCC) -o $(OBJDIR)/json_report.o -c $(OBJDIR)/json_report_.c
11831191
11841192
$(OBJDIR)/json_report.h: $(OBJDIR)/headers
1193
+
1194
+$(OBJDIR)/json_status_.c: $(SRCDIR)/json_status.c $(OBJDIR)/translate
1195
+ $(TRANSLATE) $(SRCDIR)/json_status.c >$(OBJDIR)/json_status_.c
1196
+
1197
+$(OBJDIR)/json_status.o: $(OBJDIR)/json_status_.c $(OBJDIR)/json_status.h $(SRCDIR)/config.h
1198
+ $(XTCC) -o $(OBJDIR)/json_status.o -c $(OBJDIR)/json_status_.c
1199
+
1200
+$(OBJDIR)/json_status.h: $(OBJDIR)/headers
11851201
11861202
$(OBJDIR)/json_tag_.c: $(SRCDIR)/json_tag.c $(OBJDIR)/translate
11871203
$(TRANSLATE) $(SRCDIR)/json_tag.c >$(OBJDIR)/json_tag_.c
11881204
11891205
$(OBJDIR)/json_tag.o: $(OBJDIR)/json_tag_.c $(OBJDIR)/json_tag.h $(SRCDIR)/config.h
@@ -1556,10 +1572,18 @@
15561572
15571573
$(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h
15581574
$(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c
15591575
15601576
$(OBJDIR)/utf8.h: $(OBJDIR)/headers
1577
+
1578
+$(OBJDIR)/util_.c: $(SRCDIR)/util.c $(OBJDIR)/translate
1579
+ $(TRANSLATE) $(SRCDIR)/util.c >$(OBJDIR)/util_.c
1580
+
1581
+$(OBJDIR)/util.o: $(OBJDIR)/util_.c $(OBJDIR)/util.h $(SRCDIR)/config.h
1582
+ $(XTCC) -o $(OBJDIR)/util.o -c $(OBJDIR)/util_.c
1583
+
1584
+$(OBJDIR)/util.h: $(OBJDIR)/headers
15611585
15621586
$(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate
15631587
$(TRANSLATE) $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c
15641588
15651589
$(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h
@@ -1635,11 +1659,11 @@
16351659
$(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 -c $(SRCDIR)/sqlite3.c -o $(OBJDIR)/sqlite3.o
16361660
16371661
$(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
16381662
$(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $(OBJDIR)/cson_amalgamation.o
16391663
1640
-$(OBJDIR)/json.o $(OBJDIR)/json_artifact.o $(OBJDIR)/json_branch.o $(OBJDIR)/json_config.o $(OBJDIR)/json_diff.o $(OBJDIR)/json_dir.o $(OBJDIR)/jsos_finfo.o $(OBJDIR)/json_login.o $(OBJDIR)/json_query.o $(OBJDIR)/json_report.o $(OBJDIR)/json_tag.o $(OBJDIR)/json_timeline.o $(OBJDIR)/json_user.o $(OBJDIR)/json_wiki.o : $(SRCDIR)/json_detail.h
1664
+$(OBJDIR)/json.o $(OBJDIR)/json_artifact.o $(OBJDIR)/json_branch.o $(OBJDIR)/json_config.o $(OBJDIR)/json_diff.o $(OBJDIR)/json_dir.o $(OBJDIR)/jsos_finfo.o $(OBJDIR)/json_login.o $(OBJDIR)/json_query.o $(OBJDIR)/json_report.o $(OBJDIR)/json_status.o $(OBJDIR)/json_tag.o $(OBJDIR)/json_timeline.o $(OBJDIR)/json_user.o $(OBJDIR)/json_wiki.o : $(SRCDIR)/json_detail.h
16411665
16421666
$(OBJDIR)/shell.o: $(SRCDIR)/shell.c $(SRCDIR)/sqlite3.h
16431667
$(XTCC) -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -c $(SRCDIR)/shell.c -o $(OBJDIR)/shell.o
16441668
16451669
$(OBJDIR)/th.o: $(SRCDIR)/th.c
16461670
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -301,10 +301,11 @@
301 $(SRCDIR)/json_dir.c \
302 $(SRCDIR)/json_finfo.c \
303 $(SRCDIR)/json_login.c \
304 $(SRCDIR)/json_query.c \
305 $(SRCDIR)/json_report.c \
 
306 $(SRCDIR)/json_tag.c \
307 $(SRCDIR)/json_timeline.c \
308 $(SRCDIR)/json_user.c \
309 $(SRCDIR)/json_wiki.c \
310 $(SRCDIR)/leaf.c \
@@ -348,10 +349,11 @@
348 $(SRCDIR)/unicode.c \
349 $(SRCDIR)/update.c \
350 $(SRCDIR)/url.c \
351 $(SRCDIR)/user.c \
352 $(SRCDIR)/utf8.c \
 
353 $(SRCDIR)/verify.c \
354 $(SRCDIR)/vfile.c \
355 $(SRCDIR)/wiki.c \
356 $(SRCDIR)/wikiformat.c \
357 $(SRCDIR)/winhttp.c \
@@ -407,10 +409,11 @@
407 $(OBJDIR)/json_dir_.c \
408 $(OBJDIR)/json_finfo_.c \
409 $(OBJDIR)/json_login_.c \
410 $(OBJDIR)/json_query_.c \
411 $(OBJDIR)/json_report_.c \
 
412 $(OBJDIR)/json_tag_.c \
413 $(OBJDIR)/json_timeline_.c \
414 $(OBJDIR)/json_user_.c \
415 $(OBJDIR)/json_wiki_.c \
416 $(OBJDIR)/leaf_.c \
@@ -454,10 +457,11 @@
454 $(OBJDIR)/unicode_.c \
455 $(OBJDIR)/update_.c \
456 $(OBJDIR)/url_.c \
457 $(OBJDIR)/user_.c \
458 $(OBJDIR)/utf8_.c \
 
459 $(OBJDIR)/verify_.c \
460 $(OBJDIR)/vfile_.c \
461 $(OBJDIR)/wiki_.c \
462 $(OBJDIR)/wikiformat_.c \
463 $(OBJDIR)/winhttp_.c \
@@ -513,10 +517,11 @@
513 $(OBJDIR)/json_dir.o \
514 $(OBJDIR)/json_finfo.o \
515 $(OBJDIR)/json_login.o \
516 $(OBJDIR)/json_query.o \
517 $(OBJDIR)/json_report.o \
 
518 $(OBJDIR)/json_tag.o \
519 $(OBJDIR)/json_timeline.o \
520 $(OBJDIR)/json_user.o \
521 $(OBJDIR)/json_wiki.o \
522 $(OBJDIR)/leaf.o \
@@ -560,10 +565,11 @@
560 $(OBJDIR)/unicode.o \
561 $(OBJDIR)/update.o \
562 $(OBJDIR)/url.o \
563 $(OBJDIR)/user.o \
564 $(OBJDIR)/utf8.o \
 
565 $(OBJDIR)/verify.o \
566 $(OBJDIR)/vfile.o \
567 $(OBJDIR)/wiki.o \
568 $(OBJDIR)/wikiformat.o \
569 $(OBJDIR)/winhttp.o \
@@ -732,10 +738,11 @@
732 $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h \
733 $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h \
734 $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h \
735 $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h \
736 $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h \
 
737 $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h \
738 $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h \
739 $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h \
740 $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h \
741 $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h \
@@ -779,10 +786,11 @@
779 $(OBJDIR)/unicode_.c:$(OBJDIR)/unicode.h \
780 $(OBJDIR)/update_.c:$(OBJDIR)/update.h \
781 $(OBJDIR)/url_.c:$(OBJDIR)/url.h \
782 $(OBJDIR)/user_.c:$(OBJDIR)/user.h \
783 $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \
 
784 $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \
785 $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \
786 $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \
787 $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \
788 $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \
@@ -1180,10 +1188,18 @@
1180
1181 $(OBJDIR)/json_report.o: $(OBJDIR)/json_report_.c $(OBJDIR)/json_report.h $(SRCDIR)/config.h
1182 $(XTCC) -o $(OBJDIR)/json_report.o -c $(OBJDIR)/json_report_.c
1183
1184 $(OBJDIR)/json_report.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
1185
1186 $(OBJDIR)/json_tag_.c: $(SRCDIR)/json_tag.c $(OBJDIR)/translate
1187 $(TRANSLATE) $(SRCDIR)/json_tag.c >$(OBJDIR)/json_tag_.c
1188
1189 $(OBJDIR)/json_tag.o: $(OBJDIR)/json_tag_.c $(OBJDIR)/json_tag.h $(SRCDIR)/config.h
@@ -1556,10 +1572,18 @@
1556
1557 $(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h
1558 $(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c
1559
1560 $(OBJDIR)/utf8.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
1561
1562 $(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate
1563 $(TRANSLATE) $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c
1564
1565 $(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h
@@ -1635,11 +1659,11 @@
1635 $(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 -c $(SRCDIR)/sqlite3.c -o $(OBJDIR)/sqlite3.o
1636
1637 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
1638 $(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $(OBJDIR)/cson_amalgamation.o
1639
1640 $(OBJDIR)/json.o $(OBJDIR)/json_artifact.o $(OBJDIR)/json_branch.o $(OBJDIR)/json_config.o $(OBJDIR)/json_diff.o $(OBJDIR)/json_dir.o $(OBJDIR)/jsos_finfo.o $(OBJDIR)/json_login.o $(OBJDIR)/json_query.o $(OBJDIR)/json_report.o $(OBJDIR)/json_tag.o $(OBJDIR)/json_timeline.o $(OBJDIR)/json_user.o $(OBJDIR)/json_wiki.o : $(SRCDIR)/json_detail.h
1641
1642 $(OBJDIR)/shell.o: $(SRCDIR)/shell.c $(SRCDIR)/sqlite3.h
1643 $(XTCC) -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -c $(SRCDIR)/shell.c -o $(OBJDIR)/shell.o
1644
1645 $(OBJDIR)/th.o: $(SRCDIR)/th.c
1646
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -301,10 +301,11 @@
301 $(SRCDIR)/json_dir.c \
302 $(SRCDIR)/json_finfo.c \
303 $(SRCDIR)/json_login.c \
304 $(SRCDIR)/json_query.c \
305 $(SRCDIR)/json_report.c \
306 $(SRCDIR)/json_status.c \
307 $(SRCDIR)/json_tag.c \
308 $(SRCDIR)/json_timeline.c \
309 $(SRCDIR)/json_user.c \
310 $(SRCDIR)/json_wiki.c \
311 $(SRCDIR)/leaf.c \
@@ -348,10 +349,11 @@
349 $(SRCDIR)/unicode.c \
350 $(SRCDIR)/update.c \
351 $(SRCDIR)/url.c \
352 $(SRCDIR)/user.c \
353 $(SRCDIR)/utf8.c \
354 $(SRCDIR)/util.c \
355 $(SRCDIR)/verify.c \
356 $(SRCDIR)/vfile.c \
357 $(SRCDIR)/wiki.c \
358 $(SRCDIR)/wikiformat.c \
359 $(SRCDIR)/winhttp.c \
@@ -407,10 +409,11 @@
409 $(OBJDIR)/json_dir_.c \
410 $(OBJDIR)/json_finfo_.c \
411 $(OBJDIR)/json_login_.c \
412 $(OBJDIR)/json_query_.c \
413 $(OBJDIR)/json_report_.c \
414 $(OBJDIR)/json_status_.c \
415 $(OBJDIR)/json_tag_.c \
416 $(OBJDIR)/json_timeline_.c \
417 $(OBJDIR)/json_user_.c \
418 $(OBJDIR)/json_wiki_.c \
419 $(OBJDIR)/leaf_.c \
@@ -454,10 +457,11 @@
457 $(OBJDIR)/unicode_.c \
458 $(OBJDIR)/update_.c \
459 $(OBJDIR)/url_.c \
460 $(OBJDIR)/user_.c \
461 $(OBJDIR)/utf8_.c \
462 $(OBJDIR)/util_.c \
463 $(OBJDIR)/verify_.c \
464 $(OBJDIR)/vfile_.c \
465 $(OBJDIR)/wiki_.c \
466 $(OBJDIR)/wikiformat_.c \
467 $(OBJDIR)/winhttp_.c \
@@ -513,10 +517,11 @@
517 $(OBJDIR)/json_dir.o \
518 $(OBJDIR)/json_finfo.o \
519 $(OBJDIR)/json_login.o \
520 $(OBJDIR)/json_query.o \
521 $(OBJDIR)/json_report.o \
522 $(OBJDIR)/json_status.o \
523 $(OBJDIR)/json_tag.o \
524 $(OBJDIR)/json_timeline.o \
525 $(OBJDIR)/json_user.o \
526 $(OBJDIR)/json_wiki.o \
527 $(OBJDIR)/leaf.o \
@@ -560,10 +565,11 @@
565 $(OBJDIR)/unicode.o \
566 $(OBJDIR)/update.o \
567 $(OBJDIR)/url.o \
568 $(OBJDIR)/user.o \
569 $(OBJDIR)/utf8.o \
570 $(OBJDIR)/util.o \
571 $(OBJDIR)/verify.o \
572 $(OBJDIR)/vfile.o \
573 $(OBJDIR)/wiki.o \
574 $(OBJDIR)/wikiformat.o \
575 $(OBJDIR)/winhttp.o \
@@ -732,10 +738,11 @@
738 $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h \
739 $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h \
740 $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h \
741 $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h \
742 $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h \
743 $(OBJDIR)/json_status_.c:$(OBJDIR)/json_status.h \
744 $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h \
745 $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h \
746 $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h \
747 $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h \
748 $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h \
@@ -779,10 +786,11 @@
786 $(OBJDIR)/unicode_.c:$(OBJDIR)/unicode.h \
787 $(OBJDIR)/update_.c:$(OBJDIR)/update.h \
788 $(OBJDIR)/url_.c:$(OBJDIR)/url.h \
789 $(OBJDIR)/user_.c:$(OBJDIR)/user.h \
790 $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \
791 $(OBJDIR)/util_.c:$(OBJDIR)/util.h \
792 $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \
793 $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \
794 $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \
795 $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \
796 $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \
@@ -1180,10 +1188,18 @@
1188
1189 $(OBJDIR)/json_report.o: $(OBJDIR)/json_report_.c $(OBJDIR)/json_report.h $(SRCDIR)/config.h
1190 $(XTCC) -o $(OBJDIR)/json_report.o -c $(OBJDIR)/json_report_.c
1191
1192 $(OBJDIR)/json_report.h: $(OBJDIR)/headers
1193
1194 $(OBJDIR)/json_status_.c: $(SRCDIR)/json_status.c $(OBJDIR)/translate
1195 $(TRANSLATE) $(SRCDIR)/json_status.c >$(OBJDIR)/json_status_.c
1196
1197 $(OBJDIR)/json_status.o: $(OBJDIR)/json_status_.c $(OBJDIR)/json_status.h $(SRCDIR)/config.h
1198 $(XTCC) -o $(OBJDIR)/json_status.o -c $(OBJDIR)/json_status_.c
1199
1200 $(OBJDIR)/json_status.h: $(OBJDIR)/headers
1201
1202 $(OBJDIR)/json_tag_.c: $(SRCDIR)/json_tag.c $(OBJDIR)/translate
1203 $(TRANSLATE) $(SRCDIR)/json_tag.c >$(OBJDIR)/json_tag_.c
1204
1205 $(OBJDIR)/json_tag.o: $(OBJDIR)/json_tag_.c $(OBJDIR)/json_tag.h $(SRCDIR)/config.h
@@ -1556,10 +1572,18 @@
1572
1573 $(OBJDIR)/utf8.o: $(OBJDIR)/utf8_.c $(OBJDIR)/utf8.h $(SRCDIR)/config.h
1574 $(XTCC) -o $(OBJDIR)/utf8.o -c $(OBJDIR)/utf8_.c
1575
1576 $(OBJDIR)/utf8.h: $(OBJDIR)/headers
1577
1578 $(OBJDIR)/util_.c: $(SRCDIR)/util.c $(OBJDIR)/translate
1579 $(TRANSLATE) $(SRCDIR)/util.c >$(OBJDIR)/util_.c
1580
1581 $(OBJDIR)/util.o: $(OBJDIR)/util_.c $(OBJDIR)/util.h $(SRCDIR)/config.h
1582 $(XTCC) -o $(OBJDIR)/util.o -c $(OBJDIR)/util_.c
1583
1584 $(OBJDIR)/util.h: $(OBJDIR)/headers
1585
1586 $(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate
1587 $(TRANSLATE) $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c
1588
1589 $(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h
@@ -1635,11 +1659,11 @@
1659 $(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 -c $(SRCDIR)/sqlite3.c -o $(OBJDIR)/sqlite3.o
1660
1661 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
1662 $(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $(OBJDIR)/cson_amalgamation.o
1663
1664 $(OBJDIR)/json.o $(OBJDIR)/json_artifact.o $(OBJDIR)/json_branch.o $(OBJDIR)/json_config.o $(OBJDIR)/json_diff.o $(OBJDIR)/json_dir.o $(OBJDIR)/jsos_finfo.o $(OBJDIR)/json_login.o $(OBJDIR)/json_query.o $(OBJDIR)/json_report.o $(OBJDIR)/json_status.o $(OBJDIR)/json_tag.o $(OBJDIR)/json_timeline.o $(OBJDIR)/json_user.o $(OBJDIR)/json_wiki.o : $(SRCDIR)/json_detail.h
1665
1666 $(OBJDIR)/shell.o: $(SRCDIR)/shell.c $(SRCDIR)/sqlite3.h
1667 $(XTCC) -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -c $(SRCDIR)/shell.c -o $(OBJDIR)/shell.o
1668
1669 $(OBJDIR)/th.o: $(SRCDIR)/th.c
1670

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button