709 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
		
		
			
		
	
	
			709 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| 
								 | 
							
								subroutine bpdecode300(llr,apmask,maxiterations,decoded,niterations,cw)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! A log-domain belief propagation decoder for the (300,60) code.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								integer, parameter:: N=300, K=60, M=N-K
							 | 
						||
| 
								 | 
							
								integer*1 codeword(N),cw(N),apmask(N)
							 | 
						||
| 
								 | 
							
								integer  colorder(N)
							 | 
						||
| 
								 | 
							
								integer*1 decoded(K)
							 | 
						||
| 
								 | 
							
								integer Nm(5,M)  ! 4, or 5 bits per check 
							 | 
						||
| 
								 | 
							
								integer Mn(7,N)  ! 2, 3, or 7 checks per bit
							 | 
						||
| 
								 | 
							
								integer synd(M)
							 | 
						||
| 
								 | 
							
								real tov(7,N)
							 | 
						||
| 
								 | 
							
								real toc(5,M)
							 | 
						||
| 
								 | 
							
								real tanhtoc(5,M)
							 | 
						||
| 
								 | 
							
								real zn(N)
							 | 
						||
| 
								 | 
							
								real llr(N)
							 | 
						||
| 
								 | 
							
								real Tmn
							 | 
						||
| 
								 | 
							
								integer nrw(M)
							 | 
						||
| 
								 | 
							
								integer ncw(N)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								data colorder/    &
							 | 
						||
| 
								 | 
							
								0,1,2,3,4,5,6,7,8,9,10,11,123,12,13,14,15,16,17,18, &
							 | 
						||
| 
								 | 
							
								19,20,21,22,23,24,25,138,26,145,27,28,29,30,31,32,33,34,35,36, &
							 | 
						||
| 
								 | 
							
								37,154,38,39,40,41,42,43,44,144,46,47,48,49,50,51,52,53,143,54, &
							 | 
						||
| 
								 | 
							
								125,56,57,58,124,59,120,140,157,160,55,60,61,62,156,162,141,64,65,153, &
							 | 
						||
| 
								 | 
							
								181,183,66,170,67,68,69,130,70,164,71,72,73,74,75,63,76,77,135,78, &
							 | 
						||
| 
								 | 
							
								79,80,176,169,82,83,84,167,180,85,136,158,129,166,175,142,134,146,121,165, &
							 | 
						||
| 
								 | 
							
								88,89,192,90,45,91,92,93,182,189,94,95,96,173,81,97,98,178,122,126, &
							 | 
						||
| 
								 | 
							
								132,99,100,152,186,193,101,102,151,103,104,172,159,168,150,190,147,148,201,107, &
							 | 
						||
| 
								 | 
							
								205,177,108,198,197,174,127,109,185,110,202,87,199,171,179,187,139,137,106,131, &
							 | 
						||
| 
								 | 
							
								206,194,112,149,155,113,128,184,196,86,114,203,212,195,208,105,188,161,163,191, &
							 | 
						||
| 
								 | 
							
								200,209,214,204,115,218,133,111,207,117,213,216,211,217,116,215,219,220,210,221, &
							 | 
						||
| 
								 | 
							
								118,222,223,225,224,228,226,229,231,227,233,119,234,235,232,230,237,239,236,238, &
							 | 
						||
| 
								 | 
							
								240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259, &
							 | 
						||
| 
								 | 
							
								260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279, &
							 | 
						||
| 
								 | 
							
								280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								data Mn/               &
							 | 
						||
