Normal
Distribution
The normal distribution is the most fundamental and popular
distribution in the world of statistics. Even those without statistical
training have likely heard of the “bell curve.” Well, that shape
symbolizes the relative probability distribution of standardized data
which originated from a normally distributed population.
At the heart of the normal distribution’s characteristics is the
empirical rule, which essentially states that about 68% of a population
falls within one standard deviation of the mean, 95% falls within two
standard deviations and over 99% fall within three standard deviations.
An example of the bell curve with the empirical rule labeled is
below.
include_graphics("Bell Curve.png")

Also stemming from the normal distribution comes the central limit
theorem (CLT). The CLT states that, as the sample size of a study or
experiment increases so does the sampling distribution’s resemblance of
normality. This theorem is nonparametric, meaning it holds true
regardless of the true population distribution from which the
sample data came from. In other words, as long as the population of
interest has a known and finite mean (or average) and variance, we can
presume a relatively normal distribution of sample statistics (such as
mean and proportion for example) coming from that population’s
samples.
T Distribution
The normal distribution’s closest relative so to speak in the world
of probability distributions is the T distribution (sometimes called the
Student’s T). The T distribution is approximately bell shaped, and is
also symmetric just like the normal distribution. The crucial difference
between the T and normal distributions deals with knowledge of
population variance.
As alluded to before, the normal distribution is a phenomenal tool
when both the population mean and variance are finite and known.
Alternatively, in a scenario where the population variance (\(\sigma^2\)) is unknown, the T distribution
is often resorted to. For the T distribution, the sample variance (\(S^2\)) is used as an estimator of the
population variance.
Additionally, the T distribution considers sample size in calculating
relative probability while the normal distribution does not. The T
distribution’s exact shape depends on its degrees of freedom (df). To
find the degrees of freedom, we simply subtract one from the sample
size. As degrees of freedom increases, so does the T distribution’s
resemblance with the normal distribution, making this distribution most
commonly used in cases of small sample sizes. An example of T
distribution curves with differing degrees of freedoms in comparison to
the standard normal distribution’s bell curve is below.
### Normal PDF
curve(dnorm(x, mean = 0, sd = 1),
from = -4,
to = 4,
lwd = 2,
main = "Normal vs T Distributions",
xlab = "Critical Value",
ylab = "Probability Density")
box(lwd = 3)
### T Distribution PDF's
# df = 3
curve(dt(x, df = 3),
from = -4, to = 4,
lwd = 2,
lty = 2,
col = "red",
add = TRUE)
# df = 10
curve(dt(x, df = 10),
from = -4, to = 4,
lwd = 2,
lty = 2,
col = "blue",
add = TRUE)
# df = 20
curve(dt(x, df = 20),
from = -4, to = 4,
lwd = 2,
lty = 2,
col = "orange",
add = TRUE)
legend("topright",
legend = c("N (0,1)",
paste0("T (df=", 3, ")"),
paste0("T (df=", 10, ")"),
paste0("T (df=", 20, ")")
),
col = c("black", "red", "blue", "orange"),
lwd = 2,
lty = 1,
box.lwd = 3)

Chi-Square
Distribution
Taking aspects from the normal, T and gamma distributions is the
chi-square distribution. The gamma distribution is used for a population
that is non-negative and skewed rightward. A typical example of when the
gamma distribution might be applicable is modeling the length of time
until a rare event (like a natural disaster) occurs.
The chi-square distribution is considered a special instance of the
gamma. The gamma distribution has two parameters, alpha (\(\alpha\)) and beta (\(\beta\)). If \(\alpha\) = \(\frac{v}{2}\) (with v representing the
degrees of freedom) and \(\beta\) = 2,
then the distribution is chi-square.
Just like the T distribution, the chi-squares degrees of freedom is
one unit less than the sample size being observed. Unlike the normal and
T distributions though, the chi-square has a clear and prevalent
rightward skew. This is because, as mentioned above, the chi-square
distribution only deals with non-negative values. A greater degrees of
freedom will correlate with an upward skew in relative probability
happening at a greater critical value, before eventually leveling off.
This can be seen in the plot below.
### Normal PDF
curve(dnorm(x, mean = 0, sd = 1),
from = 0,
to = 40,
lwd = 2,
ylim = c(0,0.25),
main = "Normal vs Chi-Square Distributions",
xlab = "Critical Value",
ylab = "Probability Density")
box(lwd = 3)
### Chi-Square Distribution PDF's
# df = 3
curve(dchisq(x, df = 3),
from = 0, to = 40,
lwd = 2,
lty = 2,
col = "red",
add = TRUE)
# df = 10
curve(dchisq(x, df = 10),
from = 0, to = 40,
lwd = 2,
lty = 2,
col = "blue",
add = TRUE)
# df = 20
curve(dchisq(x, df = 20),
from = 0, to = 40,
lwd = 2,
lty = 2,
col = "orange",
add = TRUE)
legend("topright",
legend = c("N (0,1)",
paste0("Chi (df=", 3, ")"),
paste0("Chi (df=", 10, ")"),
paste0("Chi (df=", 20, ")")
),
col = c("black", "red", "blue", "orange"),
lwd = 2,
lty = 1,
box.lwd = 3)

