diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-11-05 12:56:51 -0800 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-11-05 12:56:51 -0800 |
commit | 300d4816804c8ceb4a4601a49ec3ec479c1951b5 (patch) | |
tree | 7164fe3883806d0d464103fd37dcebbdd2855a1e /perllib | |
download | nasm-300d4816804c8ceb4a4601a49ec3ec479c1951b5.tar.gz nasm-300d4816804c8ceb4a4601a49ec3ec479c1951b5.tar.bz2 nasm-300d4816804c8ceb4a4601a49ec3ec479c1951b5.zip |
Imported Upstream version 2.09.08upstream/2.09.08
Diffstat (limited to 'perllib')
-rw-r--r-- | perllib/README | 5 | ||||
-rw-r--r-- | perllib/crc64.ph | 158 | ||||
-rwxr-xr-x | perllib/gensv.pl | 34 | ||||
-rw-r--r-- | perllib/phash.ph | 226 | ||||
-rw-r--r-- | perllib/random_sv_vectors.ph | 67 |
5 files changed, 490 insertions, 0 deletions
diff --git a/perllib/README b/perllib/README new file mode 100644 index 0000000..8f067ec --- /dev/null +++ b/perllib/README @@ -0,0 +1,5 @@ +This directory contains the following Perl modules from CPAN: + +Graph-0.84 + +See the .pod documentation for copyright and license terms. diff --git a/perllib/crc64.ph b/perllib/crc64.ph new file mode 100644 index 0000000..30a4775 --- /dev/null +++ b/perllib/crc64.ph @@ -0,0 +1,158 @@ +# -*- perl -*- +# +# Pure Perl implementation of the same CRC64 implementation used +# elsewhere in NASM. +# +# Note: Perl may have 32- or 64-bit integers; we need to handle both +# without overflowing into floating point (yuck), so handle them as +# pairs of 32-bit numbers. Ordering is BIGENDIAN. +# + +@crc64_tab = ( + [0x00000000, 0x00000000], [0x7ad870c8, 0x30358979], + [0xf5b0e190, 0x606b12f2], [0x8f689158, 0x505e9b8b], + [0xc038e573, 0x9841b68f], [0xbae095bb, 0xa8743ff6], + [0x358804e3, 0xf82aa47d], [0x4f50742b, 0xc81f2d04], + [0xab28ecb4, 0x6814fe75], [0xd1f09c7c, 0x5821770c], + [0x5e980d24, 0x087fec87], [0x24407dec, 0x384a65fe], + [0x6b1009c7, 0xf05548fa], [0x11c8790f, 0xc060c183], + [0x9ea0e857, 0x903e5a08], [0xe478989f, 0xa00bd371], + [0x7d08ff3b, 0x88be6f81], [0x07d08ff3, 0xb88be6f8], + [0x88b81eab, 0xe8d57d73], [0xf2606e63, 0xd8e0f40a], + [0xbd301a48, 0x10ffd90e], [0xc7e86a80, 0x20ca5077], + [0x4880fbd8, 0x7094cbfc], [0x32588b10, 0x40a14285], + [0xd620138f, 0xe0aa91f4], [0xacf86347, 0xd09f188d], + [0x2390f21f, 0x80c18306], [0x594882d7, 0xb0f40a7f], + [0x1618f6fc, 0x78eb277b], [0x6cc08634, 0x48deae02], + [0xe3a8176c, 0x18803589], [0x997067a4, 0x28b5bcf0], + [0xfa11fe77, 0x117cdf02], [0x80c98ebf, 0x2149567b], + [0x0fa11fe7, 0x7117cdf0], [0x75796f2f, 0x41224489], + [0x3a291b04, 0x893d698d], [0x40f16bcc, 0xb908e0f4], + [0xcf99fa94, 0xe9567b7f], [0xb5418a5c, 0xd963f206], + [0x513912c3, 0x79682177], [0x2be1620b, 0x495da80e], + [0xa489f353, 0x19033385], [0xde51839b, 0x2936bafc], + [0x9101f7b0, 0xe12997f8], [0xebd98778, 0xd11c1e81], + [0x64b11620, 0x8142850a], [0x1e6966e8, 0xb1770c73], + [0x8719014c, 0x99c2b083], [0xfdc17184, 0xa9f739fa], + [0x72a9e0dc, 0xf9a9a271], [0x08719014, 0xc99c2b08], + [0x4721e43f, 0x0183060c], [0x3df994f7, 0x31b68f75], + [0xb29105af, 0x61e814fe], [0xc8497567, 0x51dd9d87], + [0x2c31edf8, 0xf1d64ef6], [0x56e99d30, 0xc1e3c78f], + [0xd9810c68, 0x91bd5c04], [0xa3597ca0, 0xa188d57d], + [0xec09088b, 0x6997f879], [0x96d17843, 0x59a27100], + [0x19b9e91b, 0x09fcea8b], [0x636199d3, 0x39c963f2], + [0xdf7adabd, 0x7a6e2d6f], [0xa5a2aa75, 0x4a5ba416], + [0x2aca3b2d, 0x1a053f9d], [0x50124be5, 0x2a30b6e4], + [0x1f423fce, 0xe22f9be0], [0x659a4f06, 0xd21a1299], + [0xeaf2de5e, 0x82448912], [0x902aae96, 0xb271006b], + [0x74523609, 0x127ad31a], [0x0e8a46c1, 0x224f5a63], + [0x81e2d799, 0x7211c1e8], [0xfb3aa751, 0x42244891], + [0xb46ad37a, 0x8a3b6595], [0xceb2a3b2, 0xba0eecec], + [0x41da32ea, 0xea507767], [0x3b024222, 0xda65fe1e], + [0xa2722586, 0xf2d042ee], [0xd8aa554e, 0xc2e5cb97], + [0x57c2c416, 0x92bb501c], [0x2d1ab4de, 0xa28ed965], + [0x624ac0f5, 0x6a91f461], [0x1892b03d, 0x5aa47d18], + [0x97fa2165, 0x0afae693], [0xed2251ad, 0x3acf6fea], + [0x095ac932, 0x9ac4bc9b], [0x7382b9fa, 0xaaf135e2], + [0xfcea28a2, 0xfaafae69], [0x8632586a, 0xca9a2710], + [0xc9622c41, 0x02850a14], [0xb3ba5c89, 0x32b0836d], + [0x3cd2cdd1, 0x62ee18e6], [0x460abd19, 0x52db919f], + [0x256b24ca, 0x6b12f26d], [0x5fb35402, 0x5b277b14], + [0xd0dbc55a, 0x0b79e09f], [0xaa03b592, 0x3b4c69e6], + [0xe553c1b9, 0xf35344e2], [0x9f8bb171, 0xc366cd9b], + [0x10e32029, 0x93385610], [0x6a3b50e1, 0xa30ddf69], + [0x8e43c87e, 0x03060c18], [0xf49bb8b6, 0x33338561], + [0x7bf329ee, 0x636d1eea], [0x012b5926, 0x53589793], + [0x4e7b2d0d, 0x9b47ba97], [0x34a35dc5, 0xab7233ee], + [0xbbcbcc9d, 0xfb2ca865], [0xc113bc55, 0xcb19211c], + [0x5863dbf1, 0xe3ac9dec], [0x22bbab39, 0xd3991495], + [0xadd33a61, 0x83c78f1e], [0xd70b4aa9, 0xb3f20667], + [0x985b3e82, 0x7bed2b63], [0xe2834e4a, 0x4bd8a21a], + [0x6debdf12, 0x1b863991], [0x1733afda, 0x2bb3b0e8], + [0xf34b3745, 0x8bb86399], [0x8993478d, 0xbb8deae0], + [0x06fbd6d5, 0xebd3716b], [0x7c23a61d, 0xdbe6f812], + [0x3373d236, 0x13f9d516], [0x49aba2fe, 0x23cc5c6f], + [0xc6c333a6, 0x7392c7e4], [0xbc1b436e, 0x43a74e9d], + [0x95ac9329, 0xac4bc9b5], [0xef74e3e1, 0x9c7e40cc], + [0x601c72b9, 0xcc20db47], [0x1ac40271, 0xfc15523e], + [0x5594765a, 0x340a7f3a], [0x2f4c0692, 0x043ff643], + [0xa02497ca, 0x54616dc8], [0xdafce702, 0x6454e4b1], + [0x3e847f9d, 0xc45f37c0], [0x445c0f55, 0xf46abeb9], + [0xcb349e0d, 0xa4342532], [0xb1eceec5, 0x9401ac4b], + [0xfebc9aee, 0x5c1e814f], [0x8464ea26, 0x6c2b0836], + [0x0b0c7b7e, 0x3c7593bd], [0x71d40bb6, 0x0c401ac4], + [0xe8a46c12, 0x24f5a634], [0x927c1cda, 0x14c02f4d], + [0x1d148d82, 0x449eb4c6], [0x67ccfd4a, 0x74ab3dbf], + [0x289c8961, 0xbcb410bb], [0x5244f9a9, 0x8c8199c2], + [0xdd2c68f1, 0xdcdf0249], [0xa7f41839, 0xecea8b30], + [0x438c80a6, 0x4ce15841], [0x3954f06e, 0x7cd4d138], + [0xb63c6136, 0x2c8a4ab3], [0xcce411fe, 0x1cbfc3ca], + [0x83b465d5, 0xd4a0eece], [0xf96c151d, 0xe49567b7], + [0x76048445, 0xb4cbfc3c], [0x0cdcf48d, 0x84fe7545], + [0x6fbd6d5e, 0xbd3716b7], [0x15651d96, 0x8d029fce], + [0x9a0d8cce, 0xdd5c0445], [0xe0d5fc06, 0xed698d3c], + [0xaf85882d, 0x2576a038], [0xd55df8e5, 0x15432941], + [0x5a3569bd, 0x451db2ca], [0x20ed1975, 0x75283bb3], + [0xc49581ea, 0xd523e8c2], [0xbe4df122, 0xe51661bb], + [0x3125607a, 0xb548fa30], [0x4bfd10b2, 0x857d7349], + [0x04ad6499, 0x4d625e4d], [0x7e751451, 0x7d57d734], + [0xf11d8509, 0x2d094cbf], [0x8bc5f5c1, 0x1d3cc5c6], + [0x12b59265, 0x35897936], [0x686de2ad, 0x05bcf04f], + [0xe70573f5, 0x55e26bc4], [0x9ddd033d, 0x65d7e2bd], + [0xd28d7716, 0xadc8cfb9], [0xa85507de, 0x9dfd46c0], + [0x273d9686, 0xcda3dd4b], [0x5de5e64e, 0xfd965432], + [0xb99d7ed1, 0x5d9d8743], [0xc3450e19, 0x6da80e3a], + [0x4c2d9f41, 0x3df695b1], [0x36f5ef89, 0x0dc31cc8], + [0x79a59ba2, 0xc5dc31cc], [0x037deb6a, 0xf5e9b8b5], + [0x8c157a32, 0xa5b7233e], [0xf6cd0afa, 0x9582aa47], + [0x4ad64994, 0xd625e4da], [0x300e395c, 0xe6106da3], + [0xbf66a804, 0xb64ef628], [0xc5bed8cc, 0x867b7f51], + [0x8aeeace7, 0x4e645255], [0xf036dc2f, 0x7e51db2c], + [0x7f5e4d77, 0x2e0f40a7], [0x05863dbf, 0x1e3ac9de], + [0xe1fea520, 0xbe311aaf], [0x9b26d5e8, 0x8e0493d6], + [0x144e44b0, 0xde5a085d], [0x6e963478, 0xee6f8124], + [0x21c64053, 0x2670ac20], [0x5b1e309b, 0x16452559], + [0xd476a1c3, 0x461bbed2], [0xaeaed10b, 0x762e37ab], + [0x37deb6af, 0x5e9b8b5b], [0x4d06c667, 0x6eae0222], + [0xc26e573f, 0x3ef099a9], [0xb8b627f7, 0x0ec510d0], + [0xf7e653dc, 0xc6da3dd4], [0x8d3e2314, 0xf6efb4ad], + [0x0256b24c, 0xa6b12f26], [0x788ec284, 0x9684a65f], + [0x9cf65a1b, 0x368f752e], [0xe62e2ad3, 0x06bafc57], + [0x6946bb8b, 0x56e467dc], [0x139ecb43, 0x66d1eea5], + [0x5ccebf68, 0xaecec3a1], [0x2616cfa0, 0x9efb4ad8], + [0xa97e5ef8, 0xcea5d153], [0xd3a62e30, 0xfe90582a], + [0xb0c7b7e3, 0xc7593bd8], [0xca1fc72b, 0xf76cb2a1], + [0x45775673, 0xa732292a], [0x3faf26bb, 0x9707a053], + [0x70ff5290, 0x5f188d57], [0x0a272258, 0x6f2d042e], + [0x854fb300, 0x3f739fa5], [0xff97c3c8, 0x0f4616dc], + [0x1bef5b57, 0xaf4dc5ad], [0x61372b9f, 0x9f784cd4], + [0xee5fbac7, 0xcf26d75f], [0x9487ca0f, 0xff135e26], + [0xdbd7be24, 0x370c7322], [0xa10fceec, 0x0739fa5b], + [0x2e675fb4, 0x576761d0], [0x54bf2f7c, 0x6752e8a9], + [0xcdcf48d8, 0x4fe75459], [0xb7173810, 0x7fd2dd20], + [0x387fa948, 0x2f8c46ab], [0x42a7d980, 0x1fb9cfd2], + [0x0df7adab, 0xd7a6e2d6], [0x772fdd63, 0xe7936baf], + [0xf8474c3b, 0xb7cdf024], [0x829f3cf3, 0x87f8795d], + [0x66e7a46c, 0x27f3aa2c], [0x1c3fd4a4, 0x17c62355], + [0x935745fc, 0x4798b8de], [0xe98f3534, 0x77ad31a7], + [0xa6df411f, 0xbfb21ca3], [0xdc0731d7, 0x8f8795da], + [0x536fa08f, 0xdfd90e51], [0x29b7d047, 0xefec8728] + ); + +sub crc64($$) { + my ($cv, $str) = @_; + my $c; + my @cc = @$cv; + $cc[0] %= 4294967296; + $cc[1] %= 4294967296; + + foreach $c (unpack("C*", $str)) { + my @ct = @{$crc64_tab[($cc[1] & 0xff) ^ $c]}; + + $cc[1] = $ct[1] ^ + ((($cc[1] & 0xffffff00) >> 8) | (($cc[0] & 0xff) << 24)); + $cc[0] = $ct[0] ^ (($cc[0] & 0xffffff00) >> 8); + } + + return @cc; +} diff --git a/perllib/gensv.pl b/perllib/gensv.pl new file mode 100755 index 0000000..b80ccbe --- /dev/null +++ b/perllib/gensv.pl @@ -0,0 +1,34 @@ +#!/usr/bin/perl +# +# Generate a list of rotation vectors so we always use the same set. +# This needs to be run on a platform with /dev/urandom. +# + +($n) = @ARGV; + +sysopen(UR, '/dev/urandom', O_RDONLY) or die; + +$maxlen = 78; + +print "\@random_sv_vectors = (\n"; +$outl = ' '; + +for ($i = 0; $i < $n; $i++) { + + die if (sysread(UR, $x8, 8) != 8); + @n = unpack("V*", $x8); + + $xl = sprintf(" [0x%08x, 0x%08x]%s", + $n[0], $n[1], + ($i == $n-1) ? '' : ','); + if (length($outl.$xl) > $maxlen) { + print $outl, "\n"; + $outl = ' '; + } + $outl .= $xl; +} +close(UR); + +print $outl, "\n"; +print ");\n"; +print "1;\n"; diff --git a/perllib/phash.ph b/perllib/phash.ph new file mode 100644 index 0000000..6b31f0a --- /dev/null +++ b/perllib/phash.ph @@ -0,0 +1,226 @@ +# -*- perl -*- +# +# Perfect Minimal Hash Generator written in Perl, which produces +# C output. +# + +require 'random_sv_vectors.ph'; +require 'crc64.ph'; + +# +# Compute the prehash for a key +# +# prehash(key, sv, N) +# +sub prehash($$$) { + my($key, $n, $sv) = @_; + my @c = crc64($sv, $key); + + # Create a bipartite graph... + $k1 = (($c[1] & ($n-1)) << 1) + 0; # low word + $k2 = (($c[0] & ($n-1)) << 1) + 1; # high word + + return ($k1, $k2); +} + +# +# Walk the assignment graph, return true on success +# +sub walk_graph($$$$) { + my($nodeval,$nodeneigh,$n,$v) = @_; + my $nx; + + # print STDERR "Vertex $n value $v\n"; + $$nodeval[$n] = $v; + + foreach $nx (@{$$nodeneigh[$n]}) { + # $nx -> [neigh, hash] + my ($o, $e) = @$nx; + + # print STDERR "Edge $n,$o value $e: "; + my $ov; + if (defined($ov = $$nodeval[$o])) { + if ($v+$ov != $e) { + # Cyclic graph with collision + # print STDERR "error, should be ", $v+$ov, "\n"; + return 0; + } else { + # print STDERR "ok\n"; + } + } else { + return 0 unless (walk_graph($nodeval, $nodeneigh, $o, $e-$v)); + } + } + return 1; +} + +# +# Generate the function assuming a given N. +# +# gen_hash_n(N, sv, \%data, run) +# +sub gen_hash_n($$$$) { + my($n, $sv, $href, $run) = @_; + my @keys = keys(%{$href}); + my $i, $sv; + my $gr; + my $k, $v; + my $gsize = 2*$n; + my @nodeval; + my @nodeneigh; + my %edges; + + for ($i = 0; $i < $gsize; $i++) { + $nodeneigh[$i] = []; + } + + %edges = (); + foreach $k (@keys) { + my ($pf1, $pf2) = prehash($k, $n, $sv); + ($pf1,$pf2) = ($pf2,$pf1) if ($pf1 > $pf2); # Canonicalize order + + my $pf = "$pf1,$pf2"; + my $e = ${$href}{$k}; + my $xkey; + + if (defined($xkey = $edges{$pf})) { + next if ($e == ${$href}{$xkey}); # Duplicate hash, safe to ignore + if (defined($run)) { + print STDERR "$run: Collision: $pf: $k with $xkey\n"; + } + return; + } + + # print STDERR "Edge $pf value $e from $k\n"; + + $edges{$pf} = $k; + push(@{$nodeneigh[$pf1]}, [$pf2, $e]); + push(@{$nodeneigh[$pf2]}, [$pf1, $e]); + } + + # Now we need to assign values to each vertex, so that for each + # edge, the sum of the values for the two vertices give the value + # for the edge (which is our hash index.) If we find an impossible + # sitation, the graph was cyclic. + @nodeval = (undef) x $gsize; + + for ($i = 0; $i < $gsize; $i++) { + if (scalar(@{$nodeneigh[$i]})) { + # This vertex has neighbors (is used) + if (!defined($nodeval[$i])) { + # First vertex in a cluster + unless (walk_graph(\@nodeval, \@nodeneigh, $i, 0)) { + if (defined($run)) { + print STDERR "$run: Graph is cyclic\n"; + } + return; + } + } + } + } + + # for ($i = 0; $i < $n; $i++) { + # print STDERR "Vertex ", $i, ": ", $g[$i], "\n"; + # } + + if (defined($run)) { + printf STDERR "$run: Done: n = $n, sv = [0x%08x, 0x%08x]\n", + $$sv[0], $$sv[1]; + } + + return ($n, $sv, \@nodeval); +} + +# +# Driver for generating the function +# +# gen_perfect_hash(\%data) +# +sub gen_perfect_hash($) { + my($href) = @_; + my @keys = keys(%{$href}); + my @hashinfo; + my $n, $i, $j, $sv, $maxj; + my $run = 1; + + # Minimal power of 2 value for N with enough wiggle room. + # The scaling constant must be larger than 0.5 in order for the + # algorithm to ever terminate. + my $room = scalar(@keys)*0.8; + $n = 1; + while ($n < $room) { + $n <<= 1; + } + + # Number of times to try... + $maxj = scalar @random_sv_vectors; + + for ($i = 0; $i < 4; $i++) { + printf STDERR "%d vectors, trying n = %d...\n", + scalar @keys, $n; + for ($j = 0; $j < $maxj; $j++) { + $sv = $random_sv_vectors[$j]; + @hashinfo = gen_hash_n($n, $sv, $href, $run++); + return @hashinfo if (defined(@hashinfo)); + } + $n <<= 1; + } + + return; +} + +# +# Read input file +# +sub read_input() { + my $key,$val; + my %out; + my $x = 0; + + while (defined($l = <STDIN>)) { + chomp $l; + $l =~ s/\s*(\#.*|)$//; + + next if ($l eq ''); + + if ($l =~ /^([^=]+)\=([^=]+)$/) { + $out{$1} = $2; + $x = $2; + } else { + $out{$l} = $x; + } + $x++; + } + + return %out; +} + +# +# Verify that the hash table is actually correct... +# +sub verify_hash_table($$) +{ + my ($href, $hashinfo) = @_; + my ($n, $sv, $g) = @{$hashinfo}; + my $k; + my $err = 0; + + foreach $k (keys(%$href)) { + my ($pf1, $pf2) = prehash($k, $n, $sv); + my $g1 = ${$g}[$pf1]; + my $g2 = ${$g}[$pf2]; + + if ($g1+$g2 != ${$href}{$k}) { + printf STDERR "%s(%d,%d): %d+%d = %d != %d\n", + $k, $pf1, $pf2, $g1, $g2, $g1+$g2, ${$href}{$k}; + $err = 1; + } else { + # printf STDERR "%s: %d+%d = %d ok\n", + # $k, $g1, $g2, $g1+$g2; + } + } + + die "$0: hash validation error\n" if ($err); +} + +1; diff --git a/perllib/random_sv_vectors.ph b/perllib/random_sv_vectors.ph new file mode 100644 index 0000000..db2dc6e --- /dev/null +++ b/perllib/random_sv_vectors.ph @@ -0,0 +1,67 @@ +@random_sv_vectors = ( + [0x076259c3, 0xe291c26c], [0xaee7ac5c, 0xcabdec91], + [0x5d3862fb, 0x2e8a3060], [0x6fb3635c, 0x4783593a], + [0x13f0eafb, 0x407e486a], [0x7436afdd, 0xd04c4829], + [0xace2d0e4, 0x80575791], [0x2dd9a392, 0xdc1e869e], + [0x199c3e38, 0x026a9d67], [0x9f911c85, 0x3a489c87], + [0x9ac31028, 0x0b6e14b2], [0x2ccfbcf9, 0x3f9f2308], + [0x2e0210fb, 0x392f380f], [0x14ab403a, 0x81a11065], + [0xd496f63c, 0x53196b13], [0x48a34d7f, 0x2ffc6036], + [0x34ea8e9d, 0xcd1ed098], [0x2da1a3f2, 0x3d6c23f2], + [0xca7374da, 0x06054f89], [0xc909a0bb, 0x31d6c0d2], + [0x87454496, 0x15b360d7], [0x9eebbd12, 0x89532131], + [0x1119c65b, 0xd9e49705], [0x60c3be0b, 0xd6cc7c8a], + [0x117723cd, 0x40af090f], [0xfc284f51, 0x3dcf4c06], + [0xb41fcda4, 0xec03644c], [0xd99e1ea7, 0x84eaf76d], + [0x534b956a, 0x06d3fb8d], [0x2da4bb09, 0x078092eb], + [0x6a5be463, 0xbfa51a88], [0xc4e8be95, 0xe7eec27c], + [0x15a1fbb9, 0xfadc08cd], [0x0bcfab08, 0xbccade0f], + [0x629f1f6c, 0x90ccede7], [0x5c2b26aa, 0x1f0b1fce], + [0xdfe0e3fd, 0xbd7c3cfb], [0xa1628ca9, 0x90a05686], + [0xbf0267f2, 0xd2964139], [0x8009a9b9, 0xd2195918], + [0xfcc7b5f8, 0xc108c643], [0xf447d4b0, 0x71953863], + [0x95d091ed, 0xdbe01948], [0x81dec325, 0x2bfecda2], + [0x2ed2acaa, 0x7eeaa0d0], [0xb7b0a20e, 0x8bf5c01b], + [0x75eb3917, 0xfd2f758f], [0xb33a5b49, 0x8a8cedf6], + [0x3aaf2757, 0x69b319a9], [0x32cfa41b, 0xeba36f19], + [0xf54209dd, 0x941f3a08], [0x232703bb, 0x786a6f84], + [0x4937b242, 0xc9f07398], [0x74dc5d39, 0x550a58e8], + [0x6c9aebdc, 0x8fda5069], [0x5ae6d62a, 0x05cd24a3], + [0x8111e50a, 0xc1c6d19b], [0xb980a92b, 0x448b4d1f], + [0x568cf58a, 0x8bcb93ca], [0xfe96002f, 0x410cd2f1], + [0xaf511e45, 0x99e4872f], [0x822c20bc, 0x3db49ddd], + [0x184fec4e, 0xbb82ec52], [0x30ca5326, 0xf3180297], + [0x97962aa4, 0x7d4bc6d4], [0x9199a315, 0x8e9f18c6], + [0xead69a7e, 0x3262a683], [0xe261ec00, 0x81edc47a], + [0x06080c0e, 0x6d18fa9f], [0x1771ec43, 0x6747ed66], + [0xe71fe587, 0xe81ad0f3], [0xf083e80c, 0x0898bcd8], + [0x30328c5a, 0x2efb4ee7], [0xd04fa5d7, 0xec9c9f18], + [0x87820480, 0x48932224], [0xb1f18815, 0x1b27e3e3], + [0x79aa440c, 0xdf17a8fc], [0x8a83d404, 0x10fdec8c], + [0x7d4dfe60, 0x573561ee], [0x60315c7d, 0xa0692af6], + [0xb3ca4d52, 0x89ca832f], [0x9ebc5c79, 0xa84a28fc], + [0xdfa76008, 0x7772cf7c], [0xb0e3a15f, 0xbdc35aee], + [0x6e252b03, 0x32b2107d], [0x20dcc2a3, 0x21987229], + [0x848e3ad8, 0xe692a0c6], [0xdd07fa50, 0x0b64e1ae], + [0xc4072bc2, 0x2f120bba], [0xdb3af26e, 0xacab0c48], + [0xd7d4b59a, 0xcf72a7a7], [0x4628de45, 0x4dfb2750], + [0x7519211f, 0x4798b536], [0x19984af3, 0xffd2aa19], + [0x1372d9c0, 0x7512153a], [0x295d19da, 0x497416e5], + [0x70932c73, 0x8a9bf591], [0xa0960860, 0xfaa7dc61], + [0xd425f548, 0x43aeda4d], [0xaa2573c7, 0x01a2553d], + [0x988e71d7, 0xd3c004a4], [0x3da87545, 0x2197af10], + [0x2f89e592, 0xa686e2fc], [0x7b88018a, 0xae66d575], + [0x93215591, 0xed69e6ea], [0x4fcacc4a, 0x4d2aba97], + [0xbedb923b, 0x500b2f1a], [0x0b6d8aa0, 0x232511b0], + [0x282fb3ee, 0x23695de0], [0x0c455dfe, 0x820cca3f], + [0xe893868c, 0x87f698f6], [0xb6428730, 0x56e576ce], + [0xf3843ee7, 0xba79bc28], [0xa1c9ca45, 0x30c479c1], + [0xbfc244c2, 0xa9af65f0], [0x6eeb88eb, 0x62b4479c], + [0xcc328fe5, 0x60f5c9bf], [0x31aa2c21, 0xc55575fb], + [0x9429492d, 0x8e80612a], [0xb12fe59e, 0xf0e1e97b], + [0xc2501dad, 0x4a9f4bbf], [0x65ae8366, 0x3e8b0983], + [0xd5fc062a, 0xba74f808], [0x7398cc0a, 0x39a6a269], + [0x5581dd60, 0xff79d28c], [0xea5e52b3, 0x9be66c71], + [0x8f6e02a4, 0xe27318b5], [0xe8bceb99, 0xa48a7f2c], +); +1; |