Abstract. We describe a new type of fault dictionary called a same/different fault dictionary. The same/different fault dictionary is similar to a pass/fail fault ...
A Same/Different Fault Dictionary: An Extended Pass/Fail Fault Dictionary with Improved Diagnostic Resolution Irith Pomeranz1 School of Electrical & Computer Eng. Purdue University W. Lafayette, IN 47907, U.S.A.
Abstract We describe a new type of fault dictionary called a same/different fault dictionary. The same/different fault dictionary is similar to a pass/fail fault dictionary in that it contains a single bit bi ,j for every modeled fault f i and test vector t j . However, in a pass/fail fault dictionary, bi ,j is determined by comparing the output vector of the faulty circuit with the output vector of the fault free circuit; while in a same/different fault dictionary, bi ,j is determined by comparing the output vector of the faulty circuit with a preselected output vector called a baseline output vector. By selecting appropriately the baseline output vectors for all the test vectors, it is possible to obtain increased diagnostic resolution with a same/different fault dictionary compared to a pass/fail fault dictionary. We describe a procedure for selecting baseline output vectors and present experimental results.
1. Introduction Defect diagnosis is applied to manufactured chips, which are found to be faulty, in order to identify the locations and types of defects present in them [1]. The first step of a defect diagnosis procedure typically determines a set of candidate defect sites. The candidate sites are selected such that modeled faults (typically single stuck-at faults) at these sites produce the observed failing responses of the applied tests, or responses that match them most closely [1]-[23]. Thus, even though the final goal of any defect diagnosis procedure is to determine the location and nature of the defect (such as an open or a bridge), fault diagnosis that considers modeled faults is an important first step in defect diagnosis. There are two types of fault diagnosis procedures that differ in the way they use precomputed information. Dictionary based approaches [2]-[14], also called causeeffect procedures, use a precomputed dictionary that contains information about the responses of modeled faults to the test set applied to the circuit. The observed response of a faulty circuit is compared to the responses stored in the dictionary in order to identify the best matches, and the 1. Research supported in part by SRC Grant No. 2004-TJ-1244. 2. Research supported in part by SRC Grant No. 2004-TJ-1243.
978-3-9810801-3-1/DATE08 © 2008 EDAA
and
Sudhakar M. Reddy2 Electrical & Computer Eng. Dept. University of Iowa Iowa City, IA 52242, U.S.A.
best matches are used to define the candidate defect sites. Dynamic or fault simulation based approaches [15]-[23], also called effect-cause diagnosis procedures, typically do not use any precomputed information. Given the observed response of a faulty circuit, they perform fault simulations to identify the faults whose responses best match the observed response. The size of a fault dictionary is determined by the number of faults, the number of tests, and the number of outputs, and it is typically very large. However, when a fault dictionary can be stored, it reduces the fault simulation effort required for fault diagnosis compared to approaches that do not use a fault dictionary [9]. In addition, two-phase approaches that combine the use of a dictionary with dynamic diagnosis allow smaller dictionaries to be used [8], [12], [14]. Methods to compute small fault dictionaries were considered in [9]-[14]. There are two basic types of fault dictionaries that can be used alone as in cause-effect procedures, or to assist effect-cause diagnosis procedures [8], [12], [14]. The fault dictionary that contains the largest amount of information about modeled faults is the f ull fault dictionary. A full fault dictionary contains the complete output vector of every modeled fault under every test vector. It provides the highest possible diagnostic resolution, i.e., it allows us to distinguish every pair of faults that can be distinguished by the test set on which it is based. A pass /f ail fault dictionary contains a single bit bi ,j for every fault and test vector. The bit for fault f i and test t j is 1 if t j detects f i , and it is 0 otherwise. Many of the methods to produce small fault dictionaries attempt to achieve the diagnostic resolution of a full fault dictionary by adding as little information as possible to a pass/fail dictionary, e.g., [9] and [12]. In this work we define a new type of dictionary called a same/different fault dictionary. A same/different fault dictionary is similar to a pass/fail fault dictionary in that it contains a single bit bi ,j for every fault f i and test vector t j . However, in a pass/fail fault dictionary, the value of bi ,j is determined by comparing the output vector zi ,j of f i under t j to a fault free output vector z f f ,j (f f stands for f ault −f ree ). In a same/different fault dictionary, the value of bi ,j is determined by comparing the out-
put vector zi ,j of f i under t j to a preselected output vector denoted by zbl ,j . Here, bl stands for baseline , indicating that zbl ,j provides a baseline for comparison, similar to the way the fault free output vector z f f ,j is used in a pass/fail dictionary. In the approach described in this work, a single baseline vector zbl ,j is selected for a test vector t j , considering every test vector t j in the test set applied to the circuit. The flexibility in selecting zbl ,j allows us to obtain a same/different fault dictionary that has a similar size to a pass/fail fault dictionary, but has a higher resolution. We demonstrate this point in Section 2. One can select more than one baseline vector for a test vector. In this work we select only one per test vector. In Section 3 we describe a procedure for selecting the baseline output vectors for a same/different fault dictionary. Experimental results are presented in Section 4. Throughout this work we represent fault dictionaries as two-dimensional arrays. Other representations include lists of detected faults, or tree structures [1].
2. Same/different fault dictionary To demonstrate the definition and advantages of a same/different fault dictionary, we consider four faults, f 0, f 1, f 2 and f 3, under two tests, t 0 and t 1, in a twooutput circuit. In Table 1 we show the entries corresponding to a full fault dictionary. Row f f shows the fault free output vectors z f f ,j , for j = 0,1. Row f i shows the output vectors zi ,j obtained for f i under t j , for i = 0,1,2,3 and j = 0,1. The full fault dictionary distinguishes between all the pairs of faults based on their output vectors. For example, f 0 and f 1 are distinguished by t 0 since z 0,0 ≠ z 1,0; and f 2 and f 3 are distinguished by t 1 since z 2,1 ≠ z 3,1. Table 1: A full fault dictionary t0 t1 ff 00 11 f 0 00 10 f 1 10 11 f 2 01 10 f 3 01 01
A pass/fail fault dictionary for the same faults and tests is shown in Table 2. An output vector zi ,j in the full dictionary is replaced with bi ,j = 0 in the pass/fail dictionary if zi ,j = z f f ,j , and it is replaced with bi ,j = 1 in the pass/fail dictionary if zi ,j ≠ z f f ,j . The pass/fail fault dictionary distinguishes between all the fault pairs except for the fault pair f 2,f 3. For example, f 0 and f 1 are distinguished by t 0 since b 0,0 ≠ b 1,0; however, for f 2 and f 3 we have b 2,0 = b 3,0 and b 2,1 = b 3,1. In a same/different fault dictionary we have the flexibility of selecting the baseline output vectors against which output vectors of faulty circuits will be compared.
Table 2: A pass/fail fault dictionary t0 t1 ff 00 11 f0 0 1 f1 1 0 f2 1 1 f3 1 1
A same/different fault dictionary for the faults and tests above is shown in Table 3. We use zbl ,0 = 01 and zbl ,1 = 10 as baseline vectors. An output vector zi ,j in the full fault dictionary is replaced with bi ,j = 0 in the same/different fault dictionary if zi ,j = zbl ,j , and it is replaced with bi ,j = 1 in the same/different fault dictionary if zi ,j ≠ zbl ,j . The same/different fault dictionary of Table 3 distinguishes between all the pairs of faults based on their entries. For example, f 0 and f 1 are distinguished by t 1 since b 0,1 ≠ b 1,1; and f 2 and f 3 are distinguished by t 1 since b 2,1 ≠ b 3,1. Table 3: A same/different fault dictionary t0 t1 bl 01 10 f0 1 0 f1 1 1 f2 0 0 f3 0 1
It can be seen that, in the example, the same/different fault dictionary provides the diagnostic resolution of a full fault dictionary. In general, by selecting appropriate baseline vectors, the diagnostic resolution of a same/different fault dictionary can be made higher than that of a pass/fail dictionary of a similar size. The need to store the baseline output vectors adds to the storage requirements. We discuss the relative sizes of the various dictionaries next. For the circuit under consideration, let the number of test vectors be k , let the number of faults be n , and let the number of outputs be m . Storing the fault free output response of the circuit requires k .m bits. We do not include this in the size of a dictionary. The size of a full dictionary for the circuit is k .n .m bits (a full dictionary contains a bit for every test vector, fault and output). The size of a pass/fail dictionary is k .n bits (a pass/fail dictionary contains a bit for every test vector and fault). The size of the proposed same/different dictionary is k .n +k .m = k .(n +m ) bits. The difference of k .m bits in the sizes of the pass/fail and same/different dictionaries is due to the need to store baseline vectors, assuming that a baseline vector is used for each test vector. For scan designs the number of outputs m is the sum of the number of scan cells and the number of primary outputs. If test response compaction is used, the number of outputs will be significantly smaller. In indus-
trial designs typically the number of outputs m is smaller than the number of faults n by one to two orders of magnitude. Hence, the additional memory requirement for the same/different fault dictionary relative to the pass/fail fault dictionary will be negligible. In addition, it is important to note that one may not need to use a baseline vector for every test vector. Instead, the fault free output vector may be used for some of the test vectors. This further reduces the difference in the sizes of these dictionaries.
3. Computing a fault dictionary To compute a same/different fault dictionary it is necessary to compute a baseline vector zbl ,j for every test vector t j . In this section we describe a procedure for computing baseline vectors for a same/different fault dictionary. We consider a set of faults F = {f 0,f 1, . . . ,f n −1} and a test set T = {t 0,t 1, . . . ,tk −1}. We denote by zi ,j the output vector of the faulty circuit in the presence of f i under t j . We denote by Z j the set of all the output vectors that may be produced by modeled faults under t j , i.e., Z j = {zi ,j :0 ≤ i < n }. Since a test vector t j never detects all the faults in F , the fault free output vector z f f ,j is included in Z j . We note that if zbl ,j is selected such that zbl ,j ∈ / Zj , we will have zi ,j ≠ zbl ,j , and consequently bi ,j = 1, for every f i ∈ F . As a result, t j will not distinguish any pair of faults in the same/different fault dictionary. Therefore, it is only necessary to consider the vectors in Z j as candidates for zbl ,j . For example, considering the output vectors of Table 1, we have Z 0 = {00, 10, 01}. If we use zbl ,0 = 11, we will obtain bi ,0 = 1 for every i , and t 0 will not distinguish any fault pair. Using zbl ,0 = z f f ,0 = 00 causes t 0 to distinguish f 0 from f 1, f 2 and f 3. Using zbl ,0 = z 2,0 = 01 as in Table 3 causes t 0 to distinguish f 0 and f 1 from f 2 and f 3. We select the baseline output vectors zbl ,j by considering the tests in T one at a time. During the selection process we maintain a set of target fault pairs P that need to be distinguished. Initially, P includes all the fault pairs defined based on F . After zbl ,j is selected, all the fault pairs distinguished by t j are removed from P . When t j is considered, the candidates for zbl ,j are the output vectors included in Z j . For every z ∈ Z j , we check how many fault pairs in P will be distinguished if zbl ,j = z . We denote this number by dist (z ). Of all the vectors in Z j we select the one with the highest value of dist (z ), and we set zbl ,j = z . In the example of Table 1, we have the options for zbl ,0 shown in Table 4. These are all the vectors under column t 0 of Table 1. For each option we show the fault pairs that will be distinguished. We select zbl ,0 = 01 since it distinguishes the highest number of fault pairs. The fault
pairs distinguished are removed from consideration. Next, we consider the options for zbl ,1 shown in Table 5. These are all the vectors under column t 1 of Table 1. We select zbl ,1 = 10 to distinguish the remaining two fault pairs. This results in the same/different fault dictionary of Table 3. Table 4: Selection of zbl ,0 dist (z ) z distinguished 00 f 0,f 1; f 0,f 2; f 0,f 3 3 10 f 0,f 1; f 1,f 2; f 1,f 3 3 01 f 0,f 2; f 0,f 3; f 1,f 2; f 1,f 3 4
Table 5: Selection of zbl ,1 z distinguished dist (z ) 11 f 0,f 1 1 10 f 0,f 1; f 2,f 3 2 01 f 2,f 3 1 We observed that the highest values of dist (z ) are typically found after the first few output vectors in Z j are considered, and consideration of additional output vectors does not yield higher values of dist (z ). This allows us to avoid consideration of a large number of candidate output vectors when the number of faults is large and the number of candidate vectors in Z j is large. We implement this observation as follows. For a constant LOWER , if LOWER consecutive output vectors in Z j provide lower values of dist (z ) than the highest value obtained thus far, we do not consider any additional output vectors. We select one of the output vectors with the highest value of dist (z ) of all the output vectors in Z j for which dist (z ) was computed. The procedure described above is given next as Procedure 1. Procedure 1: Computing a same/different dictionary (1) Let F = {f 0,f 1, . . . ,f n −1} be the set of modeled faults, and let T = {t 0,t 1, . . . ,tk −1} be a given test set. Include in P every fault pair based on F . Set j = 0. (2) Set Z j = {zi ,j :f i ∈ F }. Set best_dist = −1. Set lower = 0. (3) For every z ∈ Z j : (a) Find the number of fault pairs f i 1,f i 2 ∈ P such that f i 1,f i 2 will be distinguished if zbl ,j = z , i.e., the number of fault pairs f i 1,f i 2 ∈ P such that zi 1,j = z and zi 2,j ≠ z , or zi 1,j ≠ z and zi 2,j = z . Let this number be dist (z ). (b) If dist (z ) > best_dist , set best_dist = dist (z ) and lower = 0. Else, if dist (z ) < best_dist , set lower = lower +1. (c) If lower = LOWER , go to Step 4.
Select one of the vectors z ∈ Z j for which dist (z ) is the highest of all the vectors in Z j for which dist (z ) was computed. Set zbl ,j = z . Remove from P every fault pair f i 1,f i 2 ∈ P such that f i 1,f i 2 are distinguished based on zbl ,j , i.e., zi 1,j = zbl ,j and zi 2,j ≠ zbl ,j , or zi 1,j ≠ zbl ,j and zi 2,j = zbl ,j . (5) Set j = j +1. If j < k go to Step 2. Procedure 1 includes all the fault pairs in the set P and considers them explicitly. It is possible to reduce the number of fault pairs considered by excluding from P fault pairs that are known to be easy-to-distinguish. In particular, if two faults cannot be detected by the same test the fault pair can be excluded from P . The order by which test vectors are considered in Procedure 1 can have a significant effect on the selection of the baseline vectors, and the number of fault pairs distinguished by the resulting same/different dictionary. Therefore, we apply Procedure 1 several times, each time with a different random order of the test vectors in T . We continue to reorder T and apply Procedure 1 until the number of distinguished fault pairs does not increase for CALLS 1 consecutive calls to Procedure 1, where CALLS 1 is a constant. We use the baseline vectors that result in the highest number of distinguished fault pairs. Starting from the baseline vectors that result in the highest number of distinguished fault pairs, we then attempt to replace individual baseline vectors with different ones. We accept a replacement if it increases the number of distinguished fault pairs. The candidates for replacing zbl ,j are the vectors included in the set Z j defined earlier. The procedure for replacing baseline vectors is given next as Procedure 2. Procedure 2: Replacing baseline vectors (1) Let F = {f 0,f 1, . . . ,f n −1} be the set of modeled faults, and let T = {t 0,t 1, . . . ,tk −1} be a given test set. Include in P every fault pair based on F . Let zbl ,j be the baseline vector selected for t j , for 0 ≤ j < k. (2) Find the number of fault pairs f i 1,f i 2 ∈ P that are distinguished by T with the current baseline vectors. Assign this number to BEST_DIST . (3) Set j = 0. (4) Set Z j = {zi ,j :f i ∈ F }. (5) For every z ∈ Z j : (a) Set zˆ = zbl ,j . Set zbl ,j = z . (b) Find the number of fault pairs f i 1,f i 2 ∈ P that are distinguished by T with the current baseline vectors. Assign this number to DIST . (c) If DIST > BEST_DIST , set BEST_DIST = DIST . Else, set zbl ,j = zˆ. (6) Set j = j +1. If j < k go to Step 4. (4)
We apply Procedure 2 repeatedly as long as it is able to increase the number of distinguished fault pairs (BEST_DIST ).
4. Experimental results We applied Procedure 1 with LOWER = 10 and CALLS 1 = 100, followed by Procedure 2. We used two types of test sets for every circuit: a diagnostic test set for stuck-at faults, and a 10-detection test set for stuck-at faults. We used the set of collapsed single stuck-at faults as the set of faults F . The results are shown in Table 6. We include two rows for every circuit. In the first row we show the results obtained using a diagnostic test set. In the second row we show the results obtained using a 10-detection test set. Under column Ttype we show the type of the test set used, where diag stands for a diagnostic test set, and 10det stands for a 10-detection test set. Under column | T | we show the number of tests in the test set. Under column size we show the size (in bits) of the following fault dictionaries: a full fault dictionary (subcolumn f ull ), a pass/fail fault dictionary (subcolumn p /f ), and a same/different fault dictionary (subcolumn s /d ). Under column indistinguished we show the number of fault pairs left indistinguished by the following fault dictionaries: a full fault dictionary (subcolumn f ull ) , a pass/fail fault dictionary (subcolumn p /f ), the best same/different fault dictionary computed by Procedure 1 using several random test orders (subcolumn s /d rand ), and the same/different fault dictionary computed by Procedure 2 (subcolumn s /d repl ). We omit the entry for Procedure 2 if it does not improve the number of distinguished fault pairs compared to the same/different fault dictionary computed by Procedure 1. The following points can be seen from Table 6. The 10-detection test set is typically larger than a diagnostic test set. Nevertheless, the same/different dictionary based on the 10-detection test set is smaller than the full dictionary based on the diagnostic test set. The size of a same/different fault dictionary is close to that of a pass/fail dictionary. The diagnostic test set leaves a smaller number of indistinguished fault pairs when a full dictionary is used. For a pass/fail dictionary, the higher number of tests in a 10-detection test set is more effective in ensuring that fault pairs can be distinguished. In terms of test generation effort, diagnostic test generation is more computationally intensive than 10-detection test generation due to the number of targets that need to be considered (the number of fault pairs is significantly larger than 10 times the number of faults). Thus, each type of test set has certain advantages for fault diagnosis. In all the cases considered, a same/different fault dictionary can distinguish more fault pairs than a pass/fail
fault dictionary of a similar size. The difference is higher when the test set size is higher. Thus, the same/different fault dictionary is more effective as a replacement for a pass/fail dictionary when a 10-detection test set is used. This is due to the fact that the larger number of tests provides more opportunities for distinguishing fault pairs with appropriately selected baseline vectors. When a 10detection test set is used, the same/different fault dictionary sometimes distinguishes all the fault pairs distinguished by a full dictionary. This is the best possible result. In all the cases, a same/different fault dictionary should be used instead of a pass/fail dictionary since the improvement in diagnostic resolution comes with only a small increase in dictionary size. In many cases, Procedure 1 finds a set of baseline output vectors that cannot be further improved by Procedure 2. In the case of 10-detection test sets, if Procedure 1 finds a set of baseline vectors that distinguishes all the fault pairs that can be distinguished by a full fault dictionary, Procedure 2 cannot improve the results any further. When improvements are possible, Procedure 2 finds them in several cases.
[2] [3]
[4] [5]
[6]
[7]
[8] [9]
[10]
[11] [12]
5. Concluding remarks We defined a new type of fault dictionary called a same/different fault dictionary. A same/different fault dictionary is based on a set of baseline output vectors, one for every test vector applied to the circuit. A same/different fault dictionary contains a single bit for every modeled fault and test vector. The bit is determined by comparing the output vector of the faulty circuit with the baseline output vector of the test. The bit is 0 when the vectors are the same, and 1 when they are different. By selecting baseline output vectors appropriately it is possible to obtain increased diagnostic resolution with a same/different fault dictionary compared to a pass/fail fault dictionary of a similar size. We described a procedure for selecting baseline output vectors for a given test set and set of modeled faults. The procedure was based on diagnostic fault simulation of each test with several options for its baseline output vector. Of all the options, the one that distinguished the largest number of fault pairs was selected. The selection was done in different orders to identify the one that distinguished the largest number of fault pairs overall. A procedure that modified the selection so as to distinguish additional fault pairs was also described.
[13]
References
[23]
[1]
M. Abramovici, M. A. Breuer and A. D. Friedman, Digital Systems Testing and Testable Design, IEEE Press, 1995.
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
R. E. Tulloss, "Size Optimization of Fault Dictionaries", in Proc. Semiconductor Test Conf. , 1978, pp. 264-265. R. E. Tulloss, "Fault Dictionary Compression: Recognizing when a Fault May Be Unambiguously Represented by a Single Failure Detection", in Proc. Test Conf., Nov. 1980, pp. 368-370. J. Richman and K. R. Bowden, "The Modern Fault Dictionary", in Proc. Intl. Test Conf., Sept. 1985, pp. 696-702. V. Ratford and P. Keating, "Integrating Guided Probe and Fault Dictionary: An Enhanced Diagnostic Approach", in Proc. Intl. Test Conf., 1986, pp. 304-311. R. C. Aitken and V. K. Agarwal, "A Diagnosis Method Using Pseudo-Random Vectors Without Intermediate Signatures", in Proc. Intl. Conf. on Computer-Aided Design, Nov. 1989, pp. 574-577. S. D. Millman, E. J. McCluskey and J. M. Acken, "Diagnosing CMOS Bridging Faults with Stuck-at Fault Dictionaries", in Proc. Intl. Test Conf., Sept. 1990, pp. 860-870. P. G. Ryan, S. Rawat and W. K. Fuchs, "Two-Stage Fault Location", in Proc. 1991 Intl. Test Conf., Oct. 1991, pp. 963-968. I. Pomeranz and S. M. Reddy, "On the Generation of Small Dictionaries for Fault Location", in Proc. Intl. Conf. on ComputerAided Design, Nov. 1992, pp. 272-279. P. G. Ryan, W. K. Fuchs and I. Pomeranz, "Fault Dictionary Compression and Equivalence Class Computation for Sequential Circuits", in Proc. Intl. Conf. on Computer-Aided Design, Nov. 1993, pp. 508-511. I. Pomeranz, "On Pass/Fail Dictionaries for Scan Circuits", in Proc. 10th Asian Test Symp., Nov. 2001, pp. 51-56. D. B. Lavo and T. Larrabee, "Making Cause-Effect Cost Effective: Low-Resolution Fault Dictionaries", in Proc. Intl. Test Conf., Oct. 2001, pp. 278-286. P. Bernardi, M. Grosso, M. Rebaudengo and M. Sonza Reorda, "A Pattern Ordering Algorithm for Reducing the Size of Fault Dictionaries", in Proc. VLSI Test Symposium, Apr. 2006, pp. 386-391. W. Zou, W.-T. Cheng, S. M. Reddy and H. Tang, "Speeding Up Effect-Cause Defect Diagnosis Using a Small Dictionary", in Proc. VLSI Test Symp., 2007, Paper 6B-2. M. Abramovici and M. A. Breuer, "Fault Diagnosis Based on Effect-Cause Analysis: An Introduction", in Proc. 17th Design Autom. Conf, June 1980, pp. 69-76. M. Abramovici, "A Maximal Resolution Guided-Probe Testing Algorithm", in Proc of Design Autom. Conf., June 1981, pp. 189-195. Y. Azounamian and J. A. Waicukauski, "Fault Diagnosis in an LSSD Environment", in Proc. Intl. Test Conf., Sept. 1981, pp. 86-88. J. Savir and J. P. Roth, "Testing for, and Distinguishing between Failures", in Proc. 12th Intl. Symp. on Fault-Tolerant Computing, June 1982, pp. 165-172. J. A. Waicukauski, V. P. Gupta and S. T. Patel, "Diagnosis of BIST Failures by PPSFP Simulation", in Proc. Intl. Test Conf., Sept. 1987, pp. 480-484. J. A. Waicukauski and E. Lindbloom, "Failure Diagnosis of Structured VLSI", IEEE Design and Test of Computers, Aug. 1989, pp. 49-60. M. Marzouki, J. Laurent and B. Courtois, "Coupling ElectronBeam Probing with Knowledge-Based Fault Localization", in Proc. Intl. Test Conf., Oct. 1991, pp. 238-247. S. Venkataraman and S. B. Drummonds, "POIROT: A Logic Fault Diagnosis Tool and its Applications", in Proc. Intl. Test Conf., Oct. 2000, pp. 253-262. T. Bartenstein, D. Heaberlin, L. Huisman and D. Sliwinski, "Diagnosing Combinational Logic Designs Using the Single Location At-A-Time (SLAT) Paradigm", in Proc. Intl. Test Conf., 2001, pp. 287-296.
Table 6: Experimental results
indistinguished size s/d p/f rand circuit Ttype |T| full p/f s/d full repl s208 41 88150 8815 9225 6 36 30 29 diag s208 10det 271 582650 58265 60975 12 26 12 s298 37 227920 11396 12136 21 125 116 115 diag s298 1441440 72072 76752 30 110 30 10det 234 diag s344 34 302328 11628 12512 5 200 178 172 10det 138 s344 1227096 47196 50784 14 122 14 s382 35 377055 13965 14910 23 210 191 184 diag s382 2725569 100947 107778 26 155 26 10det 253 diag s386 76 379392 29184 30172 0 131 117 s386 1003392 77184 79797 2 115 11 10det 201 s400 31 347355 12865 13702 44 258 249 248 diag 10det 243 s400 2722815 100845 107406 46 189 46 s420 diag 73 565020 31390 32704 15 54 50 49 s420 3351420 186190 193984 26 49 26 10det 433 s510 diag 78 571896 43992 45006 0 70 64 62 10det 543 s510 3981276 306252 313311 10 74 10 120 s526 diag 81 1211598 44874 47061 36 139 114 s526 7359336 272568 285852 42 131 42 10det 492 s641 diag 37 742997 17279 18870 9 243 224 221 s641 10det 227 4558387 106009 115770 10 101 10 s820 2733600 113900 117116 44 601 545 530 diag 134 10det 949 s820 19359600 806650 829426 60 572 60 s953 7855120 151060 158340 3 323 270 243 diag 140 s953 42978728 826514 866346 13 341 13 10det 766 s1196 diag 237 9419328 294354 301938 20 209 162 146 10det 1233 s1196 49004352 1531386 1570842 34 219 34 s1423 diag 95 11265005 142595 150100 154 417 366 323 s1423 10det 269 31897751 403769 425020 169 350 169 s5378 diag 299 311068836 1364337 1432509 524 1818 1684 1664 s5378 4526496 4752672 563 1476 573 10det 992 1032041088 s9234 diag 454 734912500 2939650 3053150 1273 3511 3354 s9234 10det 1132 1832425000 7329700 7612700 1385 2623 1424