F Distribution
The F distribution largely resembles the chi-square and that is
because the F distribution is actually the quotient of two independent
chi-squared variables. While the T and chi-square distributions
considered the degrees of freedom as (n - 1), the F distribution takes
this formula and applies it to each of the two chi-squared variables in
its calculation. Therefore, the F distribution has a separate degrees of
freedom statistic for the numerator and denominator.
Like the chi-square distribution, the F distribution is non-negative
and rightward skewed. The numerator degrees of freedom primarily
controls the location of the curve’s skew relative to the plot’s x axis.
An increasing numerator degrees of freedom will lead to the upward
trajectory of relative probablity occurring at a greater critical value
(a higher value along the x axis). The plot below illustrates how, while
holding the denominator degrees of freedom constant, an increase in the
numerator degrees of freedom means a rightward shift in the
distribution’s peak, hence a weakening of the rightward skew
characteristic.
### Normal PDF
curve(dnorm(x, mean = 0, sd = 1),
from = 0,
to = 10,
lwd = 2,
ylim = c(0,1),
main = "Normal vs F Distributions",
xlab = "Critical Value",
ylab = "Probability Density")
box(lwd = 3)
### F Distribution PDF's
curve(df(x, df1 =2, df2 = 10),
from = 0, to = 10,
lwd = 2,
lty = 2,
ylim = c(0,1),
col = "red",
add = TRUE)
curve(df(x, df1 =10, df2 = 10),
from = 0, to = 10,
lwd = 2,
ylim = c(0,1),
lty = 2,
col = "blue",
add = TRUE)
curve(df(x, df1 =100, df2 = 10),
from = 0, to = 10,
lwd = 2,
ylim = c(0,1),
lty = 2,
col = "orange",
add = TRUE)
legend("topright",
legend = c("N (0,1)",
paste0("F (df=", 2, ",", 10, ")"),
paste0("F (df=", 10, ",", 10, ")"),
paste0("F (df=", 100, ",", 10, ")")
),
col = c("black", "red", "blue", "orange"),
lwd = 2,
lty = 1,
box.lwd = 3)

Meanwhile, the denominator degrees of freedom controls the
distribution’s concentration. We can see via the graphic below that an
increasing denominator degrees of freedom correlates with the relative
probability density “spiking” within a smaller and more confined range
of critical values. Hence, it is much more likely for a F distribution
with a smaller denominator degrees of freedom to output a large F
statistic.
### Normal PDF
curve(dnorm(x, mean = 0, sd = 1),
from = 0,
to = 10,
lwd = 2,
ylim = c(0,1),
main = "Normal vs F Distributions",
xlab = "Critical Value",
ylab = "Probability Density")
box(lwd = 3)
### F Distribution PDF's
curve(df(x, df1 =10, df2 = 2),
from = 0, to = 10,
lwd = 2,
lty = 2,
ylim = c(0,1),
col = "red",
add = TRUE)
curve(df(x, df1 =10, df2 = 10),
from = 0, to = 10,
lwd = 2,
ylim = c(0,1),
lty = 2,
col = "blue",
add = TRUE)
curve(df(x, df1 =10, df2 = 100),
from = 0, to = 10,
lwd = 2,
ylim = c(0,1),
lty = 2,
col = "orange",
add = TRUE)
legend("topright",
legend = c("N (0,1)",
paste0("F (df=", 10, ",", 2, ")"),
paste0("F (df=", 10, ",", 10, ")"),
paste0("F (df=", 10, ",", 100, ")")
),
col = c("black", "red", "blue", "orange"),
lwd = 2,
lty = 1,
box.lwd = 3)