| 
								 | 
							
								   1,  67,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   2, 189,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   3, 201,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   4,  13,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   5,  84,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   6, 188,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   7, 140,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   8, 167,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   9, 187,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  10, 173,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  11,  88,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  12, 213,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  14, 141,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  15, 236,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  16, 117,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  17,  99,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  18, 111,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  19, 178,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  20,  28,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  21, 177,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  22, 199,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  23, 209,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  24, 220,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  25,  59,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  26, 224,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  27,  30,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  29, 157,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  31, 184,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  32, 179,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  33, 149,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  34, 144,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  35,  80,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  36, 228,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  37, 185,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  38, 197,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  39,  69,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  40,  42,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  41, 112,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  43,  70,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  44, 198,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  45,  76,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  46,  68,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  47,  90,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  48,  75,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  49, 118,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  50, 125,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  51, 114,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  52, 239,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  53, 108,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  54, 120,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  55, 162,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  56, 218,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  57, 138,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  58, 212,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  60, 207,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  61,  71,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  62,  65,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  63, 161,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  64, 166,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  66, 158,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  72, 235,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  73, 225,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  74, 116,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  77,  96,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  78,  81,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  79,  82,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  83, 229,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  85, 134,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  86, 176,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  87, 203,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  89, 145,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  91, 152,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  92, 237,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  93, 215,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  94, 130,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  95, 156,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  97, 104,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  98, 182,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 100, 222,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 101, 123,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 102, 181,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 103, 135,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 105, 146,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 106, 115,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 107, 109,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 110, 194,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 113, 164,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 119, 172,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 121, 190,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 122, 169,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 124, 211,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 126, 165,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 127, 139,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 128, 129,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 131, 205,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 132, 196,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 133, 193,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 136, 200,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 137, 159,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 142, 204,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 143, 154,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 147, 238,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 148, 175,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 150, 216,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 151, 171,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 153, 231,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 155, 208,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 160, 230,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 163, 223,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 168, 217,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 170, 180,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 174, 233,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 183, 202,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 186, 214,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 191, 206,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 192, 219,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 195, 227,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 210, 226,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 221, 234,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 232, 240,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   1, 106,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   2, 119,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   3, 139,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   4,  14,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   5,  65,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   6,  61,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   7, 223,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   8, 171,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   9, 136,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  10, 113,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  11, 104,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  12, 175,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  13, 203,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  15, 149,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  16, 226,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  17, 219,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  18,  98,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  19, 211,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  20,  49,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  21, 214,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  22,  68,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  23,  77,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  24, 116,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  25, 235,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  26,  50,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  27, 124,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  28, 229,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  29,  83,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  30, 158,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  31, 220,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  32, 155,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  33, 152,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  34, 231,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  35, 207,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  36,  40,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  37, 142,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  38,  75,   0,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  39,  90, 167,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  41,  55, 125,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  42, 153, 196,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  43,  72, 112,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  44, 183, 233,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  45,  81, 178,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  46, 187, 230,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  47, 133, 176,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  48,  54, 186,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  51, 150, 224,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  52,  53, 190,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  56, 143, 228,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  57,  97, 197,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  58,  62,  89,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  59, 174, 194,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  60,  91,  93,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  63,  85,  96,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  64,  92, 205,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  66,  67, 164,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  69, 103, 159,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  70, 117, 122,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  71,  88, 160,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  73, 148, 180,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  74, 108, 109,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  76, 102, 151,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  78, 128, 206,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  79, 215, 239,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  80, 138, 221,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  82, 162, 195,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  84, 161, 184,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  86, 213, 218,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  87, 120, 240,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  94, 100, 157,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  95, 202, 217,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  99, 199, 201,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 101, 127, 225,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 105, 168, 185,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 107, 182, 237,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 110, 147, 208,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 111, 118, 172,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 114, 140, 165,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 115, 130, 141,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 121, 144, 173,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 123, 204, 209,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 126, 137, 188,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 129, 179, 189,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 131, 192, 210,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 132, 200, 238,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 134, 177, 191,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 135, 145, 222,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 146, 229, 236,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 154, 169, 232,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 124, 156, 163,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 166, 223, 234,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   1,  11, 170,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   3, 181, 227,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								 193, 198, 220,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  10,  16, 212,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  42,  96, 216,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   2,   6, 215,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   4, 208, 219,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   5,  22,  35,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   7,  12,  20,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   8,  15,  75,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								   9,  74,  83,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  13,  37,  50,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  14,  52,  86,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  17,  30, 177,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  18,  25,  97,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  19,  72, 157,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  21,  58, 116,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  23, 111, 226,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  24,  26, 180,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  27,  34,  39,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  28,  32, 161,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  29,  36,  60,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  31,  76, 154,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  33, 101, 238,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  38,  95, 162,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  40, 164, 183,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  41,  92, 196,   0,   0,   0,   0, &
							 | 
						||
| 
								 | 
							
								  43,  48,  99, 165, 190, 198, 204, &
							 | 
						||
| 
								 | 
							
								  44, 129, 138, 145, 160, 203, 237, &
							 | 
						||
| 
								 | 
							
								  45,  65,  66,  98, 127, 137, 146, &
							 | 
						||
| 
								 | 
							
								  46, 131, 149, 181, 211, 218, 224, &
							 | 
						||
| 
								 | 
							
								  47,  49,  55, 191, 194, 207, 232, &
							 | 
						||
| 
								 | 
							
								  51,  69, 106, 109, 119, 184, 217, &
							 | 
						||
| 
								 | 
							
								  53,  62, 104, 155, 166, 206, 231, &
							 | 
						||
| 
								 | 
							
								  54,  61,  63,  73, 118, 151, 163, &
							 | 
						||
| 
								 | 
							
								  56,  94, 110, 117, 185, 189, 214, &
							 | 
						||
| 
								 | 
							
								  57,  81,  91, 115, 173, 175, 227, &
							 | 
						||
| 
								 | 
							
								  59,  79, 103, 136, 171, 201, 212, &
							 | 
						||
| 
								 | 
							
								  24,  64,  77,  93, 202, 235, 236, &
							 | 
						||
| 
								 | 
							
								  67, 132, 142, 150, 156, 176, 222, &
							 | 
						||
| 
								 | 
							
								  68, 153, 159, 169, 170, 186, 221, &
							 | 
						||
| 
								 | 
							
								  70,  84,  89, 113, 174, 197, 205, &
							 | 
						||
| 
								 | 
							
								  71, 125, 130, 140, 158, 200, 210, &
							 | 
						||
| 
								 | 
							
								   8,  78, 143, 182, 192, 193, 216, &
							 | 
						||
| 
								 | 
							
								  23,  80,  82,  90, 108, 139, 228, &
							 | 
						||
| 
								 | 
							
								  85, 122, 123, 128, 141, 187, 188, &
							 | 
						||
| 
								 | 
							
								  25,  87, 100, 152, 209, 213, 234, &
							 | 
						||
| 
								 | 
							
								  88, 134, 147, 167, 172, 178, 239, &
							 | 
						||
| 
								 | 
							
								  18,  40, 102, 114, 133, 144, 179, &
							 | 
						||
| 
								 | 
							
								   4, 105, 108, 112, 148, 230, 240, &
							 | 
						||
| 
								 | 
							
								  29,  33,  50,  62, 107, 195, 199, &
							 | 
						||
| 
								 | 
							
								   3,  83, 113, 120, 126, 177, 216, &
							 | 
						||
| 
								 | 
							
								  11,  55, 116, 121, 135, 168, 225, &
							 | 
						||
| 
								 | 
							
								   1,  27,  28,  76, 187, 226, 233, &
							 | 
						||
