Greasy Fork 支持简体中文。

Visual Password Hash

Displays a sequence of colored icons calculated from the entered password to help you detect if you've entered the password correctly.

// ==UserScript==
// @name           Visual Password Hash
// @namespace      dschachtler.dssr.ch
// @description    Displays a sequence of colored icons calculated from the entered password to help you detect if you've entered the password correctly.
// @include        *
// @grant          GM_getValue
// @grant          GM_setValue
// @version        2
// ==/UserScript==



var cssinjected = false;

var displayedSymbols;
var symbols;
var names;
var colors;

var defaultDisplayedSymbols = 3;
var defaultSymbols = new Array();
defaultSymbols[00] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F%2BAAXefwABUAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QaP8Alf8AFf8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ9gAOuVAIEVAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwhzAAMIHEiwoMGDCBMqXMgwAAAADSMOfChRIsWKDB9exJhQI0SOCD1uBDlR5EiSJk9yTKmRpEOWLVfC9ChzpsqFNkVazKmzIc%2BeOH8C7SiUZtCiNwsijalwaVKCTj8eFRpx6c6fGLHWhOlypsuSRr%2BKHWswIAA7";
defaultSymbols[01] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2FyAAXcTwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8Q%2BP8Aiv8AF%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2FwAOuKAIEXAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAQOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABEeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAROkBABIApAAAAAO4ZIlkZEyDgwB8fAABROoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh0AAMIHEiwoMGDCBECWMiQYcKHBBtKhEhRYkOKEC06xJhQ40KOHT2CVChypEGPAECiXGnxIMuXH0%2FCZOly5sqaNksWzIkSJ8%2BJMn8C3Sl0aEWdJgf2TBoRKdOlTAVCjTr1qdOkVbFeNZmV69aRXcF%2BVTlWYEAAOw%3D%3D";
defaultSymbols[02] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8Q6P8AT%2F8AFv8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2FgAOtPAIEWAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwiZAAMIHEiwoMGDCBECWMgQQMKHAxkelAix4MKKAS5idIgxIkSNHSNyNAgypMiJJlFaTKlwpcCGIzvG5AizocmRDmvCDElTp06eGTP6tClT6E6jFC3GfIm05FGCRD3WhBpVZMmgP5teFUpS69ClCnN%2BffpQ41iyE3Gerap05lq2cN%2BeJSl3aNq6WeniZau3rky%2FN%2BeytMp3sOGAADs%3D";
defaultSymbols[03] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QcP8AbP8AGP8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ9oAOtsAIEYAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAQOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABEeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAROkBABIApAAAAAO4ZIlkZEyDgwB8fAABROoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh0AAMIHEiwoMGDCBECWMhwYcKHAxtKZAjx4MSLFCsGwMgxY8KOIB%2BCHAlAIcmOFk%2BGLKhyZcSWLjfCRClw5siaNmnm1LkTI86eE38CbSh0qEOZRj0mPVoUKEujBpOm7GmS6kebFXNqREpy68uYXr9KDEsWYkAAOw%3D%3D";
defaultSymbols[04] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QwP8Agf8AGf8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2B4AOuBAIEZAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwiUAAMIHEiwIAAABRMqXDjw4EGGEBc6dBixosCJEy1CxIhRo0KOHD0SBAlSZEOSFE2eJGkS4ciSIyOmXDnz4kOJGV%2FepOnSYMiXPjvq%2FIkTZgCUO4OyRFrTJtOnPXkuRVqUpVOiH61KjXqUq9GhXpsKzRo250qZSs1ebIlS5daxIqFy1fjU7VWsbrXavTt3r9q9QDUGBAA7";
defaultSymbols[05] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QSP8Ar%2F8AGP8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ9AAOuvAIEYAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAYOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABkeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAZOkBABIApAAAAAO4ZIlkZEyDgwB8fAABZOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwioAAMIDACgYMGBCBMKNHgwIcOHChE%2BZDhwIsSIFikSNLhQo8KLFD12bCiRY8mLDklWVLlSZMuPLEeaTAkAZk2bLjfePIlT586RNmnezEi06EyjSFG2TJoxIsaYM51KjQpUqlWqOq1ehRpT60uaXp1ixSqWKVGcZs%2FKTFtUJti3S30GhbuU7NiuE5%2F%2BrCoUL9e9a1nmdBnSpNKTDTUaLavW5%2BG%2Bg3MyVhkQADs%3D";
defaultSymbols[06] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QoP8AXv8AG%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2BYAOteAIEbAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh0AAMIHEiwoMGDCBMqXMiwYQAAEB06hAhAYkOKFhlizKhwI8eDFCt%2BBOlxJMGQJg2iTHlyJcuHLlmGFPly5suBNm%2FmvFgSZ8yFM2kK3MnzJ9GiHo9OtKlUYtCmS58K5Sh16kepNYPehPnTJNSREbfiFEs2QEAAOw%3D%3D";
defaultSymbols[07] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QOP8Av%2F8AGf8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ8wAOu%2FAIEZAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAYOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABkeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAZOkBABIApAAAAAO4ZIlkZEyDgwB8fAABZOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwiJAAMIHEiwoMGDCAkCAJCwYcOFCx1KVAiRocOKFhFivIgxY8GOHimCDCkQ5MGREE%2BaFImSJMqBLUmyrAjz5cORAVpKjIlzIk%2BaE2vyDPpxKNGZHY8a1KlUqE2lP2XejEo06kaOVoFqfJm1ZEykJqmCvWq0aE%2BvT81eHbtTq9qITbfCjUu3rt2BAQEAOw%3D%3D";
defaultSymbols[08] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QwP8AT%2F8AG%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2B4AOtPAIEbAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwhsAAMIHEiwoMGDCBMqXMiwoUOBACJKlPgw4cSLFRFenJjx4EaKHQt%2BjBhS5MiSBEcCQDlQJUuIJ1OqnBkTJs2bHG3i3KlzJ84APn32DFqTKE2WLlEmLbk0ZNOOTzNGrTj1YVWHV19q3cq1q8GAADs%3D";
defaultSymbols[09] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QGP8AFv8AH%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ8QAOsWAIEfAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAYOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABkeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAZOkBABIApAAAAAO4ZIlkZEyDgwB8fAABZOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh5AAMIHEiwoMGDCBMOBKCwoUKGDiMWhChRIoCLFS1izNjwokeODz1SBGlQ5EiSBE2iLGnyJMqWLg%2FCnEkTpsCaOGdOzJkTIc%2BaIX%2BqdCh0o0aeIJEm7bkUJ0mlGYVytGmzYsudIq1mZfnxaMybXSMaDalR68qzaAkGBAA7";
defaultSymbols[10] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QiP8AFf8AH%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2BAAOsVAIEfAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAQOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABEeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAROkBABIApAAAAAO4ZIlkZEyDgwB8fAABROoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh3AAMIHEiwoMGDCBMaBABAocOEDBk%2BnDgwYkOKDy1KxKhQ40WOCDWChChy5EKPJgt6%2FJgywEqWJl%2B2FPgSJsiaNjniLElx50qSPnGGDCr0JNGaB48WVan0Z9KmKJ9CtTh0asSqVjtm1ToVY9ObPlOGFUuV6syRAQEAOw%3D%3D";
defaultSymbols[11] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8Q%2BP8Ao%2F8AF%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2FwAOujAIEXAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAYOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABkeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAZOkBABIApAAAAAO4ZIlkZEyDgwB8fAABZOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh1AAMIHEiwoMGDCBMqXMhQIICGEAk%2BjAgRgEWKDC1qxKhQ40WOBz1uBFlQ5EeSDk2eBKnSI8qWIznCdClz5sqKNmPizDlxJ8%2BeC3%2BKbCiUZseiRhEiTWpw6VClTnVKjMo0JdWbAa4%2Btao1ZtenX02iHEu2rMGAADs%3D";
defaultSymbols[12] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QCP8ApP8AF%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ8AAOukAIEXAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAQOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABEeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAROkBABIApAAAAAO4ZIlkZEyDgwB8fAABROoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwh%2BAAMIHEiwoMGDCBMqXEgQgEOHCh8CWCixosGKEg9ixChwo8WGHjMGCCmyI8mTHE2iXPlQJcuVLl%2BejCkzJM2aG2%2FiLDlyp0eQPlMODPoRKNGJF48mJEpxJ8OeMp%2Fq%2FCkVKsqqQ69indpya9acXo3yDGsVItmCY8%2BaVMu2bdWAADs%3D";
defaultSymbols[13] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHo0ACOHAAA2AAB%2BAABIAAAEABUoAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAunQAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFhI%2FwME%2FwAo%2FwAA%2F4AAXTzwABgAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QwP8AT%2F8AG%2F8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAd4YADMcAgAAAAAAAADS4SOkABBKSKAB8AJ%2B4AOtPAIEbAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHCGAOjHABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAYOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABkeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAZOkBABIApAAAAAO4ZIlkZEyDgwB8fAABZOoAABIApAAAAAIAhgAAxwAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwiDAAMIHEiwoMGDAgEgXMhwoMKGEA0CeBix4sSKGC9ijDiR4saFHT1yBNnxYwCNBUOaLJlS5UeXCWFmDPmQpkiINhXaXJlz58aePn8ClclxKEuhRm823JnzJU2HRIsePRkV51SqKGdmhaqUYVWqPLsmdCrWZEyzXsua3Yo2ZVuQb%2BOaDAgAOw%3D%3D";
defaultSymbols[14] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHg0ACOHAAA2AAB%2BAADaAAAEABUeAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAungAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFja%2FwME%2FwAe%2FwAA%2F%2BAAXefwABUAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QaP8Alf8AFf8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAdxoADOsAgAAAAAAAADS42ukABBKSHgB8AJ9gAOuVAIEVAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHAaAOjrABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAOOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAAA8eAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAPOkBABIApAAAAAO4ZIlkZEyDgwB8fAABPOoAABIApAAAAAIAGgAA6wAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwiDAAMIHEiwoMGDAA4qXFgQgEOGEBs6nBgx4sSLCSsqxIhRo0SOHT0GAEnSI8mTJk9SHJmxokqJKTkibGkx5MyYNG9qfFgzpcucDHlCFNpz40OiQ4Gi3ElTJdCFRJ36HPhyqsCqTD9eFHn1KVeWNr92BSmW6lKxUsumVUu2LMGwbuMeDAgAOw%3D%3D";
defaultSymbols[15] = "data:image/gif;base64,R0lGODlhIAAgAPcAAAQCBPz%2B%2FAAANwAAfkOsAB3pAAASAAAAAHg0ACOHAAA2AAB%2BAADaAAAEABUeAAAAAAkPAAAAAAAAAAAAAAAAyAIA6gAAEgAAAAAAcwEA5AAAkQAAfPwbAOjlABI6FQB3AOnNGOWrAIG6AHzcAAAAMAAAeAEAegAAAFboDwDpAAASAAAAAAQbAOjlABI6AAB3AHMUAADqAAASAAAAACQWG%2BmI5RI2AQB%2BACAAAungAJH9AHx%2FAGAUFADq6pISEnwAAP9a3P%2BIrv82N%2F9%2Bfl3UCADp65ISEnwAAIUqIOeI6YE2kXx%2BfAAAYAAAABUAkgAAfFja%2FwME%2FwAe%2FwAA%2F%2BAAXefwABUAkgAAfBAU%2BmcAmRUAgAAAfAABAAAAAAAAFQAAAH4AAAAAAAAAAMAAAAAADQAAmgAAgAAAfP8QSP8Aj%2F8AFv8AAP8AAf8AAP8AAP8AAABkAQDsAAASAAAAAAAAEAAA6wAAEgAAAAAE3ADq4hUSOgAAdxoADOsAgAAAAAAAADS42ukABBKSHgB8AJ9AAOuPAIEWAHwAAEvQB%2BPqAIESAHwAAEBBAHgAAFCSAAB8ABDoAGcGAAEVFQAAAGtdAAAAAACSAAB8AHAaAOjrABIAAAAAADRMAADqAAASAMAAAKy1APsrABKDAAB8ACAAQOkAAJEApHwAAGAAAAAAAJIAAHwAAP8AAP8AAP8AAP8AAF0AkwABAJIAAHwAAOoZk%2FQsAICDAHx8AABw%2FADq8BUSEgAAAAD0%2FwAr%2FwCD%2FwB8%2FxAAAGcAABUAAAAAAABEeAEA6wCkEgAAAABkxgBkPACDTAB8APf%2FWPT%2F64D%2FEnz%2FAFx0d%2BrrEBISTwAAABCdjGdk6xWDEgB8AAFgZAAtZABPgwAAfAB0m%2Bo27RJPEgAAAAIAawAB%2FwAA%2FwAAfxtwCOXq7ToSEncAAMQAROkBABIApAAAAAO4ZIlkZEyDgwB8fAABROoAABIApAAAAAIAGgAA6wAwAAAAALQPAOkAABIAAAAAAAAAtgAA6gAARwAAACH5BAEAAAAALAAAAAAgACAABwhsAAMIHEiwoMGDCBMqXAigocOHECNKJCixosWHFC9qjJhxo0cAHT9qDCnSIsmSEweiHKlypcmWLlMKjFnxJE2QMG86tEmTZ0yfLoGuFIqSaEmjIpF%2BVOqR6UanLGfqxJhzKtSLV18u3Mq1a9eAADs%3D";
var defaultNames = new Array(
	"Drop", "Latin Cross", "Taijitu (Ying Yang)", "Circle",
	"Diamonds", "Bowen Knot", "Check Mark (Yes)", "Cross Mark (No)",
	"Arrow", "Star", "Thumbs Up", "Triangle",
	"Heart", "Lightning", "Notes", "Square"
);
var defaultColors = new Array('red', 'orange', 'green', 'blue', 'black');

