Section 1 - Loading the Data

1.1

How many rows of data (observations) are in this dataset?

191641

1.2

How many variables are in this dataset?

11

1.3

Using the “max” function, what is the maximum value of the variable “ID”?

18134

1.4

What is the minimum value of the variable “Beat”?

4756

1.5

How many observations have value TRUE in the Arrest variable (this is the number of crimes for which an arrest was made)?

15536

1.6

How many observations have a LocationDescription value of ALLEY?

2308

Section 2 - Understanding Dates in R

In many datasets, like this one, you have a date field. Unfortunately, R does not automatically recognize entries that look like dates. We need to use a function in R to extract the date and time. Take a look at the first entry of Date (remember to use square brackets when looking at a certain entry of a variable).

2.1

In what format are the entries in the variable Date?

  • Month/Day/Year Hour:Minute
  • Day/Month/Year Hour:Minute
  • Hour:Minute Month/Day/Year
  • Hour:Minute Day/Month/Year
Month/Day/Year Hour:Minute

2.2

Now, let’s convert these characters into a Date object in R. In your R console, type

DateConvert = as.Date(strptime(mvt$Date, "%m/%d/%y %H:%M"))

This converts the variable “Date” into a Date object in R. Take a look at the variable DateConvert using the summary function.

What is the month and year of the median date in our dataset? Enter your answer as “Month Year”, without the quotes. (Ex: if the answer was 2008-03-28, you would give the answer “March 2008”, without the quotes.)

May 2006

2.3

Now, let’s extract the month and the day of the week, and add these variables to our data frame mvt. We can do this with two simple functions. Type the following commands in R:

mvt$Month = months(DateConvert)

mvt$Weekday = weekdays(DateConvert)

This creates two new variables in our data frame, Month and Weekday, and sets them equal to the month and weekday values that we can extract from the Date object. Lastly, replace the old Date variable with DateConvert by typing:

mvt$Date = DateConvert

Using the table command, answer the following questions.

In which month did the fewest motor vehicle thefts occur?

February, 13511

2.4

On which weekday did the most motor vehicle thefts occur?

Friday, 29284

2.5

Each observation in the dataset represents a motor vehicle theft, and the Arrest variable indicates whether an arrest was later made for this theft. Which month has the largest number of motor vehicle thefts for which an arrest was made?