| 
								 | 
							
								   2,   4,   7,  10,  22,  75, 222, &
							 | 
						||
| 
								 | 
							
								   5,  30, 131, 152, 156, 168, 215, &
							 | 
						||
| 
								 | 
							
								   6,  13,  19,  58, 196, 228, 229, &
							 | 
						||
| 
								 | 
							
								   9,  26, 144, 147, 158, 223, 240, &
							 | 
						||
| 
								 | 
							
								  12,  31,  66,  79,  92,  96, 155, &
							 | 
						||
| 
								 | 
							
								  14,  54, 103, 173, 202, 232, 238, &
							 | 
						||
| 
								 | 
							
								  15,  17,  37,  69, 129, 164, 209, &
							 | 
						||
| 
								 | 
							
								  16,  72,  91, 114, 163, 169, 237, &
							 | 
						||
| 
								 | 
							
								  20,  45,  89,  99, 143, 180, 208, &
							 | 
						||
| 
								 | 
							
								  21,  39,  60, 141, 171, 198, 234, &
							 | 
						||
| 
								 | 
							
								  21,  32,  52,  78,  95, 148, 199, &
							 | 
						||
| 
								 | 
							
								  34,  73,  84, 157, 200, 221, 236, &
							 | 
						||
| 
								 | 
							
								  35,  36,  63,  97, 105, 119, 220, &
							 | 
						||
| 
								 | 
							
								  38,  46,  93, 111, 136, 191, 203, &
							 | 
						||
| 
								 | 
							
								  41,  51, 151, 160, 213, 214, 231, &
							 | 
						||
| 
								 | 
							
								  42,  57,  65, 161, 167, 194, 204, &
							 | 
						||
| 
								 | 
							
								  43, 109, 162, 175, 189, 210, 212, &
							 | 
						||
| 
								 | 
							
								  44,  74, 100, 149, 170, 188, 197, &
							 | 
						||
| 
								 | 
							
								  47,  64,  88, 107, 122, 165, 211, &
							 | 
						||
| 
								 | 
							
								  48, 139, 179, 184, 218, 233, 239, &
							 | 
						||
| 
								 | 
							
								  49,  94, 106, 112, 138, 142, 205, &
							 | 
						||
| 
								 | 
							
								  53,  59, 102, 115, 134, 182, 225, &
							 | 
						||
| 
								 | 
							
								  56,  68, 101, 150, 166, 178, 207, &
							 | 
						||
| 
								 | 
							
								  61, 117, 126, 154, 195, 219, 224, &
							 | 
						||
| 
								 | 
							
								  67,  80, 118, 174, 185, 190, 235, &
							 | 
						||
| 
								 | 
							
								  70,  77,  86, 125, 153, 172, 193, &
							 | 
						||
| 
								 | 
							
								  32,  71,  87,  90,  98, 110, 135, &
							 | 
						||
| 
								 | 
							
								  41,  75,  81,  85, 124, 133, 201, &
							 | 
						||
| 
								 | 
							
								  82, 120, 128, 140, 159, 176, 183, &
							 | 
						||
| 
								 | 
							
								  22,  72, 104, 130, 146, 181, 217, &
							 | 
						||
| 
								 | 
							
								  25,  89,  96, 121, 132, 186, 230, &
							 | 
						||
| 
								 | 
							
								 118, 123, 145, 192, 196, 227, 240, &
							 | 
						||
| 
								 | 
							
								   1,  14,  35,  38, 114, 127, 192, &
							 | 
						||
| 
								 | 
							
								   7,  23,  43,  63, 116, 137, 206, &
							 | 
						||
| 
								 | 
							
								   2,  37,  52,  57,  64,  76, 120/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								data Nm/               &
							 | 
						||
| 
								 | 
							
								   1, 121, 212, 265, 298, &
							 | 
						||
| 
								 | 
							
								   2, 122, 217, 266, 300, &
							 | 
						||
| 
								 | 
							
								   3, 123, 213, 263,   0, &
							 | 
						||
| 
								 | 
							
								   4, 124, 218, 261, 266, &
							 | 
						||
| 
								 | 
							
								   5, 125, 219, 267,   0, &
							 | 
						||
| 
								 | 
							
								   6, 126, 217, 268,   0, &
							 | 
						||
| 
								 | 
							
								   7, 127, 220, 266, 299, &
							 | 
						||
| 
								 | 
							
								   8, 128, 221, 255,   0, &
							 | 
						||
| 
								 | 
							
								   9, 129, 222, 269,   0, &
							 | 
						||
| 
								 | 
							
								  10, 130, 215, 266,   0, &
							 | 
						||
| 
								 | 
							
								  11, 131, 212, 264,   0, &
							 | 
						||
| 
								 | 
							
								  12, 132, 220, 270,   0, &
							 | 
						||
| 
								 | 
							
								   4, 133, 223, 268,   0, &
							 | 
						||
| 
								 | 
							
								  13, 124, 224, 271, 298, &
							 | 
						||
| 
								 | 
							
								  14, 134, 221, 272,   0, &
							 | 
						||
| 
								 | 
							
								  15, 135, 215, 273,   0, &
							 | 
						||
| 
								 | 
							
								  16, 136, 225, 272,   0, &
							 | 
						||
| 
								 | 
							
								  17, 137, 226, 260,   0, &
							 | 
						||
| 
								 | 
							
								  18, 138, 227, 268,   0, &
							 | 
						||
| 
								 | 
							
								  19, 139, 220, 274,   0, &
							 | 
						||
| 
								 | 
							
								  20, 140, 228, 275, 276, &
							 | 
						||
