首页>代码>java自动检测获取http请求URL地址的网页内容编码工具类>/java自动检测获取http请求URL地址的网页内容编码工具类/src/com/zuidaima/encoding/util/BytesEncodingDetect.java
package com.zuidaima.encoding.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;

public class BytesEncodingDetect extends Encoding {
	int GBFreq[][];

	int GBKFreq[][];

	int Big5Freq[][];

	int Big5PFreq[][];

	int EUC_TWFreq[][];

	int KRFreq[][];

	int JPFreq[][];

	// int UnicodeFreq[94][128];
	// public static String[] nicename;
	// public static String[] codings;
	public boolean debug;

	public BytesEncodingDetect() {
		super();
		debug = false;
		GBFreq = new int[94][94];
		GBKFreq = new int[126][191];
		Big5Freq = new int[94][158];
		Big5PFreq = new int[126][191];
		EUC_TWFreq = new int[94][94];
		KRFreq = new int[94][94];
		JPFreq = new int[94][94];
		// Initialize the Frequency Table for GB, GBK, Big5, EUC-TW, KR, JP
		initialize_frequencies();
	}

	public static void main(String argc[]) {
		BytesEncodingDetect sinodetector;
		int result = OTHER;
		int i;
		sinodetector = new BytesEncodingDetect();
		for (i = 0; i < argc.length; i++) {
			if (argc[i].startsWith("http://") == true) {
				try {
					result = sinodetector.detectEncoding(new URL(argc[i]));
				} catch (Exception e) {
					System.err.println("Bad URL " + e.toString());
				}
			} else if (argc[i].equals("-d")) {
				sinodetector.debug = true;
				continue;
			} else {
				result = sinodetector.detectEncoding(new File(argc[i]));
			}
			System.out.println(nicename[result]);
		}
	}

	/**
	 * Function : detectEncoding Aruguments: URL Returns : One of the encodings
	 * from the Encoding enumeration (GB2312, HZ, BIG5, EUC_TW, ASCII, or OTHER)
	 * Description: This function looks at the URL contents and assigns it a
	 * probability score for each encoding type. The encoding type with the
	 * highest probability is returned.
	 */
	public int detectEncoding(URL testurl) {
		byte[] rawtext = new byte[10000];
		int bytesread = 0, byteoffset = 0;
		int guess = OTHER;
		InputStream chinesestream;
		try {
			chinesestream = testurl.openStream();
			while ((bytesread = chinesestream.read(rawtext, byteoffset,
					rawtext.length - byteoffset)) > 0) {
				byteoffset += bytesread;
			}
			;
			chinesestream.close();
			guess = detectEncoding(rawtext);
		} catch (Exception e) {
			System.err.println("Error loading or using URL " + e.toString());
			guess = -1;
		}
		return guess;
	}

	/**
	 * Function : detectEncoding Aruguments: File Returns : One of the encodings
	 * from the Encoding enumeration (GB2312, HZ, BIG5, EUC_TW, ASCII, or OTHER)
	 * Description: This function looks at the file and assigns it a probability
	 * score for each encoding type. The encoding type with the highest
	 * probability is returned.
	 */
	public int detectEncoding(File testfile) {
		FileInputStream chinesefile;
		byte[] rawtext;
		rawtext = new byte[(int) testfile.length()];
		try {
			chinesefile = new FileInputStream(testfile);
			chinesefile.read(rawtext);
			chinesefile.close();
		} catch (Exception e) {
			System.err.println("Error: " + e);
		}
		return detectEncoding(rawtext);
	}

	/**
	 * Function : detectEncoding Aruguments: byte array Returns : One of the
	 * encodings from the Encoding enumeration (GB2312, HZ, BIG5, EUC_TW, ASCII,
	 * or OTHER) Description: This function looks at the byte array and assigns
	 * it a probability score for each encoding type. The encoding type with the
	 * highest probability is returned.
	 */
	public int detectEncoding(byte[] rawtext) {
		int[] scores;
		int index, maxscore = 0;
		int encoding_guess = OTHER;
		scores = new int[TOTALTYPES];
		// Assign Scores
		scores[GB2312] = gb2312_probability(rawtext);
		scores[GBK] = gbk_probability(rawtext);
		scores[GB18030] = gb18030_probability(rawtext);
		scores[HZ] = hz_probability(rawtext);
		scores[BIG5] = big5_probability(rawtext);
		scores[CNS11643] = euc_tw_probability(rawtext);
		scores[ISO2022CN] = iso_2022_cn_probability(rawtext);
		scores[UTF8] = utf8_probability(rawtext);
		scores[UNICODE] = utf16_probability(rawtext);
		scores[EUC_KR] = euc_kr_probability(rawtext);
		scores[CP949] = cp949_probability(rawtext);
		scores[JOHAB] = 0;
		scores[ISO2022KR] = iso_2022_kr_probability(rawtext);
		scores[ASCII] = ascii_probability(rawtext);
		scores[SJIS] = sjis_probability(rawtext);
		scores[EUC_JP] = euc_jp_probability(rawtext);
		scores[ISO2022JP] = iso_2022_jp_probability(rawtext);
		scores[UNICODET] = 0;
		scores[UNICODES] = 0;
		scores[ISO2022CN_GB] = 0;
		scores[ISO2022CN_CNS] = 0;
		scores[OTHER] = 0;
		// Tabulate Scores
		for (index = 0; index < TOTALTYPES; index++) {
			if (debug)
				System.err.println("Encoding " + nicename[index] + " score "
						+ scores[index]);
			if (scores[index] > maxscore) {
				encoding_guess = index;
				maxscore = scores[index];
			}
		}
		// Return OTHER if nothing scored above 50
		if (maxscore <= 50) {
			encoding_guess = OTHER;
		}
		return encoding_guess;
	}

