Счетчик посещений

Автор: manager Среда, Апрель 2nd, 2008 Нет комментариев

Рубрика: CGI-программирование

Наверное тоже одним из часто встречающихся приложений CGI являются счетчики посещений. Они стоят практически на каждой страничке, возможно даже и у вас. Но иногда вас не устраивает тот факт, что счетчик лежит где-то в другом месте.Из-за этого скажем невозможно начать счет с произвольного числа.Или еще некоторые счетчики по разному фильтруют ‘Reload’. Да и мало ли? Ну а иногда вам хочется просто сделать другой дизайн цифр. То если вы CGI-програмист то возможно имеет смысл написать свой счетчик. И делать с ним что захочется. Вот я так-же написал…..

Скрипт данного счетчика обслужевает несколько счетчиков ,им вы присваиваете идентификаторы. Поэтому вы спокойно можете втыкать независимые счетчики в разные страницы сайта и даже давать это делать друзьям. В общем он прост в использовании:<IMG src=»cgi-bin/counter.cgi?id=name«>, Гдеname -любое уникальное имя идентифицирующее счетчик.Вытакже можете задать необязательный параметр dig который задает количество цифр в счетчике ,Например:
<IMG src=»cgi-bin/counter.cgi?id=doom2&dig=9″>.

Получится примерно вот так:

.gif‘ы в счетчике с прозрачными областями.Что дает дополнительную гибкость к примеру для улучшения внешнего вида с помощью другого фона его иногда имеет смысл запихнуть в «таблицу»:

<TABLE><TR><TD bgcolor=»white»><IMG src=»counter.gif»></TD></TR></TABLE>

Свои данные он пишет примерно в такой файл counter.dat:

doom2
4 127.0.0.1 906992351
quake2
1 127.0.0.1 906992700
quake
3 127.0.0.1 906992668
doom
1 127.0.0.1 906991960

Вы спросите,зачем столько информации? Чтобы отфильтровывать нажатия Reload. Если с одного IP-адреса между заходами промежуток меньше чем 30 секунд,то счетчик не инкрементируется (Так например поступает счетчик в Rambler‘е).
Теперь об исходнике.Скрипт получился великоват,потому,что я вместо чтения из файлов решил .gif‘ы запихнуть в сам скрипт.Выглядит громоздко , затопашет как трактор ;) )!!

