1 Introduction and Background:

I am analyzing a data set compiled in 2020 during the height of COVID-19. This dataset focused on the relationship between dietary decisions, population counts, obesity rates and cases of COVID. It surveyed 170 different countries.

library(tidyverse)
Protein_Data = read_csv(file = "Protein_And_Quantity_Data.csv")

2 Variable Selection

For my analysis I will be working with the variable “Meat”. By just quickly glancing at the data set, I can see there are noticable differences between the amount of meat different countries consume. This can be due to differences in countries’ climates, geographic conditions, cultures and religions.

3 Traditional Confidence Interval Creation

Since we are not provided the standard deviation of meat consumption for each of these countries’ populations, I used a simple t test with a 95% confidence interval to calculate that the average meat consumption across the 170 countries is somewhere between 9.19 and 10.61.

Meat = Protein_Data$Meat
invisible(glimpse(Meat))
 num [1:170] 3.13 7.66 3.51 7.62 16.07 ...
Traditional_CI = t.test(Meat, conf.level = 0.95)
Traditional_CI

    One Sample t-test

data:  Meat
t = 27.536, df = 169, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
  9.193009 10.612918
sample estimates:
mean of x 
 9.902964 

4 Bootstrap Sampling Confidence Interval Creation

On top of creating a standard confidence interval, I also created one using the bootstrap sampling method. That is, I ran a programming loop to take 1,000 samples of the different amounts of meat the countries in the dataset consumed, using a sample size of 55 each time. I then constructed a 95% confidence interval, using the sample means found by that process. Per the bootstrap sampling method; we can infer that the average meat consumption across the 170 countries is somewhere between 8.29 and 8.69.

invisible(sum(is.na(Meat))) #Shows we have no missing values
invisible(sum(is.nan(Meat))) #Shows we have no invalid values (NaN = not a number)

#Sampling process taken from class notes:
Original.Sample = sample(Meat, 
                       55,   #Sample size = 55 values in the sample
                       replace = FALSE  #Sample without replacement
                 ) 

    Bootstrap_Sample_Vector = NULL # Empty vector will hold samples
    
    for(i in 1:1000){ 
      ith.Bootstrap.Sample = sample(x = Original.Sample, 
            size = 55, #Sample size must remain the same for every sample
            replace = TRUE  #Again, sample with replacement
                           )  
      Bootstrap_Sample_Vector[i] = mean(ith.Bootstrap.Sample) }

Boot_CI = quantile(Bootstrap_Sample_Vector, c(.025, .0975))
Boot_CI
    2.5%    9.75% 
9.260504 9.589189 

5 Plot of the Bootstrap Sampling Distribution

Below is a histogram depicting the distribution of the bootstrap sampling means of meat consumed amongst the countries in the dataset. By looking at the visual, it appears that the distribution of meat consumption is relatively normal, and representative of the quantitative figure that was found via the bootstrap confidence interval calculation.

rng <- range(Bootstrap_Sample_Vector, na.rm = TRUE)
Command_Breaks <- seq(rng[1], rng[2], length.out = 15)
##These lines of code will ensure the same number of breaks in histogram every time the file is ran or knitted.

hist(Bootstrap_Sample_Vector, 
     breaks = Command_Breaks, 
       xlab = "Sample Means of Meat Consumed",

        main="Sampling Distribution of \n Bootstrap Sample Means \n of Global Meat Consumed")  

6 Traditional Method vs Bootstrap Method

Traditional = [9.19, 10.61] Bootstrap = [8.29, 8.69]

Looking at our two confidence intervals, the first thing we notice is that the bootstrap interval is far tighter, only having a difference of 0.4 between its lower and upper bound, as opposed to the difference of 1.42 for the t-test interval. This is expected though, as any distribution of sample means has less variance than a distribution of single data points. Along with that, the confidence interval coming from the bootstrap method also provides a lower estimation for the true mean consumption of meat across the surveyed countries than the confidence interval which comes from the traditional method.

Given that we cannot confirm normality for the distribution of meat consumption across these countries, the bootstrap method should be taken as a more reliable measure of the true average of meat consumption.