| 
								 | 
							
								  21, 141, 219, 266, 295, &
							 | 
						||
| 
								 | 
							
								  22, 142, 229, 256, 299, &
							 | 
						||
| 
								 | 
							
								  23, 143, 230, 250,   0, &
							 | 
						||
| 
								 | 
							
								  24, 144, 226, 258, 296, &
							 | 
						||
| 
								 | 
							
								  25, 145, 230, 269,   0, &
							 | 
						||
| 
								 | 
							
								  26, 146, 231, 265,   0, &
							 | 
						||
| 
								 | 
							
								  19, 147, 232, 265,   0, &
							 | 
						||
| 
								 | 
							
								  27, 148, 233, 262,   0, &
							 | 
						||
| 
								 | 
							
								  26, 149, 225, 267,   0, &
							 | 
						||
| 
								 | 
							
								  28, 150, 234, 270,   0, &
							 | 
						||
| 
								 | 
							
								  29, 151, 232, 276, 292, &
							 | 
						||
| 
								 | 
							
								  30, 152, 235, 262,   0, &
							 | 
						||
| 
								 | 
							
								  31, 153, 231, 277,   0, &
							 | 
						||
| 
								 | 
							
								  32, 154, 219, 278, 298, &
							 | 
						||
| 
								 | 
							
								  33, 155, 233, 278,   0, &
							 | 
						||
| 
								 | 
							
								  34, 156, 223, 272, 300, &
							 | 
						||
| 
								 | 
							
								  35, 157, 236, 279, 298, &
							 | 
						||
| 
								 | 
							
								  36, 158, 231, 275,   0, &
							 | 
						||
| 
								 | 
							
								  37, 155, 237, 260,   0, &
							 | 
						||
| 
								 | 
							
								  38, 159, 238, 280, 293, &
							 | 
						||
| 
								 | 
							
								  37, 160, 216, 281,   0, &
							 | 
						||
| 
								 | 
							
								  39, 161, 239, 282, 299, &
							 | 
						||
| 
								 | 
							
								  40, 162, 240, 283,   0, &
							 | 
						||
| 
								 | 
							
								  41, 163, 241, 274,   0, &
							 | 
						||
| 
								 | 
							
								  42, 164, 242, 279,   0, &
							 | 
						||
| 
								 | 
							
								  43, 165, 243, 284,   0, &
							 | 
						||
| 
								 | 
							
								  44, 166, 239, 285,   0, &
							 | 
						||
| 
								 | 
							
								  45, 139, 243, 286,   0, &
							 | 
						||
| 
								 | 
							
								  46, 145, 223, 262,   0, &
							 | 
						||
| 
								 | 
							
								  47, 167, 244, 280,   0, &
							 | 
						||
| 
								 | 
							
								  48, 168, 224, 276, 300, &
							 | 
						||
| 
								 | 
							
								  49, 168, 245, 287,   0, &
							 | 
						||
| 
								 | 
							
								  50, 166, 246, 271,   0, &
							 | 
						||
| 
								 | 
							
								  51, 159, 243, 264,   0, &
							 | 
						||
| 
								 | 
							
								  52, 169, 247, 288,   0, &
							 | 
						||
| 
								 | 
							
								  53, 170, 248, 281, 300, &
							 | 
						||
| 
								 | 
							
								  54, 171, 228, 268,   0, &
							 | 
						||
| 
								 | 
							
								  24, 172, 249, 287,   0, &
							 | 
						||
| 
								 | 
							
								  55, 173, 233, 275,   0, &
							 | 
						||
| 
								 | 
							
								  56, 126, 246, 289,   0, &
							 | 
						||
| 
								 | 
							
								  57, 171, 245, 262,   0, &
							 | 
						||
| 
								 | 
							
								  58, 174, 246, 278, 299, &
							 | 
						||
| 
								 | 
							
								  59, 175, 250, 284, 300, &
							 | 
						||
| 
								 | 
							
								  57, 125, 241, 281,   0, &
							 | 
						||
| 
								 | 
							
								  60, 176, 241, 270,   0, &
							 | 
						||
| 
								 | 
							
								   1, 176, 251, 290,   0, &
							 | 
						||
| 
								 | 
							
								  42, 141, 252, 288,   0, &
							 | 
						||
| 
								 | 
							
								  36, 177, 244, 272,   0, &
							 | 
						||
| 
								 | 
							
								  39, 178, 253, 291,   0, &
							 | 
						||
| 
								 | 
							
								  56, 179, 254, 292,   0, &
							 | 
						||
| 
								 | 
							
								  61, 161, 227, 273, 295, &
							 | 
						||
| 
								 | 
							
								  62, 180, 246, 277,   0, &
							 | 
						||
| 
								 | 
							
								  63, 181, 222, 283,   0, &
							 | 
						||
| 
								 | 
							
								  44, 157, 221, 266, 293, &
							 | 
						||
| 
								 | 
							
								  41, 182, 234, 265, 300, &
							 | 
						||
| 
								 | 
							
								  64, 142, 250, 291,   0, &
							 | 
						||
| 
								 | 
							
								  65, 183, 255, 276,   0, &
							 | 
						||
| 
								 | 
							
								  66, 184, 249, 270,   0, &
							 | 
						||
| 
								 | 
							
								  32, 185, 256, 290,   0, &
							 | 
						||
| 
								 | 
							
								  65, 163, 248, 293,   0, &
							 | 
						||
| 
								 | 
							
								  66, 186, 256, 294,   0, &
							 | 
						||
| 
								 | 
							
								  67, 148, 222, 263,   0, &
							 | 
						||
