libcvd-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libcvd-members] libcvd cvd/fast_corner.h cvd_src/faster_corner....


From: Ethan Eade
Subject: [libcvd-members] libcvd cvd/fast_corner.h cvd_src/faster_corner....
Date: Fri, 26 Jan 2007 15:51:59 +0000

CVSROOT:        /cvsroot/libcvd
Module name:    libcvd
Changes by:     Ethan Eade <ethaneade>  07/01/26 15:51:59

Modified files:
        cvd            : fast_corner.h 
        cvd_src        : faster_corner.cxx 
Added files:
        cvd_src        : corner_9.h corner_10.h 

Log message:
        Added faster_corner_detect_9 and faster_corner_detect_10.  These run in 
55% and 40% of the
        time required by their respective counterparts, fast_corner_detect_9 and
        fast_corner_detect_10.  All questions are asked in parallel.
        
        Ed has argued for these to replace fast_* (instead of having different
        names) when supported by the configuration.  I haven't made those 
changes yet.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libcvd/cvd/fast_corner.h?cvsroot=libcvd&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/libcvd/cvd_src/faster_corner.cxx?cvsroot=libcvd&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/libcvd/cvd_src/corner_9.h?cvsroot=libcvd&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/libcvd/cvd_src/corner_10.h?cvsroot=libcvd&rev=1.1

Patches:
Index: cvd/fast_corner.h
===================================================================
RCS file: /cvsroot/libcvd/libcvd/cvd/fast_corner.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- cvd/fast_corner.h   20 Jan 2007 15:42:21 -0000      1.13
+++ cvd/fast_corner.h   26 Jan 2007 15:51:59 -0000      1.14
@@ -155,6 +155,8 @@
 
 #if (CVD_HAVE_EMMINTRIN && CVD_HAVE_SSE2)
        void faster_corner_detect_12(const BasicImage<byte>& I, 
std::vector<ImageRef>& corners, int barrier);
+       void faster_corner_detect_10(const BasicImage<byte>& I, 
std::vector<ImageRef>& corners, int barrier);
+       void faster_corner_detect_9(const BasicImage<byte>& I, 
std::vector<ImageRef>& corners, int barrier);
 #endif
 
 

Index: cvd_src/faster_corner.cxx
===================================================================
RCS file: /cvsroot/libcvd/libcvd/cvd_src/faster_corner.cxx,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- cvd_src/faster_corner.cxx   25 Jan 2007 15:40:04 -0000      1.3
+++ cvd_src/faster_corner.cxx   26 Jan 2007 15:51:59 -0000      1.4
@@ -13,6 +13,8 @@
 namespace CVD
 {
 
+    #include <cvd_src/corner_9.h>    
+    #include <cvd_src/corner_10.h>    
     #include <cvd_src/corner_12.h>    
 
     struct Less { template <class T1, class T2> static bool eval(const T1 a, 
const T2 b) { return a < b; }};
@@ -142,6 +144,394 @@
            faster_corner_detect_12<false>(I, corners, barrier);
     }
 
