Start Using the neg.normal() Function

From the negligible R package


Introduction

What is the purpose/goal of neg.normal()?

The purpose of the neg.normal function is to test whether the distribution of scores is negligibly different (or equivalent) to a theoretical normal distribution

What is the theory behind neg.normal()?

neg.normal() will test whether a distribution has a Shapiro-Wilk W statistic that is negligibly different from 1 (i.e., we are testing the null hypothesis that W is less than or equal to some prespecified lower bound for W, with that lower bound being the least extreme value of W that is non-negligibly different from 1). We recommend .95 and .975 as liberal and conservative bounds for the W statistic, respectively.

Null and Alternate Hypotheses of the Procedure

\(H_{0}\): \(\rho_{W}\) \(\leqslant\) \(\zeta\) (population W is less than or equal to the equivalence bound; i.e., the distribution is non-negligibly different from a normal distribution)

\(H_{1}\): \(\rho_{W}\) > \(\zeta\) (population W is greater than the equivalence bound; the difference in the distributions is negligible)

Using neg.normal()

Function Set-up:

neg.normal <- function(x, eiL = .95, nboot = 1000, plot = TRUE, alpha = .05, data = NULL)

Required arguments (no default)

There is one argument that is required (i.e., does not have a default):

x: empirical data for univariate distribution, either in vector format or a column from a dataframe

Optional arguments (has a default)

eiL: the liberal lower bound of the equivalence interval (since SW statistic has an upper bound of 1, only the lower bound needs to be specified, and tested). The default is a liberal lower bound of .95, but any value could be used. The suggested conservative bound is .975.

nboot: default is 1000 bootstrap samples to be drawn from the population

plot: default is TRUE

alpha: nominal Type I error rate. The default is .05, but any value can be used (e.g., .01, .10, .06)

data: default is NULL

Examples

Example 1

Using a simulated normal distribution, we will test whether the difference between an empirical normal distribution (object xx) is negligible to normal when compared to a population normal distribution.

library(negligible) 
set.seed(1234) # ensures values generated using rnorm() will be the same each time  
xx <- rnorm(n=1000) # store a random normal distribution with N = 1000 in an object xx 
neg.normal(x=xx)
******************************* 

Descriptive Measures Regarding the Distribution

Sample Skewness (Type 2): -0.005209845
Sample Kurtosis (Type 2): 0.2492001

Sample Measures of Central Tendency: 

Sample Mean: -0.0265972 
Sample Median: -0.03979419 
Standardized Difference between the Sample Mean and Median ((Median - Mean)/SD): -0.01323221 
Sample Trimmed Mean: -0.03943285 
Standardized Difference between the Sample Mean and Trimmed Mean ((Trimmed Mean - Mean)/SD): -0.01286991 

Sample Measures of Variability: 

Sample Standard Deviation: 0.9973377 
Sample Min: -3.396064 
Sample Max: 3.195901 


******************************* 

Traditional Shapiro Wilk Test Statistic: 
 0.9973713 

Traditional Shapiro Wilk Test p-Value: 
 0.1053028 

The (traditional NHST) null hypothesis that the distribution is normal in form cannot be rejected at alpha = 0.05 

******************************* 

Statistical Test of a Negligible Difference Between the Target/Population Distribution and a Theoretical Normal Distribution

Shapiro-Wilk Statistic: 0.9973713 
Lower Bound of the 100(1-2*0.05)% CI: 0.9929602
Lower Bound of the Negligible Effect (Equivalence) Interval: 0.95 
Negligible Effect (Equivalence) Testing Decision: The null hypothesis that the degree of nonnormality is extreme (i.e., W <= eiL) can be rejected 

******************************* 

Example 2

Here, the eiL is modified from the default of .95 to .975 (conservative bound).

set.seed(1234)
xx <- rnorm(n=1000) # store a random normal distribution with N = 1000 in an object xx 
neg.normal(x=xx, eiL = .975)
******************************* 

Descriptive Measures Regarding the Distribution

Sample Skewness (Type 2): -0.005209845
Sample Kurtosis (Type 2): 0.2492001

Sample Measures of Central Tendency: 

Sample Mean: -0.0265972 
Sample Median: -0.03979419 
Standardized Difference between the Sample Mean and Median ((Median - Mean)/SD): -0.01323221 
Sample Trimmed Mean: -0.03943285 
Standardized Difference between the Sample Mean and Trimmed Mean ((Trimmed Mean - Mean)/SD): -0.01286991 