| 
								 | 
							
								   5, 187, 253, 277,   0, &
							 | 
						||
| 
								 | 
							
								  68, 174, 257, 293,   0, &
							 | 
						||
| 
								 | 
							
								  69, 188, 224, 291,   0, &
							 | 
						||
| 
								 | 
							
								  70, 189, 258, 292,   0, &
							 | 
						||
| 
								 | 
							
								  11, 179, 259, 284,   0, &
							 | 
						||
| 
								 | 
							
								  71, 171, 253, 274, 296, &
							 | 
						||
| 
								 | 
							
								  43, 158, 256, 292,   0, &
							 | 
						||
| 
								 | 
							
								  72, 173, 248, 273,   0, &
							 | 
						||
| 
								 | 
							
								  73, 175, 238, 270,   0, &
							 | 
						||
| 
								 | 
							
								  74, 173, 250, 279,   0, &
							 | 
						||
| 
								 | 
							
								  75, 190, 247, 286,   0, &
							 | 
						||
| 
								 | 
							
								  76, 191, 236, 276,   0, &
							 | 
						||
| 
								 | 
							
								  64, 174, 216, 270, 296, &
							 | 
						||
| 
								 | 
							
								  77, 170, 226, 278,   0, &
							 | 
						||
| 
								 | 
							
								  78, 137, 241, 292,   0, &
							 | 
						||
| 
								 | 
							
								  16, 192, 239, 274,   0, &
							 | 
						||
| 
								 | 
							
								  79, 190, 258, 283,   0, &
							 | 
						||
| 
								 | 
							
								  80, 193, 235, 288,   0, &
							 | 
						||
| 
								 | 
							
								  81, 182, 260, 287,   0, &
							 | 
						||
| 
								 | 
							
								  82, 177, 249, 271,   0, &
							 | 
						||
| 
								 | 
							
								  77, 131, 245, 295,   0, &
							 | 
						||
| 
								 | 
							
								  83, 194, 261, 278,   0, &
							 | 
						||
| 
								 | 
							
								  84, 121, 244, 286,   0, &
							 | 
						||
| 
								 | 
							
								  85, 195, 262, 284,   0, &
							 | 
						||
| 
								 | 
							
								  49, 181, 256, 261,   0, &
							 | 
						||
| 
								 | 
							
								  85, 181, 244, 282,   0, &
							 | 
						||
| 
								 | 
							
								  86, 196, 247, 292,   0, &
							 | 
						||
| 
								 | 
							
								  17, 197, 229, 279,   0, &
							 | 
						||
| 
								 | 
							
								  38, 161, 261, 286,   0, &
							 | 
						||
| 
								 | 
							
								  87, 130, 253, 263,   0, &
							 | 
						||
| 
								 | 
							
								  47, 198, 260, 273, 298, &
							 | 
						||
| 
								 | 
							
								  84, 199, 248, 287,   0, &
							 | 
						||
| 
								 | 
							
								  63, 143, 228, 264, 299, &
							 | 
						||
| 
								 | 
							
								  15, 178, 247, 289,   0, &
							 | 
						||
| 
								 | 
							
								  45, 197, 246, 290, 297, &
							 | 
						||
| 
								 | 
							
								  88, 122, 244, 278,   0, &
							 | 
						||
| 
								 | 
							
								  50, 189, 263, 294, 300, &
							 | 
						||
| 
								 | 
							
								  89, 200, 264, 296,   0, &
							 | 
						||
| 
								 | 
							
								  90, 178, 257, 284,   0, &
							 | 
						||
| 
								 | 
							
								  80, 201, 257, 297,   0, &
							 | 
						||
| 
								 | 
							
								  91, 146, 210, 293,   0, &
							 | 
						||
| 
								 | 
							
								  46, 159, 254, 291,   0, &
							 | 
						||
| 
								 | 
							
								  92, 202, 263, 289,   0, &
							 | 
						||
| 
								 | 
							
								  93, 193, 241, 298,   0, &
							 | 
						||
| 
								 | 
							
								  94, 183, 257, 294,   0, &
							 | 
						||
| 
								 | 
							
								  94, 203, 240, 272,   0, &
							 | 
						||
| 
								 | 
							
								  75, 199, 254, 295,   0, &
							 | 
						||
| 
								 | 
							
								  95, 204, 242, 267,   0, &
							 | 
						||
| 
								 | 
							
								  96, 205, 251, 296,   0, &
							 | 
						||
| 
								 | 
							
								  97, 165, 260, 293,   0, &
							 | 
						||
| 
								 | 
							
								  68, 206, 259, 287,   0, &
							 | 
						||
| 
								 | 
							
								  82, 207, 264, 292,   0, &
							 | 
						||
| 
								 | 
							
								  98, 129, 249, 279,   0, &
							 | 
						||
| 
								 | 
							
								  99, 202, 241, 299,   0, &
							 | 
						||
| 
								 | 
							
								  53, 185, 240, 286,   0, &
							 | 
						||
| 
								 | 
							
								  93, 123, 256, 285,   0, &
							 | 
						||
| 
								 | 
							
								   7, 198, 254, 294,   0, &
							 | 
						||
| 
								 | 
							
								  13, 199, 257, 275,   0, &
							 | 
						||
| 
								 | 
							
								 100, 156, 251, 286,   0, &
							 | 
						||
| 
								 | 
							
								 101, 169, 255, 274,   0, &
							 | 
						||
| 
								 | 
							
								  31, 200, 260, 269,   0, &
							 | 
						||
| 
								 | 
							
								  71, 207, 240, 297,   0, &
							 | 
						||