loadConfig();

var pwds = document.getElementsByTagName('input');
for (var i = 0; i < pwds.length; i++)
{
	if (pwds[i].type == 'password')
	{
		createHashContainer();
		injectCSS();

		wrapPasswordField(pwds[i]);
	}
}

function loadConfig()
{
	displayedSymbols = GM_getValue('NumberOfDisplayedSymbols', null);
	if (displayedSymbols == null)
	{
		displayedSymbols = defaultDisplayedSymbols;
		GM_setValue('NumberOfDisplayedSymbols', defaultDisplayedSymbols);
	}
	
	
	symbols = GM_getValue('Symbols', null);
	if (symbols == null || symbols.length == 0)
	{
		symbols = defaultSymbols;
		GM_setValue('Symbols', defaultSymbols.join('|'));
	}
	else
	{
		symbols = symbols.split('|');
	}
	
	
	names = GM_getValue('SymbolNames', null);
	if (names == null || names.length == 0)
	{
		names = defaultNames;
		GM_setValue('SymbolNames', defaultNames.join('|'));
	}
	else
	{
		names = names.split('|');
	}
	
	
	colors = GM_getValue('Colors', null);
	if (colors == null || colors.length == 0)
	{
		colors = defaultColors;
		GM_setValue('Colors', defaultColors.join('|'));
	}
	else
	{
		colors = colors.split('|');
	}
}

