github.com/ledgerwatch/erigon-lib@v1.0.0/patricia/patricia_test.go (about)

     1  /*
     2     Copyright 2021 Erigon contributors
     3  
     4     Licensed under the Apache License, Version 2.0 (the "License");
     5     you may not use this file except in compliance with the License.
     6     You may obtain a copy of the License at
     7  
     8         http://www.apache.org/licenses/LICENSE-2.0
     9  
    10     Unless required by applicable law or agreed to in writing, software
    11     distributed under the License is distributed on an "AS IS" BASIS,
    12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13     See the License for the specific language governing permissions and
    14     limitations under the License.
    15  */
    16  
    17  package patricia
    18  
    19  import (
    20  	"encoding/hex"
    21  	"fmt"
    22  	"testing"
    23  )
    24  
    25  func TestInserts1(t *testing.T) {
    26  	n := &node{}
    27  	s := makestate(n)
    28  	d := s.transition(0x34, true)
    29  	fmt.Printf("1 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
    30  	s.diverge(d)
    31  	fmt.Printf("2 tree:\n%sstate: %s\n\n", n, s)
    32  	d = s.transition(0x56, true)
    33  	fmt.Printf("3 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
    34  	s.diverge(d)
    35  	fmt.Printf("4 tree:\n%sstate: %s\n\n", n, s)
    36  	d = s.transition(0xff, true)
    37  	fmt.Printf("5 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
    38  	s.diverge(d)
    39  	fmt.Printf("6 tree:\n%sstate: %s\n\n", n, s)
    40  	d = s.transition(0xcc, true)
    41  	fmt.Printf("7 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
    42  	s.diverge(d)
    43  	fmt.Printf("8 tree:\n%sstate: %s\n\n", n, s)
    44  	s.insert(nil)
    45  	s = makestate(n)
    46  	d = s.transition(0x34, true)
    47  	fmt.Printf("9 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
    48  	d = s.transition(0x66, true)
    49  	fmt.Printf("10 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
    50  	s.diverge(d)
    51  	fmt.Printf("11 tree:\n%sstate: %s\n\n", n, s)
    52  
    53  	n.insert([]byte{0xff, 0xff, 0xff, 0xff, 0xff}, []byte{0x01})
    54  	fmt.Printf("12 tree:\n%s\n", n)
    55  
    56  	n.insert([]byte{0xff, 0xff, 0xff, 0xff, 0x0f}, []byte{0x02})
    57  	fmt.Printf("13 tree:\n%s\n", n)
    58  
    59  	n.insert([]byte{0xff, 0xff, 0xff, 0xff, 0xff}, []byte{0x03})
    60  	fmt.Printf("14 tree:\n%s\n", n)
    61  
    62  	vs, ok := n.get([]byte{0xff, 0xff, 0xff, 0xff, 0x0f})
    63  	fmt.Printf("15 vs = %v, ok = %t\n", vs, ok)
    64  
    65  	vs, ok = n.get([]byte{0xff, 0xff, 0xff, 0xff, 0xff})
    66  	fmt.Printf("16 vs = %v, ok = %t\n", vs, ok)
    67  
    68  	vs, ok = n.get([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0x56})
    69  	fmt.Printf("17 vs = %v, ok = %t\n", vs, ok)
    70  
    71  	vs, ok = n.get([]byte{0x34, 0x56, 0xff, 0xcc})
    72  	fmt.Printf("18 vs = %v, ok = %t\n", vs, ok)
    73  
    74  	vs, ok = n.get([]byte{})
    75  	fmt.Printf("19 vs = %v, ok = %t\n", vs, ok)
    76  }
    77  
    78  func TestInserts2(t *testing.T) {
    79  	var n node
    80  	n.insert([]byte{0xff}, []byte{0x03, 0x03, 0x03, 0x1a, 0xed, 0xed})
    81  	n.insert([]byte{0xed}, []byte{})
    82  	fmt.Printf("tree:\n%s", &n)
    83  
    84  	vs, ok := n.get([]byte{0xff})
    85  	fmt.Printf("vs = %v, ok = %t\n", vs, ok)
    86  
    87  	vs, ok = n.get([]byte{0xed})
    88  	fmt.Printf("vs = %v, ok = %t\n", vs, ok)
    89  }
    90  
    91  func TestFindMatches1(t *testing.T) {
    92  	var pt PatriciaTree
    93  	pt.Insert([]byte("wolf"), []byte{1})
    94  	pt.Insert([]byte("winter"), []byte{2})
    95  	pt.Insert([]byte("wolfs"), []byte{3})
    96  	fmt.Printf("n\n%s", &pt.root)
    97  	mf := NewMatchFinder2(&pt)
    98  	data := []byte("Who lives here in winter, wolfs")
    99  	matches := mf.FindLongestMatches(data)
   100  	for _, m := range matches {
   101  		fmt.Printf("%+v, match [%s]\n", m, data[m.Start:m.End])
   102  	}
   103  	if len(matches) != 2 {
   104  		t.Errorf("expected matches: %d, got %d", 2, len(matches))
   105  	}
   106  }
   107  
   108  func TestFindMatches2(t *testing.T) {
   109  	var pt PatriciaTree
   110  	pt.Insert([]byte("wolf"), []byte{1})
   111  	pt.Insert([]byte("winter"), []byte{2})
   112  	pt.Insert([]byte("wolfs?"), []byte{3})
   113  	fmt.Printf("n\n%s", &pt.root)
   114  	mf2 := NewMatchFinder2(&pt)
   115  	data := []byte("Who lives here in winter, wolfs?")
   116  	matches := mf2.FindLongestMatches(data)
   117  	for _, m := range matches {
   118  		fmt.Printf("%+v, match: [%s]\n", m, data[m.Start:m.End])
   119  	}
   120  	if len(matches) != 2 {
   121  		t.Errorf("expected matches: %d, got %d", 2, len(matches))
   122  	}
   123  }
   124  
   125  func decodeHex(in string) []byte {
   126  	payload, err := hex.DecodeString(in)
   127  	if err != nil {
   128  		panic(err)
   129  	}
   130  	return payload
   131  }
   132  
   133  func TestFindMatches3(t *testing.T) {
   134  	var pt PatriciaTree
   135  	v := []byte{1}
   136  	pt.Insert(decodeHex("00000000000000000000000000000000000000"), v)
   137  	pt.Insert(decodeHex("000000000000000000000000000000000000"), v)
   138  	pt.Insert(decodeHex("0000000000000000000000000000000000"), v)
   139  	pt.Insert(decodeHex("00000000000000000000000000000000"), v)
   140  	pt.Insert(decodeHex("000000000000000000000000000000"), v)
   141  	pt.Insert(decodeHex("0000000000000000000000000000"), v)
   142  	pt.Insert(decodeHex("0100000000000000000000003b30000001000003"), v)
   143  	pt.Insert(decodeHex("0000000000000000003b30000001000003000100"), v)
   144  	pt.Insert(decodeHex("000000000000000000003b300000010000030001"), v)
   145  	pt.Insert(decodeHex("00000000000000000000003b3000000100000300"), v)
   146  	pt.Insert(decodeHex("00000000000000000000000000"), v)
   147  	pt.Insert(decodeHex("00000000000000003b30000001000003000100"), v)
   148  	pt.Insert(decodeHex("000000000000000000000000"), v)
   149  	pt.Insert(decodeHex("000000000000003b30000001000003000100"), v)
   150  	pt.Insert(decodeHex("0000000000003b30000001000003000100"), v)
   151  	pt.Insert(decodeHex("00000000003b30000001000003000100"), v)
   152  	pt.Insert(decodeHex("000000003b30000001000003000100"), v)
   153  	pt.Insert(decodeHex("0000003b30000001000003000100"), v)
   154  	pt.Insert(decodeHex("00003b30000001000003000100"), v)
   155  	pt.Insert(decodeHex("0100000000000000"), v)
   156  	pt.Insert(decodeHex("003b30000001000003000100"), v)
   157  	pt.Insert(decodeHex("3b30000001000003000100"), v)
   158  	pt.Insert(decodeHex("00000000000000003b3000000100000300010000"), v)
   159  	pt.Insert(decodeHex("0100000000000000000000003a30000001000000"), v)
   160  	pt.Insert(decodeHex("000000003a300000010000000000010010000000"), v)
   161  	pt.Insert(decodeHex("00000000003a3000000100000000000100100000"), v)
   162  	pt.Insert(decodeHex("0000000000003a30000001000000000001001000"), v)
   163  	pt.Insert(decodeHex("000000000000003a300000010000000000010010"), v)
   164  	pt.Insert(decodeHex("00000000000000003a3000000100000000000100"), v)
   165  	pt.Insert(decodeHex("0000000000000000003a30000001000000000001"), v)
   166  	pt.Insert(decodeHex("000000000000000000003a300000010000000000"), v)
   167  	pt.Insert(decodeHex("00000000000000000000003a3000000100000000"), v)
   168  	mf2 := NewMatchFinder2(&pt)
   169  	data := decodeHex("0100000000000000000000003a30000001000000000001001000000044004500")
   170  	matches := mf2.FindLongestMatches(data)
   171  	for _, m := range matches {
   172  		fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
   173  	}
   174  	if len(matches) != 9 {
   175  		t.Errorf("expected matches: %d, got %d", 9, len(matches))
   176  	}
   177  }
   178  
   179  func TestFindMatches4(t *testing.T) {
   180  	var pt PatriciaTree
   181  	v := []byte{1}
   182  	pt.Insert(decodeHex("00000000000000000000000000000000000000"), v)
   183  	mf2 := NewMatchFinder2(&pt)
   184  	data := decodeHex("01")
   185  	matches := mf2.FindLongestMatches(data)
   186  	for _, m := range matches {
   187  		fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
   188  	}
   189  	if len(matches) != 0 {
   190  		t.Errorf("expected matches: %d, got %d", 0, len(matches))
   191  	}
   192  }
   193  
   194  func TestFindMatches5(t *testing.T) {
   195  	var pt PatriciaTree
   196  	v := []byte{1}
   197  	pt.Insert(decodeHex("0434e37673a8e0aaa536828f0d5b0ddba12fece1"), v)
   198  	pt.Insert(decodeHex("e28e72fcf78647adce1f1252f240bbfaebd63bcc"), v)
   199  	pt.Insert(decodeHex("34e28e72fcf78647adce1f1252f240bbfaebd63b"), v)
   200  	pt.Insert(decodeHex("0434e28e72fcf78647adce1f1252f240bbfaebd6"), v)
   201  	pt.Insert(decodeHex("090bdc64a7e3632cde8f4689f47acfc0760e35bce43af50d4b1f5973463bde62"), v)
   202  	pt.Insert(decodeHex("00090bdc64a7e3632cde8f4689f47acfc0760e35bce43af50d4b1f5973463bde"), v)
   203  	pt.Insert(decodeHex("0000000000"), v)
   204  	pt.Insert(decodeHex("00000000000000000000"), v)
   205  	pt.Insert(decodeHex("000000000000000000000000000000"), v)
   206  	pt.Insert(decodeHex("0000000000000000000000000000"), v)
   207  	pt.Insert(decodeHex("000000000000000000"), v)
   208  	pt.Insert(decodeHex("0000000000000000"), v)
   209  	pt.Insert(decodeHex("00000000000000000000000000"), v)
   210  	pt.Insert(decodeHex("000000000000000000000000"), v)
   211  	pt.Insert(decodeHex("f47acfc0760e35bce43af50d4b1f5973463bde62"), v)
   212  	pt.Insert(decodeHex("e3632cde8f4689f47acfc0760e35bce43af50d4b"), v)
   213  	pt.Insert(decodeHex("de8f4689f47acfc0760e35bce43af50d4b1f5973"), v)
   214  	pt.Insert(decodeHex("dc64a7e3632cde8f4689f47acfc0760e35bce43a"), v)
   215  	pt.Insert(decodeHex("a7e3632cde8f4689f47acfc0760e35bce43af50d"), v)
   216  	pt.Insert(decodeHex("8f4689f47acfc0760e35bce43af50d4b1f597346"), v)
   217  	pt.Insert(decodeHex("89f47acfc0760e35bce43af50d4b1f5973463bde"), v)
   218  	pt.Insert(decodeHex("64a7e3632cde8f4689f47acfc0760e35bce43af5"), v)
   219  	pt.Insert(decodeHex("632cde8f4689f47acfc0760e35bce43af50d4b1f"), v)
   220  	pt.Insert(decodeHex("4689f47acfc0760e35bce43af50d4b1f5973463b"), v)
   221  	pt.Insert(decodeHex("2cde8f4689f47acfc0760e35bce43af50d4b1f59"), v)
   222  	pt.Insert(decodeHex("0bdc64a7e3632cde8f4689f47acfc0760e35bce4"), v)
   223  	pt.Insert(decodeHex("7acfc0760e35bce43af50d4b1f5973463bde62"), v)
   224  	pt.Insert(decodeHex("0000000000000000000000"), v)
   225  	pt.Insert(decodeHex("cfc0760e35bce43af50d4b1f5973463bde62"), v)
   226  	pt.Insert(decodeHex("00000000000000000000000000000000"), v)
   227  	pt.Insert(decodeHex("c0760e35bce43af50d4b1f5973463bde62"), v)
   228  	pt.Insert(decodeHex("0000000000000000000000000000000000000000"), v)
   229  	pt.Insert(decodeHex("00000000000000000000000000000000000000"), v)
   230  	pt.Insert(decodeHex("760e35bce43af50d4b1f5973463bde62"), v)
   231  	pt.Insert(decodeHex("000000000000000000000000000000000000"), v)
   232  	pt.Insert(decodeHex("0e35bce43af50d4b1f5973463bde62"), v)
   233  	pt.Insert(decodeHex("0000000000000000000000000000000000"), v)
   234  	pt.Insert(decodeHex("35bce43af50d4b1f5973463bde62"), v)
   235  	pt.Insert(decodeHex("bce43af50d4b1f5973463bde62"), v)
   236  	pt.Insert(decodeHex("e43af50d4b1f5973463bde62"), v)
   237  	pt.Insert(decodeHex("1090bdc64a7e3632cde8f4689f47acfc0760e35bce43af50d4b1f5973463bde6"), v)
   238  	pt.Insert(decodeHex("3af50d4b1f5973463bde62"), v)
   239  	pt.Insert(decodeHex("f50d4b1f5973463bde62"), v)
   240  	pt.Insert(decodeHex("fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130193790f769"), v)
   241  	pt.Insert(decodeHex("ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db1"), v)
   242  	pt.Insert(decodeHex("df415bb7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e"), v)
   243  	pt.Insert(decodeHex("d417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130193790f7698ee4"), v)
   244  	pt.Insert(decodeHex("cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130193790"), v)
   245  	pt.Insert(decodeHex("c2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130193790f7"), v)
   246  	pt.Insert(decodeHex("bb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126"), v)
   247  	pt.Insert(decodeHex("b7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7"), v)
   248  	pt.Insert(decodeHex("ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dc"), v)
   249  	pt.Insert(decodeHex("6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f1"), v)
   250  	pt.Insert(decodeHex("63ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22d"), v)
   251  	pt.Insert(decodeHex("5f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f13019"), v)
   252  	pt.Insert(decodeHex("5bb7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fc"), v)
   253  	pt.Insert(decodeHex("595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130"), v)
   254  	pt.Insert(decodeHex("415bb7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28"), v)
   255  	pt.Insert(decodeHex("34df415bb7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d303"), v)
   256  	pt.Insert(decodeHex("2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf2"), v)
   257  	pt.Insert(decodeHex("0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130193790f7698e"), v)
   258  	pt.Insert(decodeHex("07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f1301937"), v)
   259  	pt.Insert(decodeHex("0434df415bb7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3"), v)
   260  	pt.Insert(decodeHex("0d4b1f5973463bde62"), v)
   261  	pt.Insert(decodeHex("0000000000000000000000000000000000000000000000000000000000000000"), v)
   262  	pt.Insert(decodeHex("fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dce4"), v)
   263  	pt.Insert(decodeHex("ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970"), v)
   264  	pt.Insert(decodeHex("df415bb7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198f"), v)
   265  	pt.Insert(decodeHex("d417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dce41b48"), v)
   266  	pt.Insert(decodeHex("d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dce41b48747f"), v)
   267  	pt.Insert(decodeHex("cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9"), v)
   268  	pt.Insert(decodeHex("c2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dc"), v)
   269  	pt.Insert(decodeHex("bb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bc"), v)
   270  	pt.Insert(decodeHex("b7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0f"), v)
   271  	pt.Insert(decodeHex("ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0fed"), v)
   272  	pt.Insert(decodeHex("6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcda"), v)
   273  	pt.Insert(decodeHex("63ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded39"), v)
   274  	pt.Insert(decodeHex("5f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3a"), v)
   275  	pt.Insert(decodeHex("5bb7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd"), v)
   276  	pt.Insert(decodeHex("595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd"), v)
   277  	pt.Insert(decodeHex("415bb7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8"), v)
   278  	pt.Insert(decodeHex("34df415bb7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c19"), v)
   279  	pt.Insert(decodeHex("2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded"), v)
   280  	pt.Insert(decodeHex("17d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dce41b4874"), v)
   281  	pt.Insert(decodeHex("0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dce41b"), v)
   282  	pt.Insert(decodeHex("07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3ada"), v)
   283  	pt.Insert(decodeHex("0434df415bb7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c"), v)
   284  	pt.Insert(decodeHex("df415bb7ae2363ecbb6a595f07cbc2fc0fd417d3"), v)
   285  	pt.Insert(decodeHex("34df415bb7ae2363ecbb6a595f07cbc2fc0fd417"), v)
   286  	pt.Insert(decodeHex("0434df415bb7ae2363ecbb6a595f07cbc2fc0fd4"), v)
   287  	pt.Insert(decodeHex("4b1f5973463bde62"), v)
   288  	pt.Insert(decodeHex("415bb7ae2363ecbb6a595f07cbc2fc0fd417d3"), v)
   289  	pt.Insert(decodeHex("5bb7ae2363ecbb6a595f07cbc2fc0fd417d3"), v)
   290  	pt.Insert(decodeHex("f4689f47acfc0760e35bce43af50d4b1f5973463"), v)
   291  	pt.Insert(decodeHex("e8f4689f47acfc0760e35bce43af50d4b1f59734"), v)
   292  	pt.Insert(decodeHex("cde8f4689f47acfc0760e35bce43af50d4b1f597"), v)
   293  	pt.Insert(decodeHex("c64a7e3632cde8f4689f47acfc0760e35bce43af"), v)
   294  	pt.Insert(decodeHex("bdc64a7e3632cde8f4689f47acfc0760e35bce43"), v)
   295  	pt.Insert(decodeHex("9f47acfc0760e35bce43af50d4b1f5973463bde6"), v)
   296  	pt.Insert(decodeHex("90bdc64a7e3632cde8f4689f47acfc0760e35bce"), v)
   297  	pt.Insert(decodeHex("7e3632cde8f4689f47acfc0760e35bce43af50d4"), v)
   298  	pt.Insert(decodeHex("689f47acfc0760e35bce43af50d4b1f5973463bd"), v)
   299  	pt.Insert(decodeHex("4a7e3632cde8f4689f47acfc0760e35bce43af50"), v)
   300  	pt.Insert(decodeHex("3632cde8f4689f47acfc0760e35bce43af50d4b1"), v)
   301  	pt.Insert(decodeHex("32cde8f4689f47acfc0760e35bce43af50d4b1f5"), v)
   302  	pt.Insert(decodeHex("b7ae2363ecbb6a595f07cbc2fc0fd417d3"), v)
   303  	pt.Insert(decodeHex("47acfc0760e35bce43af50d4b1f5973463bde6"), v)
   304  	pt.Insert(decodeHex("ae2363ecbb6a595f07cbc2fc0fd417d3"), v)
   305  	pt.Insert(decodeHex("acfc0760e35bce43af50d4b1f5973463bde6"), v)
   306  	pt.Insert(decodeHex("2363ecbb6a595f07cbc2fc0fd417d3"), v)
   307  	pt.Insert(decodeHex("fc0760e35bce43af50d4b1f5973463bde6"), v)
   308  	pt.Insert(decodeHex("63ecbb6a595f07cbc2fc0fd417d3"), v)
   309  	pt.Insert(decodeHex("0000000000000000000000000000000000000001"), v)
   310  	pt.Insert(decodeHex("0760e35bce43af50d4b1f5973463bde6"), v)
   311  	pt.Insert(decodeHex("bc63768597761b6c198fd8bd0feded3970bcdafd"), v)
   312  	pt.Insert(decodeHex("97761b6c198fd8bd0feded3970bcdafd3adaa9dc"), v)
   313  	pt.Insert(decodeHex("8fd8bd0feded3970bcdafd3adaa9dce41b48747f"), v)
   314  	pt.Insert(decodeHex("8597761b6c198fd8bd0feded3970bcdafd3adaa9"), v)
   315  	pt.Insert(decodeHex("7e04bc63768597761b6c198fd8bd0feded3970bc"), v)
   316  	pt.Insert(decodeHex("768597761b6c198fd8bd0feded3970bcdafd3ada"), v)
   317  	pt.Insert(decodeHex("761b6c198fd8bd0feded3970bcdafd3adaa9dce4"), v)
   318  	pt.Insert(decodeHex("6c198fd8bd0feded3970bcdafd3adaa9dce41b48"), v)
   319  	pt.Insert(decodeHex("63768597761b6c198fd8bd0feded3970bcdafd3a"), v)
   320  	pt.Insert(decodeHex("1b6c198fd8bd0feded3970bcdafd3adaa9dce41b"), v)
   321  	pt.Insert(decodeHex("198fd8bd0feded3970bcdafd3adaa9dce41b4874"), v)
   322  	pt.Insert(decodeHex("04bc63768597761b6c198fd8bd0feded3970bcda"), v)
   323  	pt.Insert(decodeHex("00000000000000000000000000000000000001"), v)
   324  	pt.Insert(decodeHex("0000000000000000000000000000000000000000000000000000000000000002"), v)
   325  	pt.Insert(decodeHex("ecbb6a595f07cbc2fc0fd417d3"), v)
   326  	pt.Insert(decodeHex("60e35bce43af50d4b1f5973463bde6"), v)
   327  	pt.Insert(decodeHex("d8bd0feded3970bcdafd3adaa9dce41b48747f"), v)
   328  	pt.Insert(decodeHex("000000000000000000000000000000000001"), v)
   329  	pt.Insert(decodeHex("60e3997d5a409c25fe09d77351b6"), v)
   330  	pt.Insert(decodeHex("bd0feded3970bcdafd3adaa9dce41b48747f"), v)
   331  	mf2 := NewMatchFinder2(&pt)
   332  	data := decodeHex("9d7d9d7d082073e2920896915d0e0239a7e852d86b26e03a188bc5b947972aeec206d63b6744043493d38e72c5281e78f6b364eacac6fa907ecba1640000000000000000000000000000000000000000000000000000000007bfa482043493d38e72c5281e78f6b364eacac6fa907ecba1640000000000000000000000000000000000000000000000000000000000000011043493d38e72c5281e78f6b364eacac6fa907ecba1640000000000000000000000000000000000000000000000000000000000000002043493d38e72c5281e78f6b364eacac6fa907ecba164000000000000000000000000000000000000000000000000000000000000001e0820a516e4eeef0852f3c4ee0f11237e5e5127ed67a64e43a2f2ebef2d6bc26bb384082073404b8fb6bb42e5a0c9bb7d6253d9d72084bed3991df1efd25512e7f713e796043493d38e72c5281e78f6b364eacac6fa907ecba164000000000000000000000000000000000000000000000000000000000000001f043493d38e72c5281e78f6b364eacac6fa907ecba1640000000000000000000000000000000000000000000000000000000000000012082010db8a472df5096168436e756dbf37edce306a01f4fa7a889f7ad8195e1154a9043493d38e72c5281e78f6b364eacac6fa907ecba1640000000000000000000000000000000000000000000000000000000000000006")
   333  	matches := mf2.FindLongestMatches(data)
   334  	for _, m := range matches {
   335  		fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
   336  	}
   337  	if len(matches) != 88 {
   338  		t.Errorf("expected matches: %d, got %d", 88, len(matches))
   339  	}
   340  }
   341  
   342  func TestFindMatches6(t *testing.T) {
   343  	var pt PatriciaTree
   344  	v := []byte{1}
   345  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff"), v)
   346  	pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffff"), v)
   347  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff16"), v)
   348  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff16"), v)
   349  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff16"), v)
   350  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16"), v)
   351  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff16"), v)
   352  	pt.Insert(decodeHex("600160a060020a03"), v)
   353  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff16815260200191505060405180910390a1"), v)
   354  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1681"), v)
   355  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168156"), v)
   356  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1681565b"), v)
   357  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681565b60"), v)
   358  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff168152602001908152602001"), v)
   359  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff16815260200190815260200160"), v)
   360  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1681526020019081526020016000"), v)
   361  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168152602001908152602001600020"), v)
   362  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16815260200190815260200160002060"), v)
   363  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681526020019081526020016000206000"), v)
   364  	pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffffff1681526020019081526020"), v)
   365  	pt.Insert(decodeHex("81526020019081526020016000206000"), v)
   366  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168152"), v)
   367  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16815260"), v)
   368  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681526020"), v)
   369  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff168152602001"), v)
   370  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff1681565b60"), v)
   371  	pt.Insert(decodeHex("ffffffffffffffffffffffffff168152602001"), v)
   372  	pt.Insert(decodeHex("526020019081526020016000206000"), v)
   373  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1682"), v)
   374  	pt.Insert(decodeHex("ffffffffffffffffffffffffff1681565b60"), v)
   375  	pt.Insert(decodeHex("ffffffffffffffffffffffff168152602001"), v)
   376  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1682"), v)
   377  	pt.Insert(decodeHex("6020019081526020016000206000"), v)
   378  	pt.Insert(decodeHex("ffffffffffffffffffffffff1681565b60"), v)
   379  	pt.Insert(decodeHex("ffffffffffffffffffffff168152602001"), v)
   380  	pt.Insert(decodeHex("8152602001908152602001600020600050"), v)
   381  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff1682"), v)
   382  	pt.Insert(decodeHex("ffffffffffffffff168152602001"), v)
   383  	pt.Insert(decodeHex("80806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561"), v)
   384  	pt.Insert(decodeHex("60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16"), v)
   385  	pt.Insert(decodeHex("5b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f"), v)
   386  	pt.Insert(decodeHex("5180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f168015"), v)
   387  	pt.Insert(decodeHex("405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680"), v)
   388  	pt.Insert(decodeHex("20019081526020016000206000"), v)
   389  	pt.Insert(decodeHex("ffffffffffffffffffffff1681565b60"), v)
   390  	pt.Insert(decodeHex("ffffffffffffffffffff168152602001"), v)
   391  	pt.Insert(decodeHex("52602001908152602001600020600050"), v)
   392  	pt.Insert(decodeHex("ffffffffffffffffffffffffff1682"), v)
   393  	pt.Insert(decodeHex("ffffffffffffffff1681565b60"), v)
   394  	pt.Insert(decodeHex("ffffffffffffff168152602001"), v)
   395  	pt.Insert(decodeHex("ffffffffffffffffffff1681565b60"), v)
   396  	pt.Insert(decodeHex("019081526020016000206000"), v)
   397  	pt.Insert(decodeHex("ffffffffffffffffff168152602001"), v)
   398  	pt.Insert(decodeHex("1681526020019081526020016000206000"), v)
   399  	pt.Insert(decodeHex("602001908152602001600020600050"), v)
   400  	pt.Insert(decodeHex("ffffffffffffffffffffffff1682"), v)
   401  	pt.Insert(decodeHex("ffffffffffffff1681565b60"), v)
   402  	pt.Insert(decodeHex("ffffffffffffffffff1681565b60"), v)
   403  	pt.Insert(decodeHex("ffffffffffff168152602001"), v)
   404  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff168152602001908152602001600020600050"), v)
   405  	pt.Insert(decodeHex("9081526020016000206000"), v)
   406  	pt.Insert(decodeHex("5050604051849350600080"), v)
   407  	pt.Insert(decodeHex("2001908152602001600020600050"), v)
   408  	pt.Insert(decodeHex("505060405180910390f35b"), v)
   409  	pt.Insert(decodeHex("ffffffffffffffffffffff1682"), v)
   410  	pt.Insert(decodeHex("6000506000600060005054815260200190815260200160002060006101000a81"), v)
   411  	pt.Insert(decodeHex("00506000600060005054815260200190815260200160002060006101000a8154"), v)
   412  	pt.Insert(decodeHex("ffffffffffff1681565b60"), v)
   413  	pt.Insert(decodeHex("ffffff16815260200191505060405180910390a1"), v)
   414  	pt.Insert(decodeHex("ffffffffff168152602001"), v)
   415  	pt.Insert(decodeHex("8281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a4578082"), v)
   416  	pt.Insert(decodeHex("81038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a457808203"), v)
   417  	pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a4"), v)
   418  	pt.Insert(decodeHex("60005060003373ffffffffffffffffffffffffffffffffffffffff1681526020"), v)
   419  	pt.Insert(decodeHex("60003373ffffffffffffffffffffffffffffffffffffffff1681526020019081"), v)
   420  	pt.Insert(decodeHex("5060003373ffffffffffffffffffffffffffffffffffffffff16815260200190"), v)
   421  	pt.Insert(decodeHex("3373ffffffffffffffffffffffffffffffffffffffff16815260200190815260"), v)
   422  	pt.Insert(decodeHex("20018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a457"), v)
   423  	pt.Insert(decodeHex("038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a45780820380"), v)
   424  	pt.Insert(decodeHex("018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a45780"), v)
   425  	pt.Insert(decodeHex("005060003373ffffffffffffffffffffffffffffffffffffffff168152602001"), v)
   426  	pt.Insert(decodeHex("003373ffffffffffffffffffffffffffffffffffffffff168152602001908152"), v)
   427  	pt.Insert(decodeHex("01908152602001600020600050"), v)
   428  	pt.Insert(decodeHex("ffffffffffffffffffffffffff16815260200190"), v)
   429  	pt.Insert(decodeHex("ffffffffffffffffffffffff1681526020019081"), v)
   430  	pt.Insert(decodeHex("ffffffffffffffffffffff168152602001908152"), v)
   431  	pt.Insert(decodeHex("ffffffffffffffffffff16815260200190815260"), v)
   432  	pt.Insert(decodeHex("ffffffffffffffffff1681526020019081526020"), v)
   433  	pt.Insert(decodeHex("ffffffffffffffff168152602001908152602001"), v)
   434  	pt.Insert(decodeHex("ffffffffffffff16815260200190815260200160"), v)
   435  	pt.Insert(decodeHex("ffffffffffff1681526020019081526020016000"), v)
   436  	pt.Insert(decodeHex("ffffffffff168152602001908152602001600020"), v)
   437  	pt.Insert(decodeHex("ffffffff16815260200190815260200160002060"), v)
   438  	pt.Insert(decodeHex("ffffff1681526020019081526020016000206000"), v)
   439  	pt.Insert(decodeHex("81526020016000206000"), v)
   440  	pt.Insert(decodeHex("50604051849350600080"), v)
   441  	pt.Insert(decodeHex("ffffffffffffffffffff1682"), v)
   442  	pt.Insert(decodeHex("5060405180910390f35b"), v)
   443  	pt.Insert(decodeHex("168152602001908152602001600020600050"), v)
   444  	pt.Insert(decodeHex("ffff16815260200191505060405180910390a1"), v)
   445  	pt.Insert(decodeHex("67ffffffffffffffff"), v)
   446  	pt.Insert(decodeHex("ffffffffffffffff1682"), v)
   447  	pt.Insert(decodeHex("ffff1681526020019081526020016000206000"), v)
   448  	pt.Insert(decodeHex("6040518082815260200191505060405180910390"), v)
   449  	pt.Insert(decodeHex("ffffffffff1681565b60"), v)
   450  	pt.Insert(decodeHex("908152602001600020600050"), v)
   451  	pt.Insert(decodeHex("8281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390"), v)
   452  	pt.Insert(decodeHex("81038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f3"), v)
   453  	pt.Insert(decodeHex("80806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050506040"), v)
   454  	pt.Insert(decodeHex("806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050604051"), v)
   455  	pt.Insert(decodeHex("60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050"), v)
   456  	pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180"), v)
   457  	pt.Insert(decodeHex("5b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250"), v)
   458  	pt.Insert(decodeHex("5180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060"), v)
   459  	pt.Insert(decodeHex("405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050"), v)
   460  	pt.Insert(decodeHex("20018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050506040518091"), v)
   461  	pt.Insert(decodeHex("038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b"), v)
   462  	pt.Insert(decodeHex("018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050604051809103"), v)
   463  	pt.Insert(decodeHex("ffffffff168152602001"), v)
   464  	pt.Insert(decodeHex("5b60405180828152602001915050604051809103"), v)
   465  	pt.Insert(decodeHex("565b604051808281526020019150506040518091"), v)
   466  	pt.Insert(decodeHex("518082815260200191505060405180910390f35b"), v)
   467  	pt.Insert(decodeHex("40518082815260200191505060405180910390f3"), v)
   468  	pt.Insert(decodeHex("ff16815260200191505060405180910390a1"), v)
   469  	pt.Insert(decodeHex("ffffffffffffffffff1682"), v)
   470  	pt.Insert(decodeHex("808281526102cb94909290828280156100d757"), v)
   471  	pt.Insert(decodeHex("ff1681526020019081526020016000206000"), v)
   472  	pt.Insert(decodeHex("526020016000206000"), v)
   473  	pt.Insert(decodeHex("f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090509081019060"), v)
   474  	pt.Insert(decodeHex("a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284209192849261"), v)
   475  	pt.Insert(decodeHex("90f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190"), v)
   476  	pt.Insert(decodeHex("8252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60"), v)
   477  	pt.Insert(decodeHex("60a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282842091928492"), v)
   478  	pt.Insert(decodeHex("602081815260408083206002548452825282208354815467ffffffffffffffff191667ffffffffffffffff919091161781556001848101805491830180548382"), v)
   479  	pt.Insert(decodeHex("600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284"), v)
   480  	pt.Insert(decodeHex("600160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a090810190945260808281529293909190"), v)
   481  	pt.Insert(decodeHex("600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284209192"), v)
   482  	pt.Insert(decodeHex("60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff"), v)
   483  	pt.Insert(decodeHex("52838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040"), v)
   484  	pt.Insert(decodeHex("52600160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a0908101909452608082815292939091"), v)
   485  	pt.Insert(decodeHex("526000828152604090208054829081101561000257506000908152602090200154905081565b610315600435600160a060020a03331660009081526020818152"), v)
   486  	pt.Insert(decodeHex("35600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282842091"), v)
   487  	pt.Insert(decodeHex("2081815260408083206002548452825282208354815467ffffffffffffffff191667ffffffffffffffff91909116178155600184810180549183018054838255"), v)
   488  	pt.Insert(decodeHex("0435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452828420"), v)
   489  	pt.Insert(decodeHex("0160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a09081019094526080828152929390919082"), v)
   490  	pt.Insert(decodeHex("0160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452828420919284"), v)
   491  	pt.Insert(decodeHex("009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16"), v)
   492  	pt.Insert(decodeHex("60405180910390f35b"), v)
   493  	pt.Insert(decodeHex("8082815260200191505060405180910390f35b"), v)
   494  	pt.Insert(decodeHex("ffffffffffffff1682"), v)
   495  	pt.Insert(decodeHex("600160a060020a033316600090815261"), v)
   496  	pt.Insert(decodeHex("8152602001600020600050"), v)
   497  	pt.Insert(decodeHex("90600052602060002090"), v)
   498  	pt.Insert(decodeHex("928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260"), v)
   499  	pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782"), v)
   500  	pt.Insert(decodeHex("822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260608481526100"), v)
   501  	pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080"), v)
   502  	pt.Insert(decodeHex("818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160"), v)
   503  	pt.Insert(decodeHex("8152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040"), v)
   504  	pt.Insert(decodeHex("8152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040526060"), v)
   505  	pt.Insert(decodeHex("815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020"), v)
   506  	pt.Insert(decodeHex("80822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084815261"), v)
   507  	pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c0908490"), v)
   508  	pt.Insert(decodeHex("80519060200190808383829060006004602084601f0104600302600f01f15090"), v)
   509  	pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c0908490801561"), v)
   510  	pt.Insert(decodeHex("6101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060"), v)
   511  	pt.Insert(decodeHex("604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260608481"), v)
   512  	pt.Insert(decodeHex("60243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590"), v)
   513  	pt.Insert(decodeHex("6020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285"), v)
   514  	pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201"), v)
   515  	pt.Insert(decodeHex("60200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b"), v)
   516  	pt.Insert(decodeHex("60043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81"), v)
   517  	pt.Insert(decodeHex("6001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de"), v)
   518  	pt.Insert(decodeHex("60006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094"), v)
   519  	pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c09084"), v)
   520  	pt.Insert(decodeHex("52928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052"), v)
   521  	pt.Insert(decodeHex("52604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084"), v)
   522  	pt.Insert(decodeHex("5260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052602060002090"), v)
   523  	pt.Insert(decodeHex("516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103"), v)
   524  	pt.Insert(decodeHex("4080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040526060848152"), v)
   525  	pt.Insert(decodeHex("3560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185"), v)
   526  	pt.Insert(decodeHex("3560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490"), v)
   527  	pt.Insert(decodeHex("243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004"), v)
   528  	pt.Insert(decodeHex("2090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084815261006c"), v)
   529  	pt.Insert(decodeHex("20818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501"), v)
   530  	pt.Insert(decodeHex("20036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191"), v)
   531  	pt.Insert(decodeHex("200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81"), v)
   532  	pt.Insert(decodeHex("1916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052602060"), v)
   533  	pt.Insert(decodeHex("16815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060005260206000"), v)
   534  	pt.Insert(decodeHex("0a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060005260"), v)
   535  	pt.Insert(decodeHex("043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101"), v)
   536  	pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c09084908015"), v)
   537  	pt.Insert(decodeHex("036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190"), v)
   538  	pt.Insert(decodeHex("031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020"), v)
   539  	pt.Insert(decodeHex("0191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154"), v)
   540  	pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57"), v)
   541  	pt.Insert(decodeHex("01000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000"), v)
   542  	pt.Insert(decodeHex("006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402"), v)
   543  	pt.Insert(decodeHex("000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052"), v)
   544  	pt.Insert(decodeHex("ffffffff1681565b60"), v)
   545  	pt.Insert(decodeHex("60006005600a4306101561032f57600190506103"), v)
   546  	pt.Insert(decodeHex("600160a060020a033316600090815260"), v)
   547  	pt.Insert(decodeHex("ffffff168152602001"), v)
   548  	pt.Insert(decodeHex("82815260200191505060405180910390f35b"), v)
   549  	pt.Insert(decodeHex("9060006004602084601f0104600302600f01f150"), v)
   550  	pt.Insert(decodeHex("8383829060006004602084601f0104600302600f"), v)
   551  	pt.Insert(decodeHex("83829060006004602084601f0104600302600f01"), v)
   552  	pt.Insert(decodeHex("829060006004602084601f0104600302600f01f1"), v)
   553  	pt.Insert(decodeHex("808383829060006004602084601f010460030260"), v)
   554  	pt.Insert(decodeHex("60006004602084601f0104600302600f01f15090"), v)
   555  	pt.Insert(decodeHex("815260200191505060405180910390f35b"), v)
   556  	pt.Insert(decodeHex("0000000000000000000000000000"), v)
   557  	pt.Insert(decodeHex("8352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301828280"), v)
   558  	pt.Insert(decodeHex("83526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091"), v)
   559  	pt.Insert(decodeHex("81810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293"), v)
   560  	pt.Insert(decodeHex("810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392"), v)
   561  	pt.Insert(decodeHex("808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183018282"), v)
   562  	pt.Insert(decodeHex("8051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280"), v)
   563  	pt.Insert(decodeHex("60408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095"), v)
   564  	pt.Insert(decodeHex("602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552"), v)
   565  	pt.Insert(decodeHex("60043560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184"), v)
   566  	pt.Insert(decodeHex("600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183018282801561"), v)
   567  	pt.Insert(decodeHex("6000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301"), v)
   568  	pt.Insert(decodeHex("6000526020600020"), v)
   569  	pt.Insert(decodeHex("52600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091830182828015"), v)
   570  	pt.Insert(decodeHex("526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183"), v)
   571  	pt.Insert(decodeHex("51602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085"), v)
   572  	pt.Insert(decodeHex("408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552"), v)
   573  	pt.Insert(decodeHex("3560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190"), v)
   574  	pt.Insert(decodeHex("2081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292"), v)
   575  	pt.Insert(decodeHex("043560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401"), v)
   576  	pt.Insert(decodeHex("0183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290"), v)
   577  	pt.Insert(decodeHex("0160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301828280156101"), v)
   578  	pt.Insert(decodeHex("00808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091830182"), v)
   579  	pt.Insert(decodeHex("0160a060020a033316600090815261"), v)
   580  	pt.Insert(decodeHex("006005600a4306101561032f57600190506103"), v)
   581  	pt.Insert(decodeHex("6020016000206000"), v)
   582  	pt.Insert(decodeHex("000000000000000000"), v)
   583  	pt.Insert(decodeHex("7c01000000000000000000000000000000000000000000000000000000009004"), v)
   584  	pt.Insert(decodeHex("6000357c01000000000000000000000000000000000000000000000000000000"), v)
   585  	pt.Insert(decodeHex("357c010000000000000000000000000000000000000000000000000000000090"), v)
   586  	pt.Insert(decodeHex("0100000000000000000000000000000000000000000000000000000000900480"), v)
   587  	pt.Insert(decodeHex("00357c0100000000000000000000000000000000000000000000000000000000"), v)
   588  	pt.Insert(decodeHex("0000000000000000000000000000000000000000000000000000000090048063"), v)
   589  	pt.Insert(decodeHex("0160a060020a033316600090815260"), v)
   590  	pt.Insert(decodeHex("405180910390f35b"), v)
   591  	pt.Insert(decodeHex("006004602084601f0104600302600f01f15090"), v)
   592  	pt.Insert(decodeHex("52602001600020600050"), v)
   593  	pt.Insert(decodeHex("ffffffffffff1682"), v)
   594  	pt.Insert(decodeHex("600460209081526040808320849055600590"), v)
   595  	pt.Insert(decodeHex("928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190"), v)
   596  	pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381"), v)
   597  	pt.Insert(decodeHex("822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261"), v)
   598  	pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182"), v)
   599  	pt.Insert(decodeHex("818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601"), v)
   600  	pt.Insert(decodeHex("8152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185"), v)
   601  	pt.Insert(decodeHex("8152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096"), v)
   602  	pt.Insert(decodeHex("815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191508054"), v)
   603  	pt.Insert(decodeHex("80822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552"), v)
   604  	pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001"), v)
   605  	pt.Insert(decodeHex("806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156104"), v)
   606  	pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103"), v)
   607  	pt.Insert(decodeHex("6101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152"), v)
   608  	pt.Insert(decodeHex("604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285"), v)
   609  	pt.Insert(decodeHex("60243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101"), v)
   610  	pt.Insert(decodeHex("6020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502"), v)
   611  	pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181"), v)
   612  	pt.Insert(decodeHex("60200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001915080548015"), v)
   613  	pt.Insert(decodeHex("60043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6040805160206024803560048181013560"), v)
   614  	pt.Insert(decodeHex("6001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252"), v)
   615  	pt.Insert(decodeHex("60006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004"), v)
   616  	pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020"), v)
   617  	pt.Insert(decodeHex("52928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501"), v)
   618  	pt.Insert(decodeHex("52604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652"), v)
   619  	pt.Insert(decodeHex("5260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150805480"), v)
   620  	pt.Insert(decodeHex("5260200191505060405180910390f35b"), v)
   621  	pt.Insert(decodeHex("516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382"), v)
   622  	pt.Insert(decodeHex("4080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585"), v)
   623  	pt.Insert(decodeHex("3560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81"), v)
   624  	pt.Insert(decodeHex("3560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590"), v)
   625  	pt.Insert(decodeHex("243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185"), v)
   626  	pt.Insert(decodeHex("2090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100"), v)
   627  	pt.Insert(decodeHex("20818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286"), v)
   628  	pt.Insert(decodeHex("20036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154"), v)
   629  	pt.Insert(decodeHex("200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191508054801561"), v)
   630  	pt.Insert(decodeHex("1916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150"), v)
   631  	pt.Insert(decodeHex("16815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001915080"), v)
   632  	pt.Insert(decodeHex("0a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001"), v)
   633  	pt.Insert(decodeHex("043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f"), v)
   634  	pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281"), v)
   635  	pt.Insert(decodeHex("036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481"), v)
   636  	pt.Insert(decodeHex("031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191"), v)
   637  	pt.Insert(decodeHex("0191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150805480156104"), v)
   638  	pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283"), v)
   639  	pt.Insert(decodeHex("01000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260"), v)
   640  	pt.Insert(decodeHex("006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485"), v)
   641  	pt.Insert(decodeHex("000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020"), v)
   642  	pt.Insert(decodeHex("600052602060002090"), v)
   643  	pt.Insert(decodeHex("820191906000526020600020905b81"), v)
   644  	pt.Insert(decodeHex("00000000000000000000000000"), v)
   645  	pt.Insert(decodeHex("ffffff1681565b60"), v)
   646  	pt.Insert(decodeHex("60a060020a033316600090815261"), v)
   647  	pt.Insert(decodeHex("ffff168152602001"), v)
   648  	pt.Insert(decodeHex("0000000000000000"), v)
   649  	pt.Insert(decodeHex("6004602084601f0104600302600f01f15090"), v)
   650  	pt.Insert(decodeHex("000000000000000000000000"), v)
   651  	pt.Insert(decodeHex("60a060020a033316600090815260"), v)
   652  	pt.Insert(decodeHex("600160a060020a033316"), v)
   653  	pt.Insert(decodeHex("0460209081526040808320849055600590"), v)
   654  	pt.Insert(decodeHex("f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083116103c1"), v)
   655  	pt.Insert(decodeHex("9250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001"), v)
   656  	pt.Insert(decodeHex("910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190602001808311"), v)
   657  	pt.Insert(decodeHex("90f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083116103"), v)
   658  	pt.Insert(decodeHex("9081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467"), v)
   659  	pt.Insert(decodeHex("900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffff"), v)
   660  	pt.Insert(decodeHex("8252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60"), v)
   661  	pt.Insert(decodeHex("81900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ff"), v)
   662  	pt.Insert(decodeHex("80910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083"), v)
   663  	pt.Insert(decodeHex("606060405260e060020a60003504630a3b0a4f81146100315780634e71d92d14"), v)
   664  	pt.Insert(decodeHex("6060405260e060020a60003504630a3b0a4f81146100315780634e71d92d1461"), v)
   665  	pt.Insert(decodeHex("60405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020"), v)
   666  	pt.Insert(decodeHex("60200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffff"), v)
   667  	pt.Insert(decodeHex("52519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b6002"), v)
   668  	pt.Insert(decodeHex("519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b600254"), v)
   669  	pt.Insert(decodeHex("5180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060200180"), v)
   670  	pt.Insert(decodeHex("5060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060"), v)
   671  	pt.Insert(decodeHex("505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190"), v)
   672  	pt.Insert(decodeHex("50505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101"), v)
   673  	pt.Insert(decodeHex("405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190602001"), v)
   674  	pt.Insert(decodeHex("200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffffff"), v)
   675  	pt.Insert(decodeHex("0390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060200180831161"), v)
   676  	pt.Insert(decodeHex("0360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffff"), v)
   677  	pt.Insert(decodeHex("0190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffffffff"), v)
   678  	pt.Insert(decodeHex("91906000526020600020905b8154815290600101"), v)
   679  	pt.Insert(decodeHex("906000526020600020905b815481529060010190"), v)
   680  	pt.Insert(decodeHex("820191906000526020600020905b815481529060"), v)
   681  	pt.Insert(decodeHex("6020600020905b81548152906001019060200180"), v)
   682  	pt.Insert(decodeHex("60200191505060405180910390f35b"), v)
   683  	pt.Insert(decodeHex("6000526020600020905b81548152906001019060"), v)
   684  	pt.Insert(decodeHex("600020905b815481529060010190602001808311"), v)
   685  	pt.Insert(decodeHex("57820191906000526020600020905b8154815290"), v)
   686  	pt.Insert(decodeHex("526020600020905b815481529060010190602001"), v)
   687  	pt.Insert(decodeHex("20600020905b8154815290600101906020018083"), v)
   688  	pt.Insert(decodeHex("0191906000526020600020905b81548152906001"), v)
   689  	pt.Insert(decodeHex("00526020600020905b8154815290600101906020"), v)
   690  	pt.Insert(decodeHex("0020905b81548152906001019060200180831161"), v)
   691  	pt.Insert(decodeHex("50505060405180910390"), v)
   692  	pt.Insert(decodeHex("57823582600050559160200191906001019061"), v)
   693  	pt.Insert(decodeHex("0191906000526020600020905b81"), v)
   694  	pt.Insert(decodeHex("602001600020600050"), v)
   695  	pt.Insert(decodeHex("a060020a033316600090815261"), v)
   696  	pt.Insert(decodeHex("04602084601f0104600302600f01f15090"), v)
   697  	pt.Insert(decodeHex("ffff168152602001908152602001600020600050"), v)
   698  	pt.Insert(decodeHex("006004602084601f0104600302600f01f1509050"), v)
   699  	pt.Insert(decodeHex("906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b"), v)
   700  	pt.Insert(decodeHex("9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681"), v)
   701  	pt.Insert(decodeHex("81815233600160a060020a031682526001602090815260409283902080549182"), v)
   702  	pt.Insert(decodeHex("6101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60"), v)
   703  	pt.Insert(decodeHex("60606040526000357c0100000000000000000000000000000000000000000000"), v)
   704  	pt.Insert(decodeHex("606040526000357c010000000000000000000000000000000000000000000000"), v)
   705  	pt.Insert(decodeHex("6040526000357c01000000000000000000000000000000000000000000000000"), v)
   706  	pt.Insert(decodeHex("565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192"), v)
   707  	pt.Insert(decodeHex("54906101000a900473ffffffffffffffffffffffffffffffffffffffff168156"), v)
   708  	pt.Insert(decodeHex("526000357c010000000000000000000000000000000000000000000000000000"), v)
   709  	pt.Insert(decodeHex("40526000357c0100000000000000000000000000000000000000000000000000"), v)
   710  	pt.Insert(decodeHex("018367ffffffffffffffff16815260200150600360005060003373ffffffffff"), v)
   711  	pt.Insert(decodeHex("20905b81548152906001019060200180831161"), v)
   712  	pt.Insert(decodeHex("0052602060002090"), v)
   713  	pt.Insert(decodeHex("a060020a033316600090815260"), v)
   714  	pt.Insert(decodeHex("9081101561000257"), v)
   715  	pt.Insert(decodeHex("0000000000000000000000"), v)
   716  	pt.Insert(decodeHex("200191505060405180910390f35b"), v)
   717  	pt.Insert(decodeHex("ff168152602001908152602001600020600050"), v)
   718  	pt.Insert(decodeHex("6004602084601f0104600302600f01f1509050"), v)
   719  	pt.Insert(decodeHex("0160a060020a033316"), v)
   720  	pt.Insert(decodeHex("91906000526020600020905b81"), v)
   721  	pt.Insert(decodeHex("602084601f0104600302600f01f15090"), v)
   722  	pt.Insert(decodeHex("546802b5e3af16b187ff"), v)
   723  	pt.Insert(decodeHex("905b81548152906001019060200180831161"), v)
   724  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff"), v)
   725  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffff"), v)
   726  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff"), v)
   727  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffff"), v)
   728  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff"), v)
   729  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff"), v)
   730  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffff"), v)
   731  	pt.Insert(decodeHex("ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffff"), v)
   732  	pt.Insert(decodeHex("ffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffff"), v)
   733  	pt.Insert(decodeHex("ffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffff"), v)
   734  	pt.Insert(decodeHex("ffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff"), v)
   735  	pt.Insert(decodeHex("ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16"), v)
   736  	pt.Insert(decodeHex("ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392"), v)
   737  	pt.Insert(decodeHex("ffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290"), v)
   738  	pt.Insert(decodeHex("ffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092"), v)
   739  	pt.Insert(decodeHex("ffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201"), v)
   740  	pt.Insert(decodeHex("ffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191"), v)
   741  	pt.Insert(decodeHex("ffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181"), v)
   742  	pt.Insert(decodeHex("ffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190"), v)
   743  	pt.Insert(decodeHex("ff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084"), v)
   744  	pt.Insert(decodeHex("f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000600460208460"), v)
   745  	pt.Insert(decodeHex("f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060"), v)
   746  	pt.Insert(decodeHex("935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795"), v)
   747  	pt.Insert(decodeHex("9250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083"), v)
   748  	pt.Insert(decodeHex("918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302"), v)
   749  	pt.Insert(decodeHex("915080519060200190808383829060006004602084601f0104600302600f01f1"), v)
   750  	pt.Insert(decodeHex("915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190819003"), v)
   751  	pt.Insert(decodeHex("910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000600460"), v)
   752  	pt.Insert(decodeHex("90f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084"), v)
   753  	pt.Insert(decodeHex("90935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077"), v)
   754  	pt.Insert(decodeHex("9081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1"), v)
   755  	pt.Insert(decodeHex("90815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035"), v)
   756  	pt.Insert(decodeHex("90808383829060006004602084601f0104600302600f01f15090509081019060"), v)
   757  	pt.Insert(decodeHex("906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffff"), v)
   758  	pt.Insert(decodeHex("90602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040"), v)
   759  	pt.Insert(decodeHex("9060200190808383829060006004602084601f0104600302600f01f150905090"), v)
   760  	pt.Insert(decodeHex("9060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190"), v)
   761  	pt.Insert(decodeHex("9060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183"), v)
   762  	pt.Insert(decodeHex("9060006004602084601f0104600302600f01f150905090810190601f16801561"), v)
   763  	pt.Insert(decodeHex("9060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281"), v)
   764  	pt.Insert(decodeHex("9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673"), v)
   765  	pt.Insert(decodeHex("9050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001"), v)
   766  	pt.Insert(decodeHex("900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffff"), v)
   767  	pt.Insert(decodeHex("900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090"), v)
   768  	pt.Insert(decodeHex("84601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151"), v)
   769  	pt.Insert(decodeHex("8383829060006004602084601f0104600302600f01f150905090810190601f16"), v)
   770  	pt.Insert(decodeHex("8383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020"), v)
   771  	pt.Insert(decodeHex("83829060006004602084601f0104600302600f01f150905090810190601f1680"), v)
   772  	pt.Insert(decodeHex("83829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001"), v)
   773  	pt.Insert(decodeHex("838181518152602001915080519060200190808383829060006004602084601f"), v)
   774  	pt.Insert(decodeHex("838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080"), v)
   775  	pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f3"), v)
   776  	pt.Insert(decodeHex("829060006004602084601f0104600302600f01f150905090810190601f168015"), v)
   777  	pt.Insert(decodeHex("829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182"), v)
   778  	pt.Insert(decodeHex("8281038252838181518152602001915080519060200190808383829060006004"), v)
   779  	pt.Insert(decodeHex("82565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284"), v)
   780  	pt.Insert(decodeHex("8252838181518152602001915080519060200190808383829060006004602084"), v)
   781  	pt.Insert(decodeHex("8252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f010460030260"), v)
   782  	pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b50925050506040"), v)
   783  	pt.Insert(decodeHex("81900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150"), v)
   784  	pt.Insert(decodeHex("8181518152602001915080519060200190808383829060006004602084601f01"), v)
   785  	pt.Insert(decodeHex("8181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051"), v)
   786  	pt.Insert(decodeHex("8152602001915080519060200190808383829060006004602084601f01046003"), v)
   787  	pt.Insert(decodeHex("8152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252"), v)
   788  	pt.Insert(decodeHex("815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594"), v)
   789  	pt.Insert(decodeHex("81518152602001915080519060200190808383829060006004602084601f0104"), v)
   790  	pt.Insert(decodeHex("81518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191"), v)
   791  	pt.Insert(decodeHex("8103825283818151815260200191508051906020019080838382906000600460"), v)
   792  	pt.Insert(decodeHex("80910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004"), v)
   793  	pt.Insert(decodeHex("808383829060006004602084601f0104600302600f01f150905090810190601f"), v)
   794  	pt.Insert(decodeHex("808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060"), v)
   795  	pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060"), v)
   796  	pt.Insert(decodeHex("805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494"), v)
   797  	pt.Insert(decodeHex("8051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f010460"), v)
   798  	pt.Insert(decodeHex("80519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251908190036020"), v)
   799  	pt.Insert(decodeHex("8051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550"), v)
   800  	pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180"), v)
   801  	pt.Insert(decodeHex("8035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550505050505060"), v)
   802  	pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffff"), v)
   803  	pt.Insert(decodeHex("6c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282"), v)
   804  	pt.Insert(decodeHex("67ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093"), v)
   805  	pt.Insert(decodeHex("6101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffff"), v)
   806  	pt.Insert(decodeHex("61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084"), v)
   807  	pt.Insert(decodeHex("60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f01"), v)
   808  	pt.Insert(decodeHex("60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094"), v)
   809  	pt.Insert(decodeHex("60405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060"), v)
   810  	pt.Insert(decodeHex("60248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094955050505050"), v)
   811  	pt.Insert(decodeHex("602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381"), v)
   812  	pt.Insert(decodeHex("602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495505050"), v)
   813  	pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b"), v)
   814  	pt.Insert(decodeHex("602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051"), v)
   815  	pt.Insert(decodeHex("602001915080519060200190808383829060006004602084601f010460030260"), v)
   816  	pt.Insert(decodeHex("602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190"), v)
   817  	pt.Insert(decodeHex("60200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090"), v)
   818  	pt.Insert(decodeHex("60200190808383829060006004602084601f0104600302600f01f15090509081"), v)
   819  	pt.Insert(decodeHex("60200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f3"), v)
   820  	pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190808383829060"), v)
   821  	pt.Insert(decodeHex("601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181"), v)
   822  	pt.Insert(decodeHex("600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080"), v)
   823  	pt.Insert(decodeHex("6004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252"), v)
   824  	pt.Insert(decodeHex("600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001"), v)
   825  	pt.Insert(decodeHex("6001836020036101000a031916815260200191505b5092505050604051809103"), v)
   826  	pt.Insert(decodeHex("60010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382"), v)
   827  	pt.Insert(decodeHex("60006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103"), v)
   828  	pt.Insert(decodeHex("6000600050600060016000506000868152602001908152602001600020600050"), v)
   829  	pt.Insert(decodeHex("5b61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590"), v)
   830  	pt.Insert(decodeHex("5b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f"), v)
   831  	pt.Insert(decodeHex("5b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750"), v)
   832  	pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b5092505050"), v)
   833  	pt.Insert(decodeHex("565b61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255"), v)
   834  	pt.Insert(decodeHex("565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437"), v)
   835  	pt.Insert(decodeHex("54906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ff"), v)
   836  	pt.Insert(decodeHex("5467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490"), v)
   837  	pt.Insert(decodeHex("5290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590"), v)
   838  	pt.Insert(decodeHex("5283818151815260200191508051906020019080838382906000600460208460"), v)
   839  	pt.Insert(decodeHex("52602001915080519060200190808383829060006004602084601f0104600302"), v)
   840  	pt.Insert(decodeHex("52602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251"), v)
   841  	pt.Insert(decodeHex("52519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f"), v)
   842  	pt.Insert(decodeHex("5220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460"), v)
   843  	pt.Insert(decodeHex("51918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f01046003"), v)
   844  	pt.Insert(decodeHex("519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01"), v)
   845  	pt.Insert(decodeHex("519060200190808383829060006004602084601f0104600302600f01f1509050"), v)
   846  	pt.Insert(decodeHex("519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190819003602001"), v)
   847  	pt.Insert(decodeHex("518152602001915080519060200190808383829060006004602084601f010460"), v)
   848  	pt.Insert(decodeHex("518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182"), v)
   849  	pt.Insert(decodeHex("5180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290600060"), v)
   850  	pt.Insert(decodeHex("51602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094955050"), v)
   851  	pt.Insert(decodeHex("516001836020036101000a031916815260200191505b50925050506040518091"), v)
   852  	pt.Insert(decodeHex("509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020"), v)
   853  	pt.Insert(decodeHex("5080519060200190808383829060006004602084601f0104600302600f01f150"), v)
   854  	pt.Insert(decodeHex("5080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360"), v)
   855  	pt.Insert(decodeHex("5060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290"), v)
   856  	pt.Insert(decodeHex("505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382"), v)
   857  	pt.Insert(decodeHex("50505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383"), v)
   858  	pt.Insert(decodeHex("50019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190"), v)
   859  	pt.Insert(decodeHex("408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104"), v)
   860  	pt.Insert(decodeHex("408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495"), v)
   861  	pt.Insert(decodeHex("405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000"), v)
   862  	pt.Insert(decodeHex("248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495505050505050"), v)
   863  	pt.Insert(decodeHex("2084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181"), v)
   864  	pt.Insert(decodeHex("20805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044"), v)
   865  	pt.Insert(decodeHex("2060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550505050"), v)
   866  	pt.Insert(decodeHex("2002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180"), v)
   867  	pt.Insert(decodeHex("2001915080519060200190808383829060006004602084601f0104600302600f"), v)
   868  	pt.Insert(decodeHex("2001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081"), v)
   869  	pt.Insert(decodeHex("200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090509081"), v)
   870  	pt.Insert(decodeHex("200190808383829060006004602084601f0104600302600f01f1509050908101"), v)
   871  	pt.Insert(decodeHex("200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b"), v)
   872  	pt.Insert(decodeHex("2001828103825283818151815260200191508051906020019080838382906000"), v)
   873  	pt.Insert(decodeHex("1f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152"), v)
   874  	pt.Insert(decodeHex("169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401"), v)
   875  	pt.Insert(decodeHex("0f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051"), v)
   876  	pt.Insert(decodeHex("0a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffff"), v)
   877  	pt.Insert(decodeHex("0473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff"), v)
   878  	pt.Insert(decodeHex("04602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283"), v)
   879  	pt.Insert(decodeHex("04600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020"), v)
   880  	pt.Insert(decodeHex("0390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290600060046020"), v)
   881  	pt.Insert(decodeHex("0382528381815181526020019150805190602001908083838290600060046020"), v)
   882  	pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b5092505050604051"), v)
   883  	pt.Insert(decodeHex("0360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1509050"), v)
   884  	pt.Insert(decodeHex("0302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191"), v)
   885  	pt.Insert(decodeHex("02808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080"), v)
   886  	pt.Insert(decodeHex("02600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150"), v)
   887  	pt.Insert(decodeHex("01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190"), v)
   888  	pt.Insert(decodeHex("019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080"), v)
   889  	pt.Insert(decodeHex("01915080519060200190808383829060006004602084601f0104600302600f01"), v)
   890  	pt.Insert(decodeHex("01915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251908190"), v)
   891  	pt.Insert(decodeHex("0190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1509050908101"), v)
   892  	pt.Insert(decodeHex("0190808383829060006004602084601f0104600302600f01f150905090810190"), v)
   893  	pt.Insert(decodeHex("0190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60"), v)
   894  	pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390"), v)
   895  	pt.Insert(decodeHex("0182810382528381815181526020019150805190602001908083838290600060"), v)
   896  	pt.Insert(decodeHex("0182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082"), v)
   897  	pt.Insert(decodeHex("0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260"), v)
   898  	pt.Insert(decodeHex("010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280"), v)
   899  	pt.Insert(decodeHex("01000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffff"), v)
   900  	pt.Insert(decodeHex("006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452"), v)
   901  	pt.Insert(decodeHex("006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382"), v)
   902  	pt.Insert(decodeHex("0060005060006001600050600086815260200190815260200160002060005060"), v)
   903  	pt.Insert(decodeHex("000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffff"), v)
   904  
   905  	mf2 := NewMatchFinder2(&pt)
   906  	data := decodeHex("6060604052361561008a576000357c01000000000000000000000000000000000000000000000000000000009004806301cb3b20146102e357806329dcb0cf14" +
   907  		"6102f057806338af3eed146103115780636e66f6e9146103485780637a3a0e841461037f5780637b3e5e7b146103a0578063a035b1fe146103c1578063dc0d3d" +
   908  		"ff146103e25761008a565b6102e15b60006000600660005060066000508054600101908181548183558181151161011957600202816002028360005260206000" +
   909  		"20918201910161011891906100cf565b808211156101145760006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690" +
   910  		"556001820160005060009055506001016100cf565b5090565b5b5050508154811015610002579060005260206000209060020201600091509150338282506000" +
   911  		"0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055503482825060010160005081905550818150600101600050" +
   912  		"546002600082828250540192505081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff" +
   913  		"ffffffffffffffffffff166390b98a11336004600050548585506001016000505404604051837c01000000000000000000000000000000000000000000000000" +
   914  		"00000000028152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506020604051808303816000876161da" +
   915  		"5a03f1156100025750505060405151507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf682825060000160009054906101000a" +
   916  		"900473ffffffffffffffffffffffffffffffffffffffff16838350600101600050546001604051808473ffffffffffffffffffffffffffffffffffffffff1681" +
   917  		"52602001838152602001828152602001935050505060405180910390a15b5050565b005b6102ee6004506104ec565b005b6102fb60045061045e565b60405180" +
   918  		"82815260200191505060405180910390f35b61031c600450610426565b604051808273ffffffffffffffffffffffffffffffffffffffff168152602001915050" +
   919  		"60405180910390f35b610353600450610470565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b" +
   920  		"61038a60045061044c565b6040518082815260200191505060405180910390f35b6103ab600450610455565b6040518082815260200191505060405180910390" +
   921  		"f35b6103cc600450610467565b6040518082815260200191505060405180910390f35b6103f3600480359060200150610496565b604051808373ffffffffffff" +
   922  		"ffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffff" +
   923  		"ffffffffffffffffff1681565b60016000505481565b60026000505481565b60036000505481565b60046000505481565b600560009054906101000a900473ff" +
   924  		"ffffffffffffffffffffffffffffffffffffff1681565b6006600050818154811015610002579060005260206000209060020201600091509050806000016000" +
   925  		"9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160005054905082565b6000600360005054421015156107fc57600160" +
   926  		"0050546002600050541015156105f357600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff" +
   927  		"ffffffffffffffff166000600260005054604051809050600060405180830381858888f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf6" +
   928  		"60cf39e8eec506112bbdf6600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600050546000604051808473ffffffff" +
   929  		"ffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a16107c1565b7fe842aea7a5f1b01049d752" +
   930  		"008c53c52890b1a6daf660cf39e8eec506112bbdf66000600b600060405180848152602001838152602001828152602001935050505060405180910390a16000" +
   931  		"90505b6006600050548110156107c057600660005081815481101561000257906000526020600020906002020160005060000160009054906101000a900473ff" +
   932  		"ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660006006600050838154811015610002579060005260" +
   933  		"20600020906002020160005060010160005054604051809050600060405180830381858888f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6" +
   934  		"daf660cf39e8eec506112bbdf6600660005082815481101561000257906000526020600020906002020160005060000160009054906101000a900473ffffffff" +
   935  		"ffffffffffffffffffffffffffffffff166006600050838154811015610002579060005260206000209060020201600050600101600050546000604051808473" +
   936  		"ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15b806001019050805061064256" +
   937  		"5b5b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b5056")
   938  	matches := mf2.FindLongestMatches(data)
   939  	for _, m := range matches {
   940  		fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
   941  	}
   942  	if len(matches) != 234 {
   943  		t.Errorf("expected matches: %d, got %d", 234, len(matches))
   944  	}
   945  }
   946  
   947  func TestFindMatches7(t *testing.T) {
   948  	var pt PatriciaTree
   949  	v := []byte{1}
   950  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff"), v)
   951  	pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffff"), v)
   952  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff16"), v)
   953  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff16"), v)
   954  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff16"), v)
   955  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16"), v)
   956  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff16"), v)
   957  	pt.Insert(decodeHex("600160a060020a03"), v)
   958  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff16815260200191505060405180910390a1"), v)
   959  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1681"), v)
   960  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168156"), v)
   961  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1681565b"), v)
   962  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681565b60"), v)
   963  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff168152602001908152602001"), v)
   964  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff16815260200190815260200160"), v)
   965  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1681526020019081526020016000"), v)
   966  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168152602001908152602001600020"), v)
   967  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16815260200190815260200160002060"), v)
   968  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681526020019081526020016000206000"), v)
   969  	pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffffff1681526020019081526020"), v)
   970  	pt.Insert(decodeHex("81526020019081526020016000206000"), v)
   971  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168152"), v)
   972  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16815260"), v)
   973  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681526020"), v)
   974  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff168152602001"), v)
   975  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff1681565b60"), v)
   976  	pt.Insert(decodeHex("ffffffffffffffffffffffffff168152602001"), v)
   977  	pt.Insert(decodeHex("526020019081526020016000206000"), v)
   978  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1682"), v)
   979  	pt.Insert(decodeHex("ffffffffffffffffffffffffff1681565b60"), v)
   980  	pt.Insert(decodeHex("ffffffffffffffffffffffff168152602001"), v)
   981  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1682"), v)
   982  	pt.Insert(decodeHex("6020019081526020016000206000"), v)
   983  	pt.Insert(decodeHex("ffffffffffffffffffffffff1681565b60"), v)
   984  	pt.Insert(decodeHex("ffffffffffffffffffffff168152602001"), v)
   985  	pt.Insert(decodeHex("8152602001908152602001600020600050"), v)
   986  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff1682"), v)
   987  	pt.Insert(decodeHex("ffffffffffffffff168152602001"), v)
   988  	pt.Insert(decodeHex("80806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561"), v)
   989  	pt.Insert(decodeHex("60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16"), v)
   990  	pt.Insert(decodeHex("5b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f"), v)
   991  	pt.Insert(decodeHex("5180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f168015"), v)
   992  	pt.Insert(decodeHex("405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680"), v)
   993  	pt.Insert(decodeHex("20019081526020016000206000"), v)
   994  	pt.Insert(decodeHex("ffffffffffffffffffffff1681565b60"), v)
   995  	pt.Insert(decodeHex("ffffffffffffffffffff168152602001"), v)
   996  	pt.Insert(decodeHex("52602001908152602001600020600050"), v)
   997  	pt.Insert(decodeHex("ffffffffffffffffffffffffff1682"), v)
   998  	pt.Insert(decodeHex("ffffffffffffffff1681565b60"), v)
   999  	pt.Insert(decodeHex("ffffffffffffff168152602001"), v)
  1000  	pt.Insert(decodeHex("ffffffffffffffffffff1681565b60"), v)
  1001  	pt.Insert(decodeHex("019081526020016000206000"), v)
  1002  	pt.Insert(decodeHex("ffffffffffffffffff168152602001"), v)
  1003  	pt.Insert(decodeHex("1681526020019081526020016000206000"), v)
  1004  	pt.Insert(decodeHex("602001908152602001600020600050"), v)
  1005  	pt.Insert(decodeHex("ffffffffffffffffffffffff1682"), v)
  1006  	pt.Insert(decodeHex("ffffffffffffff1681565b60"), v)
  1007  	pt.Insert(decodeHex("ffffffffffffffffff1681565b60"), v)
  1008  	pt.Insert(decodeHex("ffffffffffff168152602001"), v)
  1009  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff168152602001908152602001600020600050"), v)
  1010  	pt.Insert(decodeHex("9081526020016000206000"), v)
  1011  	pt.Insert(decodeHex("5050604051849350600080"), v)
  1012  	pt.Insert(decodeHex("2001908152602001600020600050"), v)
  1013  	pt.Insert(decodeHex("505060405180910390f35b"), v)
  1014  	pt.Insert(decodeHex("ffffffffffffffffffffff1682"), v)
  1015  	pt.Insert(decodeHex("6000506000600060005054815260200190815260200160002060006101000a81"), v)
  1016  	pt.Insert(decodeHex("00506000600060005054815260200190815260200160002060006101000a8154"), v)
  1017  	pt.Insert(decodeHex("ffffffffffff1681565b60"), v)
  1018  	pt.Insert(decodeHex("ffffff16815260200191505060405180910390a1"), v)
  1019  	pt.Insert(decodeHex("ffffffffff168152602001"), v)
  1020  	pt.Insert(decodeHex("8281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a4578082"), v)
  1021  	pt.Insert(decodeHex("81038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a457808203"), v)
  1022  	pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a4"), v)
  1023  	pt.Insert(decodeHex("60005060003373ffffffffffffffffffffffffffffffffffffffff1681526020"), v)
  1024  	pt.Insert(decodeHex("60003373ffffffffffffffffffffffffffffffffffffffff1681526020019081"), v)
  1025  	pt.Insert(decodeHex("5060003373ffffffffffffffffffffffffffffffffffffffff16815260200190"), v)
  1026  	pt.Insert(decodeHex("3373ffffffffffffffffffffffffffffffffffffffff16815260200190815260"), v)
  1027  	pt.Insert(decodeHex("20018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a457"), v)
  1028  	pt.Insert(decodeHex("038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a45780820380"), v)
  1029  	pt.Insert(decodeHex("018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a45780"), v)
  1030  	pt.Insert(decodeHex("005060003373ffffffffffffffffffffffffffffffffffffffff168152602001"), v)
  1031  	pt.Insert(decodeHex("003373ffffffffffffffffffffffffffffffffffffffff168152602001908152"), v)
  1032  	pt.Insert(decodeHex("01908152602001600020600050"), v)
  1033  	pt.Insert(decodeHex("ffffffffffffffffffffffffff16815260200190"), v)
  1034  	pt.Insert(decodeHex("ffffffffffffffffffffffff1681526020019081"), v)
  1035  	pt.Insert(decodeHex("ffffffffffffffffffffff168152602001908152"), v)
  1036  	pt.Insert(decodeHex("ffffffffffffffffffff16815260200190815260"), v)
  1037  	pt.Insert(decodeHex("ffffffffffffffffff1681526020019081526020"), v)
  1038  	pt.Insert(decodeHex("ffffffffffffffff168152602001908152602001"), v)
  1039  	pt.Insert(decodeHex("ffffffffffffff16815260200190815260200160"), v)
  1040  	pt.Insert(decodeHex("ffffffffffff1681526020019081526020016000"), v)
  1041  	pt.Insert(decodeHex("ffffffffff168152602001908152602001600020"), v)
  1042  	pt.Insert(decodeHex("ffffffff16815260200190815260200160002060"), v)
  1043  	pt.Insert(decodeHex("ffffff1681526020019081526020016000206000"), v)
  1044  	pt.Insert(decodeHex("81526020016000206000"), v)
  1045  	pt.Insert(decodeHex("50604051849350600080"), v)
  1046  	pt.Insert(decodeHex("ffffffffffffffffffff1682"), v)
  1047  	pt.Insert(decodeHex("5060405180910390f35b"), v)
  1048  	pt.Insert(decodeHex("168152602001908152602001600020600050"), v)
  1049  	pt.Insert(decodeHex("ffff16815260200191505060405180910390a1"), v)
  1050  	pt.Insert(decodeHex("67ffffffffffffffff"), v)
  1051  	pt.Insert(decodeHex("ffffffffffffffff1682"), v)
  1052  	pt.Insert(decodeHex("ffff1681526020019081526020016000206000"), v)
  1053  	pt.Insert(decodeHex("6040518082815260200191505060405180910390"), v)
  1054  	pt.Insert(decodeHex("ffffffffff1681565b60"), v)
  1055  	pt.Insert(decodeHex("908152602001600020600050"), v)
  1056  	pt.Insert(decodeHex("8281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390"), v)
  1057  	pt.Insert(decodeHex("81038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f3"), v)
  1058  	pt.Insert(decodeHex("80806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050506040"), v)
  1059  	pt.Insert(decodeHex("806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050604051"), v)
  1060  	pt.Insert(decodeHex("60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050"), v)
  1061  	pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180"), v)
  1062  	pt.Insert(decodeHex("5b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250"), v)
  1063  	pt.Insert(decodeHex("5180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060"), v)
  1064  	pt.Insert(decodeHex("405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050"), v)
  1065  	pt.Insert(decodeHex("20018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050506040518091"), v)
  1066  	pt.Insert(decodeHex("038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b"), v)
  1067  	pt.Insert(decodeHex("018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050604051809103"), v)
  1068  	pt.Insert(decodeHex("ffffffff168152602001"), v)
  1069  	pt.Insert(decodeHex("5b60405180828152602001915050604051809103"), v)
  1070  	pt.Insert(decodeHex("565b604051808281526020019150506040518091"), v)
  1071  	pt.Insert(decodeHex("518082815260200191505060405180910390f35b"), v)
  1072  	pt.Insert(decodeHex("40518082815260200191505060405180910390f3"), v)
  1073  	pt.Insert(decodeHex("ff16815260200191505060405180910390a1"), v)
  1074  	pt.Insert(decodeHex("ffffffffffffffffff1682"), v)
  1075  	pt.Insert(decodeHex("808281526102cb94909290828280156100d757"), v)
  1076  	pt.Insert(decodeHex("ff1681526020019081526020016000206000"), v)
  1077  	pt.Insert(decodeHex("526020016000206000"), v)
  1078  	pt.Insert(decodeHex("f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090509081019060"), v)
  1079  	pt.Insert(decodeHex("a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284209192849261"), v)
  1080  	pt.Insert(decodeHex("90f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190"), v)
  1081  	pt.Insert(decodeHex("8252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60"), v)
  1082  	pt.Insert(decodeHex("60a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282842091928492"), v)
  1083  	pt.Insert(decodeHex("602081815260408083206002548452825282208354815467ffffffffffffffff191667ffffffffffffffff919091161781556001848101805491830180548382"), v)
  1084  	pt.Insert(decodeHex("600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284"), v)
  1085  	pt.Insert(decodeHex("600160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a090810190945260808281529293909190"), v)
  1086  	pt.Insert(decodeHex("600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284209192"), v)
  1087  	pt.Insert(decodeHex("60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff"), v)
  1088  	pt.Insert(decodeHex("52838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040"), v)
  1089  	pt.Insert(decodeHex("52600160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a0908101909452608082815292939091"), v)
  1090  	pt.Insert(decodeHex("526000828152604090208054829081101561000257506000908152602090200154905081565b610315600435600160a060020a03331660009081526020818152"), v)
  1091  	pt.Insert(decodeHex("35600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282842091"), v)
  1092  	pt.Insert(decodeHex("2081815260408083206002548452825282208354815467ffffffffffffffff191667ffffffffffffffff91909116178155600184810180549183018054838255"), v)
  1093  	pt.Insert(decodeHex("0435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452828420"), v)
  1094  	pt.Insert(decodeHex("0160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a09081019094526080828152929390919082"), v)
  1095  	pt.Insert(decodeHex("0160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452828420919284"), v)
  1096  	pt.Insert(decodeHex("009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16"), v)
  1097  	pt.Insert(decodeHex("60405180910390f35b"), v)
  1098  	pt.Insert(decodeHex("8082815260200191505060405180910390f35b"), v)
  1099  	pt.Insert(decodeHex("ffffffffffffff1682"), v)
  1100  	pt.Insert(decodeHex("600160a060020a033316600090815261"), v)
  1101  	pt.Insert(decodeHex("8152602001600020600050"), v)
  1102  	pt.Insert(decodeHex("90600052602060002090"), v)
  1103  	pt.Insert(decodeHex("928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260"), v)
  1104  	pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782"), v)
  1105  	pt.Insert(decodeHex("822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260608481526100"), v)
  1106  	pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080"), v)
  1107  	pt.Insert(decodeHex("818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160"), v)
  1108  	pt.Insert(decodeHex("8152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040"), v)
  1109  	pt.Insert(decodeHex("8152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040526060"), v)
  1110  	pt.Insert(decodeHex("815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020"), v)
  1111  	pt.Insert(decodeHex("80822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084815261"), v)
  1112  	pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c0908490"), v)
  1113  	pt.Insert(decodeHex("80519060200190808383829060006004602084601f0104600302600f01f15090"), v)
  1114  	pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c0908490801561"), v)
  1115  	pt.Insert(decodeHex("6101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060"), v)
  1116  	pt.Insert(decodeHex("604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260608481"), v)
  1117  	pt.Insert(decodeHex("60243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590"), v)
  1118  	pt.Insert(decodeHex("6020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285"), v)
  1119  	pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201"), v)
  1120  	pt.Insert(decodeHex("60200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b"), v)
  1121  	pt.Insert(decodeHex("60043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81"), v)
  1122  	pt.Insert(decodeHex("6001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de"), v)
  1123  	pt.Insert(decodeHex("60006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094"), v)
  1124  	pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c09084"), v)
  1125  	pt.Insert(decodeHex("52928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052"), v)
  1126  	pt.Insert(decodeHex("52604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084"), v)
  1127  	pt.Insert(decodeHex("5260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052602060002090"), v)
  1128  	pt.Insert(decodeHex("516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103"), v)
  1129  	pt.Insert(decodeHex("4080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040526060848152"), v)
  1130  	pt.Insert(decodeHex("3560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185"), v)
  1131  	pt.Insert(decodeHex("3560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490"), v)
  1132  	pt.Insert(decodeHex("243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004"), v)
  1133  	pt.Insert(decodeHex("2090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084815261006c"), v)
  1134  	pt.Insert(decodeHex("20818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501"), v)
  1135  	pt.Insert(decodeHex("20036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191"), v)
  1136  	pt.Insert(decodeHex("200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81"), v)
  1137  	pt.Insert(decodeHex("1916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052602060"), v)
  1138  	pt.Insert(decodeHex("16815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060005260206000"), v)
  1139  	pt.Insert(decodeHex("0a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060005260"), v)
  1140  	pt.Insert(decodeHex("043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101"), v)
  1141  	pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c09084908015"), v)
  1142  	pt.Insert(decodeHex("036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190"), v)
  1143  	pt.Insert(decodeHex("031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020"), v)
  1144  	pt.Insert(decodeHex("0191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154"), v)
  1145  	pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57"), v)
  1146  	pt.Insert(decodeHex("01000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000"), v)
  1147  	pt.Insert(decodeHex("006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402"), v)
  1148  	pt.Insert(decodeHex("000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052"), v)
  1149  	pt.Insert(decodeHex("ffffffff1681565b60"), v)
  1150  	pt.Insert(decodeHex("60006005600a4306101561032f57600190506103"), v)
  1151  	pt.Insert(decodeHex("600160a060020a033316600090815260"), v)
  1152  	pt.Insert(decodeHex("ffffff168152602001"), v)
  1153  	pt.Insert(decodeHex("82815260200191505060405180910390f35b"), v)
  1154  	pt.Insert(decodeHex("9060006004602084601f0104600302600f01f150"), v)
  1155  	pt.Insert(decodeHex("8383829060006004602084601f0104600302600f"), v)
  1156  	pt.Insert(decodeHex("83829060006004602084601f0104600302600f01"), v)
  1157  	pt.Insert(decodeHex("829060006004602084601f0104600302600f01f1"), v)
  1158  	pt.Insert(decodeHex("808383829060006004602084601f010460030260"), v)
  1159  	pt.Insert(decodeHex("60006004602084601f0104600302600f01f15090"), v)
  1160  	pt.Insert(decodeHex("815260200191505060405180910390f35b"), v)
  1161  	pt.Insert(decodeHex("0000000000000000000000000000"), v)
  1162  	pt.Insert(decodeHex("8352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301828280"), v)
  1163  	pt.Insert(decodeHex("83526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091"), v)
  1164  	pt.Insert(decodeHex("81810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293"), v)
  1165  	pt.Insert(decodeHex("810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392"), v)
  1166  	pt.Insert(decodeHex("808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183018282"), v)
  1167  	pt.Insert(decodeHex("8051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280"), v)
  1168  	pt.Insert(decodeHex("60408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095"), v)
  1169  	pt.Insert(decodeHex("602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552"), v)
  1170  	pt.Insert(decodeHex("60043560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184"), v)
  1171  	pt.Insert(decodeHex("600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183018282801561"), v)
  1172  	pt.Insert(decodeHex("6000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301"), v)
  1173  	pt.Insert(decodeHex("6000526020600020"), v)
  1174  	pt.Insert(decodeHex("52600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091830182828015"), v)
  1175  	pt.Insert(decodeHex("526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183"), v)
  1176  	pt.Insert(decodeHex("51602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085"), v)
  1177  	pt.Insert(decodeHex("408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552"), v)
  1178  	pt.Insert(decodeHex("3560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190"), v)
  1179  	pt.Insert(decodeHex("2081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292"), v)
  1180  	pt.Insert(decodeHex("043560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401"), v)
  1181  	pt.Insert(decodeHex("0183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290"), v)
  1182  	pt.Insert(decodeHex("0160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301828280156101"), v)
  1183  	pt.Insert(decodeHex("00808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091830182"), v)
  1184  	pt.Insert(decodeHex("0160a060020a033316600090815261"), v)
  1185  	pt.Insert(decodeHex("006005600a4306101561032f57600190506103"), v)
  1186  	pt.Insert(decodeHex("6020016000206000"), v)
  1187  	pt.Insert(decodeHex("000000000000000000"), v)
  1188  	pt.Insert(decodeHex("7c01000000000000000000000000000000000000000000000000000000009004"), v)
  1189  	pt.Insert(decodeHex("6000357c01000000000000000000000000000000000000000000000000000000"), v)
  1190  	pt.Insert(decodeHex("357c010000000000000000000000000000000000000000000000000000000090"), v)
  1191  	pt.Insert(decodeHex("0100000000000000000000000000000000000000000000000000000000900480"), v)
  1192  	pt.Insert(decodeHex("00357c0100000000000000000000000000000000000000000000000000000000"), v)
  1193  	pt.Insert(decodeHex("0000000000000000000000000000000000000000000000000000000090048063"), v)
  1194  	pt.Insert(decodeHex("0160a060020a033316600090815260"), v)
  1195  	pt.Insert(decodeHex("405180910390f35b"), v)
  1196  	pt.Insert(decodeHex("006004602084601f0104600302600f01f15090"), v)
  1197  	pt.Insert(decodeHex("52602001600020600050"), v)
  1198  	pt.Insert(decodeHex("ffffffffffff1682"), v)
  1199  	pt.Insert(decodeHex("600460209081526040808320849055600590"), v)
  1200  	pt.Insert(decodeHex("928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190"), v)
  1201  	pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381"), v)
  1202  	pt.Insert(decodeHex("822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261"), v)
  1203  	pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182"), v)
  1204  	pt.Insert(decodeHex("818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601"), v)
  1205  	pt.Insert(decodeHex("8152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185"), v)
  1206  	pt.Insert(decodeHex("8152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096"), v)
  1207  	pt.Insert(decodeHex("815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191508054"), v)
  1208  	pt.Insert(decodeHex("80822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552"), v)
  1209  	pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001"), v)
  1210  	pt.Insert(decodeHex("806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156104"), v)
  1211  	pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103"), v)
  1212  	pt.Insert(decodeHex("6101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152"), v)
  1213  	pt.Insert(decodeHex("604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285"), v)
  1214  	pt.Insert(decodeHex("60243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101"), v)
  1215  	pt.Insert(decodeHex("6020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502"), v)
  1216  	pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181"), v)
  1217  	pt.Insert(decodeHex("60200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001915080548015"), v)
  1218  	pt.Insert(decodeHex("60043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6040805160206024803560048181013560"), v)
  1219  	pt.Insert(decodeHex("6001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252"), v)
  1220  	pt.Insert(decodeHex("60006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004"), v)
  1221  	pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020"), v)
  1222  	pt.Insert(decodeHex("52928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501"), v)
  1223  	pt.Insert(decodeHex("52604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652"), v)
  1224  	pt.Insert(decodeHex("5260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150805480"), v)
  1225  	pt.Insert(decodeHex("5260200191505060405180910390f35b"), v)
  1226  	pt.Insert(decodeHex("516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382"), v)
  1227  	pt.Insert(decodeHex("4080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585"), v)
  1228  	pt.Insert(decodeHex("3560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81"), v)
  1229  	pt.Insert(decodeHex("3560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590"), v)
  1230  	pt.Insert(decodeHex("243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185"), v)
  1231  	pt.Insert(decodeHex("2090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100"), v)
  1232  	pt.Insert(decodeHex("20818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286"), v)
  1233  	pt.Insert(decodeHex("20036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154"), v)
  1234  	pt.Insert(decodeHex("200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191508054801561"), v)
  1235  	pt.Insert(decodeHex("1916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150"), v)
  1236  	pt.Insert(decodeHex("16815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001915080"), v)
  1237  	pt.Insert(decodeHex("0a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001"), v)
  1238  	pt.Insert(decodeHex("043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f"), v)
  1239  	pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281"), v)
  1240  	pt.Insert(decodeHex("036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481"), v)
  1241  	pt.Insert(decodeHex("031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191"), v)
  1242  	pt.Insert(decodeHex("0191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150805480156104"), v)
  1243  	pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283"), v)
  1244  	pt.Insert(decodeHex("01000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260"), v)
  1245  	pt.Insert(decodeHex("006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485"), v)
  1246  	pt.Insert(decodeHex("000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020"), v)
  1247  	pt.Insert(decodeHex("600052602060002090"), v)
  1248  	pt.Insert(decodeHex("820191906000526020600020905b81"), v)
  1249  	pt.Insert(decodeHex("00000000000000000000000000"), v)
  1250  	pt.Insert(decodeHex("ffffff1681565b60"), v)
  1251  	pt.Insert(decodeHex("60a060020a033316600090815261"), v)
  1252  	pt.Insert(decodeHex("ffff168152602001"), v)
  1253  	pt.Insert(decodeHex("0000000000000000"), v)
  1254  	pt.Insert(decodeHex("6004602084601f0104600302600f01f15090"), v)
  1255  	pt.Insert(decodeHex("000000000000000000000000"), v)
  1256  	pt.Insert(decodeHex("60a060020a033316600090815260"), v)
  1257  	pt.Insert(decodeHex("600160a060020a033316"), v)
  1258  	pt.Insert(decodeHex("0460209081526040808320849055600590"), v)
  1259  	pt.Insert(decodeHex("f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083116103c1"), v)
  1260  	pt.Insert(decodeHex("9250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001"), v)
  1261  	pt.Insert(decodeHex("910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190602001808311"), v)
  1262  	pt.Insert(decodeHex("90f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083116103"), v)
  1263  	pt.Insert(decodeHex("9081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467"), v)
  1264  	pt.Insert(decodeHex("900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffff"), v)
  1265  	pt.Insert(decodeHex("8252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60"), v)
  1266  	pt.Insert(decodeHex("81900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ff"), v)
  1267  	pt.Insert(decodeHex("80910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083"), v)
  1268  	pt.Insert(decodeHex("606060405260e060020a60003504630a3b0a4f81146100315780634e71d92d14"), v)
  1269  	pt.Insert(decodeHex("6060405260e060020a60003504630a3b0a4f81146100315780634e71d92d1461"), v)
  1270  	pt.Insert(decodeHex("60405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020"), v)
  1271  	pt.Insert(decodeHex("60200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffff"), v)
  1272  	pt.Insert(decodeHex("52519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b6002"), v)
  1273  	pt.Insert(decodeHex("519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b600254"), v)
  1274  	pt.Insert(decodeHex("5180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060200180"), v)
  1275  	pt.Insert(decodeHex("5060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060"), v)
  1276  	pt.Insert(decodeHex("505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190"), v)
  1277  	pt.Insert(decodeHex("50505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101"), v)
  1278  	pt.Insert(decodeHex("405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190602001"), v)
  1279  	pt.Insert(decodeHex("200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffffff"), v)
  1280  	pt.Insert(decodeHex("0390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060200180831161"), v)
  1281  	pt.Insert(decodeHex("0360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffff"), v)
  1282  	pt.Insert(decodeHex("0190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffffffff"), v)
  1283  	pt.Insert(decodeHex("91906000526020600020905b8154815290600101"), v)
  1284  	pt.Insert(decodeHex("906000526020600020905b815481529060010190"), v)
  1285  	pt.Insert(decodeHex("820191906000526020600020905b815481529060"), v)
  1286  	pt.Insert(decodeHex("6020600020905b81548152906001019060200180"), v)
  1287  	pt.Insert(decodeHex("60200191505060405180910390f35b"), v)
  1288  	pt.Insert(decodeHex("6000526020600020905b81548152906001019060"), v)
  1289  	pt.Insert(decodeHex("600020905b815481529060010190602001808311"), v)
  1290  	pt.Insert(decodeHex("57820191906000526020600020905b8154815290"), v)
  1291  	pt.Insert(decodeHex("526020600020905b815481529060010190602001"), v)
  1292  	pt.Insert(decodeHex("20600020905b8154815290600101906020018083"), v)
  1293  	pt.Insert(decodeHex("0191906000526020600020905b81548152906001"), v)
  1294  	pt.Insert(decodeHex("00526020600020905b8154815290600101906020"), v)
  1295  	pt.Insert(decodeHex("0020905b81548152906001019060200180831161"), v)
  1296  	pt.Insert(decodeHex("50505060405180910390"), v)
  1297  	pt.Insert(decodeHex("57823582600050559160200191906001019061"), v)
  1298  	pt.Insert(decodeHex("0191906000526020600020905b81"), v)
  1299  	pt.Insert(decodeHex("602001600020600050"), v)
  1300  	pt.Insert(decodeHex("a060020a033316600090815261"), v)
  1301  	pt.Insert(decodeHex("04602084601f0104600302600f01f15090"), v)
  1302  	pt.Insert(decodeHex("ffff168152602001908152602001600020600050"), v)
  1303  	pt.Insert(decodeHex("006004602084601f0104600302600f01f1509050"), v)
  1304  	pt.Insert(decodeHex("906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b"), v)
  1305  	pt.Insert(decodeHex("9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681"), v)
  1306  	pt.Insert(decodeHex("81815233600160a060020a031682526001602090815260409283902080549182"), v)
  1307  	pt.Insert(decodeHex("6101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60"), v)
  1308  	pt.Insert(decodeHex("60606040526000357c0100000000000000000000000000000000000000000000"), v)
  1309  	pt.Insert(decodeHex("606040526000357c010000000000000000000000000000000000000000000000"), v)
  1310  	pt.Insert(decodeHex("6040526000357c01000000000000000000000000000000000000000000000000"), v)
  1311  	pt.Insert(decodeHex("565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192"), v)
  1312  	pt.Insert(decodeHex("54906101000a900473ffffffffffffffffffffffffffffffffffffffff168156"), v)
  1313  	pt.Insert(decodeHex("526000357c010000000000000000000000000000000000000000000000000000"), v)
  1314  	pt.Insert(decodeHex("40526000357c0100000000000000000000000000000000000000000000000000"), v)
  1315  	pt.Insert(decodeHex("018367ffffffffffffffff16815260200150600360005060003373ffffffffff"), v)
  1316  	pt.Insert(decodeHex("20905b81548152906001019060200180831161"), v)
  1317  	pt.Insert(decodeHex("0052602060002090"), v)
  1318  	pt.Insert(decodeHex("a060020a033316600090815260"), v)
  1319  	pt.Insert(decodeHex("9081101561000257"), v)
  1320  	pt.Insert(decodeHex("0000000000000000000000"), v)
  1321  	pt.Insert(decodeHex("200191505060405180910390f35b"), v)
  1322  	pt.Insert(decodeHex("ff168152602001908152602001600020600050"), v)
  1323  	pt.Insert(decodeHex("6004602084601f0104600302600f01f1509050"), v)
  1324  	pt.Insert(decodeHex("0160a060020a033316"), v)
  1325  	pt.Insert(decodeHex("91906000526020600020905b81"), v)
  1326  	pt.Insert(decodeHex("602084601f0104600302600f01f15090"), v)
  1327  	pt.Insert(decodeHex("546802b5e3af16b187ff"), v)
  1328  	pt.Insert(decodeHex("905b81548152906001019060200180831161"), v)
  1329  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff"), v)
  1330  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffff"), v)
  1331  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff"), v)
  1332  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffff"), v)
  1333  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff"), v)
  1334  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff"), v)
  1335  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffff"), v)
  1336  	pt.Insert(decodeHex("ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffff"), v)
  1337  	pt.Insert(decodeHex("ffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffff"), v)
  1338  	pt.Insert(decodeHex("ffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffff"), v)
  1339  	pt.Insert(decodeHex("ffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff"), v)
  1340  	pt.Insert(decodeHex("ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16"), v)
  1341  	pt.Insert(decodeHex("ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392"), v)
  1342  	pt.Insert(decodeHex("ffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290"), v)
  1343  	pt.Insert(decodeHex("ffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092"), v)
  1344  	pt.Insert(decodeHex("ffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201"), v)
  1345  	pt.Insert(decodeHex("ffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191"), v)
  1346  	pt.Insert(decodeHex("ffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181"), v)
  1347  	pt.Insert(decodeHex("ffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190"), v)
  1348  	pt.Insert(decodeHex("ff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084"), v)
  1349  	pt.Insert(decodeHex("f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000600460208460"), v)
  1350  	pt.Insert(decodeHex("f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060"), v)
  1351  	pt.Insert(decodeHex("935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795"), v)
  1352  	pt.Insert(decodeHex("9250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083"), v)
  1353  	pt.Insert(decodeHex("918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302"), v)
  1354  	pt.Insert(decodeHex("915080519060200190808383829060006004602084601f0104600302600f01f1"), v)
  1355  	pt.Insert(decodeHex("915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190819003"), v)
  1356  	pt.Insert(decodeHex("910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000600460"), v)
  1357  	pt.Insert(decodeHex("90f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084"), v)
  1358  	pt.Insert(decodeHex("90935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077"), v)
  1359  	pt.Insert(decodeHex("9081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1"), v)
  1360  	pt.Insert(decodeHex("90815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035"), v)
  1361  	pt.Insert(decodeHex("90808383829060006004602084601f0104600302600f01f15090509081019060"), v)
  1362  	pt.Insert(decodeHex("906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffff"), v)
  1363  	pt.Insert(decodeHex("90602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040"), v)
  1364  	pt.Insert(decodeHex("9060200190808383829060006004602084601f0104600302600f01f150905090"), v)
  1365  	pt.Insert(decodeHex("9060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190"), v)
  1366  	pt.Insert(decodeHex("9060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183"), v)
  1367  	pt.Insert(decodeHex("9060006004602084601f0104600302600f01f150905090810190601f16801561"), v)
  1368  	pt.Insert(decodeHex("9060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281"), v)
  1369  	pt.Insert(decodeHex("9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673"), v)
  1370  	pt.Insert(decodeHex("9050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001"), v)
  1371  	pt.Insert(decodeHex("900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffff"), v)
  1372  	pt.Insert(decodeHex("900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090"), v)
  1373  	pt.Insert(decodeHex("84601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151"), v)
  1374  	pt.Insert(decodeHex("8383829060006004602084601f0104600302600f01f150905090810190601f16"), v)
  1375  	pt.Insert(decodeHex("8383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020"), v)
  1376  	pt.Insert(decodeHex("83829060006004602084601f0104600302600f01f150905090810190601f1680"), v)
  1377  	pt.Insert(decodeHex("83829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001"), v)
  1378  	pt.Insert(decodeHex("838181518152602001915080519060200190808383829060006004602084601f"), v)
  1379  	pt.Insert(decodeHex("838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080"), v)
  1380  	pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f3"), v)
  1381  	pt.Insert(decodeHex("829060006004602084601f0104600302600f01f150905090810190601f168015"), v)
  1382  	pt.Insert(decodeHex("829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182"), v)
  1383  	pt.Insert(decodeHex("8281038252838181518152602001915080519060200190808383829060006004"), v)
  1384  	pt.Insert(decodeHex("82565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284"), v)
  1385  	pt.Insert(decodeHex("8252838181518152602001915080519060200190808383829060006004602084"), v)
  1386  	pt.Insert(decodeHex("8252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f010460030260"), v)
  1387  	pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b50925050506040"), v)
  1388  	pt.Insert(decodeHex("81900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150"), v)
  1389  	pt.Insert(decodeHex("8181518152602001915080519060200190808383829060006004602084601f01"), v)
  1390  	pt.Insert(decodeHex("8181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051"), v)
  1391  	pt.Insert(decodeHex("8152602001915080519060200190808383829060006004602084601f01046003"), v)
  1392  	pt.Insert(decodeHex("8152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252"), v)
  1393  	pt.Insert(decodeHex("815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594"), v)
  1394  	pt.Insert(decodeHex("81518152602001915080519060200190808383829060006004602084601f0104"), v)
  1395  	pt.Insert(decodeHex("81518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191"), v)
  1396  	pt.Insert(decodeHex("8103825283818151815260200191508051906020019080838382906000600460"), v)
  1397  	pt.Insert(decodeHex("80910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004"), v)
  1398  	pt.Insert(decodeHex("808383829060006004602084601f0104600302600f01f150905090810190601f"), v)
  1399  	pt.Insert(decodeHex("808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060"), v)
  1400  	pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060"), v)
  1401  	pt.Insert(decodeHex("805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494"), v)
  1402  	pt.Insert(decodeHex("8051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f010460"), v)
  1403  	pt.Insert(decodeHex("80519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251908190036020"), v)
  1404  	pt.Insert(decodeHex("8051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550"), v)
  1405  	pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180"), v)
  1406  	pt.Insert(decodeHex("8035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550505050505060"), v)
  1407  	pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffff"), v)
  1408  	pt.Insert(decodeHex("6c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282"), v)
  1409  	pt.Insert(decodeHex("67ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093"), v)
  1410  	pt.Insert(decodeHex("6101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffff"), v)
  1411  	pt.Insert(decodeHex("61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084"), v)
  1412  	pt.Insert(decodeHex("60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f01"), v)
  1413  	pt.Insert(decodeHex("60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094"), v)
  1414  	pt.Insert(decodeHex("60405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060"), v)
  1415  	pt.Insert(decodeHex("60248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094955050505050"), v)
  1416  	pt.Insert(decodeHex("602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381"), v)
  1417  	pt.Insert(decodeHex("602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495505050"), v)
  1418  	pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b"), v)
  1419  	pt.Insert(decodeHex("602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051"), v)
  1420  	pt.Insert(decodeHex("602001915080519060200190808383829060006004602084601f010460030260"), v)
  1421  	pt.Insert(decodeHex("602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190"), v)
  1422  	pt.Insert(decodeHex("60200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090"), v)
  1423  	pt.Insert(decodeHex("60200190808383829060006004602084601f0104600302600f01f15090509081"), v)
  1424  	pt.Insert(decodeHex("60200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f3"), v)
  1425  	pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190808383829060"), v)
  1426  	pt.Insert(decodeHex("601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181"), v)
  1427  	pt.Insert(decodeHex("600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080"), v)
  1428  	pt.Insert(decodeHex("6004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252"), v)
  1429  	pt.Insert(decodeHex("600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001"), v)
  1430  	pt.Insert(decodeHex("6001836020036101000a031916815260200191505b5092505050604051809103"), v)
  1431  	pt.Insert(decodeHex("60010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382"), v)
  1432  	pt.Insert(decodeHex("60006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103"), v)
  1433  	pt.Insert(decodeHex("6000600050600060016000506000868152602001908152602001600020600050"), v)
  1434  	pt.Insert(decodeHex("5b61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590"), v)
  1435  	pt.Insert(decodeHex("5b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f"), v)
  1436  	pt.Insert(decodeHex("5b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750"), v)
  1437  	pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b5092505050"), v)
  1438  	pt.Insert(decodeHex("565b61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255"), v)
  1439  	pt.Insert(decodeHex("565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437"), v)
  1440  	pt.Insert(decodeHex("54906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ff"), v)
  1441  	pt.Insert(decodeHex("5467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490"), v)
  1442  	pt.Insert(decodeHex("5290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590"), v)
  1443  	pt.Insert(decodeHex("5283818151815260200191508051906020019080838382906000600460208460"), v)
  1444  	pt.Insert(decodeHex("52602001915080519060200190808383829060006004602084601f0104600302"), v)
  1445  	pt.Insert(decodeHex("52602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251"), v)
  1446  	pt.Insert(decodeHex("52519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f"), v)
  1447  	pt.Insert(decodeHex("5220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460"), v)
  1448  	pt.Insert(decodeHex("51918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f01046003"), v)
  1449  	pt.Insert(decodeHex("519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01"), v)
  1450  	pt.Insert(decodeHex("519060200190808383829060006004602084601f0104600302600f01f1509050"), v)
  1451  	pt.Insert(decodeHex("519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190819003602001"), v)
  1452  	pt.Insert(decodeHex("518152602001915080519060200190808383829060006004602084601f010460"), v)
  1453  	pt.Insert(decodeHex("518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182"), v)
  1454  	pt.Insert(decodeHex("5180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290600060"), v)
  1455  	pt.Insert(decodeHex("51602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094955050"), v)
  1456  	pt.Insert(decodeHex("516001836020036101000a031916815260200191505b50925050506040518091"), v)
  1457  	pt.Insert(decodeHex("509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020"), v)
  1458  	pt.Insert(decodeHex("5080519060200190808383829060006004602084601f0104600302600f01f150"), v)
  1459  	pt.Insert(decodeHex("5080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360"), v)
  1460  	pt.Insert(decodeHex("5060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290"), v)
  1461  	pt.Insert(decodeHex("505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382"), v)
  1462  	pt.Insert(decodeHex("50505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383"), v)
  1463  	pt.Insert(decodeHex("50019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190"), v)
  1464  	pt.Insert(decodeHex("408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104"), v)
  1465  	pt.Insert(decodeHex("408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495"), v)
  1466  	pt.Insert(decodeHex("405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000"), v)
  1467  	pt.Insert(decodeHex("248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495505050505050"), v)
  1468  	pt.Insert(decodeHex("2084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181"), v)
  1469  	pt.Insert(decodeHex("20805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044"), v)
  1470  	pt.Insert(decodeHex("2060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550505050"), v)
  1471  	pt.Insert(decodeHex("2002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180"), v)
  1472  	pt.Insert(decodeHex("2001915080519060200190808383829060006004602084601f0104600302600f"), v)
  1473  	pt.Insert(decodeHex("2001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081"), v)
  1474  	pt.Insert(decodeHex("200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090509081"), v)
  1475  	pt.Insert(decodeHex("200190808383829060006004602084601f0104600302600f01f1509050908101"), v)
  1476  	pt.Insert(decodeHex("200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b"), v)
  1477  	pt.Insert(decodeHex("1f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152"), v)
  1478  	pt.Insert(decodeHex("169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401"), v)
  1479  	pt.Insert(decodeHex("0f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051"), v)
  1480  	pt.Insert(decodeHex("0a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffff"), v)
  1481  	pt.Insert(decodeHex("0473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff"), v)
  1482  	pt.Insert(decodeHex("04602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283"), v)
  1483  	pt.Insert(decodeHex("04600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020"), v)
  1484  	pt.Insert(decodeHex("0390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290600060046020"), v)
  1485  	pt.Insert(decodeHex("0382528381815181526020019150805190602001908083838290600060046020"), v)
  1486  	pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b5092505050604051"), v)
  1487  	pt.Insert(decodeHex("0360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1509050"), v)
  1488  	pt.Insert(decodeHex("0302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191"), v)
  1489  	pt.Insert(decodeHex("02808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080"), v)
  1490  	pt.Insert(decodeHex("02600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150"), v)
  1491  	pt.Insert(decodeHex("01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190"), v)
  1492  	pt.Insert(decodeHex("019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080"), v)
  1493  	pt.Insert(decodeHex("01915080519060200190808383829060006004602084601f0104600302600f01"), v)
  1494  	pt.Insert(decodeHex("01915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251908190"), v)
  1495  	pt.Insert(decodeHex("0190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1509050908101"), v)
  1496  	pt.Insert(decodeHex("0190808383829060006004602084601f0104600302600f01f150905090810190"), v)
  1497  	pt.Insert(decodeHex("0190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60"), v)
  1498  	pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390"), v)
  1499  	pt.Insert(decodeHex("0182810382528381815181526020019150805190602001908083838290600060"), v)
  1500  	pt.Insert(decodeHex("0182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082"), v)
  1501  	pt.Insert(decodeHex("0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260"), v)
  1502  	pt.Insert(decodeHex("010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280"), v)
  1503  	pt.Insert(decodeHex("01000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffff"), v)
  1504  	pt.Insert(decodeHex("006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452"), v)
  1505  	pt.Insert(decodeHex("006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382"), v)
  1506  	pt.Insert(decodeHex("0060005060006001600050600086815260200190815260200160002060005060"), v)
  1507  	pt.Insert(decodeHex("000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffff"), v)
  1508  	mf2 := NewMatchFinder2(&pt)
  1509  	data := decodeHex("606060405236156100615760e060020a60003504630a936fe5811461006357806315853113146100d857806339bfc4a11461010b5780636939cd971461014357" +
  1510  		"8063c36948b5146101d3578063de6f24bb14610205578063fe1e3eca146102f5575b005b6040805160208181018352600080835233600160a060020a03168152" +
  1511  		"60018252839020805484518184028101840190955280855261036094928301828280156100ce57602002820191906000526020600020905b8160005054815260" +
  1512  		"200190600101908083116100b7575b5050505050905090565b6103aa600435602435600160205260008281526040902080548290811015610002575060009081" +
  1513  		"52602090200154905081565b6103aa600435600160a060020a03331660009081526020818152604080832084845290915290205467ffffffffffffffff165b91" +
  1514  		"9050565b6103bc60043560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184" +
  1515  		"900484028101840190955280855292939290918301828280156101c757820191906000526020600020905b8154815290600101906020018083116101aa578290" +
  1516  		"03601f168201915b5050505050905061013e565b61042a60043560243560006020818152928152604080822090935290815220805467ffffffffffffffff1690" +
  1517  		"60010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100619590359460449490939290920191819084018382" +
  1518  		"808284375094955050505050506000600082604051808280519060200190808383829060006004602084601f0104600302600f01f15090910182900390912083" +
  1519  		"5467ffffffffffffffff191642178455915160018054828255818652939550926020601f91909101047fb10e2d527612073b26eecdfd717e6a320cf44b4afac2" +
  1520  		"b0732d9fcbe2b7fa0cf690810192821561052a579182015b8281111561052a5782518260005055916020019190600101906102d7565b610061600435600160a0" +
  1521  		"60020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452828420919284926104" +
  1522  		"9592601f01919091048101905b80821115610522576000815560010161034c565b60405180806020018281038252838181518152602001915080519060200190" +
  1523  		"602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051" +
  1524  		"80806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561" +
  1525  		"041c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180" +
  1526  		"602001828103825283818154815260200191508054801561048557820191906000526020600020905b8154815290600101906020018083116104685782900360" +
  1527  		"1f168201915b5050935050505060405180910390f35b505050600090505b600160a060020a033316600090815260016020526040902054811015610526576040" +
  1528  		"6000208054839190839081101561000257600091825260209091200154141561051a576001600050600033600160a060020a0316815260200190815260200160" +
  1529  		"00206000508181548110156100025760009182526020822001555b60010161049d565b5090565b5050565b5061053692915061034c565b5050600160a060020a" +
  1530  		"038416600090815260208181526040808320858452825282208354815467ffffffffffffffff191667ffffffffffffffff919091161781556001848101805491" +
  1531  		"8301805483825581875295859020879694959194601f01919091048101929182156105d257600052602060002091601f016020900482015b828111156105d257" +
  1532  		"82548255916001019190600101906105b7565b506105de92915061034c565b50505050600160a060020a03841660009081526001602052604090208054839190" +
  1533  		"61000256")
  1534  	matches := mf2.FindLongestMatches(data)
  1535  	for _, m := range matches {
  1536  		fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
  1537  	}
  1538  	if len(matches) != 201 {
  1539  		t.Errorf("expected matches: %d, got %d", 201, len(matches))
  1540  	}
  1541  }
  1542  
  1543  func TestFindMatches8(t *testing.T) {
  1544  	var pt PatriciaTree
  1545  	v := []byte{1}
  1546  	mf2 := NewMatchFinder2(&pt)
  1547  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff"), v)
  1548  	pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffff"), v)
  1549  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff16"), v)
  1550  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff16"), v)
  1551  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff16"), v)
  1552  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16"), v)
  1553  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff16"), v)
  1554  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff16"), v)
  1555  	pt.Insert(decodeHex("ffffffffffffffffffffffffff16"), v)
  1556  	pt.Insert(decodeHex("ffffffffffffffffffffffff16"), v)
  1557  	pt.Insert(decodeHex("ffffffffffffffffffffff16"), v)
  1558  	pt.Insert(decodeHex("ffffffffffffffffffff16"), v)
  1559  	pt.Insert(decodeHex("60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff"), v)
  1560  	pt.Insert(decodeHex("009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16"), v)
  1561  	pt.Insert(decodeHex("ffffffffffffffffff16"), v)
  1562  	pt.Insert(decodeHex("ffffffffffffffff16"), v)
  1563  	pt.Insert(decodeHex("ffffffffffffff16"), v)
  1564  	pt.Insert(decodeHex("01000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000"), v)
  1565  	pt.Insert(decodeHex("81526020019081526020016000208190"), v)
  1566  	pt.Insert(decodeHex("81526020019081526020016000206000"), v)
  1567  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff"), v)
  1568  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffff"), v)
  1569  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff"), v)
  1570  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffff"), v)
  1571  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff"), v)
  1572  	pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff"), v)
  1573  	pt.Insert(decodeHex("ffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffff"), v)
  1574  	pt.Insert(decodeHex("ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffff"), v)
  1575  	pt.Insert(decodeHex("ffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffff"), v)
  1576  	pt.Insert(decodeHex("ffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffff"), v)
  1577  	pt.Insert(decodeHex("ffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff"), v)
  1578  	pt.Insert(decodeHex("ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16"), v)
  1579  	pt.Insert(decodeHex("906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffff"), v)
  1580  	pt.Insert(decodeHex("9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673"), v)
  1581  	pt.Insert(decodeHex("900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffff"), v)
  1582  	pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffff"), v)
  1583  	pt.Insert(decodeHex("6101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffff"), v)
  1584  	pt.Insert(decodeHex("54906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ff"), v)
  1585  	pt.Insert(decodeHex("0a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffff"), v)
  1586  	pt.Insert(decodeHex("0473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff"), v)
  1587  	pt.Insert(decodeHex("01000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffff"), v)
  1588  	pt.Insert(decodeHex("000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffff"), v)
  1589  	pt.Insert(decodeHex("815260016020526040"), v)
  1590  	pt.Insert(decodeHex("526020019081526020016000208190"), v)
  1591  	data := decodeHex("60606040523615610103576000357c01000000000000000000000000000000000000000000000000000000009004806311bc5478146103bc578063353d90ec14" +
  1592  		"6103dd57806343743d93146103fe5780634faa2d541461041f57806350b44712146104405780635c0ecfad1461047d5780635d80c2781461049e578063602a6c" +
  1593  		"a1146104bf578063806b984f146104d85780638b7bcc86146104f9578063a2fb11751461051a578063a457c2ae14610541578063a59d698614610562578063a5" +
  1594  		"e01f371461056f578063f000c30914610590578063f18d20be146105b1578063f56f48f2146105be578063f6f0b074146105df578063f961ec87146106005761" +
  1595  		"0103565b6103ba5b600060006801639e49bba16280003410151561016e57670e398811bec680003404915081503373ffffffffffffffffffffffffffffffffff" +
  1596  		"ffffff166000670e398811bec680003406604051809050600060405180830381858888f1935050505050610281565b6791b77e5e5d9a0000341015156101d057" +
  1597  		"670e92596fd62900003404915081503373ffffffffffffffffffffffffffffffffffffffff166000670e92596fd6290000340660405180905060006040518083" +
  1598  		"0381858888f1935050505050610280565b674c53ecdc18a600003410151561023257670f43fc2c04ee00003404915081503373ffffffffffffffffffffffffff" +
  1599  		"ffffffffffffff166000670f43fc2c04ee00003406604051809050600060405180830381858888f193505050505061027f565b670ff59ee833b3000034049150" +
  1600  		"81503373ffffffffffffffffffffffffffffffffffffffff166000670ff59ee833b300003406604051809050600060405180830381858888f19350505050505b" +
  1601  		"5b5b6007600050543334604051808481526020018373ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140182" +
  1602  		"8152602001935050505060405180910390206007600050819055506103e88260036000505401046103e86003600050540414151561031b574360066000508190" +
  1603  		"5550600760005054600a6000508190555042600b600050819055505b600060010260016006600050540140141515610345576001600660005054014060096000" +
  1604  		"50819055505b600190505b818160ff161115156103b5573360016000506000600360008181505480929190600101919050558152602001908152602001600020" +
  1605  		"60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b600181019050805061034a565b5b5050565b005b6103c7" +
  1606  		"600450610af4565b6040518082815260200191505060405180910390f35b6103e8600450610b5c565b6040518082815260200191505060405180910390f35b61" +
  1607  		"0409600450610b00565b6040518082815260200191505060405180910390f35b61042a600450610a65565b6040518082815260200191505060405180910390f3" +
  1608  		"5b610451600480359060200150610b09565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104" +
  1609  		"88600450610ad5565b6040518082815260200191505060405180910390f35b6104a9600450610ade565b6040518082815260200191505060405180910390f35b" +
  1610  		"6104d6600480359060200180359060200150610627565b005b6104e3600450610aba565b6040518082815260200191505060405180910390f35b610504600450" +
  1611  		"610b65565b6040518082815260200191505060405180910390f35b61052b600480359060200150610b41565b6040518082815260200191505060405180910390f" +
  1612  		"35b61054c600450610ac3565b6040518082815260200191505060405180910390f35b61056d600450610838565b005b61057a600450610b6e565b604051808281" +
  1613  		"5260200191505060405180910390f35b61059b600450610acc565b6040518082815260200191505060405180910390f35b6105bc60045061094e565b005b6105c" +
  1614  		"9600450610aed565b6040518082815260200191505060405180910390f35b6105ea600450610ae7565b6040518082815260200191505060405180910390f35b61" +
  1615  		"0611600480359060200150610a96565b6040518082815260200191505060405180910390f35b60006000600060009054906101000a900473fffffffffffffffff" +
  1616  		"fffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561068757" +
  1617  		"610832565b600860005054846040518082815260200191505060405180910390201415806106b857506000600102600860005054145b156106c257610832565b6" +
  1618  		"103e860036000505410806106e457506103e860036000505403600560005054115b156106ee57610832565b83600a600050546040518083815260200182815260" +
  1619  		"200192505050604051809103902091506103e86009600050548318600190040660056000505401905060016000506000828152602001908152602001600020600" +
  1620  		"09054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000670de0b6b3a7640000" +
  1621  		"6103e802604051809050600060405180830381858888f19350505050507f909c57d5c6ac08245cf2a6de3900e2b868513fa59099b92b27d8db823d92df9c816040" +
  1622  		"518082815260200191505060405180910390a180600260005060006004600081815054809291906001019190505581526020019081526020016000206000508190" +
  1623  		"55506103e860056000828282505401925050819055506000600b60005081905550826008600050819055505b50505050565b600060006000600b60005054141561" +
  1624  		"084f5761094a565b62015180600b60005054420310156108665761094a565b60006001026008600050819055506000915060056000505490505b60036000505481" +
  1625  		"1015610916573373ffffffffffffffffffffffffffffffffffffffff166001600050600083815260200190815260200160002060009054906101000a900473ffff" +
  1626  		"ffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561090857670de0b6b3a76400008201915081505b5b80" +
  1627  		"80600101915050610881565b3373ffffffffffffffffffffffffffffffffffffffff16600083604051809050600060405180830381858888f19350505050505b50" +
  1628  		"50565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ff" +
  1629  		"ffffffffffffffffffffffffffffffffffffff161415156109ac57610a62565b670de0b6b3a7640000600560005054600360005054030290507f909c57d5c6ac08" +
  1630  		"245cf2a6de3900e2b868513fa59099b92b27d8db823d92df9c813073ffffffffffffffffffffffffffffffffffffffff1631036040518082815260200191505060" +
  1631  		"405180910390a13373ffffffffffffffffffffffffffffffffffffffff166000823073ffffffffffffffffffffffffffffffffffffffff16310360405180905060" +
  1632  		"0060405180830381858888f19350505050505b50565b60006000600b600050541415610a83576105399050610a9356610a92565b600b6000505442039050610a93" +
  1633  		"565b5b90565b6000816040518082815260200191505060405180910390209050610ab5565b919050565b60066000505481565b60076000505481565b6008600050" +
  1634  		"5481565b60096000505481565b600a6000505481565b6103e881565b6201518081565b670de0b6b3a764000081565b600b6000505481565b600160005060205280" +
  1635  		"600052604060002060009150909054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260005060205280600052604060002060" +
  1636  		"00915090505481565b60036000505481565b60046000505481565b6005600050548156")
  1637  	matches := mf2.FindLongestMatches(data)
  1638  	for _, m := range matches {
  1639  		fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
  1640  	}
  1641  	if len(matches) != 144 {
  1642  		t.Errorf("expected matches: %d, got %d", 144, len(matches))
  1643  	}
  1644  }