chacha8rand: new blog post

Change-Id: I751e1cb29f1053665a275fed95dfe3f47798c45c
Reviewed-on: https://go-review.googlesource.com/c/website/+/582795
Auto-Submit: Russ Cox <rsc@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/_content/blog/chacha8rand.md b/_content/blog/chacha8rand.md
new file mode 100644
index 0000000..563ce75
--- /dev/null
+++ b/_content/blog/chacha8rand.md
@@ -0,0 +1,492 @@
+---
+title: "Secure Randomness in Go 1.22"
+date: 2024-05-02
+by:
+- Russ Cox
+- Filippo Valsorda
+summary: ChaCha8Rand is a new cryptographically secure pseudorandom number generator used in Go 1.22.
+---
+
+Computers aren't random.
+On the contrary, hardware designers work very hard to make sure computers run every program the same way every time.
+So when a program does need random numbers, that requires extra effort.
+Traditonally, computer scientists and programming languages
+have distinguished between two different kinds of random numbers:
+statistical and cryptographic randomness.
+In Go, those are provided by [`math/rand`](/pkg/math/rand/)
+and [`crypto/rand`](/pkg/crypto/rand), respectively.
+This post is about how Go 1.22 brings the two closer together,
+by using a cryptographic random number source in `math/rand`
+(as well as `math/rand/v2`, as mentioned in our [previous post](/blog/randv2)).
+The result is better randomness and far less damage when
+developers accidentally use `math/rand` instead of `crypto/rand`.
+
+Before we can explain what Go 1.22 did, let's take a closer look
+at statistical randomness compared to cryptographic randomness.
+
+## Statistical Randomness
+
+Random numbers that pass basic statistical tests
+are usually appropriate for use cases like simulations, sampling,
+numerical analysis, non-cryptographic randomized algorithms,
+[random testing](/doc/security/fuzz/),
+[shuffling inputs](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle),
+and
+[random exponential backoff](https://en.wikipedia.org/wiki/Exponential_backoff#Collision_avoidance).
+Very basic, easy to compute mathematical formulas turn out to work
+well enough for these use cases.
+Because the methods are so simple, however, an observer who
+knows what algorithm is being used can typically predict the rest
+of the sequence after seeing enough values.
+
+Essentially all programming environments provide a mechanism for generating
+statistical random numbers
+that traces back through C to
+Research Unix Third Edition (V3), which added a pair of functions: `srand` and `rand`.
+The manual page included
+a note that read:
+
+> _WARNING   The author of this routine has been writing
+random-number generators for many years and has never been
+known to write one that worked._
+
+This note was partly a joke but also an acknowledgement that such
+generators are [inherently not random](https://www.tuhs.org/pipermail/tuhs/2024-March/029587.html).
+
+The source code of the generator makes clear how trivial it is.
+Translated from PDP-11 assembly to modern C, it was:
+
+	uint16 ranx;
+
+	void
+	srand(uint16 seed)
+	{
+	    ranx = seed;
+	}
+
+	int16
+	rand(void)
+	{
+	    ranx = 13077*ranx + 6925;
+	    return ranx & ~0x8000;
+	}
+
+Calling `srand` seeds the generator with a single integer seed,
+and `rand` returns the next number from the generator.
+The AND in the return statement clears the sign bit to make sure the result is positive.
+
+This function is an instance of the general class of
+[linear congruential generators (LCGs)](https://en.wikipedia.org/wiki/Linear_congruential_generator),
+which Knuth analyzes in _The Art of Computer Programming_, Volume 2, section 3.2.1.
+The main benefit of LCGs is that constants can be chosen such that they
+emit every possible output value once before repeating,
+as the Unix implementation did for 15-bit outputs.
+A serious problem with LCGs, however, is that the high bits of the state do not affect the low bits at all,
+so every truncation of the sequence to _k_ bits necessarily repeats with a smaller period.
+The low bit must toggle: 0, 1, 0, 1, 0, 1.
+The low two bits must count up or down: 0, 1, 2, 3, 0, 1, 2, 3, or else 0, 3, 2, 1, 0, 3, 2, 1.
+There are four possible three-bit sequences; the original Unix implementation repeats 0, 5, 6, 3, 4, 1, 2, 7.
+(These problems can be avoided by reducing the value modulo a prime,
+but that would have been quite expensive at the time.
+See S. K. Park and K. W. Miller's 1988 CACM paper
+“[Random number generators: good ones are hard to find](https://dl.acm.org/doi/10.1145/63039.63042)”
+for a short analysis
+and the first chapter of Knuth Volume 2 for a longer one.)
+
+Even with these known problems,
+the `srand` and `rand` functions were included in the first C standard,
+and equivalent functionality was included in essentially every language since then.
+LCGs were once the dominant implementation strategy,
+although they've fallen off in popularity due to some important drawbacks.
+One significant remaining use is [`java.util.Random`](https://github.com/openjdk/jdk8u-dev/blob/master/jdk/src/share/classes/java/util/Random.java),
+which powers [`java.lang.Math.random`](https://github.com/openjdk/jdk8u-dev/blob/master/jdk/src/share/classes/java/util/Random.java).
+
+Another thing you can see from the implementation above
+is that the internal state is completely exposed by the result of `rand`.
+An observer who knows the algorithm and sees a single result
+can easily compute all future results.
+If you are running a server that calculates some random values
+that become public and some random values that must stay secret,
+using this kind of generator would be disastrous:
+the secrets wouldn't be secret.
+
+More modern random generators aren't as terrible as the original Unix one,
+but they're still not completely unpredictable.
+To make that point, next we will look at the original `math/rand` generator from Go 1
+and the PCG generator we added in `math/rand/v2`.
+
+## The Go 1 Generator
+
+The generator used in Go 1's `math/rand` is an instance of what is called a
+[linear-feedback shift register](https://en.wikipedia.org/wiki/Linear-feedback_shift_register).
+The algorithm is based on an idea by George Marsaglia,
+tweaked by Don Mitchell and Jim Reeds,
+and further customized by Ken Thompson for Plan 9 and then Go.
+It has no official name, so this post calls it the Go 1 generator.
+
+The Go 1 generator's internal state is a slice `vec` of 607 uint64s.
+In that slice, there are two distinguished elements: `vec[606]`, the last element, is called the “tap”,
+and `vec[334]` is called the “feed”.
+To generate the next random number,
+the generator adds the tap and the feed
+to produce a value `x`,
+stores `x` back into the feed,
+shifts the entire slice one position to the right
+(the tap moves to `vec[0]` and `vec[i]` moves to `vec[i+1]`),
+and returns `x`.
+The generator is called “linear feedback” because the tap is _added_ to the feed;
+the entire state is a “shift register” because each step shifts the slice entries.
+
+Of course, actually moving every slice entry forward would be prohibitively expensive,
+so instead the implementation leaves the slice data in place
+and moves the tap and feed positions backward
+on each step. The code looks like:
+
+{{raw `
+	func (r *rngSource) Uint64() uint64 {
+		r.tap--
+		if r.tap < 0 {
+			r.tap += len(r.vec)
+		}
+
+		r.feed--
+		if r.feed < 0 {
+			r.feed += len(r.vec)
+		}
+
+		x := r.vec[r.feed] + r.vec[r.tap]
+		r.vec[r.feed] = x
+		return uint64(x)
+	}
+`}}
+
+Generating the next number is quite cheap: two subtractions, two conditional adds, two loads, one add, one store.
+
+Unfortunately, because the generator directly returns one slice element from its its internal state vector,
+reading 607 values from the generator completely exposes all its state.
+With those values, you can predict all the future values, by filling in your own `vec`
+and then running the algorithm.
+You can also recover all the previous values, by running the algorithm backward
+(subtracting the tap from the feed and shifting the slice to the left).
+
+As a complete demonstration, here is an [insecure program](/play/p/v0QdGjUAtzC)
+generating pseudorandom authentication
+tokens along with code that predicts the next token given a sequence of earlier tokens.
+As you can see, the Go 1 generator provides no security at all (nor was it meant to).
+The quality of the generated numbers also depends on the initial setting of `vec`.
+
+## The PCG Generator
+
+For `math/rand/v2`, we wanted to provide a more modern statistical random generator
+and settled on Melissa O'Neill's PCG algorithm, published in 2014 in her paper
+“[PCG: A Family of Simple Fast Space-Efficient Statistically Good Algorithms for Random Number Generation](https://www.pcg-random.org/pdf/hmc-cs-2014-0905.pdf)”.
+The exhaustive analysis in the paper can make it hard to notice at first glance how utterly trivial the generators are:
+PCG is a post-processed 128-bit LCG.
+
+If the state `p.x` were a `uint128` (hypothetically), the code to compute the next value would be:
+
+	const (
+		pcgM = 0x2360ed051fc65da44385df649fccf645
+		pcgA = 0x5851f42d4c957f2d14057b7ef767814f
+	)
+
+	type PCG struct {
+		x uint128
+	}
+
+	func (p *PCG) Uint64() uint64 {
+		p.x = p.x * pcgM + pcgA
+		return scramble(p.x)
+	}
+
+The entire state is a single 128-bit number,
+and the update is a 128-bit multiply and add.
+In the return statement, the `scramble` function reduces the 128-bit state
+down to a 64-bit state.
+The orginal PCG used (again using a hypothetical `uint128` type):
+
+	func scramble(x uint128) uint64 {
+		return bits.RotateLeft(uint64(x>>64) ^ uint64(x), -int(x>>122))
+	}
+
+This code XORs the two halves of the 128-bit state together
+and then rotates the result according to the top six bits of the state.
+This version is called PCG-XSL-RR, for “xor shift low, right rotate”.
+
+Based on a [suggestion from O'Neill during proposal discussion](/issue/21835#issuecomment-739065688),
+Go's PCG uses a new scramble function based on multiplication,
+which mixes the bits more aggressively:
+
+	func scramble(x uint128) uint64 {
+		hi, lo := uint64(x>>64), uint64(x)
+		hi ^= hi >> 32
+		hi *= 0xda942042e4dd58b5
+		hi ^= hi >> 48
+		hi *= lo | 1
+	}
+
+O'Neill calls PCG with this scrambler PCG-DXSM, for “double xorshift multiply.”
+Numpy uses this form of PCG as well.
+
+Although PCG uses more computation to generate each value,
+it uses significantly less state: two uint64s instead of 607.
+It is also much less sensitive to the initial values of that state,
+and [it passes many statistical tests that other generators do not](https://www.pcg-random.org/statistical-tests.html).
+In many ways it is an ideal statistical generator.
+
+Even so, PCG is not unpredictable.
+While the scrambling of bits to prepare the result does not
+expose the state directly like in the LCG and Go 1 generators,
+[PCG-XSL-RR can still be be reversed](https://pdfs.semanticscholar.org/4c5e/4a263d92787850edd011d38521966751a179.pdf),
+and it would not be surprising if PCG-DXSM could too.
+For secrets, we need something different.
+
+## Cryptographic Randomness
+
+_Cryptographic random numbers_ need to be utterly unpredictable
+in practice, even to an observer who knows how they are generated
+and has observed any number of previously generated values.
+The safety of cryptographic protocols, secret keys, modern commerce,
+online privacy, and more all critically depend on access to cryptographic
+randomness.
+
+Providing cryptographic randomness is ultimately the job of the
+operating system, which can gather true randomness from physical devices—timings
+of the mouse, keyboard, disks, and network, and more recently
+[electrical noise measured directly by the CPU itself](https://web.archive.org/web/20141230024150/http://www.cryptography.com/public/pdf/Intel_TRNG_Report_20120312.pdf).
+Once the operating system has gathered a meaningful
+amount of randomness—say, at least 256 bits—it can use cryptographic
+hashing or encryption algorithms to stretch that seed into
+an arbitrarily long sequence of random numbers.
+(In practice the operating system is also constantly gathering and
+adding new randomness to the sequence too.)
+
+The exact operating system interfaces have evolved over time.
+A decade ago, most systems provided a device file named
+`/dev/random` or something similar.
+Today, in recognition of how fundamental randomness has become,
+operating systems provide a direct system call instead.
+(This also allows programs to read randomness even
+when cut off from the file system.)
+In Go, the [`crypto/rand`](/pkg/crypto/rand/) package abstracts away those details,
+providing the same interface on every operating system: [`rand.Read`](/pkg/crypto/rand/#Read).
+
+It would not be practical for `math/rand` to ask the operating system for
+randomness each time it needs a `uint64`.
+But we can use cryptographic techniques to define an in-process
+random generator that improves on LCGs, the Go 1 generator, and even PCG.
+
+## The ChaCha8Rand Generator
+
+Our new generator, which we unimaginatively named ChaCha8Rand for specification purposes
+and implemented as `math/rand/v2`'s [`rand.ChaCha8`](/pkg/math/rand/v2/#ChaCha8),
+is a lightly modified version of Daniel J. Bernstein's [ChaCha stream cipher](https://cr.yp.to/chacha.html).
+ChaCha is widely used in a 20-round form called ChaCha20, including in TLS and SSH.
+Jean-Philippe Aumasson's paper “[Too Much Crypto](https://eprint.iacr.org/2019/1492.pdf)”
+argues persuasively that the 8-round form ChaCha8 is secure too (and it's roughly 2.5X faster).
+We used ChaCha8 as the core of ChaCha8Rand.
+
+Most stream ciphers, including ChaCha8, work by defining a function that is given
+a key and a block number and produces a fixed-size block of apparently random data.
+The cryptographic standard these aim for (and usually meet) is for this output to be indistinguishable
+from actual random data in the absence of some kind of exponentially costly brute force search.
+A message is encrypted or decrypted by XOR'ing successive blocks of input data
+with successive randomly generated blocks.
+To use ChaCha8 as a `rand.Source`,
+we use the generated blocks directly instead of XOR'ing them with input data
+(this is equivalent to encrypting or decrypting all zeros).
+
+We changed a few details to make ChaCha8Rand more suitable for generating random numbers. Briefly:
+
+ - ChaCha8Rand takes a 32-byte seed, used as the ChaCha8 key.
+ - ChaCha8 generates 64-byte blocks, with calculations treating a block as 16 `uint32`s.
+   A common implementation is to compute four blocks at a time using [SIMD instructions](https://en.wikipedia.org/wiki/Single_instruction,_multiple_data)
+   on 16 vector registers of four `uint32`s each.
+   This produces four interleaved blocks that must be unshuffled for XOR'ing with the input data.
+   ChaCha8Rand defines that the interleaved blocks are the random data stream,
+   removing the cost of the unshuffle.
+   (For security purposes, this can be viewed as standard ChaCha8 followed by a reshuffle.)
+ - ChaCha8 finishes a block by adding certain values to each `uint32` in the block.
+   Half the values are key material and the other half are known constants.
+   ChaCha8Rand defines that the known constants are not re-added,
+   removing half of the final adds.
+   (For security purposes, this can be viewed as standard ChaCha8 followed by subtracting the known constants.)
+ - Every 16th generated block, ChaCha8Rand takes the final 32 bytes of the block for itself,
+   making them the key for the next 16 blocks.
+   This provides a kind of [forward secrecy](https://en.wikipedia.org/wiki/Forward_secrecy):
+   if a system is compromised by an attack that
+   recovers the entire memory state of the generator, only values generated
+   since the last rekeying can be recovered. The past is inaccessible.
+   ChaCha8Rand as defined so far must generate 4 blocks at a time,
+   but we chose to do this key rotation every 16 blocks to leave open the
+   possibility of faster implementations using 256-bit or 512-bit vectors,
+   which could generate 8 or 16 blocks at a time.
+
+We wrote and published a [C2SP specification for ChaCha8Rand](https://c2sp.org/chacha8rand),
+along with test cases.
+This will enable other implementations to share repeatability with the Go implementation
+for a given seed.
+
+The Go runtime now maintains a per-core ChaCha8Rand state (300 bytes),
+seeded with operating system-supplied cryptographic randomness,
+so that random numbers can be generated quickly without any lock contention.
+Dedicating 300 bytes per core may sound expensive,
+but on a 16-core system, it is about the same as storing a single shared Go 1 generator state (4,872 bytes).
+The speed is worth the memory.
+This per-core ChaCha8Rand generator is now used in three different places in the Go standard library:
+
+ 1. The `math/rand/v2` package functions, such as
+   [`rand.Float64`](/pkg/math/rand/v2/#Float64) and
+   [`rand.N`](/pkg/math/rand/v2/#N), always use ChaCha8Rand.
+
+ 2. The `math/rand` package functions, such as
+   [`rand.Float64`](/pkg/math/rand/#Float64) and
+   [`rand.Intn`](/pkg/math/rand/#Intn),
+   use ChaCha8Rand when
+   [`rand.Seed`](/pkg/math/rand/#Seed) has not been called.
+   Applying ChaCha8Rand in `math/rand` improves the security of programs
+   even before they update to `math/rand/v2`,
+   provided they are not calling `rand.Seed`.
+   (If `rand.Seed` is called, the implementation is required to fall back to the Go 1 generator for compatibility.)
+
+ 3. The runtime chooses the hash seed for each new map
+    using ChaCha8Rand instead of a less secure [wyrand-based generator](https://github.com/wangyi-fudan/wyhash)
+    it previously used.
+    Random seeds are needed because if
+    an attacker knows the specific hash function used by a map implementation,
+    they can prepare input that drives the map into quadratic behavior
+    (see Crosby and Wallach's “[Denial of Service via Algorithmic Complexity Attacks](https://www.usenix.org/conference/12th-usenix-security-symposium/denial-service-algorithmic-complexity-attacks)”).
+    Using a per-map seed, instead of one global seed for all maps,
+    also avoids [other degenerate behaviors](https://accidentallyquadratic.tumblr.com/post/153545455987/rust-hash-iteration-reinsertion).
+    It is not strictly clear that maps need a cryptographically random seed,
+    but it's also not clear that they don't. It seemed prudent and was trivial to switch.
+
+Code that needs its own ChaCha8Rand instances can create its own [`rand.ChaCha8`](/pkg/math/rand/v2/#ChaCha8) directly.
+
+## Fixing Security Mistakes
+
+Go aims to help developers write code that is secure by default.
+When we observe a common mistake with security consequences,
+we look for ways to reduce the risk of that mistake
+or eliminate it entirely.
+In this case, `math/rand`'s global generator was far too predictable,
+leading to serious problems in a variety of contexts.
+
+For example, when Go 1.20 deprecated [`math/rand`’s `Read`](/pkg/math/rand/#Read),
+we heard from developers who discovered (thanks to tooling pointing out
+use of deprecated functionality) they had been
+using it in places where [`crypto/rand`’s `Read`](/pkg/crypto/rand/#Read)
+was definitely needed, like generating key material.
+Using Go 1.20, that mistake
+is a serious security problem that merits a detailed investigation
+to understand the damage.
+Where were the keys used?
+How were the keys exposed?
+Were other random outputs exposed that might allow an attacker to derive the keys?
+And so on.
+Using Go 1.22, that mistake is just a mistake.
+It's still better to use `crypto/rand`,
+because the operating system kernel can do a better job keeping the random values
+secret from various kinds of prying eyes,
+the kernel is continually adding new entropy to its generator,
+and the kernel has had more scrutiny.
+But accidentally using `math/rand` is no longer a security catastrophe.
+
+There are also a variety of use cases that don't seem like “crypto”
+but nonetheless need unpredictable randomness.
+These cases are made more robust by using ChaCha8Rand instead of the Go 1 generator.
+
+For example, consider generating a
+[random UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random)).
+Since UUIDs are not secret, using `math/rand` might seem fine.
+But if `math/rand` has been seeded with the current time,
+then running it at the same instant on different computers
+will produce the same value, making them not “universally unique”.
+This is especially likely on systems where the current time
+is only available with millisecond precision.
+Even with auto-seeding using OS-provided entropy,
+as introduced in Go 1.20,
+the Go 1 generator's seed is only a 63-bit integer,
+so a program that generates a UUID at startup
+can only generate 2⁶³ possible UUIDs and is
+likely to see collisions after 2³¹ or so UUIDs.
+Using Go 1.22, the new ChaCha8Rand generator
+is seeded from 256 bits of entropy and can generate
+2²⁵⁶ possible first UUIDs.
+It does not need to worry about collisions.
+
+As another example, consider load balancing in a front-end server
+that randomly assigns incoming requests to back-end servers.
+If an attacker can observe the assignments and knows the
+predictable algorithm generating them,
+then the attacker could send a stream
+of mostly cheap requests but arrange for all the expensive requests
+to land on a single back-end server.
+This is an unlikely but plausible problem using the Go 1 generator.
+Using Go 1.22, it's not a problem at all.
+
+In all these examples, Go 1.22 has eliminated or greatly reduced
+security problems.
+
+## Performance
+
+The security benefits of ChaCha8Rand do have a small cost,
+but ChaCha8Rand is still in the same ballpark as both the Go 1 generator and PCG.
+The following graphs compare the performance of the three generators,
+across a variety of hardware, running two operations:
+the primitive operation “Uint64,” which returns the next `uint64` in the random stream,
+and the higher-level operation “N(1000),” which returns a random value in the range [0, 1000).
+
+<img src="chacha8rand/amd.svg">
+<img src="chacha8rand/intel.svg">
+<img src="chacha8rand/amd32.svg">
+<img src="chacha8rand/intel32.svg">
+<img src="chacha8rand/m1.svg">
+<img src="chacha8rand/m3.svg">
+<img src="chacha8rand/taut2a.svg">
+
+The “running 32-bit code” graphs show modern 64-bit x86 chips
+executing code built with `GOARCH=386`, meaning they are
+running in 32-bit mode.
+In that case, the fact that PCG requires 128-bit multiplications
+makes it slower than ChaCha8Rand, which only uses 32-bit SIMD arithmetic.
+Actual 32-bit systems matter less every year,
+but it is still interesting that ChaCha8Rand is faster than PCG
+on those systems.
+
+On some systems, “Go 1: Uint64” is faster than “PCG: Uint64”,
+but “Go 1: N(1000)” is slower than “PCG: N(1000)”.
+This happens because “Go 1: N(1000)” is using `math/rand`'s algorithm for
+reducing a random `int64` down to a value in the range [0, 1000),
+and that algorithm does two 64-bit integer divide operations.
+In contrast, “PCG: N(1000)” and “ChaCha8: N(1000)” use the [faster `math/rand/v2` algorithm](/blog/randv2#problem.rand),
+which almost always avoids the divisions.
+Removing the 64-bit divisions dominates the algorithm change
+for 32-bit execution and on the Ampere.
+
+Overall, ChaCha8Rand is slower than the Go 1 generator,
+but it is never more than twice as slow, and on typical servers the
+difference is never more than 3ns.
+Very few programs will be bottlenecked by this difference,
+and many programs will enjoy the improved security.
+
+## Conclusion
+
+Go 1.22 makes your programs more secure without any code changes.
+We did this by identifying the common mistake of accidentally using `math/rand`
+instead of `crypto/rand` and then strengthening `math/rand`.
+This is one small step in Go's ongoing journey to keep programs
+safe by default.
+
+These kinds of mistakes are not unique to Go.
+For example, the npm `keypair` package tries to generate an RSA key pair
+using Web Crypto APIs, but if they're not available, it falls back to JavaScript's `Math.random`.
+This is hardly an isolated case,
+and the security of our systems cannot depend on developers not making mistakes.
+Instead, we hope that eventually all programming languages
+will move to cryptographically strong pseudorandom generators
+even for “mathematical” randomness,
+eliminating this kind of mistake, or at least greatly reducing its blast radius.
+Go 1.22's [ChaCha8Rand](https://c2sp.org/chacha8rand) implementation
+proves that this approach is competitive with other generators.
+
diff --git a/_content/blog/chacha8rand/amd.svg b/_content/blog/chacha8rand/amd.svg
new file mode 100644
index 0000000..b405ac9
--- /dev/null
+++ b/_content/blog/chacha8rand/amd.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg height="170" width="400" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+  <defs>
+    <style type="text/css"><![CDATA[
+      text {
+        font-family: sans-serif, Arial;
+        font-size: 12px;
+      }
+      text.head {
+        font-weight: bold;
+        font-size: 14px;
+      }
+    ]]></style>
+  </defs>
+<text x='0' y='25' class='head'><tspan dx='5' dy='-0.5em'>AMD Ryzen 9 7950X</tspan></text>
+<rect x='5' y='25' height='20' width='57' fill='#ffaaaa' stroke='black' />
+<text x='59' y='45' text-anchor='end'><tspan dy='-0.5em'>2.3ns</tspan></text>
+<text x='67' y='45'><tspan dy='-0.5em'>Go 1: Uint64</tspan></text>
+<rect x='5' y='45' height='20' width='38' fill='#ccccff' stroke='black' />
+<text x='40' y='65' text-anchor='end'><tspan dy='-0.5em'>1.5ns</tspan></text>
+<text x='48' y='65'><tspan dy='-0.5em'>PCG: Uint64</tspan></text>
+<rect x='5' y='65' height='20' width='77' fill='#ffffaa' stroke='black' />
+<text x='79' y='85' text-anchor='end'><tspan dy='-0.5em'>3.1ns</tspan></text>
+<text x='87' y='85'><tspan dy='-0.5em'>ChaCha8: Uint64</tspan></text>
+<rect x='5' y='95' height='20' width='76' fill='#ffaaaa' stroke='black' />
+<text x='78' y='115' text-anchor='end'><tspan dy='-0.5em'>3.0ns</tspan></text>
+<text x='86' y='115'><tspan dy='-0.5em'>Go 1: N(1000)</tspan></text>
+<rect x='5' y='115' height='20' width='61' fill='#ccccff' stroke='black' />
+<text x='63' y='135' text-anchor='end'><tspan dy='-0.5em'>2.5ns</tspan></text>
+<text x='71' y='135'><tspan dy='-0.5em'>PCG: N(1000)</tspan></text>
+<rect x='5' y='135' height='20' width='100' fill='#ffffaa' stroke='black' />
+<text x='102' y='155' text-anchor='end'><tspan dy='-0.5em'>4.0ns</tspan></text>
+<text x='110' y='155'><tspan dy='-0.5em'>ChaCha8: N(1000)</tspan></text>
+</svg>
diff --git a/_content/blog/chacha8rand/amd.txt b/_content/blog/chacha8rand/amd.txt
new file mode 100644
index 0000000..e7f3d90
--- /dev/null
+++ b/_content/blog/chacha8rand/amd.txt
@@ -0,0 +1,365 @@
+goos: linux
+goarch: amd64
+pkg: randtest
+cpu: AMD Ryzen 9 7950X 16-Core Processor            
+BenchmarkUint64/gen=Go1   	455279768	         2.364 ns/op
+BenchmarkUint64/gen=Go1   	519789694	         2.293 ns/op
+BenchmarkUint64/gen=Go1   	522122683	         2.293 ns/op
+BenchmarkUint64/gen=Go1   	523472362	         2.294 ns/op
+BenchmarkUint64/gen=Go1   	485638840	         2.303 ns/op
+BenchmarkUint64/gen=Go1   	519045819	         2.292 ns/op
+BenchmarkUint64/gen=Go1   	523431801	         2.293 ns/op
+BenchmarkUint64/gen=Go1   	523357124	         2.293 ns/op
+BenchmarkUint64/gen=Go1   	523389828	         2.292 ns/op
+BenchmarkUint64/gen=Go1   	523398201	         2.293 ns/op
+BenchmarkUint64/gen=Go1   	523435303	         2.293 ns/op
+BenchmarkUint64/gen=Go1   	519580422	         2.503 ns/op
+BenchmarkUint64/gen=Go1   	523382763	         2.306 ns/op
+BenchmarkUint64/gen=Go1   	523438023	         2.293 ns/op
+BenchmarkUint64/gen=Go1   	523444336	         2.293 ns/op
+BenchmarkUint64/gen=Go1   	523370480	         2.292 ns/op
+BenchmarkUint64/gen=Go1   	521910638	         2.308 ns/op
+BenchmarkUint64/gen=Go1   	518964924	         2.310 ns/op
+BenchmarkUint64/gen=Go1   	486476830	         2.304 ns/op
+BenchmarkUint64/gen=Go1   	523447699	         2.293 ns/op
+BenchmarkUint64/gen=PCG   	786870627	         1.525 ns/op
+BenchmarkUint64/gen=PCG   	783935590	         1.525 ns/op
+BenchmarkUint64/gen=PCG   	784169529	         1.534 ns/op
+BenchmarkUint64/gen=PCG   	785884291	         1.532 ns/op
+BenchmarkUint64/gen=PCG   	786318915	         1.525 ns/op
+BenchmarkUint64/gen=PCG   	786187296	         1.525 ns/op
+BenchmarkUint64/gen=PCG   	786013018	         1.539 ns/op
+BenchmarkUint64/gen=PCG   	778637932	         1.532 ns/op
+BenchmarkUint64/gen=PCG   	786107628	         1.526 ns/op
+BenchmarkUint64/gen=PCG   	786311377	         1.525 ns/op
+BenchmarkUint64/gen=PCG   	787032980	         1.525 ns/op
+BenchmarkUint64/gen=PCG   	782743168	         1.525 ns/op
+BenchmarkUint64/gen=PCG   	785617480	         1.539 ns/op
+BenchmarkUint64/gen=PCG   	783361540	         1.533 ns/op
+BenchmarkUint64/gen=PCG   	780100621	         1.541 ns/op
+BenchmarkUint64/gen=PCG   	786418195	         1.533 ns/op
+BenchmarkUint64/gen=PCG   	787006656	         1.525 ns/op
+BenchmarkUint64/gen=PCG   	786754902	         1.525 ns/op
+BenchmarkUint64/gen=PCG   	787156088	         1.525 ns/op
+BenchmarkUint64/gen=PCG   	786777794	         1.538 ns/op
+BenchmarkUint64/gen=ChaCha8         	386054190	         3.106 ns/op
+BenchmarkUint64/gen=ChaCha8         	384905343	         3.107 ns/op
+BenchmarkUint64/gen=ChaCha8         	385285060	         3.110 ns/op
+BenchmarkUint64/gen=ChaCha8         	385377391	         3.105 ns/op
+BenchmarkUint64/gen=ChaCha8         	386341707	         3.116 ns/op
+BenchmarkUint64/gen=ChaCha8         	386078406	         3.107 ns/op
+BenchmarkUint64/gen=ChaCha8         	385757036	         3.112 ns/op
+BenchmarkUint64/gen=ChaCha8         	385806292	         3.108 ns/op
+BenchmarkUint64/gen=ChaCha8         	386117088	         3.108 ns/op
+BenchmarkUint64/gen=ChaCha8         	386231798	         3.101 ns/op
+BenchmarkUint64/gen=ChaCha8         	385470673	         3.105 ns/op
+BenchmarkUint64/gen=ChaCha8         	386601999	         3.109 ns/op
+BenchmarkUint64/gen=ChaCha8         	385018952	         3.110 ns/op
+BenchmarkUint64/gen=ChaCha8         	386342428	         3.109 ns/op
+BenchmarkUint64/gen=ChaCha8         	386414920	         3.109 ns/op
+BenchmarkUint64/gen=ChaCha8         	387147032	         3.108 ns/op
+BenchmarkUint64/gen=ChaCha8         	386450503	         3.100 ns/op
+BenchmarkUint64/gen=ChaCha8         	386103471	         3.104 ns/op
+BenchmarkUint64/gen=ChaCha8         	386540037	         3.113 ns/op
+BenchmarkUint64/gen=ChaCha8         	385798424	         3.110 ns/op
+BenchmarkN1000/gen=Go1              	394725604	         3.040 ns/op
+BenchmarkN1000/gen=Go1              	394682626	         3.040 ns/op
+BenchmarkN1000/gen=Go1              	394703554	         3.043 ns/op
+BenchmarkN1000/gen=Go1              	394712413	         3.042 ns/op
+BenchmarkN1000/gen=Go1              	394615815	         3.041 ns/op
+BenchmarkN1000/gen=Go1              	393253173	         3.041 ns/op
+BenchmarkN1000/gen=Go1              	393223544	         3.042 ns/op
+BenchmarkN1000/gen=Go1              	394604973	         3.044 ns/op
+BenchmarkN1000/gen=Go1              	394629051	         3.041 ns/op
+BenchmarkN1000/gen=Go1              	394585057	         3.041 ns/op
+BenchmarkN1000/gen=Go1              	394644680	         3.041 ns/op
+BenchmarkN1000/gen=Go1              	394729832	         3.040 ns/op
+BenchmarkN1000/gen=Go1              	393461822	         3.040 ns/op
+BenchmarkN1000/gen=Go1              	394717290	         3.040 ns/op
+BenchmarkN1000/gen=Go1              	394707823	         3.040 ns/op
+BenchmarkN1000/gen=Go1              	394748188	         3.040 ns/op
+BenchmarkN1000/gen=Go1              	394715078	         3.040 ns/op
+BenchmarkN1000/gen=Go1              	394025218	         3.040 ns/op
+BenchmarkN1000/gen=Go1              	394610018	         3.042 ns/op
+BenchmarkN1000/gen=Go1              	394493120	         3.041 ns/op
+BenchmarkN1000/gen=PCG              	485638623	         2.471 ns/op
+BenchmarkN1000/gen=PCG              	484805846	         2.472 ns/op
+BenchmarkN1000/gen=PCG              	485383681	         2.477 ns/op
+BenchmarkN1000/gen=PCG              	485478981	         2.472 ns/op
+BenchmarkN1000/gen=PCG              	485563909	         2.478 ns/op
+BenchmarkN1000/gen=PCG              	485616392	         2.479 ns/op
+BenchmarkN1000/gen=PCG              	485512890	         2.472 ns/op
+BenchmarkN1000/gen=PCG              	484879171	         2.471 ns/op
+BenchmarkN1000/gen=PCG              	484142248	         2.475 ns/op
+BenchmarkN1000/gen=PCG              	485548515	         2.472 ns/op
+BenchmarkN1000/gen=PCG              	485556486	         2.476 ns/op
+BenchmarkN1000/gen=PCG              	485408506	         2.477 ns/op
+BenchmarkN1000/gen=PCG              	485587806	         2.479 ns/op
+BenchmarkN1000/gen=PCG              	484682878	         2.472 ns/op
+BenchmarkN1000/gen=PCG              	485418754	         2.472 ns/op
+BenchmarkN1000/gen=PCG              	485386789	         2.472 ns/op
+BenchmarkN1000/gen=PCG              	485533003	         2.472 ns/op
+BenchmarkN1000/gen=PCG              	485576724	         2.472 ns/op
+BenchmarkN1000/gen=PCG              	485400006	         2.473 ns/op
+BenchmarkN1000/gen=PCG              	485233192	         2.471 ns/op
+BenchmarkN1000/gen=ChaCha8          	298920919	         4.033 ns/op
+BenchmarkN1000/gen=ChaCha8          	299882438	         4.033 ns/op
+BenchmarkN1000/gen=ChaCha8          	297629688	         4.021 ns/op
+BenchmarkN1000/gen=ChaCha8          	297746730	         4.031 ns/op
+BenchmarkN1000/gen=ChaCha8          	299986351	         4.021 ns/op
+BenchmarkN1000/gen=ChaCha8          	303398673	         4.035 ns/op
+BenchmarkN1000/gen=ChaCha8          	302361688	         4.034 ns/op
+BenchmarkN1000/gen=ChaCha8          	298069573	         4.008 ns/op
+BenchmarkN1000/gen=ChaCha8          	305390112	         4.044 ns/op
+BenchmarkN1000/gen=ChaCha8          	297703798	         4.027 ns/op
+BenchmarkN1000/gen=ChaCha8          	297693808	         4.036 ns/op
+BenchmarkN1000/gen=ChaCha8          	298934832	         4.029 ns/op
+BenchmarkN1000/gen=ChaCha8          	303134473	         4.030 ns/op
+BenchmarkN1000/gen=ChaCha8          	299835459	         4.034 ns/op
+BenchmarkN1000/gen=ChaCha8          	298504718	         4.024 ns/op
+BenchmarkN1000/gen=ChaCha8          	297520771	         4.034 ns/op
+BenchmarkN1000/gen=ChaCha8          	301334641	         4.031 ns/op
+BenchmarkN1000/gen=ChaCha8          	298170103	         4.033 ns/op
+BenchmarkN1000/gen=ChaCha8          	300362324	         4.027 ns/op
+BenchmarkN1000/gen=ChaCha8          	298702628	         4.025 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191380134	         6.247 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191891608	         6.269 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191402508	         6.248 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	192057276	         6.248 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191902225	         6.267 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191883615	         6.267 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	192031549	         6.271 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	192076852	         6.269 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191416588	         6.268 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	192059349	         6.267 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191895012	         6.247 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	192035383	         6.248 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191451019	         6.248 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191449336	         6.248 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191275525	         6.247 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191402721	         6.254 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191891896	         6.247 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	191882456	         6.247 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	192030223	         6.254 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	192057226	         6.248 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	372059919	         3.133 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381930554	         3.131 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	382337580	         3.130 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	382607620	         3.139 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	382961703	         3.132 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	382446148	         3.136 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	382379312	         3.134 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381725266	         3.129 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	383008508	         3.137 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	383209660	         3.220 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381957969	         3.136 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	378188480	         3.132 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	382109911	         3.143 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	383336012	         3.143 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	382250211	         3.219 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	371112848	         3.135 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	382369777	         3.141 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381590031	         3.128 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	382815568	         3.136 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381687740	         3.131 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	763725463	         1.583 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	763096844	         1.597 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	753496458	         1.579 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	758911014	         1.579 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	756655756	         1.578 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	762561105	         1.574 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	761480029	         1.575 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	759111294	         1.567 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	751930976	         1.571 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	762415730	         1.570 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	753374888	         1.574 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	762828859	         1.569 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	762880312	         1.570 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	758914182	         1.574 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	762964579	         1.609 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	761252944	         1.568 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	762997576	         1.574 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	757307414	         1.662 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	762538045	         1.571 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	764273270	         1.569 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7968 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7911 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7980 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.8057 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7917 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7978 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7992 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.8006 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7901 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.8035 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7928 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7971 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7911 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7978 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7930 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7989 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7993 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7980 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.8145 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.7969 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207600003	         5.779 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207576589	         5.778 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207535726	         5.796 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207635161	         5.777 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207730761	         5.773 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207606531	         5.819 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207649696	         5.775 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207848798	         5.776 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207473913	         5.779 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207674976	         5.775 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207575718	         5.779 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207602695	         5.777 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207574398	         5.777 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207610029	         5.777 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	206445784	         5.767 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207519394	         5.817 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207613056	         5.777 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207624410	         5.780 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207862191	         5.772 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	207608740	         5.814 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.99 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.44 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.41 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.92 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.91 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	96827073	        10.53 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.96 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.28 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        11.08 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        11.08 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.86 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	96357594	        10.65 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        11.19 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.35 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	96990795	        10.56 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.26 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        11.09 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.73 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.55 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	100000000	        10.96 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	61193780	        20.67 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	57732120	        20.89 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	54749764	        20.52 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	55574290	        20.06 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	57946466	        20.49 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	56479664	        21.07 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	61465386	        20.92 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	59001804	        20.42 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	59676648	        20.13 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	55898132	        20.18 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	59248426	        20.96 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	60125833	        19.64 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	59264377	        20.21 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	58351057	        20.65 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	60281220	        19.87 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	56473112	        20.36 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	58224433	        20.58 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	56178170	        20.37 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	57537434	        19.88 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	60353514	        19.78 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	41878318	        28.62 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	40712794	        27.45 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	42805771	        27.78 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	42034758	        28.04 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	46106115	        28.33 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	45855178	        27.94 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	44782388	        26.17 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	40100341	        27.89 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	43158573	        27.71 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	42840740	        29.07 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	45136928	        27.29 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	41977213	        27.63 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	43477683	        28.46 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	41311776	        27.36 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	41919152	        27.94 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	41766370	        26.80 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	42900246	        28.09 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	41659854	        28.99 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	42763422	        27.60 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	43039342	        27.40 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	266108085	         4.530 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	274321118	         4.533 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	270676252	         4.533 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	275348138	         4.353 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	264463909	         4.389 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	264614869	         4.494 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	272282390	         4.508 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	275158875	         4.376 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	266010374	         4.485 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	267979089	         4.539 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	274197225	         4.479 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	274594815	         4.355 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	272197795	         4.372 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	274966376	         4.350 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	264506719	         4.407 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	274379982	         4.405 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	274472146	         4.473 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	274511250	         4.373 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	266663211	         4.543 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	265502694	         4.538 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	536130792	         2.223 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	539033419	         2.224 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	548117694	         2.187 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	547907901	         2.239 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	544108652	         2.230 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	548122909	         2.228 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	536819059	         2.242 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	537992276	         2.244 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	536595396	         2.226 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	536510715	         2.233 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	545179281	         2.228 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	540398054	         2.209 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	535292932	         2.245 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	543246008	         2.197 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	538528942	         2.219 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	532505830	         2.254 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	544847184	         2.242 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	540084708	         2.237 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	545226187	         2.259 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	535453359	         2.239 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.131 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.144 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.126 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	966306712	         1.141 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.129 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.114 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.111 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.115 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.115 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	959424468	         1.120 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.128 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	975872718	         1.118 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.135 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	994416624	         1.139 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.124 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.123 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.135 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.115 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.128 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	1000000000	         1.110 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5671 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5696 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5660 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5638 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5680 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5645 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5679 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5665 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5708 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5714 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5748 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5648 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5724 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5669 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5630 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5630 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5689 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5717 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5612 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.5712 ns/op
+PASS
diff --git a/_content/blog/chacha8rand/amd32.svg b/_content/blog/chacha8rand/amd32.svg
new file mode 100644
index 0000000..945e6eb
--- /dev/null
+++ b/_content/blog/chacha8rand/amd32.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg height="170" width="400" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+  <defs>
+    <style type="text/css"><![CDATA[
+      text {
+        font-family: sans-serif, Arial;
+        font-size: 12px;
+      }
+      text.head {
+        font-weight: bold;
+        font-size: 14px;
+      }
+    ]]></style>
+  </defs>
+<text x='0' y='25' class='head'><tspan dx='5' dy='-0.5em'>AMD Ryzen 9 7950X running 32-bit code</tspan></text>
+<rect x='5' y='25' height='20' width='80' fill='#ffaaaa' stroke='black' />
+<text x='82' y='45' text-anchor='end'><tspan dy='-0.5em'>3.2ns</tspan></text>
+<text x='90' y='45'><tspan dy='-0.5em'>Go 1: Uint64</tspan></text>
+<rect x='5' y='45' height='20' width='200' fill='#ccccff' stroke='black' />
+<text x='202' y='65' text-anchor='end'><tspan dy='-0.5em'>8.0ns</tspan></text>
+<text x='10' y='65'><tspan dy='-0.5em'>PCG: Uint64</tspan></text>
+<rect x='5' y='65' height='20' width='149' fill='#ffffaa' stroke='black' />
+<text x='151' y='85' text-anchor='end'><tspan dy='-0.5em'>6.0ns</tspan></text>
+<text x='10' y='85'><tspan dy='-0.5em'>ChaCha8: Uint64</tspan></text>
+<rect x='5' y='95' height='20' width='359' fill='#ffaaaa' stroke='black' />
+<text x='361' y='115' text-anchor='end'><tspan dy='-0.5em'>14.4ns</tspan></text>
+<text x='10' y='115'><tspan dy='-0.5em'>Go 1: N(1000)</tspan></text>
+<rect x='5' y='115' height='20' width='259' fill='#ccccff' stroke='black' />
+<text x='261' y='135' text-anchor='end'><tspan dy='-0.5em'>10.4ns</tspan></text>
+<text x='10' y='135'><tspan dy='-0.5em'>PCG: N(1000)</tspan></text>
+<rect x='5' y='135' height='20' width='209' fill='#ffffaa' stroke='black' />
+<text x='211' y='155' text-anchor='end'><tspan dy='-0.5em'>8.4ns</tspan></text>
+<text x='10' y='155'><tspan dy='-0.5em'>ChaCha8: N(1000)</tspan></text>
+</svg>
diff --git a/_content/blog/chacha8rand/amd32.txt b/_content/blog/chacha8rand/amd32.txt
new file mode 100644
index 0000000..a2c09b1
--- /dev/null
+++ b/_content/blog/chacha8rand/amd32.txt
@@ -0,0 +1,365 @@
+goos: linux
+goarch: 386
+pkg: randtest
+cpu: AMD Ryzen 9 7950X 16-Core Processor            
+BenchmarkUint64/gen=Go1   	348949184	         3.304 ns/op
+BenchmarkUint64/gen=Go1   	372030274	         3.229 ns/op
+BenchmarkUint64/gen=Go1   	370813892	         3.225 ns/op
+BenchmarkUint64/gen=Go1   	370456261	         3.253 ns/op
+BenchmarkUint64/gen=Go1   	372152829	         3.254 ns/op
+BenchmarkUint64/gen=Go1   	368208891	         3.263 ns/op
+BenchmarkUint64/gen=Go1   	371096613	         3.227 ns/op
+BenchmarkUint64/gen=Go1   	370718185	         3.234 ns/op
+BenchmarkUint64/gen=Go1   	369716916	         3.233 ns/op
+BenchmarkUint64/gen=Go1   	369521853	         3.235 ns/op
+BenchmarkUint64/gen=Go1   	368828361	         3.225 ns/op
+BenchmarkUint64/gen=Go1   	369677170	         3.224 ns/op
+BenchmarkUint64/gen=Go1   	370844134	         3.227 ns/op
+BenchmarkUint64/gen=Go1   	371561290	         3.243 ns/op
+BenchmarkUint64/gen=Go1   	368840367	         3.226 ns/op
+BenchmarkUint64/gen=Go1   	372198487	         3.228 ns/op
+BenchmarkUint64/gen=Go1   	372201597	         3.225 ns/op
+BenchmarkUint64/gen=Go1   	372244087	         3.243 ns/op
+BenchmarkUint64/gen=Go1   	369169668	         3.229 ns/op
+BenchmarkUint64/gen=Go1   	372093981	         3.241 ns/op
+BenchmarkUint64/gen=PCG   	149353017	         8.034 ns/op
+BenchmarkUint64/gen=PCG   	149409340	         8.030 ns/op
+BenchmarkUint64/gen=PCG   	149441238	         8.032 ns/op
+BenchmarkUint64/gen=PCG   	149391726	         8.033 ns/op
+BenchmarkUint64/gen=PCG   	149447098	         8.030 ns/op
+BenchmarkUint64/gen=PCG   	149349818	         8.028 ns/op
+BenchmarkUint64/gen=PCG   	149371790	         8.032 ns/op
+BenchmarkUint64/gen=PCG   	149369576	         8.035 ns/op
+BenchmarkUint64/gen=PCG   	149416461	         8.033 ns/op
+BenchmarkUint64/gen=PCG   	149371762	         8.030 ns/op
+BenchmarkUint64/gen=PCG   	149400506	         8.034 ns/op
+BenchmarkUint64/gen=PCG   	149455407	         8.034 ns/op
+BenchmarkUint64/gen=PCG   	149325634	         8.034 ns/op
+BenchmarkUint64/gen=PCG   	149366830	         8.029 ns/op
+BenchmarkUint64/gen=PCG   	149382729	         8.033 ns/op
+BenchmarkUint64/gen=PCG   	149438006	         8.028 ns/op
+BenchmarkUint64/gen=PCG   	149400940	         8.035 ns/op
+BenchmarkUint64/gen=PCG   	149411772	         8.032 ns/op
+BenchmarkUint64/gen=PCG   	149415658	         8.033 ns/op
+BenchmarkUint64/gen=PCG   	149381407	         8.033 ns/op
+BenchmarkUint64/gen=ChaCha8         	200577669	         6.000 ns/op
+BenchmarkUint64/gen=ChaCha8         	199992111	         5.983 ns/op
+BenchmarkUint64/gen=ChaCha8         	199990521	         5.993 ns/op
+BenchmarkUint64/gen=ChaCha8         	199631865	         5.980 ns/op
+BenchmarkUint64/gen=ChaCha8         	200478723	         6.020 ns/op
+BenchmarkUint64/gen=ChaCha8         	200749365	         6.016 ns/op
+BenchmarkUint64/gen=ChaCha8         	199953696	         5.983 ns/op
+BenchmarkUint64/gen=ChaCha8         	200691408	         6.010 ns/op
+BenchmarkUint64/gen=ChaCha8         	200177230	         5.980 ns/op
+BenchmarkUint64/gen=ChaCha8         	200200404	         5.980 ns/op
+BenchmarkUint64/gen=ChaCha8         	200362344	         5.983 ns/op
+BenchmarkUint64/gen=ChaCha8         	200442160	         5.997 ns/op
+BenchmarkUint64/gen=ChaCha8         	200713618	         6.003 ns/op
+BenchmarkUint64/gen=ChaCha8         	199752451	         5.997 ns/op
+BenchmarkUint64/gen=ChaCha8         	200572332	         5.984 ns/op
+BenchmarkUint64/gen=ChaCha8         	199819304	         5.999 ns/op
+BenchmarkUint64/gen=ChaCha8         	200263951	         5.985 ns/op
+BenchmarkUint64/gen=ChaCha8         	200814261	         6.003 ns/op
+BenchmarkUint64/gen=ChaCha8         	200454280	         5.975 ns/op
+BenchmarkUint64/gen=ChaCha8         	199673905	         5.993 ns/op
+BenchmarkN1000/gen=Go1              	83400441	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83515930	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83428621	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83492007	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83497887	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83443554	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83437218	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83530674	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83473562	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83460934	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83529801	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83469254	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83497654	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83482285	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83478853	        14.37 ns/op
+BenchmarkN1000/gen=Go1              	83536268	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83540048	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83432860	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83082889	        14.36 ns/op
+BenchmarkN1000/gen=Go1              	83538826	        14.36 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.38 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.38 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.38 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.36 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.38 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.36 ns/op
+BenchmarkN1000/gen=PCG              	100000000	        10.37 ns/op
+BenchmarkN1000/gen=ChaCha8          	143198302	         8.372 ns/op
+BenchmarkN1000/gen=ChaCha8          	143470443	         8.380 ns/op
+BenchmarkN1000/gen=ChaCha8          	143361962	         8.371 ns/op
+BenchmarkN1000/gen=ChaCha8          	143330941	         8.373 ns/op
+BenchmarkN1000/gen=ChaCha8          	143247370	         8.370 ns/op
+BenchmarkN1000/gen=ChaCha8          	143326212	         8.373 ns/op
+BenchmarkN1000/gen=ChaCha8          	143218791	         8.372 ns/op
+BenchmarkN1000/gen=ChaCha8          	143333646	         8.370 ns/op
+BenchmarkN1000/gen=ChaCha8          	143298798	         8.371 ns/op
+BenchmarkN1000/gen=ChaCha8          	143441259	         8.378 ns/op
+BenchmarkN1000/gen=ChaCha8          	143302407	         8.364 ns/op
+BenchmarkN1000/gen=ChaCha8          	143364254	         8.375 ns/op
+BenchmarkN1000/gen=ChaCha8          	143303527	         8.368 ns/op
+BenchmarkN1000/gen=ChaCha8          	143288781	         8.374 ns/op
+BenchmarkN1000/gen=ChaCha8          	143247045	         8.371 ns/op
+BenchmarkN1000/gen=ChaCha8          	143374738	         8.373 ns/op
+BenchmarkN1000/gen=ChaCha8          	143524699	         8.375 ns/op
+BenchmarkN1000/gen=ChaCha8          	143349778	         8.377 ns/op
+BenchmarkN1000/gen=ChaCha8          	143404096	         8.370 ns/op
+BenchmarkN1000/gen=ChaCha8          	143369899	         8.369 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54283470	        22.13 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54195709	        22.17 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	53993539	        22.18 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54094010	        22.20 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54191685	        22.23 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54155834	        22.17 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54193672	        22.18 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54060094	        22.15 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54276430	        22.21 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54260673	        22.18 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54093836	        22.21 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54166075	        22.18 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54211479	        22.15 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54107127	        22.11 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54266840	        22.10 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54214569	        22.22 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54153266	        22.09 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54213073	        22.21 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54210178	        22.15 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	54070245	        22.22 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.08 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.07 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.07 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.07 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.05 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.08 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.07 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.08 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.07 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.11 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.07 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.10 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.09 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.06 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.07 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.06 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.09 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.09 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.07 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	100000000	        11.07 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	213589239	         5.570 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	215726096	         5.589 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216012300	         5.547 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216579532	         5.549 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216359286	         5.545 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216779208	         5.608 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216562724	         5.555 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	211874968	         5.556 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216541128	         5.552 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216959552	         5.602 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	214148059	         5.574 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216070479	         5.566 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	211184593	         5.558 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216068038	         5.563 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216591391	         5.559 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216970545	         5.557 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216575773	         5.571 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	215282755	         5.581 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216774338	         5.555 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	216467674	         5.556 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	422375577	         2.794 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	430524553	         2.802 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	420156876	         2.803 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	428463091	         2.801 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	427142161	         2.815 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	429419977	         2.800 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	429720081	         2.812 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	428804748	         2.804 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	418233612	         2.813 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	410259130	         2.818 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	415574484	         2.815 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	425925901	         2.800 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	426972046	         2.812 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	426460935	         2.826 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	428352288	         2.813 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	419073002	         2.833 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	416611096	         2.811 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	419319380	         2.815 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	426964832	         2.798 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	429853714	         2.798 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55527889	        21.68 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55575062	        21.66 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55555087	        21.53 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55630068	        21.53 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55606388	        21.61 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55552226	        21.53 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55628856	        21.61 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55613385	        21.54 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55618110	        21.54 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55635031	        21.53 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55558489	        21.56 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55637356	        21.56 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55620512	        21.53 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55572844	        21.55 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55581794	        21.56 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55619713	        21.54 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55599418	        21.57 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55609458	        21.53 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55596913	        21.55 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	55618368	        21.53 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	38068642	        29.77 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	42381316	        30.63 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	42481038	        29.61 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	42936603	        30.35 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	42987412	        33.54 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	42413119	        30.24 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	39944634	        29.66 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	40173698	        30.07 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	35704620	        29.51 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	41603233	        29.96 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	40767129	        29.41 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	40778844	        30.21 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	44780362	        30.63 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	41221465	        30.38 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	39867688	        29.96 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	44539323	        30.12 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	34867881	        30.17 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	42950690	        29.77 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	43601059	        29.30 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	42884702	        29.13 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	21418263	        56.05 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	19959469	        56.43 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	22390783	        55.04 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	20835304	        57.16 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	20873750	        57.83 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	21230052	        56.67 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	20766681	        56.68 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	22698384	        56.95 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	20828822	        56.60 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	20443060	        56.65 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	21371070	        57.37 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	21865934	        57.52 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	21294220	        56.34 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	21161474	        56.92 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	21146062	        57.29 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	20870292	        52.00 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	23146081	        54.76 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	21047216	        53.32 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	19870755	        57.46 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	20774079	        54.13 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	14426322	        85.82 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	13922346	        85.85 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	14152882	        84.10 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	13707800	        85.70 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	13832228	        84.87 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	13983607	        85.37 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	13705869	        84.71 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	14112175	        85.76 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	13753612	        85.38 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	13878420	        85.30 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	14093458	        84.94 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	14453456	        83.22 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	19682448	        72.88 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	13160859	        85.91 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	13626559	        86.40 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	13010709	        85.76 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	14009092	        85.06 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	14098152	        86.07 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	13618712	        83.80 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	14046798	        86.09 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.62 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.66 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.66 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.66 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.65 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.67 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.66 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.65 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.65 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.66 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.70 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.66 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.66 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.66 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.68 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.68 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.65 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.65 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.67 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	100000000	        10.66 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	225286105	         5.353 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224269934	         5.342 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	225259950	         5.341 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	225585070	         5.345 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	225525536	         5.326 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	225306049	         5.340 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224585113	         5.339 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224946104	         5.351 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224430330	         5.338 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224824210	         5.346 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	225213012	         5.344 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224816686	         5.343 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224602834	         5.326 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224801547	         5.353 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224424290	         5.337 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	225141699	         5.345 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	225308749	         5.334 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224974623	         5.343 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224700372	         5.341 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	224813598	         5.341 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	450437491	         2.666 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	448269469	         2.678 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	430499469	         2.671 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	426820728	         2.673 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	448204987	         2.702 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	449522893	         2.692 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	449964199	         2.724 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	429150966	         2.672 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	446759997	         2.703 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	448888323	         2.682 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	448785386	         2.675 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	449956492	         2.672 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	448619509	         2.677 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	447485872	         2.673 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	448265174	         2.680 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	449962070	         2.674 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	448678986	         2.679 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	447329626	         2.683 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	450132916	         2.681 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	449477042	         2.787 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	894135829	         1.349 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	851244721	         1.348 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	881763650	         1.347 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	820856227	         1.348 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	892103878	         1.350 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	853730787	         1.359 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	892365624	         1.348 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	887357164	         1.349 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	892706485	         1.350 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	833732042	         1.348 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	890371144	         1.356 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	890587430	         1.351 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	892021827	         1.348 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	851409852	         1.348 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	848138221	         1.355 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	883129353	         1.347 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	891411186	         1.351 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	848816944	         1.352 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	885292789	         1.353 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	892320806	         1.347 ns/op
+PASS
diff --git a/_content/blog/chacha8rand/intel.svg b/_content/blog/chacha8rand/intel.svg
new file mode 100644
index 0000000..e5bff68
--- /dev/null
+++ b/_content/blog/chacha8rand/intel.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg height="170" width="400" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+  <defs>
+    <style type="text/css"><![CDATA[
+      text {
+        font-family: sans-serif, Arial;
+        font-size: 12px;
+      }
+      text.head {
+        font-weight: bold;
+        font-size: 14px;
+      }
+    ]]></style>
+  </defs>
+<text x='0' y='25' class='head'><tspan dx='5' dy='-0.5em'>11th Gen Intel Core i7-1185G7</tspan></text>
+<rect x='5' y='25' height='20' width='66' fill='#ffaaaa' stroke='black' />
+<text x='68' y='45' text-anchor='end'><tspan dy='-0.5em'>2.7ns</tspan></text>
+<text x='76' y='45'><tspan dy='-0.5em'>Go 1: Uint64</tspan></text>
+<rect x='5' y='45' height='20' width='61' fill='#ccccff' stroke='black' />
+<text x='63' y='65' text-anchor='end'><tspan dy='-0.5em'>2.5ns</tspan></text>
+<text x='71' y='65'><tspan dy='-0.5em'>PCG: Uint64</tspan></text>
+<rect x='5' y='65' height='20' width='105' fill='#ffffaa' stroke='black' />
+<text x='107' y='85' text-anchor='end'><tspan dy='-0.5em'>4.2ns</tspan></text>
+<text x='115' y='85'><tspan dy='-0.5em'>ChaCha8: Uint64</tspan></text>
+<rect x='5' y='95' height='20' width='121' fill='#ffaaaa' stroke='black' />
+<text x='123' y='115' text-anchor='end'><tspan dy='-0.5em'>4.8ns</tspan></text>
+<text x='131' y='115'><tspan dy='-0.5em'>Go 1: N(1000)</tspan></text>
+<rect x='5' y='115' height='20' width='97' fill='#ccccff' stroke='black' />
+<text x='99' y='135' text-anchor='end'><tspan dy='-0.5em'>3.9ns</tspan></text>
+<text x='107' y='135'><tspan dy='-0.5em'>PCG: N(1000)</tspan></text>
+<rect x='5' y='135' height='20' width='143' fill='#ffffaa' stroke='black' />
+<text x='145' y='155' text-anchor='end'><tspan dy='-0.5em'>5.7ns</tspan></text>
+<text x='10' y='155'><tspan dy='-0.5em'>ChaCha8: N(1000)</tspan></text>
+</svg>
diff --git a/_content/blog/chacha8rand/intel.txt b/_content/blog/chacha8rand/intel.txt
new file mode 100644
index 0000000..476409f
--- /dev/null
+++ b/_content/blog/chacha8rand/intel.txt
@@ -0,0 +1,365 @@
+goos: linux
+goarch: amd64
+pkg: randtest
+cpu: 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
+BenchmarkUint64/gen=Go1  	436149261	         2.656 ns/op
+BenchmarkUint64/gen=Go1  	480019663	         2.698 ns/op
+BenchmarkUint64/gen=Go1  	475358106	         2.503 ns/op
+BenchmarkUint64/gen=Go1  	442996598	         2.633 ns/op
+BenchmarkUint64/gen=Go1  	432835921	         2.524 ns/op
+BenchmarkUint64/gen=Go1  	438325593	         2.527 ns/op
+BenchmarkUint64/gen=Go1  	456904735	         2.591 ns/op
+BenchmarkUint64/gen=Go1  	470741092	         2.819 ns/op
+BenchmarkUint64/gen=Go1  	460721596	         2.627 ns/op
+BenchmarkUint64/gen=Go1  	454786354	         2.900 ns/op
+BenchmarkUint64/gen=Go1  	417437716	         2.600 ns/op
+BenchmarkUint64/gen=Go1  	452856316	         2.609 ns/op
+BenchmarkUint64/gen=Go1  	454681638	         2.921 ns/op
+BenchmarkUint64/gen=Go1  	464961704	         2.720 ns/op
+BenchmarkUint64/gen=Go1  	453813470	         2.614 ns/op
+BenchmarkUint64/gen=Go1  	415833876	         2.625 ns/op
+BenchmarkUint64/gen=Go1  	455540632	         2.718 ns/op
+BenchmarkUint64/gen=Go1  	455852592	         2.754 ns/op
+BenchmarkUint64/gen=Go1  	459402710	         2.748 ns/op
+BenchmarkUint64/gen=Go1  	458785825	         2.751 ns/op
+BenchmarkUint64/gen=PCG  	530420930	         2.387 ns/op
+BenchmarkUint64/gen=PCG  	518263710	         2.307 ns/op
+BenchmarkUint64/gen=PCG  	518141296	         2.578 ns/op
+BenchmarkUint64/gen=PCG  	470295622	         2.342 ns/op
+BenchmarkUint64/gen=PCG  	505848078	         2.424 ns/op
+BenchmarkUint64/gen=PCG  	492352374	         2.578 ns/op
+BenchmarkUint64/gen=PCG  	486658026	         2.426 ns/op
+BenchmarkUint64/gen=PCG  	484925206	         2.589 ns/op
+BenchmarkUint64/gen=PCG  	491887735	         2.457 ns/op
+BenchmarkUint64/gen=PCG  	467795222	         2.446 ns/op
+BenchmarkUint64/gen=PCG  	467133160	         2.435 ns/op
+BenchmarkUint64/gen=PCG  	459490864	         2.455 ns/op
+BenchmarkUint64/gen=PCG  	488564179	         2.441 ns/op
+BenchmarkUint64/gen=PCG  	465279416	         2.430 ns/op
+BenchmarkUint64/gen=PCG  	491153704	         2.440 ns/op
+BenchmarkUint64/gen=PCG  	479651137	         2.436 ns/op
+BenchmarkUint64/gen=PCG  	489214768	         2.469 ns/op
+BenchmarkUint64/gen=PCG  	487564098	         2.625 ns/op
+BenchmarkUint64/gen=PCG  	516585642	         2.646 ns/op
+BenchmarkUint64/gen=PCG  	498106208	         2.453 ns/op
+BenchmarkUint64/gen=ChaCha8         	282307276	         4.166 ns/op
+BenchmarkUint64/gen=ChaCha8         	286550301	         4.464 ns/op
+BenchmarkUint64/gen=ChaCha8         	287614020	         4.437 ns/op
+BenchmarkUint64/gen=ChaCha8         	301871100	         4.223 ns/op
+BenchmarkUint64/gen=ChaCha8         	283068900	         4.341 ns/op
+BenchmarkUint64/gen=ChaCha8         	295987352	         4.311 ns/op
+BenchmarkUint64/gen=ChaCha8         	278071357	         4.103 ns/op
+BenchmarkUint64/gen=ChaCha8         	290765349	         4.290 ns/op
+BenchmarkUint64/gen=ChaCha8         	290488887	         4.262 ns/op
+BenchmarkUint64/gen=ChaCha8         	289824722	         4.252 ns/op
+BenchmarkUint64/gen=ChaCha8         	279374494	         4.261 ns/op
+BenchmarkUint64/gen=ChaCha8         	289523083	         4.128 ns/op
+BenchmarkUint64/gen=ChaCha8         	288982600	         4.116 ns/op
+BenchmarkUint64/gen=ChaCha8         	282574383	         4.130 ns/op
+BenchmarkUint64/gen=ChaCha8         	287740537	         4.222 ns/op
+BenchmarkUint64/gen=ChaCha8         	290783871	         4.211 ns/op
+BenchmarkUint64/gen=ChaCha8         	287406134	         4.097 ns/op
+BenchmarkUint64/gen=ChaCha8         	290829266	         4.099 ns/op
+BenchmarkUint64/gen=ChaCha8         	290004253	         4.190 ns/op
+BenchmarkUint64/gen=ChaCha8         	288885505	         4.100 ns/op
+BenchmarkN1000/gen=Go1              	251183932	         4.931 ns/op
+BenchmarkN1000/gen=Go1              	250341096	         4.762 ns/op
+BenchmarkN1000/gen=Go1              	242935207	         4.800 ns/op
+BenchmarkN1000/gen=Go1              	250998847	         4.944 ns/op
+BenchmarkN1000/gen=Go1              	243694027	         4.960 ns/op
+BenchmarkN1000/gen=Go1              	248946848	         4.936 ns/op
+BenchmarkN1000/gen=Go1              	246924204	         4.780 ns/op
+BenchmarkN1000/gen=Go1              	249599152	         4.986 ns/op
+BenchmarkN1000/gen=Go1              	247641769	         4.810 ns/op
+BenchmarkN1000/gen=Go1              	248824848	         4.899 ns/op
+BenchmarkN1000/gen=Go1              	242688060	         4.788 ns/op
+BenchmarkN1000/gen=Go1              	251056945	         4.933 ns/op
+BenchmarkN1000/gen=Go1              	246579579	         4.781 ns/op
+BenchmarkN1000/gen=Go1              	251057044	         4.778 ns/op
+BenchmarkN1000/gen=Go1              	251118888	         4.777 ns/op
+BenchmarkN1000/gen=Go1              	247406551	         4.754 ns/op
+BenchmarkN1000/gen=Go1              	251010050	         4.767 ns/op
+BenchmarkN1000/gen=Go1              	251778279	         4.859 ns/op
+BenchmarkN1000/gen=Go1              	251145460	         4.768 ns/op
+BenchmarkN1000/gen=Go1              	249336576	         4.834 ns/op
+BenchmarkN1000/gen=PCG              	305766882	         3.847 ns/op
+BenchmarkN1000/gen=PCG              	306649372	         3.823 ns/op
+BenchmarkN1000/gen=PCG              	312522561	         3.980 ns/op
+BenchmarkN1000/gen=PCG              	312156991	         3.850 ns/op
+BenchmarkN1000/gen=PCG              	308484327	         3.995 ns/op
+BenchmarkN1000/gen=PCG              	298843122	         3.836 ns/op
+BenchmarkN1000/gen=PCG              	307939028	         4.039 ns/op
+BenchmarkN1000/gen=PCG              	299383348	         3.880 ns/op
+BenchmarkN1000/gen=PCG              	313467501	         3.822 ns/op
+BenchmarkN1000/gen=PCG              	311956076	         3.830 ns/op
+BenchmarkN1000/gen=PCG              	309709939	         3.854 ns/op
+BenchmarkN1000/gen=PCG              	298318993	         3.829 ns/op
+BenchmarkN1000/gen=PCG              	309628544	         4.001 ns/op
+BenchmarkN1000/gen=PCG              	311175416	         3.828 ns/op
+BenchmarkN1000/gen=PCG              	312210010	         3.829 ns/op
+BenchmarkN1000/gen=PCG              	301387156	         3.826 ns/op
+BenchmarkN1000/gen=PCG              	307595546	         3.994 ns/op
+BenchmarkN1000/gen=PCG              	295382478	         3.869 ns/op
+BenchmarkN1000/gen=PCG              	308788447	         3.859 ns/op
+BenchmarkN1000/gen=PCG              	305520110	         3.840 ns/op
+BenchmarkN1000/gen=ChaCha8          	207213154	         5.813 ns/op
+BenchmarkN1000/gen=ChaCha8          	209254837	         5.829 ns/op
+BenchmarkN1000/gen=ChaCha8          	206958278	         5.818 ns/op
+BenchmarkN1000/gen=ChaCha8          	208763868	         5.695 ns/op
+BenchmarkN1000/gen=ChaCha8          	207762112	         5.687 ns/op
+BenchmarkN1000/gen=ChaCha8          	208399297	         5.691 ns/op
+BenchmarkN1000/gen=ChaCha8          	209910385	         5.690 ns/op
+BenchmarkN1000/gen=ChaCha8          	208681747	         5.695 ns/op
+BenchmarkN1000/gen=ChaCha8          	208997820	         5.829 ns/op
+BenchmarkN1000/gen=ChaCha8          	209400973	         5.666 ns/op
+BenchmarkN1000/gen=ChaCha8          	210770055	         5.690 ns/op
+BenchmarkN1000/gen=ChaCha8          	206244123	         5.681 ns/op
+BenchmarkN1000/gen=ChaCha8          	210359781	         5.691 ns/op
+BenchmarkN1000/gen=ChaCha8          	209800567	         5.829 ns/op
+BenchmarkN1000/gen=ChaCha8          	209054086	         5.839 ns/op
+BenchmarkN1000/gen=ChaCha8          	209088144	         5.895 ns/op
+BenchmarkN1000/gen=ChaCha8          	209122225	         5.677 ns/op
+BenchmarkN1000/gen=ChaCha8          	209745876	         5.815 ns/op
+BenchmarkN1000/gen=ChaCha8          	206339786	         5.719 ns/op
+BenchmarkN1000/gen=ChaCha8          	207038253	         5.715 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.05 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.26 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.28 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.26 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	121564122	        10.08 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	122184573	         9.896 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	120571216	        10.35 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.12 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.12 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.43 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.13 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.15 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	122038940	        10.12 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.31 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.17 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.42 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	100000000	        10.12 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	121020603	         9.832 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	121232760	        10.06 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	121695771	         9.909 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	208181632	         6.145 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	196336346	         5.998 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	193921022	         5.904 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	196289947	         5.889 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	198445891	         5.950 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	199377480	         6.035 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	193679656	         5.968 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	196101483	         6.077 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	198346352	         6.074 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	200462896	         5.955 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	200280913	         6.024 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	200052454	         6.019 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	201810616	         6.019 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	196724046	         6.197 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	184044386	         5.941 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	198800257	         6.176 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	189896362	         7.028 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	166573485	         7.091 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	162222580	         7.506 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	193160742	         6.012 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	330348711	         4.022 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	295452715	         4.105 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	287366962	         4.077 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	266847720	         4.071 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	286092572	         4.160 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	286074561	         4.070 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	288181815	         4.030 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	285736814	         4.214 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	286982382	         4.054 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	282569384	         4.082 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	278115906	         4.187 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	277827867	         4.051 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	283946516	         4.125 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	281099088	         4.023 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	286738914	         4.047 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	287893564	         4.012 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	277413362	         4.076 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	291286927	         4.129 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	296759478	         4.044 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	287062783	         4.146 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	335993431	         3.721 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	299661964	         3.867 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	288584877	         3.791 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	292066426	         3.807 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	321131377	         4.079 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	282122676	         4.512 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	258482367	         4.246 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	281636467	         4.347 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	274872669	         4.613 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	242648113	         4.788 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	277057204	         4.504 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	257256415	         4.387 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	301910164	         3.851 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	332125892	         3.862 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	302637520	         3.993 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	286173775	         4.049 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	309899122	         3.964 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	291456481	         4.075 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	321424089	         3.818 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	331866571	         3.925 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	69992695	        14.65 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	82836612	        14.00 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	86443946	        14.06 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	83061727	        14.15 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	84331656	        14.61 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	85312117	        13.96 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	84069754	        14.67 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	84674769	        13.95 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	83299122	        14.02 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	84512397	        14.67 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	81926982	        17.52 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	67629800	        17.62 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	75415392	        17.70 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	60223032	        16.67 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	80757907	        14.70 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	81841867	        14.76 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	80905788	        14.35 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	81388834	        14.49 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	80360582	        14.40 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	82666495	        14.75 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	52425314	        23.55 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	53200629	        23.13 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	56018210	        22.96 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	53731107	        21.58 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	56007361	        22.38 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	53647406	        23.22 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	54940868	        22.60 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	56118441	        22.98 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	49541262	        23.26 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	54630172	        21.88 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	52945526	        22.73 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	52012628	        22.57 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	47678624	        22.99 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	51436125	        23.25 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	47517085	        22.90 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	52566636	        23.41 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	54926089	        22.55 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	51202389	        24.34 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	47801845	        23.19 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	51243265	        22.13 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	27191900	        46.27 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25877389	        47.48 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25154056	        47.31 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25394958	        46.57 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25165254	        46.87 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25746432	        47.31 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25688688	        45.97 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	24878947	        47.03 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25528429	        46.74 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25463002	        46.43 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25014998	        46.16 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25451460	        46.55 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25794714	        47.29 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	24384193	        46.39 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25067740	        45.75 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25728037	        46.60 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25372083	        46.86 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25673646	        46.28 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	24918680	        47.72 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	25188308	        45.73 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	18573051	        67.78 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17463746	        68.96 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17262318	        69.06 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17344612	        68.85 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17626209	        68.38 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17472211	        68.36 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17502484	        68.44 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17265894	        68.32 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17863947	        68.22 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17711840	        68.16 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17516298	        68.46 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17482797	        68.97 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17604813	        68.61 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17769931	        68.86 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17424687	        67.85 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17239839	        68.65 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17299294	        67.94 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17721722	        68.42 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17245218	        68.86 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	17462570	        69.45 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	172652553	         6.539 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	178868865	         6.547 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	179347862	         6.667 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	181307997	         6.653 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	177279594	         6.539 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	177842702	         6.689 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	177756927	         6.914 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	176360196	         6.988 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	171004682	         6.606 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	172775119	         6.580 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	177865905	         6.677 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	180889674	         6.560 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	173072374	         6.552 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	182286099	         6.687 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	178229449	         6.515 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	173255811	         6.553 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	171345114	         6.551 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	181195952	         6.538 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	181431156	         6.986 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	171530257	         6.495 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	307798735	         4.202 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	289693838	         4.130 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	288219416	         4.202 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	285232530	         4.139 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	289161440	         4.165 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	286150276	         4.169 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	293759308	         4.057 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	294583316	         4.123 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	284896767	         4.124 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	293408432	         4.124 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	286848164	         4.068 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	287498232	         4.093 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	288040803	         4.197 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	284439566	         4.204 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	283953016	         4.116 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	289504767	         4.135 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	283681508	         4.164 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	292501617	         4.173 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	271325784	         4.067 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	287534554	         4.105 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	468755899	         2.728 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	429521190	         2.855 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	413872390	         2.807 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	400241012	         2.818 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	390194790	         2.759 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	415233708	         2.819 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	421127184	         2.762 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	384497576	         2.738 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	402970855	         2.788 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	397371697	         2.752 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	411855042	         2.776 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	404868033	         2.779 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	416062484	         2.751 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	399339963	         2.769 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	425195881	         2.768 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	425327466	         2.759 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	415325266	         2.795 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	398750366	         2.787 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	424328752	         2.775 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	399354784	         2.815 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	473677053	         2.560 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	460510476	         2.564 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	455714691	         2.552 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	457948490	         2.585 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	460344309	         2.554 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	460172287	         2.562 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	458867004	         2.570 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	458878399	         2.558 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	454679448	         2.635 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	461848224	         2.566 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	457160178	         2.600 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	458290054	         2.598 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	458549030	         2.570 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	435960618	         2.602 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	459965470	         2.571 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	459527672	         2.599 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	461059579	         2.550 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	440442795	         2.548 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	458244168	         2.596 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	462100503	         2.557 ns/op
+PASS
diff --git a/_content/blog/chacha8rand/intel32.svg b/_content/blog/chacha8rand/intel32.svg
new file mode 100644
index 0000000..23367fa
--- /dev/null
+++ b/_content/blog/chacha8rand/intel32.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg height="170" width="400" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+  <defs>
+    <style type="text/css"><![CDATA[
+      text {
+        font-family: sans-serif, Arial;
+        font-size: 12px;
+      }
+      text.head {
+        font-weight: bold;
+        font-size: 14px;
+      }
+    ]]></style>
+  </defs>
+<text x='0' y='25' class='head'><tspan dx='5' dy='-0.5em'>11th Gen Intel Core i7-1185G7 running 32-bit code</tspan></text>
+<rect x='5' y='25' height='20' width='96' fill='#ffaaaa' stroke='black' />
+<text x='98' y='45' text-anchor='end'><tspan dy='-0.5em'>3.8ns</tspan></text>
+<text x='106' y='45'><tspan dy='-0.5em'>Go 1: Uint64</tspan></text>
+<rect x='5' y='45' height='20' width='284' fill='#ccccff' stroke='black' />
+<text x='286' y='65' text-anchor='end'><tspan dy='-0.5em'>11.4ns</tspan></text>
+<text x='10' y='65'><tspan dy='-0.5em'>PCG: Uint64</tspan></text>
+<rect x='5' y='65' height='20' width='213' fill='#ffffaa' stroke='black' />
+<text x='215' y='85' text-anchor='end'><tspan dy='-0.5em'>8.5ns</tspan></text>
+<text x='10' y='85'><tspan dy='-0.5em'>ChaCha8: Uint64</tspan></text>
+<rect x='5' y='95' height='20' width='625' fill='#ffaaaa' stroke='black' />
+<text x='392' y='115' text-anchor='end'><tspan dy='-0.5em'>25.0ns</tspan></text>
+<text x='10' y='115'><tspan dy='-0.5em'>Go 1: N(1000)</tspan></text>
+<rect x='5' y='115' height='20' width='373' fill='#ccccff' stroke='black' />
+<text x='375' y='135' text-anchor='end'><tspan dy='-0.5em'>14.9ns</tspan></text>
+<text x='10' y='135'><tspan dy='-0.5em'>PCG: N(1000)</tspan></text>
+<rect x='5' y='135' height='20' width='294' fill='#ffffaa' stroke='black' />
+<text x='296' y='155' text-anchor='end'><tspan dy='-0.5em'>11.8ns</tspan></text>
+<text x='10' y='155'><tspan dy='-0.5em'>ChaCha8: N(1000)</tspan></text>
+</svg>
diff --git a/_content/blog/chacha8rand/intel32.txt b/_content/blog/chacha8rand/intel32.txt
new file mode 100644
index 0000000..9ef67c3
--- /dev/null
+++ b/_content/blog/chacha8rand/intel32.txt
@@ -0,0 +1,365 @@
+goos: linux
+goarch: 386
+pkg: randtest
+cpu: 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
+BenchmarkUint64/gen=Go1  	310236878	         3.585 ns/op
+BenchmarkUint64/gen=Go1  	332838411	         3.984 ns/op
+BenchmarkUint64/gen=Go1  	298234956	         3.628 ns/op
+BenchmarkUint64/gen=Go1  	325387472	         4.022 ns/op
+BenchmarkUint64/gen=Go1  	328728834	         3.727 ns/op
+BenchmarkUint64/gen=Go1  	299209365	         3.736 ns/op
+BenchmarkUint64/gen=Go1  	298636105	         3.849 ns/op
+BenchmarkUint64/gen=Go1  	289409551	         3.696 ns/op
+BenchmarkUint64/gen=Go1  	314631790	         3.730 ns/op
+BenchmarkUint64/gen=Go1  	293297967	         3.730 ns/op
+BenchmarkUint64/gen=Go1  	291562651	         3.841 ns/op
+BenchmarkUint64/gen=Go1  	285489534	         3.901 ns/op
+BenchmarkUint64/gen=Go1  	318144854	         4.201 ns/op
+BenchmarkUint64/gen=Go1  	315131691	         4.220 ns/op
+BenchmarkUint64/gen=Go1  	280163476	         3.967 ns/op
+BenchmarkUint64/gen=Go1  	322733989	         3.808 ns/op
+BenchmarkUint64/gen=Go1  	314619548	         3.918 ns/op
+BenchmarkUint64/gen=Go1  	304683948	         3.816 ns/op
+BenchmarkUint64/gen=Go1  	284080200	         3.826 ns/op
+BenchmarkUint64/gen=Go1  	305939929	         3.777 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        10.70 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        10.84 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.04 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.50 ns/op
+BenchmarkUint64/gen=PCG  	99620388	        11.91 ns/op
+BenchmarkUint64/gen=PCG  	96077053	        11.94 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.45 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.38 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.96 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.32 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.40 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.37 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.43 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.27 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.26 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.27 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.74 ns/op
+BenchmarkUint64/gen=PCG  	97159076	        11.21 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.44 ns/op
+BenchmarkUint64/gen=PCG  	100000000	        11.37 ns/op
+BenchmarkUint64/gen=ChaCha8         	145370481	         8.235 ns/op
+BenchmarkUint64/gen=ChaCha8         	144173784	         8.591 ns/op
+BenchmarkUint64/gen=ChaCha8         	145116001	         8.550 ns/op
+BenchmarkUint64/gen=ChaCha8         	144956100	         8.928 ns/op
+BenchmarkUint64/gen=ChaCha8         	120997957	        10.16 ns/op
+BenchmarkUint64/gen=ChaCha8         	129174708	         8.908 ns/op
+BenchmarkUint64/gen=ChaCha8         	122256921	         9.903 ns/op
+BenchmarkUint64/gen=ChaCha8         	100000000	        10.41 ns/op
+BenchmarkUint64/gen=ChaCha8         	126693458	         9.067 ns/op
+BenchmarkUint64/gen=ChaCha8         	137775050	         8.623 ns/op
+BenchmarkUint64/gen=ChaCha8         	145022503	         8.521 ns/op
+BenchmarkUint64/gen=ChaCha8         	145810646	         8.225 ns/op
+BenchmarkUint64/gen=ChaCha8         	143206749	         8.208 ns/op
+BenchmarkUint64/gen=ChaCha8         	144909116	         8.265 ns/op
+BenchmarkUint64/gen=ChaCha8         	145124754	         8.482 ns/op
+BenchmarkUint64/gen=ChaCha8         	145989057	         8.491 ns/op
+BenchmarkUint64/gen=ChaCha8         	145955394	         8.180 ns/op
+BenchmarkUint64/gen=ChaCha8         	145562198	         8.164 ns/op
+BenchmarkUint64/gen=ChaCha8         	141988984	         8.227 ns/op
+BenchmarkUint64/gen=ChaCha8         	141963452	         8.222 ns/op
+BenchmarkN1000/gen=Go1              	48584952	        25.61 ns/op
+BenchmarkN1000/gen=Go1              	48423482	        25.95 ns/op
+BenchmarkN1000/gen=Go1              	44306685	        25.62 ns/op
+BenchmarkN1000/gen=Go1              	47266676	        24.63 ns/op
+BenchmarkN1000/gen=Go1              	47772160	        24.79 ns/op
+BenchmarkN1000/gen=Go1              	47288994	        25.34 ns/op
+BenchmarkN1000/gen=Go1              	47288532	        24.69 ns/op
+BenchmarkN1000/gen=Go1              	48337402	        24.70 ns/op
+BenchmarkN1000/gen=Go1              	48092163	        24.76 ns/op
+BenchmarkN1000/gen=Go1              	44913772	        24.87 ns/op
+BenchmarkN1000/gen=Go1              	48338854	        24.64 ns/op
+BenchmarkN1000/gen=Go1              	48386048	        25.37 ns/op
+BenchmarkN1000/gen=Go1              	47017272	        24.90 ns/op
+BenchmarkN1000/gen=Go1              	49023552	        24.71 ns/op
+BenchmarkN1000/gen=Go1              	47845981	        25.47 ns/op
+BenchmarkN1000/gen=Go1              	46227170	        24.82 ns/op
+BenchmarkN1000/gen=Go1              	48264859	        25.42 ns/op
+BenchmarkN1000/gen=Go1              	42327210	        24.71 ns/op
+BenchmarkN1000/gen=Go1              	47693900	        24.78 ns/op
+BenchmarkN1000/gen=Go1              	49452092	        24.79 ns/op
+BenchmarkN1000/gen=PCG              	81561084	        14.77 ns/op
+BenchmarkN1000/gen=PCG              	80696214	        14.66 ns/op
+BenchmarkN1000/gen=PCG              	81502321	        15.04 ns/op
+BenchmarkN1000/gen=PCG              	82148899	        15.32 ns/op
+BenchmarkN1000/gen=PCG              	84353749	        15.02 ns/op
+BenchmarkN1000/gen=PCG              	76504855	        14.84 ns/op
+BenchmarkN1000/gen=PCG              	83091495	        14.77 ns/op
+BenchmarkN1000/gen=PCG              	79429915	        14.65 ns/op
+BenchmarkN1000/gen=PCG              	80501642	        14.62 ns/op
+BenchmarkN1000/gen=PCG              	79837689	        15.20 ns/op
+BenchmarkN1000/gen=PCG              	83213920	        15.28 ns/op
+BenchmarkN1000/gen=PCG              	80503575	        15.31 ns/op
+BenchmarkN1000/gen=PCG              	86721286	        14.58 ns/op
+BenchmarkN1000/gen=PCG              	80817805	        14.68 ns/op
+BenchmarkN1000/gen=PCG              	82144165	        14.81 ns/op
+BenchmarkN1000/gen=PCG              	80560041	        14.72 ns/op
+BenchmarkN1000/gen=PCG              	81508952	        15.33 ns/op
+BenchmarkN1000/gen=PCG              	80639514	        14.65 ns/op
+BenchmarkN1000/gen=PCG              	77295781	        15.28 ns/op
+BenchmarkN1000/gen=PCG              	78675909	        14.90 ns/op
+BenchmarkN1000/gen=ChaCha8          	94723138	        11.73 ns/op
+BenchmarkN1000/gen=ChaCha8          	97491613	        11.76 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.84 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.86 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.72 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.73 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.77 ns/op
+BenchmarkN1000/gen=ChaCha8          	96885658	        11.85 ns/op
+BenchmarkN1000/gen=ChaCha8          	95480881	        11.85 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        12.16 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.97 ns/op
+BenchmarkN1000/gen=ChaCha8          	97590236	        12.08 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.73 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.70 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.83 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.72 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.86 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        12.18 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.79 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        11.80 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	34605146	        34.34 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	34371721	        34.42 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	30572155	        35.30 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	30952399	        34.16 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	34831476	        37.19 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	34737337	        34.43 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	34285664	        34.07 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	34861201	        34.08 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	34436208	        34.41 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	31700251	        34.19 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	34710444	        37.10 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	35439583	        37.18 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	31005135	        35.08 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	35115408	        34.43 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	31837101	        34.14 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	34710212	        37.06 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	30980521	        35.18 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	35037562	        36.98 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	35637962	        34.22 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	31685060	        34.51 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	67285170	        20.74 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	38967609	        30.15 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	33469290	        36.28 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	34680200	        37.06 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	31080394	        34.88 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	36370231	        34.69 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	39625000	        31.96 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	39915202	        30.15 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	40351436	        32.08 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	38677950	        31.98 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	38259876	        30.55 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	37308992	        31.20 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	40759838	        32.03 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	43437604	        30.07 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	36932040	        30.36 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	41241576	        33.49 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	36862412	        29.86 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	39473557	        31.86 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	39979826	        32.63 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	39818918	        32.16 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	89662188	        14.00 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	51155270	        23.13 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	48610194	        25.60 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	55177682	        24.32 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	46398068	        24.96 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	53389734	        25.79 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	52422652	        22.69 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	45450752	        25.46 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	50887880	        25.47 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	55617460	        22.42 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	52629279	        25.70 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	54341308	        25.72 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	53303504	        25.43 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	51042235	        25.06 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	50315660	        25.03 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	50930179	        25.19 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	46704860	        25.54 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	49754622	        25.34 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	49340294	        24.92 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	57639752	        25.68 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	97543346	        14.38 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	57515425	        20.41 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	64057261	        18.73 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	62823592	        19.96 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	63790854	        19.77 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	58974756	        19.43 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	60772142	        19.75 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	72013694	        19.49 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	69831114	        19.59 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	63929118	        18.66 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	60770690	        18.42 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	61501707	        19.90 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	57937930	        19.63 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	63205144	        19.76 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	63493940	        19.17 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	60817940	        19.80 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	62512162	        19.73 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	61127630	        18.57 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	60885651	        19.35 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	61723339	        19.11 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	31106632	        33.36 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	33283273	        34.45 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	34666820	        34.73 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	35340022	        34.65 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	35236844	        34.64 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	36078363	        33.54 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	35470927	        33.55 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	34271374	        35.90 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	34912861	        33.65 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	35448723	        35.08 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	35981607	        34.79 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	34228774	        34.89 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	35958483	        34.84 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	30411904	        34.88 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	35487165	        34.77 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	35399636	        33.66 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	34027130	        33.66 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	35189541	        33.70 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	34158829	        33.55 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	34678452	        33.66 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	26136361	        46.73 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	28723123	        50.19 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	28173121	        59.34 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	20898032	        59.00 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	26800491	        49.84 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	25544940	        51.81 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	24609952	        47.43 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	26505705	        47.11 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	25555818	        46.86 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	26275183	        46.50 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	25823550	        47.31 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	25116286	        46.98 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	25270855	        46.42 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	31144814	        47.26 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	25738870	        47.29 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	24756081	        45.44 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	25108598	        46.98 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	26063348	        47.58 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	26066718	        45.17 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	25200764	        47.69 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	14573840	        83.94 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	14367390	        86.99 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	14112140	        84.72 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13976674	        86.58 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13601058	        86.48 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	14097874	        86.63 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13739510	        84.12 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	14301259	        84.81 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13498388	        88.46 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13712292	        84.53 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	14012499	        88.02 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13649610	        84.70 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	14406957	        85.87 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13782291	        84.00 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13952542	        84.40 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13744520	        85.23 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13883787	        86.50 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13938579	        85.56 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	14463885	        86.31 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	13672564	        86.82 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9804578	       126.6 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9186406	       126.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9090817	       127.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9167095	       126.1 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9109807	       127.0 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9303398	       126.9 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9146719	       127.1 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9213652	       127.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9152467	       130.3 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9345219	       126.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9088300	       126.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9138619	       127.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9288307	       127.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9043153	       127.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9161022	       127.0 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9242600	       125.3 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9113726	       125.5 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9074158	       126.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9389074	       124.8 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9057013	       128.6 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	67041633	        15.85 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	82876618	        15.09 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	81386775	        14.53 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	82439024	        14.52 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	77389516	        14.71 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	79736968	        15.15 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	79758019	        15.10 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	81269874	        14.66 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	81569888	        15.11 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	81475764	        15.05 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	80117510	        14.49 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	78953809	        15.12 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	74897487	        15.68 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	79045951	        14.54 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	81997401	        14.59 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	78276496	        15.22 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	78723560	        15.02 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	81254977	        15.23 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	78370602	        14.60 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	78456411	        15.13 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	133938334	         9.185 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	128570914	         9.221 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	131604526	         9.087 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	127791061	         9.131 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	129711400	         9.073 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	129251612	         9.047 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	132549811	         9.082 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	131153866	         9.002 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	131594293	         9.143 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	130231526	         9.521 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	100000000	        10.88 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	116732770	        10.64 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	120354512	        10.05 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	114667270	         9.687 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	129849452	         9.073 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	131152192	         9.013 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	131397604	         9.059 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	129757438	         9.187 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	130947172	         9.070 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	131493350	         9.314 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	212878635	         6.222 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	186772015	         6.241 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	185844243	         6.153 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	192012954	         6.188 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	184259464	         6.200 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	190187030	         6.174 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	186216925	         6.178 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	192033686	         6.233 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	175487704	         7.191 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	191504306	         7.106 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	136051830	         7.576 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	160376085	         6.278 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	192779596	         6.141 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	193848541	         6.117 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	192747231	         6.126 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	190696910	         6.130 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	191304439	         6.131 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	188803216	         6.254 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	191598518	         6.127 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	189429398	         6.135 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	201420337	         6.121 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	196082745	         6.171 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	194678050	         6.174 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	194667609	         6.152 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	193297408	         6.085 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	195313484	         6.048 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	194530964	         6.172 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	195553826	         6.051 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	192203902	         6.145 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	192922167	         6.096 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	193670862	         6.012 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	192735021	         6.162 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	194118482	         6.142 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	195283214	         6.079 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	194807191	         6.055 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	191894031	         6.231 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	193931673	         6.034 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	195550431	         6.088 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	193361000	         6.058 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	197297300	         6.129 ns/op
+PASS
diff --git a/_content/blog/chacha8rand/m1.svg b/_content/blog/chacha8rand/m1.svg
new file mode 100644
index 0000000..bca92a5
--- /dev/null
+++ b/_content/blog/chacha8rand/m1.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg height="170" width="400" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+  <defs>
+    <style type="text/css"><![CDATA[
+      text {
+        font-family: sans-serif, Arial;
+        font-size: 12px;
+      }
+      text.head {
+        font-weight: bold;
+        font-size: 14px;
+      }
+    ]]></style>
+  </defs>
+<text x='0' y='25' class='head'><tspan dx='5' dy='-0.5em'>Apple M1</tspan></text>
+<rect x='5' y='25' height='20' width='62' fill='#ffaaaa' stroke='black' />
+<text x='64' y='45' text-anchor='end'><tspan dy='-0.5em'>2.5ns</tspan></text>
+<text x='72' y='45'><tspan dy='-0.5em'>Go 1: Uint64</tspan></text>
+<rect x='5' y='45' height='20' width='104' fill='#ccccff' stroke='black' />
+<text x='106' y='65' text-anchor='end'><tspan dy='-0.5em'>4.2ns</tspan></text>
+<text x='114' y='65'><tspan dy='-0.5em'>PCG: Uint64</tspan></text>
+<rect x='5' y='65' height='20' width='116' fill='#ffffaa' stroke='black' />
+<text x='118' y='85' text-anchor='end'><tspan dy='-0.5em'>4.6ns</tspan></text>
+<text x='126' y='85'><tspan dy='-0.5em'>ChaCha8: Uint64</tspan></text>
+<rect x='5' y='95' height='20' width='76' fill='#ffaaaa' stroke='black' />
+<text x='78' y='115' text-anchor='end'><tspan dy='-0.5em'>3.1ns</tspan></text>
+<text x='86' y='115'><tspan dy='-0.5em'>Go 1: N(1000)</tspan></text>
+<rect x='5' y='115' height='20' width='102' fill='#ccccff' stroke='black' />
+<text x='104' y='135' text-anchor='end'><tspan dy='-0.5em'>4.1ns</tspan></text>
+<text x='112' y='135'><tspan dy='-0.5em'>PCG: N(1000)</tspan></text>
+<rect x='5' y='135' height='20' width='121' fill='#ffffaa' stroke='black' />
+<text x='123' y='155' text-anchor='end'><tspan dy='-0.5em'>4.9ns</tspan></text>
+<text x='131' y='155'><tspan dy='-0.5em'>ChaCha8: N(1000)</tspan></text>
+</svg>
diff --git a/_content/blog/chacha8rand/m1.txt b/_content/blog/chacha8rand/m1.txt
new file mode 100644
index 0000000..1fd84c1
--- /dev/null
+++ b/_content/blog/chacha8rand/m1.txt
@@ -0,0 +1,365 @@
+goos: darwin
+goarch: arm64
+pkg: randtest
+cpu: Apple M1 Pro
+BenchmarkUint64/gen=Go1   	459038247	         2.480 ns/op
+BenchmarkUint64/gen=Go1   	482946537	         2.451 ns/op
+BenchmarkUint64/gen=Go1   	482933336	         2.570 ns/op
+BenchmarkUint64/gen=Go1   	474254720	         2.523 ns/op
+BenchmarkUint64/gen=Go1   	473248634	         2.526 ns/op
+BenchmarkUint64/gen=Go1   	477388762	         2.505 ns/op
+BenchmarkUint64/gen=Go1   	480948832	         2.522 ns/op
+BenchmarkUint64/gen=Go1   	476743602	         2.531 ns/op
+BenchmarkUint64/gen=Go1   	474830520	         2.565 ns/op
+BenchmarkUint64/gen=Go1   	468395500	         2.522 ns/op
+BenchmarkUint64/gen=Go1   	481696213	         2.461 ns/op
+BenchmarkUint64/gen=Go1   	484085194	         2.468 ns/op
+BenchmarkUint64/gen=Go1   	482813432	         2.445 ns/op
+BenchmarkUint64/gen=Go1   	477989494	         2.508 ns/op
+BenchmarkUint64/gen=Go1   	483186049	         2.527 ns/op
+BenchmarkUint64/gen=Go1   	469008778	         2.523 ns/op
+BenchmarkUint64/gen=Go1   	471916772	         2.538 ns/op
+BenchmarkUint64/gen=Go1   	473054535	         2.554 ns/op
+BenchmarkUint64/gen=Go1   	471814101	         2.527 ns/op
+BenchmarkUint64/gen=Go1   	476288836	         2.518 ns/op
+BenchmarkUint64/gen=PCG   	285597580	         4.187 ns/op
+BenchmarkUint64/gen=PCG   	287637058	         4.170 ns/op
+BenchmarkUint64/gen=PCG   	287512665	         4.160 ns/op
+BenchmarkUint64/gen=PCG   	285601347	         4.201 ns/op
+BenchmarkUint64/gen=PCG   	284428599	         4.203 ns/op
+BenchmarkUint64/gen=PCG   	285354506	         4.205 ns/op
+BenchmarkUint64/gen=PCG   	285786639	         4.186 ns/op
+BenchmarkUint64/gen=PCG   	285428488	         4.183 ns/op
+BenchmarkUint64/gen=PCG   	287914431	         4.171 ns/op
+BenchmarkUint64/gen=PCG   	285900858	         4.190 ns/op
+BenchmarkUint64/gen=PCG   	286465119	         4.203 ns/op
+BenchmarkUint64/gen=PCG   	284216425	         4.218 ns/op
+BenchmarkUint64/gen=PCG   	286007443	         4.177 ns/op
+BenchmarkUint64/gen=PCG   	288256028	         4.182 ns/op
+BenchmarkUint64/gen=PCG   	284846013	         4.211 ns/op
+BenchmarkUint64/gen=PCG   	285176269	         4.205 ns/op
+BenchmarkUint64/gen=PCG   	284892111	         4.210 ns/op
+BenchmarkUint64/gen=PCG   	287306155	         4.197 ns/op
+BenchmarkUint64/gen=PCG   	283381057	         4.205 ns/op
+BenchmarkUint64/gen=PCG   	284846774	         4.194 ns/op
+BenchmarkUint64/gen=ChaCha8         	256325908	         4.737 ns/op
+BenchmarkUint64/gen=ChaCha8         	259835448	         4.776 ns/op
+BenchmarkUint64/gen=ChaCha8         	256105742	         4.742 ns/op
+BenchmarkUint64/gen=ChaCha8         	256777612	         4.728 ns/op
+BenchmarkUint64/gen=ChaCha8         	250844029	         4.700 ns/op
+BenchmarkUint64/gen=ChaCha8         	254119470	         4.659 ns/op
+BenchmarkUint64/gen=ChaCha8         	257531751	         4.741 ns/op
+BenchmarkUint64/gen=ChaCha8         	245294330	         4.801 ns/op
+BenchmarkUint64/gen=ChaCha8         	261129937	         4.547 ns/op
+BenchmarkUint64/gen=ChaCha8         	264982798	         4.610 ns/op
+BenchmarkUint64/gen=ChaCha8         	265796208	         4.602 ns/op
+BenchmarkUint64/gen=ChaCha8         	265899987	         4.598 ns/op
+BenchmarkUint64/gen=ChaCha8         	265069353	         4.586 ns/op
+BenchmarkUint64/gen=ChaCha8         	269105559	         4.581 ns/op
+BenchmarkUint64/gen=ChaCha8         	260925388	         4.554 ns/op
+BenchmarkUint64/gen=ChaCha8         	269689788	         4.582 ns/op
+BenchmarkUint64/gen=ChaCha8         	263342937	         4.587 ns/op
+BenchmarkUint64/gen=ChaCha8         	261144926	         4.604 ns/op
+BenchmarkUint64/gen=ChaCha8         	261922141	         4.564 ns/op
+BenchmarkUint64/gen=ChaCha8         	264669903	         4.611 ns/op
+BenchmarkN1000/gen=Go1              	390983274	         3.074 ns/op
+BenchmarkN1000/gen=Go1              	391178277	         3.066 ns/op
+BenchmarkN1000/gen=Go1              	391096736	         3.065 ns/op
+BenchmarkN1000/gen=Go1              	391588675	         3.065 ns/op
+BenchmarkN1000/gen=Go1              	391422146	         3.056 ns/op
+BenchmarkN1000/gen=Go1              	392373832	         3.056 ns/op
+BenchmarkN1000/gen=Go1              	392431843	         3.056 ns/op
+BenchmarkN1000/gen=Go1              	392376398	         3.056 ns/op
+BenchmarkN1000/gen=Go1              	392487889	         3.055 ns/op
+BenchmarkN1000/gen=Go1              	392313274	         3.056 ns/op
+BenchmarkN1000/gen=Go1              	392376612	         3.056 ns/op
+BenchmarkN1000/gen=Go1              	392393612	         3.057 ns/op
+BenchmarkN1000/gen=Go1              	392387251	         3.060 ns/op
+BenchmarkN1000/gen=Go1              	392651793	         3.056 ns/op
+BenchmarkN1000/gen=Go1              	392628722	         3.057 ns/op
+BenchmarkN1000/gen=Go1              	392380942	         3.057 ns/op
+BenchmarkN1000/gen=Go1              	392305899	         3.056 ns/op
+BenchmarkN1000/gen=Go1              	392567068	         3.058 ns/op
+BenchmarkN1000/gen=Go1              	392429757	         3.054 ns/op
+BenchmarkN1000/gen=Go1              	392176194	         3.056 ns/op
+BenchmarkN1000/gen=PCG              	290826982	         4.097 ns/op
+BenchmarkN1000/gen=PCG              	292672426	         4.099 ns/op
+BenchmarkN1000/gen=PCG              	292839195	         4.101 ns/op
+BenchmarkN1000/gen=PCG              	292147144	         4.091 ns/op
+BenchmarkN1000/gen=PCG              	292650092	         4.195 ns/op
+BenchmarkN1000/gen=PCG              	285833240	         4.153 ns/op
+BenchmarkN1000/gen=PCG              	293108112	         4.088 ns/op
+BenchmarkN1000/gen=PCG              	292472162	         4.096 ns/op
+BenchmarkN1000/gen=PCG              	292788764	         4.098 ns/op
+BenchmarkN1000/gen=PCG              	293642936	         4.093 ns/op
+BenchmarkN1000/gen=PCG              	292720260	         4.112 ns/op
+BenchmarkN1000/gen=PCG              	292064722	         4.099 ns/op
+BenchmarkN1000/gen=PCG              	292080362	         4.103 ns/op
+BenchmarkN1000/gen=PCG              	293372559	         4.112 ns/op
+BenchmarkN1000/gen=PCG              	292461291	         4.085 ns/op
+BenchmarkN1000/gen=PCG              	295208640	         4.091 ns/op
+BenchmarkN1000/gen=PCG              	292404458	         4.092 ns/op
+BenchmarkN1000/gen=PCG              	293202376	         4.076 ns/op
+BenchmarkN1000/gen=PCG              	293512695	         4.117 ns/op
+BenchmarkN1000/gen=PCG              	292903080	         4.086 ns/op
+BenchmarkN1000/gen=ChaCha8          	248263640	         4.840 ns/op
+BenchmarkN1000/gen=ChaCha8          	246836126	         4.864 ns/op
+BenchmarkN1000/gen=ChaCha8          	247393519	         4.872 ns/op
+BenchmarkN1000/gen=ChaCha8          	246721410	         4.858 ns/op
+BenchmarkN1000/gen=ChaCha8          	249500781	         4.852 ns/op
+BenchmarkN1000/gen=ChaCha8          	246665371	         4.860 ns/op
+BenchmarkN1000/gen=ChaCha8          	247126743	         4.847 ns/op
+BenchmarkN1000/gen=ChaCha8          	248777040	         4.859 ns/op
+BenchmarkN1000/gen=ChaCha8          	246865747	         4.864 ns/op
+BenchmarkN1000/gen=ChaCha8          	246694254	         4.856 ns/op
+BenchmarkN1000/gen=ChaCha8          	248074407	         4.871 ns/op
+BenchmarkN1000/gen=ChaCha8          	247867201	         4.866 ns/op
+BenchmarkN1000/gen=ChaCha8          	245732509	         4.847 ns/op
+BenchmarkN1000/gen=ChaCha8          	247628718	         4.846 ns/op
+BenchmarkN1000/gen=ChaCha8          	246361336	         4.871 ns/op
+BenchmarkN1000/gen=ChaCha8          	246545748	         4.849 ns/op
+BenchmarkN1000/gen=ChaCha8          	246687745	         4.874 ns/op
+BenchmarkN1000/gen=ChaCha8          	246491306	         4.864 ns/op
+BenchmarkN1000/gen=ChaCha8          	247932730	         4.830 ns/op
+BenchmarkN1000/gen=ChaCha8          	247311963	         4.844 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	163058200	         7.520 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	157818794	         7.361 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	163052108	         7.337 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	162890473	         7.358 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	162959682	         7.337 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	163469058	         7.338 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	162988870	         7.359 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	163007414	         7.360 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	163511295	         7.361 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	162939500	         7.358 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	162973911	         7.362 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	163119044	         7.338 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	162911628	         7.374 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	162971632	         7.335 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	162725194	         7.342 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	162896876	         7.360 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	162914052	         7.360 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	162786175	         7.391 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	163023284	         7.396 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	163574929	         7.361 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	316812687	         3.782 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	317096034	         3.781 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	316665580	         3.787 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	315912894	         3.785 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	316529151	         3.786 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	316540598	         3.787 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	316988538	         3.788 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	316978734	         3.788 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	317154418	         3.781 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	316827535	         3.784 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	316822551	         3.788 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	317197034	         3.787 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	317228200	         3.780 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	316974303	         3.786 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	317105146	         3.902 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	309943202	         3.787 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	317034180	         3.787 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	316623178	         3.782 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	317401958	         3.783 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	316715762	         3.786 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615878372	         1.950 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615361341	         1.952 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615565338	         1.951 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615509162	         1.950 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615813448	         1.951 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615920781	         1.950 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	616366850	         1.950 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615702070	         1.951 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	616956934	         1.950 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615079834	         1.953 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615723129	         1.952 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615809103	         1.952 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	616305121	         1.951 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	616277822	         1.950 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	616275448	         1.950 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615993633	         1.950 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615604678	         1.952 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615374882	         1.952 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615895359	         1.952 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	615701542	         1.952 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9796 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9781 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9815 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9784 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9786 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9785 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9782 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9788 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9787 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9789 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9863 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         1.005 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9893 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9857 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9825 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         1.011 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9988 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         1.003 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         1.011 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	978171818	         1.424 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	82977027	        13.99 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	86612368	        13.85 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	88555441	        13.61 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	88971817	        13.56 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	87148082	        13.69 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	87714219	        13.72 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	86631908	        13.62 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	87639748	        13.59 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	88389376	        13.56 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	85418115	        14.21 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	83680549	        14.26 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	85006653	        14.30 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	83413705	        14.18 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	85415331	        14.04 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	82551529	        14.10 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	84229239	        13.97 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	84632948	        13.97 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	82077237	        14.02 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	83804488	        14.01 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	87770355	        13.79 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14132734	        85.36 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14276486	        84.54 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	13970761	        84.95 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14009485	        85.60 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14117853	        84.72 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	13923812	        85.94 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	13954684	        86.22 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14015880	        84.96 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14148565	        79.26 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	16004320	        83.56 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14414796	        83.14 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14442489	        84.31 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14043525	        84.53 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14152681	        85.00 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14027608	        85.75 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14041615	        84.61 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	13931193	        85.05 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	13964421	        85.62 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	14157823	        84.02 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	13932872	        85.51 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10097602	       119.9 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9911041	       119.5 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10043570	       120.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9927853	       120.3 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9948169	       119.9 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10044820	       121.3 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10040786	       121.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9907219	       120.1 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	12120682	        87.56 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	12306582	       121.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10010701	       120.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10015456	       120.3 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10178896	       119.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10045255	       118.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9913920	       119.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10056834	       120.0 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10043676	       120.8 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10037046	       119.9 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9947144	       120.1 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	10037322	       121.0 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9838749	       125.5 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9286296	       123.5 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	10046257	       122.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	10149354	       128.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	10057302	       120.9 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	10126492	       123.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9655664	       124.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9702921	       129.5 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9376473	       130.5 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9970227	       129.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9333805	       129.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9360452	       131.0 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9215156	       130.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9658808	       130.9 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9354256	       128.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9148702	       129.6 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	10252042	       130.0 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9620613	       130.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9244712	       131.3 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 9591232	       130.8 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	212508218	         5.600 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	216176096	         5.602 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	216166945	         5.556 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	215924878	         5.582 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	214792408	         5.559 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	215859658	         5.541 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	215409110	         5.560 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	215852701	         5.560 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	212943724	         5.542 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	209487148	         5.767 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	215235938	         5.557 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	215773152	         5.598 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	215754206	         5.576 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	215834001	         5.559 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	215648083	         5.562 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	213682791	         5.559 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	215727508	         5.551 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	215882634	         5.555 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	216227742	         5.538 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	216714447	         5.557 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	419280252	         2.861 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	418658320	         2.860 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	419158512	         2.862 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	419339532	         2.871 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	418589258	         2.864 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	418568208	         2.858 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	418826360	         2.860 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	419379222	         2.860 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	419585186	         2.859 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	419506773	         2.857 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	419311873	         2.867 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	419539466	         2.858 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	420321553	         2.858 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	419179315	         2.857 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	418854622	         2.852 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	419359987	         2.872 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	418090849	         2.862 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	418923470	         2.862 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	417750873	         2.859 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	418921825	         2.858 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	814932043	         1.475 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	818622291	         1.475 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	814397875	         1.475 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	813803230	         1.476 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	813231729	         1.475 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	813505089	         1.475 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	813966994	         1.475 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	814432647	         1.477 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	813681141	         1.479 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	819511894	         1.473 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	814585605	         1.477 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	813746206	         1.477 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	813332553	         1.476 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	812936529	         1.478 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	812301405	         1.475 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	814794400	         1.473 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	813647349	         1.476 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	814575934	         1.475 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	814735395	         1.474 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	813770349	         1.475 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7399 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7399 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7406 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7413 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7403 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7449 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7404 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7402 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7417 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7401 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7403 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7403 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7403 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7406 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7402 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7400 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7401 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7402 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7405 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7401 ns/op
+PASS
diff --git a/_content/blog/chacha8rand/m3.svg b/_content/blog/chacha8rand/m3.svg
new file mode 100644
index 0000000..88849b7
--- /dev/null
+++ b/_content/blog/chacha8rand/m3.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg height="170" width="400" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+  <defs>
+    <style type="text/css"><![CDATA[
+      text {
+        font-family: sans-serif, Arial;
+        font-size: 12px;
+      }
+      text.head {
+        font-weight: bold;
+        font-size: 14px;
+      }
+    ]]></style>
+  </defs>
+<text x='0' y='25' class='head'><tspan dx='5' dy='-0.5em'>Apple M3</tspan></text>
+<rect x='5' y='25' height='20' width='46' fill='#ffaaaa' stroke='black' />
+<text x='48' y='45' text-anchor='end'><tspan dy='-0.5em'>1.9ns</tspan></text>
+<text x='56' y='45'><tspan dy='-0.5em'>Go 1: Uint64</tspan></text>
+<rect x='5' y='45' height='20' width='55' fill='#ccccff' stroke='black' />
+<text x='57' y='65' text-anchor='end'><tspan dy='-0.5em'>2.2ns</tspan></text>
+<text x='65' y='65'><tspan dy='-0.5em'>PCG: Uint64</tspan></text>
+<rect x='5' y='65' height='20' width='88' fill='#ffffaa' stroke='black' />
+<text x='90' y='85' text-anchor='end'><tspan dy='-0.5em'>3.5ns</tspan></text>
+<text x='98' y='85'><tspan dy='-0.5em'>ChaCha8: Uint64</tspan></text>
+<rect x='5' y='95' height='20' width='60' fill='#ffaaaa' stroke='black' />
+<text x='62' y='115' text-anchor='end'><tspan dy='-0.5em'>2.4ns</tspan></text>
+<text x='70' y='115'><tspan dy='-0.5em'>Go 1: N(1000)</tspan></text>
+<rect x='5' y='115' height='20' width='57' fill='#ccccff' stroke='black' />
+<text x='59' y='135' text-anchor='end'><tspan dy='-0.5em'>2.3ns</tspan></text>
+<text x='67' y='135'><tspan dy='-0.5em'>PCG: N(1000)</tspan></text>
+<rect x='5' y='135' height='20' width='99' fill='#ffffaa' stroke='black' />
+<text x='101' y='155' text-anchor='end'><tspan dy='-0.5em'>4.0ns</tspan></text>
+<text x='109' y='155'><tspan dy='-0.5em'>ChaCha8: N(1000)</tspan></text>
+</svg>
diff --git a/_content/blog/chacha8rand/m3.txt b/_content/blog/chacha8rand/m3.txt
new file mode 100644
index 0000000..9510931
--- /dev/null
+++ b/_content/blog/chacha8rand/m3.txt
@@ -0,0 +1,366 @@
+goos: darwin
+goarch: arm64
+pkg: randtest
+cpu: Apple M3 Pro
+BenchmarkUint64/gen=Go1   	588151683	         1.874 ns/op
+BenchmarkUint64/gen=Go1   	640135424	         1.884 ns/op
+BenchmarkUint64/gen=Go1   	639421393	         1.874 ns/op
+BenchmarkUint64/gen=Go1   	642835617	         1.874 ns/op
+BenchmarkUint64/gen=Go1   	640547310	         1.888 ns/op
+BenchmarkUint64/gen=Go1   	639977530	         1.878 ns/op
+BenchmarkUint64/gen=Go1   	638120097	         1.924 ns/op
+BenchmarkUint64/gen=Go1   	639626596	         1.878 ns/op
+BenchmarkUint64/gen=Go1   	640062441	         1.875 ns/op
+BenchmarkUint64/gen=Go1   	640857038	         1.877 ns/op
+BenchmarkUint64/gen=Go1   	640631374	         1.871 ns/op
+BenchmarkUint64/gen=Go1   	640370560	         1.876 ns/op
+BenchmarkUint64/gen=Go1   	641268144	         1.874 ns/op
+BenchmarkUint64/gen=Go1   	637875448	         1.874 ns/op
+BenchmarkUint64/gen=Go1   	637106124	         1.890 ns/op
+BenchmarkUint64/gen=Go1   	639245976	         1.874 ns/op
+BenchmarkUint64/gen=Go1   	638462581	         1.874 ns/op
+BenchmarkUint64/gen=Go1   	639468670	         1.878 ns/op
+BenchmarkUint64/gen=Go1   	639649471	         1.871 ns/op
+BenchmarkUint64/gen=Go1   	639592791	         1.879 ns/op
+BenchmarkUint64/gen=PCG   	539659642	         2.218 ns/op
+BenchmarkUint64/gen=PCG   	540414667	         2.196 ns/op
+BenchmarkUint64/gen=PCG   	544046311	         2.214 ns/op
+BenchmarkUint64/gen=PCG   	547169630	         2.210 ns/op
+BenchmarkUint64/gen=PCG   	541873050	         2.209 ns/op
+BenchmarkUint64/gen=PCG   	541893849	         2.208 ns/op
+BenchmarkUint64/gen=PCG   	544426218	         2.216 ns/op
+BenchmarkUint64/gen=PCG   	545805907	         2.246 ns/op
+BenchmarkUint64/gen=PCG   	516163165	         2.210 ns/op
+BenchmarkUint64/gen=PCG   	545104047	         2.212 ns/op
+BenchmarkUint64/gen=PCG   	540983234	         2.215 ns/op
+BenchmarkUint64/gen=PCG   	539559349	         2.215 ns/op
+BenchmarkUint64/gen=PCG   	548356682	         2.209 ns/op
+BenchmarkUint64/gen=PCG   	542390859	         2.207 ns/op
+BenchmarkUint64/gen=PCG   	543712914	         2.210 ns/op
+BenchmarkUint64/gen=PCG   	544397197	         2.227 ns/op
+BenchmarkUint64/gen=PCG   	539149054	         2.209 ns/op
+BenchmarkUint64/gen=PCG   	543288080	         2.210 ns/op
+BenchmarkUint64/gen=PCG   	541908738	         2.209 ns/op
+BenchmarkUint64/gen=PCG   	539534888	         2.215 ns/op
+BenchmarkUint64/gen=ChaCha8         	350188038	         3.422 ns/op
+BenchmarkUint64/gen=ChaCha8         	351745198	         3.605 ns/op
+BenchmarkUint64/gen=ChaCha8         	349773496	         3.440 ns/op
+BenchmarkUint64/gen=ChaCha8         	349836718	         3.437 ns/op
+BenchmarkUint64/gen=ChaCha8         	331235622	         3.415 ns/op
+BenchmarkUint64/gen=ChaCha8         	350673273	         3.414 ns/op
+BenchmarkUint64/gen=ChaCha8         	350975326	         3.426 ns/op
+BenchmarkUint64/gen=ChaCha8         	351101464	         3.445 ns/op
+BenchmarkUint64/gen=ChaCha8         	348933909	         3.724 ns/op
+BenchmarkUint64/gen=ChaCha8         	350254645	         3.658 ns/op
+BenchmarkUint64/gen=ChaCha8         	329316848	         3.437 ns/op
+BenchmarkUint64/gen=ChaCha8         	329477454	         3.660 ns/op
+BenchmarkUint64/gen=ChaCha8         	349263381	         3.658 ns/op
+BenchmarkUint64/gen=ChaCha8         	327268004	         3.669 ns/op
+BenchmarkUint64/gen=ChaCha8         	349705500	         3.416 ns/op
+BenchmarkUint64/gen=ChaCha8         	350063618	         3.673 ns/op
+BenchmarkUint64/gen=ChaCha8         	345125644	         3.660 ns/op
+BenchmarkUint64/gen=ChaCha8         	348763494	         3.690 ns/op
+BenchmarkUint64/gen=ChaCha8         	350788426	         3.454 ns/op
+BenchmarkUint64/gen=ChaCha8         	344573611	         3.676 ns/op
+BenchmarkN1000/gen=Go1              	495535364	         2.408 ns/op
+BenchmarkN1000/gen=Go1              	496756764	         2.409 ns/op
+BenchmarkN1000/gen=Go1              	496932561	         2.409 ns/op
+BenchmarkN1000/gen=Go1              	496825062	         2.410 ns/op
+BenchmarkN1000/gen=Go1              	497275860	         2.408 ns/op
+BenchmarkN1000/gen=Go1              	496973295	         2.411 ns/op
+BenchmarkN1000/gen=Go1              	498218954	         2.414 ns/op
+BenchmarkN1000/gen=Go1              	496496766	         2.462 ns/op
+BenchmarkN1000/gen=Go1              	482962248	         2.419 ns/op
+BenchmarkN1000/gen=Go1              	495566486	         2.418 ns/op
+BenchmarkN1000/gen=Go1              	491456672	         2.411 ns/op
+BenchmarkN1000/gen=Go1              	496965234	         2.408 ns/op
+BenchmarkN1000/gen=Go1              	497384328	         2.409 ns/op
+BenchmarkN1000/gen=Go1              	497102478	         2.412 ns/op
+BenchmarkN1000/gen=Go1              	498071616	         2.441 ns/op
+BenchmarkN1000/gen=Go1              	482348716	         2.431 ns/op
+BenchmarkN1000/gen=Go1              	496911213	         2.415 ns/op
+BenchmarkN1000/gen=Go1              	497939773	         2.420 ns/op
+BenchmarkN1000/gen=Go1              	497968011	         2.421 ns/op
+BenchmarkN1000/gen=Go1              	495025083	         2.418 ns/op
+BenchmarkN1000/gen=PCG              	518970068	         2.320 ns/op
+BenchmarkN1000/gen=PCG              	520583850	         2.312 ns/op
+BenchmarkN1000/gen=PCG              	516404538	         2.315 ns/op
+BenchmarkN1000/gen=PCG              	518211721	         2.315 ns/op
+BenchmarkN1000/gen=PCG              	517871977	         2.316 ns/op
+BenchmarkN1000/gen=PCG              	518692188	         2.314 ns/op
+BenchmarkN1000/gen=PCG              	518238577	         2.311 ns/op
+BenchmarkN1000/gen=PCG              	516232740	         2.538 ns/op
+BenchmarkN1000/gen=PCG              	502993947	         3.166 ns/op
+BenchmarkN1000/gen=PCG              	518136112	         2.313 ns/op
+BenchmarkN1000/gen=PCG              	517561602	         2.332 ns/op
+BenchmarkN1000/gen=PCG              	519391051	         2.313 ns/op
+BenchmarkN1000/gen=PCG              	519250021	         2.316 ns/op
+BenchmarkN1000/gen=PCG              	518102371	         2.323 ns/op
+BenchmarkN1000/gen=PCG              	515259370	         2.310 ns/op
+BenchmarkN1000/gen=PCG              	519085867	         2.311 ns/op
+BenchmarkN1000/gen=PCG              	517250575	         2.332 ns/op
+BenchmarkN1000/gen=PCG              	518274297	         2.313 ns/op
+BenchmarkN1000/gen=PCG              	519781567	         2.310 ns/op
+BenchmarkN1000/gen=PCG              	519736168	         2.312 ns/op
+BenchmarkN1000/gen=ChaCha8          	299263562	         4.013 ns/op
+BenchmarkN1000/gen=ChaCha8          	296974600	         4.016 ns/op
+BenchmarkN1000/gen=ChaCha8          	298851631	         4.004 ns/op
+BenchmarkN1000/gen=ChaCha8          	301673312	         4.011 ns/op
+BenchmarkN1000/gen=ChaCha8          	298759276	         4.018 ns/op
+BenchmarkN1000/gen=ChaCha8          	300455847	         3.967 ns/op
+BenchmarkN1000/gen=ChaCha8          	299169057	         3.977 ns/op
+BenchmarkN1000/gen=ChaCha8          	298156028	         3.988 ns/op
+BenchmarkN1000/gen=ChaCha8          	301252834	         4.152 ns/op
+BenchmarkN1000/gen=ChaCha8          	301323027	         4.019 ns/op
+BenchmarkN1000/gen=ChaCha8          	298605636	         4.014 ns/op
+BenchmarkN1000/gen=ChaCha8          	298887360	         4.016 ns/op
+BenchmarkN1000/gen=ChaCha8          	299381714	         3.972 ns/op
+BenchmarkN1000/gen=ChaCha8          	301971273	         4.019 ns/op
+BenchmarkN1000/gen=ChaCha8          	300170409	         4.008 ns/op
+BenchmarkN1000/gen=ChaCha8          	300776473	         3.989 ns/op
+BenchmarkN1000/gen=ChaCha8          	298564650	         3.973 ns/op
+BenchmarkN1000/gen=ChaCha8          	298000107	         3.996 ns/op
+BenchmarkN1000/gen=ChaCha8          	299978625	         4.017 ns/op
+BenchmarkN1000/gen=ChaCha8          	300143630	         3.977 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	194807882	         6.153 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	195020582	         6.150 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	195114256	         6.157 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	195062850	         6.149 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	194959735	         6.153 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	194946710	         6.163 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	185521884	         6.217 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	195006597	         6.154 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	194938093	         6.153 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	195256434	         6.156 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	194900811	         6.152 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	195182978	         6.176 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	195007377	         6.160 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	193752308	         6.153 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	194721202	         6.158 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	194737594	         6.155 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	194360848	         6.147 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	195079881	         6.154 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	195021783	         6.164 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=1         	194707576	         6.157 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381616878	         3.138 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381170847	         3.138 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381281360	         3.152 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381432550	         3.221 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	380702253	         3.144 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381439069	         3.145 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	380752736	         3.148 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	380639208	         3.144 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381237552	         3.144 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	382294558	         3.145 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	379619394	         3.142 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	380253237	         3.157 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381576631	         3.141 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	380722838	         3.143 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381046886	         3.139 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	380962358	         3.139 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	379558106	         3.144 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	380242393	         3.144 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381083592	         3.152 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=2         	381829172	         3.139 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	743668554	         1.609 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	744373965	         1.608 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	744696364	         1.608 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	745078602	         1.619 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	743813751	         1.607 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	746688129	         1.606 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	742987668	         1.607 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	745624308	         1.608 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	743148136	         1.608 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	744160470	         1.605 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	743826818	         1.606 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	743181697	         1.606 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	747356808	         1.608 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	738289082	         1.604 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	745605970	         1.603 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	745053931	         1.604 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	747052642	         1.608 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	748207416	         1.606 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	744057998	         1.604 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=4         	745299373	         1.603 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9694 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9681 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9681 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9662 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9675 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9671 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9760 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         1.002 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9684 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9668 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9766 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9682 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9679 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9679 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9676 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9692 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9685 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9673 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9670 ns/op
+BenchmarkN1000Parallel/gen=Go1/proc=8         	1000000000	         0.9689 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214553458	         5.582 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214624818	         5.585 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214368988	         5.585 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214802534	         5.583 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214893026	         5.583 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214976373	         5.583 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	215001714	         5.583 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214621090	         5.582 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214710390	         5.596 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	210008860	         5.665 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214802822	         5.585 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214900146	         5.585 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214842049	         5.585 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214797007	         5.586 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214922373	         5.583 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214906560	         5.582 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214968222	         5.595 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	213579471	         5.582 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214563896	         5.652 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=1   	214393261	         5.582 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	33432585	        37.19 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	33374161	        38.48 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	33651031	        35.83 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	33970354	        40.33 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	33511790	        37.35 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	34011596	        36.33 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	35102686	        36.21 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	34478217	        35.11 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	33896229	        37.09 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	33591998	        36.39 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	33714849	        37.42 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	32085704	        37.25 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	32870484	        38.79 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	32684634	        35.13 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	32194814	        35.02 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	33738506	        35.08 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	35718802	        35.80 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	33377952	        35.85 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	34108228	        36.22 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=2   	34461302	        35.26 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9627457	       124.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9586106	       124.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9616539	       124.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9612781	       124.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9692002	       124.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9657752	       124.6 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9588177	       124.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9630145	       125.0 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9657904	       124.3 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9636493	       124.8 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9679708	       124.1 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9685591	       124.6 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9790699	       124.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9643272	       124.8 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9667638	       124.1 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9610587	       123.8 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9977566	       121.2 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9902637	       121.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9875780	       121.6 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=4   	 9835903	       121.1 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8419065	       141.1 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8519761	       140.5 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8451224	       139.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8450619	       142.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8456139	       142.0 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8515942	       141.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8466001	       141.4 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8462304	       141.6 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8500870	       141.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8463513	       140.8 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8509232	       141.8 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8473962	       141.7 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8432258	       141.1 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8459630	       142.0 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8475969	       138.0 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8423197	       140.6 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8519053	       141.6 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8488460	       142.6 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8479678	       141.6 ns/op
+BenchmarkN1000Parallel/gen=Go1Locked/proc=8   	 8407258	       141.6 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255565628	         4.696 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255533180	         4.698 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255622542	         4.695 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255140752	         4.702 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	254722198	         4.710 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255716552	         4.694 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255612649	         4.695 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255190647	         4.700 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255567330	         4.698 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255645549	         4.695 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	256041672	         4.695 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255426232	         4.697 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255372373	         4.707 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	254148285	         4.834 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255463344	         4.697 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255556014	         4.663 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255665226	         4.696 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255143962	         4.697 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255265198	         4.694 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=1     	255439802	         4.662 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	501435446	         2.395 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	501707634	         2.393 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	500148741	         2.395 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	500187830	         2.394 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	499939850	         2.392 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	502864054	         2.392 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	501174889	         2.396 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	501224520	         2.394 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	499463511	         2.392 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	499633688	         2.397 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	501915294	         2.396 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	501656074	         2.392 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	499712317	         2.398 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	498630757	         2.437 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	500850836	         2.386 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	502092837	         2.392 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	500993374	         2.388 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	502481350	         2.385 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	500188090	         2.395 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=2     	499170648	         2.398 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	978017690	         1.223 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	981178405	         1.223 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	974994771	         1.221 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	977840368	         1.223 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	978689380	         1.226 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	981369316	         1.222 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	976904018	         1.223 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	978946530	         1.223 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	978944206	         1.225 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	978089108	         1.225 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	979479567	         1.222 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	979527531	         1.223 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	979617825	         1.223 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	980790138	         1.224 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	980478604	         1.222 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	977088296	         1.232 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	981021990	         1.223 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	979373974	         1.223 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	979359651	         1.223 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=4     	980739702	         1.222 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7165 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7147 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7158 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7152 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7162 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7150 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7162 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7161 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7159 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7158 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7153 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7156 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7164 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7162 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7157 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7159 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7148 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7162 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7173 ns/op
+BenchmarkN1000Parallel/gen=ChaCha8/proc=8     	1000000000	         0.7163 ns/op
+PASS
+ok  	randtest	512.356s
diff --git a/_content/blog/chacha8rand/mksvg.go b/_content/blog/chacha8rand/mksvg.go
new file mode 100644
index 0000000..4f4a079
--- /dev/null
+++ b/_content/blog/chacha8rand/mksvg.go
@@ -0,0 +1,126 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+	"bytes"
+	"fmt"
+	"log"
+	"os"
+)
+
+type Benchmark struct {
+	Name string
+	Data []float64
+}
+
+var perf = []Benchmark{
+	{Name: "Go 1: Uint64", Data: []float64{2.29656e+00, 3.23495e+00, 2.67690e+00, 3.84810e+00, 2.51320e+00, 1.87559e+00, 4.83222e+00}},
+	{Name: "PCG: Uint64", Data: []float64{1.52985e+00, 8.03210e+00, 2.46820e+00, 1.13633e+01, 4.19290e+00, 2.21153e+00, 6.86715e+00}},
+	{Name: "ChaCha8: Uint64", Data: []float64{3.10785e+00, 5.99320e+00, 4.22015e+00, 8.54389e+00, 4.64550e+00, 3.54895e+00, 7.48717e+00}},
+	{Name: "Go 1: N(1000)", Data: []float64{3.04079e+00, 1.43600e+01, 4.84235e+00, 2.50285e+01, 3.05638e+00, 2.41394e+00, 1.27050e+01}},
+	{Name: "PCG: N(1000)", Data: []float64{2.47375e+00, 1.03700e+01, 3.88155e+00, 1.49215e+01, 4.09644e+00, 2.31600e+00, 9.82755e+00}},
+	{Name: "ChaCha8: N(1000)", Data: []float64{4.03063e+00, 8.37230e+00, 5.74820e+00, 1.17947e+01, 4.85670e+00, 3.99968e+00, 1.01725e+01}},
+}
+
+var columns = []string{
+	"amd",
+	"amd32",
+	"intel",
+	"intel32",
+	"m1",
+	"m3",
+	"taut2a",
+}
+
+var descs = []string{
+	"AMD Ryzen 9 7950X",
+	"AMD Ryzen 9 7950X running 32-bit code",
+	"11th Gen Intel Core i7-1185G7",
+	"11th Gen Intel Core i7-1185G7 running 32-bit code",
+	"Apple M1",
+	"Apple M3",
+	"Google Cloud Tau T2A (Ampere Altra)",
+}
+
+var svghdr = `<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg height="170" width="400" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+  <defs>
+    <style type="text/css"><![CDATA[
+      text {
+        font-family: sans-serif, Arial;
+        font-size: 12px;
+      }
+      text.head {
+        font-weight: bold;
+        font-size: 14px;
+      }
+    ]]></style>
+  </defs>
+`
+
+func writeSVG(col int) {
+	var buf bytes.Buffer
+	buf.WriteString(svghdr)
+
+	y := 5
+	height := 20
+	skip := 20
+	scale := 50.
+	for _, bench := range perf {
+		if true || bench.Data[col] > 10 {
+			scale = 25
+			break
+		}
+	}
+	fills := []string{
+		"#ffaaaa",
+		"#ccccff",
+		"#ffffaa",
+		"#ffaaaa",
+		"#ccccff",
+		"#ffffaa",
+	}
+	y += skip
+	fmt.Fprintf(&buf, "<text x='%d' y='%d' class='head'><tspan dx='5' dy='-0.5em'>%s</tspan></text>\n",
+		0, y, descs[col])
+	for i, bench := range perf {
+		val := bench.Data[col]
+		fill := fills[i]
+		barx := int(val * scale)
+		fmt.Fprintf(&buf, "<rect x='5' y='%d' height='%d' width='%d' fill='%s' stroke='black' />\n", y+(skip-height)/2, height, barx, fill)
+		labelx := 5 + barx
+		if labelx > 395 {
+			labelx = 395
+		}
+		fmt.Fprintf(&buf, "<text x='%d' y='%d' text-anchor='end'><tspan dy='-0.5em'>%.1fns</tspan></text>\n",
+			labelx-3, y+skip-(skip-height)/2, val)
+		textx := 10
+		if labelx < 130 {
+			textx = labelx + 5
+		}
+		fmt.Fprintf(&buf, "<text x='%d' y='%d'><tspan dy='-0.5em'>%s</tspan></text>\n",
+			textx, y+skip-(skip-height)/2, bench.Name)
+		y += skip
+		if i == 2 {
+			y += skip / 2
+		}
+	}
+	y += 5
+
+	buf.WriteString("</svg>\n")
+	if err := os.WriteFile(columns[col]+".svg", buf.Bytes(), 0666); err != nil {
+		log.Fatal(err)
+	}
+}
+
+func main() {
+	for i := range perf[0].Data {
+		writeSVG(i)
+	}
+}
diff --git a/_content/blog/chacha8rand/taut2a.svg b/_content/blog/chacha8rand/taut2a.svg
new file mode 100644
index 0000000..b1575e6
--- /dev/null
+++ b/_content/blog/chacha8rand/taut2a.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg height="170" width="400" version="1.1"
+     xmlns="http://www.w3.org/2000/svg">
+  <defs>
+    <style type="text/css"><![CDATA[
+      text {
+        font-family: sans-serif, Arial;
+        font-size: 12px;
+      }
+      text.head {
+        font-weight: bold;
+        font-size: 14px;
+      }
+    ]]></style>
+  </defs>
+<text x='0' y='25' class='head'><tspan dx='5' dy='-0.5em'>Google Cloud Tau T2A (Ampere Altra)</tspan></text>
+<rect x='5' y='25' height='20' width='120' fill='#ffaaaa' stroke='black' />
+<text x='122' y='45' text-anchor='end'><tspan dy='-0.5em'>4.8ns</tspan></text>
+<text x='130' y='45'><tspan dy='-0.5em'>Go 1: Uint64</tspan></text>
+<rect x='5' y='45' height='20' width='171' fill='#ccccff' stroke='black' />
+<text x='173' y='65' text-anchor='end'><tspan dy='-0.5em'>6.9ns</tspan></text>
+<text x='10' y='65'><tspan dy='-0.5em'>PCG: Uint64</tspan></text>
+<rect x='5' y='65' height='20' width='187' fill='#ffffaa' stroke='black' />
+<text x='189' y='85' text-anchor='end'><tspan dy='-0.5em'>7.5ns</tspan></text>
+<text x='10' y='85'><tspan dy='-0.5em'>ChaCha8: Uint64</tspan></text>
+<rect x='5' y='95' height='20' width='317' fill='#ffaaaa' stroke='black' />
+<text x='319' y='115' text-anchor='end'><tspan dy='-0.5em'>12.7ns</tspan></text>
+<text x='10' y='115'><tspan dy='-0.5em'>Go 1: N(1000)</tspan></text>
+<rect x='5' y='115' height='20' width='245' fill='#ccccff' stroke='black' />
+<text x='247' y='135' text-anchor='end'><tspan dy='-0.5em'>9.8ns</tspan></text>
+<text x='10' y='135'><tspan dy='-0.5em'>PCG: N(1000)</tspan></text>
+<rect x='5' y='135' height='20' width='254' fill='#ffffaa' stroke='black' />
+<text x='256' y='155' text-anchor='end'><tspan dy='-0.5em'>10.2ns</tspan></text>
+<text x='10' y='155'><tspan dy='-0.5em'>ChaCha8: N(1000)</tspan></text>
+</svg>
diff --git a/_content/blog/chacha8rand/taut2a.txt b/_content/blog/chacha8rand/taut2a.txt
new file mode 100644
index 0000000..fdc45de
--- /dev/null
+++ b/_content/blog/chacha8rand/taut2a.txt
@@ -0,0 +1,123 @@
+goos: linux
+goarch: arm64
+pkg: randtest
+BenchmarkUint64/gen=Go1  	248455749	         4.835 ns/op
+BenchmarkUint64/gen=Go1  	248415836	         4.834 ns/op
+BenchmarkUint64/gen=Go1  	248458609	         4.839 ns/op
+BenchmarkUint64/gen=Go1  	247975328	         4.833 ns/op
+BenchmarkUint64/gen=Go1  	248109145	         4.833 ns/op
+BenchmarkUint64/gen=Go1  	247891726	         4.836 ns/op
+BenchmarkUint64/gen=Go1  	247919977	         4.840 ns/op
+BenchmarkUint64/gen=Go1  	248480607	         4.828 ns/op
+BenchmarkUint64/gen=Go1  	248193528	         4.833 ns/op
+BenchmarkUint64/gen=Go1  	248681330	         4.825 ns/op
+BenchmarkUint64/gen=Go1  	248321024	         4.830 ns/op
+BenchmarkUint64/gen=Go1  	249019573	         4.830 ns/op
+BenchmarkUint64/gen=Go1  	248422831	         4.826 ns/op
+BenchmarkUint64/gen=Go1  	248359096	         4.830 ns/op
+BenchmarkUint64/gen=Go1  	248294286	         4.834 ns/op
+BenchmarkUint64/gen=Go1  	248199319	         4.816 ns/op
+BenchmarkUint64/gen=Go1  	248525256	         4.831 ns/op
+BenchmarkUint64/gen=Go1  	248464021	         4.832 ns/op
+BenchmarkUint64/gen=Go1  	248238936	         4.831 ns/op
+BenchmarkUint64/gen=Go1  	248839789	         4.820 ns/op
+BenchmarkUint64/gen=PCG  	174242110	         6.846 ns/op
+BenchmarkUint64/gen=PCG  	174132589	         6.850 ns/op
+BenchmarkUint64/gen=PCG  	174330180	         6.846 ns/op
+BenchmarkUint64/gen=PCG  	174183909	         6.852 ns/op
+BenchmarkUint64/gen=PCG  	174288889	         6.851 ns/op
+BenchmarkUint64/gen=PCG  	174298448	         6.845 ns/op
+BenchmarkUint64/gen=PCG  	174253972	         6.847 ns/op
+BenchmarkUint64/gen=PCG  	174323828	         6.853 ns/op
+BenchmarkUint64/gen=PCG  	174412629	         6.851 ns/op
+BenchmarkUint64/gen=PCG  	174345062	         6.850 ns/op
+BenchmarkUint64/gen=PCG  	175188483	         6.884 ns/op
+BenchmarkUint64/gen=PCG  	175045111	         6.888 ns/op
+BenchmarkUint64/gen=PCG  	175182530	         6.880 ns/op
+BenchmarkUint64/gen=PCG  	175134198	         6.888 ns/op
+BenchmarkUint64/gen=PCG  	175087416	         6.882 ns/op
+BenchmarkUint64/gen=PCG  	175099728	         6.885 ns/op
+BenchmarkUint64/gen=PCG  	175137080	         6.895 ns/op
+BenchmarkUint64/gen=PCG  	175264096	         6.883 ns/op
+BenchmarkUint64/gen=PCG  	175209273	         6.883 ns/op
+BenchmarkUint64/gen=PCG  	175299583	         6.884 ns/op
+BenchmarkUint64/gen=ChaCha8         	160415494	         7.487 ns/op
+BenchmarkUint64/gen=ChaCha8         	160310059	         7.484 ns/op
+BenchmarkUint64/gen=ChaCha8         	160346799	         7.485 ns/op
+BenchmarkUint64/gen=ChaCha8         	160084292	         7.487 ns/op
+BenchmarkUint64/gen=ChaCha8         	160183503	         7.487 ns/op
+BenchmarkUint64/gen=ChaCha8         	160564818	         7.491 ns/op
+BenchmarkUint64/gen=ChaCha8         	160267632	         7.486 ns/op
+BenchmarkUint64/gen=ChaCha8         	160390923	         7.483 ns/op
+BenchmarkUint64/gen=ChaCha8         	160358782	         7.510 ns/op
+BenchmarkUint64/gen=ChaCha8         	160233528	         7.484 ns/op
+BenchmarkUint64/gen=ChaCha8         	160454979	         7.566 ns/op
+BenchmarkUint64/gen=ChaCha8         	160211536	         7.614 ns/op
+BenchmarkUint64/gen=ChaCha8         	160381500	         7.470 ns/op
+BenchmarkUint64/gen=ChaCha8         	160164750	         7.483 ns/op
+BenchmarkUint64/gen=ChaCha8         	160193640	         7.483 ns/op
+BenchmarkUint64/gen=ChaCha8         	160313425	         7.485 ns/op
+BenchmarkUint64/gen=ChaCha8         	160840632	         7.479 ns/op
+BenchmarkUint64/gen=ChaCha8         	160098883	         7.504 ns/op
+BenchmarkUint64/gen=ChaCha8         	160316475	         7.484 ns/op
+BenchmarkUint64/gen=ChaCha8         	160388248	         7.497 ns/op
+BenchmarkN1000/gen=Go1              	94417130	        12.70 ns/op
+BenchmarkN1000/gen=Go1              	92825816	        12.71 ns/op
+BenchmarkN1000/gen=Go1              	93598202	        12.70 ns/op
+BenchmarkN1000/gen=Go1              	94296928	        12.70 ns/op
+BenchmarkN1000/gen=Go1              	94392168	        12.71 ns/op
+BenchmarkN1000/gen=Go1              	93693498	        12.70 ns/op
+BenchmarkN1000/gen=Go1              	94365742	        12.70 ns/op
+BenchmarkN1000/gen=Go1              	94346156	        12.70 ns/op
+BenchmarkN1000/gen=Go1              	94417419	        12.71 ns/op
+BenchmarkN1000/gen=Go1              	94188572	        12.71 ns/op
+BenchmarkN1000/gen=Go1              	94309972	        12.70 ns/op
+BenchmarkN1000/gen=Go1              	94102892	        12.71 ns/op
+BenchmarkN1000/gen=Go1              	94131246	        12.71 ns/op
+BenchmarkN1000/gen=Go1              	94228510	        12.71 ns/op
+BenchmarkN1000/gen=Go1              	94168172	        12.71 ns/op
+BenchmarkN1000/gen=Go1              	94298410	        12.71 ns/op
+BenchmarkN1000/gen=Go1              	94409991	        12.70 ns/op
+BenchmarkN1000/gen=Go1              	94384447	        12.70 ns/op
+BenchmarkN1000/gen=Go1              	93541591	        12.70 ns/op
+BenchmarkN1000/gen=Go1              	93939949	        12.71 ns/op
+BenchmarkN1000/gen=PCG              	122041834	         9.836 ns/op
+BenchmarkN1000/gen=PCG              	122153306	         9.827 ns/op
+BenchmarkN1000/gen=PCG              	122044854	         9.825 ns/op
+BenchmarkN1000/gen=PCG              	122039968	         9.824 ns/op
+BenchmarkN1000/gen=PCG              	122041954	         9.835 ns/op
+BenchmarkN1000/gen=PCG              	122118037	         9.833 ns/op
+BenchmarkN1000/gen=PCG              	122101366	         9.824 ns/op
+BenchmarkN1000/gen=PCG              	122055967	         9.828 ns/op
+BenchmarkN1000/gen=PCG              	122215968	         9.829 ns/op
+BenchmarkN1000/gen=PCG              	122143722	         9.822 ns/op
+BenchmarkN1000/gen=PCG              	122141121	         9.821 ns/op
+BenchmarkN1000/gen=PCG              	122168040	         9.830 ns/op
+BenchmarkN1000/gen=PCG              	122198320	         9.832 ns/op
+BenchmarkN1000/gen=PCG              	122079390	         9.832 ns/op
+BenchmarkN1000/gen=PCG              	122125956	         9.826 ns/op
+BenchmarkN1000/gen=PCG              	121595718	         9.823 ns/op
+BenchmarkN1000/gen=PCG              	122144493	         9.828 ns/op
+BenchmarkN1000/gen=PCG              	122103364	         9.824 ns/op
+BenchmarkN1000/gen=PCG              	122108936	         9.829 ns/op
+BenchmarkN1000/gen=PCG              	122057089	         9.823 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.16 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.15 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.16 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.16 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.12 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.19 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.16 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.19 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.16 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.19 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.16 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.21 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.17 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.18 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.20 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.20 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.19 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.17 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.14 ns/op
+BenchmarkN1000/gen=ChaCha8          	100000000	        10.19 ns/op