2.10 Question No. 1
- Use the help function to explore what the series gold, woolyrnq and gas represent.
ANSWER:
For question one, the author is asking to use exploratory data techniques to get insight and visualize each time series.
Gold
We can confirm that the Gold dataset is a Time Series dataset by applying the class method. The result “ts” confirms that the dataset is a time series.
## [1] "ts"
The function help gives more details about the time series.
## starting httpd help server ... done
Below is the output from the help documentation on the series:
Gold
Daily morning gold prices
Description
Daily morning gold prices in US dollars. 1 January 1985- 31 March 1989.
Usage
gold
Format
Time series data
The “summary” function gives us basic descriptive statistics for the time series including the number of null values (“NA’s”) which is 34.
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 285.0 337.7 403.2 392.5 443.7 593.7 34
The “head” and “tail” functions show us the firt and last six entries as well as the frequency of the time series. In this case, it’s a monthly time series.
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] 306.25 299.50 303.45 296.75 304.40 298.35
## Time Series:
## Start = 1103
## End = 1108
## Frequency = 1
## [1] NA NA 391.25 383.30 384.00 382.30
The same exploratory analysis is performed on the other time series.
woolyrnq
## [1] "ts"
Quarterly production of woollen yarn in Australia
Description
Quarterly production of woollen yarn in Australia: tonnes. Mar 1965 – Sep 1994.
Usage
woolyrnq
Format
Time series data
Source Time Series Data Library. https://pkg.yangzhuoranyang.com/tsdl/
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3324 4882 5466 5658 6646 7819
## Qtr1 Qtr2 Qtr3 Qtr4
## 1965 6172 6709 6633 6660
## 1966 6786 6800
## Qtr1 Qtr2 Qtr3 Qtr4
## 1993 4588 5309 4732
## 1994 4837 6135 6396
We see with this time series that it’s a quarterly time series from 1965 though the 3rd quarter of 1994.
gas
## [1] "ts"
Australian monthly gas production
Description
Australian monthly gas production: 1956–1995.
Usage
gas
Format
Time series data
Source
Australian Bureau of Statistics.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1646 2675 16788 21415 38629 66600
## Jan Feb Mar Apr May Jun
## 1956 1709 1646 1794 1878 2173 2321
## Mar Apr May Jun Jul Aug
## 1995 46287 49013 56624 61739 66600 60054
We see that the time series is monthly from 1956 to 1995.
Next, we use autoplot() to plot each of these in separate plots.
GOLD:

WOOLYRNQ:

GAS:

b. What is the frequency of each series? Hint: apply the frequency() function
The frequency of the gold,woolyrnq,and gas time serieses is daily, quarterly, and monthly respectively.
## [1] 1
## [1] 4
## [1] 12
c. Use which.max() to spot the outlier in the gold series. Which observation was it?
## [1] "The observation at: 770 shows that the maximum price of gold (outlier) is: 593.7"
2.10 Question No. 2
For this question, the author tasks us with loading data from a csv file and converting it into a time series using the function, “ts”.
Here, the frequency argument of the ts function is set to “4” for quarterly analysis.
When we plot the series with autoplot and set the “facets” argument to “TRUE”, the plot shows different scales on the Y-axis for the Sales, AdBudget, and GDP data.
When the facets argument is set to FALSE, there’s a common y-axis for all three datasets.


2.10 Question No. 3
For this question, the author tasks us to read in an excel file containing Australian retail data.
The autoplot shows monthly liquor sales from April 1982 to December 2013. The plot shows an increasing trend in sales along with a strong seasonality component which grows in strength.

The ggseasonplot and ggsubseriesplot show the seasonality of liquor sales. The earlier years starting from 1982 are at the bottom of the plot with the later years at the top. The graph shows the yearly increase in sales and towards the last two months of the year, sales tend to spike.


Setting the polar attribute to TRUE for the ggseasonplot further deomonstrates the seasonal nature of liquor sales with a spike in December sales

Over the next two plots, the gglagplot and the ggACF plot, we see how observations are plotted against earlier observations or lags against itself. Lag 12 supports the finding that sales spike in the 12 month which is shown in the ggacf plot.