function injectCSS()
{
	if (cssinjected) return;
	cssinjected = true;
	
	var head = document.getElementsByTagName('head')[0];
	var mycss = document.createElement('style');
	mycss.type = 'text/css';
	mycss.innerHTML = 
'div.visualpasswordhash span\
{\
  margin: 2px;\
}\
div.visualpasswordhash\
{\
	position: absolute;\
	visibility: hidden;\
	background: white;\
	padding: 4px 4px 4px 4px;\
	border: 3px solid black;\
	z-index: 1000;\
	-moz-border-radius: 8px;\
}\
div.visualpasswordhash.on\
{\
	visibility: visible;\
}';
	head.appendChild(mycss);
}

function createHashContainer()
{
	if (document.getElementById('visualpasswordhash') != null) return;

	var myelement = document.createElement('div');
	myelement.id = "visualpasswordhash";
	myelement.className = "visualpasswordhash";
	myelement.innerHTML =
'<span style="background: black; display: inline-block; height: 18px;">\
	<img height="18" alt="" title="" id="vpwdhash_icon1" src="sym0.gif"/>\
</span>\
<span style="background: black; display: inline-block; height: 18px;">\
	<img height="18" alt="" title="" id="vpwdhash_icon2" src="sym1.gif"/>\
</span>\
<span style="background: black; display: inline-block; height: 18px;">\
	<img height="18" alt="" title="" id="vpwdhash_icon3" src="sym2.gif"/>\
</span>'
	document.getElementsByTagName('body')[0].appendChild(myelement)
	
	setSymbol(document.getElementById('vpwdhash_icon1'), 0);
	setSymbol(document.getElementById('vpwdhash_icon2'), 1);
	setSymbol(document.getElementById('vpwdhash_icon3'), 2);
}