January, 1435
LS0tCnRpdGxlOiAiQVMxLTEgQW4gQW5hbHl0aWNhbCBEZXRlY3RpdmUiCmF1dGhvcjogIjxLYXJlbiBZYW5nPiA8TTA2NDYxMDAyMT4iCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCi0gLSAtIAoKIyMjIFNlY3Rpb24gMSAtIExvYWRpbmcgdGhlIERhdGEKCiMjIyMgMS4xIApIb3cgbWFueSByb3dzIG9mIGRhdGEgKG9ic2VydmF0aW9ucykgYXJlIGluIHRoaXMgZGF0YXNldD8KCmBgYHtyfQoxOTE2NDEKYGBgCgoKIyMjIyAxLjIgCkhvdyBtYW55IHZhcmlhYmxlcyBhcmUgaW4gdGhpcyBkYXRhc2V0PwpgYGB7cn0KMTEKYGBgCgoKIyMjIyAxLjMgClVzaW5nIHRoZSAibWF4IiBmdW5jdGlvbiwgd2hhdCBpcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgIklEIj8KCmBgYHtyfQoxODEzNApgYGAKCiMjIyMgMS40IApXaGF0IGlzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSAiQmVhdCI/CmBgYHtyfQo0NzU2CmBgYAoKIyMjIyAxLjUgCkhvdyBtYW55IG9ic2VydmF0aW9ucyBoYXZlIHZhbHVlIFRSVUUgaW4gdGhlIEFycmVzdCB2YXJpYWJsZSAodGhpcyBpcyB0aGUgbnVtYmVyIG9mIGNyaW1lcyBmb3Igd2hpY2ggYW4gYXJyZXN0IHdhcyBtYWRlKT8KCmBgYHtyfQoxNTUzNgpgYGAKCiMjIyMgMS42IApIb3cgbWFueSBvYnNlcnZhdGlvbnMgaGF2ZSBhIExvY2F0aW9uRGVzY3JpcHRpb24gdmFsdWUgb2YgQUxMRVk/CgpgYGB7cn0KMjMwOApgYGAKCiMjIyBTZWN0aW9uIDIgLSBVbmRlcnN0YW5kaW5nIERhdGVzIGluIFIKCgpJbiBtYW55IGRhdGFzZXRzLCBsaWtlIHRoaXMgb25lLCB5b3UgaGF2ZSBhIGRhdGUgZmllbGQuIFVuZm9ydHVuYXRlbHksIFIgZG9lcyBub3QgYXV0b21hdGljYWxseSByZWNvZ25pemUgZW50cmllcyB0aGF0IGxvb2sgbGlrZSBkYXRlcy4gV2UgbmVlZCB0byB1c2UgYSBmdW5jdGlvbiBpbiBSIHRvIGV4dHJhY3QgdGhlIGRhdGUgYW5kIHRpbWUuIFRha2UgYSBsb29rIGF0IHRoZSBmaXJzdCBlbnRyeSBvZiBEYXRlIChyZW1lbWJlciB0byB1c2Ugc3F1YXJlIGJyYWNrZXRzIHdoZW4gbG9va2luZyBhdCBhIGNlcnRhaW4gZW50cnkgb2YgYSB2YXJpYWJsZSkuCgojIyMjIDIuMSAKSW4gd2hhdCBmb3JtYXQgYXJlIHRoZSBlbnRyaWVzIGluIHRoZSB2YXJpYWJsZSBEYXRlPwoKKyBNb250aC9EYXkvWWVhciBIb3VyOk1pbnV0ZQorIERheS9Nb250aC9ZZWFyIEhvdXI6TWludXRlCisgSG91cjpNaW51dGUgTW9udGgvRGF5L1llYXIKKyBIb3VyOk1pbnV0ZSBEYXkvTW9udGgvWWVhcgoKYGBge3J9Ck1vbnRoL0RheS9ZZWFyIEhvdXI6TWludXRlCmBgYAoKIyMjIyAyLjIgCgpOb3csIGxldCdzIGNvbnZlcnQgdGhlc2UgY2hhcmFjdGVycyBpbnRvIGEgRGF0ZSBvYmplY3QgaW4gUi4gSW4geW91ciBSIGNvbnNvbGUsIHR5cGUKCiAgICBEYXRlQ29udmVydCA9IGFzLkRhdGUoc3RycHRpbWUobXZ0JERhdGUsICIlbS8lZC8leSAlSDolTSIpKQoKVGhpcyBjb252ZXJ0cyB0aGUgdmFyaWFibGUgIkRhdGUiIGludG8gYSBEYXRlIG9iamVjdCBpbiBSLiBUYWtlIGEgbG9vayBhdCB0aGUgdmFyaWFibGUgRGF0ZUNvbnZlcnQgdXNpbmcgdGhlIHN1bW1hcnkgZnVuY3Rpb24uCgpXaGF0IGlzIHRoZSBtb250aCBhbmQgeWVhciBvZiB0aGUgbWVkaWFuIGRhdGUgaW4gb3VyIGRhdGFzZXQ/IEVudGVyIHlvdXIgYW5zd2VyIGFzICJNb250aCBZZWFyIiwgd2l0aG91dCB0aGUgcXVvdGVzLiAoRXg6IGlmIHRoZSBhbnN3ZXIgd2FzIDIwMDgtMDMtMjgsIHlvdSB3b3VsZCBnaXZlIHRoZSBhbnN3ZXIgIk1hcmNoIDIwMDgiLCB3aXRob3V0IHRoZSBxdW90ZXMuKQoKYGBge3J9Ck1heSAyMDA2CmBgYAoKIyMjIyAyLjMKTm93LCBsZXQncyBleHRyYWN0IHRoZSBtb250aCBhbmQgdGhlIGRheSBvZiB0aGUgd2VlaywgYW5kIGFkZCB0aGVzZSB2YXJpYWJsZXMgdG8gb3VyIGRhdGEgZnJhbWUgbXZ0LiBXZSBjYW4gZG8gdGhpcyB3aXRoIHR3byBzaW1wbGUgZnVuY3Rpb25zLiBUeXBlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgaW4gUjoKCiAgICBtdnQkTW9udGggPSBtb250aHMoRGF0ZUNvbnZlcnQpCgogICAgbXZ0JFdlZWtkYXkgPSB3ZWVrZGF5cyhEYXRlQ29udmVydCkKClRoaXMgY3JlYXRlcyB0d28gbmV3IHZhcmlhYmxlcyBpbiBvdXIgZGF0YSBmcmFtZSwgTW9udGggYW5kIFdlZWtkYXksIGFuZCBzZXRzIHRoZW0gZXF1YWwgdG8gdGhlIG1vbnRoIGFuZCB3ZWVrZGF5IHZhbHVlcyB0aGF0IHdlIGNhbiBleHRyYWN0IGZyb20gdGhlIERhdGUgb2JqZWN0LiBMYXN0bHksIHJlcGxhY2UgdGhlIG9sZCBEYXRlIHZhcmlhYmxlIHdpdGggRGF0ZUNvbnZlcnQgYnkgdHlwaW5nOgoKICAgIG12dCREYXRlID0gRGF0ZUNvbnZlcnQKClVzaW5nIHRoZSB0YWJsZSBjb21tYW5kLCBhbnN3ZXIgdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuCgpJbiB3aGljaCBtb250aCBkaWQgdGhlIGZld2VzdCBtb3RvciB2ZWhpY2xlIHRoZWZ0cyBvY2N1cj8KCmBgYHtyfQpGZWJydWFyeSwgMTM1MTEKYGBgCgojIyMjIDIuNCAKT24gd2hpY2ggd2Vla2RheSBkaWQgdGhlIG1vc3QgbW90b3IgdmVoaWNsZSB0aGVmdHMgb2NjdXI/CgpgYGB7cn0KRnJpZGF5LCAyOTI4NApgYGAKCiMjIyMgMi41IApFYWNoIG9ic2VydmF0aW9uIGluIHRoZSBkYXRhc2V0IHJlcHJlc2VudHMgYSBtb3RvciB2ZWhpY2xlIHRoZWZ0LCBhbmQgdGhlIEFycmVzdCB2YXJpYWJsZSBpbmRpY2F0ZXMgd2hldGhlciBhbiBhcnJlc3Qgd2FzIGxhdGVyIG1hZGUgZm9yIHRoaXMgdGhlZnQuIFdoaWNoIG1vbnRoIGhhcyB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgbW90b3IgdmVoaWNsZSB0aGVmdHMgZm9yIHdoaWNoIGFuIGFycmVzdCB3YXMgbWFkZT8KCmBgYHtyfQpKYW51YXJ5LCAxNDM1CmBgYAoKIyMjIFNlY3Rpb24gMyAtIFZpc3VhbGl6aW5nIENyaW1lIFRyZW5kcwoKIyMjIyAzLjEKCk5vdywgbGV0J3MgbWFrZSBzb21lIHBsb3RzIHRvIGhlbHAgdXMgYmV0dGVyIHVuZGVyc3RhbmQgaG93IGNyaW1lIGhhcyBjaGFuZ2VkIG92ZXIgdGltZSBpbiBDaGljYWdvLiBUaHJvdWdob3V0IHRoaXMgcHJvYmxlbSwgYW5kIGluIGdlbmVyYWwsIHlvdSBjYW4gc2F2ZSB5b3VyIHBsb3QgdG8gYSBmaWxlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgdGhpcyB3ZWJzaXRlIHZlcnkgY2xlYXJseSBleHBsYWlucyB0aGUgcHJvY2Vzcy4KCkZpcnN0LCBsZXQncyBtYWtlIGEgaGlzdG9ncmFtIG9mIHRoZSB2YXJpYWJsZSBEYXRlLiBXZSdsbCBhZGQgYW4gZXh0cmEgYXJndW1lbnQsIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBiYXJzIHdlIHdhbnQgaW4gb3VyIGhpc3RvZ3JhbS4gSW4geW91ciBSIGNvbnNvbGUsIHR5cGUKCmhpc3QobXZ0JERhdGUsIGJyZWFrcz0xMDApCgpMb29raW5nIGF0IHRoZSBoaXN0b2dyYW0sIGFuc3dlciB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy4KCkluIGdlbmVyYWwsIGRvZXMgaXQgbG9vayBsaWtlIGNyaW1lIGluY3JlYXNlcyBvciBkZWNyZWFzZXMgZnJvbSAyMDAyIC0gMjAxMj8KCisgSW5jcmVhc2VzCisgRGVjcmVhc2VzCgpgYGB7cn0KRGVjcmVhc2VzCmBgYAoKSW4gZ2VuZXJhbCwgZG9lcyBpdCBsb29rIGxpa2UgY3JpbWUgaW5jcmVhc2VzIG9yIGRlY3JlYXNlcyBmcm9tIDIwMDUgLSAyMDA4PwoKKyBJbmNyZWFzZXMKKyBEZWNyZWFzZXMKCmBgYHtyfQpEZWNyZWFzZXMKYGBgCgpJbiBnZW5lcmFsLCBkb2VzIGl0IGxvb2sgbGlrZSBjcmltZSBpbmNyZWFzZXMgb3IgZGVjcmVhc2VzIGZyb20gMjAwOSAtIDIwMTE/CgorIEluY3JlYXNlcworIERlY3JlYXNlcwoKYGBge3J9CkluY3JlYXNlcwpgYGAKCiMjIyMgMy4yCk5vdywgbGV0J3Mgc2VlIGhvdyBhcnJlc3RzIGhhdmUgY2hhbmdlZCBvdmVyIHRpbWUuIENyZWF0ZSBhIGJveHBsb3Qgb2YgdGhlIHZhcmlhYmxlICJEYXRlIiwgc29ydGVkIGJ5IHRoZSB2YXJpYWJsZSAiQXJyZXN0IiAoaWYgeW91IGFyZSBub3QgZmFtaWxpYXIgd2l0aCBib3hwbG90cyBhbmQgd291bGQgbGlrZSB0byBsZWFybiBtb3JlLCBjaGVjayBvdXQgdGhpcyB0dXRvcmlhbCkuIEluIGEgYm94cGxvdCwgdGhlIGJvbGQgaG9yaXpvbnRhbCBsaW5lIGlzIHRoZSBtZWRpYW4gdmFsdWUgb2YgdGhlIGRhdGEsIHRoZSBib3ggc2hvd3MgdGhlIHJhbmdlIG9mIHZhbHVlcyBiZXR3ZWVuIHRoZSBmaXJzdCBxdWFydGlsZSBhbmQgdGhpcmQgcXVhcnRpbGUsIGFuZCB0aGUgd2hpc2tlcnMgKHRoZSBkb3R0ZWQgbGluZXMgZXh0ZW5kaW5nIG91dHNpZGUgdGhlIGJveCkgc2hvdyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMsIGV4Y2x1ZGluZyBhbnkgb3V0bGllcnMgKHdoaWNoIGFyZSBwbG90dGVkIGFzIGNpcmNsZXMpLiBPdXRsaWVycyBhcmUgZGVmaW5lZCBieSBmaXJzdCBjb21wdXRpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHRoaXJkIHF1YXJ0aWxlIHZhbHVlcywgb3IgdGhlIGhlaWdodCBvZiB0aGUgYm94LiBUaGlzIG51bWJlciBpcyBjYWxsZWQgdGhlIEludGVyLVF1YXJ0aWxlIFJhbmdlIChJUVIpLiBBbnkgcG9pbnQgdGhhdCBpcyBncmVhdGVyIHRoYW4gdGhlIHRoaXJkIHF1YXJ0aWxlIHBsdXMgdGhlIElRUiBvciBsZXNzIHRoYW4gdGhlIGZpcnN0IHF1YXJ0aWxlIG1pbnVzIHRoZSBJUVIgaXMgY29uc2lkZXJlZCBhbiBvdXRsaWVyLgoKRG9lcyBpdCBsb29rIGxpa2UgdGhlcmUgd2VyZSBtb3JlIGNyaW1lcyBmb3Igd2hpY2ggYXJyZXN0cyB3ZXJlIG1hZGUgaW4gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIHRpbWUgcGVyaW9kIG9yIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgdGltZSBwZXJpb2Q/IChOb3RlIHRoYXQgdGhlIHRpbWUgcGVyaW9kIGlzIGZyb20gMjAwMSB0byAyMDEyLCBzbyB0aGUgbWlkZGxlIG9mIHRoZSB0aW1lIHBlcmlvZCBpcyB0aGUgYmVnaW5uaW5nIG9mIDIwMDcuKQoKKyBGaXJzdCBoYWxmCisgU2Vjb25kIGhhbGYKCmBgYHtyfQpTZWNvbmQgaGFsZgpgYGAKCgojIyMjIDMuMwpMZXQncyBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIuIFVzZSB0aGUgdGFibGUgZnVuY3Rpb24gZm9yIHRoZSBuZXh0IGZldyBxdWVzdGlvbnMuCgpGb3Igd2hhdCBwcm9wb3J0aW9uIG9mIG1vdG9yIHZlaGljbGUgdGhlZnRzIGluIDIwMDEgd2FzIGFuIGFycmVzdCBtYWRlPwoKTm90ZTogaW4gdGhpcyBxdWVzdGlvbiBhbmQgbWFueSBvdGhlcnMgaW4gdGhlIGNvdXJzZSwgd2UgYXJlIGFza2luZyBmb3IgYW4gYW5zd2VyIGFzIGEgcHJvcG9ydGlvbi4gVGhlcmVmb3JlLCB5b3VyIGFuc3dlciBzaG91bGQgdGFrZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMS4KCmBgYHtyfQowLjEwNDExNzMKYGBgCgojIyMjIDMuNApGb3Igd2hhdCBwcm9wb3J0aW9uIG9mIG1vdG9yIHZlaGljbGUgdGhlZnRzIGluIDIwMDcgd2FzIGFuIGFycmVzdCBtYWRlPwoKYGBge3J9CjAuMDg0ODczOTUKYGBgCgojIyMjIDMuNQpGb3Igd2hhdCBwcm9wb3J0aW9uIG9mIG1vdG9yIHZlaGljbGUgdGhlZnRzIGluIDIwMTIgd2FzIGFuIGFycmVzdCBtYWRlPwoKYGBge3J9CjAuMDM5MDI5MjQKYGBgCgpTaW5jZSB0aGVyZSBtYXkgc3RpbGwgYmUgb3BlbiBpbnZlc3RpZ2F0aW9ucyBmb3IgcmVjZW50IGNyaW1lcywgdGhpcyBjb3VsZCBleHBsYWluIHRoZSB0cmVuZCB3ZSBhcmUgc2VlaW5nIGluIHRoZSBkYXRhLiBUaGVyZSBjb3VsZCBhbHNvIGJlIG90aGVyIGZhY3RvcnMgYXQgcGxheSwgYW5kIHRoaXMgdHJlbmQgc2hvdWxkIGJlIGludmVzdGlnYXRlZCBmdXJ0aGVyLiBIb3dldmVyLCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoZW4gdGhlIGFycmVzdHMgd2VyZSBhY3R1YWxseSBtYWRlLCBvdXIgZGV0ZWN0aXZlIHdvcmsgaW4gdGhpcyBhcmVhIGhhcyByZWFjaGVkIGEgZGVhZCBlbmQuCgojIyMgU2VjdGlvbiA0IC0gUG9wdWxhciBMb2NhdGlvbnMKCiMjIyMgNC4xCkFuYWx5emluZyB0aGlzIGRhdGEgY291bGQgYmUgdXNlZnVsIHRvIHRoZSBDaGljYWdvIFBvbGljZSBEZXBhcnRtZW50IHdoZW4gZGVjaWRpbmcgd2hlcmUgdG8gYWxsb2NhdGUgcmVzb3VyY2VzLiBJZiB0aGV5IHdhbnQgdG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBhcnJlc3RzIHRoYXQgYXJlIG1hZGUgZm9yIG1vdG9yIHZlaGljbGUgdGhlZnRzLCB3aGVyZSBzaG91bGQgdGhleSBmb2N1cyB0aGVpciBlZmZvcnRzPwoKV2Ugd2FudCB0byBmaW5kIHRoZSB0b3AgZml2ZSBsb2NhdGlvbnMgd2hlcmUgbW90b3IgdmVoaWNsZSB0aGVmdHMgb2NjdXIuIElmIHlvdSBjcmVhdGUgYSB0YWJsZSBvZiB0aGUgTG9jYXRpb25EZXNjcmlwdGlvbiB2YXJpYWJsZSwgaXQgaXMgdW5mb3J0dW5hdGVseSB2ZXJ5IGhhcmQgdG8gcmVhZCBzaW5jZSB0aGVyZSBhcmUgNzggZGlmZmVyZW50IGxvY2F0aW9ucyBpbiB0aGUgZGF0YSBzZXQuIEJ5IHVzaW5nIHRoZSBzb3J0IGZ1bmN0aW9uLCB3ZSBjYW4gdmlldyB0aGlzIHNhbWUgdGFibGUsIGJ1dCBzb3J0ZWQgYnkgdGhlIG51bWJlciBvZiBvYnNlcnZhdGlvbnMgaW4gZWFjaCBjYXRlZ29yeS4gSW4geW91ciBSIGNvbnNvbGUsIHR5cGU6CgogICAgc29ydCh0YWJsZShtdnQkTG9jYXRpb25EZXNjcmlwdGlvbikpCgpXaGljaCBsb2NhdGlvbnMgYXJlIHRoZSB0b3AgZml2ZSBsb2NhdGlvbnMgZm9yIG1vdG9yIHZlaGljbGUgdGhlZnRzLCBleGNsdWRpbmcgdGhlICJPdGhlciIgY2F0ZWdvcnk/IFlvdSBzaG91bGQgc2VsZWN0IDUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zLgoKKyBCYW5rCisgR2FzIFN0YXRpb24KKyBIb3RlbC9Nb3RlbAorIFN0cmVldAorIENhciBXYXNoCisgUmVzdGF1cmFudAorIFBhcmtpbmcgTG90L0dhcmFnZSAoTm9uLVJlc2lkZW50aWFsKQorIEFsbGV5CisgRHJpdmV3YXkgKFJlc2lkZW50aWFsKQorIFZhY2FudCBMb3QvTGFuZAoKYGBge3J9CjEtU3RyZWV0LyAxNTY1NjQKMi1QYXJraW5nIExvdC9HYXJhZ2UgKE5vbi1SZXNpZGVudGlhbCkvIDE0ODUyCjQtQWxsZXkvIDIzMDgKNS1HYXMgU3RhdGlvbi8gMjExMQo2LURyaXZld2F5IChSZXNpZGVudGlhbCkvIDE2NzUKYGBgCgojIyMjIDQuMiAKQ3JlYXRlIGEgc3Vic2V0IG9mIHlvdXIgZGF0YSwgb25seSB0YWtpbmcgb2JzZXJ2YXRpb25zIGZvciB3aGljaCB0aGUgdGhlZnQgaGFwcGVuZWQgaW4gb25lIG9mIHRoZXNlIGZpdmUgbG9jYXRpb25zLCBhbmQgY2FsbCB0aGlzIG5ldyBkYXRhIHNldCAiVG9wNSIuIFRvIGRvIHRoaXMsIHlvdSBjYW4gdXNlIHRoZSB8IHN5bWJvbC4gSW4gbGVjdHVyZSwgd2UgdXNlZCB0aGUgJiBzeW1ib2wgdG8gdXNlIHR3byBjcml0ZXJpYSB0byBtYWtlIGEgc3Vic2V0IG9mIHRoZSBkYXRhLiBUbyBvbmx5IHRha2Ugb2JzZXJ2YXRpb25zIHRoYXQgaGF2ZSBhIGNlcnRhaW4gdmFsdWUgaW4gb25lIHZhcmlhYmxlIG9yIHRoZSBvdGhlciwgdGhlIHwgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZSAmIHN5bWJvbC4gVGhpcyBpcyBhbHNvIGNhbGxlZCBhIGxvZ2ljYWwgIm9yIiBvcGVyYXRpb24uCgpBbHRlcm5hdGVseSwgeW91IGNvdWxkIGNyZWF0ZSBmaXZlIGRpZmZlcmVudCBzdWJzZXRzLCBhbmQgdGhlbiBtZXJnZSB0aGVtIHRvZ2V0aGVyIGludG8gb25lIGRhdGEgZnJhbWUgdXNpbmcgcmJpbmQuCgpIb3cgbWFueSBvYnNlcnZhdGlvbnMgYXJlIGluIFRvcDU/CgpgYGB7cn0KPz8/CmBgYAoKIyMjIyA0LjMKUiB3aWxsIHJlbWVtYmVyIHRoZSBvdGhlciBjYXRlZ29yaWVzIG9mIHRoZSBMb2NhdGlvbkRlc2NyaXB0aW9uIHZhcmlhYmxlIGZyb20gdGhlIG9yaWdpbmFsIGRhdGFzZXQsIHNvIHJ1bm5pbmcgdGFibGUoVG9wNSRMb2NhdGlvbkRlc2NyaXB0aW9uKSB3aWxsIGhhdmUgYSBsb3Qgb2YgdW5uZWNlc3Nhcnkgb3V0cHV0LiBUbyBtYWtlIG91ciB0YWJsZXMgYSBiaXQgbmljZXIgdG8gcmVhZCwgd2UgY2FuIHJlZnJlc2ggdGhpcyBmYWN0b3IgdmFyaWFibGUuIEluIHlvdXIgUiBjb25zb2xlLCB0eXBlOgoKICAgIFRvcDUkTG9jYXRpb25EZXNjcmlwdGlvbiA9IGZhY3RvcihUb3A1JExvY2F0aW9uRGVzY3JpcHRpb24pCgpJZiB5b3UgcnVuIHRoZSBzdHIgb3IgdGFibGUgZnVuY3Rpb24gb24gVG9wNSBub3csIHlvdSBzaG91bGQgc2VlIHRoYXQgTG9jYXRpb25EZXNjcmlwdGlvbiBub3cgb25seSBoYXMgNSB2YWx1ZXMsIGFzIHdlIGV4cGVjdC4KClVzZSB0aGUgVG9wNSBkYXRhIGZyYW1lIHRvIGFuc3dlciB0aGUgcmVtYWluaW5nIHF1ZXN0aW9ucy4KCk9uZSBvZiB0aGUgbG9jYXRpb25zIGhhcyBhIG11Y2ggaGlnaGVyIGFycmVzdCByYXRlIHRoYW4gdGhlIG90aGVyIGxvY2F0aW9ucy4gV2hpY2ggaXMgaXQ/IFBsZWFzZSBlbnRlciB0aGUgdGV4dCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyBob3cgaXQgbG9va3MgaW4gdGhlIGFuc3dlciBvcHRpb25zIGZvciBQcm9ibGVtIDQuMS4KCmBgYHtyfQo/Pz8KYGBgCgoKIyMjIyA0LjQgCk9uIHdoaWNoIGRheSBvZiB0aGUgd2VlayBkbyB0aGUgbW9zdCBtb3RvciB2ZWhpY2xlIHRoZWZ0cyBhdCBnYXMgc3RhdGlvbnMgaGFwcGVuPwooTW9uZGF5flN1bmRheSkKCmBgYHtyfQo/Pz8KYGBgCgojIyMjIDQuNQpPbiB3aGljaCBkYXkgb2YgdGhlIHdlZWsgZG8gdGhlIGZld2VzdCBtb3RvciB2ZWhpY2xlIHRoZWZ0cyBpbiByZXNpZGVudGlhbCBkcml2ZXdheXMgaGFwcGVuPyhNb25kYXl+U3VuZGF5KQoKYGBge3J9Cj8/PwpgYGAKCgoKCgo=