LS0tCnRpdGxlOiAiQnJlYWtkb3duIG9mIFNhbXBsaW5nIERpc3RyaWJ1dGlvbnMiCmF1dGhvcjogIkNocmlzIEJhaG0iCmRhdGU6ICIyMDI2LTAyLTA4IgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IHRydWUKICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQogICAgdG9jX2RlcHRoOiA0CiAgICBmaWdfd2lkdGg6IDYKICAgIGZpZ19oZWlnaHQ6IDQKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgdGhlbWU6IGx1bWVuCiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICB3b3JkX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDQKLS0tCgpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9CmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8KICAgIGxpc3Qtc3R5bGU6dXBwZXItcm9tYW47CiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOwp9CgpoMS50aXRsZSB7ICAgIC8qIGxldmVsIDEgaGVhZGVyIG9mIHRpdGxlICAqLwogIGZvbnQtc2l6ZTogMjRweDsKICBmb250LXdlaWdodDogYm9sZDsKICBjb2xvcjogRGFya1JlZDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBEYXJrUmVkOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBEYXJrQmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDIgeyAvKiBIZWFkZXIgMiAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi8qIEFkZCBkb3RzIGFmdGVyIG51bWJlcmVkIGhlYWRlcnMgKi8KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIuIjsKfQpgYGAKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIGNvZGUgY2h1bmsgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIFIgY29kZSwgd2FybmluZ3MsIGFuZCBvdXRwdXQgCiMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IGZpbGVzLgoKaWYgKCFyZXF1aXJlKCJrbml0ciIpKSB7ICAgICAgICAgICAgICAgICAgICAgICMgdXNlIGNvbmRpdGlvbmFsIHN0YXRlbWVudCB0byBkZXRlY3QKICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKSAgICAgICAgICAgICAgICAgICMgd2hldGhlciBhIHBhY2thZ2Ugd2FzIGluc3RhbGxlZCBpbgogICBsaWJyYXJ5KGtuaXRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB5b3VyIG1hY2hpbmUuIElmIG5vdCwgaW5zdGFsbCBpdCBhbmQKfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbG9hZCBpdCB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkuCgppZiAoIXJlcXVpcmUodGlkeXZlcnNlKSkge2xpYnJhcnkodGlkeXZzZXJzZSl9IAoKaWYgKCFyZXF1aXJlKEdHYWxseSkpIHtsaWJyYXJ5KEdHYWxseSl9IAoKaWYgKCFyZXF1aXJlKGthYmxlRXh0cmEpKSB7bGlicmFyeShrYWJsZUV4dHJhKX0gCgppZiAoIXJlcXVpcmUoZ2dwbG90MikpIHtsaWJyYXJ5KGdncGxvdDIpfSAKCmlmICghcmVxdWlyZShjYXIpKSB7bGlicmFyeShjYXIpfSAKCmlmICghcmVxdWlyZShkcGx5cikpIHtsaWJyYXJ5KGRwbHlyKX0gCgppZiAoIXJlcXVpcmUocGFuZGVyKSkge2xpYnJhcnkocGFuZGVyKX0gCgppZiAoIXJlcXVpcmUoZm9yZWNhc3QpKSB7bGlicmFyeShmb3JlY2FzdCl9IAoKaWYgKCFyZXF1aXJlKGx1YnJpZGF0ZSkpIHtsaWJyYXJ5KGx1YnJpZGF0ZSl9IAoKaWYgKCFyZXF1aXJlKCJzY2FsZXMiKSkgewppbnN0YWxsLnBhY2thZ2VzKCJzY2FsZXMiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKbGlicmFyeSgic2NhbGVzIikgCn0KCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKCWVjaG8gPSBUUlVFLAoJbWVzc2FnZSA9IEZBTFNFLAoJd2FybmluZyA9IEZBTFNFLAoJY29tbWVudCA9IE5BLAoJcmVzdWx0cyA9IFRSVUUKKQpgYGAKCiMgSW50cm9kdWN0aW9uCkJlbG93IGlzIGEgYnJlYWtkb3duIG9mIGZvdXIgcG93ZXJmdWwgYW5kIGNvbW1vbmx5IHVzZWQgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9ucyAtIG5vcm1hbCwgc3R1ZGVudCdzIFQsIGNoaS1zcXVhcmUgYW5kIEYuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBhbmFseXNpcywgSSB3aWxsIGJlIGV4YW1pbmluZyBlYWNoIGRpc3RyaWJ1dGlvbiBmcm9tIHRoZSBsZW5zIG9mIGV4cGxvcmluZyAqcmVsYXRpdmUqIHByb2JhYmlsaXRpZXMgb3ZlciBhIHNlcmllcyBvZiB2YWx1ZXMsIHJhdGhlciB0aGFuIGN1bXVsYXRpdmUgb25lcyBhdCBhIHBhcnRpY3VsYXIgcG9pbnQuCgoKIyBOb3JtYWwgRGlzdHJpYnV0aW9uClRoZSBub3JtYWwgZGlzdHJpYnV0aW9uIGlzIHRoZSBtb3N0IGZ1bmRhbWVudGFsIGFuZCBwb3B1bGFyIGRpc3RyaWJ1dGlvbiBpbiB0aGUgd29ybGQgb2Ygc3RhdGlzdGljcy4gRXZlbiB0aG9zZSB3aXRob3V0IHN0YXRpc3RpY2FsIHRyYWluaW5nIGhhdmUgbGlrZWx5IGhlYXJkIG9mIHRoZSAiYmVsbCBjdXJ2ZS4iIFdlbGwsIHRoYXQgc2hhcGUgc3ltYm9saXplcyB0aGUgcmVsYXRpdmUgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uIG9mIHN0YW5kYXJkaXplZCBkYXRhIHdoaWNoIG9yaWdpbmF0ZWQgZnJvbSBhIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIHBvcHVsYXRpb24uCgpBdCB0aGUgaGVhcnQgb2YgdGhlIG5vcm1hbCBkaXN0cmlidXRpb24ncyBjaGFyYWN0ZXJpc3RpY3MgaXMgdGhlIGVtcGlyaWNhbCBydWxlLCB3aGljaCBlc3NlbnRpYWxseSBzdGF0ZXMgdGhhdCBhYm91dCA2OCUgb2YgYSBwb3B1bGF0aW9uIGZhbGxzIHdpdGhpbiBvbmUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBtZWFuLCA5NSUgZmFsbHMgd2l0aGluIHR3byBzdGFuZGFyZCBkZXZpYXRpb25zIGFuZCBvdmVyIDk5JSBmYWxsIHdpdGhpbiB0aHJlZSBzdGFuZGFyZCBkZXZpYXRpb25zLiBBbiBleGFtcGxlIG9mIHRoZSBiZWxsIGN1cnZlIHdpdGggdGhlIGVtcGlyaWNhbCBydWxlIGxhYmVsZWQgaXMgYmVsb3cuCgpgYGB7ciwgZmlnLmFsaWduPSdjZW50ZXInfQppbmNsdWRlX2dyYXBoaWNzKCJCZWxsIEN1cnZlLnBuZyIpCmBgYAoKQWxzbyBzdGVtbWluZyBmcm9tIHRoZSBub3JtYWwgZGlzdHJpYnV0aW9uIGNvbWVzIHRoZSBjZW50cmFsIGxpbWl0IHRoZW9yZW0gKENMVCkuIFRoZSBDTFQgc3RhdGVzIHRoYXQsIGFzIHRoZSBzYW1wbGUgc2l6ZSBvZiBhIHN0dWR5IG9yIGV4cGVyaW1lbnQgaW5jcmVhc2VzIHNvIGRvZXMgdGhlIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbidzIHJlc2VtYmxhbmNlIG9mIG5vcm1hbGl0eS4gVGhpcyB0aGVvcmVtIGlzIG5vbnBhcmFtZXRyaWMsIG1lYW5pbmcgaXQgaG9sZHMgdHJ1ZSAqcmVnYXJkbGVzcyogb2YgdGhlIHRydWUgcG9wdWxhdGlvbiBkaXN0cmlidXRpb24gZnJvbSB3aGljaCB0aGUgc2FtcGxlIGRhdGEgY2FtZSBmcm9tLiBJbiBvdGhlciB3b3JkcywgYXMgbG9uZyBhcyB0aGUgcG9wdWxhdGlvbiBvZiBpbnRlcmVzdCBoYXMgYSBrbm93biBhbmQgZmluaXRlIG1lYW4gKG9yIGF2ZXJhZ2UpIGFuZCB2YXJpYW5jZSwgd2UgY2FuIHByZXN1bWUgYSByZWxhdGl2ZWx5IG5vcm1hbCBkaXN0cmlidXRpb24gb2Ygc2FtcGxlIHN0YXRpc3RpY3MgKHN1Y2ggYXMgbWVhbiBhbmQgcHJvcG9ydGlvbiBmb3IgZXhhbXBsZSkgY29taW5nIGZyb20gdGhhdCBwb3B1bGF0aW9uJ3Mgc2FtcGxlcy4KCiMgVCBEaXN0cmlidXRpb24KVGhlIG5vcm1hbCBkaXN0cmlidXRpb24ncyBjbG9zZXN0IHJlbGF0aXZlIHNvIHRvIHNwZWFrIGluIHRoZSB3b3JsZCBvZiBwcm9iYWJpbGl0eSBkaXN0cmlidXRpb25zIGlzIHRoZSBUIGRpc3RyaWJ1dGlvbiAoc29tZXRpbWVzIGNhbGxlZCB0aGUgU3R1ZGVudCdzIFQpLiBUaGUgVCBkaXN0cmlidXRpb24gaXMgYXBwcm94aW1hdGVseSBiZWxsIHNoYXBlZCwgYW5kIGlzIGFsc28gc3ltbWV0cmljIGp1c3QgbGlrZSB0aGUgbm9ybWFsIGRpc3RyaWJ1dGlvbi4gVGhlIGNydWNpYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBUIGFuZCBub3JtYWwgZGlzdHJpYnV0aW9ucyBkZWFscyB3aXRoIGtub3dsZWRnZSBvZiBwb3B1bGF0aW9uIHZhcmlhbmNlLiAKCkFzIGFsbHVkZWQgdG8gYmVmb3JlLCB0aGUgbm9ybWFsIGRpc3RyaWJ1dGlvbiBpcyBhIHBoZW5vbWVuYWwgdG9vbCB3aGVuIGJvdGggdGhlIHBvcHVsYXRpb24gbWVhbiBhbmQgdmFyaWFuY2UgYXJlIGZpbml0ZSBhbmQga25vd24uIEFsdGVybmF0aXZlbHksIGluIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHBvcHVsYXRpb24gdmFyaWFuY2UgKCRcc2lnbWFeMiQpIGlzIHVua25vd24sIHRoZSBUIGRpc3RyaWJ1dGlvbiBpcyBvZnRlbiByZXNvcnRlZCB0by4gRm9yIHRoZSBUIGRpc3RyaWJ1dGlvbiwgdGhlIHNhbXBsZSB2YXJpYW5jZSAoJFNeMiQpIGlzIHVzZWQgYXMgYW4gZXN0aW1hdG9yIG9mIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlLgoKQWRkaXRpb25hbGx5LCB0aGUgVCBkaXN0cmlidXRpb24gY29uc2lkZXJzIHNhbXBsZSBzaXplIGluIGNhbGN1bGF0aW5nIHJlbGF0aXZlIHByb2JhYmlsaXR5IHdoaWxlIHRoZSBub3JtYWwgZGlzdHJpYnV0aW9uIGRvZXMgbm90LiBUaGUgVCBkaXN0cmlidXRpb24ncyBleGFjdCBzaGFwZSBkZXBlbmRzIG9uIGl0cyBkZWdyZWVzIG9mIGZyZWVkb20gKGRmKS4gVG8gZmluZCB0aGUgZGVncmVlcyBvZiBmcmVlZG9tLCB3ZSBzaW1wbHkgc3VidHJhY3Qgb25lIGZyb20gdGhlIHNhbXBsZSBzaXplLiBBcyBkZWdyZWVzIG9mIGZyZWVkb20gaW5jcmVhc2VzLCBzbyBkb2VzIHRoZSBUIGRpc3RyaWJ1dGlvbidzIHJlc2VtYmxhbmNlIHdpdGggdGhlIG5vcm1hbCBkaXN0cmlidXRpb24sIG1ha2luZyB0aGlzIGRpc3RyaWJ1dGlvbiBtb3N0IGNvbW1vbmx5IHVzZWQgaW4gY2FzZXMgb2Ygc21hbGwgc2FtcGxlIHNpemVzLiBBbiBleGFtcGxlIG9mIFQgZGlzdHJpYnV0aW9uIGN1cnZlcyB3aXRoIGRpZmZlcmluZyBkZWdyZWVzIG9mIGZyZWVkb21zIGluIGNvbXBhcmlzb24gdG8gdGhlIHN0YW5kYXJkIG5vcm1hbCBkaXN0cmlidXRpb24ncyBiZWxsIGN1cnZlIGlzIGJlbG93LgoKYGBge3IgVCBQbG90cywgZmlnLmFsaWduPSdjZW50ZXInLCBmaWcuaGVpZ2h0PTYuNSwgZmlnLndpZHRoPTYuNX0KIyMjIE5vcm1hbCBQREYgCmN1cnZlKGRub3JtKHgsIG1lYW4gPSAwLCBzZCA9IDEpLAogICAgICBmcm9tID0gLTQsCiAgICAgIHRvID0gNCwKICAgICAgbHdkID0gMiwKICAgICAgbWFpbiA9ICJOb3JtYWwgdnMgVCBEaXN0cmlidXRpb25zIiwKICAgICAgeGxhYiA9ICJDcml0aWNhbCBWYWx1ZSIsCiAgICAgIHlsYWIgPSAiUHJvYmFiaWxpdHkgRGVuc2l0eSIpCgpib3gobHdkID0gMykKCiMjIyBUIERpc3RyaWJ1dGlvbiBQREYncwoKIyBkZiA9IDMKY3VydmUoZHQoeCwgZGYgPSAzKSwKICAgICAgZnJvbSA9IC00LCB0byA9IDQsCiAgICAgIGx3ZCA9IDIsCiAgICAgIGx0eSA9IDIsCiAgICAgIGNvbCA9ICJyZWQiLAogICAgICBhZGQgPSBUUlVFKQoKIyBkZiA9IDEwCmN1cnZlKGR0KHgsIGRmID0gMTApLAogICAgICBmcm9tID0gLTQsIHRvID0gNCwKICAgICAgbHdkID0gMiwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gImJsdWUiLAogICAgICBhZGQgPSBUUlVFKQoKIyBkZiA9IDIwCmN1cnZlKGR0KHgsIGRmID0gMjApLAogICAgICBmcm9tID0gLTQsIHRvID0gNCwKICAgICAgbHdkID0gMiwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gIm9yYW5nZSIsCiAgICAgIGFkZCA9IFRSVUUpCgpsZWdlbmQoInRvcHJpZ2h0IiwKICAgICAgIGxlZ2VuZCA9IGMoIk4gKDAsMSkiLCAKICAgICAgICAgICAgICAgICAgcGFzdGUwKCJUIChkZj0iLCAzLCAiKSIpLAogICAgICAgICAgICAgICAgICBwYXN0ZTAoIlQgKGRmPSIsIDEwLCAiKSIpLAogICAgICAgICAgICAgICAgICBwYXN0ZTAoIlQgKGRmPSIsIDIwLCAiKSIpCiAgICAgICAgICAgICAgICAgICksCiAgICAgICBjb2wgPSBjKCJibGFjayIsICJyZWQiLCAiYmx1ZSIsICJvcmFuZ2UiKSwKICAgICAgIGx3ZCA9IDIsCiAgICAgICBsdHkgPSAxLAogICAgICAgYm94Lmx3ZCA9IDMpCgpgYGAKCiMgQ2hpLVNxdWFyZSBEaXN0cmlidXRpb24KVGFraW5nIGFzcGVjdHMgZnJvbSB0aGUgbm9ybWFsLCBUIGFuZCBnYW1tYSBkaXN0cmlidXRpb25zIGlzIHRoZSBjaGktc3F1YXJlIGRpc3RyaWJ1dGlvbi4gVGhlIGdhbW1hIGRpc3RyaWJ1dGlvbiBpcyB1c2VkIGZvciBhIHBvcHVsYXRpb24gdGhhdCBpcyBub24tbmVnYXRpdmUgYW5kIHNrZXdlZCByaWdodHdhcmQuIEEgdHlwaWNhbCBleGFtcGxlIG9mIHdoZW4gdGhlIGdhbW1hIGRpc3RyaWJ1dGlvbiBtaWdodCBiZSBhcHBsaWNhYmxlIGlzIG1vZGVsaW5nIHRoZSBsZW5ndGggb2YgdGltZSB1bnRpbCBhIHJhcmUgZXZlbnQgKGxpa2UgYSBuYXR1cmFsIGRpc2FzdGVyKSBvY2N1cnMuCgpUaGUgY2hpLXNxdWFyZSBkaXN0cmlidXRpb24gaXMgY29uc2lkZXJlZCBhIHNwZWNpYWwgaW5zdGFuY2Ugb2YgdGhlIGdhbW1hLiBUaGUgZ2FtbWEgZGlzdHJpYnV0aW9uIGhhcyB0d28gcGFyYW1ldGVycywgYWxwaGEgKCRcYWxwaGEkKSBhbmQgYmV0YSAoJFxiZXRhJCkuIElmICRcYWxwaGEkID0gJFxmcmFje3Z9ezJ9JCAod2l0aCB2IHJlcHJlc2VudGluZyB0aGUgZGVncmVlcyBvZiBmcmVlZG9tKSBhbmQgJFxiZXRhJCA9IDIsIHRoZW4gdGhlIGRpc3RyaWJ1dGlvbiBpcyBjaGktc3F1YXJlLgoKSnVzdCBsaWtlIHRoZSBUIGRpc3RyaWJ1dGlvbiwgdGhlIGNoaS1zcXVhcmVzIGRlZ3JlZXMgb2YgZnJlZWRvbSBpcyBvbmUgdW5pdCBsZXNzIHRoYW4gdGhlIHNhbXBsZSBzaXplIGJlaW5nIG9ic2VydmVkLiBVbmxpa2UgdGhlIG5vcm1hbCBhbmQgVCBkaXN0cmlidXRpb25zIHRob3VnaCwgdGhlIGNoaS1zcXVhcmUgaGFzIGEgY2xlYXIgYW5kIHByZXZhbGVudCByaWdodHdhcmQgc2tldy4gVGhpcyBpcyBiZWNhdXNlLCBhcyBtZW50aW9uZWQgYWJvdmUsIHRoZSBjaGktc3F1YXJlIGRpc3RyaWJ1dGlvbiBvbmx5IGRlYWxzIHdpdGggbm9uLW5lZ2F0aXZlIHZhbHVlcy4gQSBncmVhdGVyIGRlZ3JlZXMgb2YgZnJlZWRvbSB3aWxsIGNvcnJlbGF0ZSB3aXRoIGFuIHVwd2FyZCBza2V3IGluIHJlbGF0aXZlIHByb2JhYmlsaXR5IGhhcHBlbmluZyBhdCBhIGdyZWF0ZXIgY3JpdGljYWwgdmFsdWUsIGJlZm9yZSBldmVudHVhbGx5IGxldmVsaW5nIG9mZi4gVGhpcyBjYW4gYmUgc2VlbiBpbiB0aGUgcGxvdCBiZWxvdy4KCmBgYHtyIENoaSBTcXVhcmUgUGxvdHMsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmhlaWdodD02LjUsIGZpZy53aWR0aD02LjV9CiMjIyBOb3JtYWwgUERGIApjdXJ2ZShkbm9ybSh4LCBtZWFuID0gMCwgc2QgPSAxKSwKICAgICAgZnJvbSA9IDAsCiAgICAgIHRvID0gNDAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIHlsaW0gPSBjKDAsMC4yNSksCiAgICAgIG1haW4gPSAiTm9ybWFsIHZzIENoaS1TcXVhcmUgRGlzdHJpYnV0aW9ucyIsCiAgICAgIHhsYWIgPSAiQ3JpdGljYWwgVmFsdWUiLAogICAgICB5bGFiID0gIlByb2JhYmlsaXR5IERlbnNpdHkiKQoKYm94KGx3ZCA9IDMpCgojIyMgQ2hpLVNxdWFyZSBEaXN0cmlidXRpb24gUERGJ3MKCiMgZGYgPSAzCmN1cnZlKGRjaGlzcSh4LCBkZiA9IDMpLAogICAgICBmcm9tID0gMCwgdG8gPSA0MCwKICAgICAgbHdkID0gMiwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gInJlZCIsCiAgICAgIGFkZCA9IFRSVUUpCgojIGRmID0gMTAKY3VydmUoZGNoaXNxKHgsIGRmID0gMTApLAogICAgICBmcm9tID0gMCwgdG8gPSA0MCwKICAgICAgbHdkID0gMiwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gImJsdWUiLAogICAgICBhZGQgPSBUUlVFKQoKIyBkZiA9IDIwCmN1cnZlKGRjaGlzcSh4LCBkZiA9IDIwKSwKICAgICAgZnJvbSA9IDAsIHRvID0gNDAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIGx0eSA9IDIsCiAgICAgIGNvbCA9ICJvcmFuZ2UiLAogICAgICBhZGQgPSBUUlVFKQoKbGVnZW5kKCJ0b3ByaWdodCIsCiAgICAgICBsZWdlbmQgPSBjKCJOICgwLDEpIiwgCiAgICAgICAgICAgICAgICAgIHBhc3RlMCgiQ2hpIChkZj0iLCAzLCAiKSIpLAogICAgICAgICAgICAgICAgICBwYXN0ZTAoIkNoaSAoZGY9IiwgMTAsICIpIiksCiAgICAgICAgICAgICAgICAgIHBhc3RlMCgiQ2hpIChkZj0iLCAyMCwgIikiKQogICAgICAgICAgICAgICAgICApLAogICAgICAgY29sID0gYygiYmxhY2siLCAicmVkIiwgImJsdWUiLCAib3JhbmdlIiksCiAgICAgICBsd2QgPSAyLAogICAgICAgbHR5ID0gMSwKICAgICAgIGJveC5sd2QgPSAzKQoKYGBgCgojIEYgRGlzdHJpYnV0aW9uClRoZSBGIGRpc3RyaWJ1dGlvbiBsYXJnZWx5IHJlc2VtYmxlcyB0aGUgY2hpLXNxdWFyZSBhbmQgdGhhdCBpcyBiZWNhdXNlIHRoZSBGIGRpc3RyaWJ1dGlvbiBpcyBhY3R1YWxseSB0aGUgcXVvdGllbnQgb2YgdHdvIGluZGVwZW5kZW50IGNoaS1zcXVhcmVkIHZhcmlhYmxlcy4gV2hpbGUgdGhlIFQgYW5kIGNoaS1zcXVhcmUgZGlzdHJpYnV0aW9ucyBjb25zaWRlcmVkIHRoZSBkZWdyZWVzIG9mIGZyZWVkb20gYXMgKG4gLSAxKSwgdGhlIEYgZGlzdHJpYnV0aW9uIHRha2VzIHRoaXMgZm9ybXVsYSBhbmQgYXBwbGllcyBpdCB0byBlYWNoIG9mIHRoZSB0d28gY2hpLXNxdWFyZWQgdmFyaWFibGVzIGluIGl0cyBjYWxjdWxhdGlvbi4gVGhlcmVmb3JlLCB0aGUgRiBkaXN0cmlidXRpb24gaGFzIGEgc2VwYXJhdGUgZGVncmVlcyBvZiBmcmVlZG9tIHN0YXRpc3RpYyBmb3IgdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuCgpMaWtlIHRoZSBjaGktc3F1YXJlIGRpc3RyaWJ1dGlvbiwgdGhlIEYgZGlzdHJpYnV0aW9uIGlzIG5vbi1uZWdhdGl2ZSBhbmQgcmlnaHR3YXJkIHNrZXdlZC4gVGhlIG51bWVyYXRvciBkZWdyZWVzIG9mIGZyZWVkb20gcHJpbWFyaWx5IGNvbnRyb2xzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VydmUncyBza2V3IHJlbGF0aXZlIHRvIHRoZSBwbG90J3MgeCBheGlzLiBBbiBpbmNyZWFzaW5nIG51bWVyYXRvciBkZWdyZWVzIG9mIGZyZWVkb20gd2lsbCBsZWFkIHRvIHRoZSB1cHdhcmQgdHJhamVjdG9yeSBvZiByZWxhdGl2ZSBwcm9iYWJsaXR5IG9jY3VycmluZyBhdCBhIGdyZWF0ZXIgY3JpdGljYWwgdmFsdWUgKGEgaGlnaGVyIHZhbHVlIGFsb25nIHRoZSB4IGF4aXMpLiBUaGUgcGxvdCBiZWxvdyBpbGx1c3RyYXRlcyBob3csIHdoaWxlIGhvbGRpbmcgdGhlIGRlbm9taW5hdG9yIGRlZ3JlZXMgb2YgZnJlZWRvbSBjb25zdGFudCwgYW4gaW5jcmVhc2UgaW4gdGhlIG51bWVyYXRvciBkZWdyZWVzIG9mIGZyZWVkb20gbWVhbnMgYSByaWdodHdhcmQgc2hpZnQgaW4gdGhlIGRpc3RyaWJ1dGlvbidzIHBlYWssIGhlbmNlIGEgd2Vha2VuaW5nIG9mIHRoZSByaWdodHdhcmQgc2tldyBjaGFyYWN0ZXJpc3RpYy4KCmBgYHtyIEYgRDEgUGxvdHMsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmhlaWdodD02LjUsIGZpZy53aWR0aD02LjV9CiMjIyBOb3JtYWwgUERGIApjdXJ2ZShkbm9ybSh4LCBtZWFuID0gMCwgc2QgPSAxKSwKICAgICAgZnJvbSA9IDAsCiAgICAgIHRvID0gMTAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIHlsaW0gPSBjKDAsMSksCiAgICAgIG1haW4gPSAiTm9ybWFsIHZzIEYgRGlzdHJpYnV0aW9ucyIsCiAgICAgIHhsYWIgPSAiQ3JpdGljYWwgVmFsdWUiLAogICAgICB5bGFiID0gIlByb2JhYmlsaXR5IERlbnNpdHkiKQoKYm94KGx3ZCA9IDMpCgojIyMgRiBEaXN0cmlidXRpb24gUERGJ3MKCmN1cnZlKGRmKHgsIGRmMSA9MiwgZGYyID0gMTApLAogICAgICBmcm9tID0gMCwgdG8gPSAxMCwKICAgICAgbHdkID0gMiwKICAgICAgbHR5ID0gMiwKICAgICAgeWxpbSA9IGMoMCwxKSwKICAgICAgY29sID0gInJlZCIsCiAgICAgIGFkZCA9IFRSVUUpCgpjdXJ2ZShkZih4LCBkZjEgPTEwLCBkZjIgPSAxMCksCiAgICAgIGZyb20gPSAwLCB0byA9IDEwLAogICAgICBsd2QgPSAyLAogICAgICB5bGltID0gYygwLDEpLAogICAgICBsdHkgPSAyLAogICAgICBjb2wgPSAiYmx1ZSIsCiAgICAgIGFkZCA9IFRSVUUpCgpjdXJ2ZShkZih4LCBkZjEgPTEwMCwgZGYyID0gMTApLAogICAgICBmcm9tID0gMCwgdG8gPSAxMCwKICAgICAgbHdkID0gMiwKICAgICAgeWxpbSA9IGMoMCwxKSwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gIm9yYW5nZSIsCiAgICAgIGFkZCA9IFRSVUUpCgpsZWdlbmQoInRvcHJpZ2h0IiwKICAgICAgIGxlZ2VuZCA9IGMoIk4gKDAsMSkiLCAKICAgICAgICAgICAgICAgICAgcGFzdGUwKCJGIChkZj0iLCAyLCAiLCIsIDEwLCAgIikiKSwKICAgICAgICAgICAgICAgICAgcGFzdGUwKCJGIChkZj0iLCAxMCwgIiwiLCAgMTAsICAiKSIpLAogICAgICAgICAgICAgICAgICBwYXN0ZTAoIkYgKGRmPSIsIDEwMCwgIiwiLCAgMTAsICIpIikKICAgICAgICAgICAgICAgICAgKSwKICAgICAgIGNvbCA9IGMoImJsYWNrIiwgInJlZCIsICJibHVlIiwgIm9yYW5nZSIpLAogICAgICAgbHdkID0gMiwKICAgICAgIGx0eSA9IDEsCiAgICAgICBib3gubHdkID0gMykKCmBgYAoKTWVhbndoaWxlLCB0aGUgZGVub21pbmF0b3IgZGVncmVlcyBvZiBmcmVlZG9tIGNvbnRyb2xzIHRoZSBkaXN0cmlidXRpb24ncyBjb25jZW50cmF0aW9uLiBXZSBjYW4gc2VlIHZpYSB0aGUgZ3JhcGhpYyBiZWxvdyB0aGF0IGFuIGluY3JlYXNpbmcgZGVub21pbmF0b3IgZGVncmVlcyBvZiBmcmVlZG9tIGNvcnJlbGF0ZXMgd2l0aCB0aGUgcmVsYXRpdmUgcHJvYmFiaWxpdHkgZGVuc2l0eSAic3Bpa2luZyIgd2l0aGluIGEgc21hbGxlciBhbmQgbW9yZSBjb25maW5lZCByYW5nZSBvZiBjcml0aWNhbCB2YWx1ZXMuIEhlbmNlLCBpdCBpcyBtdWNoIG1vcmUgbGlrZWx5IGZvciBhIEYgZGlzdHJpYnV0aW9uIHdpdGggYSBzbWFsbGVyIGRlbm9taW5hdG9yIGRlZ3JlZXMgb2YgZnJlZWRvbSB0byBvdXRwdXQgYSBsYXJnZSBGIHN0YXRpc3RpYy4KCmBgYHtyIEYgRDIgUGxvdHMsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmhlaWdodD02LjUsIGZpZy53aWR0aD02LjV9CiMjIyBOb3JtYWwgUERGIApjdXJ2ZShkbm9ybSh4LCBtZWFuID0gMCwgc2QgPSAxKSwKICAgICAgZnJvbSA9IDAsCiAgICAgIHRvID0gMTAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIHlsaW0gPSBjKDAsMSksCiAgICAgIG1haW4gPSAiTm9ybWFsIHZzIEYgRGlzdHJpYnV0aW9ucyIsCiAgICAgIHhsYWIgPSAiQ3JpdGljYWwgVmFsdWUiLAogICAgICB5bGFiID0gIlByb2JhYmlsaXR5IERlbnNpdHkiKQoKYm94KGx3ZCA9IDMpCgojIyMgRiBEaXN0cmlidXRpb24gUERGJ3MKCgpjdXJ2ZShkZih4LCBkZjEgPTEwLCBkZjIgPSAyKSwKICAgICAgZnJvbSA9IDAsIHRvID0gMTAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIGx0eSA9IDIsCiAgICAgIHlsaW0gPSBjKDAsMSksCiAgICAgIGNvbCA9ICJyZWQiLAogICAgICBhZGQgPSBUUlVFKQoKY3VydmUoZGYoeCwgZGYxID0xMCwgZGYyID0gMTApLAogICAgICBmcm9tID0gMCwgdG8gPSAxMCwKICAgICAgbHdkID0gMiwKICAgICAgeWxpbSA9IGMoMCwxKSwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gImJsdWUiLAogICAgICBhZGQgPSBUUlVFKQoKY3VydmUoZGYoeCwgZGYxID0xMCwgZGYyID0gMTAwKSwKICAgICAgZnJvbSA9IDAsIHRvID0gMTAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIHlsaW0gPSBjKDAsMSksCiAgICAgIGx0eSA9IDIsCiAgICAgIGNvbCA9ICJvcmFuZ2UiLAogICAgICBhZGQgPSBUUlVFKQoKbGVnZW5kKCJ0b3ByaWdodCIsCiAgICAgICBsZWdlbmQgPSBjKCJOICgwLDEpIiwgCiAgICAgICAgICAgICAgICAgIHBhc3RlMCgiRiAoZGY9IiwgMTAsICIsIiwgMiwgICIpIiksCiAgICAgICAgICAgICAgICAgIHBhc3RlMCgiRiAoZGY9IiwgMTAsICIsIiwgIDEwLCAgIikiKSwKICAgICAgICAgICAgICAgICAgcGFzdGUwKCJGIChkZj0iLCAxMCwgIiwiLCAgMTAwLCAiKSIpCiAgICAgICAgICAgICAgICAgICksCiAgICAgICBjb2wgPSBjKCJibGFjayIsICJyZWQiLCAiYmx1ZSIsICJvcmFuZ2UiKSwKICAgICAgIGx3ZCA9IDIsCiAgICAgICBsdHkgPSAxLAogICAgICAgYm94Lmx3ZCA9IDMpCgpgYGAK