| 
								 | 
							
								  83, 208, 241, 295,   0, &
							 | 
						||
| 
								 | 
							
								 102, 196, 259, 269,   0, &
							 | 
						||
| 
								 | 
							
								 103, 180, 261, 276,   0, &
							 | 
						||
| 
								 | 
							
								  30, 134, 242, 283,   0, &
							 | 
						||
| 
								 | 
							
								 104, 167, 251, 288,   0, &
							 | 
						||
| 
								 | 
							
								 105, 182, 246, 280,   0, &
							 | 
						||
| 
								 | 
							
								  72, 152, 258, 267,   0, &
							 | 
						||
| 
								 | 
							
								 106, 160, 252, 291,   0, &
							 | 
						||
| 
								 | 
							
								 101, 209, 234, 289,   0, &
							 | 
						||
| 
								 | 
							
								 107, 151, 245, 270,   0, &
							 | 
						||
| 
								 | 
							
								  76, 210, 251, 267,   0, &
							 | 
						||
| 
								 | 
							
								  27, 190, 227, 277,   0, &
							 | 
						||
| 
								 | 
							
								  60, 149, 254, 269,   0, &
							 | 
						||
| 
								 | 
							
								  99, 177, 252, 294,   0, &
							 | 
						||
| 
								 | 
							
								 108, 179, 240, 280,   0, &
							 | 
						||
| 
								 | 
							
								  58, 187, 232, 281,   0, &
							 | 
						||
| 
								 | 
							
								  51, 186, 236, 282,   0, &
							 | 
						||
| 
								 | 
							
								 109, 210, 246, 273,   0, &
							 | 
						||
| 
								 | 
							
								  87, 176, 237, 272,   0, &
							 | 
						||
| 
								 | 
							
								  92, 198, 239, 284,   0, &
							 | 
						||
| 
								 | 
							
								  59, 211, 245, 288,   0, &
							 | 
						||
| 
								 | 
							
								   8, 158, 259, 281,   0, &
							 | 
						||
| 
								 | 
							
								 110, 194, 264, 267,   0, &
							 | 
						||
| 
								 | 
							
								  90, 209, 252, 273,   0, &
							 | 
						||
| 
								 | 
							
								 111, 212, 252, 283,   0, &
							 | 
						||
| 
								 | 
							
								 105, 128, 249, 275,   0, &
							 | 
						||
| 
								 | 
							
								  88, 197, 259, 291,   0, &
							 | 
						||
| 
								 | 
							
								  10, 200, 248, 271,   0, &
							 | 
						||
| 
								 | 
							
								 112, 172, 253, 290,   0, &
							 | 
						||
| 
								 | 
							
								 103, 132, 248, 282,   0, &
							 | 
						||
| 
								 | 
							
								  69, 165, 251, 294,   0, &
							 | 
						||
| 
								 | 
							
								  20, 206, 225, 263,   0, &
							 | 
						||
| 
								 | 
							
								  18, 163, 259, 288,   0, &
							 | 
						||
| 
								 | 
							
								  29, 203, 260, 285,   0, &
							 | 
						||
| 
								 | 
							
								 111, 180, 230, 274,   0, &
							 | 
						||
| 
								 | 
							
								  81, 213, 242, 295,   0, &
							 | 
						||
| 
								 | 
							
								  78, 195, 255, 287,   0, &
							 | 
						||
| 
								 | 
							
								 113, 162, 237, 294,   0, &
							 | 
						||
| 
								 | 
							
								  28, 187, 244, 285,   0, &
							 | 
						||
| 
								 | 
							
								  34, 194, 247, 290,   0, &
							 | 
						||
| 
								 | 
							
								 114, 166, 252, 296,   0, &
							 | 
						||
| 
								 | 
							
								   9, 164, 257, 265,   0, &
							 | 
						||
| 
								 | 
							
								   6, 202, 257, 283,   0, &
							 | 
						||
| 
								 | 
							
								   2, 203, 247, 282,   0, &
							 | 
						||
| 
								 | 
							
								  89, 168, 239, 290,   0, &
							 | 
						||
| 
								 | 
							
								 115, 206, 243, 279,   0, &
							 | 
						||
| 
								 | 
							
								 116, 204, 255, 297, 298, &
							 | 
						||
| 
								 | 
							
								  97, 214, 255, 291,   0, &
							 | 
						||
| 
								 | 
							
								  86, 172, 243, 281,   0, &
							 | 
						||
| 
								 | 
							
								 117, 186, 262, 289,   0, &
							 | 
						||
| 
								 | 
							
								  96, 160, 238, 268, 297, &
							 | 
						||
| 
								 | 
							
								  35, 170, 253, 283,   0, &
							 | 
						||
| 
								 | 
							
								  40, 214, 239, 275,   0, &
							 | 
						||
| 
								 | 
							
								  21, 192, 262, 276,   0, &
							 | 
						||
| 
								 | 
							
								  98, 205, 254, 277,   0, &
							 | 
						||
| 
								 | 
							
								   3, 192, 249, 293,   0, &
							 | 
						||
| 
								 | 
							
								 113, 191, 250, 271,   0, &
							 | 
						||
| 
								 | 
							
								  70, 133, 240, 279,   0, &
							 | 
						||
| 
								 | 
							
								 100, 201, 239, 281,   0, &
							 | 
						||
| 
								 | 
							
								  95, 175, 253, 286,   0, &
							 | 
						||
| 
								 | 
							
								 115, 183, 245, 299,   0, &
							 | 
						||
| 
								 | 
							
								  55, 154, 243, 288,   0, &
							 | 
						||
