About

This worksheet is your warm-up exercises to getting started with some R for finance, based on examples from the book. It is also your getting started with problems solving (no R required) and expressing your methods/answers using proper mathematical symbols and representations.

Setup

Remember to always set your working directory to the source file location. Go to ‘Session’, scroll down to ‘Set Working Directory’, and click ‘To Source File Location’. Read carefully the below and follow the instructions to complete the tasks and answer any questions. Submit your work to RPubs as detailed in previous notes.

Note

For clarity, tasks/questions to be completed/answered are highlighted in red color (color visible only in preview mode) and numbered according to their particular placement in the task section. Type your answers outside the red color tags!

Quite often you will need to add your own code chunk. Execute sequentially all code chunks, preview, publish, and submit link on Sakai following the naming convention. Make sure to add comments to your code where appropriate. Use own language!

Any sign of plagiarism, will result in dissmissal of work!


Task 1: Charting Stock Time Series

This task follows the book’s R Example 1.1/p. 8 also exhibited in the R-Labs section R Labs1 from the book’s website (*). In order to work with R in finance we need to first install the package quantmod that allows us to retrieve financial data and conduct various statistical analysis.

if(!require("quantmod",quietly = TRUE))
  install.packages("quantmod",dependencies = TRUE, repos = "https://cloud.r-project.org")

Attaching package: <U+393C><U+3E31>zoo<U+393C><U+3E32>

The following objects are masked from <U+393C><U+3E31>package:base<U+393C><U+3E32>:

    as.Date, as.Date.numeric

Version 0.4-0 included new data defaults. See ?getSymbols.
Learn from a quantmod author: https://www.datacamp.com/courses/importing-and-managing-financial-data-in-r

##### 1A) Insert in the code chunk below the rest of the code to calculate and chart the time series for stock GE. Follow the example in the book. Add comments, where appropriate, explaining what the particular line(s) of code is/are executing/solving for.

geAdj = GE$GE.Adjusted["2000-01-01/2000-01-20"]
##compute max, min and mean
max(geAdj); min(geAdj); mean(geAdj)
[1] 28.06313
[1] 26.23787
[1] 27.1946
## draw a chart
chartSeries(GE)

 
##to save data to your disk use
saveRDS(GE,file="GE.rds")

“getSymbols.yahoo.warning”=FALSE ### Task 2: Comparing Performance of Stocks Time Series

This follows the book’s example 1.3.4 R Lab/p. 34 also R Labs 1 from the book’s website (*).

##### 2A) Insert the code chunk to chart instead the performance of Value Line Index VLIC (sort of benchmark), and four other stocks of your choice over a time period dating back one year from present date.

library("quantmod")
symbols=c('^VLIC','AMZN','KO','AAPL','MCD')
getSymbols(symbols,src='yahoo',from="2017-11-12",to="2018-11-12")
[1] "VLIC" "AMZN" "KO"   "AAPL" "MCD" 
 #obtain adjusted closed
VLICad = VLIC$VLIC.Adjusted; AMZNad= AMZN$AMZN.Adjusted;
  KOad=KO$KO.Adjusted; AAPLad=AAPL$AAPL.Adjusted;
  MCDad = MCD$MCD.Adjusted
 #compute cumulative sum (cumsum) of daily returns (Delt)
 #Remove first term of the series, with [-1,], since cumsum is not defined for it.
vl = cumsum((Delt(VLICad)*100)[-1,])
amzn = cumsum((Delt(AMZNad)*100)[-1,])
ko = cumsum((Delt(KOad)*100)[-1,])
ap = cumsum((Delt(AAPLad)*100)[-1,])
md = cumsum((Delt(MCDad)*100)[-1,])
 
###range of values for the plot
lim = c(min(vl,amzn,ko,ap,md),max(vl,amzn,ko,ap,md))
###the plot
plot(vl,main="",ylim=lim,xlab="dates",ylab="% benefits")

lines(amzn,col="green"); 

lines(ko,col="red")