Sample Measures of Variability: 

Sample Standard Deviation: 0.9973377 
Sample Min: -3.396064 
Sample Max: 3.195901 


******************************* 

Traditional Shapiro Wilk Test Statistic: 
 0.9973713 

Traditional Shapiro Wilk Test p-Value: 
 0.1053028 

The (traditional NHST) null hypothesis that the distribution is normal in form cannot be rejected at alpha = 0.05 

******************************* 

Statistical Test of a Negligible Difference Between the Target/Population Distribution and a Theoretical Normal Distribution

Shapiro-Wilk Statistic: 0.9973713 
Lower Bound of the 100(1-2*0.05)% CI: 0.9929602
Lower Bound of the Negligible Effect (Equivalence) Interval: 0.975 
Negligible Effect (Equivalence) Testing Decision: The null hypothesis that the degree of nonnormality is extreme (i.e., W <= eiL) can be rejected 

******************************* 

Example 3

This example uses a positively skewed distribution (chi square).

#Positive Skewed Distribution
set.seed(1234)
xx<-rchisq(n=1000, df=3)
neg.normal(x=xx)
******************************* 

Descriptive Measures Regarding the Distribution

Sample Skewness (Type 2): 1.721087
Sample Kurtosis (Type 2): 5.296784

Sample Measures of Central Tendency: 

Sample Mean: 3.089235 
Sample Median: 2.407753 
Standardized Difference between the Sample Mean and Median ((Median - Mean)/SD): -0.2696034 
Sample Trimmed Mean: 2.567392 
Standardized Difference between the Sample Mean and Trimmed Mean ((Trimmed Mean - Mean)/SD): -0.2064482 

Sample Measures of Variability: 

Sample Standard Deviation: 2.527718 
Sample Min: 0.03106691 
Sample Max: 23.0513 


******************************* 

Traditional Shapiro Wilk Test Statistic: 
 0.8630149 

Traditional Shapiro Wilk Test p-Value: 
 1.195838e-28 

The (traditional NHST) null hypothesis that the distribution is normal in form can be rejected at alpha = 0.05 

******************************* 

Statistical Test of a Negligible Difference Between the Target/Population Distribution and a Theoretical Normal Distribution

Shapiro-Wilk Statistic: 0.8630149 
Lower Bound of the 100(1-2*0.05)% CI: 0.8266155
Lower Bound of the Negligible Effect (Equivalence) Interval: 0.95 
Negligible Effect (Equivalence) Testing Decision: The null hypothesis that the degree of nonnormality is extreme (i.e., W <= eiL) cannot be rejected 

******************************* 

Output

The output of neg.normal() is divided into three sections:

  1. Descriptive measures of the distribution (skew, kurtosis indices), central tendency (mean, median, trimmed mean, standardized difference between the mean and median, and standardized difference between the mean and trimmed mean), and variability (sample standard deviation, minimum and maximum values).

  2. Traditional (difference-based) results: SW test statistic, p value, and statistical conclusion based on the null hypothesis that the distribution is of a normal form.

  3. Equivalence based results: first, the difference-based SW test statistic is reported (same as for section 2), the lower bound for the 100(1-2alpha)% confidence interval of the test statistic (this is the lower bound of the percentile bootstrap confidence interval that is compared to the lower bound of the equivalence interval), the lower bound of the equivalence interval (.95 is the default), and the decision based on the null hypothesis that the distribution is nonnormal in form. If the lower bound of the 95% bootstrap CI contains the lower bound of the equivalence interval, then the decision will be that the null hypothesis that the degree of nonnormality is extreme cannot be rejected (concluding that the distribution is not normal) whereas if the lower bound of the 95% bootstrap CI does not contain the lower bound of the equivalence interval, than the decision will be that the null hypothesis that the degree of nonnormality is extreme can be rejected (concluding that the distribution is negligible to normal).

Extractable Elements

A number of elements of the output can be extracted, including:

sw: Sample Shapiro-Wilk W statistic

sskew: Sample skewness

skurt: Sample kurtosis

sddiff_mn_mdn: Standardized difference between the sample mean and median

sddiff_mn_trmn: Standardized difference between the sample mean and trimmed mean

lb: Lower bound of 1-alpha CI for W

eiL: Maximum W for which the degree of nonnormality is considered extreme