LS0tCnRpdGxlOiAiQW5hbHlzaXMgb2YgRXN0aW1hdGVkIE1lYXQgSW50YWtlIEJ5IENvdW50cnkgaW4gMjAyMCIKYXV0aG9yOiAiQ2hyaXMgQmFobSIKZGF0ZTogIjIwMjUtMDktMDYiCm91dHB1dDogIAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiB0cnVlCiAgICAgIHNtb290aF9zY3JvbGw6IHRydWUKICAgIHRvY19kZXB0aDogNAogICAgZmlnX3dpZHRoOiA2CiAgICBmaWdfaGVpZ2h0OiA0CiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIHRoZW1lOiBsdW1lbgogICAgaGlnaGxpZ2h0OiB0YW5nbwogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiA0CiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgd29yZF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiA0Ci0tLQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9CmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8KICAgIGxpc3Qtc3R5bGU6dXBwZXItcm9tYW47CiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOwp9CgpoMS50aXRsZSB7ICAgIC8qIGxldmVsIDEgaGVhZGVyIG9mIHRpdGxlICAqLwogIGZvbnQtc2l6ZTogMjRweDsKICBmb250LXdlaWdodDogYm9sZDsKICBjb2xvcjogRGFya1JlZDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBEYXJrUmVkOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBEYXJrQmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDIgeyAvKiBIZWFkZXIgMiAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi8qIEFkZCBkb3RzIGFmdGVyIG51bWJlcmVkIGhlYWRlcnMgKi8KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIuIjsKfQpgYGAKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIGNvZGUgY2h1bmsgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIFIgY29kZSwgd2FybmluZ3MsIGFuZCBvdXRwdXQgCiMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IGZpbGVzLgoKaWYgKCFyZXF1aXJlKCJrbml0ciIpKSB7ICAgICAgICAgICAgICAgICAgICAgICMgdXNlIGNvbmRpdGlvbmFsIHN0YXRlbWVudCB0byBkZXRlY3QKICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKSAgICAgICAgICAgICAgICAgICMgd2hldGhlciBhIHBhY2thZ2Ugd2FzIGluc3RhbGxlZCBpbgogICBsaWJyYXJ5KGtuaXRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB5b3VyIG1hY2hpbmUuIElmIG5vdCwgaW5zdGFsbCBpdCBhbmQKfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbG9hZCBpdCB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkuCiMKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCAgICAgICAgICAgICMgaW5jbHVkZSBjb2RlIGNodW5rIGluIHRoZSBvdXRwdXQgZmlsZQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgICAgICAgIyBzb21ldGltZXMsIHlvdSBjb2RlIG1heSBwcm9kdWNlIHdhcm5pbmcgbWVzc2FnZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHlvdSBjYW4gY2hvb3NlIHRvIGluY2x1ZGUgdGhlIHdhcm5pbmcgbWVzc2FnZXMgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIG91dHB1dCBmaWxlLiAKICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBUUlVFLCAgICAgICAgICMgeW91IGNhbiBhbHNvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiB0aGUgb3V0cHV0IGZpbGUuCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsICAgICAgICAjIHN1cHByZXNzIG1lc3NhZ2VzIAogICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IE5BICAgICAgICAgICAgIyByZW1vdmUgdGhlIGRlZmF1bHQgbGVhZGluZyBoYXNoIHRhZ3MgaW4gdGhlIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgKSAgIApgYGAKCiMjIEludHJvZHVjdGlvbiBhbmQgQmFja2dyb3VuZDoKSSBhbSBhbmFseXppbmcgYSBkYXRhIHNldCBjb21waWxlZCBpbiAyMDIwIGR1cmluZyB0aGUgaGVpZ2h0IG9mIENPVklELTE5LiBUaGlzIGRhdGFzZXQgZm9jdXNlZCBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlldGFyeSBkZWNpc2lvbnMsIHBvcHVsYXRpb24gY291bnRzLCBvYmVzaXR5IHJhdGVzIGFuZCBjYXNlcyBvZiBDT1ZJRC4gSXQgc3VydmV5ZWQgMTcwIGRpZmZlcmVudCBjb3VudHJpZXMuIAoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpQcm90ZWluX0RhdGEgPSByZWFkX2NzdihmaWxlID0gIlByb3RlaW5fQW5kX1F1YW50aXR5X0RhdGEuY3N2IikKYGBgCgojIyBWYXJpYWJsZSBTZWxlY3Rpb24KRm9yIG15IGFuYWx5c2lzIEkgd2lsbCBiZSB3b3JraW5nIHdpdGggdGhlIHZhcmlhYmxlICJNZWF0Ii4gQnkganVzdCBxdWlja2x5IGdsYW5jaW5nIGF0IHRoZSBkYXRhIHNldCwgSSBjYW4gc2VlIHRoZXJlIGFyZSBub3RpY2FibGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgYW1vdW50IG9mIG1lYXQgZGlmZmVyZW50IGNvdW50cmllcyBjb25zdW1lLiBUaGlzIGNhbiBiZSBkdWUgdG8gZGlmZmVyZW5jZXMgaW4gY291bnRyaWVzJyBjbGltYXRlcywgZ2VvZ3JhcGhpYyBjb25kaXRpb25zLCBjdWx0dXJlcyBhbmQgcmVsaWdpb25zLgoKIyMgVHJhZGl0aW9uYWwgQ29uZmlkZW5jZSBJbnRlcnZhbCBDcmVhdGlvbgpTaW5jZSB3ZSBhcmUgbm90IHByb3ZpZGVkIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgbWVhdCBjb25zdW1wdGlvbiBmb3IgZWFjaCBvZiB0aGVzZSBjb3VudHJpZXMnIHBvcHVsYXRpb25zLCBJIHVzZWQgYSBzaW1wbGUgdCB0ZXN0IHdpdGggYSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCB0byBjYWxjdWxhdGUgdGhhdCB0aGUgYXZlcmFnZSBtZWF0IGNvbnN1bXB0aW9uIGFjcm9zcyB0aGUgMTcwIGNvdW50cmllcyBpcyBzb21ld2hlcmUgYmV0d2VlbiA5LjE5IGFuZCAxMC42MS4KYGBge3J9Ck1lYXQgPSBQcm90ZWluX0RhdGEkTWVhdAppbnZpc2libGUoZ2xpbXBzZShNZWF0KSkKClRyYWRpdGlvbmFsX0NJID0gdC50ZXN0KE1lYXQsIGNvbmYubGV2ZWwgPSAwLjk1KQpUcmFkaXRpb25hbF9DSQpgYGAKCiMjIEJvb3RzdHJhcCBTYW1wbGluZyBDb25maWRlbmNlIEludGVydmFsIENyZWF0aW9uCk9uIHRvcCBvZiBjcmVhdGluZyBhIHN0YW5kYXJkIGNvbmZpZGVuY2UgaW50ZXJ2YWwsIEkgYWxzbyBjcmVhdGVkIG9uZSB1c2luZyB0aGUgYm9vdHN0cmFwIHNhbXBsaW5nIG1ldGhvZC4gVGhhdCBpcywgSSByYW4gYSBwcm9ncmFtbWluZyBsb29wIHRvIHRha2UgMSwwMDAgc2FtcGxlcyBvZiB0aGUgZGlmZmVyZW50IGFtb3VudHMgb2YgbWVhdCB0aGUgY291bnRyaWVzIGluIHRoZSBkYXRhc2V0IGNvbnN1bWVkLCB1c2luZyBhIHNhbXBsZSBzaXplIG9mIDU1IGVhY2ggdGltZS4gSSB0aGVuIGNvbnN0cnVjdGVkIGEgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWwsIHVzaW5nIHRoZSBzYW1wbGUgbWVhbnMgZm91bmQgYnkgdGhhdCBwcm9jZXNzLgpQZXIgdGhlIGJvb3RzdHJhcCBzYW1wbGluZyBtZXRob2Q7IHdlIGNhbiBpbmZlciB0aGF0IHRoZSBhdmVyYWdlIG1lYXQgY29uc3VtcHRpb24gYWNyb3NzIHRoZSAxNzAgY291bnRyaWVzIGlzIHNvbWV3aGVyZSBiZXR3ZWVuIDguMjkgYW5kIDguNjkuCmBgYHtyfQppbnZpc2libGUoc3VtKGlzLm5hKE1lYXQpKSkgI1Nob3dzIHdlIGhhdmUgbm8gbWlzc2luZyB2YWx1ZXMKaW52aXNpYmxlKHN1bShpcy5uYW4oTWVhdCkpKSAjU2hvd3Mgd2UgaGF2ZSBubyBpbnZhbGlkIHZhbHVlcyAoTmFOID0gbm90IGEgbnVtYmVyKQoKI1NhbXBsaW5nIHByb2Nlc3MgdGFrZW4gZnJvbSBjbGFzcyBub3RlczoKT3JpZ2luYWwuU2FtcGxlID0gc2FtcGxlKE1lYXQsIAogICAgICAgICAgICAgICAgICAgICAgIDU1LCAgICNTYW1wbGUgc2l6ZSA9IDU1IHZhbHVlcyBpbiB0aGUgc2FtcGxlCiAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZSA9IEZBTFNFICAjU2FtcGxlIHdpdGhvdXQgcmVwbGFjZW1lbnQKICAgICAgICAgICAgICAgICApIAoKICAgIEJvb3RzdHJhcF9TYW1wbGVfVmVjdG9yID0gTlVMTCAjIEVtcHR5IHZlY3RvciB3aWxsIGhvbGQgc2FtcGxlcwogICAgCiAgICBmb3IoaSBpbiAxOjEwMDApeyAKICAgICAgaXRoLkJvb3RzdHJhcC5TYW1wbGUgPSBzYW1wbGUoeCA9IE9yaWdpbmFsLlNhbXBsZSwgCiAgICAgICAgICAgIHNpemUgPSA1NSwgI1NhbXBsZSBzaXplIG11c3QgcmVtYWluIHRoZSBzYW1lIGZvciBldmVyeSBzYW1wbGUKICAgICAgICAgICAgcmVwbGFjZSA9IFRSVUUgICNBZ2Fpbiwgc2FtcGxlIHdpdGggcmVwbGFjZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgCiAgICAgIEJvb3RzdHJhcF9TYW1wbGVfVmVjdG9yW2ldID0gbWVhbihpdGguQm9vdHN0cmFwLlNhbXBsZSkgfQoKQm9vdF9DSSA9IHF1YW50aWxlKEJvb3RzdHJhcF9TYW1wbGVfVmVjdG9yLCBjKC4wMjUsIC4wOTc1KSkKQm9vdF9DSQpgYGAKCiMjIFBsb3Qgb2YgdGhlIEJvb3RzdHJhcCBTYW1wbGluZyBEaXN0cmlidXRpb24KQmVsb3cgaXMgYSBoaXN0b2dyYW0gZGVwaWN0aW5nIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGJvb3RzdHJhcCBzYW1wbGluZyBtZWFucyBvZiBtZWF0IGNvbnN1bWVkIGFtb25nc3QgdGhlIGNvdW50cmllcyBpbiB0aGUgZGF0YXNldC4gQnkgbG9va2luZyBhdCB0aGUgdmlzdWFsLCBpdCBhcHBlYXJzIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiBtZWF0IGNvbnN1bXB0aW9uIGlzIHJlbGF0aXZlbHkgbm9ybWFsLCBhbmQgcmVwcmVzZW50YXRpdmUgb2YgdGhlIHF1YW50aXRhdGl2ZSBmaWd1cmUgdGhhdCB3YXMgZm91bmQgdmlhIHRoZSBib290c3RyYXAgY29uZmlkZW5jZSBpbnRlcnZhbCBjYWxjdWxhdGlvbi4KCmBgYHtyfQpybmcgPC0gcmFuZ2UoQm9vdHN0cmFwX1NhbXBsZV9WZWN0b3IsIG5hLnJtID0gVFJVRSkKQ29tbWFuZF9CcmVha3MgPC0gc2VxKHJuZ1sxXSwgcm5nWzJdLCBsZW5ndGgub3V0ID0gMTUpCiMjVGhlc2UgbGluZXMgb2YgY29kZSB3aWxsIGVuc3VyZSB0aGUgc2FtZSBudW1iZXIgb2YgYnJlYWtzIGluIGhpc3RvZ3JhbSBldmVyeSB0aW1lIHRoZSBmaWxlIGlzIHJhbiBvciBrbml0dGVkLgoKaGlzdChCb290c3RyYXBfU2FtcGxlX1ZlY3RvciwgCiAgICAgYnJlYWtzID0gQ29tbWFuZF9CcmVha3MsIAogICAgICAgeGxhYiA9ICJTYW1wbGUgTWVhbnMgb2YgTWVhdCBDb25zdW1lZCIsCgogICAgICAgIG1haW49IlNhbXBsaW5nIERpc3RyaWJ1dGlvbiBvZiBcbiBCb290c3RyYXAgU2FtcGxlIE1lYW5zIFxuIG9mIEdsb2JhbCBNZWF0IENvbnN1bWVkIikgIApgYGAKCiMjIFRyYWRpdGlvbmFsIE1ldGhvZCB2cyBCb290c3RyYXAgTWV0aG9kClRyYWRpdGlvbmFsID0gWzkuMTksIDEwLjYxXQpCb290c3RyYXAgPSBbOC4yOSwgOC42OV0KCkxvb2tpbmcgYXQgb3VyIHR3byBjb25maWRlbmNlIGludGVydmFscywgdGhlIGZpcnN0IHRoaW5nIHdlIG5vdGljZSBpcyB0aGF0IHRoZSBib290c3RyYXAgaW50ZXJ2YWwgaXMgZmFyIHRpZ2h0ZXIsIG9ubHkgaGF2aW5nIGEgZGlmZmVyZW5jZSBvZiAwLjQgYmV0d2VlbiBpdHMgbG93ZXIgYW5kIHVwcGVyIGJvdW5kLCBhcyBvcHBvc2VkIHRvIHRoZSBkaWZmZXJlbmNlIG9mIDEuNDIgZm9yIHRoZSB0LXRlc3QgaW50ZXJ2YWwuIFRoaXMgaXMgZXhwZWN0ZWQgdGhvdWdoLCBhcyBhbnkgZGlzdHJpYnV0aW9uIG9mIHNhbXBsZSBtZWFucyBoYXMgbGVzcyB2YXJpYW5jZSB0aGFuIGEgZGlzdHJpYnV0aW9uIG9mIHNpbmdsZSBkYXRhIHBvaW50cy4gQWxvbmcgd2l0aCB0aGF0LCB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbCBjb21pbmcgZnJvbSB0aGUgYm9vdHN0cmFwIG1ldGhvZCBhbHNvIHByb3ZpZGVzIGEgbG93ZXIgZXN0aW1hdGlvbiBmb3IgdGhlIHRydWUgbWVhbiBjb25zdW1wdGlvbiBvZiBtZWF0IGFjcm9zcyB0aGUgc3VydmV5ZWQgY291bnRyaWVzIHRoYW4gdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgd2hpY2ggY29tZXMgZnJvbSB0aGUgdHJhZGl0aW9uYWwgbWV0aG9kLgoKR2l2ZW4gdGhhdCB3ZSBjYW5ub3QgY29uZmlybSBub3JtYWxpdHkgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgbWVhdCBjb25zdW1wdGlvbiBhY3Jvc3MgdGhlc2UgY291bnRyaWVzLCB0aGUgYm9vdHN0cmFwIG1ldGhvZCBzaG91bGQgYmUgdGFrZW4gYXMgYSBtb3JlIHJlbGlhYmxlIG1lYXN1cmUgb2YgdGhlIHRydWUgYXZlcmFnZSBvZiBtZWF0IGNvbnN1bXB0aW9uLg==