| 
								 | 
							
								 107, 196, 218, 274,   0, &
							 | 
						||
| 
								 | 
							
								  22, 201, 258, 272,   0, &
							 | 
						||
| 
								 | 
							
								 118, 204, 254, 282,   0, &
							 | 
						||
| 
								 | 
							
								  91, 138, 242, 284,   0, &
							 | 
						||
| 
								 | 
							
								  54, 215, 249, 282,   0, &
							 | 
						||
| 
								 | 
							
								  12, 188, 258, 280,   0, &
							 | 
						||
| 
								 | 
							
								 114, 140, 247, 280,   0, &
							 | 
						||
| 
								 | 
							
								  74, 184, 217, 267,   0, &
							 | 
						||
| 
								 | 
							
								 104, 216, 255, 263,   0, &
							 | 
						||
| 
								 | 
							
								 110, 191, 244, 295,   0, &
							 | 
						||
| 
								 | 
							
								  52, 188, 242, 285,   0, &
							 | 
						||
| 
								 | 
							
								 116, 136, 218, 289,   0, &
							 | 
						||
| 
								 | 
							
								  23, 150, 214, 278,   0, &
							 | 
						||
| 
								 | 
							
								 119, 185, 252, 277,   0, &
							 | 
						||
| 
								 | 
							
								  79, 207, 251, 266,   0, &
							 | 
						||
| 
								 | 
							
								 109, 127, 211, 269,   0, &
							 | 
						||
| 
								 | 
							
								  25, 167, 242, 289,   0, &
							 | 
						||
| 
								 | 
							
								  62, 193, 264, 287,   0, &
							 | 
						||
| 
								 | 
							
								 118, 135, 229, 265,   0, &
							 | 
						||
| 
								 | 
							
								 117, 213, 248, 297,   0, &
							 | 
						||
| 
								 | 
							
								  33, 169, 256, 268,   0, &
							 | 
						||
| 
								 | 
							
								  67, 147, 208, 268,   0, &
							 | 
						||
| 
								 | 
							
								 108, 164, 261, 296,   0, &
							 | 
						||
| 
								 | 
							
								 106, 153, 245, 280,   0, &
							 | 
						||
| 
								 | 
							
								 120, 209, 243, 271,   0, &
							 | 
						||
| 
								 | 
							
								 112, 162, 265, 285,   0, &
							 | 
						||
| 
								 | 
							
								 119, 211, 258, 275,   0, &
							 | 
						||
| 
								 | 
							
								  61, 144, 250, 290,   0, &
							 | 
						||
| 
								 | 
							
								  14, 208, 250, 277,   0, &
							 | 
						||
| 
								 | 
							
								  73, 195, 240, 273,   0, &
							 | 
						||
| 
								 | 
							
								 102, 205, 235, 271,   0, &
							 | 
						||
| 
								 | 
							
								  48, 184, 259, 285,   0, &
							 | 
						||
| 
								 | 
							
								 120, 189, 261, 269, 297/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								data nrw/    &
							 | 
						||
| 
								 | 
							
								5,5,4,5,4,4,5,4,4,4,4,4,4,5,4,4,4,4,4,4, &
							 | 
						||
| 
								 | 
							
								5,5,5,4,5,4,4,4,4,4,4,5,4,4,5,4,5,5,4,4, &
							 | 
						||
| 
								 | 
							
								5,4,5,4,4,4,4,4,4,4,4,5,4,4,4,4,5,4,4,4, &
							 | 
						||
| 
								 | 
							
								4,4,5,5,4,4,4,4,4,4,4,5,4,4,5,5,4,4,4,4, &
							 | 
						||
| 
								 | 
							
								4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,5,4,4,4,4, &
							 | 
						||
| 
								 | 
							
								4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,5,4,5, &
							 | 
						||
| 
								 | 
							
								4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, &
							 | 
						||
| 
								 | 
							
								4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, &
							 | 
						||
| 
								 | 
							
								4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, &
							 | 
						||
| 
								 | 
							
								4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,4,4,4,4, &
							 | 
						||
| 
								 | 
							
								4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, &
							 | 
						||
| 
								 | 
							
								4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								data ncw/    &
							 | 
						||
| 
								 | 
							
								2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, &
							 | 
						||
| 
								 | 
							
								2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, &
							 | 
						||
| 
								 | 
							
								2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, &
							 | 
						||
| 
								 | 
							
								2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, &
							 | 
						||
| 
								 | 
							
								2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, &
							 | 
						||
| 
								 | 
							
								2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, &
							 | 
						||
| 
								 | 
							
								2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, &
							 | 
						||
| 
								 | 
							
								2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3, &
							 | 
						||
| 
								 | 
							
								3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, &
							 | 
						||
| 
								 | 
							
								3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, &
							 | 
						||
| 
								 | 
							
								3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, &
							 | 
						||
| 
								 | 
							
								3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,7, &
							 | 
						||
| 
								 | 
							
								7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, &
							 | 
						||
| 
								 | 
							
								7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, &
							 | 
						||
| 
								 | 
							
								7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7/ 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								!ncw=3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								toc=0
							 | 
						||
| 
								 | 
							
								tov=0
							 | 
						||
| 
								 | 
							
								tanhtoc=0
							 | 
						||
| 
								 | 
							
								!write(*,*) llr
							 | 
						||
| 
								 | 
							
								! initialize messages to checks
							 | 
						||
| 
								 | 
							
								do j=1,M
							 | 
						||
| 
								 | 
							
								  do i=1,nrw(j)
							 | 
						||
