#!/usr/local/bin/perl@l=(	 0, 1, 2, 3, 4, 5, 6, 7,	 8, 9,10,11,12,13,14,15,	16,17,18,19,20,21,22,23,	24,25,26,27,28,29,30,31	);@r=(	32,33,34,35,36,37,38,39,	40,41,42,43,44,45,46,47,	48,49,50,51,52,53,54,55,	56,57,58,59,60,61,62,63	);require 'shifts.pl';sub PERM_OP	{	local(*a,*b,*t,$n,$m)=@_;	@z=&shift(*a,-$n);	@z=&xor(*b,*z);	@z=&and(*z,$m);	@b=&xor(*b,*z);	@z=&shift(*z,$n);	@a=&xor(*a,*z);	}sub HPERM_OP2	{	local(*a,*t,$n,$m)=@_;	local(@x,@y,$i);	@z=&shift(*a,16-$n);	@z=&xor(*a,*z);	@z=&and(*z,$m);	@a=&xor(*a,*z);	@z=&shift(*z,$n-16);	@a=&xor(*a,*z);	}sub HPERM_OP        {        local(*a,*t,$n,$m)=@_;        local(@x,@y,$i);        for ($i=0; $i<16; $i++)                {                $x[$i]=$a[$i];                $y[$i]=$a[16+$i];                }        @z=&shift(*x,-$n);        @z=&xor(*y,*z);        @z=&and(*z,$m);        @y=&xor(*y,*z);        @z=&shift(*z,$n);        @x=&xor(*x,*z);        for ($i=0; $i<16; $i++)                {                $a[$i]=$x[$i];                $a[16+$i]=$y[$i];                }        }@L=@l;@R=@r;	print "---\n"; &printit(@R);&PERM_OP(*R,*L,*T,4,0x0f0f0f0f);	print "---\n"; &printit(@R);&HPERM_OP2(*L,*T,-2,0xcccc0000);&HPERM_OP2(*R,*T,-2,0xcccc0000);	print "---\n"; &printit(@R);&PERM_OP(*R,*L,*T,1,0x55555555);	print "---\n"; &printit(@R);&PERM_OP(*L,*R,*T,8,0x00ff00ff);	print "---\n"; &printit(@R);&PERM_OP(*R,*L,*T,1,0x55555555);	print "---\n"; &printit(@R);#	&printit(@L);	&printit(@R);print <<"EOF";==============================63  55  47  39  31  23  15   7  62  54  46  38  30  22  14   6  61  53  45  37  29  21  13   5  60  52  44  36  --  --  --  --  57  49  41  33  25  17   9   1  58  50  42  34  26  18  10   2  59  51  43  35  27  19  11   3  28  20  12   4  --  --  --  --  EOFexit(1);@A=&and(*R,0x000000ff);@A=&shift(*A,16);@B=&and(*R,0x0000ff00);@C=&and(*R,0x00ff0000);@C=&shift(*C,-16);@D=&and(*L,0xf0000000);@D=&shift(*D,-4);@A=&or(*A,*B);@B=&or(*D,*C);@R=&or(*A,*B);@L=&and(*L,0x0fffffff);	&printit(@L);	&printit(@R);