#!/usr/bin/perl
#counter.cgi
$gifheader="GIF89a";
#Использую 14x16 .gif
$digx_size=14;
$digy_size=16;
$datafile="counter.dat";
######################################################
$GifData[0]=
"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\x8B\x03\x03\x7F\x03\x03\x9B\x03\x03\xA7".
"\x03\x03\x5B\x03\x03g\x03\x03\xBF\x03\x03s\x03\x03\xB3\x03\x03O\x03\x03\xCB\x03\x03\xFF\xB7\xB7\x3F\x2B\x1BG3\x23".
"\xF3\xA3\xA3\xEB\x97\x97O\x3B\x2B\xF7\xAB\xAB\xDF\x87\x87\xE7\x8F\x8F\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".
"W\xDB\x7B\x7B\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\xB3OO\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".
"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07\x97\x2F\x2FG\x03\x03C\x03\x03\xFF\xEB\xDF".
"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".
"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".
"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".
"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".
"\xA7\x9F\x9F\x9F\x97\x97\x97\x17\x1F\x07\x2F7\x1F\x0F\x17\x03\x23\x2B\x0F\x07\x07\x07oookkkccc\x5B".
"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x13\x13\x13\x27\x27\x27\x23\x23\x23w\xFFo".
"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x1B\x1B".
"\x1B\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".
"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".
"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".
"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".
"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".
"\xEF\x03\x03\xE3\x03\x03\xD7\x03\x03\x83\x83\x83\x0B\x0B\x0B\x7F\x7F\x7F\xFF\xFF\xFFKKK\x17\x0F\x07\x1F\x17\x0Bww".
"w\x93\x93\x93\x8B\x8B\x8BO\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".
"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".
"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".
"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".
"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".
"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".
"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".
"\x94\x00\x03\x08\x0C\x00\xA0\x60\xC1\x81\x08\x0B\x12\x28\xB0\x60\x40\x81\x83\x03\x01\x1C\x28\xA0\xC0\xE1\x01\x05\x06\x0E\x00\x88".
"h\xC0\x00\x81\x01\x03\x10\x20H\xF0P\x00A\x02\x1D\x09\x20\x00\xC0\xE0\x00I\x02\x1B\x01\x60\x1C\x00S\x00\x80\x91".
"\x05\x06\x00\xB0y\xC0\x00\xCD\x98\x0A\x16\x14\xA8\x291\xA7N\x82\x0A\x12\xFC\xE4i4\x26\x81\x069w\xCA4\xD0".
"\xD0\x29I\x9D6Q6\x7C\xD8\xF0\xE5\xCE\x93\x0B\x3E\xA6L\x60\x60\xA7I\x96\x08\x14\x20\x28\xE0\x91\x80F\x93\x02".
"\x0B\x228\x10R\xA3Y\x846\x0D\x9A\x85\x8B0\x80\x80\xBF\x7F\x11\x06\x04\x00\x3B";
$GifData[1]=
"GIF89a\x0B\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\xBF\x03\x03\x8B\x03\x03\xCB\x03\x03\x9B".
"\x03\x03\xA7\x03\x03\xB3\x03\x03\x7F\x03\x03\xD7\x03\x03s\x03\x03G3\x23\x3F\x2B\x1B\x0F\x17\x03O\x3B\x2B\xFF\xB7\xB7".
"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".
"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".
"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".
"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".
"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".
"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".
"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".
"\xA7\x9F\x9F\x9F\x23\x2B\x0F\x93\x93\x93\x2F7\x1F\x83\x83\x83\x7F\x7F\x7F\x17\x1F\x07oookkkccc\x5B".
"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x07\x07\x07\x27\x27\x27\x23\x23\x23w\xFFo".
"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x0B\x0B".
"\x0B\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".
"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".
"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".
"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".
"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".
"\xEF\x03\x03\xE3\x03\x03www\x13\x13\x13\x1B\x1B\x1B\xFF\xFF\xFFKKK\x17\x0F\x07\x1F\x17\x0B\x97\x97\x97\x8B\x8B".
"\x8Bg\x03\x03\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".
"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".
"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".
"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".
"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".
"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".
"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0B\x00\x10\x00\x00\x08".
"g\x00\x03\x08\x04\x40\xB0\x20\x00\x81\x01\x00\x1C\x40P\xA0\x80\x82\x03\x00\x04\x24\x24p\xC0\xC0\x80\x01\x08\x08D\x04".
"\x40\x80\xE2\x81\x86\x034\x0A0\xC8\xB0\x40\xC8\x88\x01\x04\x8C\xFC\xD8P\x24B\x85\x03Z\xA2\x1Ch\xF1\xA2K\x9A".
"\x17OJ\xC4isf\xC2\x9A\x03\x12\xF8\x04\x60\x00\x81Q\xA1\x3B\x7F\x22\xB8\x88\xF4\x25\x01\x03\x1D\x17\x0C5H".
"0iJ\x95X\x05\x04\x04\x00\x3B";
$GifData[2]=
"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\x7F\x03\x03\xA7\x03\x03\x9B\x03\x03\xB3".
"\x03\x03\xBF\x03\x03\x8B\x03\x03\xEF\x03\x03\xCB\x03\x03s\x03\x03\xD7\x03\x03\xE3\x03\x03g\x03\x03\xFF\xB7\xB7\xF7\xAB\xAB".
"\xF3\xA3\xA3\x3F\x2B\x1B\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".
"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".
"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".
"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".
"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".
"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".
"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".
"\xA7\x9F\x9F\x9F\x2F7\x1FO\x3B\x2B\x0F\x17\x03G3\x23\x7F\x7F\x7F\x23\x2B\x0Foookkkccc\x5B".
"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x0B\x0B\x0B\x27\x27\x27\x23\x23\x23w\xFFo".
"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x13\x13".
"\x13\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".
"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".
"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".
"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".
"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".
"\x17\x1F\x07\x83\x83\x83\x07\x07\x07www\x1B\x1B\x1B\xFF\xFF\xFFKKK\x17\x0F\x07\x1F\x17\x0B\x97\x97\x97\x93\x93".
"\x93\x8B\x8B\x8B\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".
"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".
"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".
"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".
"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".
"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".
"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".
"\x8F\x00\x03\x00\x18Hp\x60\x80\x83\x08\x01\x20\x20\xC0\x40\x81\x02\x03\x04\x1C\x00\x40\x28p\xC0B\x03\x05\x0AX\x1C".
"0\xF1\x20\x80\x05\x08\x16\x0C\x18\xB0\x20\xE3\x01\x8E\x1E\x0B\x0E\x1C\x40\xE0\x40\x01\x00\x02\x0E\x0AP9\xC0\x80\x82\x97".
"1\x2B\x2Ah\xD0\xF0\xC0\x01\x03\x1Cc\x02\x18P\x00\x28\x01\x03\x3E\x83\xCE\x24z\xD4\x81\xC5\x900\x85b\xD4\xA8".
"R\x40N\x00\x10\x09pT\xD9\x11\x00\x81\xA3\x04\x12\x88\x15k\x00\xA6\xC0\xAF\x07Z\xFAd\xD0\x00g\xC5\x91\x20".
"\x11\x14\xF8\x8A\xC0\x2CW\xAE9\xAD\xEA\xDD\xAB7\x40\x40\x00\x3B";
$GifData[3]=
"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2Fs\x03\x03\xBF\x03\x03\xB3\x03\x03\xE3".
"\x03\x03\xCB\x03\x03\x8B\x03\x03\x9B\x03\x03\xD7\x03\x03\xEF\x03\x03\xA7\x03\x03g\x03\x03\x7F\x03\x03G3\x23\xFF\xB7\xB7".
"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".
"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3BO\x3B\x2B\x3F\x2B\x1B\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".
"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".
"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\x9B33\x97\x2F\x2F\xFF\xCF\xB3\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".
"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".
"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".
"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".
"\xA7\x9F\x9F\x9F\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xFF\xFF\x83\x83\x83\x17\x1F\x07\x0F\x17\x03oookkkccc\x5B".
"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x17\x0F\x07\x27\x27\x27\x23\x23\x23w\xFFo".
"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x1F\x17".
"\x0B\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".
"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".
"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".
"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".
"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".
"\x7F\x7F\x7F\x23\x2B\x0F\x2F7\x1F\x07\x07\x07\x0B\x0B\x0B\x13\x13\x13www\x1B\x1B\x1BKKK\x97\x97\x97\x93\x93".
"\x93\x8B\x8B\x8B\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".
"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".
"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".
"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".
"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".
"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".
"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".
"\x85\x00\x01\x08\x1C80\x80A\x83\x00\x10\x280\xC0\xF0\x00\x81\x01\x02\x0F\x02p\xC0\xA0\x40\x01\x02\x16\x19\x24h".
"\x00\x00\xE1\x80\x8F\x20\x07\x10\x20\x90\x00\x80\x80\x00\x04\x09\x128\x90\x00\xA2A\x01\x02R\xAEd\x80\xC0\xA4\xC4\x03".
"\x0D\x09\x28\x20P\xF3\x24\xC2\x91\x16u\xF2\xB4\xE9\xF1\x23\x82\x02\x06\x86\xFAD\xA9\xD2\x40\x81\x9E\x29\x07\x12H\xCA".
"1f\x81\x05X\x15\x1Cp\xA8\xA0\x24L\x00\x09\x82Z\xBC\xB8\xD1\x26\x80\x90\x21\x05\xC2d\x1A\xD5\xE4\xDA\x970".
"\xE3\xC6\x3D\x18\x20\x20\x00\x3B";
$GifData[4]=
"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\x7F\x03\x03s\x03\x03\x8B\x03\x03g".
"\x03\x03\xA7\x03\x03\x9B\x03\x03\xB3\x03\x03\xBF\x03\x03\xD7\x03\x03\xE3\x03\x03\xEF\x03\x03S\x07\x07\x5B\x03\x03C\x03\x03".
"\xCBkk\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xF7\xAB\xAB\xFF\xB7\xB7\xDB\x7B\x7B\xF3\xA3\xA3\xC7cc\xBF\x5B\x5B\xBBW".
"W\xB3OO\xD3ss\xA7\x3F\x3F\xAFGG\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".
"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07\xA3\x3B\x3BO\x03\x03G\x03\x03\x83\x83\x83\xFF\xEB\xDF".
"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".
"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".
"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".
"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".
"\xA7\x9F\x9F\x9F\x97\x97\x97\x0F\x17\x03G3\x23\x3F\x2B\x1B\x7F\x7F\x7FwwwoooO\x3B\x2Bccc\x5B".
"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x23\x2B\x0F\x27\x27\x27\x23\x23\x23w\xFFo".
"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x2F7".
"\x1F\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".
"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".
"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".
"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".
"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".
"\x17\x1F\x07kkk\x07\x07\x07\xCB\x03\x03\x0B\x0B\x0B\x13\x13\x13\x1B\x1B\x1B\xFF\xFF\xFFKKK\x17\x0F\x07\x1F\x17".
"\x0B\x93\x93\x93\x8B\x8B\x8BO\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".
"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".
"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".
"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".
"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".
"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".
"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".
"\x8B\x00\x01\x08\x1C\x18\x60\x20A\x00\x05\x184H\x00\xA0\xE0\x81\x05\x0B\x10\x00\x10\x00\x60\x40\x82\x04\x05\x1AV\x3C".
"\x80\x20\x23\xC5\x01\x07\x0E\x0C\xD08\x00A\xC7\x89\x08C\x8E\x2C8\xA0\x40\x81\x91\x14\x0B\x98\x1C\x29\x90\x40K\x98".
"\x08\x2F\x16H\x10\x92\x80O\x9C\x05\x14\x28\xE0\xF8r\x80O\x03\x28\x83\xF2\x1C\x60\xC0\xC0O\xA4\x14\x0D\x0Et\xCA".
"tb\x80\x00\x02\xB2f\x05\x40\x95\x80\xD5\xAB\x60\x0BR\x85\x1A\x16\x2CW\x02\x05\xBC\x0A\x28\x7B\x15\x80\x83\x07\x04".
"\x0C\x40X\xCBV\xEAW\xB6Z\xB5\x06\x04\x00\x3B";
$GifData[5]=
"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x2F\x2F\x2F\x03\xFF\xFF\x7F\x03\x03\x9B\x03\x03\xA7\x03\x03\x8B".
"\x03\x03s\x03\x03\xBF\x03\x03\xB3\x03\x03\xD7\x03\x03\xCB\x03\x03\xEF\x03\x03\xE3\x03\x03\x3F\x2B\x1B\x23\x2B\x0F\xFF\xB7\xB7".
"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".
"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".
"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".
"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".
"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".
"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".
"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".
"\xA7\x9F\x9F\x9F\x1B\x1B\x1B\x17\x1F\x07O\x3B\x2BG3\x23\x7F\x7F\x7Fwwwoookkkccc\x5B".
"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777KKK\x27\x27\x27\x23\x23\x23w\xFFo".
"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x17\x0F".
"\x07\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".
"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".
"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".
"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".
"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".
"\x0F\x17\x03\x0B\x0B\x0B\x2F7\x1F\x13\x13\x13\x07\x07\x07\x93\x93\x93\xFF\xFF\xFF\x1F\x17\x0B\x83\x83\x83\x97\x97\x97\x8B\x8B".
"\x8Bg\x03\x03\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".
"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".
"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".
"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".
"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".
"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".
"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x02\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".
"\x8D\x00\x01\x08\x1CHP\xA0\x00\x01\x00\x0E\x20\x28\x90\x60\x81\x82\x87\x05\x0C\x00\x08\x80P\xE1\x00\x02\x04\x06\x18\x88".
"8\x60\x22\xC2\x01\x08\x08\x1C\x18p\xA0\xA4\x81\x03\x1E\x01\x10\x40\xD0\xB1\xA0\x40\x8A\x2A\x17\xB4\x24\x18\xA0\xE6\xC7\x04".
"\x08\x1C6P\xC0\x12\xC0\xC1\x8A\x08\x10\x24\x88\xC80\xA3\xCF\x8A\x07\x0C\x18\x20i\x60\xA8\xD1\x835\x0B\x5E\x24\x90".
"\x60\xA2K\x81\x03\x0A0\xB4\x9A\x80\x81W\x06\x0B6\x260\x1A\x40\xE5\xCE\xA0\x18\x0B\xF4\x8C\xBA\xB1\x00\x01\xA5\x24".
"\x3B\xDA\xBC\xFA\xD2\x26\xD4\x9Ax\xF1\xFE\x14\x10\x10\x00\x3B";
$GifData[6]=
"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\xBF\x03\x03s\x03\x03\x8B\x03\x03\x9B".
"\x03\x03\xA7\x03\x03\xB3\x03\x03g\x03\x03\xCB\x03\x03\xD7\x03\x03\x7F\x03\x03\xE3\x03\x03\xFF\xB7\xB7\x3F\x2B\x1B\xF7\xAB\xAB".
"G3\x23\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".
"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".
"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".
"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".
"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".
"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".
"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".
"\xA7\x9F\x9F\x9F\x0F\x17\x03\x17\x1F\x07O\x3B\x2B\x83\x83\x83\x23\x2B\x0Fwwwoookkkccc\x5B".
"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x17\x0F\x07\x27\x27\x27\x23\x23\x23w\xFFo".
"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x1F\x17".
"\x0B\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".
"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".
"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".
"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".
"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".
"\xEF\x03\x03\x2F7\x1F\xFF\xFF\xFF\x7F\x7F\x7F\x07\x07\x07\x0B\x0B\x0B\x13\x13\x13\x1B\x1B\x1BKKK\x97\x97\x97\x93\x93".
"\x93\x8B\x8B\x8B\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".
"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".
"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".
"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".
"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".
"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".
"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".
"\x93\x00\x03\x08\x0C\x00\xA0\xA0A\x83\x03\x0B\x12\x18\xA0\x60\x81\xC3\x01\x05\x00\x08\x20\x98\xC0\xC0\x01\x04\x08\x0E\x1C\x28".
"\xC0\x80\x81D\x82\x06\x06\x0C\x20\x40\xB2\x24\x01\x89\x00\x08\x18P0\xE0\xE0A\x01\x00\x0A\x1C\x60\xE9R\x80M\x98".
"\x05\x06\x2C\x60\xD8\x40\xE4\x81\x82\x02c\xEA\x1C\x80\xD1\xA2\xC5\x88\x04s6\x40P\x80\x24\x83\xA3\x28\x0B\x20\xE8y".
"\xB0\x80\x81\x880\x13\x0C\xA0j\xD0\x2AV\x90\x3B\x15\x288\x60\x80\x40\x81\xAF\x00\x2A\x12E\xC0\x80d\x82\x93\x13".
"\x09\xA6t\x9B\x20AA\x9B\x03a\xD6\xC4\x3BP\xE0\xCD\x9B\x03\x03\x02\x00\x3B";
$GifData[7]=
"GIF89a\x0E\x00\x10\x00\xEF\x00\x00\x03\xFF\xFFC\x03\x03\x2F\x2F\x2F\x8B\x03\x03s\x03\x03\x9B\x03\x03\xB3".
"\x03\x03\xA7\x03\x03\x7F\x03\x03\xBF\x03\x03g\x03\x03\x0F\x17\x03O\x3B\x2BG3\x23\x3F\x2B\x1B\x7F\x7F\x7F\xFF\xB7\xB7".
"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".
"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".
"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".
"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".
"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".
"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".
"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".
"\xA7\x9F\x9F\x9F\x23\x2B\x0F\x2F7\x1F\x1B\x1B\x1B\x83\x83\x83\x17\x1F\x07wwwoookkkccc\x5B".
"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777KKK\x27\x27\x27\x23\x23\x23w\xFFo".
"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x17\x0F".
"\x07\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".
"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".
"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".
"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".
"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".
"\xEF\x03\x03\xE3\x03\x03\xD7\x03\x03\xCB\x03\x03\x07\x07\x07\x0B\x0B\x0B\x13\x13\x13\xFF\xFF\xFF\x1F\x17\x0B\x97\x97\x97\x93\x93".
"\x93\x8B\x8B\x8B\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".
"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".
"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".
"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".
"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".
"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".
"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".
"l\x00\x03\x08\x1C8\x10\x80A\x83\x01\x10\x14H\xC0\xF0\x40\x01\x02\x02\x0F\x06\x18P\xA0\xC0\x80\x03\x18\x0F\x0C\x80".
"\x88\x90\x80\xC7\x8F\x04\x0CP\x0C\x20\x00\x00A\x82\x16\x0Dp\x04\x20\xA0\xA5\xCB\x00\x29\x0B\x90\x3CH\x13\xE6\x00\x91".
"3i\x22\xD4\x88\xB3\xA4N\x93\x3Ce\xFA\xD49\xF1\xE6\x80\x9CD\x11\x18EZS\xC1M\x04L\x25\x3A5\x00".
"uhM\x90Q\x11\x9E\xB4J\xD3\xA5\xCB\x80\x00\x3B";
$GifData[8]=
"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x9B\x03\x03\x2F\x2F\x2F\x8B\x03\x03s\x03\x03g".
"\x03\x03\xCB\x03\x03\xA7\x03\x03\xB3\x03\x03\xBF\x03\x03\xE3\x03\x03\x5B\x03\x03\xD7\x03\x03\x7F\x03\x03\xCBkk\xFF\xB7\xB7".
"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7BG3\x23\x3F\x2B\x1B\xC7cc\xBF\x5B\x5B\xBBW".
"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\xD3ss\x97\x2F\x2F\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".
"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".
"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\x8F\x2B\x2B\xFF\xBB\x93\xFF\xBF\x9B\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".
"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".
"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".
"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".
"\xA7\x9F\x9F\x9F\x97\x97\x97\x0F\x17\x03\x17\x1F\x07\xFF\xB3\x83\x7F\x7F\x7Fwww\x83\x83\x83O\x3B\x2Bccc\x5B".
"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\x23\x2B\x0F\x27\x27\x27\x23\x23\x23w\xFFo".
"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23\x2F7".
"\x1F\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".
"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".
"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".
"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".
"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".
"\xEF\x03\x03\x07\x07\x07ooo\x0B\x0B\x0B\x13\x13\x13\x1B\x1B\x1B\xFF\xFF\xFFKKK\x17\x0F\x07kkk\x1F\x17".
"\x0B\x93\x93\x93\x8B\x8B\x8BO\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".
"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".
"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".
"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".
"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".
"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".
"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".
"\x95\x00\x03\x08\x04\x40\xB0\x20\x00\x81\x08\x010\x28\x20\x60\xC1\x82\x04\x02\x0A08\x18\x00\x80\x01\x02\x04\x04\x24P".
"\x20\x40\x00F\x03\x07\x010\xCC\x98\xD1\x81\xC7\x88\x00\x06\x88\xF4x\xA0\xA0\x82\x8C\x05RZD\x40\xA0\x25\xC1\x03".
"\x04\x10\x80\x1CP\xF1b\xC3\x06\x1C\x09\xEC\xE4Y1\x27\x82\xA34S\x12\xB5\x28\x00A\x81\xA7\x08\x04\x80\x1Ch".
"\x40\xA3M\x00\x07\x0EH\x0D\x991\xC1\xD5\x03\x09\x12\x10\x90I\x00\xA2\x80\x03\x0B\x0E\x20P\x20VfU\x8Fl".
"\x3BB\xDCY\xF1\xA9\xDD\xBBJ\x07\x1A48\x80\xA8\xC0\xBE\x80\x03\x0B\x0C\x08\x00\x3B";
$GifData[9]=
"GIF89a\x0E\x00\x10\x00\xEF\x00\x00C\x03\x03\x03\xFF\xFF\x2F\x2F\x2F\xB3\x03\x03\x8B\x03\x03s\x03\x03\x9B".
"\x03\x03\xBF\x03\x03g\x03\x03\xCB\x03\x03\xA7\x03\x03\xE3\x03\x03\x7F\x03\x03\xD7\x03\x03\xEF\x03\x03\x2F7\x1F\xFF\xB7\xB7".
"\xF7\xAB\xAB\xF3\xA3\xA3\xEB\x97\x97\xE7\x8F\x8F\xDF\x87\x87\xDB\x7B\x7B\xD3ss\xCBkk\xC7cc\xBF\x5B\x5B\xBBW".
"W\xB3OO\xAFGG\xA7\x3F\x3F\xA3\x3B\x3B\x9B33\x97\x2F\x2F\x8F\x2B\x2B\x8B\x23\x23\x83\x1F\x1F\x7F\x1B\x1Bw".
"\x17\x17s\x13\x13k\x0F\x0Fg\x0B\x0B_\x07\x07\x5B\x07\x07S\x07\x07O\x03\x03G\x03\x03C\x03\x03\xFF\xEB\xDF".
"\xFF\xE3\xD3\xFF\xDB\xC7\xFF\xD3\xBB\xFF\xCF\xB3\xFF\xC7\xA7\xFF\xBF\x9B\xFF\xBB\x93\xFF\xB3\x83\xF7\xAB\x7B\xEF\xA3s\xE7\x9B".
"k\xDF\x93c\xD7\x8B\x5B\xCF\x83S\xCB\x7FO\xBF\x7BK\xB3sG\xABoC\xA3k\x3F\x9Bc\x3B\x8F_7\x87".
"W3\x7FS\x2FwO\x2BkG\x27_C\x23S\x3F\x1FK7\x1B\x3F\x2F\x173\x2B\x13\x2B\x23\x0F\xEF\xEF\xEF".
"\xE7\xE7\xE7\xDF\xDF\xDF\xDB\xDB\xDB\xD3\xD3\xD3\xCB\xCB\xCB\xC7\xC7\xC7\xBF\xBF\xBF\xB7\xB7\xB7\xB3\xB3\xB3\xAB\xAB\xAB\xA7\xA7".
"\xA7\x9F\x9F\x9FG3\x23\x0F\x17\x03O\x3B\x2B\x3F\x2B\x1B\x7F\x7F\x7Fwwwoookkkccc\x5B".
"\x5B\x5BWWWOOOGGGCCC\x3B\x3B\x3B777\xFF\xFF\xFF\x27\x27\x27\x23\x23\x23w\xFFo".
"o\xEFgg\xDF__\xCFW\x5B\xBFOS\xAFGK\x9F\x3FC\x937\x3F\x83\x2F7s\x2B\x2Fc\x23KK".
"K\x1FC\x17\x173\x0F\x13\x23\x0B\x0B\x17\x07\x03\x03\x03\xB7\x9F\x87\xAF\x97\x7F\xA7\x8Fw\x9F\x87o\x9B\x7Fk\x93".
"\x7Bc\x8Bs\x5B\x83kW\x7BcOw_KoWCgS\x3F_K7WC3S\x3F\x2F\x9F\x83c".
"\x8FwS\x83kKw_\x3FgS3\x5BG\x2BO\x3B\x23C3\x1B\x7B\x7FcosWgkO\x5Bc".
"GSW\x3BGO3\x3FG\x2B7\x3F\x27\xFF\xFFs\xEB\xDBW\xD7\xBBC\xC3\x9B\x2F\xAF\x7B\x1F\x9B\x5B\x13\x87".
"C\x07s\x2B\x03\xFF\xFF\xFF\xFF\xDB\xDB\xFF\xBB\xBB\xFF\x9B\x9B\xFF\x7B\x7B\xFF__\xFF\x3F\x3F\xFF\x1F\x1F\xFF\x03\x03".
"\x23\x2B\x0F\x17\x1F\x07\x07\x07\x07\x13\x13\x13\x0B\x0B\x0B\x17\x0F\x07\x1B\x1B\x1B\x83\x83\x83\x1F\x17\x0B\x97\x97\x97\x93\x93".
"\x93\x8B\x8B\x8B\x5B\x03\x03O\x03\x03\x27S\x1B\xE7\xE7\xFF\xC7\xC7\xFF\xAB\xAB\xFF\x8F\x8F\xFFss\xFFSS\xFF7".
"7\xFF\x1B\x1B\xFF\x03\x03\xFF\x03\x03\xE3\x03\x03\xCB\x03\x03\xB3\x03\x03\x9B\x03\x03\x83\x03\x03k\x03\x03S\xFF\xFF\xFF".
"\xFF\xEB\xDB\xFF\xD7\xBB\xFF\xC7\x9B\xFF\xB3\x7B\xFF\xA3\x5B\xFF\x8F\x3B\xFF\x7F\x1B\xF3s\x17\xEBo\x0F\xDFg\x0F\xD7_".
"\x0B\xCBW\x07\xC3O\x03\xB7G\x03\xAFC\x03\xFF\xFF\xFF\xFF\xFF\xD7\xFF\xFF\xB3\xFF\xFF\x8F\xFF\xFFk\xFF\xFFG\xFF".
"\xFF\x23\xFF\xFF\x03\xA7\x3F\x03\x9F7\x03\x93\x2F\x03\x87\x23\x03O\x3B\x27C\x2F\x1B7\x23\x13\x2F\x1B\x0B\x03\x03S".
"\x03\x03G\x03\x03\x3B\x03\x03\x2F\x03\x03\x23\x03\x03\x17\x03\x03\x0B\xBF\xA7\x8F\xFF\x9FC\xFF\xE7K\xFF\x7B\xFF\xFF\x03".
"\xFF\xCF\x03\xCF\x9F\x03\x9Bo\x03k\xA7kk\x21\xF9\x04\x01\x00\x00\x01\x00\x2C\x00\x00\x00\x00\x0E\x00\x10\x00\x00\x08".
"\x8E\x00\x03\x08\x0C\x00\xA0\x60\xC1\x81\x08\x0B\x2AH\x90\xE0\x40\x81\x83\x03\x01\x10P\x60\x40\xC1\x80\x01\x14\x11\x00\x10".
"\x08\x00\xC1D\x03\x0C\x0A\x14\x18p\xC0\x00\x00\x01\x04\x0D\x10Pip\x40\x02\x03\x0FS\xAE\x24\xD02\x81\x02\x9A".
"\x02\x3A\x12\xD89\x60A\xC3\x06\x07p\x12\x2C\xE0\xF1\x22I\xA0B\x09vDP\x80\x00\x83\x05AO\x0E\xCCi".
"\xF0\xE9\x00\x9C\x06\xB3\x02xz\x40cN\x97\x0D\x168\x60x\xA0\x81I\x019\x0D\x185Z\xD2\xEBP\x91p".
"E\x16D\xABT\xEB\x5C\xBA\x02\xD1\xEA\xDD\x8B0\x20\x00\x3B";
######################################################
sub Number2gif{
my($Number,$digits)=@_;
my($Ascii_Num,$Zeropad,$n_gif,$Gif_Answer,$logsrc,$pal);
my($gif_log_scr_packed,$gif_transps,$gif_img_desc,$gif_dat,$packed_was);
$Gif_Answer="$gifheader";  #GIF89a
$logsrc=pack('S2C3',$digx_size*$digits,$digy_size,pack('B8','01100000'),0,0);
$Gif_Answer .=$logsrc;
$Ascii_Num=''.$Number;
$digits=($digits>length($Ascii_Num)?$digits:length($Ascii_Num));
$Zeropad='0' x $digits;
substr($Zeropad,- length($Ascii_Num),length($Ascii_Num))=$Ascii_Num;
$Ascii_Num=$Zeropad;
foreach(0..length($Ascii_Num)-1){
$n_gif=0+substr($Ascii_Num,$_,1);
$pal=substr($GifData[$n_gif],13,256*3);
$gif_log_scr_packed=unpack('B8',substr($GifData[$n_gif],10,1));
$gif_transps=substr($GifData[$n_gif],13+256*3,8);
$gif_img_desc=substr($GifData[$n_gif],13+256*3+8,10);
$gif_dat=substr($GifData[$n_gif],13+256*3+8+10,length($GifData[$n_gif]));
$gif_dat=substr($gif_dat,0,length($gif_dat)-1);
substr($gif_img_desc,1,2)=pack('S',$_*$digx_size);
$packed_was=unpack('B8',substr($gif_img_desc,9,1));
substr($gif_img_desc,9,1)=pack('B8','1'.
substr($packed_was,1,1).
substr($gif_log_scr_packed,4,1).'00'.substr($gif_log_scr_packed,5,3));
$Gif_Answer.=$gif_transps.$gif_img_desc.$pal.$gif_dat;
}
$Gif_Answer.='\x3B';
return $Gif_Answer;
}
######################################################
sub urldecode{
local($val)=@_;
$val=~s/\+/ /g;
$val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge;
return $val;
}
sub debug_err{
open DEBUGFILE,">>debug.txt";
print DEBUGFILE $ENV{'SCRIPT_NAME'}.' '.scalar(localtime).' '.@_."\n";
close DEBUGFILE;
}
$query=$ENV{'QUERY_STRING'};
if($query eq ''){print "Content-Type: image/gif\n\n$GifData[0]";}
else{
@fields=split /&/,$query;
foreach(@fields){
if(/^id=(.*)/){$id=urldecode($1);}
if(/^dig=(.*)/){$dig=urldecode($1);}
}
$digits=$dig;
$digits=9 unless($dig);
$cur_ip=$ENV{'REMOTE_ADDR'};
$cur_time=time;
open DATA,"+<$datafile" || debug_err("Cannot open $datafile $!");
@Dat=<DATA>;
chomp(@Dat);
%Counters=@Dat;
($count,$ip,$t)=split /\s+/,$Counters{$id};
$count++ if(($ip!=$cur_ip)||($cur_time-$t>30));
$ip=$cur_ip;
$t=$cur_time;
$Counters{$id}=join ' ',$count,$ip,$t;
seek DATA,0,0;
foreach(keys %Counters){
print DATA "$_\n";
print DATA "$Counters{$_}\n";
}
truncate(DATA,tell(DATA));
close DATA;
print "Content-Type: image/gif\n\n";
print Number2gif($count,$digits);
}

Если вам циферки не понравились вы их легко сможете заменить.Новые .gif‘ы либо считайте из файла, либо можете продолжить мою традицию и запихнуть их в строку, в чем вам поможет такой скрипт file2str. (Да и еще не забудьте сменить тогда в скрипте константы $digx_size и $digy_size на новый размер цифр.)

#!/usr/bin/perl
#file2str
unless(@ARGV){die "Usage: file2str file strfile\n";}
open F1,"$ARGV[0]" || die "Cannot open $ARGV[0] $!\n";
open F2,">$ARGV[1]" || die "Cannot open $ARGV[1] $!\n";
binmode(F1);
sysread F1,$filedata,-s F1;
close(F1);
for($i=0;$i<=length($filedata)/32;$i++){
$data=substr($filedata,$i*32,32);
$data=~s/(\W)/sprintf("\\x%02X",unpack('C',$1))/eg;
print F2 "\"$data\".(length($data)==32?".":";")."\n";"
}
close(F2);

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты