Individual Details

Executive Statement

The investigation aims to compare product’s price between two supermarkets in Australia, which are Coles and Woolworths. The sample was randomly collected 10 products per one category, and the total sample size is 100 products. The sample data focus on overall price of products, not only just one category. Moreover, the products must have exactly the same brand, weight, and quantity in both supermarkets. If the products are the brand of supermarkets, it need to be nearly the same in terms of ingrediants and quantity. In addition, the special or promotion price will not be considered. Because this investigation is looking for long terms price in both stores, special price has shown only a period of time.

Main Findings

  1. Summary the data from Coles and Woolworths which contains general information, such as mean, sd, n, max, min.
  2. Find the mean difference of both supermarkets
  3. Using plots to report the visualisation
  4. Perform a hypothesis test using paired samples t-tests

After the visualisation and the hypothesis test, it will clearly show that which supermarkets is cheaper.

Load Packages and Data

install.packages("dplyr")
library(dplyr)

install.packages("qqtest")
library(qqtest)

library(car)
library(granova)

library(readxl)
Price_war <- read_excel("~/Documents/Price_war.xlsx")
View(Price_war)

Summary Statistics


Coles

Price_war %>%
  summarise(
  Min = min(Coles, na.rm = TRUE),
  Q1 = quantile(Coles, probs = .25, na.rm = TRUE),
  Median = median(Coles, na.rm = TRUE),
  Q3 = quantile(Coles, probs = .75, na.rm = TRUE),
  Max = max(Coles, na.rm = TRUE),
  Mean = mean(Coles, na.rm = TRUE),
  SD = sd(Coles, na.rm = TRUE),
  n = n(),
  Missing = sum(is.na(Coles))
  )


Woolworths

Price_war %>%
  summarise(
  Min = min(Woolworths, na.rm = TRUE),
  Q1 = quantile(Woolworths, probs = .25, na.rm = TRUE),
  Median = median(Woolworths, na.rm = TRUE),
  Q3 = quantile(Woolworths, probs = .75, na.rm = TRUE),
  Max = max(Woolworths, na.rm = TRUE),
  Mean = mean(Woolworths, na.rm = TRUE),
  SD = sd(Woolworths, na.rm = TRUE),
  n = n(),
  Missing = sum(is.na(Woolworths))
  )


Difference score between Coles and Woolworths

Price_war <- Price_war %>% mutate(d = Woolworths - Coles)
Price_war %>%
  summarise(
  Min = min(d, na.rm = TRUE),
  Q1 = quantile(d, probs = .25, na.rm = TRUE),
  Median = median(d, na.rm = TRUE),
  Q3 = quantile(d, probs = .75, na.rm = TRUE),
  Max = max(d, na.rm = TRUE),
  Mean = mean(d, na.rm = TRUE),
  SD = sd(d, na.rm = TRUE),
  n = n(),
  Missing = sum(is.na(d))
  )


Q-QPlot

qqPlot(Price_war$d, dist="norm")


Boxplot

boxplot(
  Price_war$Coles,
  Price_war$Woolworths,
  ylab = "Price",
  xlab = "Supermarket"
  )
axis(1, at = 1:2, labels = c("Coles", "Woolworths"))

From the boxplot above, the level of price in Woolworths is a little bit below than Coles’price. Although, the boxes are nearly at the same level, but in data point it is clearly seen that Woolworths is cheaper than Coles.


Line plot

matplot(t(data.frame(Price_war$Coles, Price_war$Woolworths)),
  type = "b",
  pch = 19,
  col = 1,
  lty = 1,
  xlab = "Supermarket",
  ylab = "Price",
  xaxt = "n"
  )
axis(1, at = 1:2, labels = c("Coles", "Woolworths"))

From the line plot above, it shows pair score of items. The line goes from left to right as slope which means Woolworth’s price is cheaper than Coles.


Scatter plot