	/*
	 * Function: gb2312_probability Argument: pointer to byte array Returns :
	 * number from 0 to 100 representing probability text in array uses GB-2312
	 * encoding
	 */
	int gb2312_probability(byte[] rawtext) {
		int i, rawtextlen = 0;
		int dbchars = 1, gbchars = 1;
		long gbfreq = 0, totalfreq = 1;
		float rangeval = 0, freqval = 0;
		int row, column;
		// Stage 1: Check to see if characters fit into acceptable ranges
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen - 1; i++) {
			// System.err.println(rawtext[i]);
			if (rawtext[i] >= 0) {
				// asciichars++;
			} else {
				dbchars++;
				if ((byte) 0xA1 <= rawtext[i] && rawtext[i] <= (byte) 0xF7
						&& (byte) 0xA1 <= rawtext[i + 1]
						&& rawtext[i + 1] <= (byte) 0xFE) {
					gbchars++;
					totalfreq += 500;
					row = rawtext[i] + 256 - 0xA1;
					column = rawtext[i + 1] + 256 - 0xA1;
					if (GBFreq[row][column] != 0) {
						gbfreq += GBFreq[row][column];
					} else if (15 <= row && row < 55) {
						// In GB high-freq character range
						gbfreq += 200;
					}
				}
				i++;
			}
		}
		rangeval = 50 * ((float) gbchars / (float) dbchars);
		freqval = 50 * ((float) gbfreq / (float) totalfreq);
		return (int) (rangeval + freqval);
	}

	/*
	 * Function: gbk_probability Argument: pointer to byte array Returns :
	 * number from 0 to 100 representing probability text in array uses GBK
	 * encoding
	 */
	int gbk_probability(byte[] rawtext) {
		int i, rawtextlen = 0;
		int dbchars = 1, gbchars = 1;
		long gbfreq = 0, totalfreq = 1;
		float rangeval = 0, freqval = 0;
		int row, column;
		// Stage 1: Check to see if characters fit into acceptable ranges
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen - 1; i++) {
			// System.err.println(rawtext[i]);
			if (rawtext[i] >= 0) {
				// asciichars++;
			} else {
				dbchars++;
				if ((byte) 0xA1 <= rawtext[i] && rawtext[i] <= (byte) 0xF7
						&& // Original GB range
						(byte) 0xA1 <= rawtext[i + 1]
						&& rawtext[i + 1] <= (byte) 0xFE) {
					gbchars++;
					totalfreq += 500;
					row = rawtext[i] + 256 - 0xA1;
					column = rawtext[i + 1] + 256 - 0xA1;
					// System.out.println("original row " + row + " column " +
					// column);
					if (GBFreq[row][column] != 0) {
						gbfreq += GBFreq[row][column];
					} else if (15 <= row && row < 55) {
						gbfreq += 200;
					}
				} else if ((byte) 0x81 <= rawtext[i]
						&& rawtext[i] <= (byte) 0xFE && // Extended GB range
						(((byte) 0x80 <= rawtext[i + 1] && rawtext[i + 1] <= (byte) 0xFE) || ((byte) 0x40 <= rawtext[i + 1] && rawtext[i + 1] <= (byte) 0x7E))) {
					gbchars++;
					totalfreq += 500;
					row = rawtext[i] + 256 - 0x81;
					if (0x40 <= rawtext[i + 1] && rawtext[i + 1] <= 0x7E) {
						column = rawtext[i + 1] - 0x40;
					} else {
						column = rawtext[i + 1] + 256 - 0x40;
					}
					// System.out.println("extended row " + row + " column " +
					// column + " rawtext[i] " + rawtext[i]);
					if (GBKFreq[row][column] != 0) {
						gbfreq += GBKFreq[row][column];
					}
				}
				i++;
			}
		}
		rangeval = 50 * ((float) gbchars / (float) dbchars);
		freqval = 50 * ((float) gbfreq / (float) totalfreq);
		// For regular GB files, this would give the same score, so I handicap
		// it slightly
		return (int) (rangeval + freqval) - 1;
	}

	/*
	 * Function: gb18030_probability Argument: pointer to byte array Returns :
	 * number from 0 to 100 representing probability text in array uses GBK
	 * encoding
	 */
	int gb18030_probability(byte[] rawtext) {
		int i, rawtextlen = 0;
		int dbchars = 1, gbchars = 1;
		long gbfreq = 0, totalfreq = 1;
		float rangeval = 0, freqval = 0;
		int row, column;
		// Stage 1: Check to see if characters fit into acceptable ranges
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen - 1; i++) {
			// System.err.println(rawtext[i]);
			if (rawtext[i] >= 0) {
				// asciichars++;
			} else {
				dbchars++;
				if ((byte) 0xA1 <= rawtext[i] && rawtext[i] <= (byte) 0xF7
						&& // Original GB range
						i + 1 < rawtextlen && (byte) 0xA1 <= rawtext[i + 1]
						&& rawtext[i + 1] <= (byte) 0xFE) {
					gbchars++;
					totalfreq += 500;
					row = rawtext[i] + 256 - 0xA1;
					column = rawtext[i + 1] + 256 - 0xA1;
					// System.out.println("original row " + row + " column " +
					// column);
					if (GBFreq[row][column] != 0) {
						gbfreq += GBFreq[row][column];
					} else if (15 <= row && row < 55) {
						gbfreq += 200;
					}
				} else if ((byte) 0x81 <= rawtext[i]
						&& rawtext[i] <= (byte) 0xFE
						&& // Extended GB range
						i + 1 < rawtextlen
						&& (((byte) 0x80 <= rawtext[i + 1] && rawtext[i + 1] <= (byte) 0xFE) || ((byte) 0x40 <= rawtext[i + 1] && rawtext[i + 1] <= (byte) 0x7E))) {
					gbchars++;
					totalfreq += 500;
					row = rawtext[i] + 256 - 0x81;
					if (0x40 <= rawtext[i + 1] && rawtext[i + 1] <= 0x7E) {
						column = rawtext[i + 1] - 0x40;
					} else {
						column = rawtext[i + 1] + 256 - 0x40;
					}
					// System.out.println("extended row " + row + " column " +
					// column + " rawtext[i] " + rawtext[i]);
					if (GBKFreq[row][column] != 0) {
						gbfreq += GBKFreq[row][column];
					}
				} else if ((byte) 0x81 <= rawtext[i]
						&& rawtext[i] <= (byte) 0xFE
						&& // Extended GB range
						i + 3 < rawtextlen && (byte) 0x30 <= rawtext[i + 1]
						&& rawtext[i + 1] <= (byte) 0x39
						&& (byte) 0x81 <= rawtext[i + 2]
						&& rawtext[i + 2] <= (byte) 0xFE
						&& (byte) 0x30 <= rawtext[i + 3]
						&& rawtext[i + 3] <= (byte) 0x39) {
					gbchars++;
					/*
					 * totalfreq += 500; row = rawtext[i] + 256 - 0x81; if (0x40
					 * <= rawtext[i+1] && rawtext[i+1] <= 0x7E) { column =
					 * rawtext[i+1] - 0x40; } else { column = rawtext[i+1] + 256
					 * - 0x40; } //System.out.println("extended row " + row + "
					 * column " + column + " rawtext[i] " + rawtext[i]); if
					 * (GBKFreq[row][column] != 0) { gbfreq +=
					 * GBKFreq[row][column]; }
					 */
				}
				i++;
			}
		}
		rangeval = 50 * ((float) gbchars / (float) dbchars);
		freqval = 50 * ((float) gbfreq / (float) totalfreq);
		// For regular GB files, this would give the same score, so I handicap
		// it slightly
		return (int) (rangeval + freqval) - 1;
	}

	/*
	 * Function: hz_probability Argument: byte array Returns : number from 0 to
	 * 100 representing probability text in array uses HZ encoding
	 */
	int hz_probability(byte[] rawtext) {
		int i, rawtextlen;
		int hzchars = 0, dbchars = 1;
		long hzfreq = 0, totalfreq = 1;
		float rangeval = 0, freqval = 0;
		int hzstart = 0, hzend = 0;
		int row, column;
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen; i++) {
			if (rawtext[i] == '~') {
				if (rawtext[i + 1] == '{') {
					hzstart++;
					i += 2;
					while (i < rawtextlen - 1) {
						if (rawtext[i] == 0x0A || rawtext[i] == 0x0D) {
							break;
						} else if (rawtext[i] == '~' && rawtext[i + 1] == '}') {
							hzend++;
							i++;
							break;
						} else if ((0x21 <= rawtext[i] && rawtext[i] <= 0x77)
								&& (0x21 <= rawtext[i + 1] && rawtext[i + 1] <= 0x77)) {
							hzchars += 2;
							row = rawtext[i] - 0x21;
							column = rawtext[i + 1] - 0x21;
							totalfreq += 500;
							if (GBFreq[row][column] != 0) {
								hzfreq += GBFreq[row][column];
							} else if (15 <= row && row < 55) {
								hzfreq += 200;
							}
						} else if ((0xA1 <= rawtext[i] && rawtext[i] <= 0xF7)
								&& (0xA1 <= rawtext[i + 1] && rawtext[i + 1] <= 0xF7)) {
							hzchars += 2;
							row = rawtext[i] + 256 - 0xA1;
							column = rawtext[i + 1] + 256 - 0xA1;
							totalfreq += 500;
							if (GBFreq[row][column] != 0) {
								hzfreq += GBFreq[row][column];
							} else if (15 <= row && row < 55) {
								hzfreq += 200;
							}
						}
						dbchars += 2;
						i += 2;
					}
				} else if (rawtext[i + 1] == '}') {
					hzend++;
					i++;
				} else if (rawtext[i + 1] == '~') {
					i++;
				}
			}
		}
		if (hzstart > 4) {
			rangeval = 50;
		} else if (hzstart > 1) {
			rangeval = 41;
		} else if (hzstart > 0) { // Only 39 in case the sequence happened to
									// occur
			rangeval = 39; // in otherwise non-Hz text
		} else {
			rangeval = 0;
		}
		freqval = 50 * ((float) hzfreq / (float) totalfreq);
		return (int) (rangeval + freqval);
	}

	/**
	 * Function: big5_probability Argument: byte array Returns : number from 0
	 * to 100 representing probability text in array uses Big5 encoding
	 */
	int big5_probability(byte[] rawtext) {
		int i, rawtextlen = 0;
		int dbchars = 1, bfchars = 1;
		float rangeval = 0, freqval = 0;
		long bffreq = 0, totalfreq = 1;
		int row, column;
		// Check to see if characters fit into acceptable ranges
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen - 1; i++) {
			if (rawtext[i] >= 0) {
				// asciichars++;
			} else {
				dbchars++;
				if ((byte) 0xA1 <= rawtext[i]
						&& rawtext[i] <= (byte) 0xF9
						&& (((byte) 0x40 <= rawtext[i + 1] && rawtext[i + 1] <= (byte) 0x7E) || ((byte) 0xA1 <= rawtext[i + 1] && rawtext[i + 1] <= (byte) 0xFE))) {
					bfchars++;
					totalfreq += 500;
					row = rawtext[i] + 256 - 0xA1;
					if (0x40 <= rawtext[i + 1] && rawtext[i + 1] <= 0x7E) {
						column = rawtext[i + 1] - 0x40;
					} else {
						column = rawtext[i + 1] + 256 - 0x61;
					}
					if (Big5Freq[row][column] != 0) {
						bffreq += Big5Freq[row][column];
					} else if (3 <= row && row <= 37) {
						bffreq += 200;
					}
				}
				i++;
			}
		}
		rangeval = 50 * ((float) bfchars / (float) dbchars);
		freqval = 50 * ((float) bffreq / (float) totalfreq);
		return (int) (rangeval + freqval);
	}

	/*
	 * Function: big5plus_probability Argument: pointer to unsigned char array
	 * Returns : number from 0 to 100 representing probability text in array
	 * uses Big5+ encoding
	 */
	int big5plus_probability(byte[] rawtext) {
		int i, rawtextlen = 0;
		int dbchars = 1, bfchars = 1;
		long bffreq = 0, totalfreq = 1;
		float rangeval = 0, freqval = 0;
		int row, column;
		// Stage 1: Check to see if characters fit into acceptable ranges
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen - 1; i++) {
			// System.err.println(rawtext[i]);
			if (rawtext[i] >= 128) {
				// asciichars++;
			} else {
				dbchars++;
				if (0xA1 <= rawtext[i]
						&& rawtext[i] <= 0xF9
						&& // Original Big5 range
						((0x40 <= rawtext[i + 1] && rawtext[i + 1] <= 0x7E) || (0xA1 <= rawtext[i + 1] && rawtext[i + 1] <= 0xFE))) {
					bfchars++;
					totalfreq += 500;
					row = rawtext[i] - 0xA1;
					if (0x40 <= rawtext[i + 1] && rawtext[i + 1] <= 0x7E) {
						column = rawtext[i + 1] - 0x40;
					} else {
						column = rawtext[i + 1] - 0x61;
					}
					// System.out.println("original row " + row + " column " +
					// column);
					if (Big5Freq[row][column] != 0) {
						bffreq += Big5Freq[row][column];
					} else if (3 <= row && row < 37) {
						bffreq += 200;
					}
				} else if (0x81 <= rawtext[i]
						&& rawtext[i] <= 0xFE
						&& // Extended Big5 range
						((0x40 <= rawtext[i + 1] && rawtext[i + 1] <= 0x7E) || (0x80 <= rawtext[i + 1] && rawtext[i + 1] <= 0xFE))) {
					bfchars++;
					totalfreq += 500;
					row = rawtext[i] - 0x81;
					if (0x40 <= rawtext[i + 1] && rawtext[i + 1] <= 0x7E) {
						column = rawtext[i + 1] - 0x40;
					} else {
						column = rawtext[i + 1] - 0x40;
					}
					// System.out.println("extended row " + row + " column " +
					// column + " rawtext[i] " + rawtext[i]);
					if (Big5PFreq[row][column] != 0) {
						bffreq += Big5PFreq[row][column];
					}
				}
				i++;
			}
		}
		rangeval = 50 * ((float) bfchars / (float) dbchars);
		freqval = 50 * ((float) bffreq / (float) totalfreq);
		// For regular Big5 files, this would give the same score, so I handicap
		// it slightly
		return (int) (rangeval + freqval) - 1;
	}

	/*
	 * Function: euc_tw_probability Argument: byte array Returns : number from 0
	 * to 100 representing probability text in array uses EUC-TW (CNS 11643)
	 * encoding
	 */
	int euc_tw_probability(byte[] rawtext) {
		int i, rawtextlen = 0;
		int dbchars = 1, cnschars = 1;
		long cnsfreq = 0, totalfreq = 1;
		float rangeval = 0, freqval = 0;
		int row, column;
		// Check to see if characters fit into acceptable ranges
		// and have expected frequency of use
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen - 1; i++) {
			if (rawtext[i] >= 0) { // in ASCII range
				// asciichars++;
			} else { // high bit set
				dbchars++;
				if (i + 3 < rawtextlen && (byte) 0x8E == rawtext[i]
						&& (byte) 0xA1 <= rawtext[i + 1]
						&& rawtext[i + 1] <= (byte) 0xB0
						&& (byte) 0xA1 <= rawtext[i + 2]
						&& rawtext[i + 2] <= (byte) 0xFE
						&& (byte) 0xA1 <= rawtext[i + 3]
						&& rawtext[i + 3] <= (byte) 0xFE) { // Planes 1 - 16
					cnschars++;
					// System.out.println("plane 2 or above CNS char");
					// These are all less frequent chars so just ignore freq
					i += 3;
				} else if ((byte) 0xA1 <= rawtext[i]
						&& rawtext[i] <= (byte) 0xFE
						&& // Plane 1
						(byte) 0xA1 <= rawtext[i + 1]
						&& rawtext[i + 1] <= (byte) 0xFE) {
					cnschars++;
					totalfreq += 500;
					row = rawtext[i] + 256 - 0xA1;
					column = rawtext[i + 1] + 256 - 0xA1;
					if (EUC_TWFreq[row][column] != 0) {
						cnsfreq += EUC_TWFreq[row][column];
					} else if (35 <= row && row <= 92) {
						cnsfreq += 150;
					}
					i++;
				}
			}
		}
		rangeval = 50 * ((float) cnschars / (float) dbchars);
		freqval = 50 * ((float) cnsfreq / (float) totalfreq);
		return (int) (rangeval + freqval);
	}

	/*
	 * Function: iso_2022_cn_probability Argument: byte array Returns : number
	 * from 0 to 100 representing probability text in array uses ISO 2022-CN
	 * encoding WORKS FOR BASIC CASES, BUT STILL NEEDS MORE WORK
	 */
	int iso_2022_cn_probability(byte[] rawtext) {
		int i, rawtextlen = 0;
		int dbchars = 1, isochars = 1;
		long isofreq = 0, totalfreq = 1;
		float rangeval = 0, freqval = 0;
		int row, column;
		// Check to see if characters fit into acceptable ranges
		// and have expected frequency of use
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen - 1; i++) {
			if (rawtext[i] == (byte) 0x1B && i + 3 < rawtextlen) { // Escape
																	// char ESC
				if (rawtext[i + 1] == (byte) 0x24 && rawtext[i + 2] == 0x29
						&& rawtext[i + 3] == (byte) 0x41) { // GB Escape $ ) A
					i += 4;
					while (rawtext[i] != (byte) 0x1B) {
						dbchars++;
						if ((0x21 <= rawtext[i] && rawtext[i] <= 0x77)
								&& (0x21 <= rawtext[i + 1] && rawtext[i + 1] <= 0x77)) {
							isochars++;
							row = rawtext[i] - 0x21;
							column = rawtext[i + 1] - 0x21;
							totalfreq += 500;
							if (GBFreq[row][column] != 0) {
								isofreq += GBFreq[row][column];
							} else if (15 <= row && row < 55) {
								isofreq += 200;
							}
							i++;
						}
						i++;
					}
				} else if (i + 3 < rawtextlen && rawtext[i + 1] == (byte) 0x24
						&& rawtext[i + 2] == (byte) 0x29
						&& rawtext[i + 3] == (byte) 0x47) {
					// CNS Escape $ ) G
					i += 4;
					while (rawtext[i] != (byte) 0x1B) {
						dbchars++;
						if ((byte) 0x21 <= rawtext[i]
								&& rawtext[i] <= (byte) 0x7E
								&& (byte) 0x21 <= rawtext[i + 1]
								&& rawtext[i + 1] <= (byte) 0x7E) {
							isochars++;
							totalfreq += 500;
							row = rawtext[i] - 0x21;
							column = rawtext[i + 1] - 0x21;
							if (EUC_TWFreq[row][column] != 0) {
								isofreq += EUC_TWFreq[row][column];
							} else if (35 <= row && row <= 92) {
								isofreq += 150;
							}
							i++;
						}
						i++;
					}
				}
				if (rawtext[i] == (byte) 0x1B && i + 2 < rawtextlen
						&& rawtext[i + 1] == (byte) 0x28
						&& rawtext[i + 2] == (byte) 0x42) { // ASCII:
					// ESC
					// ( B
					i += 2;
				}
			}
		}
		rangeval = 50 * ((float) isochars / (float) dbchars);
		freqval = 50 * ((float) isofreq / (float) totalfreq);
		// System.out.println("isochars dbchars isofreq totalfreq " + isochars +
		// " " + dbchars + " " + isofreq + " " + totalfreq + "
		// " + rangeval + " " + freqval);
		return (int) (rangeval + freqval);
		// return 0;
	}

	/*
	 * Function: utf8_probability Argument: byte array Returns : number from 0
	 * to 100 representing probability text in array uses UTF-8 encoding of
	 * Unicode
	 */
	int utf8_probability(byte[] rawtext) {
		int score = 0;
		int i, rawtextlen = 0;
		int goodbytes = 0, asciibytes = 0;
		// Maybe also use UTF8 Byte Order Mark: EF BB BF
		// Check to see if characters fit into acceptable ranges
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen; i++) {
			if ((rawtext[i] & (byte) 0x7F) == rawtext[i]) { // One byte
				asciibytes++;
				// Ignore ASCII, can throw off count
			} else if (-64 <= rawtext[i] && rawtext[i] <= -33
					&& // Two bytes
					i + 1 < rawtextlen && -128 <= rawtext[i + 1]
					&& rawtext[i + 1] <= -65) {
				goodbytes += 2;
				i++;
			} else if (-32 <= rawtext[i]
					&& rawtext[i] <= -17
					&& // Three bytes
					i + 2 < rawtextlen && -128 <= rawtext[i + 1]
					&& rawtext[i + 1] <= -65 && -128 <= rawtext[i + 2]
					&& rawtext[i + 2] <= -65) {
				goodbytes += 3;
				i += 2;
			}
		}
		if (asciibytes == rawtextlen) {
			return 0;
		}
		score = (int) (100 * ((float) goodbytes / (float) (rawtextlen - asciibytes)));
		// System.out.println("rawtextlen " + rawtextlen + " goodbytes " +
		// goodbytes + " asciibytes " + asciibytes + " score " +
		// score);
		// If not above 98, reduce to zero to prevent coincidental matches
		// Allows for some (few) bad formed sequences
		if (score > 98) {
			return score;
		} else if (score > 95 && goodbytes > 30) {
			return score;
		} else {
			return 0;
		}
	}

	/*
	 * Function: utf16_probability Argument: byte array Returns : number from 0
	 * to 100 representing probability text in array uses UTF-16 encoding of
	 * Unicode, guess based on BOM // NOT VERY GENERAL, NEEDS MUCH MORE WORK
	 */
	int utf16_probability(byte[] rawtext) {
		// int score = 0;
		// int i, rawtextlen = 0;
		// int goodbytes = 0, asciibytes = 0;
		if (rawtext.length > 1
				&& ((byte) 0xFE == rawtext[0] && (byte) 0xFF == rawtext[1]) || // Big-endian
				((byte) 0xFF == rawtext[0] && (byte) 0xFE == rawtext[1])) { // Little-endian
			return 100;
		}
		return 0;
		/*
		 * // Check to see if characters fit into acceptable ranges rawtextlen =
		 * rawtext.length; for (i = 0; i < rawtextlen; i++) { if ((rawtext[i] &
		 * (byte)0x7F) == rawtext[i]) { // One byte goodbytes += 1;
		 * asciibytes++; } else if ((rawtext[i] & (byte)0xDF) == rawtext[i]) {
		 * // Two bytes if (i+1 < rawtextlen && (rawtext[i+1] & (byte)0xBF) ==
		 * rawtext[i+1]) { goodbytes += 2; i++; } } else if ((rawtext[i] &
		 * (byte)0xEF) == rawtext[i]) { // Three bytes if (i+2 < rawtextlen &&
		 * (rawtext[i+1] & (byte)0xBF) == rawtext[i+1] && (rawtext[i+2] &
		 * (byte)0xBF) == rawtext[i+2]) { goodbytes += 3; i+=2; } } }
		 * 
		 * score = (int)(100 * ((float)goodbytes/(float)rawtext.length)); // An
		 * all ASCII file is also a good UTF8 file, but I'd rather it // get
		 * identified as ASCII. Can delete following 3 lines otherwise if
		 * (goodbytes == asciibytes) { score = 0; } // If not above 90, reduce
		 * to zero to prevent coincidental matches if (score > 90) { return
		 * score; } else { return 0; }
		 */
	}

	/*
	 * Function: ascii_probability Argument: byte array Returns : number from 0
	 * to 100 representing probability text in array uses all ASCII Description:
	 * Sees if array has any characters not in ASCII range, if so, score is
	 * reduced
	 */
	int ascii_probability(byte[] rawtext) {
		int score = 75;
		int i, rawtextlen;
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen; i++) {
			if (rawtext[i] < 0) {
				score = score - 5;
			} else if (rawtext[i] == (byte) 0x1B) { // ESC (used by ISO 2022)
				score = score - 5;
			}
			if (score <= 0) {
				return 0;
			}
		}
		return score;
	}

	/*
	 * Function: euc_kr__probability Argument: pointer to byte array Returns :
	 * number from 0 to 100 representing probability text in array uses EUC-KR
	 * encoding
	 */
	int euc_kr_probability(byte[] rawtext) {
		int i, rawtextlen = 0;
		int dbchars = 1, krchars = 1;
		long krfreq = 0, totalfreq = 1;
		float rangeval = 0, freqval = 0;
		int row, column;
		// Stage 1: Check to see if characters fit into acceptable ranges
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen - 1; i++) {
			// System.err.println(rawtext[i]);
			if (rawtext[i] >= 0) {
				// asciichars++;
			} else {
				dbchars++;
				if ((byte) 0xA1 <= rawtext[i] && rawtext[i] <= (byte) 0xFE
						&& (byte) 0xA1 <= rawtext[i + 1]
						&& rawtext[i + 1] <= (byte) 0xFE) {
					krchars++;
					totalfreq += 500;
					row = rawtext[i] + 256 - 0xA1;
					column = rawtext[i + 1] + 256 - 0xA1;
					if (KRFreq[row][column] != 0) {
						krfreq += KRFreq[row][column];
					} else if (15 <= row && row < 55) {
						krfreq += 0;
					}
				}
				i++;
			}
		}
		rangeval = 50 * ((float) krchars / (float) dbchars);
		freqval = 50 * ((float) krfreq / (float) totalfreq);
		return (int) (rangeval + freqval);
	}

	/*
	 * Function: cp949__probability Argument: pointer to byte array Returns :
	 * number from 0 to 100 representing probability text in array uses Cp949
	 * encoding
	 */
	int cp949_probability(byte[] rawtext) {
		int i, rawtextlen = 0;
		int dbchars = 1, krchars = 1;
		long krfreq = 0, totalfreq = 1;
		float rangeval = 0, freqval = 0;
		int row, column;
		// Stage 1: Check to see if characters fit into acceptable ranges
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen - 1; i++) {
			// System.err.println(rawtext[i]);
			if (rawtext[i] >= 0) {
				// asciichars++;
			} else {
				dbchars++;
				if ((byte) 0x81 <= rawtext[i]
						&& rawtext[i] <= (byte) 0xFE
						&& ((byte) 0x41 <= rawtext[i + 1]
								&& rawtext[i + 1] <= (byte) 0x5A
								|| (byte) 0x61 <= rawtext[i + 1]
								&& rawtext[i + 1] <= (byte) 0x7A || (byte) 0x81 <= rawtext[i + 1]
								&& rawtext[i + 1] <= (byte) 0xFE)) {
					krchars++;
					totalfreq += 500;
					if ((byte) 0xA1 <= rawtext[i] && rawtext[i] <= (byte) 0xFE
							&& (byte) 0xA1 <= rawtext[i + 1]
							&& rawtext[i + 1] <= (byte) 0xFE) {
						row = rawtext[i] + 256 - 0xA1;
						column = rawtext[i + 1] + 256 - 0xA1;
						if (KRFreq[row][column] != 0) {
							krfreq += KRFreq[row][column];
						}
					}
				}
				i++;
			}
		}
		rangeval = 50 * ((float) krchars / (float) dbchars);
		freqval = 50 * ((float) krfreq / (float) totalfreq);
		return (int) (rangeval + freqval);
	}

	int iso_2022_kr_probability(byte[] rawtext) {
		int i;
		for (i = 0; i < rawtext.length; i++) {
			if (i + 3 < rawtext.length && rawtext[i] == 0x1b
					&& (char) rawtext[i + 1] == '$'
					&& (char) rawtext[i + 2] == ')'
					&& (char) rawtext[i + 3] == 'C') {
				return 100;
			}
		}
		return 0;
	}

	/*
	 * Function: euc_jp_probability Argument: pointer to byte array Returns :
	 * number from 0 to 100 representing probability text in array uses EUC-JP
	 * encoding
	 */
	int euc_jp_probability(byte[] rawtext) {
		int i, rawtextlen = 0;
		int dbchars = 1, jpchars = 1;
		long jpfreq = 0, totalfreq = 1;
		float rangeval = 0, freqval = 0;
		int row, column;
		// Stage 1: Check to see if characters fit into acceptable ranges
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen - 1; i++) {
			// System.err.println(rawtext[i]);
			if (rawtext[i] >= 0) {
				// asciichars++;
			} else {
				dbchars++;
				if ((byte) 0xA1 <= rawtext[i] && rawtext[i] <= (byte) 0xFE
						&& (byte) 0xA1 <= rawtext[i + 1]
						&& rawtext[i + 1] <= (byte) 0xFE) {
					jpchars++;
					totalfreq += 500;
					row = rawtext[i] + 256 - 0xA1;
					column = rawtext[i + 1] + 256 - 0xA1;
					if (JPFreq[row][column] != 0) {
						jpfreq += JPFreq[row][column];
					} else if (15 <= row && row < 55) {
						jpfreq += 0;
					}
				}
				i++;
			}
		}
		rangeval = 50 * ((float) jpchars / (float) dbchars);
		freqval = 50 * ((float) jpfreq / (float) totalfreq);
		return (int) (rangeval + freqval);
	}

	int iso_2022_jp_probability(byte[] rawtext) {
		int i;
		for (i = 0; i < rawtext.length; i++) {
			if (i + 2 < rawtext.length && rawtext[i] == 0x1b
					&& (char) rawtext[i + 1] == '$'
					&& (char) rawtext[i + 2] == 'B') {
				return 100;
			}
		}
		return 0;
	}

	/*
	 * Function: sjis_probability Argument: pointer to byte array Returns :
	 * number from 0 to 100 representing probability text in array uses
	 * Shift-JIS encoding
	 */
	int sjis_probability(byte[] rawtext) {
		int i, rawtextlen = 0;
		int dbchars = 1, jpchars = 1;
		long jpfreq = 0, totalfreq = 1;
		float rangeval = 0, freqval = 0;
		int row, column, adjust;
		// Stage 1: Check to see if characters fit into acceptable ranges
		rawtextlen = rawtext.length;
		for (i = 0; i < rawtextlen - 1; i++) {
			// System.err.println(rawtext[i]);
			if (rawtext[i] >= 0) {
				// asciichars++;
			} else {
				dbchars++;
				if (i + 1 < rawtext.length
						&& (((byte) 0x81 <= rawtext[i] && rawtext[i] <= (byte) 0x9F) || ((byte) 0xE0 <= rawtext[i] && rawtext[i] <= (byte) 0xEF))
						&& (((byte) 0x40 <= rawtext[i + 1] && rawtext[i + 1] <= (byte) 0x7E) || ((byte) 0x80 <= rawtext[i + 1] && rawtext[i + 1] <= (byte) 0xFC))) {
					jpchars++;
					totalfreq += 500;
					row = rawtext[i] + 256;
					column = rawtext[i + 1] + 256;
					if (column < 0x9f) {
						adjust = 1;
						if (column > 0x7f) {
							column -= 0x20;
						} else {
							column -= 0x19;
						}
					} else {
						adjust = 0;
						column -= 0x7e;
					}
					if (row < 0xa0) {
						row = ((row - 0x70) << 1) - adjust;
					} else {
						row = ((row - 0xb0) << 1) - adjust;
					}
					row -= 0x20;
					column = 0x20;
					// System.out.println("original row " + row + " column " +
					// column);
					if (row < JPFreq.length && column < JPFreq[row].length
							&& JPFreq[row][column] != 0) {
						jpfreq += JPFreq[row][column];
					}
					i++;
				} else if ((byte) 0xA1 <= rawtext[i]
						&& rawtext[i] <= (byte) 0xDF) {
					// half-width katakana, convert to full-width
				}
			}
		}
		rangeval = 50 * ((float) jpchars / (float) dbchars);
		freqval = 50 * ((float) jpfreq / (float) totalfreq);
		// For regular GB files, this would give the same score, so I handicap
		// it slightly
		return (int) (rangeval + freqval) - 1;
	}

	void initialize_frequencies() {
		int i, j;
		for (i = 0; i < 94; i++) {
			for (j = 0; j < 94; j++) {
				GBFreq[i][j] = 0;
			}
		}
		for (i = 0; i < 126; i++) {
			for (j = 0; j < 191; j++) {
				GBKFreq[i][j] = 0;
			}
		}
		for (i = 0; i < 94; i++) {
			for (j = 0; j < 158; j++) {
				Big5Freq[i][j] = 0;
			}
		}
		for (i = 0; i < 126; i++) {
			for (j = 0; j < 191; j++) {
				Big5PFreq[i][j] = 0;
			}
		}
		for (i = 0; i < 94; i++) {
			for (j = 0; j < 94; j++) {
				EUC_TWFreq[i][j] = 0;
			}
		}
		for (i = 0; i < 94; i++) {
			for (j = 0; j < 94; j++) {
				JPFreq[i][j] = 0;
			}
		}
		GBFreq[20][35] = 599;
		GBFreq[49][26] = 598;
		GBFreq[41][38] = 597;
		GBFreq[17][26] = 596;
		GBFreq[32][42] = 595;
		GBFreq[39][42] = 594;
		GBFreq[45][49] = 593;
		GBFreq[51][57] = 592;
		GBFreq[50][47] = 591;
		GBFreq[42][90] = 590;
		GBFreq[52][65] = 589;
		GBFreq[53][47] = 588;
		GBFreq[19][82] = 587;
		GBFreq[31][19] = 586;
		GBFreq[40][46] = 585;
		GBFreq[24][89] = 584;
		GBFreq[23][85] = 583;
		GBFreq[20][28] = 582;
		GBFreq[42][20] = 581;
		GBFreq[34][38] = 580;
		GBFreq[45][9] = 579;
		GBFreq[54][50] = 578;
		GBFreq[25][44] = 577;
		GBFreq[35][66] = 576;
		GBFreq[20][55] = 575;
		GBFreq[18][85] = 574;
		GBFreq[20][31] = 573;
		GBFreq[49][17] = 572;
		GBFreq[41][16] = 571;
		GBFreq[35][73] = 570;
		GBFreq[20][34] = 569;
		GBFreq[29][44] = 568;
		GBFreq[35][38] = 567;
		GBFreq[49][9] = 566;
		GBFreq[46][33] = 565;
		GBFreq[49][51] = 564;
		GBFreq[40][89] = 563;
		GBFreq[26][64] = 562;
		GBFreq[54][51] = 561;
		GBFreq[54][36] = 560;
		GBFreq[39][4] = 559;
		GBFreq[53][13] = 558;
		GBFreq[24][92] = 557;
		GBFreq[27][49] = 556;
		GBFreq[48][6] = 555;
		GBFreq[21][51] = 554;
		GBFreq[30][40] = 553;
		GBFreq[42][92] = 552;
		GBFreq[31][78] = 551;
		GBFreq[25][82] = 550;
		GBFreq[47][0] = 549;
		GBFreq[34][19] = 548;
		GBFreq[47][35] = 547;
		GBFreq[21][63] = 546;
		GBFreq[43][75] = 545;
		GBFreq[21][87] = 544;
		GBFreq[35][59] = 543;
		GBFreq[25][34] = 542;
		GBFreq[21][27] = 541;
		GBFreq[39][26] = 540;
		GBFreq[34][26] = 539;
		GBFreq[39][52] = 538;
		GBFreq[50][57] = 537;
		GBFreq[37][79] = 536;
		GBFreq[26][24] = 535;
		GBFreq[22][1] = 534;
		GBFreq[18][40] = 533;
		GBFreq[41][33] = 532;
		GBFreq[53][26] = 531;
		GBFreq[54][86] = 530;
		GBFreq[20][16] = 529;
		GBFreq[46][74] = 528;
		GBFreq[30][19] = 527;
		GBFreq[45][35] = 526;
		GBFreq[45][61] = 525;
		GBFreq[30][9] = 524;
		GBFreq[41][53] = 523;
		GBFreq[41][13] = 522;
		GBFreq[50][34] = 521;
		GBFreq[53][86] = 520;
		GBFreq[47][47] = 519;
		GBFreq[22][28] = 518;
		GBFreq[50][53] = 517;
		GBFreq[39][70] = 516;
		GBFreq[38][15] = 515;
		GBFreq[42][88] = 514;
		GBFreq[16][29] = 513;
		GBFreq[27][90] = 512;
		GBFreq[29][12] = 511;
		GBFreq[44][22] = 510;
		GBFreq[34][69] = 509;
		GBFreq[24][10] = 508;
		GBFreq[44][11] = 507;
		GBFreq[39][92] = 506;
		GBFreq[49][48] = 505;
		GBFreq[31][46] = 504;
		GBFreq[19][50] = 503;
		GBFreq[21][14] = 502;
		GBFreq[32][28] = 501;
		GBFreq[18][3] = 500;
		GBFreq[53][9] = 499;
		GBFreq[34][80] = 498;
		GBFreq[48][88] = 497;
		GBFreq[46][53] = 496;
		GBFreq[22][53] = 495;
		GBFreq[28][10] = 494;
		GBFreq[44][65] = 493;
		GBFreq[20][10] = 492;
		GBFreq[40][76] = 491;
		GBFreq[47][8] = 490;
		GBFreq[50][74] = 489;
		GBFreq[23][62] = 488;
		GBFreq[49][65] = 487;
		GBFreq[28][87] = 486;
		GBFreq[15][48] = 485;
		GBFreq[22][7] = 484;
		GBFreq[19][42] = 483;
		GBFreq[41][20] = 482;
		GBFreq[26][55] = 481;
		GBFreq[21][93] = 480;
		GBFreq[31][76] = 479;
		GBFreq[34][31] = 478;
		GBFreq[20][66] = 477;
		GBFreq[51][33] = 476;
		GBFreq[34][86] = 475;
		GBFreq[37][67] = 474;
		GBFreq[53][53] = 473;
		GBFreq[40][88] = 472;
		GBFreq[39][10] = 471;
		GBFreq[24][3] = 470;
		GBFreq[27][25] = 469;
		GBFreq[26][15] = 468;
		GBFreq[21][88] = 467;
		GBFreq[52][62] = 466;
		GBFreq[46][81] = 465;
		GBFreq[38][72] = 464;
		GBFreq[17][30] = 463;
		GBFreq[52][92] = 462;
		GBFreq[34][90] = 461;
		GBFreq[21][7] = 460;
		GBFreq[36][13] = 459;
		GBFreq[45][41] = 458;
		GBFreq[32][5] = 457;
		GBFreq[26][89] = 456;
		GBFreq[23][87] = 455;
		GBFreq[20][39] = 454;
		GBFreq[27][23] = 453;
		GBFreq[25][59] = 452;
		GBFreq[49][20] = 451;
		GBFreq[54][77] = 450;
		GBFreq[27][67] = 449;
		GBFreq[47][33] = 448;
		GBFreq[41][17] = 447;
		GBFreq[19][81] = 446;
		GBFreq[16][66] = 445;
		GBFreq[45][26] = 444;
		GBFreq[49][81] = 443;
		GBFreq[53][55] = 442;
		GBFreq[16][26] = 441;
		GBFreq[54][62] = 440;
		GBFreq[20][70] = 439;
		GBFreq[42][35] = 438;
		GBFreq[20][57] = 437;
		GBFreq[34][36] = 436;
		GBFreq[46][63] = 435;
		GBFreq[19][45] = 434;
		GBFreq[21][10] = 433;
		GBFreq[52][93] = 432;
		GBFreq[25][2] = 431;
		GBFreq[30][57] = 430;
		GBFreq[41][24] = 429;
		GBFreq[28][43] = 428;
		GBFreq[45][86] = 427;
		GBFreq[51][56] = 426;
		GBFreq[37][28] = 425;
		GBFreq[52][69] = 424;
		GBFreq[43][92] = 423;
		GBFreq[41][31] = 422;
		GBFreq[37][87] = 421;
		GBFreq[47][36] = 420;
		GBFreq[16][16] = 419;
		GBFreq[40][56] = 418;
		GBFreq[24][55] = 417;
		GBFreq[17][1] = 416;
		GBFreq[35][57] = 415;
		GBFreq[27][50] = 414;
		GBFreq[26][14] = 413;
		GBFreq[50][40] = 412;
		GBFreq[39][19] = 411;
		GBFreq[19][89] = 410;
		GBFreq[29][91] = 409;
		GBFreq[17][89] = 408;
		GBFreq[39][74] = 407;
		GBFreq[46][39] = 406;
		GBFreq[40][28] = 405;
		GBFreq[45][68] = 404;
		GBFreq[43][10] = 403;
		GBFreq[42][13] = 402;
		GBFreq[44][81] = 401;
		GBFreq[41][47] = 400;
		GBFreq[48][58] = 399;
		GBFreq[43][68] = 398;
		GBFreq[16][79] = 397;
		GBFreq[19][5] = 396;
		GBFreq[54][59] = 395;
		GBFreq[17][36] = 394;
		GBFreq[18][0] = 393;
		GBFreq[41][5] = 392;
		GBFreq[41][72] = 391;
		GBFreq[16][39] = 390;
		GBFreq[54][0] = 389;
		GBFreq[51][16] = 388;
		GBFreq[29][36] = 387;
		GBFreq[47][5] = 386;
		GBFreq[47][51] = 385;
		GBFreq[44][7] = 384;
		GBFreq[35][30] = 383;
		GBFreq[26][9] = 382;
		GBFreq[16][7] = 381;
		GBFreq[32][1] = 380;
		GBFreq[33][76] = 379;
		GBFreq[34][91] = 378;
		GBFreq[52][36] = 377;
		GBFreq[26][77] = 376;
		GBFreq[35][48] = 375;
		GBFreq[40][80] = 374;
		GBFreq[41][92] = 373;
		GBFreq[27][93] = 372;
		GBFreq[15][17] = 371;
		GBFreq[16][76] = 370;
		GBFreq[51][12] = 369;
		GBFreq[18][20] = 368;
		GBFreq[15][54] = 367;
		GBFreq[50][5] = 366;
		GBFreq[33][22] = 365;
		GBFreq[37][57] = 364;
		GBFreq[28][47] = 363;
		GBFreq[42][31] = 362;
		GBFreq[18][2] = 361;
		GBFreq[43][64] = 360;
		GBFreq[23][47] = 359;
		GBFreq[28][79] = 358;
		GBFreq[25][45] = 357;
		GBFreq[23][91] = 356;
		GBFreq[22][19] = 355;
		GBFreq[25][46] = 354;
		GBFreq[22][36] = 353;
		GBFreq[54][85] = 352;
		GBFreq[46][20] = 351;
		GBFreq[27][37] = 350;
		GBFreq[26][81] = 349;
		GBFreq[42][29] = 348;
		GBFreq[31][90] = 347;
		GBFreq[41][59] = 346;
		GBFreq[24][65] = 345;
		GBFreq[44][84] = 344;
		GBFreq[24][90] = 343;
		GBFreq[38][54] = 342;
		GBFreq[28][70] = 341;
		GBFreq[27][15] = 340;
		GBFreq[28][80] = 339;
		GBFreq[29][8] = 338;
		GBFreq[45][80] = 337;
		GBFreq[53][37] = 336;
		GBFreq[28][65] = 335;
		GBFreq[23][86] = 334;
		GBFreq[39][45] = 333;
		GBFreq[53][32] = 332;
		GBFreq[38][68] = 331;
		GBFreq[45][78] = 330;
		GBFreq[43][7] = 329;
		GBFreq[46][82] = 328;
		GBFreq[27][38] = 327;
		GBFreq[16][62] = 326;
		GBFreq[24][17] = 325;
		GBFreq[22][70] = 324;
		GBFreq[52][28] = 323;
		GBFreq[23][40] = 322;
		GBFreq[28][50] = 321;
		GBFreq[42][91] = 320;
		GBFreq[47][76] = 319;
		GBFreq[15][42] = 318;
		GBFreq[43][55] = 317;
		GBFreq[29][84] = 316;
		GBFreq[44][90] = 315;
		GBFreq[53][16] = 314;
		GBFreq[22][93] = 313;
		GBFreq[34][10] = 312;
		GBFreq[32][53] = 311;
		GBFreq[43][65] = 310;
		GBFreq[28][7] = 309;
		GBFreq[35][46] = 308;
		GBFreq[21][39] = 307;
		GBFreq[44][18] = 306;
		GBFreq[40][10] = 305;
		GBFreq[54][53] = 304;
		GBFreq[38][74] = 303;
		GBFreq[28][26] = 302;
		GBFreq[15][13] = 301;
		GBFreq[39][34] = 300;
		GBFreq[39][46] = 299;
		GBFreq[42][66] = 298;
		GBFreq[33][58] = 297;
		GBFreq[15][56] = 296;
		GBFreq[18][51] = 295;
		GBFreq[49][68] = 294;
		GBFreq[30][37] = 293;
		GBFreq[51][84] = 292;
		GBFreq[51][9] = 291;
		GBFreq[40][70] = 290;
		GBFreq[41][84] = 289;
		GBFreq[28][64] = 288;
		GBFreq[32][88] = 287;
		GBFreq[24][5] = 286;
		GBFreq[53][23] = 285;
		GBFreq[42][27] = 284;
		GBFreq[22][38] = 283;
		GBFreq[32][86] = 282;
		GBFreq[34][30] = 281;
		GBFreq[38][63] = 280;
		GBFreq[24][59] = 279;
		GBFreq[22][81] = 278;
		GBFreq[32][11] = 277;
		GBFreq[51][21] = 276;
		GBFreq[54][41] = 275;
		GBFreq[21][50] = 274;
		GBFreq[23][89] = 273;
		GBFreq[19][87] = 272;
		GBFreq[26][7] = 271;
		GBFreq[30][75] = 270;
		GBFreq[43][84] = 269;
		GBFreq[51][25] = 268;
		GBFreq[16][67] = 267;
		GBFreq[32][9] = 266;
		GBFreq[48][51] = 265;
		GBFreq[39][7] = 264;
		GBFreq[44][88] = 263;
		GBFreq[52][24] = 262;
		GBFreq[23][34] = 261;
		GBFreq[32][75] = 260;
		GBFreq[19][10] = 259;
		GBFreq[28][91] = 258;
		GBFreq[32][83] = 257;
		GBFreq[25][75] = 256;
		GBFreq[53][45] = 255;
		GBFreq[29][85] = 254;
		GBFreq[53][59] = 253;
		GBFreq[16][2] = 252;
		GBFreq[19][78] = 251;
		GBFreq[15][75] = 250;
		GBFreq[51][42] = 249;
		GBFreq[45][67] = 248;
		GBFreq[15][74] = 247;
		GBFreq[25][81] = 246;
		GBFreq[37][62] = 245;
		GBFreq[16][55] = 244;
		GBFreq[18][38] = 243;
		GBFreq[23][23] = 242;
		GBFreq[38][30] = 241;
		GBFreq[17][28] = 240;
		GBFreq[44][73] = 239;
		GBFreq[23][78] = 238;
		GBFreq[40][77] = 237;
		GBFreq[38][87] = 236;
		GBFreq[27][19] = 235;
		GBFreq[38][82] = 234;
		GBFreq[37][22] = 233;
		GBFreq[41][30] = 232;
		GBFreq[54][9] = 231;
		GBFreq[32][30] = 230;
		GBFreq[30][52] = 229;
		GBFreq[40][84] = 228;
		GBFreq[53][57] = 227;
		GBFreq[27][27] = 226;
		GBFreq[38][64] = 225;
		GBFreq[18][43] = 224;
		GBFreq[23][69] = 223;
		GBFreq[28][12] = 222;
		GBFreq[50][78] = 221;
		GBFreq[50][1] = 220;
		GBFreq[26][88] = 219;
		GBFreq[36][40] = 218;
		GBFreq[33][89] = 217;
		GBFreq[41][28] = 216;
		GBFreq[31][77] = 215;
		GBFreq[46][1] = 214;
		GBFreq[47][19] = 213;
		GBFreq[35][55] = 212;
		GBFreq[41][21] = 211;
		GBFreq[27][10] = 210;
		GBFreq[32][77] = 209;
		GBFreq[26][37] = 208;
		GBFreq[20][33] = 207;
		GBFreq[41][52] = 206;
		GBFreq[32][18] = 205;
		GBFreq[38][13] = 204;
		GBFreq[20][18] = 203;
		GBFreq[20][24] = 202;
		GBFreq[45][19] = 201;
		GBFreq[18][53] = 200;
		/*
		 * GBFreq[39][0] = 199; GBFreq[40][71] = 198; GBFreq[41][27] = 197;
		 * GBFreq[15][69] = 196; GBFreq[42][10] = 195; GBFreq[31][89] = 194;
		 * GBFreq[51][28] = 193; GBFreq[41][22] = 192; GBFreq[40][43] = 191;
		 * GBFreq[38][6] = 190; GBFreq[37][11] = 189; GBFreq[39][60] = 188;
		 * GBFreq[48][47] = 187; GBFreq[46][80] = 186; GBFreq[52][49] = 185;
		 * GBFreq[50][48] = 184; GBFreq[25][1] = 183; GBFreq[52][29] = 182;
		 * GBFreq[24][66] = 181; GBFreq[23][35] = 180; GBFreq[49][72] = 179;
		 * GBFreq[47][45] = 178; GBFreq[45][14] = 177; GBFreq[51][70] = 176;
		 * GBFreq[22][30] = 175; GBFreq[49][83] = 174; GBFreq[26][79] = 173;
		 * GBFreq[27][41] = 172; GBFreq[51][81] = 171; GBFreq[41][54] = 170;
		 * GBFreq[20][4] = 169; GBFreq[29][60] = 168; GBFreq[20][27] = 167;
		 * GBFreq[50][15] = 166; GBFreq[41][6] = 165; GBFreq[35][34] = 164;
		 * GBFreq[44][87] = 163; GBFreq[46][66] = 162; GBFreq[42][37] = 161;
		 * GBFreq[42][24] = 160; GBFreq[54][7] = 159; GBFreq[41][14] = 158;
		 * GBFreq[39][83] = 157; GBFreq[16][87] = 156; GBFreq[20][59] = 155;
		 * GBFreq[42][12] = 154; GBFreq[47][2] = 153; GBFreq[21][32] = 152;
		 * GBFreq[53][29] = 151; GBFreq[22][40] = 150; GBFreq[24][58] = 149;
		 * GBFreq[52][88] = 148; GBFreq[29][30] = 147; GBFreq[15][91] = 146;
		 * GBFreq[54][72] = 145; GBFreq[51][75] = 144; GBFreq[33][67] = 143;
		 * GBFreq[41][50] = 142; GBFreq[27][34] = 141; GBFreq[46][17] = 140;
		 * GBFreq[31][74] = 139; GBFreq[42][67] = 138; GBFreq[54][87] = 137;
		 * GBFreq[27][14] = 136; GBFreq[16][63] = 135; GBFreq[16][5] = 134;
		 * GBFreq[43][23] = 133; GBFreq[23][13] = 132; GBFreq[31][12] = 131;
		 * GBFreq[25][57] = 130; GBFreq[38][49] = 129; GBFreq[42][69] = 128;
		 * GBFreq[23][80] = 127; GBFreq[29][0] = 126; GBFreq[28][2] = 125;
		 * GBFreq[28][17] = 124; GBFreq[17][27] = 123; GBFreq[40][16] = 122;
		 * GBFreq[45][1] = 121; GBFreq[36][33] = 120; GBFreq[35][23] = 119;
		 * GBFreq[20][86] = 118; GBFreq[29][53] = 117; GBFreq[23][88] = 116;
		 * GBFreq[51][87] = 115; GBFreq[54][27] = 114; GBFreq[44][36] = 113;
		 * GBFreq[21][45] = 112; GBFreq[53][52] = 111; GBFreq[31][53] = 110;
		 * GBFreq[38][47] = 109; GBFreq[27][21] = 108; GBFreq[30][42] = 107;
		 * GBFreq[29][10] = 106; GBFreq[35][35] = 105; GBFreq[24][56] = 104;
		 * GBFreq[41][29] = 103; GBFreq[18][68] = 102; GBFreq[29][24] = 101;
		 * GBFreq[25][84] = 100; GBFreq[35][47] = 99; GBFreq[29][56] = 98;
		 * GBFreq[30][44] = 97; GBFreq[53][3] = 96; GBFreq[30][63] = 95;
		 * GBFreq[52][52] = 94; GBFreq[54][1] = 93; GBFreq[22][48] = 92;
		 * GBFreq[54][66] = 91; GBFreq[21][90] = 90; GBFreq[52][47] = 89;
		 * GBFreq[39][25] = 88; GBFreq[39][39] = 87; GBFreq[44][37] = 86;
		 * GBFreq[44][76] = 85; GBFreq[46][75] = 84; GBFreq[18][37] = 83;
		 * GBFreq[47][42] = 82; GBFreq[19][92] = 81; GBFreq[51][27] = 80;
		 * GBFreq[48][83] = 79; GBFreq[23][70] = 78; GBFreq[29][9] = 77;
		 * GBFreq[33][79] = 76; GBFreq[52][90] = 75; GBFreq[53][6] = 74;
		 * GBFreq[24][36] = 73; GBFreq[25][25] = 72; GBFreq[44][26] = 71;
		 * GBFreq[25][36] = 70; GBFreq[29][87] = 69; GBFreq[48][0] = 68;
		 * GBFreq[15][40] = 67; GBFreq[17][45] = 66; GBFreq[30][14] = 65;
		 * GBFreq[48][38] = 64; GBFreq[23][19] = 63; GBFreq[40][42] = 62;
		 * GBFreq[31][63] = 61; GBFreq[16][23] = 60; GBFreq[26][21] = 59;
		 * GBFreq[32][76] = 58; GBFreq[23][58] = 57; GBFreq[41][37] = 56;
		 * GBFreq[30][43] = 55; GBFreq[47][38] = 54; GBFreq[21][46] = 53;
		 * GBFreq[18][33] = 52; GBFreq[52][37] = 51; GBFreq[36][8] = 50;
		 * GBFreq[49][24] = 49; GBFreq[15][66] = 48; GBFreq[35][77] = 47;
		 * GBFreq[27][58] = 46; GBFreq[35][51] = 45; GBFreq[24][69] = 44;
		 * GBFreq[20][54] = 43; GBFreq[24][41] = 42; GBFreq[41][0] = 41;
		 * GBFreq[33][71] = 40; GBFreq[23][52] = 39; GBFreq[29][67] = 38;
		 * GBFreq[46][51] = 37; GBFreq[46][90] = 36; GBFreq[49][33] = 35;
		 * GBFreq[33][28] = 34; GBFreq[37][86] = 33; GBFreq[39][22] = 32;
		 * GBFreq[37][37] = 31; GBFreq[29][62] = 30; GBFreq[29][50] = 29;
		 * GBFreq[36][89] = 28; GBFreq[42][44] = 27; GBFreq[51][82] = 26;
		 * GBFreq[28][83] = 25; GBFreq[15][78] = 24; GBFreq[46][62] = 23;
		 * GBFreq[19][69] = 22; GBFreq[51][23] = 21; GBFreq[37][69] = 20;
		 * GBFreq[25][5] = 19; GBFreq[51][85] = 18; GBFreq[48][77] = 17;
		 * GBFreq[32][46] = 16; GBFreq[53][60] = 15; GBFreq[28][57] = 14;
		 * GBFreq[54][82] = 13; GBFreq[54][15] = 12; GBFreq[49][54] = 11;
		 * GBFreq[53][87] = 10; GBFreq[27][16] = 9; GBFreq[29][34] = 8;
		 * GBFreq[20][44] = 7; GBFreq[42][73] = 6; GBFreq[47][71] = 5;
		 * GBFreq[29][37] = 4; GBFreq[25][50] = 3; GBFreq[18][84] = 2;
		 * GBFreq[50][45] = 1; GBFreq[48][46] = 0;
		 */
		// GBFreq[43][89] = -1; GBFreq[54][68] = -2;
		Big5Freq[9][89] = 600;
		Big5Freq[11][15] = 599;
		Big5Freq[3][66] = 598;
		Big5Freq[6][121] = 597;
		Big5Freq[3][0] = 596;
		Big5Freq[5][82] = 595;
		Big5Freq[3][42] = 594;
		Big5Freq[5][34] = 593;
		Big5Freq[3][8] = 592;
		Big5Freq[3][6] = 591;
		Big5Freq[3][67] = 590;
		Big5Freq[7][139] = 589;
		Big5Freq[23][137] = 588;
		Big5Freq[12][46] = 587;
		Big5Freq[4][8] = 586;
		Big5Freq[4][41] = 585;
		Big5Freq[18][47] = 584;
		Big5Freq[12][114] = 583;
		Big5Freq[6][1] = 582;
		Big5Freq[22][60] = 581;
		Big5Freq[5][46] = 580;
		Big5Freq[11][79] = 579;
		Big5Freq[3][23] = 578;
		Big5Freq[7][114] = 577;
		Big5Freq[29][102] = 576;
		Big5Freq[19][14] = 575;
		Big5Freq[4][133] = 574;
		Big5Freq[3][29] = 573;
		Big5Freq[4][109] = 572;
		Big5Freq[14][127] = 571;
		Big5Freq[5][48] = 570;
		Big5Freq[13][104] = 569;
		Big5Freq[3][132] = 568;
		Big5Freq[26][64] = 567;
		Big5Freq[7][19] = 566;
		Big5Freq[4][12] = 565;
		Big5Freq[11][124] = 564;
		Big5Freq[7][89] = 563;
		Big5Freq[15][124] = 562;
		Big5Freq[4][108] = 561;
		Big5Freq[19][66] = 560;
		Big5Freq[3][21] = 559;
		Big5Freq[24][12] = 558;
		Big5Freq[28][111] = 557;
		Big5Freq[12][107] = 556;
		Big5Freq[3][112] = 555;
		Big5Freq[8][113] = 554;
		Big5Freq[5][40] = 553;
		Big5Freq[26][145] = 552;
		Big5Freq[3][48] = 551;
		Big5Freq[3][70] = 550;
		Big5Freq[22][17] = 549;
		Big5Freq[16][47] = 548;
		Big5Freq[3][53] = 547;
		Big5Freq[4][24] = 546;
		Big5Freq[32][120] = 545;
		Big5Freq[24][49] = 544;
		Big5Freq[24][142] = 543;
		Big5Freq[18][66] = 542;
		Big5Freq[29][150] = 541;
		Big5Freq[5][122] = 540;
		Big5Freq[5][114] = 539;
		Big5Freq[3][44] = 538;
		Big5Freq[10][128] = 537;
		Big5Freq[15][20] = 536;
		Big5Freq[13][33] = 535;
		Big5Freq[14][87] = 534;
		Big5Freq[3][126] = 533;
		Big5Freq[4][53] = 532;
		Big5Freq[4][40] = 531;
		Big5Freq[9][93] = 530;
		Big5Freq[15][137] = 529;
		Big5Freq[10][123] = 528;
		Big5Freq[4][56] = 527;
		Big5Freq[5][71] = 526;
		Big5Freq[10][8] = 525;
		Big5Freq[5][16] = 524;
		Big5Freq[5][146] = 523;
		Big5Freq[18][88] = 522;
		Big5Freq[24][4] = 521;
		Big5Freq[20][47] = 520;
		Big5Freq[5][33] = 519;
		Big5Freq[9][43] = 518;
		Big5Freq[20][12] = 517;
		Big5Freq[20][13] = 516;
		Big5Freq[5][156] = 515;
		Big5Freq[22][140] = 514;
		Big5Freq[8][146] = 513;
		Big5Freq[21][123] = 512;
		Big5Freq[4][90] = 511;
		Big5Freq[5][62] = 510;
		Big5Freq[17][59] = 509;
		Big5Freq[10][37] = 508;
		Big5Freq[18][107] = 507;
		Big5Freq[14][53] = 506;
		Big5Freq[22][51] = 505;
		Big5Freq[8][13] = 504;
		Big5Freq[5][29] = 503;
		Big5Freq[9][7] = 502;
		Big5Freq[22][14] = 501;
		Big5Freq[8][55] = 500;
		Big5Freq[33][9] = 499;
		Big5Freq[16][64] = 498;
		Big5Freq[7][131] = 497;
		Big5Freq[34][4] = 496;
		Big5Freq[7][101] = 495;
		Big5Freq[11][139] = 494;
		Big5Freq[3][135] = 493;
		Big5Freq[7][102] = 492;
		Big5Freq[17][13] = 491;
		Big5Freq[3][20] = 490;
		Big5Freq[27][106] = 489;
		Big5Freq[5][88] = 488;
		Big5Freq[6][33] = 487;
		Big5Freq[5][139] = 486;
		Big5Freq[6][0] = 485;
		Big5Freq[17][58] = 484;
		Big5Freq[5][133] = 483;
		Big5Freq[9][107] = 482;
		Big5Freq[23][39] = 481;
		Big5Freq[5][23] = 480;
		Big5Freq[3][79] = 479;
		Big5Freq[32][97] = 478;
		Big5Freq[3][136] = 477;
		Big5Freq[4][94] = 476;
		Big5Freq[21][61] = 475;
		Big5Freq[23][123] = 474;
		Big5Freq[26][16] = 473;
		Big5Freq[24][137] = 472;
		Big5Freq[22][18] = 471;
		Big5Freq[5][1] = 470;
		Big5Freq[20][119] = 469;
		Big5Freq[3][7] = 468;
		Big5Freq[10][79] = 467;
		Big5Freq[15][105] = 466;
		Big5Freq[3][144] = 465;
		Big5Freq[12][80] = 464;
		Big5Freq[15][73] = 463;
		Big5Freq[3][19] = 462;
		Big5Freq[8][109] = 461;
		Big5Freq[3][15] = 460;
		Big5Freq[31][82] = 459;
		Big5Freq[3][43] = 458;
		Big5Freq[25][119] = 457;
		Big5Freq[16][111] = 456;
		Big5Freq[7][77] = 455;
		Big5Freq[3][95] = 454;
		Big5Freq[24][82] = 453;
		Big5Freq[7][52] = 452;
		Big5Freq[9][151] = 451;
		Big5Freq[3][129] = 450;
		Big5Freq[5][87] = 449;
		Big5Freq[3][55] = 448;
		Big5Freq[8][153] = 447;
		Big5Freq[4][83] = 446;
		Big5Freq[3][114] = 445;
		Big5Freq[23][147] = 444;
		Big5Freq[15][31] = 443;
		Big5Freq[3][54] = 442;
		Big5Freq[11][122] = 441;
		Big5Freq[4][4] = 440;
		Big5Freq[34][149] = 439;
		Big5Freq[3][17] = 438;
		Big5Freq[21][64] = 437;
		Big5Freq[26][144] = 436;
		Big5Freq[4][62] = 435;
		Big5Freq[8][15] = 434;
		Big5Freq[35][80] = 433;
		Big5Freq[7][110] = 432;
		Big5Freq[23][114] = 431;
		Big5Freq[3][108] = 430;
		Big5Freq[3][62] = 429;
		Big5Freq[21][41] = 428;
		Big5Freq[15][99] = 427;
		Big5Freq[5][47] = 426;
		Big5Freq[4][96] = 425;
		Big5Freq[20][122] = 424;
		Big5Freq[5][21] = 423;
		Big5Freq[4][157] = 422;
		Big5Freq[16][14] = 421;
		Big5Freq[3][117] = 420;
		Big5Freq[7][129] = 419;
		Big5Freq[4][27] = 418;
		Big5Freq[5][30] = 417;
		Big5Freq[22][16] = 416;
		Big5Freq[5][64] = 415;
		Big5Freq[17][99] = 414;
		Big5Freq[17][57] = 413;
		Big5Freq[8][105] = 412;
		Big5Freq[5][112] = 411;
		Big5Freq[20][59] = 410;
		Big5Freq[6][129] = 409;
		Big5Freq[18][17] = 408;
		Big5Freq[3][92] = 407;
		Big5Freq[28][118] = 406;
		Big5Freq[3][109] = 405;
		Big5Freq[31][51] = 404;
		Big5Freq[13][116] = 403;
		Big5Freq[6][15] = 402;
		Big5Freq[36][136] = 401;
		Big5Freq[12][74] = 400;
		Big5Freq[20][88] = 399;
		Big5Freq[36][68] = 398;
		Big5Freq[3][147] = 397;
		Big5Freq[15][84] = 396;
		Big5Freq[16][32] = 395;
		Big5Freq[16][58] = 394;
		Big5Freq[7][66] = 393;
		Big5Freq[23][107] = 392;
		Big5Freq[9][6] = 391;
		Big5Freq[12][86] = 390;
		Big5Freq[23][112] = 389;
		Big5Freq[37][23] = 388;
		Big5Freq[3][138] = 387;
		Big5Freq[20][68] = 386;
		Big5Freq[15][116] = 385;
		Big5Freq[18][64] = 384;
		Big5Freq[12][139] = 383;
		Big5Freq[11][155] = 382;
		Big5Freq[4][156] = 381;
		Big5Freq[12][84] = 380;
		Big5Freq[18][49] = 379;
		Big5Freq[25][125] = 378;
		Big5Freq[25][147] = 377;
		Big5Freq[15][110] = 376;
		Big5Freq[19][96] = 375;
		Big5Freq[30][152] = 374;
		Big5Freq[6][31] = 373;
		Big5Freq[27][117] = 372;
		Big5Freq[3][10] = 371;
		Big5Freq[6][131] = 370;
		Big5Freq[13][112] = 369;
		Big5Freq[36][156] = 368;
		Big5Freq[4][60] = 367;
		Big5Freq[15][121] = 366;
		Big5Freq[4][112] = 365;
		Big5Freq[30][142] = 364;
		Big5Freq[23][154] = 363;
		Big5Freq[27][101] = 362;
		Big5Freq[9][140] = 361;
		Big5Freq[3][89] = 360;
		Big5Freq[18][148] = 359;
		Big5Freq[4][69] = 358;
		Big5Freq[16][49] = 357;
		Big5Freq[6][117] = 356;
		Big5Freq[36][55] = 355;
		Big5Freq[5][123] = 354;
		Big5Freq[4][126] = 353;
		Big5Freq[4][119] = 352;
		Big5Freq[9][95] = 351;
		Big5Freq[5][24] = 350;
		Big5Freq[16][133] = 349;
		Big5Freq[10][134] = 348;
		Big5Freq[26][59] = 347;
		Big5Freq[6][41] = 346;
		Big5Freq[6][146] = 345;
		Big5Freq[19][24] = 344;
		Big5Freq[5][113] = 343;
		Big5Freq[10][118] = 342;
		Big5Freq[34][151] = 341;
		Big5Freq[9][72] = 340;
		Big5Freq[31][25] = 339;
		Big5Freq[18][126] = 338;
		Big5Freq[18][28] = 337;
		Big5Freq[4][153] = 336;
		Big5Freq[3][84] = 335;
		Big5Freq[21][18] = 334;
		Big5Freq[25][129] = 333;
		Big5Freq[6][107] = 332;
		Big5Freq[12][25] = 331;
		Big5Freq[17][109] = 330;
		Big5Freq[7][76] = 329;
		Big5Freq[15][15] = 328;
		Big5Freq[4][14] = 327;
		Big5Freq[23][88] = 326;
		Big5Freq[18][2] = 325;
		Big5Freq[6][88] = 324;
		Big5Freq[16][84] = 323;
		Big5Freq[12][48] = 322;
		Big5Freq[7][68] = 321;
		Big5Freq[5][50] = 320;
		Big5Freq[13][54] = 319;
		Big5Freq[7][98] = 318;
		Big5Freq[11][6] = 317;
		Big5Freq[9][80] = 316;
		Big5Freq[16][41] = 315;
		Big5Freq[7][43] = 314;
		Big5Freq[28][117] = 313;
		Big5Freq[3][51] = 312;
		Big5Freq[7][3] = 311;
		Big5Freq[20][81] = 310;
		Big5Freq[4][2] = 309;
		Big5Freq[11][16] = 308;
		Big5Freq[10][4] = 307;
		Big5Freq[10][119] = 306;
		Big5Freq[6][142] = 305;
		Big5Freq[18][51] = 304;
		Big5Freq[8][144] = 303;
		Big5Freq[10][65] = 302;
		Big5Freq[11][64] = 301;
		Big5Freq[11][130] = 300;
		Big5Freq[9][92] = 299;
		Big5Freq[18][29] = 298;
		Big5Freq[18][78] = 297;
		Big5Freq[18][151] = 296;
		Big5Freq[33][127] = 295;
		Big5Freq[35][113] = 294;
		Big5Freq[10][155] = 293;
		Big5Freq[3][76] = 292;
		Big5Freq[36][123] = 291;
		Big5Freq[13][143] = 290;
		Big5Freq[5][135] = 289;
		Big5Freq[23][116] = 288;
		Big5Freq[6][101] = 287;
		Big5Freq[14][74] = 286;
		Big5Freq[7][153] = 285;
		Big5Freq[3][101] = 284;
		Big5Freq[9][74] = 283;
		Big5Freq[3][156] = 282;
		Big5Freq[4][147] = 281;
		Big5Freq[9][12] = 280;
		Big5Freq[18][133] = 279;
		Big5Freq[4][0] = 278;
		Big5Freq[7][155] = 277;
		Big5Freq[9][144] = 276;
		Big5Freq[23][49] = 275;
		Big5Freq[5][89] = 274;
		Big5Freq[10][11] = 273;
		Big5Freq[3][110] = 272;
		Big5Freq[3][40] = 271;
		Big5Freq[29][115] = 270;
		Big5Freq[9][100] = 269;
		Big5Freq[21][67] = 268;
		Big5Freq[23][145] = 267;
		Big5Freq[10][47] = 266;
		Big5Freq[4][31] = 265;
		Big5Freq[4][81] = 264;
		Big5Freq[22][62] = 263;
		Big5Freq[4][28] = 262;
		Big5Freq[27][39] = 261;
		Big5Freq[27][54] = 260;
		Big5Freq[32][46] = 259;
		Big5Freq[4][76] = 258;
		Big5Freq[26][15] = 257;
		Big5Freq[12][154] = 256;
		Big5Freq[9][150] = 255;
		Big5Freq[15][17] = 254;
		Big5Freq[5][129] = 253;
		Big5Freq[10][40] = 252;
		Big5Freq[13][37] = 251;
		Big5Freq[31][104] = 250;
		Big5Freq[3][152] = 249;
		Big5Freq[5][22] = 248;
		Big5Freq[8][48] = 247;
		Big5Freq[4][74] = 246;
		Big5Freq[6][17] = 245;
		Big5Freq[30][82] = 244;
		Big5Freq[4][116] = 243;
		Big5Freq[16][42] = 242;
		Big5Freq[5][55] = 241;
		Big5Freq[4][64] = 240;
		Big5Freq[14][19] = 239;
		Big5Freq[35][82] = 238;
		Big5Freq[30][139] = 237;
		Big5Freq[26][152] = 236;
		Big5Freq[32][32] = 235;
		Big5Freq[21][102] = 234;
		Big5Freq[10][131] = 233;
		Big5Freq[9][128] = 232;
		Big5Freq[3][87] = 231;
		Big5Freq[4][51] = 230;
		Big5Freq[10][15] = 229;
		Big5Freq[4][150] = 228;
		Big5Freq[7][4] = 227;
		Big5Freq[7][51] = 226;
		Big5Freq[7][157] = 225;
		Big5Freq[4][146] = 224;
		Big5Freq[4][91] = 223;
		Big5Freq[7][13] = 222;
		Big5Freq[17][116] = 221;
		Big5Freq[23][21] = 220;
		Big5Freq[5][106] = 219;
		Big5Freq[14][100] = 218;
		Big5Freq[10][152] = 217;
		Big5Freq[14][89] = 216;
		Big5Freq[6][138] = 215;
		Big5Freq[12][157] = 214;
		Big5Freq[10][102] = 213;
		Big5Freq[19][94] = 212;
		Big5Freq[7][74] = 211;
		Big5Freq[18][128] = 210;
		Big5Freq[27][111] = 209;
		Big5Freq[11][57] = 208;
		Big5Freq[3][131] = 207;
		Big5Freq[30][23] = 206;
		Big5Freq[30][126] = 205;
		Big5Freq[4][36] = 204;
		Big5Freq[26][124] = 203;
		Big5Freq[4][19] = 202;
		Big5Freq[9][152] = 201;
		/*
		 * Big5Freq[5][0] = 200; Big5Freq[26][57] = 199; Big5Freq[13][155] =
		 * 198; Big5Freq[3][38] = 197; Big5Freq[9][155] = 196; Big5Freq[28][53]
		 * = 195; Big5Freq[15][71] = 194; Big5Freq[21][95] = 193;
		 * Big5Freq[15][112] = 192; Big5Freq[14][138] = 191; Big5Freq[8][18] =
		 * 190; Big5Freq[20][151] = 189; Big5Freq[37][27] = 188;
		 * Big5Freq[32][48] = 187; Big5Freq[23][66] = 186; Big5Freq[9][2] = 185;
		 * Big5Freq[13][133] = 184; Big5Freq[7][127] = 183; Big5Freq[3][11] =
		 * 182; Big5Freq[12][118] = 181; Big5Freq[13][101] = 180;
		 * Big5Freq[30][153] = 179; Big5Freq[4][65] = 178; Big5Freq[5][25] =
		 * 177; Big5Freq[5][140] = 176; Big5Freq[6][25] = 175; Big5Freq[4][52] =
		 * 174; Big5Freq[30][156] = 173; Big5Freq[16][13] = 172; Big5Freq[21][8]
		 * = 171; Big5Freq[19][74] = 170; Big5Freq[15][145] = 169;
		 * Big5Freq[9][15] = 168; Big5Freq[13][82] = 167; Big5Freq[26][86] =
		 * 166; Big5Freq[18][52] = 165; Big5Freq[6][109] = 164; Big5Freq[10][99]
		 * = 163; Big5Freq[18][101] = 162; Big5Freq[25][49] = 161;
		 * Big5Freq[31][79] = 160; Big5Freq[28][20] = 159; Big5Freq[12][115] =
		 * 158; Big5Freq[15][66] = 157; Big5Freq[11][104] = 156;
		 * Big5Freq[23][106] = 155; Big5Freq[34][157] = 154; Big5Freq[32][94] =
		 * 153; Big5Freq[29][88] = 152; Big5Freq[10][46] = 151;
		 * Big5Freq[13][118] = 150; Big5Freq[20][37] = 149; Big5Freq[12][30] =
		 * 148; Big5Freq[21][4] = 147; Big5Freq[16][33] = 146; Big5Freq[13][52]
		 * = 145; Big5Freq[4][7] = 144; Big5Freq[21][49] = 143; Big5Freq[3][27]
		 * = 142; Big5Freq[16][91] = 141; Big5Freq[5][155] = 140;
		 * Big5Freq[29][130] = 139; Big5Freq[3][125] = 138; Big5Freq[14][26] =
		 * 137; Big5Freq[15][39] = 136; Big5Freq[24][110] = 135;
		 * Big5Freq[7][141] = 134; Big5Freq[21][15] = 133; Big5Freq[32][104] =
		 * 132; Big5Freq[8][31] = 131; Big5Freq[34][112] = 130; Big5Freq[10][75]
		 * = 129; Big5Freq[21][23] = 128; Big5Freq[34][131] = 127;
		 * Big5Freq[12][3] = 126; Big5Freq[10][62] = 125; Big5Freq[9][120] =
		 * 124; Big5Freq[32][149] = 123; Big5Freq[8][44] = 122; Big5Freq[24][2]
		 * = 121; Big5Freq[6][148] = 120; Big5Freq[15][103] = 119;
		 * Big5Freq[36][54] = 118; Big5Freq[36][134] = 117; Big5Freq[11][7] =
		 * 116; Big5Freq[3][90] = 115; Big5Freq[36][73] = 114; Big5Freq[8][102]
		 * = 113; Big5Freq[12][87] = 112; Big5Freq[25][64] = 111; Big5Freq[9][1]
		 * = 110; Big5Freq[24][121] = 109; Big5Freq[5][75] = 108;
		 * Big5Freq[17][83] = 107; Big5Freq[18][57] = 106; Big5Freq[8][95] =
		 * 105; Big5Freq[14][36] = 104; Big5Freq[28][113] = 103;
		 * Big5Freq[12][56] = 102; Big5Freq[14][61] = 101; Big5Freq[25][138] =
		 * 100; Big5Freq[4][34] = 99; Big5Freq[11][152] = 98; Big5Freq[35][0] =
		 * 97; Big5Freq[4][15] = 96; Big5Freq[8][82] = 95; Big5Freq[20][73] =
		 * 94; Big5Freq[25][52] = 93; Big5Freq[24][6] = 92; Big5Freq[21][78] =
		 * 91; Big5Freq[17][32] = 90; Big5Freq[17][91] = 89; Big5Freq[5][76] =
		 * 88; Big5Freq[15][60] = 87; Big5Freq[15][150] = 86; Big5Freq[5][80] =
		 * 85; Big5Freq[15][81] = 84; Big5Freq[28][108] = 83; Big5Freq[18][14] =
		 * 82; Big5Freq[19][109] = 81; Big5Freq[28][133] = 80; Big5Freq[21][97]
		 * = 79; Big5Freq[5][105] = 78; Big5Freq[18][114] = 77; Big5Freq[16][95]
		 * = 76; Big5Freq[5][51] = 75; Big5Freq[3][148] = 74; Big5Freq[22][102]
		 * = 73; Big5Freq[4][123] = 72; Big5Freq[8][88] = 71; Big5Freq[25][111]
		 * = 70; Big5Freq[8][149] = 69; Big5Freq[9][48] = 68; Big5Freq[16][126]
		 * = 67; Big5Freq[33][150] = 66; Big5Freq[9][54] = 65; Big5Freq[29][104]
		 * = 64; Big5Freq[3][3] = 63; Big5Freq[11][49] = 62; Big5Freq[24][109] =
		 * 61; Big5Freq[28][116] = 60; Big5Freq[34][113] = 59; Big5Freq[5][3] =
		 * 58; Big5Freq[21][106] = 57; Big5Freq[4][98] = 56; Big5Freq[12][135] =
		 * 55; Big5Freq[16][101] = 54; Big5Freq[12][147] = 53; Big5Freq[27][55]
		 * = 52; Big5Freq[3][5] = 51; Big5Freq[11][101] = 50; Big5Freq[16][157]
		 * = 49; Big5Freq[22][114] = 48; Big5Freq[18][46] = 47; Big5Freq[4][29]
		 * = 46; Big5Freq[8][103] = 45; Big5Freq[16][151] = 44; Big5Freq[8][29]
		 * = 43; Big5Freq[15][114] = 42; Big5Freq[22][70] = 41;
		 * Big5Freq[13][121] = 40; Big5Freq[7][112] = 39; Big5Freq[20][83] = 38;
		 * Big5Freq[3][36] = 37; Big5Freq[10][103] = 36; Big5Freq[3][96] = 35;
		 * Big5Freq[21][79] = 34; Big5Freq[25][120] = 33; Big5Freq[29][121] =
		 * 32; Big5Freq[23][71] = 31; Big5Freq[21][22] = 30; Big5Freq[18][89] =
		 * 29; Big5Freq[25][104] = 28; Big5Freq[10][124] = 27; Big5Freq[26][4] =
		 * 26; Big5Freq[21][136] = 25; Big5Freq[6][112] = 24; Big5Freq[12][103]
		 * = 23; Big5Freq[17][66] = 22; Big5Freq[13][151] = 21;
		 * Big5Freq[33][152] = 20; Big5Freq[11][148] = 19; Big5Freq[13][57] =
		 * 18; Big5Freq[13][41] = 17; Big5Freq[7][60] = 16; Big5Freq[21][29] =
		 * 15; Big5Freq[9][157] = 14; Big5Freq[24][95] = 13; Big5Freq[15][148] =
		 * 12; Big5Freq[15][122] = 11; Big5Freq[6][125] = 10; Big5Freq[11][25] =
		 * 9; Big5Freq[20][55] = 8; Big5Freq[19][84] = 7; Big5Freq[21][82] = 6;
		 * Big5Freq[24][3] = 5; Big5Freq[13][70] = 4; Big5Freq[6][21] = 3;
		 * Big5Freq[21][86] = 2; Big5Freq[12][23] = 1; Big5Freq[3][85] = 0;
		 * EUC_TWFreq[45][90] = 600;
		 */
		Big5PFreq[41][122] = 600;
		Big5PFreq[35][0] = 599;
		Big5PFreq[43][15] = 598;
		Big5PFreq[35][99] = 597;
		Big5PFreq[35][6] = 596;
		Big5PFreq[35][8] = 595;
		Big5PFreq[38][154] = 594;
		Big5PFreq[37][34] = 593;
		Big5PFreq[37][115] = 592;
		Big5PFreq[36][12] = 591;
		Big5PFreq[18][77] = 590;
		Big5PFreq[35][100] = 589;
		Big5PFreq[35][42] = 588;
		Big5PFreq[120][75] = 587;
		Big5PFreq[35][23] = 586;
		Big5PFreq[13][72] = 585;
		Big5PFreq[0][67] = 584;
		Big5PFreq[39][172] = 583;
		Big5PFreq[22][182] = 582;
		Big5PFreq[15][186] = 581;
		Big5PFreq[15][165] = 580;
		Big5PFreq[35][44] = 579;
		Big5PFreq[40][13] = 578;
		Big5PFreq[38][1] = 577;
		Big5PFreq[37][33] = 576;
		Big5PFreq[36][24] = 575;
		Big5PFreq[56][4] = 574;
		Big5PFreq[35][29] = 573;
		Big5PFreq[9][96] = 572;
		Big5PFreq[37][62] = 571;
		Big5PFreq[48][47] = 570;
		Big5PFreq[51][14] = 569;
		Big5PFreq[39][122] = 568;
		Big5PFreq[44][46] = 567;
		Big5PFreq[35][21] = 566;
		Big5PFreq[36][8] = 565;
		Big5PFreq[36][141] = 564;
		Big5PFreq[3][81] = 563;
		Big5PFreq[37][155] = 562;
		Big5PFreq[42][84] = 561;
最近下载更多
wei112233  LV15 2020年2月2日
1487092378  LV1 2019年7月29日
w123456  LV1 2017年4月9日
edsion  LV7 2017年4月2日
wfctyjt  LV1 2016年10月15日
依然在路上  LV17 2016年8月2日
hackxhao  LV15 2016年7月31日
erosares  LV9 2015年10月29日
yyz1314512  LV2 2015年9月16日
狼King  LV13 2015年7月11日
最近浏览更多
lichun cai  LV1 2023年5月24日
u一头热我认同你  LV1 2022年6月23日
lichang714  LV2 2021年10月8日
1798672867  LV21 2021年8月6日
Mirai 2021年6月9日
暂无贡献等级
流水浅浅  LV1 2021年5月9日
爱睡觉的小石头 2020年12月7日
暂无贡献等级
0312wangchen  LV26 2020年7月1日
wwwbl123  LV2 2020年5月26日
wei112233  LV15 2020年2月2日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友