function wrapPasswordField(field)
{
	field.addEventListener("keyup", function() {passwordChanged(field);}, true);
	field.addEventListener("focus", function() {positionHashContainer(field); showHash();}, false);
	field.addEventListener("blur", function() {hideHash();}, false);
}

function positionHashContainer(pwdfield)
{
	var hashelement = document.getElementById('visualpasswordhash');
	hashelement.style.top = (findPosY(pwdfield) + pwdfield.offsetHeight) + "px";
	hashelement.style.left = (findPosX(pwdfield)) + "px";
}

function findPosX(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
		} while (obj = obj.offsetParent);
		return curleft;
	}
}
function findPosY(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
		return curtop;
	}
}

function showHash()
{
	document.getElementById('visualpasswordhash').className = "visualpasswordhash on";
}

function hideHash()
{
	document.getElementById('visualpasswordhash').className = "visualpasswordhash";
}

function passwordChanged(field)
{
	positionHashContainer(field);
	showHash();
	
	var pwd = field.value;

	if (pwd.length >= 5)
	{
		var hash = SHA256(pwd);

		setSymbol(document.getElementById('vpwdhash_icon1'), parseInt("0x" + hash.substring(4,6)) % symbols.length);
		setSymbol(document.getElementById('vpwdhash_icon2'), parseInt("0x" + hash.substring(7,9)) % symbols.length);
		setSymbol(document.getElementById('vpwdhash_icon3'), parseInt("0x" + hash.substring(23,25)) % symbols.length);

		var sum = parseInt("0x" + hash) % (colors.length * colors.length * colors.length);
		document.getElementById('vpwdhash_icon1').parentNode.style.background = colors[/*(sum / colors.length / colors.length)*/parseInt("0x" + hash.substring(6,7)) % colors.length];
		document.getElementById('vpwdhash_icon2').parentNode.style.background = colors[/*(sum / colors.length)*/parseInt("0x" + hash.substring(9,10)) % colors.length];
		document.getElementById('vpwdhash_icon3').parentNode.style.background = colors[/*sum*/parseInt("0x" + hash.substring(25,26)) % colors.length];
	}
	else
	{
		setSymbol(document.getElementById('vpwdhash_icon1'), Math.floor(Math.random() * symbols.length));
		setSymbol(document.getElementById('vpwdhash_icon2'), Math.floor(Math.random() * symbols.length));
		setSymbol(document.getElementById('vpwdhash_icon3'), Math.floor(Math.random() * symbols.length));

		document.getElementById('vpwdhash_icon1').parentNode.style.background = colors[Math.floor(Math.random() * colors.length)];
		document.getElementById('vpwdhash_icon2').parentNode.style.background = colors[Math.floor(Math.random() * colors.length)];
		document.getElementById('vpwdhash_icon3').parentNode.style.background = colors[Math.floor(Math.random() * colors.length)];
	}
}