granova.ds(
  data.frame(Price_war$Coles, Price_war$Woolworths),
  xlab = "Coles",
  ylab = "Woolworths"
  )
            Summary Stats
n                 100.000
mean(x)             9.777
mean(y)             9.253
mean(D=x-y)         0.524
SD(D)               1.346
ES(D)               0.389
r(x,y)              0.998
r(x+y,d)            0.805
LL 95%CI            0.256
UL 95%CI            0.791
t(D-bar)            3.888
df.t               99.000
pval.t              0.000

From dependent sample assessment plot, this plot shows the mean difference of Coles and Woolworths and confidence intervals.

Hypothesis Test

\[H_{0}:\mu_{Coles} = \mu_{Woolworths} \] \[H_{A}:\mu_{Coles} > \mu_{Woolworths} \]

t.test(Price_war$Woolworths, Price_war$Coles,
       paired = TRUE,
       var.equal = FALSE,
       alternative = "two.sided")

    Paired t-test

data:  Price_war$Woolworths and Price_war$Coles
t = -3.8881, df = 99, p-value = 0.000183
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.7906611 -0.2563389
sample estimates:
mean of the differences 
                -0.5235 


A one-sample t-test of the mean difference with mu = 0

t.test(Price_war$d, 
       mu = 0, 
       alternative = "two.sided")

    One Sample t-test

data:  Price_war$d
t = -3.8881, df = 99, p-value = 0.000183
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 -0.7906611 -0.2563389
sample estimates:
mean of x 
  -0.5235 

Interpretation

Important Values

Based on significance level is 0.001 < 0.05, the decision is reject \(H_{0}\). Therefore, \(H_{0}\) is rejected and we find statistical evidence to support \(H_{A}\) which is tell us that Woolworths is cheaper than Coles.

Discussion

In this investigation, it aims to compare price between Coles and Woolworths which one is cheaper. The sample has wide range of price, because it has been chosen from many categories. The results have been clearly seen from three graphs that has performed. First, the boxplot shows clearly that Woolworth has slightly lower graph than Coles. Secondly, the line plot presents every single item which is Coles have higher price than Woolworths. Thirdly, dependent sample assessment plot shows the mean difference and confidence intervals.

After performing the hypothesis test, \(p\)-value is less than \(a\) which means reject \(H_{0}\). In addition, the result of the hypothesis test proved that it has a sufficient evidence to support \(H_{A}\). Therefore, Woolworth is cheaper than Coles.

The strength of this investigation is the results has been covered overall products in both supermarkets, it is not only focus in one category. It can tell that Woolworths is cheaper than Coles in overall products. However, the limitation in this investigation, it is difficult to compare with the exactly same products. For example, if it has the exactly same product, either Coles or Woolworths might have a special price. The special price has not considered in the sample because this report will be focus on price in long term. The promotion price is only sell for a period of time.

This investigation can be improved by collect the sample data from only one categories. For instance, collected the data only food categories. It will be telling the result more precisely than looking in overall price of many categories.