2.10 Question No. 6
Sales of one-family houses
Sales of one-family houses
Description
Monthly sales of new one-family houses sold in the USA since 1973.
Usage
hsales
Format
Time series data
Source
Makridakis, Wheelwright and Hyndman (1998) Forecasting: methods and applications, John Wiley & Sons: New York. Chapter 3.
## Jan Feb Mar Apr May Jun
## 1973 55 60 68 63 65 61
## Jun Jul Aug Sep Oct Nov
## 1995 64 64 63 55 54 44
recessions = read.table(textConnection(
"Peak, Trough
1973-11-01, 1975-03-01
1980-01-01, 1980-07-01
1981-07-01, 1982-11-01
1990-07-01, 1991-03-01"), sep=',',
colClasses=c('Date', 'Date'), header=TRUE)
## Peak Trough
## 1 1973-11-01 1975-03-01
## 2 1980-01-01 1980-07-01
## 3 1981-07-01 1982-11-01
## 4 1990-07-01 1991-03-01





Analysis of Sales of one-family house
The above plots show that there is no trend for the sales of one family houses from 1973 to 1995. However, there are cyclic and seasonal trends. We can see the downward trends for sales matching downturns in the economy. From the seasonal plots, we can clearly see that sales are strongest in the months of March, April, and May. Finally from the lag plots, we can see that the most recent prior period (lag=1) is strongly correlated to the current period. Lags that are further out, esp. lags at 18 to 21, are not as well correlated. This shows that housing sales have recency bias.
Accidential Deaths in USA
Accidental deaths in USA
Description
Monthly accidental deaths in USA.
Usage
usdeaths
Format
Time series data
Source
Makridakis, Wheelwright and Hyndman (1998) Forecasting: methods and applications, John Wiley & Sons: New York. Exercises 2.3 and 2.4.
## Jan Feb Mar Apr May Jun
## 1973 9007 8106 8928 9137 10017 10826
## Jul Aug Sep Oct Nov Dec
## 1978 10484 9827 9110 9070 8633 9240
## [1] 12





Analysis of Accidental deaths in USA
The strongest signal in the data is a seasonal trend for accidental deaths. Intuition tells us that since these are the summer months for most of the USA, more people are on the roads driving which is probably the leading cause of accidental deaths. There does not appear to be any cyclical or other trends.
Quarterly clay brick production
Quarterly clay brick production
Description
Australian quarterly clay brick production: 1956–1994.
Usage
bricksq
Format
Time series data
Source
Makridakis, Wheelwright and Hyndman (1998) Forecasting: methods and applications, John Wiley & Sons: New York. Chapter 1 and Exercise 2.3.
## Qtr1 Qtr2 Qtr3 Qtr4
## 1956 189 204 208 197
## 1957 187 214
## Qtr1 Qtr2 Qtr3 Qtr4
## 1993 462 476 443
## 1994 421 472 494
## [1] 4





Analysis of Quarterly clay brick production
There is a long term growth trend for clay brick production from 1956 to 1994 along with a slight seasonal trend which shows higher production in quarters 2 and 3. The most interesting item is that there is a strong auto correlation with prior periods of time. A 20 period lag is still correlated above .5.
Annual average sunspot area (1875-2015)
Annual average sunspot area (1875-2015)
Description
Annual averages of the daily sunspot areas (in units of millionths of a hemisphere) for the full sun. Sunspots are magnetic regions that appear as dark spots on the surface of the sun. The Royal Greenwich Observatory compiled daily sunspot observations from May 1874 to 1976. Later data are from the US Air Force and the US National Oceanic and Atmospheric Administration. The data have been calibrated to be consistent across the whole history of observations.
Format
Annual time series of class ts.
Source
NASA
## Time Series:
## Start = 1875
## End = 1880
## Frequency = 1
## [1] 213.13333 109.28333 92.85833 22.21667 36.33333 446.75000
## [1] "ts"
## Time Series:
## Start = 2010
## End = 2015
## Frequency = 1
## [1] 214.2917 749.5667 796.8833 860.7750 1252.1500 618.8083
## [1] 1



Analysis of Annual average sunspot area (1875-2015)
Since the data is collected on an annual basis, there is no seasonal component to it. There is no trend, but there is a cycle in the data. It seems as though in odd numbered years, there is more sunspot activity. There also seems to be negative correlations between lags.
US finished motor gasoline product supplied
US finished motor gasoline product supplied.
Description
Weekly data beginning 2 February 1991, ending 20 January 2017. Units are “million barrels per day”.
Format
Time series object of class ts.
Source
US Energy Information Administration.
## Time Series:
## Start = 1991.1
## End = 1991.19582477755
## Frequency = 52.1785714285714
## [1] 6.621 6.433 6.582 7.224 6.875 6.947
## Time Series:
## Start = 2016.95352498289
## End = 2017.04934976044
## Frequency = 52.1785714285714
## [1] 9.269 9.278 8.465 8.470 8.069 8.039
## [1] 52.17857




Analysis of US finished motor gasoline product supplied
There is an increasing trend in the US finished motor gasoline product supplied from 1991 to 2017. The seasonality trend shows an uptick in the middle of a year during the summer months and lower in the winter months. Perhaps the most important item is the very strong auto correlation between the lags.
LS0tDQp0aXRsZTogIkNVTlkgREFUQSA2MjQgU3ByaW5nIDIwMjEgSFcxIg0KYXV0aG9yOiAiSm9obiBLLiBIYW5jb2NrIg0KZGF0ZTogIjIvMTEvMjAyMSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIHRoZW1lOiBmbGF0bHkNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeSgnZnBwMicpDQpsaWJyYXJ5KHN0cmluZ3IpIA0KbGlicmFyeSh0aWR5dmVyc2UpIA0KbGlicmFyeShIbWlzYykNCmRhdGEoImdvbGQiKQ0KZGF0YSgid29vbHlybnEiKQ0KZGF0YSgiZ2FzIikNCg0KYGBgDQoNCg0KIyMgMi4xMCBRdWVzdGlvbiBOby4gMQ0KDQphLiBVc2UgdGhlIGhlbHAgZnVuY3Rpb24gdG8gZXhwbG9yZSB3aGF0IHRoZSBzZXJpZXMgZ29sZCwgd29vbHlybnEgYW5kIGdhcyByZXByZXNlbnQuDQoNCjxpPkFOU1dFUjo8L2k+DQoNCkZvciBxdWVzdGlvbiBvbmUsIHRoZSBhdXRob3IgaXMgYXNraW5nIHRvIHVzZSBleHBsb3JhdG9yeSBkYXRhIHRlY2huaXF1ZXMgdG8gZ2V0IGluc2lnaHQgYW5kIHZpc3VhbGl6ZSBlYWNoIHRpbWUgc2VyaWVzLiANCg0KDQo8Yj5Hb2xkPC9iPg0KDQpXZSBjYW4gY29uZmlybSB0aGF0IHRoZSBHb2xkIGRhdGFzZXQgaXMgYSBUaW1lIFNlcmllcyBkYXRhc2V0IGJ5IGFwcGx5aW5nIHRoZSBjbGFzcyBtZXRob2QuICBUaGUgcmVzdWx0ICJ0cyIgY29uZmlybXMgdGhhdCB0aGUgZGF0YXNldCBpcyBhIHRpbWUgc2VyaWVzLg0KDQpgYGB7cn0NCmNsYXNzKGdvbGQpDQpgYGANCg0KVGhlIGZ1bmN0aW9uIGhlbHAgZ2l2ZXMgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSB0aW1lIHNlcmllcy4NCg0KYGBge3J9DQpoZWxwKGdvbGQpDQpgYGANCg0KQmVsb3cgaXMgdGhlIG91dHB1dCBmcm9tIHRoZSBoZWxwIGRvY3VtZW50YXRpb24gb24gdGhlIHNlcmllczoNCg0KPGI+R29sZDwvYj4NCg0KRGFpbHkgbW9ybmluZyBnb2xkIHByaWNlczxicj4NCkRlc2NyaXB0aW9uPGJyPg0KRGFpbHkgbW9ybmluZyBnb2xkIHByaWNlcyBpbiBVUyBkb2xsYXJzLiAxIEphbnVhcnkgMTk4NS0gMzEgTWFyY2ggMTk4OS48YnI+DQoNClVzYWdlPGJyPg0KZ29sZDxicj4NCkZvcm1hdDxicj4NClRpbWUgc2VyaWVzIGRhdGENCg0KDQpUaGUgInN1bW1hcnkiIGZ1bmN0aW9uIGdpdmVzIHVzIGJhc2ljIGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgZm9yIHRoZSB0aW1lIHNlcmllcyBpbmNsdWRpbmcgdGhlIG51bWJlciBvZiBudWxsIHZhbHVlcyAoIk5BJ3MiKSB3aGljaCBpcyAzNC4gIA0KDQpgYGB7cn0NCnN1bW1hcnkoZ29sZCkNCmBgYA0KDQoNClRoZSAiaGVhZCIgYW5kICJ0YWlsIiBmdW5jdGlvbnMgc2hvdyB1cyB0aGUgZmlydCBhbmQgbGFzdCBzaXggZW50cmllcyBhcyB3ZWxsIGFzIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHRpbWUgc2VyaWVzLiAgSW4gdGhpcyBjYXNlLCBpdCdzIGEgbW9udGhseSB0aW1lIHNlcmllcy4gDQoNCmBgYHtyfQ0KaGVhZChnb2xkKQ0KYGBgDQoNCmBgYHtyfQ0KdGFpbChnb2xkKQ0KYGBgDQoNCg0KPGJyPg0KPGJyPg0KDQpUaGUgc2FtZSBleHBsb3JhdG9yeSBhbmFseXNpcyBpcyBwZXJmb3JtZWQgb24gdGhlIG90aGVyIHRpbWUgc2VyaWVzLg0KDQoNCjxiPndvb2x5cm5xPC9iPg0KDQpgYGB7cn0NCmNsYXNzKHdvb2x5cm5xKQ0KYGBgDQoNCmBgYHtyfQ0KaGVscCh3b29seXJucSkNCmBgYA0KUXVhcnRlcmx5IHByb2R1Y3Rpb24gb2Ygd29vbGxlbiB5YXJuIGluIEF1c3RyYWxpYTxicj4NCkRlc2NyaXB0aW9uPGJyPg0KUXVhcnRlcmx5IHByb2R1Y3Rpb24gb2Ygd29vbGxlbiB5YXJuIGluIEF1c3RyYWxpYTogdG9ubmVzLiBNYXIgMTk2NSDigJMgU2VwIDE5OTQuPGJyPg0KDQpVc2FnZTxicj4NCndvb2x5cm5xPGJyPg0KRm9ybWF0PGJyPg0KVGltZSBzZXJpZXMgZGF0YTxicj4NCg0KU291cmNlDQpUaW1lIFNlcmllcyBEYXRhIExpYnJhcnkuIGh0dHBzOi8vcGtnLnlhbmd6aHVvcmFueWFuZy5jb20vdHNkbC8NCg0KDQoNCg0KYGBge3J9DQpzdW1tYXJ5KHdvb2x5cm5xKQ0KYGBgDQoNCmBgYHtyfQ0KaGVhZCh3b29seXJucSkNCmBgYA0KDQpgYGB7cn0NCnRhaWwod29vbHlybnEpDQpgYGANCg0KV2Ugc2VlIHdpdGggdGhpcyB0aW1lIHNlcmllcyB0aGF0IGl0J3MgYSBxdWFydGVybHkgdGltZSBzZXJpZXMgZnJvbSAxOTY1IHRob3VnaCB0aGUgM3JkIHF1YXJ0ZXIgb2YgMTk5NC4NCg0KPGJyPg0KPGJyPg0KDQoNCjxiPmdhczwvYj4NCg0KYGBge3J9DQpjbGFzcyhnYXMpDQpgYGANCg0KDQpgYGB7cn0NCmhlbHAoZ2FzKQ0KYGBgDQoNCkF1c3RyYWxpYW4gbW9udGhseSBnYXMgcHJvZHVjdGlvbjxicj4NCkRlc2NyaXB0aW9uPGJyPg0KQXVzdHJhbGlhbiBtb250aGx5IGdhcyBwcm9kdWN0aW9uOiAxOTU24oCTMTk5NS48YnI+DQoNClVzYWdlPGJyPg0KZ2FzPGJyPg0KRm9ybWF0PGJyPg0KVGltZSBzZXJpZXMgZGF0YTxicj4NCg0KU291cmNlPGJyPg0KQXVzdHJhbGlhbiBCdXJlYXUgb2YgU3RhdGlzdGljcy4NCg0KDQpgYGB7cn0NCnN1bW1hcnkoZ2FzKQ0KYGBgDQoNCg0KYGBge3J9DQpoZWFkKGdhcykNCmBgYA0KDQpgYGB7cn0NCnRhaWwoZ2FzKQ0KYGBgDQoNCldlIHNlZSB0aGF0IHRoZSB0aW1lIHNlcmllcyBpcyBtb250aGx5IGZyb20gMTk1NiB0byAxOTk1Lg0KDQoNCk5leHQsIHdlIHVzZSBhdXRvcGxvdCgpIHRvIHBsb3QgZWFjaCBvZiB0aGVzZSBpbiBzZXBhcmF0ZSBwbG90cy4NCg0KDQo8Yj5HT0xEOjwvYj4NCg0KYGBge3J9DQphdXRvcGxvdChnb2xkKSArDQogICAgZ2d0aXRsZSgiRGFpbHkgTW9ybmluZyBHb2xkIFByaWNlcyIpICsNCiAgICB4bGFiKCJEYXRlIFJhbmdlOiAxLzEvMTk4NSB0byAzLzMxLzE5ODkiKSArDQogICAgeWxhYigiUHJpY2VzIGluIFVTIERvbGxhcnMgJCIpDQpgYGANCg0KDQo8Yj5XT09MWVJOUTo8L2I+DQoNCmBgYHtyfQ0KYXV0b3Bsb3Qod29vbHlybnEpICsNCiAgICBnZ3RpdGxlKCJRdWFydGVybHkgcHJvZHVjdGlvbiBvZiB3b29sbGVuIHlhcm4gaW4gQXVzdHJhbGlhIikgKw0KICAgIHhsYWIoIk1hciAxOTY1IHRvIFNlcCAxOTk0IikgKw0KICAgIHlsYWIoIldvb2xsZW4gWWFybiBpbiBUb25uZXMuIikNCmBgYA0KDQoNCjxiPkdBUzo8L2I+DQoNCmBgYHtyfQ0KYXV0b3Bsb3QoZ2FzKSArDQogICAgZ2d0aXRsZShzdHJfdG9fdGl0bGUoIkF1c3RyYWxpYW4gbW9udGhseSBnYXMgcHJvZHVjdGlvbiIpKSArDQogICAgeGxhYihzdHJfdG9fdGl0bGUoIm1vbnRobHkgZ2FzIHByb2R1Y3Rpb246IDE5NTbigJMxOTk1IikpICsNCiAgICB5bGFiKCJVbml0cy4iKQ0KYGBgDQoNCg0KIyMjIyBiLiBXaGF0IGlzIHRoZSBmcmVxdWVuY3kgb2YgZWFjaCBzZXJpZXM/IEhpbnQ6IGFwcGx5IHRoZSBmcmVxdWVuY3koKSBmdW5jdGlvbg0KDQpUaGUgZnJlcXVlbmN5IG9mIHRoZSBnb2xkLHdvb2x5cm5xLGFuZCBnYXMgdGltZSBzZXJpZXNlcyBpcyBkYWlseSwgcXVhcnRlcmx5LCBhbmQgbW9udGhseSByZXNwZWN0aXZlbHkuIA0KDQpgYGB7cn0NCmZyZXF1ZW5jeShnb2xkKQ0KYGBgDQoNCg0KYGBge3J9DQpmcmVxdWVuY3kod29vbHlybnEpDQpgYGANCg0KYGBge3J9DQpmcmVxdWVuY3koZ2FzKQ0KYGBgDQoNCg0KIyMjIyBjLiBVc2Ugd2hpY2gubWF4KCkgdG8gc3BvdCB0aGUgb3V0bGllciBpbiB0aGUgZ29sZCBzZXJpZXMuIFdoaWNoIG9ic2VydmF0aW9uIHdhcyBpdD8NCg0KYGBge3J9DQpvYnNlcnZhdGlvbiA9IHdoaWNoLm1heChnb2xkKQ0KbWF4X3ByaWNlIDwtIGdvbGRbYyhvYnNlcnZhdGlvbildDQoNCnByaW50KHBhc3RlMCgiVGhlIG9ic2VydmF0aW9uIGF0OiAiLCAgb2JzZXJ2YXRpb24sICIgc2hvd3MgdGhhdCB0aGUgbWF4aW11bSBwcmljZSBvZiBnb2xkIChvdXRsaWVyKSBpczogIiwgIG1heF9wcmljZSAgKSkNCg0KDQpgYGANCg0KDQoNCg0KIyMgMi4xMCBRdWVzdGlvbiBOby4gMg0KDQpGb3IgdGhpcyBxdWVzdGlvbiwgdGhlIGF1dGhvciB0YXNrcyB1cyB3aXRoIGxvYWRpbmcgZGF0YSBmcm9tIGEgY3N2IGZpbGUgYW5kIGNvbnZlcnRpbmcgaXQgaW50byBhIHRpbWUgc2VyaWVzIHVzaW5nIHRoZSBmdW5jdGlvbiwgInRzIi4NCg0KDQpgYGB7cn0NCnR1dGUxIDwtIHJlYWQuY3N2KCJ0dXRlMS5jc3YiLCBoZWFkZXI9VFJVRSkNClZpZXcodHV0ZTEpDQpgYGANCg0KSGVyZSwgdGhlIGZyZXF1ZW5jeSBhcmd1bWVudCBvZiB0aGUgdHMgZnVuY3Rpb24gaXMgc2V0IHRvICI0IiBmb3IgcXVhcnRlcmx5IGFuYWx5c2lzLg0KDQpgYGB7cn0NCm15dGltZXNlcmllcyA8LSB0cyh0dXRlMVssLTFdLCBzdGFydD0xOTgxLCBmcmVxdWVuY3k9NCkNCmBgYA0KDQpXaGVuIHdlIHBsb3QgdGhlIHNlcmllcyB3aXRoIGF1dG9wbG90IGFuZCBzZXQgdGhlICJmYWNldHMiIGFyZ3VtZW50IHRvICJUUlVFIiwgdGhlIHBsb3Qgc2hvd3MgZGlmZmVyZW50IHNjYWxlcyBvbiB0aGUgWS1heGlzIGZvciB0aGUgU2FsZXMsIEFkQnVkZ2V0LCBhbmQgR0RQIGRhdGEuIA0KDQpXaGVuIHRoZSBmYWNldHMgYXJndW1lbnQgaXMgc2V0IHRvIEZBTFNFLCB0aGVyZSdzIGEgY29tbW9uIHktYXhpcyBmb3IgYWxsIHRocmVlIGRhdGFzZXRzLg0KDQoNCmBgYHtyfQ0KYXV0b3Bsb3QobXl0aW1lc2VyaWVzLCBmYWNldHM9VFJVRSkNCmBgYA0KDQpgYGB7cn0NCmF1dG9wbG90KG15dGltZXNlcmllcywgZmFjZXRzPUZBTFNFKQ0KYGBgDQoNCg0KDQojIyAyLjEwIFF1ZXN0aW9uIE5vLiAzDQoNCkZvciB0aGlzIHF1ZXN0aW9uLCB0aGUgYXV0aG9yIHRhc2tzIHVzIHRvIHJlYWQgaW4gYW4gZXhjZWwgZmlsZSBjb250YWluaW5nIEF1c3RyYWxpYW4gcmV0YWlsIGRhdGEuICANCg0KYGBge3J9DQpyZXRhaWxkYXRhIDwtIHJlYWR4bDo6cmVhZF9leGNlbCgicmV0YWlsLnhsc3giLCBza2lwPTEpDQpgYGANCg0KYGBge3J9DQpsaXF1b3Jfc2FsZXMgPC0gdHMocmV0YWlsZGF0YVssIkEzMzQ5NDE0UiJdLA0KICBmcmVxdWVuY3k9MTIsIHN0YXJ0PWMoMTk4Miw0KSkNCmBgYA0KDQpUaGUgYXV0b3Bsb3Qgc2hvd3MgbW9udGhseSBsaXF1b3Igc2FsZXMgZnJvbSBBcHJpbCAxOTgyIHRvIERlY2VtYmVyIDIwMTMuICBUaGUgcGxvdCBzaG93cyBhbiBpbmNyZWFzaW5nIHRyZW5kIGluIHNhbGVzIGFsb25nIHdpdGggYSBzdHJvbmcgc2Vhc29uYWxpdHkgY29tcG9uZW50IHdoaWNoIGdyb3dzIGluIHN0cmVuZ3RoLiANCg0KYGBge3J9DQphdXRvcGxvdChsaXF1b3Jfc2FsZXMpICsNCiAgICBnZ3RpdGxlKHN0cl90b190aXRsZSgiVmljdG9yaWEsIEF1c3RyYWxpYSAgbW9udGhseSBsaXF1b3Igc2FsZXMiKSkgKw0KICAgIHhsYWIoIkFwcmlsIDE5ODIgdG8gRGVjZW1iZXIgMjAxMyIpICsNCiAgICB5bGFiKCJVbml0cy4iKQ0KYGBgDQoNClRoZSBnZ3NlYXNvbnBsb3QgYW5kIGdnc3Vic2VyaWVzcGxvdCBzaG93IHRoZSBzZWFzb25hbGl0eSBvZiBsaXF1b3Igc2FsZXMuIFRoZSBlYXJsaWVyIHllYXJzIHN0YXJ0aW5nIGZyb20gMTk4MiBhcmUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGxvdCB3aXRoIHRoZSBsYXRlciB5ZWFycyBhdCB0aGUgdG9wLiBUaGUgZ3JhcGggc2hvd3MgdGhlIHllYXJseSBpbmNyZWFzZSBpbiBzYWxlcyBhbmQgdG93YXJkcyB0aGUgbGFzdCB0d28gbW9udGhzIG9mIHRoZSB5ZWFyLCBzYWxlcyB0ZW5kIHRvIHNwaWtlLiANCg0KDQoNCmBgYHtyfQ0KZ2dzZWFzb25wbG90KGxpcXVvcl9zYWxlcykNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCmdnc3Vic2VyaWVzcGxvdChsaXF1b3Jfc2FsZXMpDQpgYGANCg0KU2V0dGluZyB0aGUgcG9sYXIgYXR0cmlidXRlIHRvIFRSVUUgZm9yIHRoZSBnZ3NlYXNvbnBsb3QgZnVydGhlciBkZW9tb25zdHJhdGVzIHRoZSBzZWFzb25hbCBuYXR1cmUgb2YgbGlxdW9yIHNhbGVzIHdpdGggYSBzcGlrZSBpbiBEZWNlbWJlciBzYWxlcw0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdChsaXF1b3Jfc2FsZXMsIHllYXIubGFiZWxzPUZBTFNFLCBjb250aW51b3VzPVRSVUUsIHBvbGFyID0gVFJVRSkNCmBgYA0KDQoNCk92ZXIgdGhlIG5leHQgdHdvIHBsb3RzLCB0aGUgZ2dsYWdwbG90IGFuZCB0aGUgZ2dBQ0YgcGxvdCwgd2Ugc2VlIGhvdyBvYnNlcnZhdGlvbnMgYXJlIHBsb3R0ZWQgYWdhaW5zdCBlYXJsaWVyIG9ic2VydmF0aW9ucyBvciBsYWdzIGFnYWluc3QgaXRzZWxmLiBMYWcgMTIgc3VwcG9ydHMgdGhlIGZpbmRpbmcgdGhhdCBzYWxlcyBzcGlrZSBpbiB0aGUgMTIgbW9udGggd2hpY2ggaXMgc2hvd24gaW4gdGhlIGdnYWNmIHBsb3QuICAgDQoNCg0KYGBge3J9DQpnZ2xhZ3Bsb3QobGlxdW9yX3NhbGVzKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dBY2YobGlxdW9yX3NhbGVzKQ0KYGBgDQoNCiMjIDIuMTAgUXVlc3Rpb24gTm8uIDYNCg0KIyMjIDx1PjxiPlNhbGVzIG9mIG9uZS1mYW1pbHkgaG91c2VzPC9iPjwvdT4NCg0KYGBge3J9DQpoZWxwKCdoc2FsZXMnKQ0KDQpgYGANCg0KDQpTYWxlcyBvZiBvbmUtZmFtaWx5IGhvdXNlcyA8YnI+DQpEZXNjcmlwdGlvbjxicj4NCk1vbnRobHkgc2FsZXMgb2YgbmV3IG9uZS1mYW1pbHkgaG91c2VzIHNvbGQgaW4gdGhlIFVTQSBzaW5jZSAxOTczLjxicj4NCg0KVXNhZ2U8YnI+DQpoc2FsZXM8YnI+DQpGb3JtYXQ8YnI+DQpUaW1lIHNlcmllcyBkYXRhPGJyPg0KDQpTb3VyY2U8YnI+DQpNYWtyaWRha2lzLCBXaGVlbHdyaWdodCBhbmQgSHluZG1hbiAoMTk5OCkgRm9yZWNhc3Rpbmc6IG1ldGhvZHMgYW5kIGFwcGxpY2F0aW9ucywgSm9obiBXaWxleSAmIFNvbnM6IE5ldyBZb3JrLiBDaGFwdGVyIDMuDQoNCmBgYHtyfQ0KaGVhZChoc2FsZXMpDQpgYGANCg0KYGBge3J9DQp0YWlsKGhzYWxlcykNCmBgYA0KDQoNCmBgYHtyfQ0KcmVjZXNzaW9ucyA9IHJlYWQudGFibGUodGV4dENvbm5lY3Rpb24oDQoiUGVhaywgVHJvdWdoDQoxOTczLTExLTAxLCAxOTc1LTAzLTAxDQoxOTgwLTAxLTAxLCAxOTgwLTA3LTAxDQoxOTgxLTA3LTAxLCAxOTgyLTExLTAxDQoxOTkwLTA3LTAxLCAxOTkxLTAzLTAxIiksIHNlcD0nLCcsDQpjb2xDbGFzc2VzPWMoJ0RhdGUnLCAnRGF0ZScpLCBoZWFkZXI9VFJVRSkNCmBgYA0KDQoNCmBgYHtyfQ0KcmVjZXNzaW9ucw0KYGBgDQoNCg0KYGBge3J9DQphdXRvcGxvdChoc2FsZXMpICsNCiAgICBnZ3RpdGxlKCJVU0EgU2FsZXMgb2YgT25lLUZhbWlseSBIb3VzZXMiKSArDQogICAgeGxhYihzdHJfdG9fdGl0bGUoIm1vbnRobHkgc2FsZXMgZnJvbSAxOTczIHRvIDE5OTYiKSkgKw0KICAgIHlsYWIoIk5vLiBvZiBIb3VzZSBTYWxlcyIpDQoNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdChoc2FsZXMpDQpgYGANCg0KDQpgYGB7cn0NCmdnc3Vic2VyaWVzcGxvdChoc2FsZXMpDQpgYGANCg0KDQpgYGB7cn0NCmdnbGFncGxvdChoc2FsZXMsIGxhZ3MgPSAyNCApDQpgYGANCg0KDQpgYGB7cn0NCmdnQWNmKGhzYWxlcykNCmBgYA0KDQojIyMjIEFuYWx5c2lzIG9mIFNhbGVzIG9mIG9uZS1mYW1pbHkgaG91c2UNCg0KVGhlIGFib3ZlIHBsb3RzIHNob3cgdGhhdCB0aGVyZSBpcyBubyB0cmVuZCBmb3IgdGhlIHNhbGVzIG9mIG9uZSBmYW1pbHkgaG91c2VzIGZyb20gMTk3MyB0byAxOTk1LiBIb3dldmVyLCB0aGVyZSBhcmUgY3ljbGljIGFuZCBzZWFzb25hbCB0cmVuZHMuIFdlIGNhbiBzZWUgdGhlIGRvd253YXJkIHRyZW5kcyBmb3Igc2FsZXMgbWF0Y2hpbmcgZG93bnR1cm5zIGluIHRoZSBlY29ub215LiBGcm9tIHRoZSBzZWFzb25hbCBwbG90cywgIHdlIGNhbiBjbGVhcmx5IHNlZSB0aGF0IHNhbGVzIGFyZSBzdHJvbmdlc3QgaW4gdGhlIG1vbnRocyBvZiBNYXJjaCwgQXByaWwsIGFuZCBNYXkuICBGaW5hbGx5IGZyb20gdGhlIGxhZyBwbG90cywgd2UgY2FuIHNlZSB0aGF0IHRoZSBtb3N0IHJlY2VudCBwcmlvciBwZXJpb2QgKGxhZz0xKSBpcyBzdHJvbmdseSBjb3JyZWxhdGVkIHRvIHRoZSBjdXJyZW50IHBlcmlvZC4gTGFncyB0aGF0IGFyZSBmdXJ0aGVyIG91dCwgZXNwLiBsYWdzIGF0IDE4IHRvIDIxLCBhcmUgbm90IGFzIHdlbGwgY29ycmVsYXRlZC4gVGhpcyBzaG93cyB0aGF0IGhvdXNpbmcgc2FsZXMgaGF2ZSByZWNlbmN5IGJpYXMuIA0KDQoNCg0KIyMjIDx1PjxiPkFjY2lkZW50aWFsIERlYXRocyBpbiBVU0E8L2I+PC91Pjxicj4NCg0KYGBge3J9DQpoZWxwKCd1c2RlYXRocycpDQoNCmBgYA0KDQpBY2NpZGVudGFsIGRlYXRocyBpbiBVU0EgPGJyPg0KRGVzY3JpcHRpb248YnI+DQpNb250aGx5IGFjY2lkZW50YWwgZGVhdGhzIGluIFVTQS48YnI+DQoNClVzYWdlPGJyPg0KdXNkZWF0aHM8YnI+DQpGb3JtYXQ8YnI+DQpUaW1lIHNlcmllcyBkYXRhPGJyPg0KDQpTb3VyY2U8YnI+DQpNYWtyaWRha2lzLCBXaGVlbHdyaWdodCBhbmQgSHluZG1hbiAoMTk5OCkgRm9yZWNhc3Rpbmc6IG1ldGhvZHMgYW5kIGFwcGxpY2F0aW9ucywgSm9obiBXaWxleSAmIFNvbnM6IE5ldyBZb3JrLiBFeGVyY2lzZXMgMi4zIGFuZCAyLjQuDQoNCmBgYHtyfQ0KaGVhZCh1c2RlYXRocykNCmBgYA0KDQpgYGB7cn0NCnRhaWwodXNkZWF0aHMpDQpgYGANCg0KYGBge3J9DQpmcmVxdWVuY3kodXNkZWF0aHMpDQpgYGANCg0KDQpgYGB7cn0NCmF1dG9wbG90KHVzZGVhdGhzKSArDQogICAgZ2d0aXRsZSgiQWNjaWRlbnRhbCBkZWF0aHMgaW4gdGhlIFVTQSIpICsNCiAgICB4bGFiKCJNb250aGx5IDE5NzMgdDAgMTk3OCIpICsNCiAgICB5bGFiKCJOby4gb2YgQWNjaWRlbnRhbCBEZWF0aHMiKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdCh1c2RlYXRocykNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dzdWJzZXJpZXNwbG90KHVzZGVhdGhzKQ0KYGBgDQoNCg0KYGBge3J9DQpnZ2xhZ3Bsb3QodXNkZWF0aHMsIGxhZ3MgPSAxMikNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dBY2YodXNkZWF0aHMpDQpgYGANCg0KDQojIyMjIEFuYWx5c2lzIG9mIEFjY2lkZW50YWwgZGVhdGhzIGluIFVTQSANCg0KVGhlIHN0cm9uZ2VzdCBzaWduYWwgaW4gdGhlIGRhdGEgaXMgYSBzZWFzb25hbCB0cmVuZCBmb3IgYWNjaWRlbnRhbCBkZWF0aHMuIEludHVpdGlvbiB0ZWxscyB1cyB0aGF0IHNpbmNlIHRoZXNlIGFyZSB0aGUgc3VtbWVyIG1vbnRocyBmb3IgbW9zdCBvZiB0aGUgVVNBLCBtb3JlIHBlb3BsZSBhcmUgb24gdGhlIHJvYWRzIGRyaXZpbmcgd2hpY2ggaXMgcHJvYmFibHkgdGhlIGxlYWRpbmcgY2F1c2Ugb2YgYWNjaWRlbnRhbCBkZWF0aHMuIFRoZXJlIGRvZXMgbm90IGFwcGVhciB0byBiZSBhbnkgY3ljbGljYWwgb3Igb3RoZXIgdHJlbmRzLiANCg0KDQoNCg0KDQojIyMgPHU+PGI+UXVhcnRlcmx5IGNsYXkgYnJpY2sgcHJvZHVjdGlvbjwvYj48L3U+PGJyPg0KDQpgYGB7cn0NCmhlbHAoYnJpY2tzcSkNCg0KYGBgDQoNClF1YXJ0ZXJseSBjbGF5IGJyaWNrIHByb2R1Y3Rpb248YnI+DQpEZXNjcmlwdGlvbjxicj4NCkF1c3RyYWxpYW4gcXVhcnRlcmx5IGNsYXkgYnJpY2sgcHJvZHVjdGlvbjogMTk1NuKAkzE5OTQuPGJyPg0KDQpVc2FnZTxicj4NCmJyaWNrc3E8YnI+DQpGb3JtYXQ8YnI+DQpUaW1lIHNlcmllcyBkYXRhPGJyPg0KDQpTb3VyY2U8YnI+DQpNYWtyaWRha2lzLCBXaGVlbHdyaWdodCBhbmQgSHluZG1hbiAoMTk5OCkgRm9yZWNhc3Rpbmc6IG1ldGhvZHMgYW5kIGFwcGxpY2F0aW9ucywgSm9obiBXaWxleSAmIFNvbnM6IE5ldyBZb3JrLiBDaGFwdGVyIDEgYW5kIEV4ZXJjaXNlIDIuMy4NCg0KYGBge3J9DQpoZWFkKGJyaWNrc3EpDQpgYGANCg0KYGBge3J9DQp0YWlsKGJyaWNrc3EpDQpgYGANCg0KYGBge3J9DQpmcmVxdWVuY3koYnJpY2tzcSkNCmBgYA0KDQoNCmBgYHtyfQ0KYXV0b3Bsb3QoYnJpY2tzcSkgKw0KICAgIGdndGl0bGUoc3RyX3RvX3RpdGxlKCJRdWFydGVybHkgY2xheSBicmljayBwcm9kdWN0aW9uIikpKw0KICAgIHhsYWIoIlF1YXJ0ZXJseSAxOTU2IHRvIDE5OTQiKSArDQogICAgeWxhYigiVW5pdHMiKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdChicmlja3NxKQ0KYGBgDQoNCg0KYGBge3J9DQpnZ3N1YnNlcmllc3Bsb3QoYnJpY2tzcSkNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dsYWdwbG90KGJyaWNrc3EsIGxhZ3MgPSAyMSkNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dBY2YoYnJpY2tzcSkNCmBgYA0KDQojIyMjIEFuYWx5c2lzIG9mIFF1YXJ0ZXJseSBjbGF5IGJyaWNrIHByb2R1Y3Rpb24gDQoNClRoZXJlIGlzIGEgbG9uZyB0ZXJtIGdyb3d0aCB0cmVuZCBmb3IgY2xheSBicmljayBwcm9kdWN0aW9uIGZyb20gMTk1NiB0byAxOTk0IGFsb25nIHdpdGggYSBzbGlnaHQgc2Vhc29uYWwgdHJlbmQgd2hpY2ggc2hvd3MgaGlnaGVyIHByb2R1Y3Rpb24gaW4gcXVhcnRlcnMgMiBhbmQgMy4gIFRoZSBtb3N0IGludGVyZXN0aW5nIGl0ZW0gaXMgdGhhdCB0aGVyZSBpcyBhIHN0cm9uZyBhdXRvIGNvcnJlbGF0aW9uIHdpdGggcHJpb3IgcGVyaW9kcyBvZiB0aW1lLiBBIDIwIHBlcmlvZCBsYWcgaXMgc3RpbGwgY29ycmVsYXRlZCBhYm92ZSAuNS4gIA0KDQoNCg0KDQoNCiMjIyA8dT5Bbm51YWwgYXZlcmFnZSBzdW5zcG90IGFyZWEgKDE4NzUtMjAxNSk8L3U+PGJyPg0KDQpgYGB7cn0NCmhlbHAoc3Vuc3BvdGFyZWEpDQoNCmBgYA0KDQpBbm51YWwgYXZlcmFnZSBzdW5zcG90IGFyZWEgKDE4NzUtMjAxNSkgPGJyPg0KRGVzY3JpcHRpb248YnI+DQpBbm51YWwgYXZlcmFnZXMgb2YgdGhlIGRhaWx5IHN1bnNwb3QgYXJlYXMgKGluIHVuaXRzIG9mIG1pbGxpb250aHMgb2YgYSBoZW1pc3BoZXJlKSBmb3IgdGhlIGZ1bGwgc3VuLiBTdW5zcG90cyBhcmUgbWFnbmV0aWMgcmVnaW9ucyB0aGF0IGFwcGVhciBhcyBkYXJrIHNwb3RzIG9uIHRoZSBzdXJmYWNlIG9mIHRoZSBzdW4uIFRoZSBSb3lhbCBHcmVlbndpY2ggT2JzZXJ2YXRvcnkgY29tcGlsZWQgZGFpbHkgc3Vuc3BvdCBvYnNlcnZhdGlvbnMgZnJvbSBNYXkgMTg3NCB0byAxOTc2LiBMYXRlciBkYXRhIGFyZSBmcm9tIHRoZSBVUyBBaXIgRm9yY2UgYW5kIHRoZSBVUyBOYXRpb25hbCBPY2VhbmljIGFuZCBBdG1vc3BoZXJpYyBBZG1pbmlzdHJhdGlvbi4gVGhlIGRhdGEgaGF2ZSBiZWVuIGNhbGlicmF0ZWQgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHdob2xlIGhpc3Rvcnkgb2Ygb2JzZXJ2YXRpb25zLjxicj4NCg0KRm9ybWF0PGJyPg0KQW5udWFsIHRpbWUgc2VyaWVzIG9mIGNsYXNzIHRzLjxicj4NCg0KU291cmNlPGJyPg0KTkFTQTxicj4NCg0KYGBge3J9DQpoZWFkKHN1bnNwb3RhcmVhKQ0KYGBgDQoNCmBgYHtyfQ0KY2xhc3Moc3Vuc3BvdGFyZWEpDQpgYGANCg0KDQoNCmBgYHtyfQ0KdGFpbChzdW5zcG90YXJlYSkNCmBgYA0KDQpgYGB7cn0NCmZyZXF1ZW5jeShzdW5zcG90YXJlYSkNCmBgYA0KDQoNCmBgYHtyfQ0KYXV0b3Bsb3Qoc3Vuc3BvdGFyZWEpICsNCiAgICBnZ3RpdGxlKHN0cl90b190aXRsZSgiQW5udWFsIGF2ZXJhZ2Ugc3Vuc3BvdCBhcmVhIikpKw0KICAgIHhsYWIoIjE4NzUgdG8gMjAxMCIpICsNCiAgICB5bGFiKCJVbml0cyIpDQpgYGANCg0KDQoNCmBgYHtyfQ0KI2dnc2Vhc29ucGxvdChzdW5zcG90YXJlYSkNCmBgYA0KDQoNCmBgYHtyfQ0KI2dnc3Vic2VyaWVzcGxvdChzdW5zcG90YXJlYSkNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dsYWdwbG90KHN1bnNwb3RhcmVhKQ0KYGBgDQoNCg0KYGBge3J9DQpnZ0FjZihzdW5zcG90YXJlYSkNCmBgYA0KDQojIyMjIEFuYWx5c2lzIG9mIEFubnVhbCBhdmVyYWdlIHN1bnNwb3QgYXJlYSAoMTg3NS0yMDE1KQ0KDQpTaW5jZSB0aGUgZGF0YSBpcyBjb2xsZWN0ZWQgb24gYW4gYW5udWFsIGJhc2lzLCB0aGVyZSBpcyBubyBzZWFzb25hbCBjb21wb25lbnQgdG8gaXQuIFRoZXJlIGlzIG5vIHRyZW5kLCBidXQgdGhlcmUgaXMgYSBjeWNsZSBpbiB0aGUgZGF0YS4gSXQgc2VlbXMgYXMgdGhvdWdoIGluIG9kZCBudW1iZXJlZCB5ZWFycywgdGhlcmUgaXMgbW9yZSBzdW5zcG90IGFjdGl2aXR5LiBUaGVyZSBhbHNvIHNlZW1zIHRvIGJlIG5lZ2F0aXZlIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGxhZ3MuDQoNCg0KIyMjIDx1PjxiPlVTIGZpbmlzaGVkIG1vdG9yIGdhc29saW5lIHByb2R1Y3Qgc3VwcGxpZWQ8L2I+PC91Pg0KDQoNCmBgYHtyfQ0KaGVscChnYXNvbGluZSkNCg0KYGBgDQpVUyBmaW5pc2hlZCBtb3RvciBnYXNvbGluZSBwcm9kdWN0IHN1cHBsaWVkLjxicj4NCkRlc2NyaXB0aW9uPGJyPg0KV2Vla2x5IGRhdGEgYmVnaW5uaW5nIDIgRmVicnVhcnkgMTk5MSwgZW5kaW5nIDIwIEphbnVhcnkgMjAxNy4gVW5pdHMgYXJlICJtaWxsaW9uIGJhcnJlbHMgcGVyIGRheSIuPGJyPg0KDQpGb3JtYXQ8YnI+DQpUaW1lIHNlcmllcyBvYmplY3Qgb2YgY2xhc3MgdHMuPGJyPg0KDQpTb3VyY2U8YnI+DQpVUyBFbmVyZ3kgSW5mb3JtYXRpb24gQWRtaW5pc3RyYXRpb24uDQoNCmBgYHtyfQ0KaGVhZChnYXNvbGluZSkNCmBgYA0KDQpgYGB7cn0NCnRhaWwoZ2Fzb2xpbmUpDQpgYGANCg0KYGBge3J9DQpmcmVxdWVuY3koZ2Fzb2xpbmUpDQpgYGANCg0KDQpgYGB7cn0NCmF1dG9wbG90KGdhc29saW5lKSArDQogICAgZ2d0aXRsZShzdHJfdG9fdGl0bGUoIlVTIGZpbmlzaGVkIG1vdG9yIGdhc29saW5lIHByb2R1Y3Qgc3VwcGxpZWQuIikpKw0KICAgIHhsYWIoIldlZWtseSAxOTkxIHRvIDIwMTciKSArDQogICAgeWxhYigiVW5pdHMiKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdChnYXNvbGluZSkNCmBgYA0KDQoNCmBgYHtyfQ0KI2dnc3Vic2VyaWVzcGxvdChnYXNvbGluZSkNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dsYWdwbG90KGdhc29saW5lKQ0KYGBgDQoNCg0KYGBge3J9DQpnZ0FjZihnYXNvbGluZSwgbGFnLm1heCA9IDUyKQ0KYGBgDQoNCiMjIyMgQW5hbHlzaXMgb2YgVVMgZmluaXNoZWQgbW90b3IgZ2Fzb2xpbmUgcHJvZHVjdCBzdXBwbGllZA0KDQpUaGVyZSBpcyBhbiBpbmNyZWFzaW5nIHRyZW5kIGluIHRoZSBVUyBmaW5pc2hlZCBtb3RvciBnYXNvbGluZSBwcm9kdWN0IHN1cHBsaWVkIGZyb20gMTk5MSB0byAyMDE3LiBUaGUgc2Vhc29uYWxpdHkgdHJlbmQgc2hvd3MgYW4gdXB0aWNrIGluIHRoZSBtaWRkbGUgb2YgYSB5ZWFyIGR1cmluZyB0aGUgc3VtbWVyIG1vbnRocyBhbmQgbG93ZXIgaW4gdGhlIHdpbnRlciBtb250aHMuIFBlcmhhcHMgdGhlIG1vc3QgaW1wb3J0YW50IGl0ZW0gaXMgdGhlIHZlcnkgc3Ryb25nIGF1dG8gY29ycmVsYXRpb24gYmV0d2VlbiB0aGUgbGFncy4gDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==