+    template <bool Aligned> void faster_corner_detect_10(const 
BasicImage<byte>& I, std::vector<ImageRef>& corners, const int barrier)
+    {
+       const int w = I.size().x;
+       const int stride = 3*w;
+       typedef std::list<std::pair<const byte*, unsigned int> > Passed;
+       Passed passed;
+ 
+       // The compiler refuses to reserve a register for this
+       register const __m128i barriers = _mm_set1_epi8((byte)barrier);
+       const byte* const end = I[I.size().y - 3]-16;
+
+       for (const byte* p = I[3] + 16; p!=end; p+=16) {
+           __m128i lo, hi;
+           {
+               const __m128i here = load_si128<Aligned>((const __m128i*)(p));
+               lo = _mm_subs_epu8(here, barriers);
+               hi = _mm_adds_epu8(barriers, here);
+           }
+           unsigned int ans_b, ans_e;
+           {
+               __m128i top = load_si128<Aligned>((const __m128i*)(p-stride));
+               __m128i bottom = load_si128<Aligned>((const 
__m128i*)(p+stride));
+
+               CHECK_BARRIER(lo, hi, top, ans_b);
+               CHECK_BARRIER(lo, hi, bottom, ans_e);
+               if (!(ans_b | ans_e))
+                   continue;    
+           }
+
+           unsigned int ans_m, ans_p, possible;
+           {
+               __m128i ul = _mm_loadu_si128((const __m128i*)(p-2-2*w));
+               __m128i lr = _mm_loadu_si128((const __m128i*)(p+2+2*w));
+               CHECK_BARRIER(lo, hi, ul, ans_m);
+               CHECK_BARRIER(lo, hi, lr, ans_p);
+               possible = (ans_m & ans_b) | (ans_e & ans_p);
+               if (!possible)
+                   continue;
+           }
+
+           unsigned int ans_o, ans_n;
+           {
+               __m128i ll = _mm_loadu_si128((const __m128i*)(p-2+2*w));
+               __m128i ur = _mm_loadu_si128((const __m128i*)(p+2-2*w));
+               CHECK_BARRIER(lo, hi, ll, ans_o);
+               CHECK_BARRIER(lo, hi, ur, ans_n);
+               possible &= ans_o | (ans_b & ans_n);
+               possible &= ans_n | (ans_e & ans_o);
+               if (!possible)
+                   continue;
+           }
+ 
+           unsigned int ans_h, ans_k;
+           {
+               __m128i left = _mm_loadu_si128((const __m128i*)(p-3));
+               __m128i right = _mm_loadu_si128((const __m128i*)(p+3));
+               CHECK_BARRIER(lo, hi, left, ans_h);
+               CHECK_BARRIER(lo, hi, right, ans_k);
+               possible &= ans_h | (ans_n & ans_k & ans_p);
+               possible &= ans_k | (ans_m & ans_h & ans_o);
+               if (!possible)
+                   continue;
+           }
+           
+           unsigned int ans_a, ans_c;
+           {
+               __m128i a = _mm_loadu_si128((const __m128i*)(p-1-stride));
+               __m128i c = _mm_insert_epi16(_mm_srli_si128(a,2), *(const 
unsigned short*)(p+15-stride), 7);
+               //__m128i c = _mm_loadu_si128((const __m128i*)(p+1-stride));
+               CHECK_BARRIER(lo, hi, a, ans_a);
+               CHECK_BARRIER(lo, hi, c, ans_c);
+               possible &= ans_a | (ans_e & ans_p);
+               possible &= ans_c | (ans_o & ans_e);
+               if (!possible)
+                   continue;
+           }
+
+           unsigned int ans_d, ans_f;
+           {
+               __m128i d = _mm_loadu_si128((const __m128i*)(p-1+stride));
+               __m128i f = _mm_insert_epi16(_mm_srli_si128(d,2), *(const 
unsigned short*)(p+15+stride), 7);
+               //__m128i f = _mm_loadu_si128((const __m128i*)(p+1+stride));
+               CHECK_BARRIER(lo, hi, d, ans_d);
+               CHECK_BARRIER(lo, hi, f, ans_f);
+               const unsigned int ans_abc = ans_a & ans_b & ans_c;
+               possible &= ans_d | (ans_abc & ans_n);
+               possible &= ans_f | (ans_m & ans_abc);
+               if (!possible)
+                   continue;
+           }
+
+           unsigned int ans_g, ans_i;
+           {
+               __m128i g = _mm_loadu_si128((const __m128i*)(p-3-w));
+               __m128i ii = _mm_loadu_si128((const __m128i*)(p-3+w));
+               CHECK_BARRIER(lo, hi, g, ans_g);
+               CHECK_BARRIER(lo, hi, ii, ans_i);
+               possible &= ans_g | (ans_f & ans_p & ans_k);
+               possible &= ans_i | (ans_c & ans_n & ans_k);
+               if (!possible)
+                   continue;
+           }
+
+           unsigned int ans_j, ans_l;
+           {
+               __m128i jj = _mm_loadu_si128((const __m128i*)(p+3-w));
+               __m128i l = _mm_loadu_si128((const __m128i*)(p+3+w));
+               CHECK_BARRIER(lo, hi, jj, ans_j);
+               CHECK_BARRIER(lo, hi, l, ans_l);
+               const unsigned int ans_ghi = ans_g & ans_h & ans_i;
+               possible &= ans_j | (ans_d & ans_o & ans_ghi);
+               possible &= ans_l | (ans_m & ans_a & ans_ghi);
+               if (!possible)
+                   continue;
+           }
+           passed.push_back(make_pair(p,(possible | (possible>>16))&0xFFFF));
+       }
+       corners.reserve(passed.size());
+       int row = 3;
+       const byte* row_start = I[3];
+       // Check first 16
+       {
+           for (int j=3; j<16; ++j)
+               if (is_corner_10<Less>(row_start + j, w, row_start[j]-barrier) 
|| 
+                   is_corner_10<Greater>(row_start + j, w, 
row_start[j]+barrier))
+                   corners.push_back(ImageRef(j,3));
+       }
+       for (Passed::iterator it = passed.begin(); it != passed.end(); ++it) {
+           while (it->first >= row_start + w) {
+               ++row;
+               row_start += w;
+           }
+           int x = it->first - row_start;
+           unsigned int bits = it->second;
+           if (x == 0) {
+               x = 3;
+               bits >>= 3;
+           } else if (x >= w-18)
+               bits &= 0x1FFF;
+           for (;bits;bits>>=1, ++x) {
+               if (bits&0x1)
+                   corners.push_back(ImageRef(x,row));
+           }
+       }
+       // Check last 16
+       {
+           row_start = I[I.size().y-4];
+           for (int j=w-16; j<w; ++j)
+               if (is_corner_10<Less>(row_start + j, w, row_start[j]-barrier) 
|| 
+                   is_corner_10<Greater>(row_start + j, w, 
row_start[j]+barrier))
+                   corners.push_back(ImageRef(j,I.size().y-4));
+       }
+    }
+
+    void faster_corner_detect_10(const BasicImage<byte>& I, 
std::vector<ImageRef>& corners, int barrier)
+    {
+       if (I.size().x < 22) {
+           fast_corner_detect_10(I,corners,barrier);
+           return;
+       } else if (I.size().x < 22 || I.size().y < 7)
+           return;
+
+       if (is_aligned<16>(I[0]) && is_aligned<16>(I[1]))
+           faster_corner_detect_10<true>(I, corners, barrier);
+       else
+           faster_corner_detect_10<false>(I, corners, barrier);
+    }
+
+    template <bool Aligned> void faster_corner_detect_9(const 
BasicImage<byte>& I, std::vector<ImageRef>& corners, const int barrier)
+    {
+       const int w = I.size().x;
+       const int stride = 3*w;
+       typedef std::list<std::pair<const byte*, unsigned int> > Passed;
+       Passed passed;
+       // The compiler refuses to reserve a register for this
+       register const __m128i barriers = _mm_set1_epi8((byte)barrier);
+       const byte* const end = I[I.size().y - 3]-16;
+
+       for (const byte* p = I[3] + 16; p!=end; p+=16) {
+           __m128i lo, hi;
+           {
+               const __m128i here = load_si128<Aligned>((const __m128i*)(p));
+               lo = _mm_subs_epu8(here, barriers);
+               hi = _mm_adds_epu8(barriers, here);
+           }
+           unsigned int ans_0, ans_8, possible;
+           {
+               __m128i top = load_si128<Aligned>((const __m128i*)(p-stride));
+               __m128i bottom = load_si128<Aligned>((const 
__m128i*)(p+stride));
+
+               CHECK_BARRIER(lo, hi, top, ans_0);
+               CHECK_BARRIER(lo, hi, bottom, ans_8);
+               possible = ans_0 | ans_8;
+               if (!possible)
+                   continue;    
+           }
+
+           unsigned int ans_15, ans_1;
+           {
+               __m128i a = _mm_loadu_si128((const __m128i*)(p-1-stride));
+               __m128i c = _mm_insert_epi16(_mm_srli_si128(a,2), *(const 
unsigned short*)(p+15-stride), 7);
+               CHECK_BARRIER(lo, hi, a, ans_15);
+               CHECK_BARRIER(lo, hi, c, ans_1);
+               possible &= ans_8 | (ans_15 & ans_1);
+               if (!possible)
+                   continue;
+           }
+
+           unsigned int ans_9, ans_7;
+           {
+               __m128i d = _mm_loadu_si128((const __m128i*)(p-1+stride));
+               __m128i f = _mm_insert_epi16(_mm_srli_si128(d,2), *(const 
unsigned short*)(p+15+stride), 7);
+               CHECK_BARRIER(lo, hi, d, ans_9);
+               CHECK_BARRIER(lo, hi, f, ans_7);
+               possible &= ans_9 | (ans_0 & ans_1);
+               possible &= ans_7 | (ans_15 & ans_0);
+               if (!possible)
+                   continue;
+           }
+
+           unsigned int ans_12, ans_4;
+           {
+               __m128i left = _mm_loadu_si128((const __m128i*)(p-3));
+               __m128i right = _mm_loadu_si128((const __m128i*)(p+3));
+               CHECK_BARRIER(lo, hi, left, ans_12);
+               CHECK_BARRIER(lo, hi, right, ans_4);
+               possible &= ans_12 | (ans_4 & (ans_1 | ans_7));
+               possible &= ans_4 | (ans_12 & (ans_9 | ans_15));
+               if (!possible)
+                   continue;
+           }
+
+           unsigned int ans_14, ans_6;
+           {
+               __m128i ul = _mm_loadu_si128((const __m128i*)(p-2-2*w));
+               __m128i lr = _mm_loadu_si128((const __m128i*)(p+2+2*w));
+               CHECK_BARRIER(lo, hi, ul, ans_14);
+               CHECK_BARRIER(lo, hi, lr, ans_6);
+               {
+                   const unsigned int ans_6_7 = ans_6 & ans_7;
+                   possible &= ans_14 | (ans_6_7 & (ans_4 | (ans_8 & ans_9)));
+                   possible &= ans_1 | (ans_6_7) | ans_12;
+               }
+               {
+                   const unsigned int ans_14_15 = ans_14 & ans_15;
+                   possible &= ans_6 | (ans_14_15 & (ans_12 | (ans_0 & 
ans_1)));
+                   possible &= ans_9 | (ans_14_15) | ans_4;
+               }
+               if (!possible)
+                   continue;
+           }
+
+           unsigned int ans_10, ans_2;
+           {
+               __m128i ll = _mm_loadu_si128((const __m128i*)(p-2+2*w));
+               __m128i ur = _mm_loadu_si128((const __m128i*)(p+2-2*w));
+               CHECK_BARRIER(lo, hi, ll, ans_10);
+               CHECK_BARRIER(lo, hi, ur, ans_2);
+               {
+                   const unsigned int ans_1_2 = ans_1 & ans_2;
+                   possible &= ans_10 | (ans_1_2 & ((ans_0 & ans_15) | ans_4));
+                   possible &= ans_12 | (ans_1_2) | (ans_6 & ans_7);
+               }
+               {
+                   const unsigned int ans_9_10 = ans_9 & ans_10;
+                   possible &= ans_2 | (ans_9_10 & ((ans_7 & ans_8) | ans_12));
+                   possible &= ans_4 | (ans_9_10) | (ans_14 & ans_15);
+               }
+               possible &= ans_8 | ans_14 | ans_2;
+               possible &= ans_0 | ans_10 | ans_6;
+               if (!possible)
+                   continue;
+           }
+
+           unsigned int ans_13, ans_5;
+           {
+               __m128i g = _mm_loadu_si128((const __m128i*)(p-3-w));
+               __m128i l = _mm_loadu_si128((const __m128i*)(p+3+w));
+               CHECK_BARRIER(lo, hi, g, ans_13);
+               CHECK_BARRIER(lo, hi, l, ans_5);
+               const unsigned int ans_15_0 = ans_15 & ans_0; 
+               const unsigned int ans_7_8 = ans_7 & ans_8;
+               {
+                   const unsigned int ans_12_13 = ans_12 & ans_13;
+                   possible &= ans_5 | (ans_12_13 & ans_14 & ((ans_15_0) | 
ans_10));
+                   possible &= ans_7 | (ans_1 & ans_2) | (ans_12_13);
+                   possible &= ans_2 | (ans_12_13) | (ans_7_8);
+               }
+               {
+                   const unsigned int ans_4_5 = ans_4 & ans_5;
+                   const unsigned int ans_9_10 = ans_9 & ans_10;
+                   possible &= ans_13 | (ans_4_5 & ans_6 & ((ans_7_8) | 
ans_2));
+                   possible &= ans_15 | (ans_4_5) | (ans_9_10);
+                   possible &= ans_10 | (ans_4_5) | (ans_15_0);
+                   possible &= ans_15 | (ans_9_10) | (ans_4_5);
+               }
+
+               possible &= ans_8 | (ans_13 & ans_14) | ans_2;
+               possible &= ans_0 | (ans_5 & ans_6) | ans_10;
+               if (!possible)
+                   continue;
+           }
+
+
+           unsigned int ans_11, ans_3;
+           {
+               __m128i ii = _mm_loadu_si128((const __m128i*)(p-3+w));
+               __m128i jj = _mm_loadu_si128((const __m128i*)(p+3-w));
+               CHECK_BARRIER(lo, hi, ii, ans_11);
+               CHECK_BARRIER(lo, hi, jj, ans_3);
+               {
+                   const unsigned int ans_2_3 = ans_2 & ans_3;
+                   possible &= ans_11 | (ans_2_3 & ans_4 & ((ans_0 & ans_1) | 
(ans_5 & ans_6)));
+                   possible &= ans_13 | (ans_7 & ans_8) | (ans_2_3);
+                   possible &= ans_8 | (ans_2_3) | (ans_13 & ans_14);
+               }
+               {
+                   const unsigned int ans_11_12 = ans_11 & ans_12;
+                   possible &= ans_3 | (ans_10 & ans_11_12 & ((ans_8 & ans_9) 
| (ans_13 & ans_14)));
+                   possible &= ans_1 | (ans_11_12) | (ans_6 & ans_7);
+                   possible &= ans_6 | (ans_0 & ans_1) | (ans_11_12);
+               }
+               {
+                   const unsigned int ans_3_4 = ans_3 & ans_4;
+                   possible &= ans_9 | (ans_3_4) | (ans_14 & ans_15);
+                   possible &= ans_14 | (ans_8 & ans_9) | (ans_3_4);
+               }
+               {
+                   const unsigned int ans_10_11 = ans_10 & ans_11;
+                   possible &= ans_5 | (ans_15 & ans_0) | (ans_10_11);
+                   possible &= ans_0 | (ans_10_11) | (ans_5 & ans_6);
+               }
+               if (!possible)
+                   continue;
+
+           }
+           passed.push_back(make_pair(p,(possible | (possible>>16))&0xFFFF));
+       }
+       corners.reserve(passed.size()*2);
+       int row = 3;
+       const byte* row_start = I[3];
+       // Check first 16
+       {
+           for (int j=3; j<16; ++j)
+               if (is_corner_9<Less>(row_start + j, w, row_start[j]-barrier) 
|| 
+                   is_corner_9<Greater>(row_start + j, w, 
row_start[j]+barrier))
+                   corners.push_back(ImageRef(j,3));
+       }
+       for (Passed::iterator it = passed.begin(); it != passed.end(); ++it) {
+           while (it->first >= row_start + w) {
+               ++row;
+               row_start += w;
+           }
+           int x = it->first - row_start;
+           unsigned int bits = it->second;
+           if (x == 0) {
+               x = 3;
+               bits >>= 3;
+           } else if (x >= w-18)
+               bits &= 0x1FFF;
+           for (;bits;bits>>=1, ++x) {
+               if (bits&0x1)
+                   corners.push_back(ImageRef(x,row));
+           }
+       }
+       // Check last 16
+       {
+           row_start = I[I.size().y-4];
+           for (int j=w-16; j<w; ++j)
+               if (is_corner_9<Less>(row_start + j, w, row_start[j]-barrier) 
|| 
+                   is_corner_9<Greater>(row_start + j, w, 
row_start[j]+barrier))
+                   corners.push_back(ImageRef(j,I.size().y-4));
+       }
+    }
+
+    void faster_corner_detect_9(const BasicImage<byte>& I, 
std::vector<ImageRef>& corners, int barrier)
+    {
+       if (I.size().x < 22) {
+           fast_corner_detect_9(I,corners,barrier);
+           return;
+       } else if (I.size().x < 22 || I.size().y < 7)
+           return;
+
+       if (is_aligned<16>(I[0]) && is_aligned<16>(I[1]))
+           faster_corner_detect_9<true>(I, corners, barrier);
+       else
+           faster_corner_detect_9<false>(I, corners, barrier);
+    }
 
 }
 