LS0tCnRpdGxlOiAiTUFUSDEzMjQgQXNzaWdubWVudCAzIgpzdWJ0aXRsZTogIlN1cGVybWFya2V0IFByaWNlIFdhcnMiCmF1dGhvcjogIk9uamlyYSBCZW5qYXJhbmdzZWVwb3JuY2hhaSIKZGF0ZTogIldlZG5lc2RheSwgTWF5IDEwLCAyMDE3IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIyBJbmRpdmlkdWFsIERldGFpbHMKCiogT25qaXJhIEJlbmphcmFuZ3NlZXBvcm5jaGFpIChzMzYyNzA1NSkKCiMjIEV4ZWN1dGl2ZSBTdGF0ZW1lbnQKClRoZSBpbnZlc3RpZ2F0aW9uIGFpbXMgdG8gY29tcGFyZSBwcm9kdWN0J3MgcHJpY2UgYmV0d2VlbiB0d28gc3VwZXJtYXJrZXRzIGluIEF1c3RyYWxpYSwgd2hpY2ggYXJlIENvbGVzIGFuZCBXb29sd29ydGhzLiBUaGUgc2FtcGxlIHdhcyByYW5kb21seSBjb2xsZWN0ZWQgMTAgcHJvZHVjdHMgcGVyIG9uZSBjYXRlZ29yeSwgYW5kIHRoZSB0b3RhbCBzYW1wbGUgc2l6ZSBpcyAxMDAgcHJvZHVjdHMuIFRoZSBzYW1wbGUgZGF0YSBmb2N1cyBvbiBvdmVyYWxsIHByaWNlIG9mIHByb2R1Y3RzLCBub3Qgb25seSBqdXN0IG9uZSBjYXRlZ29yeS4gTW9yZW92ZXIsIHRoZSBwcm9kdWN0cyBtdXN0IGhhdmUgZXhhY3RseSB0aGUgc2FtZSBicmFuZCwgd2VpZ2h0LCBhbmQgcXVhbnRpdHkgaW4gYm90aCBzdXBlcm1hcmtldHMuIElmIHRoZSBwcm9kdWN0cyBhcmUgdGhlIGJyYW5kIG9mIHN1cGVybWFya2V0cywgaXQgbmVlZCB0byBiZSBuZWFybHkgdGhlIHNhbWUgaW4gdGVybXMgb2YgaW5ncmVkaWFudHMgYW5kIHF1YW50aXR5LiBJbiBhZGRpdGlvbiwgdGhlIHNwZWNpYWwgb3IgcHJvbW90aW9uIHByaWNlIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQuIEJlY2F1c2UgdGhpcyBpbnZlc3RpZ2F0aW9uIGlzIGxvb2tpbmcgZm9yIGxvbmcgdGVybXMgcHJpY2UgaW4gYm90aCBzdG9yZXMsIHNwZWNpYWwgcHJpY2UgaGFzIHNob3duIG9ubHkgYSBwZXJpb2Qgb2YgdGltZS4KCioqTWFpbiBGaW5kaW5ncyoqCgoxLiBTdW1tYXJ5IHRoZSBkYXRhIGZyb20gQ29sZXMgYW5kIFdvb2x3b3J0aHMgd2hpY2ggY29udGFpbnMgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgc3VjaCBhcyBtZWFuLCBzZCwgbiwgbWF4LCBtaW4uCjIuIEZpbmQgdGhlIG1lYW4gZGlmZmVyZW5jZSBvZiBib3RoIHN1cGVybWFya2V0cwozLiBVc2luZyBwbG90cyB0byByZXBvcnQgdGhlIHZpc3VhbGlzYXRpb24KNC4gUGVyZm9ybSBhIGh5cG90aGVzaXMgdGVzdCB1c2luZyBwYWlyZWQgc2FtcGxlcyB0LXRlc3RzCgpBZnRlciB0aGUgdmlzdWFsaXNhdGlvbiBhbmQgdGhlIGh5cG90aGVzaXMgdGVzdCwgaXQgd2lsbCBjbGVhcmx5IHNob3cgdGhhdCB3aGljaCBzdXBlcm1hcmtldHMgaXMgY2hlYXBlci4KCgojIyBMb2FkIFBhY2thZ2VzIGFuZCBEYXRhCgpgYGB7cn0KaW5zdGFsbC5wYWNrYWdlcygiZHBseXIiKQpsaWJyYXJ5KGRwbHlyKQoKaW5zdGFsbC5wYWNrYWdlcygicXF0ZXN0IikKbGlicmFyeShxcXRlc3QpCgpsaWJyYXJ5KGNhcikKbGlicmFyeShncmFub3ZhKQoKbGlicmFyeShyZWFkeGwpClByaWNlX3dhciA8LSByZWFkX2V4Y2VsKCJ+L0RvY3VtZW50cy9QcmljZV93YXIueGxzeCIpClZpZXcoUHJpY2Vfd2FyKQpgYGAKCiMjIFN1bW1hcnkgU3RhdGlzdGljcwoKKiAjIyNTdW1tYXJ5IyMjCgpcCgoqKkNvbGVzKioKYGBge3J9ClByaWNlX3dhciAlPiUKICBzdW1tYXJpc2UoCiAgTWluID0gbWluKENvbGVzLCBuYS5ybSA9IFRSVUUpLAogIFExID0gcXVhbnRpbGUoQ29sZXMsIHByb2JzID0gLjI1LCBuYS5ybSA9IFRSVUUpLAogIE1lZGlhbiA9IG1lZGlhbihDb2xlcywgbmEucm0gPSBUUlVFKSwKICBRMyA9IHF1YW50aWxlKENvbGVzLCBwcm9icyA9IC43NSwgbmEucm0gPSBUUlVFKSwKICBNYXggPSBtYXgoQ29sZXMsIG5hLnJtID0gVFJVRSksCiAgTWVhbiA9IG1lYW4oQ29sZXMsIG5hLnJtID0gVFJVRSksCiAgU0QgPSBzZChDb2xlcywgbmEucm0gPSBUUlVFKSwKICBuID0gbigpLAogIE1pc3NpbmcgPSBzdW0oaXMubmEoQ29sZXMpKQogICkKYGBgCgpcCgoqKldvb2x3b3J0aHMqKgpgYGB7cn0KUHJpY2Vfd2FyICU+JQogIHN1bW1hcmlzZSgKICBNaW4gPSBtaW4oV29vbHdvcnRocywgbmEucm0gPSBUUlVFKSwKICBRMSA9IHF1YW50aWxlKFdvb2x3b3J0aHMsIHByb2JzID0gLjI1LCBuYS5ybSA9IFRSVUUpLAogIE1lZGlhbiA9IG1lZGlhbihXb29sd29ydGhzLCBuYS5ybSA9IFRSVUUpLAogIFEzID0gcXVhbnRpbGUoV29vbHdvcnRocywgcHJvYnMgPSAuNzUsIG5hLnJtID0gVFJVRSksCiAgTWF4ID0gbWF4KFdvb2x3b3J0aHMsIG5hLnJtID0gVFJVRSksCiAgTWVhbiA9IG1lYW4oV29vbHdvcnRocywgbmEucm0gPSBUUlVFKSwKICBTRCA9IHNkKFdvb2x3b3J0aHMsIG5hLnJtID0gVFJVRSksCiAgbiA9IG4oKSwKICBNaXNzaW5nID0gc3VtKGlzLm5hKFdvb2x3b3J0aHMpKQogICkKYGBgCgpcCgoqKkRpZmZlcmVuY2Ugc2NvcmUgYmV0d2VlbiBDb2xlcyBhbmQgV29vbHdvcnRocyoqCgpgYGB7cn0KUHJpY2Vfd2FyIDwtIFByaWNlX3dhciAlPiUgbXV0YXRlKGQgPSBXb29sd29ydGhzIC0gQ29sZXMpCmBgYAoKYGBge3J9ClByaWNlX3dhciAlPiUKICBzdW1tYXJpc2UoCiAgTWluID0gbWluKGQsIG5hLnJtID0gVFJVRSksCiAgUTEgPSBxdWFudGlsZShkLCBwcm9icyA9IC4yNSwgbmEucm0gPSBUUlVFKSwKICBNZWRpYW4gPSBtZWRpYW4oZCwgbmEucm0gPSBUUlVFKSwKICBRMyA9IHF1YW50aWxlKGQsIHByb2JzID0gLjc1LCBuYS5ybSA9IFRSVUUpLAogIE1heCA9IG1heChkLCBuYS5ybSA9IFRSVUUpLAogIE1lYW4gPSBtZWFuKGQsIG5hLnJtID0gVFJVRSksCiAgU0QgPSBzZChkLCBuYS5ybSA9IFRSVUUpLAogIG4gPSBuKCksCiAgTWlzc2luZyA9IHN1bShpcy5uYShkKSkKICApCmBgYAoKXAoKKipRLVFQbG90KioKCmBgYHtyfQpxcVBsb3QoUHJpY2Vfd2FyJGQsIGRpc3Q9Im5vcm0iKQpgYGAKCgoqICMjI1Zpc3VhbGlzYXRpb24jIyMKClwKCioqQm94cGxvdCoqCgpgYGB7cn0KYm94cGxvdCgKICBQcmljZV93YXIkQ29sZXMsCiAgUHJpY2Vfd2FyJFdvb2x3b3J0aHMsCiAgeWxhYiA9ICJQcmljZSIsCiAgeGxhYiA9ICJTdXBlcm1hcmtldCIKICApCmF4aXMoMSwgYXQgPSAxOjIsIGxhYmVscyA9IGMoIkNvbGVzIiwgIldvb2x3b3J0aHMiKSkKYGBgCgpGcm9tIHRoZSBib3hwbG90IGFib3ZlLCB0aGUgbGV2ZWwgb2YgcHJpY2UgaW4gV29vbHdvcnRocyBpcyBhIGxpdHRsZSBiaXQgYmVsb3cgdGhhbiBDb2xlcydwcmljZS4gQWx0aG91Z2gsIHRoZSBib3hlcyBhcmUgbmVhcmx5IGF0IHRoZSBzYW1lIGxldmVsLCBidXQgaW4gZGF0YSBwb2ludCBpdCBpcyBjbGVhcmx5IHNlZW4gdGhhdCBXb29sd29ydGhzIGlzIGNoZWFwZXIgdGhhbiBDb2xlcy4KClwKCioqTGluZSBwbG90KioKCmBgYHtyfQptYXRwbG90KHQoZGF0YS5mcmFtZShQcmljZV93YXIkQ29sZXMsIFByaWNlX3dhciRXb29sd29ydGhzKSksCiAgdHlwZSA9ICJiIiwKICBwY2ggPSAxOSwKICBjb2wgPSAxLAogIGx0eSA9IDEsCiAgeGxhYiA9ICJTdXBlcm1hcmtldCIsCiAgeWxhYiA9ICJQcmljZSIsCiAgeGF4dCA9ICJuIgogICkKYXhpcygxLCBhdCA9IDE6MiwgbGFiZWxzID0gYygiQ29sZXMiLCAiV29vbHdvcnRocyIpKQpgYGAKCkZyb20gdGhlIGxpbmUgcGxvdCBhYm92ZSwgaXQgc2hvd3MgcGFpciBzY29yZSBvZiBpdGVtcy4gVGhlIGxpbmUgZ29lcyBmcm9tIGxlZnQgdG8gcmlnaHQgYXMgc2xvcGUgd2hpY2ggbWVhbnMgV29vbHdvcnRoJ3MgcHJpY2UgaXMgY2hlYXBlciB0aGFuIENvbGVzLgoKXAoKKipTY2F0dGVyIHBsb3QqKgoKYGBge3J9CmdyYW5vdmEuZHMoCiAgZGF0YS5mcmFtZShQcmljZV93YXIkQ29sZXMsIFByaWNlX3dhciRXb29sd29ydGhzKSwKICB4bGFiID0gIkNvbGVzIiwKICB5bGFiID0gIldvb2x3b3J0aHMiCiAgKQpgYGAKCkZyb20gZGVwZW5kZW50IHNhbXBsZSBhc3Nlc3NtZW50IHBsb3QsIHRoaXMgcGxvdCBzaG93cyB0aGUgbWVhbiBkaWZmZXJlbmNlIG9mIENvbGVzIGFuZCBXb29sd29ydGhzIGFuZCBjb25maWRlbmNlIGludGVydmFscy4KCiMjIEh5cG90aGVzaXMgVGVzdAogIAokJEhfezB9OlxtdV97Q29sZXN9ID0gXG11X3tXb29sd29ydGhzfSAkJAokJEhfe0F9OlxtdV97Q29sZXN9ID4gIFxtdV97V29vbHdvcnRoc30gJCQKCgpgYGB7cn0KdC50ZXN0KFByaWNlX3dhciRXb29sd29ydGhzLCBQcmljZV93YXIkQ29sZXMsCiAgICAgICBwYWlyZWQgPSBUUlVFLAogICAgICAgdmFyLmVxdWFsID0gRkFMU0UsCiAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKQpgYGAKXApBIG9uZS1zYW1wbGUgdC10ZXN0IG9mIHRoZSBtZWFuIGRpZmZlcmVuY2Ugd2l0aCBtdSA9IDAKCmBgYHtyfQp0LnRlc3QoUHJpY2Vfd2FyJGQsIAogICAgICAgbXUgPSAwLCAKICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpCmBgYAoKIyMgSW50ZXJwcmV0YXRpb24KCioqSW1wb3J0YW50IFZhbHVlcyoqCgoqIFRoZSBzYW1wbGUgc2l6ZSA9IDEwMAoqIE1lYW4gQ29sZXMgc2NvcmUgPSA5Ljc3NwoqIE1lYW4gV29vbHdvcnRocyBzY29yZSA9IDkuMjUzCiogTWVhbiBkaWZmZXJlbmNlIGJldHdlZW4gQ29sZXMgYW5kIFdvb2x3b3J0aHMgc2NvcmVzID0gLTAuNTI0CiogJHQkID0gLTMuODg4CiogJHAkLXZhbHVlID0gMC4wMDEKKiBMb3dlciBib3VuZCA9IC0wLjc5MQoqIFVwcGVyIGJvdW5kID0gLTAuMjU2CgpCYXNlZCBvbiBzaWduaWZpY2FuY2UgbGV2ZWwgaXMgMC4wMDEgPCAwLjA1LCB0aGUgZGVjaXNpb24gaXMgcmVqZWN0ICRIX3swfSQuClRoZXJlZm9yZSwgJEhfezB9JCBpcyByZWplY3RlZCBhbmQgd2UgZmluZCBzdGF0aXN0aWNhbCBldmlkZW5jZSB0byBzdXBwb3J0ICRIX3tBfSQgd2hpY2ggaXMgdGVsbCB1cyB0aGF0IFdvb2x3b3J0aHMgaXMgY2hlYXBlciB0aGFuIENvbGVzLgoKCiMjIERpc2N1c3Npb24gCgpJbiB0aGlzIGludmVzdGlnYXRpb24sIGl0IGFpbXMgdG8gY29tcGFyZSBwcmljZSBiZXR3ZWVuIENvbGVzIGFuZCBXb29sd29ydGhzIHdoaWNoIG9uZSBpcyBjaGVhcGVyLiBUaGUgc2FtcGxlIGhhcyB3aWRlIHJhbmdlIG9mIHByaWNlLCBiZWNhdXNlIGl0IGhhcyBiZWVuIGNob3NlbiBmcm9tIG1hbnkgY2F0ZWdvcmllcy4gVGhlIHJlc3VsdHMgaGF2ZSBiZWVuIGNsZWFybHkgc2VlbiBmcm9tIHRocmVlIGdyYXBocyB0aGF0IGhhcyBwZXJmb3JtZWQuIEZpcnN0LCB0aGUgYm94cGxvdCBzaG93cyBjbGVhcmx5IHRoYXQgV29vbHdvcnRoIGhhcyBzbGlnaHRseSBsb3dlciBncmFwaCB0aGFuIENvbGVzLiBTZWNvbmRseSwgdGhlIGxpbmUgcGxvdCBwcmVzZW50cyBldmVyeSBzaW5nbGUgaXRlbSB3aGljaCBpcyBDb2xlcyBoYXZlIGhpZ2hlciBwcmljZSB0aGFuIFdvb2x3b3J0aHMuIFRoaXJkbHksIGRlcGVuZGVudCBzYW1wbGUgYXNzZXNzbWVudCBwbG90IHNob3dzIHRoZSBtZWFuIGRpZmZlcmVuY2UgYW5kIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLgoKQWZ0ZXIgcGVyZm9ybWluZyB0aGUgaHlwb3RoZXNpcyB0ZXN0LCAkcCQtdmFsdWUgaXMgbGVzcyB0aGFuICRhJCB3aGljaCBtZWFucyByZWplY3QgJEhfezB9JC4gSW4gYWRkaXRpb24sIHRoZSByZXN1bHQgb2YgdGhlIGh5cG90aGVzaXMgdGVzdCBwcm92ZWQgdGhhdCBpdCBoYXMgYSBzdWZmaWNpZW50IGV2aWRlbmNlIHRvIHN1cHBvcnQgJEhfe0F9JC4gVGhlcmVmb3JlLCBXb29sd29ydGggaXMgY2hlYXBlciB0aGFuIENvbGVzLgoKVGhlIHN0cmVuZ3RoIG9mIHRoaXMgaW52ZXN0aWdhdGlvbiBpcyB0aGUgcmVzdWx0cyBoYXMgYmVlbiBjb3ZlcmVkIG92ZXJhbGwgcHJvZHVjdHMgaW4gYm90aCBzdXBlcm1hcmtldHMsIGl0IGlzIG5vdCBvbmx5IGZvY3VzIGluIG9uZSBjYXRlZ29yeS4gSXQgY2FuIHRlbGwgdGhhdCBXb29sd29ydGhzIGlzIGNoZWFwZXIgdGhhbiBDb2xlcyBpbiBvdmVyYWxsIHByb2R1Y3RzLiBIb3dldmVyLCB0aGUgbGltaXRhdGlvbiBpbiB0aGlzIGludmVzdGlnYXRpb24sIGl0IGlzIGRpZmZpY3VsdCB0byBjb21wYXJlIHdpdGggdGhlIGV4YWN0bHkgc2FtZSBwcm9kdWN0cy4gRm9yIGV4YW1wbGUsIGlmIGl0IGhhcyB0aGUgZXhhY3RseSBzYW1lIHByb2R1Y3QsIGVpdGhlciBDb2xlcyBvciBXb29sd29ydGhzIG1pZ2h0IGhhdmUgYSBzcGVjaWFsIHByaWNlLiBUaGUgc3BlY2lhbCBwcmljZSBoYXMgbm90IGNvbnNpZGVyZWQgaW4gdGhlIHNhbXBsZSBiZWNhdXNlIHRoaXMgcmVwb3J0IHdpbGwgYmUgZm9jdXMgb24gcHJpY2UgaW4gbG9uZyB0ZXJtLiBUaGUgcHJvbW90aW9uIHByaWNlIGlzIG9ubHkgc2VsbCBmb3IgYSBwZXJpb2Qgb2YgdGltZS4KClRoaXMgaW52ZXN0aWdhdGlvbiBjYW4gYmUgaW1wcm92ZWQgYnkgY29sbGVjdCB0aGUgc2FtcGxlIGRhdGEgZnJvbSBvbmx5IG9uZSBjYXRlZ29yaWVzLiBGb3IgaW5zdGFuY2UsIGNvbGxlY3RlZCB0aGUgZGF0YSBvbmx5IGZvb2QgY2F0ZWdvcmllcy4gSXQgd2lsbCBiZSB0ZWxsaW5nIHRoZSByZXN1bHQgbW9yZSBwcmVjaXNlbHkgdGhhbiBsb29raW5nIGluIG92ZXJhbGwgcHJpY2Ugb2YgbWFueSBjYXRlZ29yaWVzLgoK