lines(ap,col="violet");

lines(md,col="yellow")
legend(x="topleft",cex=0.4,c("VLIC","AMZN","KO","AAPL","MCD"),
   lty=1, col=c("black","green","red","violet","yellow"))

##### 2B) Write the mathematical form/representation, using proper math symbols, to describe the formula being calculated and plotted in the code
\[\sum_{i=1}^{4}\] \(\frac{[stk[i+1]-stk[i]]}{stk[i]}\) *100

##### 2C) Write a paragraph, in your own words, comparing the stock performances based on your assessment of the companies general business and their valuation vis-a-vis the market overall performance, and pertinent econonomical factors.

We can see clearly that the value of one stock i.e Amazon has continuously been above the other four, while general electrics, apple, mcdonalds and coca cola have been more or less in the same range. The values of stocks have picked up since the mid of second quarter of 2018 and have shown strong growth throughout the year until October 2018 which showed a decline in the overall market value tracking global ques and looming trade war threats. the markets have shown signs of recovery in mid November. The data is insufficient to track trends as it just belongs to one year.

Task 3: Problem(s) Solving

##### 3A) Solve for 1.3.8 Problem/p. 36. Given K=20,Sd=15,Su=40,S0=25,r=0.05 Cu=Su-k=40-20=20 or Cd=0(since \(Sd<k\))

\(\Delta\) = \(\frac{Cu-Cd}{Su-Sd}\) & B= \(\frac{Sd-Cd}{1+r}\) = \(\frac{ Su-Cu}{1+r}\)

\(\Delta S-\)(1+r)^{t} where t=1 at the end of the period & t=0 at the begining. In our case

therefore \(\Delta\) = \(\frac{20-0}{40-15}\) =0.8

B=\(\frac{(0.8)40-20}{1.05}\) = 11.43

hence at the expiration time of pay off, B is either

\(\Delta\) Su-(1+r)B = (0.8)40-12=20 or \(\Delta\) Sd-(1+r)B =(0.8)15-20=0

C=(0.8)25-11.42=8.57 at time=0

Put call parity

S0+P=C+ \(\frac{X}{1+0.05}\) P= 8.57 + \(\frac{20}{1.05}\) -25 P= 2.618

##### 3B) Solve for 1.3.9 Problem/p. 36

The put-call parity states that

C-P=S-K\(e^{-rt}\)

differentiating this equation with respect to stock price S

LHS= \(\frac{d}{dS}\) (C-P)= \(\Delta\) c- \(\Delta\) p ….1)

RHS= \(\frac{d}{dS}\) (S-K \(e^{-rt}\))

\(\frac{d}{dS}\) (S) = 1 (simce K is a constant, it’s derivative is 0)

RHS= 0 …….2)

therefore \(\Delta\) c - \(\Delta\) p = 1 ……from 1 and 2

\(\Delta\) c= \(\Delta\) p+1

*http://computationalfinance.lsi.upc.edu