| 
								 | 
							
								    toc(i,j)=llr((Nm(i,j)))
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								enddo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ncnt=0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								do iter=0,maxiterations
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! Update bit log likelihood ratios (tov=0 in iteration 0).
							 | 
						||
| 
								 | 
							
								  do i=1,N
							 | 
						||
| 
								 | 
							
								    if( apmask(i) .ne. 1 ) then
							 | 
						||
| 
								 | 
							
								      zn(i)=llr(i)+sum(tov(1:ncw(i),i))
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								      zn(i)=llr(i)
							 | 
						||
| 
								 | 
							
								    endif
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! Check to see if we have a codeword (check before we do any iteration).
							 | 
						||
| 
								 | 
							
								  cw=0
							 | 
						||
| 
								 | 
							
								  where( zn .gt. 0. ) cw=1
							 | 
						||
| 
								 | 
							
								  ncheck=0
							 | 
						||
| 
								 | 
							
								  do i=1,M
							 | 
						||
| 
								 | 
							
								    synd(i)=sum(cw(Nm(1:nrw(i),i)))
							 | 
						||
| 
								 | 
							
								    if( mod(synd(i),2) .ne. 0 ) ncheck=ncheck+1
							 | 
						||
| 
								 | 
							
								!    if( mod(synd(i),2) .ne. 0 ) write(*,*) 'check ',i,' unsatisfied'
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								!write(*,*) 'number of unsatisfied parity checks ',ncheck
							 | 
						||
| 
								 | 
							
								  if( ncheck .eq. 0 ) then ! we have a codeword - reorder the columns and return it
							 | 
						||
| 
								 | 
							
								!    niterations=iter
							 | 
						||
| 
								 | 
							
								    codeword=cw(colorder+1)
							 | 
						||
| 
								 | 
							
								    decoded=codeword(M+1:N)
							 | 
						||
| 
								 | 
							
								    nerr=0
							 | 
						||
| 
								 | 
							
								    do i=1,N
							 | 
						||
| 
								 | 
							
								      if( (2*cw(i)-1)*llr(i) .lt. 0.0 ) nerr=nerr+1
							 | 
						||
| 
								 | 
							
								    enddo
							 | 
						||
| 
								 | 
							
								    niterations=nerr
							 | 
						||
| 
								 | 
							
								    return
							 | 
						||
| 
								 | 
							
								  endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if( iter.gt.0 ) then  ! this code block implements an early stopping criterion
							 | 
						||
| 
								 | 
							
								    nd=ncheck-nclast
							 | 
						||
| 
								 | 
							
								    if( nd .lt. 0 ) then ! # of unsatisfied parity checks decreased
							 | 
						||
| 
								 | 
							
								      ncnt=0  ! reset counter
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								      ncnt=ncnt+1
							 | 
						||
| 
								 | 
							
								    endif
							 | 
						||
| 
								 | 
							
								!    write(*,*) iter,ncheck,nd,ncnt
							 | 
						||
| 
								 | 
							
								    if( ncnt .ge. 5 .and. iter .ge. 15 .and. ncheck .gt. 50) then
							 | 
						||
| 
								 | 
							
								      niterations=-1
							 | 
						||
| 
								 | 
							
								      return
							 | 
						||
| 
								 | 
							
								    endif
							 | 
						||
| 
								 | 
							
								  endif
							 | 
						||
| 
								 | 
							
								  nclast=ncheck
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! Send messages from bits to check nodes 
							 | 
						||
| 
								 | 
							
								  do j=1,M
							 | 
						||
| 
								 | 
							
								    do i=1,nrw(j)
							 | 
						||
| 
								 | 
							
								      ibj=Nm(i,j)
							 | 
						||
| 
								 | 
							
								      toc(i,j)=zn(ibj)  
							 | 
						||
| 
								 | 
							
								!      do kk=1,ncw(ibj) ! subtract off what the bit had received from the check
							 | 
						||
| 
								 | 
							
								      do kk=1,7 ! subtract off what the bit had received from the check
							 | 
						||
| 
								 | 
							
								        if( Mn(kk,ibj) .eq. j ) then  
							 | 
						||
| 
								 | 
							
								          toc(i,j)=toc(i,j)-tov(kk,ibj)
							 | 
						||
| 
								 | 
							
								        endif
							 | 
						||
| 
								 | 
							
								      enddo
							 | 
						||
| 
								 | 
							
								    enddo
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! send messages from check nodes to variable nodes
							 | 
						||
| 
								 | 
							
								  do i=1,M
							 | 
						||
| 
								 | 
							
								    tanhtoc(1:5,i)=tanh(-toc(1:5,i)/2)
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  do j=1,N
							 | 
						||
| 
								 | 
							
								    do i=1,ncw(j)
							 | 
						||
| 
								 | 
							
								      ichk=Mn(i,j)  ! Mn(:,j) are the checks that include bit j
							 | 
						||
| 
								 | 
							
								      Tmn=product(tanhtoc(1:nrw(ichk),ichk),mask=Nm(1:nrw(ichk),ichk).ne.j)
							 | 
						||
| 
								 | 
							
								      call platanh(-Tmn,y)
							 | 
						||
| 
								 | 
							
								!      y=atanh(-Tmn)
							 | 
						||
| 
								 | 
							
								      tov(i,j)=2*y
							 | 
						||
| 
								 | 
							
								    enddo
							 | 
						||
| 
								 | 
							
								  enddo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								enddo
							 | 
						||
| 
								 | 
							
								niterations=-1
							 | 
						||
| 
								 | 
							
								return
							 | 
						||
| 
								 | 
							
								end subroutine bpdecode300
							 |