Index: cvd_src/corner_9.h
===================================================================
RCS file: cvd_src/corner_9.h
diff -N cvd_src/corner_9.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ cvd_src/corner_9.h  26 Jan 2007 15:51:59 -0000      1.1
@@ -0,0 +1,440 @@
+template <class C> inline bool is_corner_9(const byte* p, const int w, const 
int t) {
+    const int w3 = 3*w;
+    if (!C::eval(p[-1-w3],t)) { // ???????????????-
+        if (!C::eval(p[w3],t)) { // ????????-??????-
+            return false;
+        } // address@hidden
+        if (!C::eval(p[1+w3],t)) { // address@hidden
+            return false;
+        } // ???????@@??????-
+        if (!C::eval(p[2+2*w],t)) { // ??????-@@??????-
+            return false;
+        } // ??????@@@??????-
+        if (!C::eval(p[3+w],t)) { // ?????-@@@??????-
+            if (!C::eval(p[-2-2*w],t)) { // ?????-@@@?????--
+                return false;
+            } // ?????-@@@address@hidden
+            if (!C::eval(p[-3-w],t)) { // ?????-@@@address@hidden
+                return false;
+            } // ?????-@@@????@@-
+            if (!C::eval(p[-1+w3],t)) { // ?????-@@@-???@@-
+                return false;
+            } // ?????-@@@@???@@-
+            if (!C::eval(p[-2+2*w],t)) { // ?????-@@@@-??@@-
+                return false;
+            } // ?????-@@@@@??@@-
+            if (!C::eval(p[-3+w],t)) { // ?????-@@@@@-?@@-
+                return false;
+            } // ?????-@@@@@@?@@-
+            if (!C::eval(p[-3],t)) { // ?????-@@@@@@-@@-
+                return false;
+            } // ?????-@@@@@@@@@-
+            return true;
+        } // ?????@@@@??????-
+        if (!C::eval(p[3],t)) { // ????-@@@@??????-
+            if (!C::eval(p[-3-w],t)) { // ????-@@@@????-?-
+                return false;
+            } // ????-@@@@address@hidden
+            if (!C::eval(p[-1+w3],t)) { // ????-@@@@address@hidden
+                return false;
+            } // ????-@@@@@address@hidden
+            if (!C::eval(p[-2+2*w],t)) { // ????-@@@@@address@hidden
+                return false;
+            } // ????-@@@@@@address@hidden
+            if (!C::eval(p[-3+w],t)) { // ????-@@@@@@address@hidden
+                return false;
+            } // ????-@@@@@@@address@hidden
+            if (!C::eval(p[-3],t)) { // ????-@@@@@@@address@hidden
+                return false;
+            } // ????-@@@@@@@@@?-
+            return true;
+        } // ????@@@@@??????-
+        if (!C::eval(p[3-w],t)) { // ???-@@@@@??????-
+            if (!C::eval(p[-1+w3],t)) { // ???-@@@@@-?????-
+                return false;
+            } // ???-@@@@@@?????-
+            if (!C::eval(p[-2+2*w],t)) { // ???-@@@@@@-????-
+                return false;
+            } // ???-@@@@@@@????-
+            if (!C::eval(p[-3+w],t)) { // ???-@@@@@@@-???-
+                return false;
+            } // ???-@@@@@@@@???-
+            if (!C::eval(p[-3],t)) { // ???-@@@@@@@@-??-
+                return false;
+            } // ???-@@@@@@@@@??-
+            return true;
+        } // ???@@@@@@??????-
+        if (!C::eval(p[-1+w3],t)) { // ???@@@@@@-?????-
+            if (!C::eval(p[-w3],t)) { // -??@@@@@@-?????-
+                return false;
+            } // @??@@@@@@-?????-
+            if (!C::eval(p[1-w3],t)) { // @-?@@@@@@-?????-
+                return false;
+            } // @@?@@@@@@-?????-
+            if (!C::eval(p[2-2*w],t)) { // @@-@@@@@@-?????-
+                return false;
+            } // @@@@@@@@@-?????-
+            return true;
+        } // ???@@@@@@@?????-
+        if (!C::eval(p[2-2*w],t)) { // ??-@@@@@@@?????-
+            if (!C::eval(p[-2+2*w],t)) { // ??-@@@@@@@-????-
+                return false;
+            } // ??-@@@@@@@@????-
+            if (!C::eval(p[-3+w],t)) { // ??-@@@@@@@@-???-
+                return false;
+            } // ??-@@@@@@@@@???-
+            return true;
+        } // ??@@@@@@@@?????-
+        if (!C::eval(p[-2+2*w],t)) { // ??@@@@@@@@-????-
+            if (!C::eval(p[1-w3],t)) { // ?-@@@@@@@@-????-
+                return false;
+            } // ?@@@@@@@@@-????-
+            return true;
+        } // ??@@@@@@@@@????-
+        return true;
+    } // ???????????????@
+    if (!C::eval(p[-2-2*w],t)) { // ??????????????-@
+        if (!C::eval(p[3+w],t)) { // ?????-????????-@
+            return false;
+        } // address@hidden@
+        if (!C::eval(p[1+w3],t)) { // address@hidden@
+            return false;
+        } // address@hidden@??????-@
+        if (!C::eval(p[2+2*w],t)) { // address@hidden@??????-@
+            return false;
+        } // ?????@@@??????-@
+        if (!C::eval(p[3],t)) { // ????-@@@??????-@
+            if (!C::eval(p[-3-w],t)) { // ????-@@@?????--@
+                return false;
+            } // ????-@@@address@hidden@
+            if (!C::eval(p[-3],t)) { // ????-@@@address@hidden@
+                return false;
+            } // ????-@@@????@@-@
+            if (!C::eval(p[w3],t)) { // ????-@@@-???@@-@
+                return false;
+            } // ????-@@@@???@@-@
+            if (!C::eval(p[-1+w3],t)) { // ????-@@@@-??@@-@
+                return false;
+            } // ????-@@@@@??@@-@
+            if (!C::eval(p[-2+2*w],t)) { // ????-@@@@@-?@@-@
+                return false;
+            } // ????-@@@@@@?@@-@
+            if (!C::eval(p[-3+w],t)) { // ????-@@@@@@-@@-@
+                return false;
+            } // ????-@@@@@@@@@-@
+            return true;
+        } // ????@@@@??????-@
+        if (!C::eval(p[3-w],t)) { // ???-@@@@??????-@
+            if (!C::eval(p[-3],t)) { // ???-@@@@????-?-@
+                return false;
+            } // ???-@@@@address@hidden@
+            if (!C::eval(p[w3],t)) { // ???-@@@@address@hidden@
+                return false;
+            } // ???-@@@@@address@hidden@
+            if (!C::eval(p[-1+w3],t)) { // ???-@@@@@address@hidden@
+                return false;
+            } // ???-@@@@@@address@hidden@
+            if (!C::eval(p[-2+2*w],t)) { // ???-@@@@@@address@hidden@
+                return false;
+            } // ???-@@@@@@@address@hidden@
+            if (!C::eval(p[-3+w],t)) { // ???-@@@@@@@address@hidden@
+                return false;
+            } // ???-@@@@@@@@@?-@
+            return true;
+        } // ???@@@@@??????-@
+        if (!C::eval(p[2-2*w],t)) { // ??-@@@@@??????-@
+            if (!C::eval(p[w3],t)) { // ??-@@@@@-?????-@
+                return false;
+            } // ??-@@@@@@?????-@
+            if (!C::eval(p[-1+w3],t)) { // ??-@@@@@@-????-@
+                return false;
+            } // ??-@@@@@@@????-@
+            if (!C::eval(p[-2+2*w],t)) { // ??-@@@@@@@-???-@
+                return false;
+            } // ??-@@@@@@@@???-@
+            if (!C::eval(p[-3+w],t)) { // ??-@@@@@@@@-??-@
+                return false;
+            } // ??-@@@@@@@@@??-@
+            return true;
+        } // ??@@@@@@??????-@
+        if (!C::eval(p[1-w3],t)) { // ?-@@@@@@??????-@
+            if (!C::eval(p[w3],t)) { // ?-@@@@@@-?????-@
+                return false;
+            } // ?-@@@@@@@?????-@
+            if (!C::eval(p[-1+w3],t)) { // ?-@@@@@@@-????-@
+                return false;
+            } // ?-@@@@@@@@????-@
+            if (!C::eval(p[-2+2*w],t)) { // ?-@@@@@@@@-???-@
+                return false;
+            } // ?-@@@@@@@@@???-@
+            return true;
+        } // ?@@@@@@@??????-@
+        if (!C::eval(p[-w3],t)) { // -@@@@@@@??????-@
+            if (!C::eval(p[w3],t)) { // -@@@@@@@-?????-@
+                return false;
+            } // -@@@@@@@@?????-@
+            if (!C::eval(p[-1+w3],t)) { // -@@@@@@@@-????-@
+                return false;
+            } // -@@@@@@@@@????-@
+            return true;
+        } // @@@@@@@@??????-@
+        return true;
+    } // ??????????????@@
+    if (!C::eval(p[-w3],t)) { // -?????????????@@
+        if (!C::eval(p[1+w3],t)) { // -??????-??????@@
+            return false;
+        } // address@hidden@@
+        if (!C::eval(p[-1+w3],t)) { // address@hidden@@
+            return false;
+        } // address@hidden@????@@
+        if (!C::eval(p[w3],t)) { // address@hidden@????@@
+            return false;
+        } // -??????@@@????@@
+        if (!C::eval(p[-2+2*w],t)) { // -??????@@@-???@@
+            if (!C::eval(p[2+2*w],t)) { // -?????-@@@-???@@
+                return false;
+            } // -?????@@@@-???@@
+            if (!C::eval(p[3+w],t)) { // -????-@@@@-???@@
+                return false;
+            } // -????@@@@@-???@@
+            if (!C::eval(p[1-w3],t)) { // --???@@@@@-???@@
+                return false;
+            } // address@hidden@@@@@-???@@
+            if (!C::eval(p[2-2*w],t)) { // address@hidden@@@@@-???@@
+                return false;
+            } // -@@??@@@@@-???@@
+            if (!C::eval(p[3-w],t)) { // -@@-?@@@@@-???@@
+                return false;
+            } // -@@@?@@@@@-???@@
+            if (!C::eval(p[3],t)) { // -@@@-@@@@@-???@@
+                return false;
+            } // -@@@@@@@@@-???@@
+            return true;
+        } // -??????@@@@???@@
+        if (!C::eval(p[-3+w],t)) { // -??????@@@@-??@@
+            if (!C::eval(p[2+2*w],t)) { // -?????-@@@@-??@@
+                return false;
+            } // -?????@@@@@-??@@
+            if (!C::eval(p[2-2*w],t)) { // -?-???@@@@@-??@@
+                return false;
+            } // address@hidden@@@@@-??@@
+            if (!C::eval(p[3-w],t)) { // address@hidden@@@@@-??@@
+                return false;
+            } // -?@@??@@@@@-??@@
+            if (!C::eval(p[3],t)) { // -?@@-?@@@@@-??@@
+                return false;
+            } // -?@@@?@@@@@-??@@
+            if (!C::eval(p[3+w],t)) { // -?@@@-@@@@@-??@@
+                return false;
+            } // -?@@@@@@@@@-??@@
+            return true;
+        } // -??????@@@@@??@@
+        if (!C::eval(p[-3],t)) { // -??????@@@@@-?@@
+            if (!C::eval(p[3-w],t)) { // -??-???@@@@@-?@@
+                return false;
+            } // address@hidden@@@@@-?@@
+            if (!C::eval(p[3],t)) { // address@hidden@@@@@-?@@
+                return false;
+            } // -??@@??@@@@@-?@@
+            if (!C::eval(p[3+w],t)) { // -??@@-?@@@@@-?@@
+                return false;
+            } // -??@@@?@@@@@-?@@
+            if (!C::eval(p[2+2*w],t)) { // -??@@@-@@@@@-?@@
+                return false;
+            } // -??@@@@@@@@@-?@@
+            return true;
+        } // -??????@@@@@@?@@
+        if (!C::eval(p[-3-w],t)) { // -??????@@@@@@-@@
+            if (!C::eval(p[3],t)) { // -???-??@@@@@@-@@
+                return false;
+            } // address@hidden@@@@@@-@@
+            if (!C::eval(p[3+w],t)) { // address@hidden@@@@@@-@@
+                return false;
+            } // -???@@?@@@@@@-@@
+            if (!C::eval(p[2+2*w],t)) { // -???@@-@@@@@@-@@
+                return false;
+            } // -???@@@@@@@@@-@@
+            return true;
+        } // -??????@@@@@@@@@
+        return true;
+    } // @?????????????@@
+    if (!C::eval(p[-3-w],t)) { // @????????????-@@
+        if (!C::eval(p[2+2*w],t)) { // @?????-??????-@@
+            return false;
+        } // @address@hidden@@
+        if (!C::eval(p[3+w],t)) { // @address@hidden@@
+            return false;
+        } // @????@@??????-@@
+        if (!C::eval(p[3],t)) { // @???-@@??????-@@
+            return false;
+        } // @???@@@??????-@@
+        if (!C::eval(p[3-w],t)) { // @??-@@@??????-@@
+            if (!C::eval(p[-3],t)) { // @??-@@@?????--@@
+                return false;
+            } // @??-@@@address@hidden@@
+            if (!C::eval(p[-3+w],t)) { // @??-@@@address@hidden@@
+                return false;
+            } // @??-@@@????@@-@@
+            if (!C::eval(p[1+w3],t)) { // @??-@@@-???@@-@@
+                return false;
+            } // @??-@@@@???@@-@@
+            if (!C::eval(p[w3],t)) { // @??-@@@@-??@@-@@
+                return false;
+            } // @??-@@@@@??@@-@@
+            if (!C::eval(p[-1+w3],t)) { // @??-@@@@@-?@@-@@
+                return false;
+            } // @??-@@@@@@?@@-@@
+            if (!C::eval(p[-2+2*w],t)) { // @??-@@@@@@-@@-@@
+                return false;
+            } // @??-@@@@@@@@@-@@
+            return true;
+        } // @??@@@@??????-@@
+        if (!C::eval(p[2-2*w],t)) { // @?-@@@@??????-@@
+            if (!C::eval(p[-3+w],t)) { // @?-@@@@????-?-@@
+                return false;
+            } // @?-@@@@address@hidden@@
+            if (!C::eval(p[1+w3],t)) { // @?-@@@@address@hidden@@
+                return false;
+            } // @?-@@@@@address@hidden@@
+            if (!C::eval(p[w3],t)) { // @?-@@@@@address@hidden@@
+                return false;
+            } // @?-@@@@@@address@hidden@@
+            if (!C::eval(p[-1+w3],t)) { // @?-@@@@@@address@hidden@@
+                return false;
+            } // @?-@@@@@@@address@hidden@@
+            if (!C::eval(p[-2+2*w],t)) { // @?-@@@@@@@address@hidden@@
+                return false;
+            } // @?-@@@@@@@@@?-@@
+            return true;
+        } // @?@@@@@??????-@@
+        if (!C::eval(p[1-w3],t)) { // @-@@@@@??????-@@
+            if (!C::eval(p[1+w3],t)) { // @-@@@@@-?????-@@
+                return false;
+            } // @-@@@@@@?????-@@
+            if (!C::eval(p[w3],t)) { // @-@@@@@@-????-@@
+                return false;
+            } // @-@@@@@@@????-@@
+            if (!C::eval(p[-1+w3],t)) { // @-@@@@@@@-???-@@
+                return false;
+            } // @-@@@@@@@@???-@@
+            if (!C::eval(p[-2+2*w],t)) { // @-@@@@@@@@-??-@@
+                return false;
+            } // @-@@@@@@@@@??-@@
+            return true;
+        } // @@@@@@@??????-@@
+        return true;
+    } // @????????????@@@
+    if (!C::eval(p[1-w3],t)) { // @-???????????@@@
+        if (!C::eval(p[-2+2*w],t)) { // @-????????-??@@@
+            return false;
+        } // @address@hidden@@@
+        if (!C::eval(p[-1+w3],t)) { // @address@hidden@@@
+            return false;
+        } // @-???????@@??@@@
+        if (!C::eval(p[w3],t)) { // @-??????-@@??@@@
+            return false;
+        } // @-??????@@@??@@@
+        if (!C::eval(p[-3+w],t)) { // @-??????@@@-?@@@
+            if (!C::eval(p[1+w3],t)) { // @-?????-@@@-?@@@
+                return false;
+            } // @-?????@@@@-?@@@
+            if (!C::eval(p[2+2*w],t)) { // @-????-@@@@-?@@@
+                return false;
+            } // @-????@@@@@-?@@@
+            if (!C::eval(p[2-2*w],t)) { // @--???@@@@@-?@@@
+                return false;
+            } // @address@hidden@@@@@-?@@@
+            if (!C::eval(p[3-w],t)) { // @address@hidden@@@@@-?@@@
+                return false;
+            } // @-@@??@@@@@-?@@@
+            if (!C::eval(p[3],t)) { // @-@@-?@@@@@-?@@@
+                return false;
+            } // @-@@@?@@@@@-?@@@
+            if (!C::eval(p[3+w],t)) { // @-@@@-@@@@@-?@@@
+                return false;
+            } // @-@@@@@@@@@-?@@@
+            return true;
+        } // @-??????@@@@?@@@
+        if (!C::eval(p[-3],t)) { // @-??????@@@@-@@@
+            if (!C::eval(p[1+w3],t)) { // @-?????-@@@@-@@@
+                return false;
+            } // @-?????@@@@@-@@@
+            if (!C::eval(p[3-w],t)) { // @-?-???@@@@@-@@@
+                return false;
+            } // @address@hidden@@@@@-@@@
+            if (!C::eval(p[3],t)) { // @address@hidden@@@@@-@@@
+                return false;
+            } // @-?@@??@@@@@-@@@
+            if (!C::eval(p[3+w],t)) { // @-?@@-?@@@@@-@@@
+                return false;
+            } // @-?@@@?@@@@@-@@@
+            if (!C::eval(p[2+2*w],t)) { // @-?@@@-@@@@@-@@@
+                return false;
+            } // @-?@@@@@@@@@-@@@
+            return true;
+        } // @-??????@@@@@@@@
+        return true;
+    } // @@???????????@@@
+    if (!C::eval(p[-3],t)) { // @@??????????-@@@
+        if (!C::eval(p[3+w],t)) { // @@???-??????-@@@
+            return false;
+        } // @@address@hidden@@@
+        if (!C::eval(p[3],t)) { // @@address@hidden@@@
+            return false;
+        } // @@??@@??????-@@@
+        if (!C::eval(p[3-w],t)) { // @@?-@@??????-@@@
+            return false;
+        } // @@?@@@??????-@@@
+        if (!C::eval(p[2-2*w],t)) { // @@-@@@??????-@@@
+            if (!C::eval(p[-3+w],t)) { // @@-@@@?????--@@@
+                return false;
+            } // @@-@@@address@hidden@@@
+            if (!C::eval(p[-2+2*w],t)) { // @@-@@@address@hidden@@@
+                return false;
+            } // @@-@@@????@@-@@@
+            if (!C::eval(p[2+2*w],t)) { // @@-@@@-???@@-@@@
+                return false;
+            } // @@-@@@@???@@-@@@
+            if (!C::eval(p[1+w3],t)) { // @@-@@@@-??@@-@@@
+                return false;
+            } // @@-@@@@@??@@-@@@
+            if (!C::eval(p[w3],t)) { // @@-@@@@@-?@@-@@@
+                return false;
+            } // @@-@@@@@@?@@-@@@
+            if (!C::eval(p[-1+w3],t)) { // @@-@@@@@@-@@-@@@
+                return false;
+            } // @@-@@@@@@@@@-@@@
+            return true;
+        } // @@@@@@??????-@@@
+        return true;
+    } // @@??????????@@@@
+    if (!C::eval(p[2-2*w],t)) { // @@-?????????@@@@
+        if (!C::eval(p[-1+w3],t)) { // @@-??????-??@@@@
+            return false;
+        } // @@address@hidden@@@@
+        if (!C::eval(p[-2+2*w],t)) { // @@address@hidden@@@@
+            return false;
+        } // @@-??????@@?@@@@
+        if (!C::eval(p[-3+w],t)) { // @@-??????@@-@@@@
+            return false;
+        } // @@-??????@@@@@@@
+        return true;
+    } // @@@?????????@@@@
+    if (!C::eval(p[-3+w],t)) { // @@@????????-@@@@
+        if (!C::eval(p[3-w],t)) { // @@@-???????-@@@@
+            return false;
+        } // @@@@???????-@@@@
+        if (!C::eval(p[3],t)) { // @@@@-??????-@@@@
+            return false;
+        } // @@@@@??????-@@@@
+        return true;
+    } // @@@????????@@@@@
+    if (!C::eval(p[3-w],t)) { // @@@-???????@@@@@
+        if (!C::eval(p[-2+2*w],t)) { // @@@-??????-@@@@@
+            return false;
+        } // @@@-??????@@@@@@
+        return true;
+    } // @@@@???????@@@@@
+    return true;
+}
+