LS0tDQp0aXRsZTogIkZJTkM2MjEgV2ludGVyIDIwMTgtMTkgTGFiIFdvcmtzaGVldCAwMSINCmF1dGhvcjogIlNhbmdhbWl0cmEgQWdyYXdhbCINCmRhdGU6ICIxMXRoIE5vdmVtYmVyIDIwMTgiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCiAgd29yZF9kb2N1bWVudDogZGVmYXVsdA0KICBodG1sX2RvY3VtZW50OiBkZWZhdWx0DQpzdWJ0aXRsZTogRXhwbG9yYXRpb24gb2YgUiBpbiBGaW5hbmNlIChmaW5jNjIxLWxhYjAxKQ0KLS0tDQoNCiMjIyBBYm91dA0KDQpUaGlzIHdvcmtzaGVldCBpcyB5b3VyIHdhcm0tdXAgZXhlcmNpc2VzIHRvIGdldHRpbmcgc3RhcnRlZCB3aXRoIHNvbWUgUiBmb3IgZmluYW5jZSwgYmFzZWQgb24gIGV4YW1wbGVzIGZyb20gdGhlIGJvb2suIEl0IGlzIGFsc28geW91ciBnZXR0aW5nIHN0YXJ0ZWQgd2l0aCBwcm9ibGVtcyBzb2x2aW5nIChubyBSIHJlcXVpcmVkKSBhbmQgZXhwcmVzc2luZyB5b3VyIG1ldGhvZHMvYW5zd2VycyB1c2luZyBwcm9wZXIgbWF0aGVtYXRpY2FsIHN5bWJvbHMgYW5kIHJlcHJlc2VudGF0aW9ucy4NCg0KIyMjIFNldHVwDQoNClJlbWVtYmVyIHRvIGFsd2F5cyBzZXQgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgc291cmNlIGZpbGUgbG9jYXRpb24uIEdvIHRvICdTZXNzaW9uJywgc2Nyb2xsIGRvd24gdG8gJ1NldCBXb3JraW5nIERpcmVjdG9yeScsIGFuZCBjbGljayAnVG8gU291cmNlIEZpbGUgTG9jYXRpb24nLiBSZWFkIGNhcmVmdWxseSB0aGUgYmVsb3cgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIHRvIGNvbXBsZXRlIHRoZSB0YXNrcyBhbmQgYW5zd2VyIGFueSBxdWVzdGlvbnMuICBTdWJtaXQgeW91ciB3b3JrIHRvIFJQdWJzIGFzIGRldGFpbGVkIGluIHByZXZpb3VzIG5vdGVzLiANCg0KIyMjIE5vdGUNCg0KRm9yIGNsYXJpdHksIHRhc2tzL3F1ZXN0aW9ucyB0byBiZSBjb21wbGV0ZWQvYW5zd2VyZWQgYXJlIGhpZ2hsaWdodGVkIGluIHJlZCBjb2xvciAoY29sb3IgdmlzaWJsZSBvbmx5IGluIHByZXZpZXcgbW9kZSkgYW5kIG51bWJlcmVkIGFjY29yZGluZyB0byB0aGVpciBwYXJ0aWN1bGFyIHBsYWNlbWVudCBpbiB0aGUgdGFzayBzZWN0aW9uLiAgVHlwZSB5b3VyIGFuc3dlcnMgb3V0c2lkZSB0aGUgcmVkIGNvbG9yIHRhZ3MhDQoNClF1aXRlIG9mdGVuIHlvdSB3aWxsIG5lZWQgdG8gYWRkIHlvdXIgb3duIGNvZGUgY2h1bmsuIEV4ZWN1dGUgc2VxdWVudGlhbGx5IGFsbCBjb2RlIGNodW5rcywgcHJldmlldywgcHVibGlzaCwgYW5kIHN1Ym1pdCBsaW5rIG9uIFNha2FpIGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZSB0byBhZGQgY29tbWVudHMgdG8geW91ciBjb2RlIHdoZXJlIGFwcHJvcHJpYXRlLiBVc2Ugb3duIGxhbmd1YWdlIQ0KDQoqKkFueSBzaWduIG9mIHBsYWdpYXJpc20sIHdpbGwgcmVzdWx0IGluIGRpc3NtaXNzYWwgb2Ygd29yayEqKg0KDQotLS0tLS0tLS0tLS0tLQ0KDQojIyMgVGFzayAxOiBDaGFydGluZyBTdG9jayBUaW1lIFNlcmllcyANCg0KVGhpcyB0YXNrIGZvbGxvd3MgdGhlIGJvb2sncyBSIEV4YW1wbGUgMS4xL3AuIDggYWxzbyBleGhpYml0ZWQgaW4gdGhlIFItTGFicyBzZWN0aW9uIFIgTGFiczEgZnJvbSB0aGUgYm9va+KAmXMgd2Vic2l0ZSAoKikuIEluIG9yZGVyIHRvIHdvcmsgd2l0aCBSIGluIGZpbmFuY2Ugd2UgbmVlZCB0byBmaXJzdCBpbnN0YWxsIHRoZSBwYWNrYWdlIGBxdWFudG1vZGAgdGhhdCBhbGxvd3MgdXMgdG8gcmV0cmlldmUgZmluYW5jaWFsIGRhdGEgYW5kIGNvbmR1Y3QgdmFyaW91cyBzdGF0aXN0aWNhbCBhbmFseXNpcy4NCg0KYGBge3J9DQojIFJlcXVpcmUgd2lsbCBsb2FkIHRoZSBwYWNrYWdlIG9ubHkgaWYgbm90IGluc3RhbGxlZCANCiMgRGVwZW5kZW5jaWVzID0gVFJVRSBtYWtlcyBzdXJlIHRoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbnN0YWxsDQppZighcmVxdWlyZSgicXVhbnRtb2QiLHF1aWV0bHkgPSBUUlVFKSkNCiAgaW5zdGFsbC5wYWNrYWdlcygicXVhbnRtb2QiLGRlcGVuZGVuY2llcyA9IFRSVUUsIHJlcG9zID0gImh0dHBzOi8vY2xvdWQuci1wcm9qZWN0Lm9yZyIpDQpgYGANCg0KDQo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4NCiMjIyMjIDFBKSBJbnNlcnQgaW4gdGhlIGNvZGUgY2h1bmsgYmVsb3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdG8gY2FsY3VsYXRlIGFuZCBjaGFydCB0aGUgdGltZSBzZXJpZXMgZm9yIHN0b2NrIEdFLiAgRm9sbG93IHRoZSBleGFtcGxlIGluIHRoZSBib29rLiBBZGQgY29tbWVudHMsIHdoZXJlIGFwcHJvcHJpYXRlLCBleHBsYWluaW5nIHdoYXQgdGhlIHBhcnRpY3VsYXIgbGluZShzKSBvZiBjb2RlIGlzL2FyZSBleGVjdXRpbmcvc29sdmluZyBmb3IuDQo8L3NwYW4+DQoNCmBgYHtyfQ0KIyNyZXRyaWV2ZSBoaXN0b3JpY2FsIHByaWNlIGRhdGEgZm9yIEdlbmVyYWwgRWxlY3RyaWMgQ28uIGZyb20gWWFob28gRmluYW5jZQ0KZ2V0U3ltYm9scygnR0UnLHNyYz0neWFob28nLCBmcm9tPSIyMDAwLTAxLTAxIiwgdG89IjIwMDktMTItMzAiKQ0KIyN0byBzZWUgaGVhZGVycyBvZiBmaWxlIChPSExDViB0eXBlKQ0KbmFtZXMoR0UpDQojIyBleHRyYWN0IEFkanVzdGVkIENsb3NlDQpnZUFkaiA9IEdFJEdFLkFkanVzdGVkWyIyMDAwLTAxLTAxLzIwMDAtMDEtMjAiXQ0KIyNjb21wdXRlIG1heCwgbWluIGFuZCBtZWFuDQptYXgoZ2VBZGopOyBtaW4oZ2VBZGopOyBtZWFuKGdlQWRqKQ0KIyMgZHJhdyBhIGNoYXJ0DQpjaGFydFNlcmllcyhHRSkNCiANCiMjdG8gc2F2ZSBkYXRhIHRvIHlvdXIgZGlzayB1c2UNCnNhdmVSRFMoR0UsZmlsZT0iR0UucmRzIikNCmBgYA0KImdldFN5bWJvbHMueWFob28ud2FybmluZyI9RkFMU0UNCiMjIyBUYXNrIDI6IENvbXBhcmluZyBQZXJmb3JtYW5jZSBvZiBTdG9ja3MgVGltZSBTZXJpZXMNCg0KVGhpcyBmb2xsb3dzIHRoZSBib29r4oCZcyBleGFtcGxlIDEuMy40IFIgTGFiL3AuIDM0IGFsc28gUiBMYWJzIDEgZnJvbSB0aGUgYm9va+KAmXMgd2Vic2l0ZSAoKikuIA0KDQo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4NCiMjIyMjIDJBKSBJbnNlcnQgdGhlIGNvZGUgY2h1bmsgdG8gY2hhcnQgaW5zdGVhZCB0aGUgcGVyZm9ybWFuY2Ugb2YgVmFsdWUgTGluZSBJbmRleCBWTElDIChzb3J0IG9mIGJlbmNobWFyayksIGFuZCBmb3VyIG90aGVyIHN0b2NrcyBvZiB5b3VyIGNob2ljZSBvdmVyIGEgdGltZSBwZXJpb2QgZGF0aW5nIGJhY2sgb25lIHllYXIgZnJvbSBwcmVzZW50IGRhdGUuDQoNCg0KPC9zcGFuPg0KYGBge3J9DQpsaWJyYXJ5KCJxdWFudG1vZCIpDQpzeW1ib2xzPWMoJ15WTElDJywnQU1aTicsJ0tPJywnQUFQTCcsJ01DRCcpDQpnZXRTeW1ib2xzKHN5bWJvbHMsc3JjPSd5YWhvbycsZnJvbT0iMjAxNy0xMS0xMiIsdG89IjIwMTgtMTEtMTIiKQ0KICNvYnRhaW4gYWRqdXN0ZWQgY2xvc2VkDQpWTElDYWQgPSBWTElDJFZMSUMuQWRqdXN0ZWQ7IEFNWk5hZD0gQU1aTiRBTVpOLkFkanVzdGVkOw0KICBLT2FkPUtPJEtPLkFkanVzdGVkOyBBQVBMYWQ9QUFQTCRBQVBMLkFkanVzdGVkOw0KICBNQ0RhZCA9IE1DRCRNQ0QuQWRqdXN0ZWQNCiAjY29tcHV0ZSBjdW11bGF0aXZlIHN1bSAoY3Vtc3VtKSBvZiBkYWlseSByZXR1cm5zIChEZWx0KQ0KICNSZW1vdmUgZmlyc3QgdGVybSBvZiB0aGUgc2VyaWVzLCB3aXRoIFstMSxdLCBzaW5jZSBjdW1zdW0gaXMgbm90IGRlZmluZWQgZm9yIGl0Lg0KdmwgPSBjdW1zdW0oKERlbHQoVkxJQ2FkKSoxMDApWy0xLF0pDQphbXpuID0gY3Vtc3VtKChEZWx0KEFNWk5hZCkqMTAwKVstMSxdKQ0Ka28gPSBjdW1zdW0oKERlbHQoS09hZCkqMTAwKVstMSxdKQ0KYXAgPSBjdW1zdW0oKERlbHQoQUFQTGFkKSoxMDApWy0xLF0pDQptZCA9IGN1bXN1bSgoRGVsdChNQ0RhZCkqMTAwKVstMSxdKQ0KIA0KIyMjcmFuZ2Ugb2YgdmFsdWVzIGZvciB0aGUgcGxvdA0KbGltID0gYyhtaW4odmwsYW16bixrbyxhcCxtZCksbWF4KHZsLGFtem4sa28sYXAsbWQpKQ0KIyMjdGhlIHBsb3QNCnBsb3QodmwsbWFpbj0iIix5bGltPWxpbSx4bGFiPSJkYXRlcyIseWxhYj0iJSBiZW5lZml0cyIpDQpsaW5lcyhhbXpuLGNvbD0iZ3JlZW4iKTsgDQpsaW5lcyhrbyxjb2w9InJlZCIpDQpsaW5lcyhhcCxjb2w9InZpb2xldCIpOw0KbGluZXMobWQsY29sPSJ5ZWxsb3ciKQ0KbGVnZW5kKHg9InRvcGxlZnQiLGNleD0wLjQsYygiVkxJQyIsIkFNWk4iLCJLTyIsIkFBUEwiLCJNQ0QiKSwNCiAgIGx0eT0xLCBjb2w9YygiYmxhY2siLCJncmVlbiIsInJlZCIsInZpb2xldCIsInllbGxvdyIpKQ0KYGBgDQoNCjxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPg0KIyMjIyMgMkIpIFdyaXRlIHRoZSBtYXRoZW1hdGljYWwgZm9ybS9yZXByZXNlbnRhdGlvbiwgdXNpbmcgcHJvcGVyIG1hdGggc3ltYm9scywgdG8gZGVzY3JpYmUgdGhlIGZvcm11bGEgYmVpbmcgY2FsY3VsYXRlZCBhbmQgcGxvdHRlZCBpbiB0aGUgY29kZSAgDQo8L3NwYW4+DQokJFxzdW1fe2k9MX1eezR9JCQgJFxmcmFje1tzdGtbaSsxXS1zdGtbaV1dfXtzdGtbaV19JCAqMTAwDQoNCg0KPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+DQojIyMjIyAyQykgV3JpdGUgYSAgcGFyYWdyYXBoLCBpbiB5b3VyIG93biB3b3JkcywgY29tcGFyaW5nIHRoZSBzdG9jayBwZXJmb3JtYW5jZXMgYmFzZWQgb24geW91ciBhc3Nlc3NtZW50IG9mIHRoZSBjb21wYW5pZXMgZ2VuZXJhbCBidXNpbmVzcyBhbmQgdGhlaXIgdmFsdWF0aW9uIHZpcy1hLXZpcyB0aGUgbWFya2V0IG92ZXJhbGwgcGVyZm9ybWFuY2UsIGFuZCBwZXJ0aW5lbnQgZWNvbm9ub21pY2FsIGZhY3RvcnMuDQo8L3NwYW4+DQoNCldlIGNhbiBzZWUgY2xlYXJseSB0aGF0IHRoZSB2YWx1ZSBvZiBvbmUgc3RvY2sgaS5lIEFtYXpvbiBoYXMgY29udGludW91c2x5IGJlZW4gYWJvdmUgdGhlIG90aGVyIGZvdXIsIHdoaWxlIGdlbmVyYWwgZWxlY3RyaWNzLCBhcHBsZSwgbWNkb25hbGRzIGFuZCBjb2NhIGNvbGEgaGF2ZSBiZWVuIG1vcmUgb3IgbGVzcyBpbiB0aGUgc2FtZSByYW5nZS4gIFRoZSB2YWx1ZXMgb2Ygc3RvY2tzIGhhdmUgcGlja2VkIHVwIHNpbmNlIHRoZSBtaWQgb2Ygc2Vjb25kIHF1YXJ0ZXIgb2YgMjAxOCBhbmQgaGF2ZSBzaG93biBzdHJvbmcgZ3Jvd3RoIHRocm91Z2hvdXQgdGhlIHllYXIgdW50aWwgT2N0b2JlciAyMDE4IHdoaWNoIHNob3dlZCBhIGRlY2xpbmUgaW4gdGhlIG92ZXJhbGwgbWFya2V0IHZhbHVlIHRyYWNraW5nIGdsb2JhbCBxdWVzIGFuZCBsb29taW5nIHRyYWRlIHdhciB0aHJlYXRzLiB0aGUgbWFya2V0cyBoYXZlIHNob3duIHNpZ25zIG9mIHJlY292ZXJ5IGluIG1pZCBOb3ZlbWJlci4NClRoZSBkYXRhIGlzIGluc3VmZmljaWVudCB0byB0cmFjayB0cmVuZHMgYXMgaXQganVzdCBiZWxvbmdzIHRvIG9uZSB5ZWFyLg0KDQoNCg0KDQoNCg0KIyMjIFRhc2sgMzogUHJvYmxlbShzKSBTb2x2aW5nDQoNCg0KDQo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4NCiMjIyMjIDNBKSBTb2x2ZSBmb3IgMS4zLjggUHJvYmxlbS9wLiAzNi4gDQo8L3NwYW4+DQpHaXZlbg0KSz0yMCxTZD0xNSxTdT00MCxTMD0yNSxyPTAuMDUNCkN1PVN1LWs9NDAtMjA9MjAgb3INCkNkPTAoc2luY2UgJFNkPGskKQ0KDQokXERlbHRhJCA9ICRcZnJhY3tDdS1DZH17U3UtU2R9JCAmDQpCPSAkXGZyYWN7U2QtQ2R9ezErcn0kID0gJFxmcmFjeyBTdS1DdX17MStyfSQNCg0KICRcRGVsdGEgUy0kKDErcilee3R9DQogd2hlcmUgdD0xIGF0IHRoZSBlbmQgb2YgdGhlIHBlcmlvZCAmIHQ9MCBhdCB0aGUgYmVnaW5pbmcuIEluIG91ciBjYXNlDQogDQogdGhlcmVmb3JlICRcRGVsdGEkID0gJFxmcmFjezIwLTB9ezQwLTE1fSQgPTAuOA0KICANCiAgQj0kXGZyYWN7KDAuOCk0MC0yMH17MS4wNX0kID0gMTEuNDMNCiAgDQogIGhlbmNlIGF0IHRoZSBleHBpcmF0aW9uIHRpbWUgb2YgcGF5IG9mZiwgQiBpcyBlaXRoZXINCiAgDQokXERlbHRhJCBTdS0oMStyKUIgPSAoMC44KTQwLTEyPTIwIG9yDQokXERlbHRhJCBTZC0oMStyKUIgPSgwLjgpMTUtMjA9MA0KICANCkM9KDAuOCkyNS0xMS40Mj04LjU3DQphdCB0aW1lPTANCg0KUHV0IGNhbGwgcGFyaXR5DQoNClMwK1A9QysgJFxmcmFje1h9ezErMC4wNX0kDQpQPSA4LjU3ICsgJFxmcmFjezIwfXsxLjA1fSQgLTI1DQpQPSAyLjYxOA0KDQoNCg0KDQo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4NCiMjIyMjIDNCKSBTb2x2ZSBmb3IgMS4zLjkgUHJvYmxlbS9wLiAzNg0KPC9zcGFuPg0KDQpUaGUgcHV0LWNhbGwgcGFyaXR5IHN0YXRlcyB0aGF0DQoNCkMtUD1TLUskZV57LXJ0fSQNCg0KZGlmZmVyZW50aWF0aW5nIHRoaXMgZXF1YXRpb24gd2l0aCByZXNwZWN0IHRvIHN0b2NrIHByaWNlIFMNCg0KTEhTPSAkXGZyYWN7ZH17ZFN9JCAoQy1QKT0gJFxEZWx0YSQgYy0gJFxEZWx0YSQgcCAgLi4uLjEpDQoNClJIUz0gJFxmcmFje2R9e2RTfSQgKFMtSyAkZV57LXJ0fSQpDQoNCiRcZnJhY3tkfXtkU30kIChTKSA9IDEgICAgIChzaW1jZSBLIGlzIGEgY29uc3RhbnQsIGl0J3MgZGVyaXZhdGl2ZSBpcyAwKQ0KDQpSSFM9IDAgLi4uLi4uLjIpDQoNCnRoZXJlZm9yZSAkXERlbHRhJCBjIC0gJFxEZWx0YSQgcCA9IDEgLi4uLi4uZnJvbSAxIGFuZCAyDQoNCiRcRGVsdGEkIGM9ICRcRGVsdGEkIHArMQ0KDQoNCipbaHR0cDovL2NvbXB1dGF0aW9uYWxmaW5hbmNlLmxzaS51cGMuZWR1IF0oaHR0cDovL2NvbXB1dGF0aW9uYWxmaW5hbmNlLmxzaS51cGMuZWR1KQ0KDQoNCg0K