Author: j16sdiz
Date: 2008-05-23 17:19:01 +0000 (Fri, 23 May 2008)
New Revision: 20079

Added:
   
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties
   
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties
   
branches/saltedhashstore/freenet/src/freenet/support/ByteBufferInputStream.java
   branches/saltedhashstore/freenet/test/freenet/crypt/ciphers/
   branches/saltedhashstore/freenet/test/freenet/crypt/ciphers/RijndaelTest.java
Modified:
   
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
   branches/saltedhashstore/freenet/src/freenet/crypt/ciphers/Rijndael.java
   branches/saltedhashstore/freenet/src/freenet/io/comm/FreenetInetAddress.java
   branches/saltedhashstore/freenet/src/freenet/io/comm/Message.java
   branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java
   branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java
   branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
   branches/saltedhashstore/freenet/src/freenet/node/Announcer.java
   branches/saltedhashstore/freenet/src/freenet/node/Node.java
   branches/saltedhashstore/freenet/src/freenet/node/PeerNode.java
   branches/saltedhashstore/freenet/src/freenet/node/SeedClientPeerNode.java
   branches/saltedhashstore/freenet/src/freenet/node/Version.java
   
branches/saltedhashstore/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
   branches/saltedhashstore/freenet/src/freenet/support/BitArray.java
   branches/saltedhashstore/freenet/src/freenet/support/Buffer.java
   branches/saltedhashstore/freenet/src/freenet/support/Serializer.java
   branches/saltedhashstore/freenet/src/freenet/support/ShortBuffer.java
Log:
Merge from build 1150 (r19950)


Modified: 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
  2008-05-23 17:10:28 UTC (rev 20078)
+++ 
branches/saltedhashstore/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
  2008-05-23 17:19:01 UTC (rev 20079)
@@ -7,7 +7,7 @@
 BookmarkCategory0.Content.Bookmark0.Name=The Ultimate FreeNet Index
 BookmarkCategory0.Content.Bookmark0.Description=A new one-page index with a 
menu including categories
 BookmarkCategory0.Content.Bookmark0.hasAnActivelink=true
-BookmarkCategory0.Content.Bookmark0.URI=USK at 
0I8gctpUE32CM0iQhXaYpCMvtPPGfT4pjXm01oid5Zc,3dAcn4fX2LyxO6uCnWFTx-2HKZ89uruurcKwLSCxbZ4,AQACAAE/Ultimate-Freenet-Index/20/
+BookmarkCategory0.Content.Bookmark0.URI=USK at 
0I8gctpUE32CM0iQhXaYpCMvtPPGfT4pjXm01oid5Zc,3dAcn4fX2LyxO6uCnWFTx-2HKZ89uruurcKwLSCxbZ4,AQACAAE/Ultimate-Freenet-Index/22/
 BookmarkCategory0.Content.Bookmark3.Name=Index des sites Fran?ais
 BookmarkCategory0.Content.Bookmark3.Description=A small French index with 
descriptions
 BookmarkCategory0.Content.Bookmark3.hasAnActivelink=true
@@ -15,11 +15,11 @@
 BookmarkCategory0.Content.Bookmark2.Name=Freenet Activelink Index (SLOW: 
graphical index, preloads all the sites, so takes *ages* to load)
 BookmarkCategory0.Content.Bookmark2.hasAnActivelink=true
 BookmarkCategory0.Content.Bookmark2.Description=A graphical freenet index 
(this will take a long time to load as it preloads the sites)
-BookmarkCategory0.Content.Bookmark2.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index/50/
+BookmarkCategory0.Content.Bookmark2.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index/53/
 BookmarkCategory0.Content.Bookmark1.Name=Freenet Activelink Index Text Version 
(a quick-loading non-graphical index site, no porn)
 BookmarkCategory0.Content.Bookmark1.hasAnActivelink=true
 BookmarkCategory0.Content.Bookmark1.Description=Text version of the Activelink 
Index
-BookmarkCategory0.Content.Bookmark1.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index-text/14/
+BookmarkCategory0.Content.Bookmark1.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index-text/17/
 BookmarkCategory1.Name=Freenet devel's flogs
 BookmarkCategory1.Content.BookmarkCategory=0
 BookmarkCategory1.Content.Bookmark=5
@@ -30,11 +30,11 @@
 BookmarkCategory1.Content.Bookmark3.Name=Zothar
 BookmarkCategory1.Content.Bookmark3.Description=Zothar's flog
 BookmarkCategory1.Content.Bookmark3.hasAnActivelink=true
-BookmarkCategory1.Content.Bookmark3.URI=USK at 
FgA7EMOmIjfw~OATtonMPZ80xJGDtzZ5TI15b2nIHH8,qeVFtPz2cX0VAif2AMXAS8ajgvbc3SsVp2YkPYczMX0,AQACAAE/Zothar_flog/10/
+BookmarkCategory1.Content.Bookmark3.URI=USK at 
FgA7EMOmIjfw~OATtonMPZ80xJGDtzZ5TI15b2nIHH8,qeVFtPz2cX0VAif2AMXAS8ajgvbc3SsVp2YkPYczMX0,AQACAAE/Zothar_flog/11/
 BookmarkCategory1.Content.Bookmark2.Name=Bombe
 BookmarkCategory1.Content.Bookmark2.Description=Bombe's flog
 BookmarkCategory1.Content.Bookmark2.hasAnActivelink=true
-BookmarkCategory1.Content.Bookmark2.URI=USK at 
e3myoFyp5avg6WYN16ImHri6J7Nj8980Fm~aQe4EX1U,QvbWT0ImE0TwLODTl7EoJx2NBnwDxTbLTE6zkB-eGPs,AQACAAE/bombe/34/
+BookmarkCategory1.Content.Bookmark2.URI=USK at 
e3myoFyp5avg6WYN16ImHri6J7Nj8980Fm~aQe4EX1U,QvbWT0ImE0TwLODTl7EoJx2NBnwDxTbLTE6zkB-eGPs,AQACAAE/bombe/35/
 BookmarkCategory1.Content.Bookmark1.Name=Nextgen$
 BookmarkCategory1.Content.Bookmark1.Description=NextGen$' flog
 BookmarkCategory1.Content.Bookmark1.hasAnActivelink=true
@@ -45,7 +45,7 @@
 BookmarkCategory1.Content.Bookmark0.URI=USK at 
yGvITGZzrY1vUZK-4AaYLgcjZ7ysRqNTMfdcO8gS-LY,-ab5bJVD3Lp-LXEQqBAhJpMKrKJ19RnNaZMIkusU79s,AQACAAE/toad/12/
 BookmarkCategory2.Name=Freenet related software and documentation
 BookmarkCategory2.Content.BookmarkCategory=0
-BookmarkCategory2.Content.Bookmark=5
+BookmarkCategory2.Content.Bookmark=6
 BookmarkCategory2.Content.Bookmark0.Name=Frost
 BookmarkCategory2.Content.Bookmark0.Description=The official freesite of 
Frost, a message board system for Freenet
 BookmarkCategory2.Content.Bookmark0.hasAnActivelink=true
@@ -53,11 +53,11 @@
 BookmarkCategory2.Content.Bookmark1.Name=Freenet Message System
 BookmarkCategory2.Content.Bookmark1.Description=The official freesite of FMS, 
a spam resistant message board system for Freenet
 BookmarkCategory2.Content.Bookmark1.hasAnActivelink=true
-BookmarkCategory2.Content.Bookmark1.URI=USK at 
0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/47/
+BookmarkCategory2.Content.Bookmark1.URI=USK at 
0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/50/
 BookmarkCategory2.Content.Bookmark2.Name=Freemail
 BookmarkCategory2.Content.Bookmark2.Description=The official site for Freemail 
- email over Freenet
 BookmarkCategory2.Content.Bookmark2.hasAnActivelink=true
-BookmarkCategory2.Content.Bookmark2.URI=USK at 
xOg49GNltumTJJzj0fVzuGDpo4hJUsy2UsGQkjE7NY4,EtUH5b9gGpp8JiY-Bm-Y9kHX1q-yDjD-9oRzXn21O9k,AQACAAE/freemail/2/
+BookmarkCategory2.Content.Bookmark2.URI=USK at 
xOg49GNltumTJJzj0fVzuGDpo4hJUsy2UsGQkjE7NY4,EtUH5b9gGpp8JiY-Bm-Y9kHX1q-yDjD-9oRzXn21O9k,AQACAAE/freemail/3/
 BookmarkCategory2.Content.Bookmark3.Name=Publish!
 BookmarkCategory2.Content.Bookmark3.Description=Simple guide to publishing web 
sites to Freenet
 BookmarkCategory2.Content.Bookmark3.hasAnActivelink=true
@@ -66,4 +66,8 @@
 BookmarkCategory2.Content.Bookmark4.Name=Freesite HOWTO
 BookmarkCategory2.Content.Bookmark4.Description=A more detailed explanation of 
publishing freesites
 BookmarkCategory2.Content.Bookmark4.hasAnActivelink=true
+BookmarkCategory2.Content.Bookmark5.URI=USK at 
F-BKUq9vNTrvp7D90r5edQ4MfZCrx3pP7TofdDlCRoU,YFUeosm79Z3KZxC62qQCteCCUI3D-LYyRk6P9auVpPA,AQACAAE/freenetapps/15/
+BookmarkCategory2.Content.Bookmark5.hasAnActivelink=true
+BookmarkCategory2.Content.Bookmark5.Name=The Freenet Applications Freesite
+BookmarkCategory2.Content.Bookmark5.Description=Various links to Freenet 
applications, and instructions for using them
 End

Modified: 
branches/saltedhashstore/freenet/src/freenet/crypt/ciphers/Rijndael.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/crypt/ciphers/Rijndael.java    
2008-05-23 17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/crypt/ciphers/Rijndael.java    
2008-05-23 17:19:01 UTC (rev 20079)
@@ -4,7 +4,6 @@

 import freenet.crypt.BlockCipher;
 import freenet.crypt.UnsupportedCipherException;
-import freenet.support.HexUtil;
 import freenet.support.Logger;

 /*
@@ -21,14 +20,6 @@
        private Object sessionKey;
        private final int keysize, blocksize;

-       private Rijndael(Integer keysize) throws UnsupportedCipherException {
-               this(keysize.intValue());
-       }
-
-       private Rijndael(int keysize) throws UnsupportedCipherException {
-               this(keysize, 128);
-       }
-
        /**
         * Create a Rijndael instance.
         * @param keysize The key size.
@@ -102,71 +93,4 @@
                        throw new IllegalArgumentException();
                Rijndael_Algorithm.blockDecrypt(block, result, 0, sessionKey, 
blocksize/8);
        }
-
-       public static void main(String[] args) throws 
UnsupportedCipherException {
-               // Perform the Monte Carlo test
-
-               System.out.println("KEYSIZE=128\n");
-               monteCarlo(128);
-               System.out.println("=========================\n");
-               System.out.println("KEYSIZE=192\n");
-               monteCarlo(192);
-               System.out.println("=========================\n");
-               System.out.println("KEYSIZE=256\n");
-               monteCarlo(256);
-       }
-
-       static void monteCarlo(int keySize) throws UnsupportedCipherException {
-               Rijndael ctx=new Rijndael(keySize);
-               int kb=keySize/8;
-               byte[] P=new byte[16], C=new byte[16], 
-               CL=new byte[16], KEY=new byte[kb];
-
-               for (int i=0; i<400; i++) {
-                       System.out.println("I="+i);
-                       System.out.println("KEY="+HexUtil.bytesToHex(KEY,0,kb));
-
-                       System.out.println("PT="+HexUtil.bytesToHex(P,0,16));
-
-                       ctx.initialize(KEY);
-                       for (int j=0; j<10000; j++) {
-                               System.arraycopy(C, 0, CL, 0, C.length);
-                               ctx.encipher(P, C);
-                               System.arraycopy(C, 0, P, 0, P.length);
-                       }
-                       System.out.println("CT="+HexUtil.bytesToHex(C,0,16));
-
-
-                       for (int x=0; x<kb; x++) {
-                               if (keySize==192)
-                                       if (x<8)
-                                               KEY[x]^=CL[8+x];
-                                       else 
-                                               KEY[x]^=C[x-8];
-                               else if (keySize==256)
-                                       if (x<16)
-                                               KEY[x]^=CL[x];
-                                       else 
-                                               KEY[x]^=C[x-16];
-                               else KEY[x]^=C[x];
-                       }
-
-                       if (keySize==192) 
-                               for (int x=0; x<8; x++) 
-                                       KEY[x+16]^=CL[x+8];
-                       else if (keySize==256) 
-                               for (int x=0; x<16; x++) 
-                                       KEY[x+16]^=CL[x];
-
-                       System.out.println();
-               }
-       }
 }
-
-
-
-
-
-
-
-

Modified: 
branches/saltedhashstore/freenet/src/freenet/io/comm/FreenetInetAddress.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/io/comm/FreenetInetAddress.java    
    2008-05-23 17:10:28 UTC (rev 20078)
+++ 
branches/saltedhashstore/freenet/src/freenet/io/comm/FreenetInetAddress.java    
    2008-05-23 17:19:01 UTC (rev 20079)
@@ -3,7 +3,7 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.io.comm;

-import java.io.DataInputStream;
+import java.io.DataInput;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.net.InetAddress;
@@ -32,7 +32,7 @@
        /**
         * Create from serialized form on a DataInputStream.
         */