LS0tDQp0aXRsZTogIlN0YXJ0IFVzaW5nIHRoZSBgbmVnLm5vcm1hbCgpYCBGdW5jdGlvbiINCnN1YnRpdGxlOiB8IA0KICAgIEZyb20gdGhlIFtgbmVnbGlnaWJsZWBdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9uZWdsaWdpYmxlL2luZGV4Lmh0bWwpIFIgcGFja2FnZSFbXShHOi9NeSBEcml2ZS9SZXNlYXJjaC9DcmliYmllIExhYi9uZWdsaWdpYmxlIFZpZ25ldHRlcy9UZW1wbGF0ZS9uZWcubG9nby5wbmcpe3dpZHRoPTEwJX0gIA0KYXV0aG9yOiAiW0xpbmRhIEZhcm11c10oaHR0cHM6Ly93d3cucmVzZWFyY2hnYXRlLm5ldC9wcm9maWxlL0xpbmRhLUZhcm11cykiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCkpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KLS0tDQoNCmBgYHtyIHNldHVwLCBlY2hvPUZBTFNFLCBjYWNoZT1GQUxTRSwgbWVzc2FnZXM9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojaW5zdGFsbC5wYWNrYWdlcygicm1kZm9ybWF0cyIpDQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeShybWRmb3JtYXRzLCB3YXJuLmNvbmZsaWN0cz1GQUxTRSkpDQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeShrbml0ciwgd2Fybi5jb25mbGljdHM9RkFMU0UpKQ0Kc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKGxpYnJhcnkodGlkeXZlcnNlLCB3YXJuLmNvbmZsaWN0cz1GQUxTRSkpDQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeShwbG90bHksIHdhcm4uY29uZmxpY3RzPUZBTFNFKSkNCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyhsaWJyYXJ5KHJlYWR4bCwgd2Fybi5jb25mbGljdHM9RkFMU0UpKQ0Kc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKGxpYnJhcnkocGxvdGx5LCB3YXJuLmNvbmZsaWN0cz1GQUxTRSkpDQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeShNZXRCcmV3ZXIsIHdhcm4uY29uZmxpY3RzPUZBTFNFKSkNCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyhsaWJyYXJ5KGdnYW5pbWF0ZSwgd2Fybi5jb25mbGljdHM9RkFMU0UpKQ0Kc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKGxpYnJhcnkoZHBseXIsIHdhcm4uY29uZmxpY3RzPUZBTFNFKSkNCg0KIyMgR2xvYmFsIG9wdGlvbnMNCm9wdGlvbnMobWF4LnByaW50PSI3NSIpDQpvcHRzX2NodW5rJHNldChlY2hvPVRSVUUsDQoJICAgICAgICAgICAgIGNhY2hlPVRSVUUsDQogICAgICAgICAgICAgICBwcm9tcHQ9RkFMU0UsDQogICAgICAgICAgICAgICBjb21tZW50PU5BLA0KICAgICAgICAgICAgICAgbWVzc2FnZT1GQUxTRSwNCiAgICAgICAgICAgICAgIHdhcm5pbmc9RkFMU0UpDQpvcHRzX2tuaXQkc2V0KHdpZHRoPTc1KQ0KYGBgDQoNCjxici8+DQoNCiMjICoqSW50cm9kdWN0aW9uKioNCg0KIyMjICoqV2hhdCBpcyB0aGUgcHVycG9zZS9nb2FsIG9mIGBuZWcubm9ybWFsKClgPyoqDQoNClRoZSBwdXJwb3NlIG9mIHRoZSBuZWcubm9ybWFsIGZ1bmN0aW9uIGlzIHRvIHRlc3Qgd2hldGhlciB0aGUgZGlzdHJpYnV0aW9uIG9mIHNjb3JlcyBpcyBuZWdsaWdpYmx5IGRpZmZlcmVudCAob3IgZXF1aXZhbGVudCkgdG8gYSB0aGVvcmV0aWNhbCBub3JtYWwgZGlzdHJpYnV0aW9uIA0KDQojIyMgKipXaGF0IGlzIHRoZSB0aGVvcnkgYmVoaW5kIGBuZWcubm9ybWFsKClgPyoqDQoNCm5lZy5ub3JtYWwoKSB3aWxsIHRlc3Qgd2hldGhlciBhIGRpc3RyaWJ1dGlvbiBoYXMgYSBTaGFwaXJvLVdpbGsgKlcqIHN0YXRpc3RpYyB0aGF0IGlzIG5lZ2xpZ2libHkgZGlmZmVyZW50IGZyb20gMSAoaS5lLiwgd2UgYXJlIHRlc3RpbmcgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0ICpXKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gc29tZSBwcmVzcGVjaWZpZWQgbG93ZXIgYm91bmQgZm9yICpXKiwgd2l0aCB0aGF0IGxvd2VyIGJvdW5kIGJlaW5nIHRoZSBsZWFzdCBleHRyZW1lIHZhbHVlIG9mICpXKiB0aGF0IGlzIG5vbi1uZWdsaWdpYmx5IGRpZmZlcmVudCBmcm9tIDEpLiBXZSByZWNvbW1lbmQgLjk1IGFuZCAuOTc1IGFzIGxpYmVyYWwgYW5kIGNvbnNlcnZhdGl2ZSBib3VuZHMgZm9yIHRoZSAqVyogc3RhdGlzdGljLCByZXNwZWN0aXZlbHkuDQoNCiMjIyMgKk51bGwgYW5kIEFsdGVybmF0ZSBIeXBvdGhlc2VzIG9mIHRoZSBQcm9jZWR1cmUqDQoNCiRIX3swfSQ6ICRccmhvX3tXfSQgJFxsZXFzbGFudCQgICRcemV0YSQgKHBvcHVsYXRpb24gKlcqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZXF1aXZhbGVuY2UgYm91bmQ7IGkuZS4sIHRoZSBkaXN0cmlidXRpb24gaXMgbm9uLW5lZ2xpZ2libHkgZGlmZmVyZW50IGZyb20gYSBub3JtYWwgZGlzdHJpYnV0aW9uKSANCg0KJEhfezF9JDogJFxyaG9fe1d9JCA+ICRcemV0YSQgKHBvcHVsYXRpb24gKlcqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZXF1aXZhbGVuY2UgYm91bmQ7IHRoZSBkaWZmZXJlbmNlIGluIHRoZSBkaXN0cmlidXRpb25zIGlzIG5lZ2xpZ2libGUpDQoNCiMjIyAqKlVzaW5nIGBuZWcubm9ybWFsKClgKioNCg0KIyMjIEZ1bmN0aW9uIFNldC11cDoNCg0KbmVnLm5vcm1hbCA8LSBmdW5jdGlvbih4LCBlaUwgPSAuOTUsIG5ib290ID0gMTAwMCwgcGxvdCA9IFRSVUUsIGFscGhhID0gLjA1LCBkYXRhID0gTlVMTCkNCg0KIyMjIyAqUmVxdWlyZWQgYXJndW1lbnRzIChubyBkZWZhdWx0KSoNCg0KVGhlcmUgaXMgb25lIGFyZ3VtZW50IHRoYXQgaXMgcmVxdWlyZWQgKGkuZS4sIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0KToNCg0KKngqOiBlbXBpcmljYWwgZGF0YSBmb3IgdW5pdmFyaWF0ZSBkaXN0cmlidXRpb24sIGVpdGhlciBpbiB2ZWN0b3IgZm9ybWF0IG9yIGEgY29sdW1uIGZyb20gYSBkYXRhZnJhbWUNCg0KIyMjIyAqT3B0aW9uYWwgYXJndW1lbnRzIChoYXMgYSBkZWZhdWx0KSoNCg0KKmVpTCo6IHRoZSBsaWJlcmFsIGxvd2VyIGJvdW5kIG9mIHRoZSBlcXVpdmFsZW5jZSBpbnRlcnZhbCAoc2luY2UgU1cgc3RhdGlzdGljIGhhcyBhbiB1cHBlciBib3VuZCBvZiAxLCBvbmx5IHRoZSBsb3dlciBib3VuZCBuZWVkcyB0byBiZSBzcGVjaWZpZWQsIGFuZCB0ZXN0ZWQpLiBUaGUgZGVmYXVsdCBpcyBhIGxpYmVyYWwgbG93ZXIgYm91bmQgb2YgLjk1LCBidXQgYW55IHZhbHVlIGNvdWxkIGJlIHVzZWQuIFRoZSBzdWdnZXN0ZWQgY29uc2VydmF0aXZlIGJvdW5kIGlzIC45NzUuIA0KDQoqbmJvb3QqOiBkZWZhdWx0IGlzIDEwMDAgYm9vdHN0cmFwIHNhbXBsZXMgdG8gYmUgZHJhd24gZnJvbSB0aGUgcG9wdWxhdGlvbg0KDQoqcGxvdCo6IGRlZmF1bHQgaXMgVFJVRSANCg0KKmFscGhhKjogbm9taW5hbCBUeXBlIEkgZXJyb3IgcmF0ZS4gVGhlIGRlZmF1bHQgaXMgLjA1LCBidXQgYW55IHZhbHVlIGNhbiBiZSB1c2VkIChlLmcuLCAuMDEsIC4xMCwgLjA2KQ0KDQoqZGF0YSo6IGRlZmF1bHQgaXMgTlVMTCANCg0KDQojIyAqKkV4YW1wbGVzKioNCg0KIyMjICoqRXhhbXBsZSAxKioNCg0KVXNpbmcgYSBzaW11bGF0ZWQgbm9ybWFsIGRpc3RyaWJ1dGlvbiwgd2Ugd2lsbCB0ZXN0IHdoZXRoZXIgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhbiBlbXBpcmljYWwgbm9ybWFsIGRpc3RyaWJ1dGlvbiAob2JqZWN0IHh4KSBpcyBuZWdsaWdpYmxlIHRvIG5vcm1hbCB3aGVuIGNvbXBhcmVkIHRvIGEgcG9wdWxhdGlvbiBub3JtYWwgZGlzdHJpYnV0aW9uLiAgDQpgYGB7cn0NCmxpYnJhcnkobmVnbGlnaWJsZSkgDQpzZXQuc2VlZCgxMjM0KSAjIGVuc3VyZXMgdmFsdWVzIGdlbmVyYXRlZCB1c2luZyBybm9ybSgpIHdpbGwgYmUgdGhlIHNhbWUgZWFjaCB0aW1lICANCnh4IDwtIHJub3JtKG49MTAwMCkgIyBzdG9yZSBhIHJhbmRvbSBub3JtYWwgZGlzdHJpYnV0aW9uIHdpdGggTiA9IDEwMDAgaW4gYW4gb2JqZWN0IHh4IA0KbmVnLm5vcm1hbCh4PXh4KQ0KYGBgDQoNCg0KIyMjICoqRXhhbXBsZSAyKioNCg0KSGVyZSwgdGhlIGVpTCBpcyBtb2RpZmllZCBmcm9tIHRoZSBkZWZhdWx0IG9mIC45NSB0byAuOTc1IChjb25zZXJ2YXRpdmUgYm91bmQpLiAgDQpgYGB7cn0NCnNldC5zZWVkKDEyMzQpDQp4eCA8LSBybm9ybShuPTEwMDApICMgc3RvcmUgYSByYW5kb20gbm9ybWFsIGRpc3RyaWJ1dGlvbiB3aXRoIE4gPSAxMDAwIGluIGFuIG9iamVjdCB4eCANCm5lZy5ub3JtYWwoeD14eCwgZWlMID0gLjk3NSkNCmBgYA0KDQojIyMgKipFeGFtcGxlIDMqKg0KDQpUaGlzIGV4YW1wbGUgdXNlcyBhIHBvc2l0aXZlbHkgc2tld2VkIGRpc3RyaWJ1dGlvbiAoY2hpIHNxdWFyZSkuICANCmBgYHtyfQ0KI1Bvc2l0aXZlIFNrZXdlZCBEaXN0cmlidXRpb24NCnNldC5zZWVkKDEyMzQpDQp4eDwtcmNoaXNxKG49MTAwMCwgZGY9MykNCm5lZy5ub3JtYWwoeD14eCkNCmBgYA0KDQojIyAqKk91dHB1dCoqDQoNCiMjIyAqKlRoZSBvdXRwdXQgb2YgbmVnLm5vcm1hbCgpIGlzIGRpdmlkZWQgaW50byB0aHJlZSBzZWN0aW9uczoqKg0KDQoxLiBEZXNjcmlwdGl2ZSBtZWFzdXJlcyBvZiB0aGUgZGlzdHJpYnV0aW9uIChza2V3LCBrdXJ0b3NpcyBpbmRpY2VzKSwgY2VudHJhbCB0ZW5kZW5jeSAobWVhbiwgbWVkaWFuLCB0cmltbWVkIG1lYW4sIHN0YW5kYXJkaXplZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG1lYW4gYW5kIG1lZGlhbiwgYW5kIHN0YW5kYXJkaXplZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG1lYW4gYW5kIHRyaW1tZWQgbWVhbiksIGFuZCB2YXJpYWJpbGl0eSAoc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiwgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMpLg0KDQoyLiBUcmFkaXRpb25hbCAoZGlmZmVyZW5jZS1iYXNlZCkgcmVzdWx0czogU1cgdGVzdCBzdGF0aXN0aWMsICpwKiB2YWx1ZSwgYW5kIHN0YXRpc3RpY2FsIGNvbmNsdXNpb24gYmFzZWQgb24gdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgb2YgYSBub3JtYWwgZm9ybS4gDQoNCjMuIEVxdWl2YWxlbmNlIGJhc2VkIHJlc3VsdHM6IGZpcnN0LCB0aGUgZGlmZmVyZW5jZS1iYXNlZCBTVyB0ZXN0IHN0YXRpc3RpYyBpcyByZXBvcnRlZCAoc2FtZSBhcyBmb3Igc2VjdGlvbiAyKSwgdGhlIGxvd2VyIGJvdW5kIGZvciB0aGUgMTAwKDEtMmFscGhhKSUgY29uZmlkZW5jZSBpbnRlcnZhbCBvZiB0aGUgdGVzdCBzdGF0aXN0aWMgKHRoaXMgaXMgdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBwZXJjZW50aWxlIGJvb3RzdHJhcCBjb25maWRlbmNlIGludGVydmFsIHRoYXQgaXMgY29tcGFyZWQgdG8gdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBlcXVpdmFsZW5jZSBpbnRlcnZhbCksIHRoZSBsb3dlciBib3VuZCBvZiB0aGUgZXF1aXZhbGVuY2UgaW50ZXJ2YWwgKC45NSBpcyB0aGUgZGVmYXVsdCksIGFuZCB0aGUgZGVjaXNpb24gYmFzZWQgb24gdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgbm9ubm9ybWFsIGluIGZvcm0uIElmIHRoZSBsb3dlciBib3VuZCBvZiB0aGUgOTUlIGJvb3RzdHJhcCBDSSBjb250YWlucyB0aGUgbG93ZXIgYm91bmQgb2YgdGhlIGVxdWl2YWxlbmNlIGludGVydmFsLCB0aGVuIHRoZSBkZWNpc2lvbiB3aWxsIGJlIHRoYXQgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHRoZSBkZWdyZWUgb2Ygbm9ubm9ybWFsaXR5IGlzIGV4dHJlbWUgY2Fubm90IGJlIHJlamVjdGVkIChjb25jbHVkaW5nIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBpcyBub3Qgbm9ybWFsKSB3aGVyZWFzIGlmIHRoZSBsb3dlciBib3VuZCBvZiB0aGUgOTUlIGJvb3RzdHJhcCBDSSBkb2VzIG5vdCBjb250YWluIHRoZSBsb3dlciBib3VuZCBvZiB0aGUgZXF1aXZhbGVuY2UgaW50ZXJ2YWwsIHRoYW4gdGhlIGRlY2lzaW9uIHdpbGwgYmUgdGhhdCB0aGUgbnVsbCBoeXBvdGhlc2lzIHRoYXQgdGhlIGRlZ3JlZSBvZiBub25ub3JtYWxpdHkgaXMgZXh0cmVtZSBjYW4gYmUgcmVqZWN0ZWQgKGNvbmNsdWRpbmcgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGlzIG5lZ2xpZ2libGUgdG8gbm9ybWFsKS4NCg0KDQojIyAqKkV4dHJhY3RhYmxlIEVsZW1lbnRzKioNCg0KQSBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIG91dHB1dCBjYW4gYmUgZXh0cmFjdGVkLCBpbmNsdWRpbmc6DQoNCipzdyo6IFNhbXBsZSBTaGFwaXJvLVdpbGsgVyBzdGF0aXN0aWMNCg0KKnNza2V3KjogU2FtcGxlIHNrZXduZXNzDQoNCipza3VydCo6IFNhbXBsZSBrdXJ0b3Npcw0KDQoqc2RkaWZmX21uX21kbio6IFN0YW5kYXJkaXplZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHNhbXBsZSBtZWFuIGFuZCBtZWRpYW4NCg0KKnNkZGlmZl9tbl90cm1uKjogU3RhbmRhcmRpemVkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc2FtcGxlIG1lYW4gYW5kIHRyaW1tZWQgbWVhbg0KDQoqbGIqOiBMb3dlciBib3VuZCBvZiAxLWFscGhhIENJIGZvciBXDQoNCiplaUwqOiBNYXhpbXVtIFcgZm9yIHdoaWNoIHRoZSBkZWdyZWUgb2Ygbm9ubm9ybWFsaXR5IGlzIGNvbnNpZGVyZWQgZXh0cmVtZQ==