Index: cvd_src/corner_10.h
===================================================================
RCS file: cvd_src/corner_10.h
diff -N cvd_src/corner_10.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ cvd_src/corner_10.h 26 Jan 2007 15:51:59 -0000      1.1
@@ -0,0 +1,365 @@
+template <class C> inline bool is_corner_10(const byte* p, const int w, const 
int t) {
+    const int w3 = 3*w;
+    if (!C::eval(p[-1-w3],t)) { // ???????????????-
+        if (!C::eval(p[3+w],t)) { // ?????-?????????-
+            return false;
+        } // address@hidden
+        if (!C::eval(p[2+2*w],t)) { // address@hidden
+            return false;
+        } // ?????@@????????-
+        if (!C::eval(p[-1+w3],t)) { // ?????@@??-?????-
+            return false;
+        } // ?????@@address@hidden
+        if (!C::eval(p[1+w3],t)) { // ?????@@address@hidden
+            return false;
+        } // ?????@@@address@hidden
+        if (!C::eval(p[w3],t)) { // ?????@@@address@hidden
+            return false;
+        } // ?????@@@@@?????-
+        if (!C::eval(p[-2+2*w],t)) { // ?????@@@@@-????-
+            if (!C::eval(p[-w3],t)) { // -????@@@@@-????-
+                return false;
+            } // @????@@@@@-????-
+            if (!C::eval(p[3],t)) { // @???-@@@@@-????-
+                return false;
+            } // @???@@@@@@-????-
+            if (!C::eval(p[1-w3],t)) { // @-??@@@@@@-????-
+                return false;
+            } // @@??@@@@@@-????-
+            if (!C::eval(p[2-2*w],t)) { // @@-?@@@@@@-????-
+                return false;
+            } // @@@?@@@@@@-????-
+            if (!C::eval(p[3-w],t)) { // @@@-@@@@@@-????-
+                return false;
+            } // @@@@@@@@@@-????-
+            return true;
+        } // ?????@@@@@@????-
+        if (!C::eval(p[-3+w],t)) { // ?????@@@@@@-???-
+            if (!C::eval(p[3],t)) { // ????-@@@@@@-???-
+                return false;
+            } // ????@@@@@@@-???-
+            if (!C::eval(p[1-w3],t)) { // ?-??@@@@@@@-???-
+                return false;
+            } // address@hidden@@@@@@@-???-
+            if (!C::eval(p[2-2*w],t)) { // address@hidden@@@@@@@-???-
+                return false;
+            } // ?@@?@@@@@@@-???-
+            if (!C::eval(p[3-w],t)) { // ?@@-@@@@@@@-???-
+                return false;
+            } // ?@@@@@@@@@@-???-
+            return true;
+        } // ?????@@@@@@@???-
+        if (!C::eval(p[3],t)) { // ????-@@@@@@@???-
+            if (!C::eval(p[-3],t)) { // ????-@@@@@@@-??-
+                return false;
+            } // ????-@@@@@@@@??-
+            if (!C::eval(p[-3-w],t)) { // ????-@@@@@@@@-?-
+                return false;
+            } // ????-@@@@@@@@@?-
+            if (!C::eval(p[-2-2*w],t)) { // ????-@@@@@@@@@--
+                return false;
+            } // ????-@@@@@@@@@@-
+            return true;
+        } // ????@@@@@@@@???-
+        if (!C::eval(p[3-w],t)) { // ???-@@@@@@@@???-
+            if (!C::eval(p[-3],t)) { // ???-@@@@@@@@-??-
+                return false;
+            } // ???-@@@@@@@@@??-
+            if (!C::eval(p[-3-w],t)) { // ???-@@@@@@@@@-?-
+                return false;
+            } // ???-@@@@@@@@@@?-
+            return true;
+        } // ???@@@@@@@@@???-
+        if (!C::eval(p[-3],t)) { // ???@@@@@@@@@-??-
+            if (!C::eval(p[2-2*w],t)) { // ??-@@@@@@@@@-??-
+                return false;
+            } // ??@@@@@@@@@@-??-
+            return true;
+        } // ???@@@@@@@@@@??-
+        return true;
+    } // ???????????????@
+    if (!C::eval(p[-2-2*w],t)) { // ??????????????-@
+        if (!C::eval(p[3],t)) { // ????-?????????-@
+            return false;
+        } // address@hidden@
+        if (!C::eval(p[3+w],t)) { // address@hidden@
+            return false;
+        } // ????@@????????-@
+        if (!C::eval(p[w3],t)) { // ????@@??-?????-@
+            return false;
+        } // ????@@address@hidden@
+        if (!C::eval(p[1+w3],t)) { // ????@@address@hidden@
+            return false;
+        } // ????@@?@@?????-@
+        if (!C::eval(p[2+2*w],t)) { // ????@@-@@?????-@
+            return false;
+        } // ????@@@@@?????-@
+        if (!C::eval(p[3-w],t)) { // ???-@@@@@?????-@
+            if (!C::eval(p[-1+w3],t)) { // ???-@@@@@-????-@
+                return false;
+            } // ???-@@@@@@????-@
+            if (!C::eval(p[-3-w],t)) { // ???-@@@@@@???--@
+                return false;
+            } // ???-@@@@@@address@hidden@
+            if (!C::eval(p[-2+2*w],t)) { // ???-@@@@@@address@hidden@
+                return false;
+            } // ???-@@@@@@@address@hidden@
+            if (!C::eval(p[-3+w],t)) { // ???-@@@@@@@address@hidden@
+                return false;
+            } // ???-@@@@@@@@address@hidden@
+            if (!C::eval(p[-3],t)) { // ???-@@@@@@@@address@hidden@
+                return false;
+            } // ???-@@@@@@@@@@-@
+            return true;
+        } // ???@@@@@@?????-@
+        if (!C::eval(p[2-2*w],t)) { // ??-@@@@@@?????-@
+            if (!C::eval(p[-3],t)) { // ??-@@@@@@???-?-@
+                return false;
+            } // ??-@@@@@@address@hidden@
+            if (!C::eval(p[-1+w3],t)) { // ??-@@@@@@address@hidden@
+                return false;
+            } // ??-@@@@@@@address@hidden@
+            if (!C::eval(p[-2+2*w],t)) { // ??-@@@@@@@address@hidden@
+                return false;
+            } // ??-@@@@@@@@address@hidden@
+            if (!C::eval(p[-3+w],t)) { // ??-@@@@@@@@address@hidden@
+                return false;
+            } // ??-@@@@@@@@@@?-@
+            return true;
+        } // ??@@@@@@@?????-@
+        if (!C::eval(p[1-w3],t)) { // ?-@@@@@@@?????-@
+            if (!C::eval(p[-1+w3],t)) { // ?-@@@@@@@-????-@
+                return false;
+            } // ?-@@@@@@@@????-@
+            if (!C::eval(p[-2+2*w],t)) { // ?-@@@@@@@@-???-@
+                return false;
+            } // ?-@@@@@@@@@???-@
+            if (!C::eval(p[-3+w],t)) { // ?-@@@@@@@@@-??-@
+                return false;
+            } // ?-@@@@@@@@@@??-@
+            return true;
+        } // ?@@@@@@@@?????-@
+        if (!C::eval(p[-w3],t)) { // -@@@@@@@@?????-@
+            if (!C::eval(p[-1+w3],t)) { // -@@@@@@@@-????-@
+                return false;
+            } // -@@@@@@@@@????-@
+            if (!C::eval(p[-2+2*w],t)) { // -@@@@@@@@@-???-@
+                return false;
+            } // -@@@@@@@@@@???-@
+            return true;
+        } // @@@@@@@@@?????-@
+        return true;
+    } // ??????????????@@
+    if (!C::eval(p[-3-w],t)) { // ?????????????-@@
+        if (!C::eval(p[1+w3],t)) { // ???????-?????-@@
+            return false;
+        } // address@hidden@@
+        if (!C::eval(p[3-w],t)) { // address@hidden@@
+            return false;
+        } // address@hidden@?????-@@
+        if (!C::eval(p[3],t)) { // address@hidden@?????-@@
+            return false;
+        } // ???@@address@hidden@@
+        if (!C::eval(p[3+w],t)) { // ???@@address@hidden@@
+            return false;
+        } // ???@@@address@hidden@@
+        if (!C::eval(p[2+2*w],t)) { // ???@@@address@hidden@@
+            return false;
+        } // ???@@@@@?????-@@
+        if (!C::eval(p[2-2*w],t)) { // ??-@@@@@?????-@@
+            if (!C::eval(p[w3],t)) { // ??-@@@@@-????-@@
+                return false;
+            } // ??-@@@@@@????-@@
+            if (!C::eval(p[-3],t)) { // ??-@@@@@@???--@@
+                return false;
+            } // ??-@@@@@@address@hidden@@
+            if (!C::eval(p[-1+w3],t)) { // ??-@@@@@@address@hidden@@
+                return false;
+            } // ??-@@@@@@@address@hidden@@
+            if (!C::eval(p[-2+2*w],t)) { // ??-@@@@@@@address@hidden@@
+                return false;
+            } // ??-@@@@@@@@address@hidden@@
+            if (!C::eval(p[-3+w],t)) { // ??-@@@@@@@@address@hidden@@
+                return false;
+            } // ??-@@@@@@@@@@-@@
+            return true;
+        } // ??@@@@@@?????-@@
+        if (!C::eval(p[1-w3],t)) { // ?-@@@@@@?????-@@
+            if (!C::eval(p[-3+w],t)) { // ?-@@@@@@???-?-@@
+                return false;
+            } // ?-@@@@@@address@hidden@@
+            if (!C::eval(p[w3],t)) { // ?-@@@@@@address@hidden@@
+                return false;
+            } // ?-@@@@@@@address@hidden@@
+            if (!C::eval(p[-1+w3],t)) { // ?-@@@@@@@address@hidden@@
+                return false;
+            } // ?-@@@@@@@@address@hidden@@
+            if (!C::eval(p[-2+2*w],t)) { // ?-@@@@@@@@address@hidden@@
+                return false;
+            } // ?-@@@@@@@@@@?-@@
+            return true;
+        } // ?@@@@@@@?????-@@
+        if (!C::eval(p[-w3],t)) { // -@@@@@@@?????-@@
+            if (!C::eval(p[w3],t)) { // -@@@@@@@-????-@@
+                return false;
+            } // -@@@@@@@@????-@@
+            if (!C::eval(p[-1+w3],t)) { // -@@@@@@@@-???-@@
+                return false;
+            } // -@@@@@@@@@???-@@
+            if (!C::eval(p[-2+2*w],t)) { // -@@@@@@@@@-??-@@
+                return false;
+            } // -@@@@@@@@@@??-@@
+            return true;
+        } // @@@@@@@@?????-@@
+        return true;
+    } // ?????????????@@@
+    if (!C::eval(p[-w3],t)) { // -????????????@@@
+        if (!C::eval(p[2+2*w],t)) { // -?????-??????@@@
+            return false;
+        } // address@hidden@@@
+        if (!C::eval(p[1+w3],t)) { // address@hidden@@@
+            return false;
+        } // -?????@@?????@@@
+        if (!C::eval(p[-2+2*w],t)) { // -?????@@??-??@@@
+            return false;
+        } // -?????@@address@hidden@@@
+        if (!C::eval(p[w3],t)) { // -?????@@address@hidden@@@
+            return false;
+        } // -?????@@@address@hidden@@@
+        if (!C::eval(p[-1+w3],t)) { // -?????@@@address@hidden@@@
+            return false;
+        } // -?????@@@@@??@@@
+        if (!C::eval(p[-3+w],t)) { // -?????@@@@@-?@@@
+            if (!C::eval(p[1-w3],t)) { // --????@@@@@-?@@@
+                return false;
+            } // address@hidden@@@@@-?@@@
+            if (!C::eval(p[3+w],t)) { // address@hidden@@@@@-?@@@
+                return false;
+            } // address@hidden@@@@@@-?@@@
+            if (!C::eval(p[2-2*w],t)) { // address@hidden@@@@@@-?@@@
+                return false;
+            } // -@@??@@@@@@-?@@@
+            if (!C::eval(p[3-w],t)) { // -@@-?@@@@@@-?@@@
+                return false;
+            } // -@@@?@@@@@@-?@@@
+            if (!C::eval(p[3],t)) { // -@@@-@@@@@@-?@@@
+                return false;
+            } // -@@@@@@@@@@-?@@@
+            return true;
+        } // -?????@@@@@@?@@@
+        if (!C::eval(p[-3],t)) { // -?????@@@@@@-@@@
+            if (!C::eval(p[3+w],t)) { // -????-@@@@@@-@@@
+                return false;
+            } // -????@@@@@@@-@@@
+            if (!C::eval(p[2-2*w],t)) { // -?-??@@@@@@@-@@@
+                return false;
+            } // address@hidden@@@@@@@-@@@
+            if (!C::eval(p[3-w],t)) { // address@hidden@@@@@@@-@@@
+                return false;
+            } // -?@@?@@@@@@@-@@@
+            if (!C::eval(p[3],t)) { // -?@@-@@@@@@@-@@@
+                return false;
+            } // -?@@@@@@@@@@-@@@
+            return true;
+        } // -?????@@@@@@@@@@
+        return true;
+    } // @????????????@@@
+    if (!C::eval(p[-3],t)) { // @???????????-@@@
+        if (!C::eval(p[2+2*w],t)) { // @?????-?????-@@@
+            return false;
+        } // @address@hidden@@@
+        if (!C::eval(p[2-2*w],t)) { // @address@hidden@@@
+            return false;
+        } // @address@hidden@?????-@@@
+        if (!C::eval(p[3-w],t)) { // @address@hidden@?????-@@@
+            return false;
+        } // @?@@address@hidden@@@
+        if (!C::eval(p[3+w],t)) { // @?@@address@hidden@@@
+            return false;
+        } // @?@@?@@?????-@@@
+        if (!C::eval(p[3],t)) { // @?@@-@@?????-@@@
+            return false;
+        } // @?@@@@@?????-@@@
+        if (!C::eval(p[1-w3],t)) { // @-@@@@@?????-@@@
+            if (!C::eval(p[1+w3],t)) { // @-@@@@@-????-@@@
+                return false;
+            } // @-@@@@@@????-@@@
+            if (!C::eval(p[-3+w],t)) { // @-@@@@@@???--@@@
+                return false;
+            } // @-@@@@@@address@hidden@@@
+            if (!C::eval(p[w3],t)) { // @-@@@@@@address@hidden@@@
+                return false;
+            } // @-@@@@@@@address@hidden@@@
+            if (!C::eval(p[-1+w3],t)) { // @-@@@@@@@address@hidden@@@
+                return false;
+            } // @-@@@@@@@@address@hidden@@@
+            if (!C::eval(p[-2+2*w],t)) { // @-@@@@@@@@address@hidden@@@
+                return false;
+            } // @-@@@@@@@@@@-@@@
+            return true;
+        } // @@@@@@@?????-@@@
+        return true;
+    } // @???????????@@@@
+    if (!C::eval(p[1-w3],t)) { // @-??????????@@@@
+        if (!C::eval(p[1+w3],t)) { // @-?????-????@@@@
+            return false;
+        } // @address@hidden@@@@
+        if (!C::eval(p[-3+w],t)) { // @address@hidden@@@@
+            return false;
+        } // @address@hidden@@@@@
+        if (!C::eval(p[w3],t)) { // @address@hidden@@@@@
+            return false;
+        } // @-?????@@??@@@@@
+        if (!C::eval(p[-1+w3],t)) { // @-?????@@-?@@@@@
+            return false;
+        } // @-?????@@@?@@@@@
+        if (!C::eval(p[-2+2*w],t)) { // @-?????@@@-@@@@@
+            return false;
+        } // @-?????@@@@@@@@@
+        return true;
+    } // @@??????????@@@@
+    if (!C::eval(p[2-2*w],t)) { // @@-?????????@@@@
+        if (!C::eval(p[-3+w],t)) { // @@-????????-@@@@
+            return false;
+        } // @@-????????@@@@@
+        if (!C::eval(p[w3],t)) { // @@-?????-??@@@@@
+            return false;
+        } // @@address@hidden@@@@@
+        if (!C::eval(p[-1+w3],t)) { // @@address@hidden@@@@@
+            return false;
+        } // @@-?????@@?@@@@@
+        if (!C::eval(p[-2+2*w],t)) { // @@-?????@@-@@@@@
+            return false;
+        } // @@-?????@@@@@@@@
+        return true;
+    } // @@@?????????@@@@
+    if (!C::eval(p[-3+w],t)) { // @@@????????-@@@@
+        if (!C::eval(p[3-w],t)) { // @@@-???????-@@@@
+            return false;
+        } // @@@@???????-@@@@
+        if (!C::eval(p[3],t)) { // @@@@-??????-@@@@
+            return false;
+        } // @@@@@??????-@@@@
+        if (!C::eval(p[3+w],t)) { // @@@@@-?????-@@@@
+            return false;
+        } // @@@@@@?????-@@@@
+        return true;
+    } // @@@????????@@@@@
+    if (!C::eval(p[-2+2*w],t)) { // @@@???????-@@@@@
+        if (!C::eval(p[3-w],t)) { // @@@-??????-@@@@@
+            return false;
+        } // @@@@??????-@@@@@
+        if (!C::eval(p[3],t)) { // @@@@-?????-@@@@@
+            return false;
+        } // @@@@@?????-@@@@@
+        return true;
+    } // @@@???????@@@@@@
+    if (!C::eval(p[3-w],t)) { // @@@-??????@@@@@@
+        if (!C::eval(p[-1+w3],t)) { // @@@-?????-@@@@@@
+            return false;
+        } // @@@-?????@@@@@@@
+        return true;
+    } // @@@@??????@@@@@@
+    return true;
+}
+




reply via email to

[Prev in Thread] Current Thread [Next in Thread]