-       public FreenetInetAddress(DataInputStream dis) throws IOException {
+       public FreenetInetAddress(DataInput dis) throws IOException {
                int firstByte = dis.readUnsignedByte();
                byte[] ba;
                if(firstByte == 255) {
@@ -59,7 +59,8 @@
        /**
         * Create from serialized form on a DataInputStream.
         */
-       public FreenetInetAddress(DataInputStream dis, boolean 
checkHostnameOrIPSyntax) throws HostnameSyntaxException, IOException {
+       public FreenetInetAddress(DataInput dis, boolean 
checkHostnameOrIPSyntax) throws HostnameSyntaxException,
+               IOException {
                int firstByte = dis.readUnsignedByte();
                byte[] ba;
                if(firstByte == 255) {

Modified: branches/saltedhashstore/freenet/src/freenet/io/comm/Message.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/io/comm/Message.java   
2008-05-23 17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/io/comm/Message.java   
2008-05-23 17:19:01 UTC (rev 20079)
@@ -19,10 +19,18 @@

 package freenet.io.comm;

-import java.io.*;
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.EOFException;
+import java.io.IOException;
 import java.lang.ref.WeakReference;
-import java.util.*;
+import java.nio.ByteBuffer;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Vector;

+import freenet.support.ByteBufferInputStream;
 import freenet.support.Fields;
 import freenet.support.Logger;
 import freenet.support.Serializer;
@@ -46,17 +54,16 @@
        final int _receivedByteCount;

        public static Message decodeMessageFromPacket(byte[] buf, int offset, 
int length, PeerContext peer, int overhead) {
-               DataInputStream dis
-           = new DataInputStream(new ByteArrayInputStream(buf,
-               offset, length));
-               return decodeMessage(dis, peer, length + overhead, true, false);
+               ByteBufferInputStream bb = new ByteBufferInputStream(buf, 
offset, length);
+               return decodeMessage(bb, peer, length + overhead, true, false);
        }

-       public static Message decodeMessage(DataInputStream dis, PeerContext 
peer, int recvByteCount, boolean mayHaveSubMessages, boolean inSubMessage) {
+       private static Message decodeMessage(ByteBufferInputStream bb, 
PeerContext peer, int recvByteCount,
+               boolean mayHaveSubMessages, boolean inSubMessage) {
                boolean logMINOR = Logger.shouldLog(Logger.MINOR, 
Message.class);
                MessageType mspec;
         try {
-            mspec = MessageType.getSpec(new Integer(dis.readInt()));
+            mspec = MessageType.getSpec(new Integer(bb.readInt()));
         } catch (IOException e1) {
                if(Logger.shouldLog(Logger.DEBUG, Message.class))
                        Logger.minor(Message.class,"Failed to read message 
type: "+e1, e1);
@@ -73,25 +80,27 @@
                        String name = (String) i.next();
                        Class type = (Class) mspec.getFields().get(name);
                        if (type.equals(LinkedList.class)) { // Special 
handling for LinkedList to deal with element type
-                           m.set(name, 
Serializer.readListFromDataInputStream((Class) 
mspec.getLinkedListTypes().get(name), dis));
+                           m.set(name, Serializer
+                                               
.readListFromDataInputStream((Class) mspec.getLinkedListTypes().get(name), bb));
                        } else {
-                           m.set(name, 
Serializer.readFromDataInputStream(type, dis));
+                           m.set(name, 
Serializer.readFromDataInputStream(type, bb));
                        }
-                   }
-                   if(mayHaveSubMessages) {
-                       while(true) {
-                               DataInputStream dis2;
+                       }
+                       if (mayHaveSubMessages) {
+                       while (bb.remaining() > 2) { // sizeof(unsigned short) 
== 2
+                               ByteBufferInputStream bb2;
                                try {
-                                       int size = dis.readUnsignedShort();
-                                       byte[] buf = new byte[size];
-                                       dis.readFully(buf);
-                                       dis2 = new DataInputStream(new 
ByteArrayInputStream(buf));
+                                       int size = bb.readUnsignedShort();
+                                               if (bb.remaining() < size)
+                                                       return m;
+
+                                               bb2 = bb.slice(size);
                                } catch (EOFException e) {
                                        if(logMINOR) 
Logger.minor(Message.class, "No submessages, returning: "+m);
                                        return m;
                                }
                                try {
-                                       Message subMessage = 
decodeMessage(dis2, peer, 0, false, true);
+                                       Message subMessage = decodeMessage(bb2, 
peer, 0, false, true);
                                        if(subMessage == null) return m;
                                        if(logMINOR) 
Logger.minor(Message.class, "Adding submessage: "+subMessage);
                                        m.addSubMessage(subMessage);

Modified: branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java      
2008-05-23 17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/io/comm/Peer.java      
2008-05-23 17:19:01 UTC (rev 20079)
@@ -19,6 +19,7 @@

 package freenet.io.comm;

+import java.io.DataInput;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -50,13 +51,13 @@
                this(InetAddress.getLocalHost(), 0);
        }

-       public Peer(DataInputStream dis) throws IOException {
+       public Peer(DataInput dis) throws IOException {
                addr = new FreenetInetAddress(dis);
                _port = dis.readInt();
                if(_port > 65535 || _port < 0) throw new IOException("bogus 
port");
        }

-       public Peer(DataInputStream dis, boolean checkHostnameOrIPSyntax) 
throws HostnameSyntaxException, IOException {
+       public Peer(DataInput dis, boolean checkHostnameOrIPSyntax) throws 
HostnameSyntaxException, IOException {
                addr = new FreenetInetAddress(dis, checkHostnameOrIPSyntax);
                _port = dis.readInt();
                if(_port > 65535 || _port < 0) throw new IOException("bogus 
port");

Modified: branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java 2008-05-23 
17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/l10n/L10n.java 2008-05-23 
17:19:01 UTC (rev 20079)
@@ -35,7 +35,8 @@
        public static final String OVERRIDE_SUFFIX = ".override" + SUFFIX;

        public static final String FALLBACK_DEFAULT = "en";
-       public static final String[] AVAILABLE_LANGUAGES = { "en", "es", "da", 
"de", "fi", "fr", "it", "no", "pl", "se", "unlisted" };
+       public static final String[] AVAILABLE_LANGUAGES = { "en", "es", "da", 
"de", "fi", "fr", "it", "no", "pl", "se",
+               "zh-cn", "zh-tw", "unlisted" };
        private final String selectedLanguage;

        private static SimpleFieldSet currentTranslation = null;

Modified: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties    
    2008-05-23 17:10:28 UTC (rev 20078)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.en.properties    
    2008-05-23 17:19:01 UTC (rev 20079)
@@ -259,7 +259,7 @@
 FirstTimeWizardToadlet.opennetYes=No, I want the node to automatically find 
strangers to connect to. 
 FirstTimeWizardToadlet.opennetNo=Yes, I have at least 5 friends already using 
Freenet and I will add their details on the Friends page.
 FirstTimeWizardToadlet.warningTitle=Warning!
-FirstTimeWizardToadlet.opennetWarning=If Freenet is illegal where you live, or 
if you are using it to access materials that may get you into trouble, telling 
the node to automatically connect to strangers may be dangerous as it makes 
life much easier for an attacker. Freenet is still alpha software, and we offer 
no guarantees about security.
+FirstTimeWizardToadlet.opennetWarning=If Freenet is illegal where you live, or 
if you are using it to access materials that may get you into trouble, telling 
the node to automatically connect to strangers may be dangerous as it makes 
life much easier for an attacker. Freenet is still experimental, and we offer 
no guarantees about security.
 FirstTimeWizardToadlet.welcomeInfoboxTitle=Welcome to Freenet first time 
wizard!
 FirstTimeWizardToadlet.welcomeInfoboxContent1=Welcome to Freenet first time 
wizard. This tool will enable you to configure your node quickly and easily to 
get you started.
 FirstTimeWizardToadlet.bandwidthLimit=Bandwidth limits

Added: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties 
                            (rev 0)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-cn.properties 
    2008-05-23 17:19:01 UTC (rev 20079)
@@ -0,0 +1,384 @@
+BookmarkEditorToadlet.addBookmark=????
+BookmarkEditorToadlet.addCategory=????
+BookmarkEditorToadlet.addNewBookmark=??????
+BookmarkEditorToadlet.addNewCategory=?????
+BookmarkEditorToadlet.addedNewBookmark=??????????.
+BookmarkEditorToadlet.addedNewBookmarkTitle=???????
+BookmarkEditorToadlet.bookmarkDoesNotExist="${bookmark}"???????.
+BookmarkEditorToadlet.cancelCut=????
+BookmarkEditorToadlet.cancelDelete=??
+BookmarkEditorToadlet.changesSaved=?????????.
+BookmarkEditorToadlet.changesSavedTitle=?????
+BookmarkEditorToadlet.confirmDelete=??
+BookmarkEditorToadlet.cut=??
+BookmarkEditorToadlet.delete=??
+BookmarkEditorToadlet.deleteBookmark=????
+BookmarkEditorToadlet.deleteBookmarkConfirm=????????${bookmark}??
+BookmarkEditorToadlet.deleteCategory=????
+BookmarkEditorToadlet.deleteCategoryConfirm=??????${bookmark}????????????????
+BookmarkEditorToadlet.deleteSucceeded=??????????.
+BookmarkEditorToadlet.deleteSucceededTitle=????
+BookmarkEditorToadlet.edit=??
+BookmarkEditorToadlet.editBookmarkTitle=????
+BookmarkEditorToadlet.editCategoryTitle=????
+BookmarkEditorToadlet.error=??
+BookmarkEditorToadlet.invalidKeyTitle=????
+BookmarkEditorToadlet.invalidKeyWithReason=???Freenet??.
+BookmarkEditorToadlet.keyLabel=??:
+BookmarkEditorToadlet.moveDown=??
+BookmarkEditorToadlet.moveUp=??
+BookmarkEditorToadlet.myBookmarksTitle=????
+BookmarkEditorToadlet.nameLabel=??:
+BookmarkEditorToadlet.paste=??
+BookmarkEditorToadlet.pasteOrCancel=?????????????,??????.
+BookmarkEditorToadlet.pasteTitle=??/??
+BookmarkEditorToadlet.save=??
+BookmarkEditorToadlet.title=?????
+BookmarkManager.list=????
+BooleanOption.parseError=????????: ${val} - ??? true ? false
+BuildOldAgeUserAlert.tooOld=?????????????????????????????????(Build 
#${lastgood}). ?????????, ??????????"??"???????. (????????, Freenet 
??????????????)
+BuildOldAgeUserAlert.tooOldShort=??????? Freenet ??????, ???????????????! 
?????!
+BuildOldAgeUserAlert.tooOldTitle=?????
+ConfigToadlet.appliedTitle=???????
+ConfigToadlet.apply=??
+ConfigToadlet.fullTitle=${name} ? Freenet ????
+ConfigToadlet.reset=??
+ConfigToadlet.shortTitle=??
+ConfigurablePersister.doesNotExistCannotCreate=?????????????.
+ConfigurablePersister.existsCannotReadWrite=??????????????
+ConnectionsToadlet.nodeStatus.BACKED OFF=???
+ConnectionsToadlet.nodeStatus.CONNECTED=???
+ConnectionsToadlet.nodeStatus.CONNECTION ERROR=????
+ConnectionsToadlet.nodeStatus.DISCONNECTED=???
+ConnectionsToadlet.nodeStatus.TOO NEW=??
+ConnectionsToadlet.nodeStatus.TOO OLD=??
+ConnectionsToadlet.nodeStatus.UNKNOWN STATUS=????
+ConnectivityToadlet.connectivityTitle=??
+ConnectivityToadlet.summaryTitle=??
+ContentDataFilter.unknownCharset=?????????????????. ????????????????, 
????????????.
+ContentDataFilter.unknownCharsetTitle=?????!
+ContentDataFilter.warningUnknownCharsetTitle=??: ?????? (${charset})
+DarknetConnectionsToadlet.activityInserts=??: ??${totalSenders}????, 
${CHKhandlers}?CHK???, ${SSKhandlers}?SSK???
+DarknetConnectionsToadlet.activityRequests=??: ??${totalSenders}????, 
${CHKhandlers}?CHK???, ${SSKhandlers}?SSK???
+DarknetConnectionsToadlet.activityTitle=????
+DarknetConnectionsToadlet.add=??
+DarknetConnectionsToadlet.addPeerTitle=??????
+DarknetConnectionsToadlet.backedOff=???????:????????????,???????????.
+DarknetConnectionsToadlet.backedOffShort=???
+DarknetConnectionsToadlet.busy=??:????????,??????????????????,??????????????.
+DarknetConnectionsToadlet.busyShort=??
+DarknetConnectionsToadlet.cancel=??
+DarknetConnectionsToadlet.cantFetchNoderefURL=??? ${url} ??????.?????.
+DarknetConnectionsToadlet.cantParseTryAgain=????????????:(${error}).?????.
+DarknetConnectionsToadlet.cantParseWrongEnding=?????????:???????????End??,???????????:${end}
+DarknetConnectionsToadlet.confirmRemoveNodeTitle=???
+DarknetConnectionsToadlet.confirmRemoveNodeWarningTitle=????
+DarknetConnectionsToadlet.connected=???:??????????
+DarknetConnectionsToadlet.connectedShort=???
+DarknetConnectionsToadlet.disabled=???????:????????????????.
+DarknetConnectionsToadlet.disabledShort=???
+DarknetConnectionsToadlet.enterDescription=?????:
+DarknetConnectionsToadlet.failedToAddNodeInternalErrorTitle=??????:????
+DarknetConnectionsToadlet.failedToAddNodeTitle=??????
+DarknetConnectionsToadlet.fcpPort=FCP: ${port}/tcp (?Frost,Thaw?Freenet???????)
+DarknetConnectionsToadlet.fileReference=??????????????:
+DarknetConnectionsToadlet.fnpPort=FNP: ${port}/udp (???????;??????????????)
+DarknetConnectionsToadlet.forceRemove=????
+DarknetConnectionsToadlet.fproxyDisabled=FProxy???????)?????
+DarknetConnectionsToadlet.fproxyPort=FProxy: ${port}/tcp (?web????)
+DarknetConnectionsToadlet.fullTitle=${name}?${counts}???
+DarknetConnectionsToadlet.go=??
+DarknetConnectionsToadlet.idleTime=??????????????????
+DarknetConnectionsToadlet.idleTimeTitle=???????
+DarknetConnectionsToadlet.invalidSignature=??????????????(${error}).
+DarknetConnectionsToadlet.ipAddressTitle=??
+DarknetConnectionsToadlet.listeningShort=???
+DarknetConnectionsToadlet.myFriends=????
+DarknetConnectionsToadlet.myReferenceHeader=${linkref}??????${/linkref} 
(${linktext}????${/linktext})
+DarknetConnectionsToadlet.nameClickToMessage=????.????????????????????
+DarknetConnectionsToadlet.nameTitle=??
+DarknetConnectionsToadlet.neverConnected=????:????????????????.
+DarknetConnectionsToadlet.neverConnectedShort=????
+DarknetConnectionsToadlet.noPeersFirstHalf=Freenet?????????????,???????.??
+DarknetConnectionsToadlet.noPeersSecondHalf=??,???????????????.
+DarknetConnectionsToadlet.noRefOrURL=???????????????URL. ?????.
+DarknetConnectionsToadlet.nodePortsTitle=????????
+DarknetConnectionsToadlet.notConnected=???:?????,??????????????????.
+DarknetConnectionsToadlet.notConnectedShort=???
+DarknetConnectionsToadlet.pasteReference=???????????:
+DarknetConnectionsToadlet.privateNote=??????????
+DarknetConnectionsToadlet.privateNoteTitle=????
+DarknetConnectionsToadlet.referenceCopyWarning=???????${bold}????${/bold}??.??????${bold}????${/bold}.
+DarknetConnectionsToadlet.remove=???!
+DarknetConnectionsToadlet.removePeers=???????
+DarknetConnectionsToadlet.seedServersShort=??
+DarknetConnectionsToadlet.selectAction=-- ???? --
+DarknetConnectionsToadlet.sendMessageTitle=?????????
+DarknetConnectionsToadlet.sendMessageToPeers=???????????????
+DarknetConnectionsToadlet.statusTitle=??
+DarknetConnectionsToadlet.tmciPort=TMCI: ${port}/tcp (??telnet????????)
+DarknetConnectionsToadlet.tooNewShort=??
+DarknetConnectionsToadlet.tooOldShort=??
+DarknetConnectionsToadlet.transferringRequests=????: ${senders}????, 
${receivers}????
+DarknetConnectionsToadlet.triedToAddSelf=????????????????.
+DarknetConnectionsToadlet.unknownAddress=(????)
+DarknetConnectionsToadlet.updateChangedPrivnotes=??????????
+DarknetConnectionsToadlet.urlReference=????????URL:
+DarknetConnectionsToadlet.versionTitle=??
+FProxyToadlet.alertsTitle=??
+FProxyToadlet.config=??/??????
+FProxyToadlet.configTitle=??
+FProxyToadlet.dangerousContentTitle=????????
+FProxyToadlet.dangerousRSSTitle=???????? (RSS)
+FProxyToadlet.friends=??????
+FProxyToadlet.friendsTitle=??
+FProxyToadlet.goBack=?????
+FProxyToadlet.homepage=??
+FProxyToadlet.mimeType=MIME ???${mime}
+FProxyToadlet.openForce=?${link}??${/link}????? ${mime} ????????????????
+FProxyToadlet.opennetTitle=??
+FProxyToadlet.pathNotFoundTitle=???????
+FProxyToadlet.pluginsTitle=??
+FProxyToadlet.queue=????????
+FProxyToadlet.queueTitle=??
+FProxyToadlet.sizeUnknown=??????
+FProxyToadlet.statsTitle=??
+FProxyToadlet.translationTitle=??
+FProxyToadlet.unknownMIMEType=MIME ??????
+FProxyToadlet.welcome=??
+FProxyToadlet.welcomeTitle=??
+FcpServer.allowedHosts=??????(????????)
+FcpServer.allowedHostsFullAccess=???????????
+FcpServer.allowedHostsLong=??????????IP??????????????????????IP?????CIDR???IP????(?
 192.168.0.0/24)?
+FcpServer.isEnabled=??FCP???
+FcpServer.portNumber=FCP?
+FirstTimeWizardToadlet.bandwidthLimit=????
+FirstTimeWizardToadlet.bandwidthLimitLong=?????????????????????
+FirstTimeWizardToadlet.bwlimitHigherSpeed=???
+FirstTimeWizardToadlet.bwlimitLowerSpeed=???
+FirstTimeWizardToadlet.chooseNodeName=????????
+FirstTimeWizardToadlet.clickContinue=??????
+FirstTimeWizardToadlet.congratz=????????
+FirstTimeWizardToadlet.connectToStrangers=???????
+FirstTimeWizardToadlet.connectToStrangersLong=??????? Freenet 
???????????????????????????????????? 
Freenet????????????????????Freenet??????????????????????????????
+FirstTimeWizardToadlet.continue=??
+FirstTimeWizardToadlet.continueEnd=???????Freenet?
+FirstTimeWizardToadlet.datastoreSizeLong=????????????????????????????????????????????????????????????????????????????????????
+FirstTimeWizardToadlet.enableOpennet=????????? Freenet ??
+FirstTimeWizardToadlet.fivePercentDisk=?? 5% ??????
+FirstTimeWizardToadlet.homepageTitle=Freenet ???????
+FirstTimeWizardToadlet.iDoTrust=???????? ${interface} (${ip}) ????
+FirstTimeWizardToadlet.isNetworkTrusted=???????????
+FirstTimeWizardToadlet.memoryLimitLong=???? Freenet 
??????????????????/???Freenet ??????????????????????????????????? 128MB ??????? 
1GB ??????????? 256MB??????????? Freenet ?????
+FirstTimeWizardToadlet.noNetworkIF=?????????
+FirstTimeWizardToadlet.noNetworkIFLong=Freenet ??????????????????????? Freenet?
+FirstTimeWizardToadlet.opennetNo=???????????????? Freenet ???????????????????
+FirstTimeWizardToadlet.opennetWarning=?? Freenet ?????????????????? Freenet 
?????????????????????????????????????????????Freenet ???????????????????????
+FirstTimeWizardToadlet.opennetYes=???????????????????
+FirstTimeWizardToadlet.skipWizard=??????????????
+FirstTimeWizardToadlet.step3Title=Freenet ?????? - ????
+FirstTimeWizardToadlet.step4Title=Freenet ?????? - ??????
+FirstTimeWizardToadlet.step6Title=Freenet ?????? - ??????
+FirstTimeWizardToadlet.welcomeInfoboxTitle=???? Freenet ???????
+GenericReadFilterCallback.malformedAbsoluteURL=?????? URL ???${error}
+GenericReadFilterCallback.malformedRelativeURL=?????? URL ???${error}
+InsertException.shortError.10=???
+InsertException.shortError.3=????
+IntOption.parseError=??????????? 32 ??? : ${val}
+JPEGFilter.notJpeg=?????????????JPEG????????????????????????????????????
+JPEGFilter.tooShort=???????????JPEG???
+JPEGFilter.tooShortTitle=????
+LocalFileInsertToadlet.fileHeader=??
+LocalFileInsertToadlet.insert=??
+LocalFileInsertToadlet.sizeHeader=??
+LoggerHook.unrecognizedPriority=??????????: ${name}.
+LongOption.parseError=??????????? 64 ??? : ${val}
+MeaningfulNodeNameUserAlert.noNodeNick=??????????????. ????, ?????????????? 
IRC ???????, ??????????????. (???, ??????????? darknet ????????????, ????????)
+MeaningfulNodeNameUserAlert.noNodeNickShort=????(??)????????
+MeaningfulNodeNameUserAlert.noNodeNickTitle=????(??)????????
+N2NTMToadlet.friends=??
+N2NTMToadlet.processingSend=???????????
+N2NTMToadlet.returnToFriends=??????
+N2NTMToadlet.sentTitle=??
+N2NTMToadlet.tooLongTitle=??
+N2NTMUserAlert.delete=??
+N2NTMUserAlert.reply=??
+N2NTMUserAlert.title=?${peername}(${peer})?????????${number}
+Node.inBWLimit=?????????????
+Node.inBWLimitLong=????????????????????????????? -1 ??????????
+Node.l10nLanguage=????????
+Node.l10nLanguageLong=?????????????????????????????
+Node.nodeName=??????
+Node.nodeNameLong=????????????????
+Node.outBWLimit=?????????????
+Node.storeSize=?????????
+Node.storeSizeLong=?????????
+PluginToadlet.addPluginTitle=??plugin
+PluginToadlet.failedToLoadPluginTitle=Plugin????
+PluginToadlet.noWebInterfaceTitle=?plugin?????
+PluginToadlet.pluginList=Plugin??
+PluginToadlet.pluginListTitle=Plugin??
+PluginToadlet.pluginNameTitle=Plugin??
+PluginToadlet.pluginNotFoundTitle=????plugin
+PluginToadlet.unsupportedMethod=????method.
+PluginToadlet.visit=??
+PproxyToadlet.cancel=??
+PproxyToadlet.classNameTitle=Class??
+PproxyToadlet.internalIDTitle=????
+PproxyToadlet.loadPluginLabel=??Plugin:
+PproxyToadlet.noPlugins=??????plugins
+PproxyToadlet.pluginNotFoundReload=??????????plugin.
+PproxyToadlet.pluginNotFoundReloadTitle=?????Plugin(??)
+PproxyToadlet.pluginUnloaded=?plugin????
+PproxyToadlet.pluginUnloadedWithName=${name}??plugin????.
+PproxyToadlet.plugins=Plugins
+PproxyToadlet.pluginsWithNodeName=${name}?plugins
+PproxyToadlet.reload=??
+PproxyToadlet.returnToPluginPage=??plugin??
+PproxyToadlet.startedAtTitle=????
+PproxyToadlet.unload=??
+PproxyToadlet.unloadPluginTitle=???plugin?
+PproxyToadlet.unloadPluginWithName=??????${name}??
+QueueToadlet.change=???
+QueueToadlet.delete=??
+QueueToadlet.download=??
+QueueToadlet.fileName=???
+QueueToadlet.identifier=??
+QueueToadlet.insertAs=???:
+QueueToadlet.insertFile=????
+QueueToadlet.key=??
+QueueToadlet.legend=??
+QueueToadlet.persistenceForever=??
+QueueToadlet.persistenceNone=?
+QueueToadlet.persistenceRebootr=??
+QueueToadlet.priority=???
+QueueToadlet.priority0=??
+QueueToadlet.priority1=???
+QueueToadlet.priority2=?
+QueueToadlet.priority3=??
+QueueToadlet.priority4=?
+QueueToadlet.priority5=???
+QueueToadlet.priority6=????
+QueueToadlet.progress=??
+QueueToadlet.reason=??
+QueueToadlet.restart=??
+QueueToadlet.size=??
+QueueToadlet.starting=???
+QueueToadlet.title=${nodeName}?????
+QueueToadlet.totalSize=????
+QueueToadlet.unknown=??
+SimpleToadletServer.cssName=??????
+StatisticsToadlet.activityInserts=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
+StatisticsToadlet.activityRequests=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
+StatisticsToadlet.allocMemory=Java??????: ${memory}
+StatisticsToadlet.bandwidthTitle=??
+StatisticsToadlet.cpus=???CPU??: ${count}
+StatisticsToadlet.getLogs=?????????
+StatisticsToadlet.inputRate=????: ?? ${rate} (???? ${max})
+StatisticsToadlet.jeDumpButton=????JE??
+StatisticsToadlet.jvmInfoTitle=JVM??
+StatisticsToadlet.jvmVendor=JVM ???? ${vendor}
+StatisticsToadlet.jvmVersion=JVM??: ${version}
+StatisticsToadlet.maxMemory=Java?????: ${memory}
+StatisticsToadlet.osArch=????????: ${arch}
+StatisticsToadlet.osName=??????: ${name}
+StatisticsToadlet.osVersion=??????: ${version}
+StatisticsToadlet.outputRate=????: ?? ${rate} (???? ${max})
+StatisticsToadlet.payloadOutput=????: ${total} (?? ${rate}) (${percent}%)
+StatisticsToadlet.peerStatsTitle=????
+StatisticsToadlet.threadDumpButton=????????
+StatisticsToadlet.threads=??????: ${running}/${max}
+StatisticsToadlet.totalInput=????: ${total} (?? ${rate})
+StatisticsToadlet.totalOutput=????: ${total} (?? ${rate})
+StatisticsToadlet.transferringRequests=????: ?? ${senders}, ?? ${receivers}
+StatisticsToadlet.usedMemory=Java??????: ${memory}
+StatisticsToadlet.versionTitle=??????
+SymlinkerToadlet.symlinks=ToadletServer??????
+TextModeClientInterfaceServer.allowedHosts=??????
+TextModeClientInterfaceServer.bindTo=??????
+TextModeClientInterfaceServer.bindToLong=?????IP??
+TextModeClientInterfaceServer.enableInputOutput=???stdout/stdin?
+TextModeClientInterfaceServer.enabled=??????
+TextModeClientInterfaceServer.enabledLong=?????????????
+TextModeClientInterfaceServer.telnetPortNumber=?????
+Toadlet.cancel=??
+TranslationToadlet.bracketRemoveOverride=(???????!)
+TranslationToadlet.bracketTranslateIt=(?????????!)
+TranslationToadlet.bracketUpdateTranslation=(??????)
+TranslationToadlet.confirmRemoveOverride=????????????:(${key} - ${value})??
+TranslationToadlet.contributingToLabelWithLang=????${lang}?????:
+TranslationToadlet.currentTranslationLabel=????
+TranslationToadlet.downloadTranslationsFile=????????
+TranslationToadlet.hideAlreadyTranslated=???????????
+TranslationToadlet.originalVersionLabel=?????(????)
+TranslationToadlet.reEdit=????????
+TranslationToadlet.remove=??
+TranslationToadlet.returnToTranslations=??????
+TranslationToadlet.showEverything=????,???????????
+TranslationToadlet.translationKeyLabel=????
+TranslationToadlet.translationUpdateTitle=????
+TranslationToadlet.translationUpdatedTitle=??????!
+TranslationToadlet.updateTranslationCommand=??????!
+UpdatedVersionAvailableUserAlert.armed=?????????????????Freenet???,??????.
+UpdatedVersionAvailableUserAlert.clickToUpdateNow=????????????????.
+UpdatedVersionAvailableUserAlert.downloadedNewExtJar=?????????????Freenet????,???${version}.
+UpdatedVersionAvailableUserAlert.downloadedNewJar=?????????????Freenet??,???${version}.
+UpdatedVersionAvailableUserAlert.fetchingNewNode=???????????????Freenet??(???? 
${nodeVersion}).
+UpdatedVersionAvailableUserAlert.notLatest=??????????????????.
+UpdatedVersionAvailableUserAlert.title=Freenet????????????
+UpdatedVersionAvailableUserAlert.updateASAPButton=????
+UpdatedVersionAvailableUserAlert.updateASAPQuestion=????????????????????????
+UpdatedVersionAvailableUserAlert.updateNowButton=????!
+UserAlert.apply=??
+UserAlert.hide=??
+UserAlert.reset=??
+UserAlertManager.criticalErrorCountLabel=????:
+UserAlertManager.errorCountLabel=??:
+UserAlertManager.minorCountLabel=??:
+UserAlertManager.totalLabel=??:
+UserAlertManager.warningCountLabel=??:
+UserAlertsToadlet.titleWithName=${name} ?????
+WelcomeToadlet.activityTitle=????
+WelcomeToadlet.alertsSummary=??????
+WelcomeToadlet.arkFetchCount=ARK???: ${total}
+WelcomeToadlet.confirmAddBookmarkSubTitle=??????
+WelcomeToadlet.confirmExternalLinkTitle=???????
+WelcomeToadlet.confirmExternalLinkWithURL=??????????????${url}???????? Freenet 
???????????????????????????????
+WelcomeToadlet.disabledAlert=????
+WelcomeToadlet.extVersion=Freenet-ext ????:${build} r${rev}
+WelcomeToadlet.extVersionWithRecommended=Freenet-ext ????:${build} 
(??????${recbuild}) ????:${rev}
+WelcomeToadlet.fetch=?
+WelcomeToadlet.fetchKeyLabel=?? Key
+WelcomeToadlet.finInsertSuccessWithKey=??????????? ${key} ?
+WelcomeToadlet.homepageFullTitleWithName=${name} ? Freenet FProxy ??
+WelcomeToadlet.ieWarning=?????????Internet Explorer?????????????????
+WelcomeToadlet.insertCount=??: ${total}
+WelcomeToadlet.insertFailedTitle=????
+WelcomeToadlet.insertSucceededTitle=??????
+WelcomeToadlet.insertedTitle=????
+WelcomeToadlet.keyInsertedSuccessfullyWithKeyAndName=?????? key 
${link}${name}${/link}?
+WelcomeToadlet.nodeUpdateConfirm=????????Freenet????
+WelcomeToadlet.nodeUpdateConfirmTitle=??????
+WelcomeToadlet.privateKeyHeader=??
+WelcomeToadlet.publicKeyHeader=??
+WelcomeToadlet.requestCount=??: ${total}
+WelcomeToadlet.restart=??
+WelcomeToadlet.restartConfirm=??????????Freenet????
+WelcomeToadlet.restartConfirmTitle=????
+WelcomeToadlet.restartNode=????
+WelcomeToadlet.restarting=??????????????,?????????????.?????Freenet.
+WelcomeToadlet.restartingTitle=?Freenet???????.
+WelcomeToadlet.shutdown=??
+WelcomeToadlet.shutdownConfirm=???????? Freenet ????
+WelcomeToadlet.shutdownConfirmTitle=????
+WelcomeToadlet.shutdownNode=????
+WelcomeToadlet.splitfileErrorLabel=??????
+WelcomeToadlet.testnetWarningTitle=??(????)??
+WelcomeToadlet.thanks=???? Freenet.
+WelcomeToadlet.transferringRequestCount=????: ${total}
+WelcomeToadlet.update=??
+WelcomeToadlet.updating=?Freenet??????,???????????.?????????????????,?????????????.
+WelcomeToadlet.updatingTitle=?????
+WelcomeToadlet.version=Freenet ??:${fullVersion} ????:${build} r${rev}
+WelcomeToadlet.versionHeader=???????
+End

Added: 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties 
                            (rev 0)
+++ 
branches/saltedhashstore/freenet/src/freenet/l10n/freenet.l10n.zh-tw.properties 
    2008-05-23 17:19:01 UTC (rev 20079)
@@ -0,0 +1,384 @@
+BookmarkEditorToadlet.addBookmark=????
+BookmarkEditorToadlet.addCategory=????
+BookmarkEditorToadlet.addNewBookmark=??????
+BookmarkEditorToadlet.addNewCategory=?????
+BookmarkEditorToadlet.addedNewBookmark=??????????.
+BookmarkEditorToadlet.addedNewBookmarkTitle=???????
+BookmarkEditorToadlet.bookmarkDoesNotExist="${bookmark}"???????.
+BookmarkEditorToadlet.cancelCut=????
+BookmarkEditorToadlet.cancelDelete=??
+BookmarkEditorToadlet.changesSaved=?????????.
+BookmarkEditorToadlet.changesSavedTitle=?????
+BookmarkEditorToadlet.confirmDelete=??
+BookmarkEditorToadlet.cut=??
+BookmarkEditorToadlet.delete=??
+BookmarkEditorToadlet.deleteBookmark=????
+BookmarkEditorToadlet.deleteBookmarkConfirm=????????${bookmark}??
+BookmarkEditorToadlet.deleteCategory=????
+BookmarkEditorToadlet.deleteCategoryConfirm=??????${bookmark}????????????????
+BookmarkEditorToadlet.deleteSucceeded=??????????.
+BookmarkEditorToadlet.deleteSucceededTitle=????
+BookmarkEditorToadlet.edit=??
+BookmarkEditorToadlet.editBookmarkTitle=????
+BookmarkEditorToadlet.editCategoryTitle=????
+BookmarkEditorToadlet.error=??
+BookmarkEditorToadlet.invalidKeyTitle=????
+BookmarkEditorToadlet.invalidKeyWithReason=???Freenet??.
+BookmarkEditorToadlet.keyLabel=??:
+BookmarkEditorToadlet.moveDown=??
+BookmarkEditorToadlet.moveUp=??
+BookmarkEditorToadlet.myBookmarksTitle=????
+BookmarkEditorToadlet.nameLabel=??:
+BookmarkEditorToadlet.paste=??
+BookmarkEditorToadlet.pasteOrCancel=??????????????,??????.
+BookmarkEditorToadlet.pasteTitle=??/??
+BookmarkEditorToadlet.save=??
+BookmarkEditorToadlet.title=?????
+BookmarkManager.list=????
+BooleanOption.parseError=????????: ${val} - ??? true ? false
+BuildOldAgeUserAlert.tooOld=?????????????????????????????????(Build 
#${lastgood}). ?????????, ??????????"??"???????. (????????, Freenet 
??????????????)
+BuildOldAgeUserAlert.tooOldShort=??????? Freenet ??????, ???????????????! 
?????!
+BuildOldAgeUserAlert.tooOldTitle=?????
+ConfigToadlet.appliedTitle=???????
+ConfigToadlet.apply=??
+ConfigToadlet.fullTitle=${name} ? Freenet ????
+ConfigToadlet.reset=??
+ConfigToadlet.shortTitle=??
+ConfigurablePersister.doesNotExistCannotCreate=?????????????.
+ConfigurablePersister.existsCannotReadWrite=??????????????
+ConnectionsToadlet.nodeStatus.BACKED OFF=???
+ConnectionsToadlet.nodeStatus.CONNECTED=???
+ConnectionsToadlet.nodeStatus.CONNECTION ERROR=????
+ConnectionsToadlet.nodeStatus.DISCONNECTED=???
+ConnectionsToadlet.nodeStatus.TOO NEW=??
+ConnectionsToadlet.nodeStatus.TOO OLD=??
+ConnectionsToadlet.nodeStatus.UNKNOWN STATUS=????
+ConnectivityToadlet.connectivityTitle=??
+ConnectivityToadlet.summaryTitle=??
+ContentDataFilter.unknownCharset=?????????????????. ????????????????, 
????????????.
+ContentDataFilter.unknownCharsetTitle=?????!
+ContentDataFilter.warningUnknownCharsetTitle=??: ?????? (${charset})
+DarknetConnectionsToadlet.activityInserts=??: ??${totalSenders}????, 
${CHKhandlers}?CHK???, ${SSKhandlers}?SSK???
+DarknetConnectionsToadlet.activityRequests=??: ??${totalSenders}????, 
${CHKhandlers}?CHK???, ${SSKhandlers}?SSK???
+DarknetConnectionsToadlet.activityTitle=????
+DarknetConnectionsToadlet.add=??
+DarknetConnectionsToadlet.addPeerTitle=??????
+DarknetConnectionsToadlet.backedOff=???????:????????????,???????????.
+DarknetConnectionsToadlet.backedOffShort=???
+DarknetConnectionsToadlet.busy=??:????????,??????????????????,??????????????.
+DarknetConnectionsToadlet.busyShort=??
+DarknetConnectionsToadlet.cancel=??
+DarknetConnectionsToadlet.cantFetchNoderefURL=??? ${url} ??????.?????.
+DarknetConnectionsToadlet.cantParseTryAgain=????????????:(${error}).?????.
+DarknetConnectionsToadlet.cantParseWrongEnding=?????????:???????????End??,???????????:${end}
+DarknetConnectionsToadlet.confirmRemoveNodeTitle=???
+DarknetConnectionsToadlet.confirmRemoveNodeWarningTitle=????
+DarknetConnectionsToadlet.connected=???:??????????
+DarknetConnectionsToadlet.connectedShort=???
+DarknetConnectionsToadlet.disabled=???????:????????????????.
+DarknetConnectionsToadlet.disabledShort=???
+DarknetConnectionsToadlet.enterDescription=?????:
+DarknetConnectionsToadlet.failedToAddNodeInternalErrorTitle=??????:????
+DarknetConnectionsToadlet.failedToAddNodeTitle=??????
+DarknetConnectionsToadlet.fcpPort=FCP: ${port}/tcp (?Frost,Thaw?Freenet???????)
+DarknetConnectionsToadlet.fileReference=??????????????:
+DarknetConnectionsToadlet.fnpPort=FNP: ${port}/udp (???????;??????????????)
+DarknetConnectionsToadlet.forceRemove=????
+DarknetConnectionsToadlet.fproxyDisabled=FProxy???????)?????
+DarknetConnectionsToadlet.fproxyPort=FProxy: ${port}/tcp (?web????)
+DarknetConnectionsToadlet.fullTitle=${name}?${counts}???
+DarknetConnectionsToadlet.go=??
+DarknetConnectionsToadlet.idleTime=??????????????????
+DarknetConnectionsToadlet.idleTimeTitle=???????
+DarknetConnectionsToadlet.invalidSignature=??????????????(${error}).
+DarknetConnectionsToadlet.ipAddressTitle=??
+DarknetConnectionsToadlet.listeningShort=???
+DarknetConnectionsToadlet.myFriends=????
+DarknetConnectionsToadlet.myReferenceHeader=${linkref}??????${/linkref} 
(${linktext}????${/linktext})
+DarknetConnectionsToadlet.nameClickToMessage=????.????????????????????
+DarknetConnectionsToadlet.nameTitle=??
+DarknetConnectionsToadlet.neverConnected=????:????????????????.
+DarknetConnectionsToadlet.neverConnectedShort=????
+DarknetConnectionsToadlet.noPeersFirstHalf=Freenet?????????????,???????.??
+DarknetConnectionsToadlet.noPeersSecondHalf=??,???????????????.
+DarknetConnectionsToadlet.noRefOrURL=???????????????URL. ?????.
+DarknetConnectionsToadlet.nodePortsTitle=????????
+DarknetConnectionsToadlet.notConnected=???:?????,??????????????????.
+DarknetConnectionsToadlet.notConnectedShort=???
+DarknetConnectionsToadlet.pasteReference=???????????:
+DarknetConnectionsToadlet.privateNote=??????????
+DarknetConnectionsToadlet.privateNoteTitle=????
+DarknetConnectionsToadlet.referenceCopyWarning=???????${bold}????${/bold}??.??????${bold}????${/bold}.
+DarknetConnectionsToadlet.remove=???!
+DarknetConnectionsToadlet.removePeers=???????
+DarknetConnectionsToadlet.seedServersShort=??
+DarknetConnectionsToadlet.selectAction=-- ???? --
+DarknetConnectionsToadlet.sendMessageTitle=?????????
+DarknetConnectionsToadlet.sendMessageToPeers=???????????????
+DarknetConnectionsToadlet.statusTitle=??
+DarknetConnectionsToadlet.tmciPort=TMCI: ${port}/tcp (??telnet????????)
+DarknetConnectionsToadlet.tooNewShort=??
+DarknetConnectionsToadlet.tooOldShort=??
+DarknetConnectionsToadlet.transferringRequests=????: ${senders}????, 
${receivers}????
+DarknetConnectionsToadlet.triedToAddSelf=????????????????.
+DarknetConnectionsToadlet.unknownAddress=(????)
+DarknetConnectionsToadlet.updateChangedPrivnotes=??????????
+DarknetConnectionsToadlet.urlReference=????????URL:
+DarknetConnectionsToadlet.versionTitle=??
+FProxyToadlet.alertsTitle=??
+FProxyToadlet.config=??/??????
+FProxyToadlet.configTitle=??
+FProxyToadlet.dangerousContentTitle=????????
+FProxyToadlet.dangerousRSSTitle=???????? (RSS)
+FProxyToadlet.friends=??????
+FProxyToadlet.friendsTitle=??
+FProxyToadlet.goBack=?????
+FProxyToadlet.homepage=??
+FProxyToadlet.mimeType=MIME ???${mime}
+FProxyToadlet.openForce=?${link}??${/link}????? ${mime} ????????????????
+FProxyToadlet.opennetTitle=??
+FProxyToadlet.pathNotFoundTitle=???????
+FProxyToadlet.pluginsTitle=????
+FProxyToadlet.queue=????????
+FProxyToadlet.queueTitle=??
+FProxyToadlet.sizeUnknown=??????
+FProxyToadlet.statsTitle=??
+FProxyToadlet.translationTitle=??
+FProxyToadlet.unknownMIMEType=MIME ??????
+FProxyToadlet.welcome=??
+FProxyToadlet.welcomeTitle=??
+FcpServer.allowedHosts=??????(????????)
+FcpServer.allowedHostsFullAccess=???????????
+FcpServer.allowedHostsLong=???????????IP???????????????????????IP?????CIDR???IP????(?
 192.168.0.0/24)?
+FcpServer.isEnabled=??FCP???
+FcpServer.portNumber=FCP?
+FirstTimeWizardToadlet.bandwidthLimit=????
+FirstTimeWizardToadlet.bandwidthLimitLong=???????????????????????
+FirstTimeWizardToadlet.bwlimitHigherSpeed=???
+FirstTimeWizardToadlet.bwlimitLowerSpeed=???
+FirstTimeWizardToadlet.chooseNodeName=????????
+FirstTimeWizardToadlet.clickContinue=??????
+FirstTimeWizardToadlet.congratz=????????
+FirstTimeWizardToadlet.connectToStrangers=???????
+FirstTimeWizardToadlet.connectToStrangersLong=??????? Freenet 
???????????????????????????????????? 
Freenet????????????????????Freenet??????????????????????????????
+FirstTimeWizardToadlet.continue=??
+FirstTimeWizardToadlet.continueEnd=???????Freenet?
+FirstTimeWizardToadlet.datastoreSizeLong=???????????????????????????????????????????????????????????????????????????????????
+FirstTimeWizardToadlet.enableOpennet=????????? Freenet ??
+FirstTimeWizardToadlet.fivePercentDisk=?? 5% ??????
+FirstTimeWizardToadlet.homepageTitle=Freenet ???????
+FirstTimeWizardToadlet.iDoTrust=???????? ${interface} (${ip}) ????
+FirstTimeWizardToadlet.isNetworkTrusted=???????????
+FirstTimeWizardToadlet.memoryLimitLong=???? Freenet 
????????????????????/???Freenet ??????????????????????????????????????? 128MB 
??????? 1GB ????????????? 256MB??????????? Freenet ?????
+FirstTimeWizardToadlet.noNetworkIF=?????????
+FirstTimeWizardToadlet.noNetworkIFLong=Freenet ??????????????????????? Freenet?
+FirstTimeWizardToadlet.opennetNo=???????????????? Freenet ???????????????????
+FirstTimeWizardToadlet.opennetWarning=?? Freenet ?????????????????? Freenet 
?????????????????????????????????????????????Freenet ???????????????????????
+FirstTimeWizardToadlet.opennetYes=???????????????????
+FirstTimeWizardToadlet.skipWizard=??????????????
+FirstTimeWizardToadlet.step3Title=Freenet ?????? - ????
+FirstTimeWizardToadlet.step4Title=Freenet ?????? - ??????
+FirstTimeWizardToadlet.step6Title=Freenet ?????? - ????????
+FirstTimeWizardToadlet.welcomeInfoboxTitle=???? Freenet ???????
+GenericReadFilterCallback.malformedAbsoluteURL=?????? URL ???${error}
+GenericReadFilterCallback.malformedRelativeURL=?????? URL ???${error}
+InsertException.shortError.10=???
+InsertException.shortError.3=????
+IntOption.parseError=??????????? 32 ???? : ${val}
+JPEGFilter.notJpeg=?????????????JPEG????????????????????????????????????
+JPEGFilter.tooShort=???????????JPEG???
+JPEGFilter.tooShortTitle=????
+LocalFileInsertToadlet.fileHeader=??
+LocalFileInsertToadlet.insert=??
+LocalFileInsertToadlet.sizeHeader=??
+LoggerHook.unrecognizedPriority=??????????: ${name}.
+LongOption.parseError=??????????? 64 ???? : ${val}
+MeaningfulNodeNameUserAlert.noNodeNick=??????????????. ????, ?????????????? 
IRC ???????, ??????????????. (???, ??????????? darknet ????????????, ????????)
+MeaningfulNodeNameUserAlert.noNodeNickShort=????(??)????????
+MeaningfulNodeNameUserAlert.noNodeNickTitle=????(??)????????
+N2NTMToadlet.friends=??
+N2NTMToadlet.processingSend=???????????
+N2NTMToadlet.returnToFriends=??????
+N2NTMToadlet.sentTitle=??
+N2NTMToadlet.tooLongTitle=??
+N2NTMUserAlert.delete=??
+N2NTMUserAlert.reply=??
+N2NTMUserAlert.title=?${peername}(${peer})?????????${number}
+Node.inBWLimit=??????????????
+Node.inBWLimitLong=?????????????????????????????? -1 ??????????
+Node.l10nLanguage=????????
+Node.l10nLanguageLong=?????????????????????????????
+Node.nodeName=??????
+Node.nodeNameLong=????????????????
+Node.outBWLimit=??????????????
+Node.storeSize=?????????
+Node.storeSizeLong=?????????
+PluginToadlet.addPluginTitle=??plugin
+PluginToadlet.failedToLoadPluginTitle=Plugin????
+PluginToadlet.noWebInterfaceTitle=?plugin?????
+PluginToadlet.pluginList=Plugin??
+PluginToadlet.pluginListTitle=Plugin??
+PluginToadlet.pluginNameTitle=Plugin??
+PluginToadlet.pluginNotFoundTitle=????plugin
+PluginToadlet.unsupportedMethod=????method.
+PluginToadlet.visit=??
+PproxyToadlet.cancel=??
+PproxyToadlet.classNameTitle=Class??
+PproxyToadlet.internalIDTitle=????
+PproxyToadlet.loadPluginLabel=??Plugin:
+PproxyToadlet.noPlugins=??????plugins
+PproxyToadlet.pluginNotFoundReload=??????????plugin.
+PproxyToadlet.pluginNotFoundReloadTitle=?????Plugin(????)
+PproxyToadlet.pluginUnloaded=?plugin????
+PproxyToadlet.pluginUnloadedWithName=${name}??plugin????.
+PproxyToadlet.plugins=Plugins
+PproxyToadlet.pluginsWithNodeName=${name}?plugins
+PproxyToadlet.reload=????
+PproxyToadlet.returnToPluginPage=??plugin??
+PproxyToadlet.startedAtTitle=????
+PproxyToadlet.unload=??
+PproxyToadlet.unloadPluginTitle=???plugin?
+PproxyToadlet.unloadPluginWithName=??????${name}??
+QueueToadlet.change=???
+QueueToadlet.delete=??
+QueueToadlet.download=??
+QueueToadlet.fileName=???
+QueueToadlet.identifier=??
+QueueToadlet.insertAs=???:
+QueueToadlet.insertFile=????
+QueueToadlet.key=??
+QueueToadlet.legend=??
+QueueToadlet.persistenceForever=??
+QueueToadlet.persistenceNone=?
+QueueToadlet.persistenceRebootr=??
+QueueToadlet.priority=???
+QueueToadlet.priority0=??
+QueueToadlet.priority1=???
+QueueToadlet.priority2=?
+QueueToadlet.priority3=??
+QueueToadlet.priority4=?
+QueueToadlet.priority5=???
+QueueToadlet.priority6=????
+QueueToadlet.progress=??
+QueueToadlet.reason=??
+QueueToadlet.restart=??
+QueueToadlet.size=??
+QueueToadlet.starting=???
+QueueToadlet.title=${nodeName}?????
+QueueToadlet.totalSize=????
+QueueToadlet.unknown=??
+SimpleToadletServer.cssName=??????
+StatisticsToadlet.activityInserts=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
+StatisticsToadlet.activityRequests=??: ?? ${totalSenders} ????, ${CHKhandlers} 
?CHK???, ${SSKhandlers} ?SSK???
+StatisticsToadlet.allocMemory=Java???????: ${memory}
+StatisticsToadlet.bandwidthTitle=??
+StatisticsToadlet.cpus=???CPU??: ${count}
+StatisticsToadlet.getLogs=?????????
+StatisticsToadlet.inputRate=????: ?? ${rate} (???? ${max})
+StatisticsToadlet.jeDumpButton=????JE??
+StatisticsToadlet.jvmInfoTitle=JVM??
+StatisticsToadlet.jvmVendor=JVM ???? ${vendor}
+StatisticsToadlet.jvmVersion=JVM??: ${version}
+StatisticsToadlet.maxMemory=Java??????: ${memory}
+StatisticsToadlet.osArch=????????: ${arch}
+StatisticsToadlet.osName=??????: ${name}
+StatisticsToadlet.osVersion=??????: ${version}
+StatisticsToadlet.outputRate=????: ?? ${rate} (???? ${max})
+StatisticsToadlet.payloadOutput=????: ${total} (?? ${rate}) (${percent}%)
+StatisticsToadlet.peerStatsTitle=????
+StatisticsToadlet.threadDumpButton=?????????
+StatisticsToadlet.threads=???????: ${running}/${max}
+StatisticsToadlet.totalInput=????: ${total} (?? ${rate})
+StatisticsToadlet.totalOutput=????: ${total} (?? ${rate})
+StatisticsToadlet.transferringRequests=????: ?? ${senders}, ?? ${receivers}
+StatisticsToadlet.usedMemory=Java???????: ${memory}
+StatisticsToadlet.versionTitle=??????
+SymlinkerToadlet.symlinks=ToadletServer??????
+TextModeClientInterfaceServer.allowedHosts=??????
+TextModeClientInterfaceServer.bindTo=??????
+TextModeClientInterfaceServer.bindToLong=?????IP??
+TextModeClientInterfaceServer.enableInputOutput=???stdout/stdin?
+TextModeClientInterfaceServer.enabled=??????
+TextModeClientInterfaceServer.enabledLong=?????????????
+TextModeClientInterfaceServer.telnetPortNumber=?????
+Toadlet.cancel=??
+TranslationToadlet.bracketRemoveOverride=(???????!)
+TranslationToadlet.bracketTranslateIt=(?????????!)
+TranslationToadlet.bracketUpdateTranslation=(??????)
+TranslationToadlet.confirmRemoveOverride=????????????:(${key} - ${value})??
+TranslationToadlet.contributingToLabelWithLang=????${lang}?????:
+TranslationToadlet.currentTranslationLabel=????
+TranslationToadlet.downloadTranslationsFile=????????
+TranslationToadlet.hideAlreadyTranslated=??????????
+TranslationToadlet.originalVersionLabel=????(????)
+TranslationToadlet.reEdit=????????
+TranslationToadlet.remove=??
+TranslationToadlet.returnToTranslations=??????
+TranslationToadlet.showEverything=????,??????????
+TranslationToadlet.translationKeyLabel=????
+TranslationToadlet.translationUpdateTitle=????
+TranslationToadlet.translationUpdatedTitle=??????!
+TranslationToadlet.updateTranslationCommand=??????!
+UpdatedVersionAvailableUserAlert.armed=?????????????????Freenet???,??????.
+UpdatedVersionAvailableUserAlert.clickToUpdateNow=????????????????.
+UpdatedVersionAvailableUserAlert.downloadedNewExtJar=?????????????Freenet????,???${version}.
+UpdatedVersionAvailableUserAlert.downloadedNewJar=?????????????Freenet??,???${version}.
+UpdatedVersionAvailableUserAlert.fetchingNewNode=???????????????Freenet??(???? 
${nodeVersion}).
+UpdatedVersionAvailableUserAlert.notLatest=??????????????????.
+UpdatedVersionAvailableUserAlert.title=Freenet????????????
+UpdatedVersionAvailableUserAlert.updateASAPButton=????
+UpdatedVersionAvailableUserAlert.updateASAPQuestion=????????????????????????
+UpdatedVersionAvailableUserAlert.updateNowButton=????!
+UserAlert.apply=??
+UserAlert.hide=??
+UserAlert.reset=??
+UserAlertManager.criticalErrorCountLabel=????:
+UserAlertManager.errorCountLabel=??:
+UserAlertManager.minorCountLabel=??:
+UserAlertManager.totalLabel=??:
+UserAlertManager.warningCountLabel=??:
+UserAlertsToadlet.titleWithName=${name} ?????
+WelcomeToadlet.activityTitle=????
+WelcomeToadlet.alertsSummary=??????
+WelcomeToadlet.arkFetchCount=ARK???: ${total}
+WelcomeToadlet.confirmAddBookmarkSubTitle=??????
+WelcomeToadlet.confirmExternalLinkTitle=???????
+WelcomeToadlet.confirmExternalLinkWithURL=??????????????${url}???????? Freenet 
???????????????????????????????
+WelcomeToadlet.disabledAlert=????
+WelcomeToadlet.extVersion=Freenet-ext ????:${build} r${rev}
+WelcomeToadlet.extVersionWithRecommended=Freenet-ext ????:${build} 
(??????${recbuild}) ????:${rev}
+WelcomeToadlet.fetch=?
+WelcomeToadlet.fetchKeyLabel=?? Key
+WelcomeToadlet.finInsertSuccessWithKey=??????????? ${key} ?
+WelcomeToadlet.homepageFullTitleWithName=${name} ? Freenet FProxy ??
+WelcomeToadlet.ieWarning=?????????Internet Explorer?????????????????
+WelcomeToadlet.insertCount=??: ${total}
+WelcomeToadlet.insertFailedTitle=????
+WelcomeToadlet.insertSucceededTitle=??????
+WelcomeToadlet.insertedTitle=????
+WelcomeToadlet.keyInsertedSuccessfullyWithKeyAndName=?????? key 
${link}${name}${/link}?
+WelcomeToadlet.nodeUpdateConfirm=????????Freenet????
+WelcomeToadlet.nodeUpdateConfirmTitle=??????
+WelcomeToadlet.privateKeyHeader=????
+WelcomeToadlet.publicKeyHeader=????
+WelcomeToadlet.requestCount=??: ${total}
+WelcomeToadlet.restart=??
+WelcomeToadlet.restartConfirm=??????????Freenet????
+WelcomeToadlet.restartConfirmTitle=????
+WelcomeToadlet.restartNode=????
+WelcomeToadlet.restarting=??????????????,?????????????.?????Freenet.
+WelcomeToadlet.restartingTitle=?Freenet???????.
+WelcomeToadlet.shutdown=??
+WelcomeToadlet.shutdownConfirm=???????? Freenet ????
+WelcomeToadlet.shutdownConfirmTitle=????
+WelcomeToadlet.shutdownNode=????
+WelcomeToadlet.splitfileErrorLabel=??????
+WelcomeToadlet.testnetWarningTitle=??(????)??
+WelcomeToadlet.thanks=???? Freenet.
+WelcomeToadlet.transferringRequestCount=????: ${total}
+WelcomeToadlet.update=??
+WelcomeToadlet.updating=?Freenet??????,???????????.?????????????????,?????????????.
+WelcomeToadlet.updatingTitle=?????
+WelcomeToadlet.version=Freenet ??:${fullVersion} ????:${build} r${rev}
+WelcomeToadlet.versionHeader=???????
+End

Modified: branches/saltedhashstore/freenet/src/freenet/node/Announcer.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Announcer.java    
2008-05-23 17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/node/Announcer.java    
2008-05-23 17:19:01 UTC (rev 20079)
@@ -447,17 +447,17 @@
                                        announcementAddedNodes++;
                                        totalAdded++;
                                }
-                               Logger.error(this, "Announcement to 
"+seed.userToString()+" added node "+pn+" for a total of 
"+announcementAddedNodes+" ("+totalAdded+" from this announcement)");
+                               Logger.normal(this, "Announcement to 
"+seed.userToString()+" added node "+pn+" for a total of 
"+announcementAddedNodes+" ("+totalAdded+" from this announcement)");
                                System.out.println("Announcement to 
"+seed.userToString()+" added node "+pn.userToString()+'.');
                                return;
                        }
                        public void bogusNoderef(String reason) {
-                               Logger.error(this, "Announcement to 
"+seed.userToString()+" got bogus noderef: "+reason, new Exception("debug"));
+                               Logger.normal(this, "Announcement to 
"+seed.userToString()+" got bogus noderef: "+reason, new Exception("debug"));
                        }
                        public void completed() {
                                synchronized(Announcer.this) {
                                        runningAnnouncements--;
-                                       Logger.error(this, "Announcement to 
"+seed.userToString()+" completed, now running "+runningAnnouncements+" 
announcements");
+                                       Logger.normal(this, "Announcement to 
"+seed.userToString()+" completed, now running "+runningAnnouncements+" 
announcements");
                                        if(runningAnnouncements == 0) {
                                                startTime = 
System.currentTimeMillis() + COOLING_OFF_PERIOD;
                                                sentAnnouncements = 0;
@@ -479,20 +479,20 @@
                        }

                        public void nodeFailed(PeerNode pn, String reason) {
-                               Logger.error(this, "Announcement to node 
"+pn.userToString()+" failed: "+reason);
+                               Logger.normal(this, "Announcement to node 
"+pn.userToString()+" failed: "+reason);
                        }
                        public void noMoreNodes() {
-                               Logger.error(this, "Announcement to 
"+seed.userToString()+" ran out of nodes (route not found)");
+                               Logger.normal(this, "Announcement to 
"+seed.userToString()+" ran out of nodes (route not found)");
                        }
                        public void nodeNotWanted() {
                                synchronized(Announcer.this) {
                                        announcementNotWantedNodes++;
                                        totalNotWanted++;
                                }
-                               Logger.error(this, "Announcement to 
"+seed.userToString()+" returned node not wanted for a total of 
"+announcementNotWantedNodes+" ("+totalNotWanted+" from this announcement)");
+                               Logger.normal(this, "Announcement to 
"+seed.userToString()+" returned node not wanted for a total of 
"+announcementNotWantedNodes+" ("+totalNotWanted+" from this announcement)");
                        }
                        public void nodeNotAdded() {
-                               Logger.error(this, "Announcement to 
"+seed.userToString()+" : node not wanted (maybe already have it, opennet just 
turned off, etc)");
+                               Logger.normal(this, "Announcement to 
"+seed.userToString()+" : node not wanted (maybe already have it, opennet just 
turned off, etc)");
                        }
                }, seed);
                node.executor.execute(sender, "Announcer to "+seed);

Modified: branches/saltedhashstore/freenet/src/freenet/node/Node.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Node.java 2008-05-23 
17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/node/Node.java 2008-05-23 
17:19:01 UTC (rev 20079)
@@ -3351,4 +3351,4 @@
        public void setDispatcherHook(NodeDispatcherCallback cb) {
                this.dispatcher.setHook(cb);
        }
-}
+}
\ No newline at end of file

Modified: branches/saltedhashstore/freenet/src/freenet/node/PeerNode.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/PeerNode.java     
2008-05-23 17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/node/PeerNode.java     
2008-05-23 17:19:01 UTC (rev 20079)
@@ -1715,6 +1715,8 @@
                                else
                                        if(logMINOR)
                                                Logger.minor(this, "Received 
packet while disconnected on " + this + " - recently disconnected() ?");
+                       } else {
+                               if(logMINOR) Logger.minor(this, "Received 
packet on "+this);
                        }
                }
                long now = System.currentTimeMillis();

Modified: 
branches/saltedhashstore/freenet/src/freenet/node/SeedClientPeerNode.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/SeedClientPeerNode.java   
2008-05-23 17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/node/SeedClientPeerNode.java   
2008-05-23 17:19:01 UTC (rev 20079)
@@ -87,4 +87,14 @@
        void startARKFetcher() {
                // Do not start an ARK fetcher.
        }
+       
+       public boolean shouldDisconnectAndRemoveNow() {
+               if(!isConnected()) {
+                       // SeedClientPeerNode's always start off unverified.
+                       // If it doesn't manage to connect in 60 seconds, dump 
it.
+                       if(System.currentTimeMillis() - 
lastReceivedPacketTime() > 60*1000)
+                               return true;
+               }
+               return false;
+       }
 }

Modified: branches/saltedhashstore/freenet/src/freenet/node/Version.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/node/Version.java      
2008-05-23 17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/node/Version.java      
2008-05-23 17:19:01 UTC (rev 20079)
@@ -24,7 +24,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 1149;
+       private static final int buildNumber = 1150;

        /** Oldest build of Fred we will talk to */
        private static final int oldLastGoodBuild = 1145;

Modified: 
branches/saltedhashstore/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/store/BerkeleyDBFreenetStore.java  
    2008-05-23 17:10:28 UTC (rev 20078)
+++ 
branches/saltedhashstore/freenet/src/freenet/store/BerkeleyDBFreenetStore.java  
    2008-05-23 17:19:01 UTC (rev 20079)
@@ -806,19 +806,17 @@
                                        
if(result.equals(OperationStatus.SUCCESS))
                                                deleted++;

-                                       if((curBlocks-i) % 2048 == 0) {
-                                               t.commit();
-                                               t = null;
-                                       }
+                                       t.commit();
+                                       t = null;

                                        freeBlocks.remove(i);
-                                       
+
+                                       long chkBlocksInDatabase = 
highestBlockNumberInDatabase();
                                        synchronized(this) {
                                                maxBlocks = maxBlocksInStore;
-                                               curBlocks = blocksInStore;
+                                               curBlocks = blocksInStore = 
chkBlocksInDatabase;
                                                if(maxBlocks >= curBlocks) 
break;
                                        }
-                                       
                                }

                                if(t != null)

Modified: branches/saltedhashstore/freenet/src/freenet/support/BitArray.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/support/BitArray.java  
2008-05-23 17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/support/BitArray.java  
2008-05-23 17:19:01 UTC (rev 20079)
@@ -19,7 +19,9 @@

 package freenet.support;

-import java.io.*;
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.IOException;

 import freenet.io.WritableToDataOutputStream;

@@ -33,13 +35,13 @@
        /**
         * This constructor does not check for unacceptable sizes, and should 
only be used on trusted data.
         */
-       public BitArray(DataInputStream dis) throws IOException {
+       public BitArray(DataInput dis) throws IOException {
                _size = dis.readInt();
                _bits = new byte[(_size / 8) + (_size % 8 == 0 ? 0 : 1)];
                dis.readFully(_bits);
        }

-       public BitArray(DataInputStream dis, int maxSize) throws IOException {
+       public BitArray(DataInput dis, int maxSize) throws IOException {
                _size = dis.readInt();
                if (_size<=0 || _size>maxSize)
                        throw new IOException("Unacceptable bitarray size: 
"+_size);

Modified: branches/saltedhashstore/freenet/src/freenet/support/Buffer.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/support/Buffer.java    
2008-05-23 17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/support/Buffer.java    
2008-05-23 17:19:01 UTC (rev 20079)
@@ -19,8 +19,10 @@

 package freenet.support;

-import java.io.*;
-import java.util.*;
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.Arrays;

 import freenet.io.WritableToDataOutputStream;

@@ -45,7 +47,7 @@
         * @param dis
         * @throws IOException
         */
-       public Buffer(DataInputStream dis) throws IOException {
+       public Buffer(DataInput dis) throws IOException {
                _data = new byte[dis.readInt()];
                _length = _data.length;
                _start = 0;

Added: 
branches/saltedhashstore/freenet/src/freenet/support/ByteBufferInputStream.java
===================================================================
--- 
branches/saltedhashstore/freenet/src/freenet/support/ByteBufferInputStream.java 
                            (rev 0)
+++ 
branches/saltedhashstore/freenet/src/freenet/support/ByteBufferInputStream.java 
    2008-05-23 17:19:01 UTC (rev 20079)
@@ -0,0 +1,205 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.support;
+
+import java.io.DataInput;
+import java.io.DataInputStream;
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.BufferUnderflowException;
+import java.nio.ByteBuffer;
+
+/**
+ * @author sdiz
+ */
+public class ByteBufferInputStream extends InputStream implements DataInput {
+       protected ByteBuffer buf;
+
+       public ByteBufferInputStream(byte[] array) {
+               this(array, 0, array.length);
+       }
+
+       public ByteBufferInputStream(byte[] array, int offset, int length) {
+               this(ByteBuffer.wrap(array, offset, length));
+       }
+       public ByteBufferInputStream(ByteBuffer buf) {
+               this.buf = buf;
+       }
+
+       public int read() throws IOException {
+               try {
+                       return buf.get() & Integer.MAX_VALUE;
+               } catch (BufferUnderflowException e) {
+                       return -1;
+               }
+       }
+       
+       
+       public int remaining() {
+               return buf.remaining();
+       }
+
+       public boolean readBoolean() throws IOException {
+               try {
+                       return buf.get() != 0;
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+       public byte readByte() throws IOException {
+               try {
+                       return buf.get();
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+       public char readChar() throws IOException {
+               try {
+                       return buf.getChar();
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+       public double readDouble() throws IOException {
+               try {
+                       return buf.getDouble();
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+       public float readFloat() throws IOException {
+               try {
+                       return buf.getFloat();
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+       public void readFully(byte[] b) throws IOException {
+               try {
+                       buf.get(b);
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+       public void readFully(byte[] b, int off, int len) throws IOException {
+               try {
+                       buf.get(b, off, len);
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+       public int readInt() throws IOException {
+               try {
+                       return buf.getInt();
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+       public long readLong() throws IOException {
+               try {
+                       return buf.getLong();
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+       public short readShort() throws IOException {
+               try {
+                       return buf.getShort();
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+
+       public int readUnsignedByte() throws IOException {
+               try {
+                       return buf.get() & Integer.MAX_VALUE;
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+       public int readUnsignedShort() throws IOException {
+               try {
+                       return buf.getShort() & Integer.MAX_VALUE;
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+       public int skipBytes(int n) throws IOException {
+               int skip = Math.min(n, buf.remaining());
+               buf.position(buf.position() + skip);
+               return skip;
+       }
+
+       public String readUTF() throws IOException {
+               return DataInputStream.readUTF(this);
+       }
+       /**
+        * @deprecated {@link DataInputStream#readLine()} is deprecated, so why 
not?
+        */
+       public String readLine() throws IOException {
+               // hmmmm bad
+               return new DataInputStream(this).readLine();
+       }
+
+       /**
+        * Slice a piece of ByteBuffer into a new ByteBufferInputStream
+        * 
+        * @param size
+        */
+       public ByteBufferInputStream slice(int size) throws IOException {
+               try {
+                       if (buf.remaining() < size)
+                               throw new EOFException();
+
+                       ByteBuffer bf2 = buf.slice();
+                       bf2.limit(size);
+                       
+                       skip(size);
+                       
+                       return new ByteBufferInputStream(bf2);
+               } catch (BufferUnderflowException e) {
+                       EOFException ioe = new EOFException();
+                       ioe.initCause(e);
+                       throw ioe;
+               }
+       }
+
+}

Modified: branches/saltedhashstore/freenet/src/freenet/support/Serializer.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/support/Serializer.java        
2008-05-23 17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/support/Serializer.java        
2008-05-23 17:19:01 UTC (rev 20079)
@@ -19,7 +19,7 @@

 package freenet.support;

-import java.io.DataInputStream;
+import java.io.DataInput;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.util.Iterator;
@@ -44,7 +44,7 @@
     public static final String VERSION = "$Id: Serializer.java,v 1.5 
2005/09/15 18:16:04 amphibian Exp $";
        public static final int MAX_BITARRAY_SIZE = 2048*8;

-       public static List readListFromDataInputStream(Class elementType, 
DataInputStream dis) throws IOException {
+       public static List readListFromDataInputStream(Class elementType, 
DataInput dis) throws IOException {
                LinkedList ret = new LinkedList();
                int length = dis.readInt();
                for (int x = 0; x < length; x++) {
@@ -53,18 +53,16 @@
                return ret;
        }

-       public static Object readFromDataInputStream(Class type, 
DataInputStream dis) throws IOException {
+       public static Object readFromDataInputStream(Class type, DataInput dis) 
throws IOException {
                if (type.equals(Boolean.class)) {
-                       int bool=dis.read();
+                       int bool = dis.readByte();
                        if (bool==1)
                                return Boolean.TRUE;
                        if (bool==0)
                                return Boolean.FALSE;
                        throw new IOException("Boolean is non boolean value: 
"+bool);
                } else if (type.equals(Byte.class)) {
-                       int b=dis.read();
-                       if (b<0)
-                               throw new IOException();
+                       int b = dis.readByte();
                        return new Byte((byte)b);
                } else if (type.equals(Short.class)) {
                        return new Short(dis.readShort());

Modified: branches/saltedhashstore/freenet/src/freenet/support/ShortBuffer.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/support/ShortBuffer.java       
2008-05-23 17:10:28 UTC (rev 20078)
+++ branches/saltedhashstore/freenet/src/freenet/support/ShortBuffer.java       
2008-05-23 17:19:01 UTC (rev 20079)
@@ -41,7 +41,7 @@
         * @param dis
         * @throws IOException
         */
-       public ShortBuffer(DataInputStream dis) throws IOException {
+       public ShortBuffer(DataInput dis) throws IOException {
                _data = new byte[dis.readShort()];
                _length = (short)_data.length;
                _start = 0;

Added: 
branches/saltedhashstore/freenet/test/freenet/crypt/ciphers/RijndaelTest.java
===================================================================
--- 
branches/saltedhashstore/freenet/test/freenet/crypt/ciphers/RijndaelTest.java   
                            (rev 0)
+++ 
branches/saltedhashstore/freenet/test/freenet/crypt/ciphers/RijndaelTest.java   
    2008-05-23 17:19:01 UTC (rev 20079)
@@ -0,0 +1,1088 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.crypt.ciphers;
+
+import java.util.Arrays;
+import java.util.Random;
+
+import javax.crypto.Cipher;
+
+import freenet.crypt.UnsupportedCipherException;
+import freenet.support.HexUtil;
+import junit.framework.TestCase;
+
+/**
+ * @author sdiz
+ */
+public class RijndaelTest extends TestCase {
+       private final byte[] PLAINTXT128_1 = 
HexUtil.hexToBytes("0123456789abcdef1123456789abcdef");
+       private final byte[] KEY128_1 = 
HexUtil.hexToBytes("deadbeefcafebabe0123456789abcdef");
+       private final byte[] CIPHER128_1 = 
HexUtil.hexToBytes("8c5b8c04805c0e07dd62b381730d5d10");
+
+       private final byte[] PLAINTXT192_1 = 
HexUtil.hexToBytes("0123456789abcdef1123456789abcdef2123456789abcdef");
+       private final byte[] KEY192_1 = 
HexUtil.hexToBytes("deadbeefcafebabe0123456789abcdefcafebabedeadbeef");
+       private final byte[] CIPHER192_1 = 
HexUtil.hexToBytes("7fae974786a9741d96693654bc7a8aff09b3f116840ffced");
+
+       private final byte[] PLAINTXT256_1 = HexUtil
+                       
.hexToBytes("0123456789abcdef1123456789abcdef2123456789abcdef3123456789abcdef");
+       private final byte[] KEY256_1 = HexUtil
+                       
.hexToBytes("deadbeefcafebabe0123456789abcdefcafebabedeadbeefcafebabe01234567");
+       private final byte[] CIPHER256_1 = HexUtil
+                       
.hexToBytes("6fcbc68fc938e5f5a7c24d7422f4b5f153257b6fb53e0bca26770497dd65078c");
+
+       private static final Random rand = new Random();
+
+       public void testKnownValue() throws UnsupportedCipherException {
+               Rijndael aes128 = new Rijndael(128, 128);
+               byte[] res128 = new byte[128 / 8];
+               aes128.initialize(KEY128_1);
+               aes128.encipher(PLAINTXT128_1, res128);
+               assertTrue("(128,128) ENCIPHER", Arrays.equals(res128, 
CIPHER128_1));
+               byte[] des128 = new byte[128 / 8];
+               aes128.decipher(res128, des128);
+               assertTrue("(128,128) DECIPHER", Arrays.equals(des128, 
PLAINTXT128_1));
+
+               Rijndael aes192 = new Rijndael(192, 192);
+               byte[] res192 = new byte[192 / 8];
+               aes192.initialize(KEY192_1);
+               aes192.encipher(PLAINTXT192_1, res192);
+               assertTrue("(192,192) ENCIPHER", Arrays.equals(res192, 
CIPHER192_1));
+               byte[] des192 = new byte[192 / 8];
+               aes192.decipher(res192, des192);
+               assertTrue("(192,192) DECIPHER", Arrays.equals(des192, 
PLAINTXT192_1));
+
+               Rijndael aes256 = new Rijndael(256, 256);
+               byte[] res256 = new byte[256 / 8];
+               aes256.initialize(KEY256_1);
+               aes256.encipher(PLAINTXT256_1, res256);
+               assertTrue("(256,256) ENCIPHER", Arrays.equals(res256, 
CIPHER256_1));
+               byte[] des256 = new byte[256 / 8];
+               aes256.decipher(res256, des256);
+               assertTrue("(256,256) DECIPHER", Arrays.equals(des256, 
PLAINTXT256_1));
+       }
+
+       // Standard test vector, available at 
http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip
+
+       // ecb_vk.txt
+       private byte[] TEST_VK_PT = 
HexUtil.hexToBytes("00000000000000000000000000000000");
+       private final static byte[][][] TEST_VK128 = { //
+                       /* I=1 */
+                       { 
HexUtil.hexToBytes("80000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("0EDD33D3C621E546455BD8BA1418BEC8") }, //
+                       /* I=2 */
+                       { 
HexUtil.hexToBytes("40000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C0CC0C5DA5BD63ACD44A80774FAD5222"), }, //
+                       /* I=3 */
+                       { 
HexUtil.hexToBytes("20000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("2F0B4B71BC77851B9CA56D42EB8FF080"), }, //
+                       /* I=4 */
+                       { 
HexUtil.hexToBytes("10000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("6B1E2FFFE8A114009D8FE22F6DB5F876"), }, //
+                       /* I=5 */
+                       { 
HexUtil.hexToBytes("08000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("9AA042C315F94CBB97B62202F83358F5"), }, //
+                       /* I=6 */
+                       { 
HexUtil.hexToBytes("04000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("DBE01DE67E346A800C4C4B4880311DE4"), }, //
+                       /* I=7 */
+                       { 
HexUtil.hexToBytes("02000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C117D2238D53836ACD92DDCDB85D6A21"), }, //
+                       /* I=8 */
+                       { 
HexUtil.hexToBytes("01000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("DC0ED85DF9611ABB7249CDD168C5467E"), }, //
+                       /* I=9 */
+                       { 
HexUtil.hexToBytes("00800000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("807D678FFF1F56FA92DE3381904842F2"), }, //
+                       /* I=10 */
+                       { 
HexUtil.hexToBytes("00400000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("0E53B3FCAD8E4B130EF73AEB957FB402"), }, //
+                       /* I=11 */
+                       { 
HexUtil.hexToBytes("00200000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("969FFD3B7C35439417E7BDE923035D65"), }, //
+                       /* I=12 */
+                       { 
HexUtil.hexToBytes("00100000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("A99B512C19CA56070491166A1503BF15"), }, //
+                       /* I=13 */
+                       { 
HexUtil.hexToBytes("00080000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("6E9985252126EE344D26AE369D2327E3"), }, //
+                       /* I=14 */
+                       { 
HexUtil.hexToBytes("00040000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("B85F4809F904C275491FCDCD1610387E"), }, //
+                       /* I=15 */
+                       { 
HexUtil.hexToBytes("00020000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("ED365B8D7D20C1F5D53FB94DD211DF7B"), }, //
+                       /* I=16 */
+                       { 
HexUtil.hexToBytes("00010000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("B3A575E86A8DB4A7135D604C43304896"), }, //
+                       /* I=17 */
+                       { 
HexUtil.hexToBytes("00008000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("89704BCB8E69F846259EB0ACCBC7F8A2"), }, //
+                       /* I=18 */
+                       { 
HexUtil.hexToBytes("00004000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C56EE7C92197861F10D7A92B90882055"), }, //
+                       /* I=19 */
+                       { 
HexUtil.hexToBytes("00002000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("92F296F6846E0EAF9422A5A24A08B069"), }, //
+                       /* I=20 */
+                       { 
HexUtil.hexToBytes("00001000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("E67E32BB8F11DEB8699318BEE9E91A60"), }, //
+                       /* I=21 */
+                       { 
HexUtil.hexToBytes("00000800000000000000000000000000"),
+                                       
HexUtil.hexToBytes("B08EEF85EAF626DD91B65C4C3A97D92B"), }, //
+                       /* I=22 */
+                       { 
HexUtil.hexToBytes("00000400000000000000000000000000"),
+                                       
HexUtil.hexToBytes("661083A6ADDCE79BB4E0859AB5538013"), }, //
+                       /* I=23 */
+                       { 
HexUtil.hexToBytes("00000200000000000000000000000000"),
+                                       
HexUtil.hexToBytes("55DFE2941E0EB10AFC0B333BD34DE1FE"), }, //
+                       /* I=24 */
+                       { 
HexUtil.hexToBytes("00000100000000000000000000000000"),
+                                       
HexUtil.hexToBytes("6BFE5945E715C9662609770F8846087A"), }, //
+                       /* I=25 */
+                       { 
HexUtil.hexToBytes("00000080000000000000000000000000"),
+                                       
HexUtil.hexToBytes("79848E9C30C2F8CDA8B325F7FED2B139"), }, //
+                       /* I=26 */
+                       { 
HexUtil.hexToBytes("00000040000000000000000000000000"),
+                                       
HexUtil.hexToBytes("7A713A53B99FEF34AC04DEEF80965BD0"), }, //
+                       /* I=27 */
+                       { 
HexUtil.hexToBytes("00000020000000000000000000000000"),
+                                       
HexUtil.hexToBytes("18144A2B46620D32C3C32CE52D49257F"), }, //
+                       /* I=28 */
+                       { 
HexUtil.hexToBytes("00000010000000000000000000000000"),
+                                       
HexUtil.hexToBytes("872E827C70887C80749F7B8BB1847C7E"), }, //
+                       /* I=29 */
+                       { 
HexUtil.hexToBytes("00000008000000000000000000000000"),
+                                       
HexUtil.hexToBytes("6B86C6A4FE6A60C59B1A3102F8DE49F3"), }, //
+                       /* I=30 */
+                       { 
HexUtil.hexToBytes("00000004000000000000000000000000"),
+                                       
HexUtil.hexToBytes("9848BB3DFDF6F532F094679A4C231A20"), }, //
+                       /* I=31 */
+                       { 
HexUtil.hexToBytes("00000002000000000000000000000000"),
+                                       
HexUtil.hexToBytes("925AD528E852E329B2091CD3F1C2BCEE"), }, //
+                       /* I=32 */
+                       { 
HexUtil.hexToBytes("00000001000000000000000000000000"),
+                                       
HexUtil.hexToBytes("80DF436544B0DD596722E46792A40CD8"), }, //
+                       /* I=33 */
+                       { 
HexUtil.hexToBytes("00000000800000000000000000000000"),
+                                       
HexUtil.hexToBytes("525DAF18F93E83E1E74BBBDDE4263BBA"), }, //
+                       /* I=34 */
+                       { 
HexUtil.hexToBytes("00000000400000000000000000000000"),
+                                       
HexUtil.hexToBytes("F65C9D2EE485D24701FFA3313B9D5BE6"), }, //
+                       /* I=35 */
+                       { 
HexUtil.hexToBytes("00000000200000000000000000000000"),
+                                       
HexUtil.hexToBytes("E4FC8D8BCA06425BDF94AFA40FCC14BA"), }, //
+                       /* I=36 */
+                       { 
HexUtil.hexToBytes("00000000100000000000000000000000"),
+                                       
HexUtil.hexToBytes("A53F0A5CA1E4E6440BB975FF320DE6F8"), }, //
+                       /* I=37 */
+                       { 
HexUtil.hexToBytes("00000000080000000000000000000000"),
+                                       
HexUtil.hexToBytes("D55313B9394080462E87E02899B553F0"), }, //
+                       /* I=38 */
+                       { 
HexUtil.hexToBytes("00000000040000000000000000000000"),
+                                       
HexUtil.hexToBytes("34A71D761F71BCD344384C7F97D27906"), }, //
+                       /* I=39 */
+                       { 
HexUtil.hexToBytes("00000000020000000000000000000000"),
+                                       
HexUtil.hexToBytes("233F3D819599612EBC89580245C996A8"), }, //
+                       /* I=40 */
+                       { 
HexUtil.hexToBytes("00000000010000000000000000000000"),
+                                       
HexUtil.hexToBytes("B4F1374E5268DBCB676E447529E53F89"), }, //
+                       /* I=41 */
+                       { 
HexUtil.hexToBytes("00000000008000000000000000000000"),
+                                       
HexUtil.hexToBytes("0816BD27861D2BA891D1044E39951E96"), }, //
+                       /* I=42 */
+                       { 
HexUtil.hexToBytes("00000000004000000000000000000000"),
+                                       
HexUtil.hexToBytes("F3BE9EA3F10C73CA64FDE5DB13A951D1"), }, //
+                       /* I=43 */
+                       { 
HexUtil.hexToBytes("00000000002000000000000000000000"),
+                                       
HexUtil.hexToBytes("2448086A8106FBD03048DDF857D3F1C8"), }, //
+                       /* I=44 */
+                       { 
HexUtil.hexToBytes("00000000001000000000000000000000"),
+                                       
HexUtil.hexToBytes("670756E65BEC8B68F03D77CDCDCE7B91"), }, //
+                       /* I=45 */
+                       { 
HexUtil.hexToBytes("00000000000800000000000000000000"),
+                                       
HexUtil.hexToBytes("EF968CF0D36FD6C6EFFD225F6FB44CA9"), }, //
+                       /* I=46 */
+                       { 
HexUtil.hexToBytes("00000000000400000000000000000000"),
+                                       
HexUtil.hexToBytes("2E8767157922E3826DDCEC1B0CC1E105"), }, //
+                       /* I=47 */
+                       { 
HexUtil.hexToBytes("00000000000200000000000000000000"),
+                                       
HexUtil.hexToBytes("78CE7EEC670E45A967BAB17E26A1AD36"), }, //
+                       /* I=48 */
+                       { 
HexUtil.hexToBytes("00000000000100000000000000000000"),
+                                       
HexUtil.hexToBytes("3C5CEE825655F098F6E81A2F417DA3FB"), }, //
+                       /* I=49 */
+                       { 
HexUtil.hexToBytes("00000000000080000000000000000000"),
+                                       
HexUtil.hexToBytes("67BFDB431DCE1292200BC6F5207ADB12"), }, //
+                       /* I=50 */
+                       { 
HexUtil.hexToBytes("00000000000040000000000000000000"),
+                                       
HexUtil.hexToBytes("7540FD38E447C0779228548747843A6F"), }, //
+                       /* I=51 */
+                       { 
HexUtil.hexToBytes("00000000000020000000000000000000"),
+                                       
HexUtil.hexToBytes("B85E513301F8A936EA9EC8A21A85B5E6"), }, //
+                       /* I=52 */
+                       { 
HexUtil.hexToBytes("00000000000010000000000000000000"),
+                                       
HexUtil.hexToBytes("04C67DBF16C11427D507A455DE2C9BC5"), }, //
+                       /* I=53 */
+                       { 
HexUtil.hexToBytes("00000000000008000000000000000000"),
+                                       
HexUtil.hexToBytes("03F75EB8959E55079CFFB4FF149A37B6"), }, //
+                       /* I=54 */
+                       { 
HexUtil.hexToBytes("00000000000004000000000000000000"),
+                                       
HexUtil.hexToBytes("74550287F666C63BB9BC7838433434B0"), }, //
+                       /* I=55 */
+                       { 
HexUtil.hexToBytes("00000000000002000000000000000000"),
+                                       
HexUtil.hexToBytes("7D537200195EBC3AEFD1EAAB1C385221"), }, //
+                       /* I=56 */
+                       { 
HexUtil.hexToBytes("00000000000001000000000000000000"),
+                                       
HexUtil.hexToBytes("CE24E4D40C68A82B535CBD3C8E21652A"), }, //
+                       /* I=57 */
+                       { 
HexUtil.hexToBytes("00000000000000800000000000000000"),
+                                       
HexUtil.hexToBytes("AB20072405AA8FC40265C6F1F3DC8BC0"), }, //
+                       /* I=58 */
+                       { 
HexUtil.hexToBytes("00000000000000400000000000000000"),
+                                       
HexUtil.hexToBytes("6CFD2CF688F566B093F67B9B3839E80A"), }, //
+                       /* I=59 */
+                       { 
HexUtil.hexToBytes("00000000000000200000000000000000"),
+                                       
HexUtil.hexToBytes("BD95977E6B7239D407A012C5544BF584"), }, //
+                       /* I=60 */
+                       { 
HexUtil.hexToBytes("00000000000000100000000000000000"),
+                                       
HexUtil.hexToBytes("DF9C0130AC77E7C72C997F587B46DBE0"), }, //
+                       /* I=61 */
+                       { 
HexUtil.hexToBytes("00000000000000080000000000000000"),
+                                       
HexUtil.hexToBytes("E7F1B82CADC53A648798945B34EFEFF2"), }, //
+                       /* I=62 */
+                       { 
HexUtil.hexToBytes("00000000000000040000000000000000"),
+                                       
HexUtil.hexToBytes("932C6DBF69255CF13EDCDB72233ACEA3"), }, //
+                       /* I=63 */
+                       { 
HexUtil.hexToBytes("00000000000000020000000000000000"),
+                                       
HexUtil.hexToBytes("5C76002BC7206560EFE550C80B8F12CC"), }, //
+                       /* I=64 */
+                       { 
HexUtil.hexToBytes("00000000000000010000000000000000"),
+                                       
HexUtil.hexToBytes("F6B7BDD1CAEEBAB574683893C4475484"), }, //
+                       /* I=65 */
+                       { 
HexUtil.hexToBytes("00000000000000008000000000000000"),
+                                       
HexUtil.hexToBytes("A920E37CC6DC6B31DA8C0169569F5034"), }, //
+                       /* I=66 */
+                       { 
HexUtil.hexToBytes("00000000000000004000000000000000"),
+                                       
HexUtil.hexToBytes("919380ECD9C778BC513148B0C28D65FD"), }, //
+                       /* I=67 */
+                       { 
HexUtil.hexToBytes("00000000000000002000000000000000"),
+                                       
HexUtil.hexToBytes("EE67308DD3F2D9E6C2170755E5784BE1"), }, //
+                       /* I=68 */
+                       { 
HexUtil.hexToBytes("00000000000000001000000000000000"),
+                                       
HexUtil.hexToBytes("3CC73E53B85609023A05E149B223AE09"), }, //
+                       /* I=69 */
+                       { 
HexUtil.hexToBytes("00000000000000000800000000000000"),
+                                       
HexUtil.hexToBytes("983E8AF7CF05EBB28D71EB841C9406E6"), }, //
+                       /* I=70 */
+                       { 
HexUtil.hexToBytes("00000000000000000400000000000000"),
+                                       
HexUtil.hexToBytes("0F3099B2D31FA5299EE5BF43193287FC"), }, //
+                       /* I=71 */
+                       { 
HexUtil.hexToBytes("00000000000000000200000000000000"),
+                                       
HexUtil.hexToBytes("B763D84F38C27FE6931DCEB6715D4DB6"), }, //
+                       /* I=72 */
+                       { 
HexUtil.hexToBytes("00000000000000000100000000000000"),
+                                       
HexUtil.hexToBytes("5AE3C9B0E3CC29C0C61565CD01F8A248"), }, //
+                       /* I=73 */
+                       { 
HexUtil.hexToBytes("00000000000000000080000000000000"),
+                                       
HexUtil.hexToBytes("F58083572CD90981958565D48D2DEE25"), }, //
+                       /* I=74 */
+                       { 
HexUtil.hexToBytes("00000000000000000040000000000000"),
+                                       
HexUtil.hexToBytes("7E6255EEF8F70C0EF10337AAB1CCCEF8"), }, //
+                       /* I=75 */
+                       { 
HexUtil.hexToBytes("00000000000000000020000000000000"),
+                                       
HexUtil.hexToBytes("AAD4BAC34DB22821841CE2F631961902"), }, //
+                       /* I=76 */
+                       { 
HexUtil.hexToBytes("00000000000000000010000000000000"),
+                                       
HexUtil.hexToBytes("D7431C0409BB1441BA9C6858DC7D4E81"), }, //
+                       /* I=77 */
+                       { 
HexUtil.hexToBytes("00000000000000000008000000000000"),
+                                       
HexUtil.hexToBytes("EF9298C65E339F6E801A59C626456993"), }, //
+                       /* I=78 */
+                       { 
HexUtil.hexToBytes("00000000000000000004000000000000"),
+                                       
HexUtil.hexToBytes("53FE29F68FF541ABC3F0EF3350B72F7E"), }, //
+                       /* I=79 */
+                       { 
HexUtil.hexToBytes("00000000000000000002000000000000"),
+                                       
HexUtil.hexToBytes("F6BBA5C10DB02529E2C2DA3FB582CC14"), }, //
+                       /* I=80 */
+                       { 
HexUtil.hexToBytes("00000000000000000001000000000000"),
+                                       
HexUtil.hexToBytes("E4239AA37FC531A386DAD1126FC0E9CD"), }, //
+                       /* I=81 */
+                       { 
HexUtil.hexToBytes("00000000000000000000800000000000"),
+                                       
HexUtil.hexToBytes("8F7758F857D15BBE7BFD0E416404C365"), }, //
+                       /* I=82 */
+                       { 
HexUtil.hexToBytes("00000000000000000000400000000000"),
+                                       
HexUtil.hexToBytes("D273EB57C687BCD1B4EA7218A509E7B8"), }, //
+                       /* I=83 */
+                       { 
HexUtil.hexToBytes("00000000000000000000200000000000"),
+                                       
HexUtil.hexToBytes("65D64F8D76E8B3423FA25C4EB58A210A"), }, //
+                       /* I=84 */
+                       { 
HexUtil.hexToBytes("00000000000000000000100000000000"),
+                                       
HexUtil.hexToBytes("623D802B4EC450D66A16625702FCDBE0"), }, //
+                       /* I=85 */
+                       { 
HexUtil.hexToBytes("00000000000000000000080000000000"),
+                                       
HexUtil.hexToBytes("7496460CB28E5791BAEAF9B68FB00022"), }, //
+                       /* I=86 */
+                       { 
HexUtil.hexToBytes("00000000000000000000040000000000"),
+                                       
HexUtil.hexToBytes("34EA600F18BB0694B41681A49D510C1D"), }, //
+                       /* I=87 */
+                       { 
HexUtil.hexToBytes("00000000000000000000020000000000"),
+                                       
HexUtil.hexToBytes("5F8FF0D47D5766D29B5D6E8F46423BD8"), }, //
+                       /* I=88 */
+                       { 
HexUtil.hexToBytes("00000000000000000000010000000000"),
+                                       
HexUtil.hexToBytes("225F9286C5928BF09F84D3F93F541959"), }, //
+                       /* I=89 */
+                       { 
HexUtil.hexToBytes("00000000000000000000008000000000"),
+                                       
HexUtil.hexToBytes("B21E90D25DF383416A5F072CEBEB1FFB"), }, //
+                       /* I=90 */
+                       { 
HexUtil.hexToBytes("00000000000000000000004000000000"),
+                                       
HexUtil.hexToBytes("4AEFCDA089318125453EB9E8EB5E492E"), }, //
+                       /* I=91 */
+                       { 
HexUtil.hexToBytes("00000000000000000000002000000000"),
+                                       
HexUtil.hexToBytes("4D3E75C6CD40EC4869BC85158591ADB8"), }, //
+                       /* I=92 */
+                       { 
HexUtil.hexToBytes("00000000000000000000001000000000"),
+                                       
HexUtil.hexToBytes("63A8B904405436A1B99D7751866771B7"), }, //
+                       /* I=93 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000800000000"),
+                                       
HexUtil.hexToBytes("64F0DAAE47529199792EAE172BA53293"), }, //
+                       /* I=94 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000400000000"),
+                                       
HexUtil.hexToBytes("C3EEF84BEA18225D515A8C852A9047EE"), }, //
+                       /* I=95 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000200000000"),
+                                       
HexUtil.hexToBytes("A44AC422B47D47B81AF73B3E9AC9596E"), }, //
+                       /* I=96 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000100000000"),
+                                       
HexUtil.hexToBytes("D16E04A8FBC435094F8D53ADF25F5084"), }, //
+                       /* I=97 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000080000000"),
+                                       
HexUtil.hexToBytes("EF13DC34BAB03E124EEAD8B6BF44B532"), }, //
+                       /* I=98 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000040000000"),
+                                       
HexUtil.hexToBytes("D94799075C24DCC067AF0D392049250D"), }, //
+                       /* I=99 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000020000000"),
+                                       
HexUtil.hexToBytes("14F431771EDDCE4764C21A2254B5E3C8"), }, //
+                       /* I=100 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000010000000"),
+                                       
HexUtil.hexToBytes("7039329F36F2ED682B02991F28D64679"), }, //
+                       /* I=101 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000008000000"),
+                                       
HexUtil.hexToBytes("124EE24EDE5551639DB8B8B941F6141D"), }, //
+                       /* I=102 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000004000000"),
+                                       
HexUtil.hexToBytes("C2852879A34D5184E478EC918B993FEE"), }, //
+                       /* I=103 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000002000000"),
+                                       
HexUtil.hexToBytes("86A806A3525B93E432053C9AB5ABBEDF"), }, //
+                       /* I=104 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000001000000"),
+                                       
HexUtil.hexToBytes("C1609BF5A4F07E37C17A36366EC23ECC"), }, //
+                       /* I=105 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000800000"),
+                                       
HexUtil.hexToBytes("7E81E7CB92159A51FFCEA331B1E8EA53"), }, //
+                       /* I=106 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000400000"),
+                                       
HexUtil.hexToBytes("37A7BE002856C5A59A6E03EAFCE7729A"), }, //
+                       /* I=107 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000200000"),
+                                       
HexUtil.hexToBytes("BDF98A5A4F91E890C9A1D1E5FAAB138F"), }, //
+                       /* I=108 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000100000"),
+                                       
HexUtil.hexToBytes("4E96ACB66E051F2BC739CC3D3E34A26B"), }, //
+                       /* I=109 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000080000"),
+                                       
HexUtil.hexToBytes("EE996CDD120EB86E21ECFA49E8E1FCF1"), }, //
+                       /* I=110 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000040000"),
+                                       
HexUtil.hexToBytes("61B9E6B579DBF6070C351A1440DD85FF"), }, //
+                       /* I=111 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000020000"),
+                                       
HexUtil.hexToBytes("AC369E484316440B40DFC83AA96E28E7"), }, //
+                       /* I=112 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000010000"),
+                                       
HexUtil.hexToBytes("0A2D16DE985C76D45C579C1159413BBE"), }, //
+                       /* I=113 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000008000"),
+                                       
HexUtil.hexToBytes("DA3FDC38DA1D374FA4802CDA1A1C6B0F"), }, //
+                       /* I=114 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000004000"),
+                                       
HexUtil.hexToBytes("B842523D4C41C2211AFE43A5800ADCE3"), }, //
+                       /* I=115 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000002000"),
+                                       
HexUtil.hexToBytes("9E2CDA90D8E992DBA6C73D8229567192"), }, //
+                       /* I=116 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000001000"),
+                                       
HexUtil.hexToBytes("D49583B781D9E20F5BE101415957FC49"), }, //
+                       /* I=117 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000800"),
+                                       
HexUtil.hexToBytes("EF09DA5C12B376E458B9B8670032498E"), }, //
+                       /* I=118 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000400"),
+                                       
HexUtil.hexToBytes("A96BE0463DA774461A5E1D5A9DD1AC10"), }, //
+                       /* I=119 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000200"),
+                                       
HexUtil.hexToBytes("32CEE3341060790D2D4B1362EF397090"), }, //
+                       /* I=120 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000100"),
+                                       
HexUtil.hexToBytes("21CEA416A3D3359D2C4D58FB6A035F06"), }, //
+                       /* I=121 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000080"),
+                                       
HexUtil.hexToBytes("172AEAB3D507678ECAF455C12587ADB7"), }, //
+                       /* I=122 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000040"),
+                                       
HexUtil.hexToBytes("B6F897941EF8EBFF9FE80A567EF38478"), }, //
+                       /* I=123 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000020"),
+                                       
HexUtil.hexToBytes("A9723259D94A7DC662FB0C782CA3F1DD"), }, //
+                       /* I=124 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000010"),
+                                       
HexUtil.hexToBytes("2F91C984B9A4839F30001B9F430493B4"), }, //
+                       /* I=125 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000008"),
+                                       
HexUtil.hexToBytes("0472406345A610B048CB99EE0EF3FA0F"), }, //
+                       /* I=126 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000004"),
+                                       
HexUtil.hexToBytes("F5F39086646F8C05ED16EFA4B617957C"), }, //
+                       /* I=127 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000002"),
+                                       
HexUtil.hexToBytes("26D50F485A30408D5AF47A5736292450"), }, //
+                       /* I=128 */
+                       { 
HexUtil.hexToBytes("00000000000000000000000000000001"),
+                                       
HexUtil.hexToBytes("0545AAD56DA2A97C3663D1432A3D1C84") }
+       };
+       
+       private final static byte[][][] TEST_VK192 = { //
+                       /* I=1 */
+                       { 
HexUtil.hexToBytes("800000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("DE885DC87F5A92594082D02CC1E1B42C") }, //
+                       /* I=2 */
+                       { 
HexUtil.hexToBytes("400000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C749194F94673F9DD2AA1932849630C1") }, //
+                       /* I=3 */
+                       { 
HexUtil.hexToBytes("200000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("0CEF643313912934D310297B90F56ECC") }, //
+                       /* I=4 */
+                       { 
HexUtil.hexToBytes("100000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C4495D39D4A553B225FBA02A7B1B87E1") }, //
+                       /* I=5 */
+                       { 
HexUtil.hexToBytes("080000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("636D10B1A0BCAB541D680A7970ADC830") }, //
+                       /* I=6 */
+                       { 
HexUtil.hexToBytes("040000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("07CF045786BD6AFCC147D99E45A901A7") }, //
+                       /* I=7 */
+                       { 
HexUtil.hexToBytes("020000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("6A8E3F425A7599348F95398448827976") }, //
+                       /* I=8 */
+                       { 
HexUtil.hexToBytes("010000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("5518276836148A00D91089A20D8BFF57") }, //
+                       /* I=9 */
+                       { 
HexUtil.hexToBytes("008000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("F267E07B5E87E3BC20B969C61D4FCB06") }, //
+                       /* I=10 */
+                       { 
HexUtil.hexToBytes("004000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("5A1CDE69571D401BFCD20DEBADA2212C") }, //
+                       /* I=11 */
+                       { 
HexUtil.hexToBytes("002000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("70A9057263254701D12ADD7D74CD509E") }, //
+                       /* I=12 */
+                       { 
HexUtil.hexToBytes("001000000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("35713A7E108031279388A33A0FE2E190") }, //
+                       /* I=13 */
+                       { 
HexUtil.hexToBytes("000800000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("E74EDE82B1254714F0C7B4B243108655") }, //
+                       /* I=14 */
+                       { 
HexUtil.hexToBytes("000400000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("39272E3100FAA37B55B862320D1B3EB3") }, //
+                       /* I=15 */
+                       { 
HexUtil.hexToBytes("000200000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("6D6E24C659FC5AEF712F77BCA19C9DD0") }, //
+                       /* I=16 */
+                       { 
HexUtil.hexToBytes("000100000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("76D18212F972370D3CC2C6C372C6CF2F") }, //
+                       /* I=17 */
+                       { 
HexUtil.hexToBytes("000080000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("B21A1F0BAE39E55C7594ED570A7783EA") }, //
+                       /* I=18 */
+                       { 
HexUtil.hexToBytes("000040000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("77DE202111895AC48DD1C974B358B458") }, //
+                       /* I=19 */
+                       { 
HexUtil.hexToBytes("000020000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("67810B311969012AAF7B504FFAF39FD1") }, //
+                       /* I=20 */
+                       { 
HexUtil.hexToBytes("000010000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C22EA2344D3E9417A6BA07843E713AEA") }, //
+                       /* I=21 */
+                       { 
HexUtil.hexToBytes("000008000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C79CAF4B97BEE0BD0630AB354539D653") }, //
+                       /* I=22 */
+                       { 
HexUtil.hexToBytes("000004000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("135FD1AF761D9AE23DF4AA6B86760DB4") }, //
+                       /* I=23 */
+                       { 
HexUtil.hexToBytes("000002000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("D4659D0B06ACD4D56AB8D11A16FD83B9") }, //
+                       /* I=24 */
+                       { 
HexUtil.hexToBytes("000001000000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("F7D270028FC188E4E4F35A4AAA25D4D4") }, //
+                       /* I=25 */
+                       { 
HexUtil.hexToBytes("000000800000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("345CAE5A8C9620A9913D5473985852FF") }, //
+                       /* I=26 */
+                       { 
HexUtil.hexToBytes("000000400000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("4E8980ADDE60B0E42C0B287FEA41E729") }, //
+                       /* I=27 */
+                       { 
HexUtil.hexToBytes("000000200000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("F11B6D74E1F15155633DC39743C1A527") }, //
+                       /* I=28 */
+                       { 
HexUtil.hexToBytes("000000100000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("9C87916C0180064F9D3179C6F5DD8C35") }, //
+                       /* I=29 */
+                       { 
HexUtil.hexToBytes("000000080000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("71AB186BCAEA518E461D4F7FAD230E6A") }, //
+                       /* I=30 */
+                       { 
HexUtil.hexToBytes("000000040000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C4A31BBC3DAAF742F9141C2A5001A49C") }, //
+                       /* I=31 */
+                       { 
HexUtil.hexToBytes("000000020000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("E7C47B7B1D40F182A8928C8A55671D07") }, //
+                       /* I=32 */
+                       { 
HexUtil.hexToBytes("000000010000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("8E17F294B28FA373C6249538868A7EEF") }, //
+                       /* I=33 */
+                       { 
HexUtil.hexToBytes("000000008000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("754404096A5CBC08AF09491BE249141A") }, //
+                       /* I=34 */
+                       { 
HexUtil.hexToBytes("000000004000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("101CB56E55F05D86369B6D1069204F0A") }, //
+                       /* I=35 */
+                       { 
HexUtil.hexToBytes("000000002000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("73F19BB6604205C6EE227B9759791E41") }, //
+                       /* I=36 */
+                       { 
HexUtil.hexToBytes("000000001000000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("6270C0028F0D136C37A56B2CB64D24D6") }, //
+                       /* I=37 */
+                       { 
HexUtil.hexToBytes("000000000800000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("A3BF7C2C38D1114A087ECF212E694346") }, //
+                       /* I=38 */
+                       { 
HexUtil.hexToBytes("000000000400000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("49CABFF2CEF7D9F95F5EFB1F7A1A7DDE") }, //
+                       /* I=39 */
+                       { 
HexUtil.hexToBytes("000000000200000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("EC7F8A47CC59B849469255AD49F62752") }, //
+                       /* I=40 */
+                       { 
HexUtil.hexToBytes("000000000100000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("68FAE55A13EFAF9B07B3552A8A0DC9D1") }, //
+                       /* I=41 */
+                       { 
HexUtil.hexToBytes("000000000080000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("211E6B19C69FAEF481F64F24099CDA65") }, //
+                       /* I=42 */
+                       { 
HexUtil.hexToBytes("000000000040000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("DBB918C75BC5732416F79FB0C8EE4C5C") }, //
+                       /* I=43 */
+                       { 
HexUtil.hexToBytes("000000000020000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("98D494E5D963A6C8B92536D3EC35E3FD") }, //
+                       /* I=44 */
+                       { 
HexUtil.hexToBytes("000000000010000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C9A873404D403D6F074190851D67781A") }, //
+                       /* I=45 */
+                       { 
HexUtil.hexToBytes("000000000008000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("073AEF4A7C77D921928CB0DD9D27CAE7") }, //
+                       /* I=46 */
+                       { 
HexUtil.hexToBytes("000000000004000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("89BDE25CEE36FDE769A10E52298CF90F") }, //
+                       /* I=47 */
+                       { 
HexUtil.hexToBytes("000000000002000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("26D0842D37EAD38557C65E0A5E5F122E") }, //
+                       /* I=48 */
+                       { 
HexUtil.hexToBytes("000000000001000000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("F8294BA375AF46B3F22905BBAFFAB107") }, //
+                       /* I=49 */
+                       { 
HexUtil.hexToBytes("000000000000800000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("2AD63EB4D0D43813B979CF72B35BDB94") }, //
+                       /* I=50 */
+                       { 
HexUtil.hexToBytes("000000000000400000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("7710C171EE0F4EFA39BE4C995180181D") }, //
+                       /* I=51 */
+                       { 
HexUtil.hexToBytes("000000000000200000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C0CB2B40DBA7BE8C0698FAE1E4B80FF8") }, //
+                       /* I=52 */
+                       { 
HexUtil.hexToBytes("000000000000100000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("97970E505194622FD955CA1B80B784E9") }, //
+                       /* I=53 */
+                       { 
HexUtil.hexToBytes("000000000000080000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("7CB1824B29F850900DF2CAD9CF04C1CF") }, //
+                       /* I=54 */
+                       { 
HexUtil.hexToBytes("000000000000040000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("FDF4F036BB988E42F2F62DE63FE19A64") }, //
+                       /* I=55 */
+                       { 
HexUtil.hexToBytes("000000000000020000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("08908CFE2C82606B2C15DF61B75CF3E2") }, //
+                       /* I=56 */
+                       { 
HexUtil.hexToBytes("000000000000010000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("B3AA689EF2D07FF365ACB9ADBA2AF07A") }, //
+                       /* I=57 */
+                       { 
HexUtil.hexToBytes("000000000000008000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("F2672CD8EAA3B98776660D0263656F5C") }, //
+                       /* I=58 */
+                       { 
HexUtil.hexToBytes("000000000000004000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("5BDEAC00E986687B9E1D94A0DA7BF452") }, //
+                       /* I=59 */
+                       { 
HexUtil.hexToBytes("000000000000002000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("E6D57BD66EA1627363EE0C4B711B0B21") }, //
+                       /* I=60 */
+                       { 
HexUtil.hexToBytes("000000000000001000000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("03730DD6ACB4AD9996A63BE7765EC06F") }, //
+                       /* I=61 */
+                       { 
HexUtil.hexToBytes("000000000000000800000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("A470E361AA5437B2BE8586D2F78DE582") }, //
+                       /* I=62 */
+                       { 
HexUtil.hexToBytes("000000000000000400000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("7567FEEFA559911FD479670246B484E3") }, //
+                       /* I=63 */
+                       { 
HexUtil.hexToBytes("000000000000000200000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("29829DEA15A4E7A4C049045E7B106E29") }, //
+                       /* I=64 */
+                       { 
HexUtil.hexToBytes("000000000000000100000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("A407834C3D89D48A2CB7A152208FA4ED") }, //
+                       /* I=65 */
+                       { 
HexUtil.hexToBytes("000000000000000080000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("68F948053F78FEF0D8F9FE7EF3A89819") }, //
+                       /* I=66 */
+                       { 
HexUtil.hexToBytes("000000000000000040000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("B605174CAB13AD8FE3B20DA3AE7B0234") }, //
+                       /* I=67 */
+                       { 
HexUtil.hexToBytes("000000000000000020000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("CCAB8F0AEBFF032893996D383CBFDBFA") }, //
+                       /* I=68 */
+                       { 
HexUtil.hexToBytes("000000000000000010000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("AF14BB8428C9730B7DC17B6C1CBEBCC8") }, //
+                       /* I=69 */
+                       { 
HexUtil.hexToBytes("000000000000000008000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("5A41A21332040877EB7B89E8E80D19FE") }, //
+                       /* I=70 */
+                       { 
HexUtil.hexToBytes("000000000000000004000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("AC1BA52EFCDDE368B1596F2F0AD893A0") }, //
+                       /* I=71 */
+                       { 
HexUtil.hexToBytes("000000000000000002000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("41B890E31B9045E6ECDC1BC3F2DB9BCC") }, //
+                       /* I=72 */
+                       { 
HexUtil.hexToBytes("000000000000000001000000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("4D54A549728E55B19A23660424A0F146") }, //
+                       /* I=73 */
+                       { 
HexUtil.hexToBytes("000000000000000000800000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("A917581F41C47C7DDCFFD5285E2D6A61") }, //
+                       /* I=74 */
+                       { 
HexUtil.hexToBytes("000000000000000000400000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("604DF24BA6099B93A7405A524D764FCB") }, //
+                       /* I=75 */
+                       { 
HexUtil.hexToBytes("000000000000000000200000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("78D9D156F28B190E232D1B7AE7FC730A") }, //
+                       /* I=76 */
+                       { 
HexUtil.hexToBytes("000000000000000000100000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("5A12C39E442CD7F27B3CD77F5D029582") }, //
+                       /* I=77 */
+                       { 
HexUtil.hexToBytes("000000000000000000080000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("FF2BF2F47CF7B0F28EE25AF95DBF790D") }, //
+                       /* I=78 */
+                       { 
HexUtil.hexToBytes("000000000000000000040000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("1863BB7D193BDA39DF090659EB8AE48B") }, //
+                       /* I=79 */
+                       { 
HexUtil.hexToBytes("000000000000000000020000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("38178F2FB4CFCF31E87E1ABCDC023EB5") }, //
+                       /* I=80 */
+                       { 
HexUtil.hexToBytes("000000000000000000010000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("F5B13DC690CC0D541C6BA533023DC8C9") }, //
+                       /* I=81 */
+                       { 
HexUtil.hexToBytes("000000000000000000008000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("48EC05238D7375D126DC9D08884D4827") }, //
+                       /* I=82 */
+                       { 
HexUtil.hexToBytes("000000000000000000004000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("ACD0D81139691B310B92A6E377BACC87") }, //
+                       /* I=83 */
+                       { 
HexUtil.hexToBytes("000000000000000000002000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("9A4AA43578B55CE9CC178F0D2E162C79") }, //
+                       /* I=84 */
+                       { 
HexUtil.hexToBytes("000000000000000000001000000000000000000000000000"),
+                                       
HexUtil.hexToBytes("08AD94BC737DB3C87D49B9E01B720D81") }, //
+                       /* I=85 */
+                       { 
HexUtil.hexToBytes("000000000000000000000800000000000000000000000000"),
+                                       
HexUtil.hexToBytes("3BCFB2D5D210E8332900C5991D551A2A") }, //
+                       /* I=86 */
+                       { 
HexUtil.hexToBytes("000000000000000000000400000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C5F0C6B9397ACB29635CE1A0DA2D8D96") }, //
+                       /* I=87 */
+                       { 
HexUtil.hexToBytes("000000000000000000000200000000000000000000000000"),
+                                       
HexUtil.hexToBytes("844A29EFC693E2FA9900F87FBF5DCD5F") }, //
+                       /* I=88 */
+                       { 
HexUtil.hexToBytes("000000000000000000000100000000000000000000000000"),
+                                       
HexUtil.hexToBytes("5126A1C41051FEA158BE41200E1EA59D") }, //
+                       /* I=89 */
+                       { 
HexUtil.hexToBytes("000000000000000000000080000000000000000000000000"),
+                                       
HexUtil.hexToBytes("302123CA7B4F46D667FFFB0EB6AA7703") }, //
+                       /* I=90 */
+                       { 
HexUtil.hexToBytes("000000000000000000000040000000000000000000000000"),
+                                       
HexUtil.hexToBytes("A9D16BCE7DB5C024277709EE2A88D91A") }, //
+                       /* I=91 */
+                       { 
HexUtil.hexToBytes("000000000000000000000020000000000000000000000000"),
+                                       
HexUtil.hexToBytes("F013C5EC123A26CFC34B598C992A996B") }, //
+                       /* I=92 */
+                       { 
HexUtil.hexToBytes("000000000000000000000010000000000000000000000000"),
+                                       
HexUtil.hexToBytes("E38A825CD971A1D2E56FB1DBA248F2A8") }, //
+                       /* I=93 */
+                       { 
HexUtil.hexToBytes("000000000000000000000008000000000000000000000000"),
+                                       
HexUtil.hexToBytes("6E701773C0311E0BD4C5A097406D22B3") }, //
+                       /* I=94 */
+                       { 
HexUtil.hexToBytes("000000000000000000000004000000000000000000000000"),
+                                       
HexUtil.hexToBytes("754262CEF0C64BE4C3E67C35ABE439F7") }, //
+                       /* I=95 */
+                       { 
HexUtil.hexToBytes("000000000000000000000002000000000000000000000000"),
+                                       
HexUtil.hexToBytes("C9C2D4C47DF7D55CFA0EE5F1FE5070F4") }, //
+                       /* I=96 */
+                       { 
HexUtil.hexToBytes("000000000000000000000001000000000000000000000000"),
+                                       
HexUtil.hexToBytes("6AB4BEA85B172573D8BD2D5F4329F13D") }, //
+                       /* I=97 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000800000000000000000000000"),
+                                       
HexUtil.hexToBytes("11F03EF28E2CC9AE5165C587F7396C8C") }, //
+                       /* I=98 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000400000000000000000000000"),
+                                       
HexUtil.hexToBytes("0682F2EB1A68BAC7949922C630DD27FA") }, //
+                       /* I=99 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000200000000000000000000000"),
+                                       
HexUtil.hexToBytes("ABB0FEC0413D659AFE8E3DCF6BA873BB") }, //
+                       /* I=100 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000100000000000000000000000"),
+                                       
HexUtil.hexToBytes("FE86A32E19F805D6569B2EFADD9C92AA") }, //
+                       /* I=101 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000080000000000000000000000"),
+                                       
HexUtil.hexToBytes("E434E472275D1837D3D717F2EECC88C3") }, //
+                       /* I=102 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000040000000000000000000000"),
+                                       
HexUtil.hexToBytes("74E57DCD12A21D26EF8ADAFA5E60469A") }, //
+                       /* I=103 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000020000000000000000000000"),
+                                       
HexUtil.hexToBytes("C275429D6DAD45DDD423FA63C816A9C1") }, //
+                       /* I=104 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000010000000000000000000000"),
+                                       
HexUtil.hexToBytes("7F6EC1A9AE729E86F7744AED4B8F4F07") }, //
+                       /* I=105 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000008000000000000000000000"),
+                                       
HexUtil.hexToBytes("48B5A71AB9292BD4F9E608EF102636B2") }, //
+                       /* I=106 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000004000000000000000000000"),
+                                       
HexUtil.hexToBytes("076FB95D5F536C78CBED3181BCCF3CF1") }, //
+                       /* I=107 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000002000000000000000000000"),
+                                       
HexUtil.hexToBytes("BFA76BEA1E684FD3BF9256119EE0BC0F") }, //
+                       /* I=108 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000001000000000000000000000"),
+                                       
HexUtil.hexToBytes("7D395923D56577F3FF8670998F8C4A71") }, //
+                       /* I=109 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000800000000000000000000"),
+                                       
HexUtil.hexToBytes("BA02C986E529AC18A882C34BA389625F") }, //
+                       /* I=110 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000400000000000000000000"),
+                                       
HexUtil.hexToBytes("3DFCF2D882AFE75D3A191193013A84B5") }, //
+                       /* I=111 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000200000000000000000000"),
+                                       
HexUtil.hexToBytes("FAD1FDE1D0241784B63080D2C74D236C") }, //
+                       /* I=112 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000100000000000000000000"),
+                                       
HexUtil.hexToBytes("7D6C80D39E41F007A14FB9CD2B2C15CD") }, //
+                       /* I=113 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000080000000000000000000"),
+                                       
HexUtil.hexToBytes("7975F401FC10637BB33EA2DB058FF6EC") }, //
+                       /* I=114 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000040000000000000000000"),
+                                       
HexUtil.hexToBytes("657983865C55A818F02B7FCD52ED7E99") }, //
+                       /* I=115 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000020000000000000000000"),
+                                       
HexUtil.hexToBytes("B32BEB1776F9827FF4C3AC9997E84B20") }, //
+                       /* I=116 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000010000000000000000000"),
+                                       
HexUtil.hexToBytes("2AE2C7C374F0A41E3D46DBC3E66BB59F") }, //
+                       /* I=117 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000008000000000000000000"),
+                                       
HexUtil.hexToBytes("4D835E4ABDD4BDC6B88316A6E931A07F") }, //
+                       /* I=118 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000004000000000000000000"),
+                                       
HexUtil.hexToBytes("E07EFABFF1C353F7384EBB87B435A3F3") }, //
+                       /* I=119 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000002000000000000000000"),
+                                       
HexUtil.hexToBytes("ED3088DC3FAF89AD87B4356FF1BB09C2") }, //
+                       /* I=120 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000001000000000000000000"),
+                                       
HexUtil.hexToBytes("4324D01140C156FC898C2E32BA03FB05") }, //
+                       /* I=121 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000800000000000000000"),
+                                       
HexUtil.hexToBytes("BE15D016FACB5BAFBC24FA9289132166") }, //
+                       /* I=122 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000400000000000000000"),
+                                       
HexUtil.hexToBytes("AC9B7048EDB1ACF4D97A5B0B3F50884B") }, //
+                       /* I=123 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000200000000000000000"),
+                                       
HexUtil.hexToBytes("448BECE1F86C7845DFA9A4BB2A016FB3") }, //
+                       /* I=124 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000100000000000000000"),
+                                       
HexUtil.hexToBytes("10DD445E87686EB46EA9B1ABC49257F0") }, //
+                       /* I=125 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000080000000000000000"),
+                                       
HexUtil.hexToBytes("B7FCCF7659FA756D4B7303EEA6C07458") }, //
+                       /* I=126 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000040000000000000000"),
+                                       
HexUtil.hexToBytes("289117115CA3513BAA7640B1004872C2") }, //
+                       /* I=127 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000020000000000000000"),
+                                       
HexUtil.hexToBytes("57CB42F7EE7186051F50B93FFA7B35BF") }, //
+                       /* I=128 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000010000000000000000"),
+                                       
HexUtil.hexToBytes("F2741BFBFB81663B9136802FB9C3126A") }, //
+                       /* I=129 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000008000000000000000"),
+                                       
HexUtil.hexToBytes("E32DDDC5C7398C096E3BD535B31DB5CE") }, //
+                       /* I=130 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000004000000000000000"),
+                                       
HexUtil.hexToBytes("81D3C204E608AF9CC713EAEBCB72433F") }, //
+                       /* I=131 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000002000000000000000"),
+                                       
HexUtil.hexToBytes("D4DEEF4BFC36AAA579496E6935F8F98E") }, //
+                       /* I=132 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000001000000000000000"),
+                                       
HexUtil.hexToBytes("C356DB082B97802B038571C392C5C8F6") }, //
+                       /* I=133 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000800000000000000"),
+                                       
HexUtil.hexToBytes("A3919ECD4861845F2527B77F06AC6A4E") }, //
+                       /* I=134 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000400000000000000"),
+                                       
HexUtil.hexToBytes("A53858E17A2F802A20E40D44494FFDA0") }, //
+                       /* I=135 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000200000000000000"),
+                                       
HexUtil.hexToBytes("5D989E122B78C758921EDBEEB827F0C0") }, //
+                       /* I=136 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000100000000000000"),
+                                       
HexUtil.hexToBytes("4B1C0C8F9E7830CC3C4BE7BD226FA8DE") }, //
+                       /* I=137 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000080000000000000"),
+                                       
HexUtil.hexToBytes("82C40C5FD897FBCA7B899C70713573A1") }, //
+                       /* I=138 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000040000000000000"),
+                                       
HexUtil.hexToBytes("ED13EE2D45E00F75CCDB51EA8E3E36AD") }, //
+                       /* I=139 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000020000000000000"),
+                                       
HexUtil.hexToBytes("F121799EEFE8432423176A3CCF6462BB") }, //
+                       /* I=140 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000010000000000000"),
+                                       
HexUtil.hexToBytes("4FA0C06F07997E98271DD86F7B355C50") }, //
+                       /* I=141 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000008000000000000"),
+                                       
HexUtil.hexToBytes("849EB364B4E81D058649DC5B1BF029B9") }, //
+                       /* I=142 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000004000000000000"),
+                                       
HexUtil.hexToBytes("F48F9E0DE8DE7AD944A207809335D9B1") }, //
+                       /* I=143 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000002000000000000"),
+                                       
HexUtil.hexToBytes("E59E9205B5A81A4FD26DFCF308966022") }, //
+                       /* I=144 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000001000000000000"),
+                                       
HexUtil.hexToBytes("3A91A1BE14AAE9ED700BDF9D70018804") }, //
+                       /* I=145 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000800000000000"),
+                                       
HexUtil.hexToBytes("8ABAD78DCB79A48D79070E7DA89664EC") }, //
+                       /* I=146 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000400000000000"),
+                                       
HexUtil.hexToBytes("B68377D98AAE6044938A7457F6C649D9") }, //
+                       /* I=147 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000200000000000"),
+                                       
HexUtil.hexToBytes("E4E1275C42F5F1B63D662C099D6CE33D") }, //
+                       /* I=148 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000100000000000"),
+                                       
HexUtil.hexToBytes("7DEF32A34C6BE668F17DA1BB193B06EF") }, //
+                       /* I=149 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000080000000000"),
+                                       
HexUtil.hexToBytes("78B6000CC3D30CB3A74B68D0EDBD2B53") }, //
+                       /* I=150 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000040000000000"),
+                                       
HexUtil.hexToBytes("0A47531DE88DD8AE5C23EAE4F7D1F2D5") }, //
+                       /* I=151 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000020000000000"),
+                                       
HexUtil.hexToBytes("667B24E8000CF68231EC484581D922E5") }, //
+                       /* I=152 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000010000000000"),
+                                       
HexUtil.hexToBytes("39DAA5EBD4AACAE130E9C33236C52024") }, //
+                       /* I=153 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000008000000000"),
+                                       
HexUtil.hexToBytes("E3C88760B3CB21360668A63E55BB45D1") }, //
+                       /* I=154 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000004000000000"),
+                                       
HexUtil.hexToBytes("F131EE903C1CDB49D416866FD5D8DE51") }, //
+                       /* I=155 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000002000000000"),
+                                       
HexUtil.hexToBytes("7A1916135B0447CF4033FC13047A583A") }, //
+                       /* I=156 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000001000000000"),
+                                       
HexUtil.hexToBytes("F7D55FB27991143DCDFA90DDF0424FCB") }, //
+                       /* I=157 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000800000000"),
+                                       
HexUtil.hexToBytes("EA93E7D1CA1111DBD8F7EC111A848C0C") }, //
+                       /* I=158 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000400000000"),
+                                       
HexUtil.hexToBytes("2A689E39DFD3CBCBE221326E95888779") }, //
+                       /* I=159 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000200000000"),
+                                       
HexUtil.hexToBytes("C1CE399CA762318AC2C40D1928B4C57D") }, //
+                       /* I=160 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000100000000"),
+                                       
HexUtil.hexToBytes("D43FB6F2B2879C8BFAF0092DA2CA63ED") }, //
+                       /* I=161 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000080000000"),
+                                       
HexUtil.hexToBytes("224563E617158DF97650AF5D130E78A5") }, //
+                       /* I=162 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000040000000"),
+                                       
HexUtil.hexToBytes("6562FDF6833B7C4F7484AE6EBCC243DD") }, //
+                       /* I=163 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000020000000"),
+                                       
HexUtil.hexToBytes("93D58BA7BED22615D661D002885A7457") }, //
+                       /* I=164 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000010000000"),
+                                       
HexUtil.hexToBytes("9A0EF559003AD9E52D3E09ED3C1D3320") }, //
+                       /* I=165 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000008000000"),
+                                       
HexUtil.hexToBytes("96BAF5A7DC6F3DD27EB4C717A85D261C") }, //
+                       /* I=166 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000004000000"),
+                                       
HexUtil.hexToBytes("B8762E06884900E8452293190E19CCDB") }, //
+                       /* I=167 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000002000000"),
+                                       
HexUtil.hexToBytes("785416A22BD63CBABF4B1789355197D3") }, //
+                       /* I=168 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000001000000"),
+                                       
HexUtil.hexToBytes("A0D20CE1489BAA69A3612DCE90F7ABF6") }, //
+                       /* I=169 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000800000"),
+                                       
HexUtil.hexToBytes("700244E93DC94230CC607FFBA0E48F32") }, //
+                       /* I=170 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000400000"),
+                                       
HexUtil.hexToBytes("85329E476829F872A2B4A7E59F91FF2D") }, //
+                       /* I=171 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000200000"),
+                                       
HexUtil.hexToBytes("E4219B4935D988DB719B8B8B2B53D247") }, //
+                       /* I=172 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000100000"),
+                                       
HexUtil.hexToBytes("6ACDD04FD13D4DB4409FE8DD13FD737B") }, //
+                       /* I=173 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000080000"),
+                                       
HexUtil.hexToBytes("9EB7A670AB59E15BE582378701C1EC14") }, //
+                       /* I=174 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000040000"),
+                                       
HexUtil.hexToBytes("29DF2D6935FE657763BC7A9F22D3D492") }, //
+                       /* I=175 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000020000"),
+                                       
HexUtil.hexToBytes("99303359D4A13AFDBE6C784028CE533A") }, //
+                       /* I=176 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000010000"),
+                                       
HexUtil.hexToBytes("FF5C70A6334545F33B9DBF7BEA0417CA") }, //
+                       /* I=177 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000008000"),
+                                       
HexUtil.hexToBytes("289F58A17E4C50EDA4269EFB3DF55815") }, //
+                       /* I=178 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000004000"),
+                                       
HexUtil.hexToBytes("EA35DCB416E9E1C2861D1682F062B5EB") }, //
+                       /* I=179 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000002000"),
+                                       
HexUtil.hexToBytes("3A47BF354BE775383C50B0C0A83E3A58") }, //
+                       /* I=180 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000001000"),
+                                       
HexUtil.hexToBytes("BF6C1DC069FB95D05D43B01D8206D66B") }, //
+                       /* I=181 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000800"),
+                                       
HexUtil.hexToBytes("046D1D580D5898DA6595F32FD1F0C33D") }, //
+                       /* I=182 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000400"),
+                                       
HexUtil.hexToBytes("5F57803B7B82A110F7E9855D6A546082") }, //
+                       /* I=183 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000200"),
+                                       
HexUtil.hexToBytes("25336ECF34E7BE97862CDFF715FF05A8") }, //
+                       /* I=184 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000100"),
+                                       
HexUtil.hexToBytes("ACBAA2A943D8078022D693890E8C4FEF") }, //
+                       /* I=185 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000080"),
+                                       
HexUtil.hexToBytes("3947597879F6B58E4E2F0DF825A83A38") }, //
+                       /* I=186 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000040"),
+                                       
HexUtil.hexToBytes("4EB8CC3335496130655BF3CA570A4FC0") }, //
+                       /* I=187 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000020"),
+                                       
HexUtil.hexToBytes("BBDA7769AD1FDA425E18332D97868824") }, //
+                       /* I=188 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000010"),
+                                       
HexUtil.hexToBytes("5E7532D22DDB0829A29C868198397154") }, //
+                       /* I=189 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000008"),
+                                       
HexUtil.hexToBytes("E66DA67B630AB7AE3E682855E1A1698E") }, //
+                       /* I=190 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000004"),
+                                       
HexUtil.hexToBytes("4D93800F671B48559A64D1EA030A590A") }, //
+                       /* I=191 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000002"),
+                                       
HexUtil.hexToBytes("F33159FCC7D9AE30C062CD3B322AC764") }, //
+                       /* I=192 */
+                       { 
HexUtil.hexToBytes("000000000000000000000000000000000000000000000001"),
+                                       
HexUtil.hexToBytes("8BAE4EFB70D33A9792EEA9BE70889D72") }, //
+       };
+
+       public void testStandardTestVK() throws UnsupportedCipherException {
+               // KEYSIZE=128
+               Rijndael aes128 = new Rijndael(128, 128);
+               for (int i = 0; i < TEST_VK128.length; i++) {
+                       aes128.initialize(TEST_VK128[i][0]);
+
+                       byte[] cipher = new byte[128 / 8];
+                       aes128.encipher(TEST_VK_PT, cipher);
+                       assertTrue("ECB_VK KEYSIZE=128 I=" + (i + 1), 
Arrays.equals(cipher, TEST_VK128[i][1]));
+               }
+
+               /*- KEYSIZE=192 This case would fail
+               Rijndael aes192 = new Rijndael(192, 128);
+               for (int i = 0; i < TEST_VK192.length; i++) {
+                       aes192.initialize(TEST_VK192[i][0]);
+
+                       byte[] cipher = new byte[192 / 8];
+                       aes192.encipher(TEST_VK_PT, cipher);
+                       assertTrue("ECB_VK KEYSIZE=192 I=" + (i + 1), 
Arrays.equals(cipher, TEST_VK192[i][1]));
+               }
+               */
+       }
+
+       public void testRandom() throws UnsupportedCipherException {
+               final int[] SIZE = new int[] { 128, 192, 256 };
+
+               for (int k = 0; k < SIZE.length; k++) {
+                       int size = SIZE[k];
+                       Rijndael aes = new Rijndael(size, size);
+
+                       byte[] key = new byte[size / 8];
+                       rand.nextBytes(key);
+                       aes.initialize(key);
+
+                       for (int i = 0; i < 1024; i++) {
+                               byte[] plain = new byte[size / 8];
+                               rand.nextBytes(plain);
+
+                               byte[] cipher = new byte[size / 8];
+                               aes.encipher(plain, cipher);
+
+                               byte[] plain2 = new byte[size / 8];
+                               aes.decipher(cipher, plain2);
+
+                               assertTrue("(" + size + "," + size + //
+                                               ") KEY=" + 
HexUtil.bytesToHex(key) + //
+                                               ", PLAIN=" + 
HexUtil.bytesToHex(plain) + //
+                                               ", CIPHER=" + 
HexUtil.bytesToHex(cipher) + //
+                                               ", PLAIN2=" + 
HexUtil.bytesToHex(plain2),//
+                                               Arrays.equals(plain, plain2));
+                       }
+               }
+       }
+}


Reply via email to