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 }