function setSymbol(node, symbol)
{
	//alert(names[symbol]);
	node.src = symbols[symbol];
	node.title = names[symbol];
	node.alt = names[symbol];
}

function SHA256(s){
 
	var chrsz   = 8;
	var hexcase = 0;
 
	function safe_add (x, y) {
		var lsw = (x & 0xFFFF) + (y & 0xFFFF);
		var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
		return (msw << 16) | (lsw & 0xFFFF);
	}
 
	function S (X, n) { return ( X >>> n ) | (X << (32 - n)); }
	function R (X, n) { return ( X >>> n ); }
	function Ch(x, y, z) { return ((x & y) ^ ((~x) & z)); }
	function Maj(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); }
	function Sigma0256(x) { return (S(x, 2) ^ S(x, 13) ^ S(x, 22)); }
	function Sigma1256(x) { return (S(x, 6) ^ S(x, 11) ^ S(x, 25)); }
	function Gamma0256(x) { return (S(x, 7) ^ S(x, 18) ^ R(x, 3)); }
	function Gamma1256(x) { return (S(x, 17) ^ S(x, 19) ^ R(x, 10)); }
 
	function core_sha256 (m, l) {
		var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2);
		var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);
		var W = new Array(64);
		var a, b, c, d, e, f, g, h, i, j;
		var T1, T2;
 
		m[l >> 5] |= 0x80 << (24 - l % 32);
		m[((l + 64 >> 9) << 4) + 15] = l;
 
		for ( var i = 0; i<m.length; i+=16 ) {
			a = HASH[0];
			b = HASH[1];
			c = HASH[2];
			d = HASH[3];
			e = HASH[4];
			f = HASH[5];
			g = HASH[6];
			h = HASH[7];
 
			for ( var j = 0; j<64; j++) {
				if (j < 16) W[j] = m[j + i];
				else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]);
 
				T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]);
				T2 = safe_add(Sigma0256(a), Maj(a, b, c));
 
				h = g;
				g = f;
				f = e;
				e = safe_add(d, T1);
				d = c;
				c = b;
				b = a;
				a = safe_add(T1, T2);
			}
 
			HASH[0] = safe_add(a, HASH[0]);
			HASH[1] = safe_add(b, HASH[1]);
			HASH[2] = safe_add(c, HASH[2]);
			HASH[3] = safe_add(d, HASH[3]);
			HASH[4] = safe_add(e, HASH[4]);
			HASH[5] = safe_add(f, HASH[5]);
			HASH[6] = safe_add(g, HASH[6]);
			HASH[7] = safe_add(h, HASH[7]);
		}
		return HASH;
	}
 
	function str2binb (str) {
		var bin = Array();
		var mask = (1 << chrsz) - 1;
		for(var i = 0; i < str.length * chrsz; i += chrsz) {
			bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);
		}
		return bin;
	}
 
	function Utf8Encode(string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	}
 
	function binb2hex (binarray) {
		var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
		var str = "";
		for(var i = 0; i < binarray.length * 4; i++) {
			str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
			hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
		}
		return str;
	}
 
	s = Utf8Encode(s);
	return binb2hex(core_sha256(str2binb(s), s.length * chrsz));
 
}