Before we meet: Installation & readings

Installation & readings

Rstudio is an IDE (Integrated Development Environment) that makes it easier to write and execute R code.

R is a programming language that is used for a lot for data analysis and statistics. We will introduce you to it’s usage. Time is short, please :

panes

Note: Should you want to know more, the guided tour for Rstudio is available.

install.packages("tidyverse", dependencies = TRUE)

This can be more challenging, if you have enough time to try:

You will need to create a ssh key (The starts is the most difficult! last step, but it is worth it !)

PLEASE LET ME KNOW IF YOU DID NOT MANAGE THIS BEFORE WE MEET. We can eg. have a look during an online meeting.

Why we need to do this ? It’s about Rproducible science and Open data science

This part will be discussed in the course.

The way we will work will help us to do reproducible research. It will help you (and us) to organize the data analysis work, and document what you have done, including the reasons behind your choices.

Three months from now YOU might not remember the reasoning and all the steps you have done in your analyses. Documenting what you are doing at the same time you are doing it, is a very good practice.

This will save you time and struggles. What you have done will be essential information for publication and manuscript revision.

Moreover, working this way, will allow you to start setting up your analyses BEFORE all the data are collected. You will be able to re-run all your code using updated data. This is helping you being pro-active.

What are the requirements of reproducible research ? The following article mention
10 Rules of reproducible research

  1. For Every Result, Keep Track of How It Was Produced
  2. Avoid Manual Data Manipulation Steps
  3. Archive the Exact Versions of All External Programs Used
  4. Version Control: Use it for all Customized Scripts
  5. Record All Intermediate Results, When Possible in Standardized Formats
  6. For Analyses That Include Randomness, Note Underlying Random Seeds
  7. Always Store Raw Data behind Plots
  8. Generate Hierarchical Analysis Output, Allowing Layers of Increasing Detail to Be Inspected
  9. Connect Textual Statements to Underlying Results
  10. Provide Public Access to Scripts, Runs, and Results

We will see that using R and Rstudio can help you to relatively easy follow all steps but 4 and 10. The latest, which require using a version control system like Git, and eventually an associated online platform like github that allows to store your code on the web. Github in turn can be used during the publication and can facilitate the creation of DOI via integration with Zenodo. This then allows people to cite your data analysis work and code!

WARNING: NEVER PUT YOUR DATA ON GITHUB, only the code to process the data

Additional ressources you can eventually read

We might not have time to go into details with git and github, but we will try to

But if you feel like it, you can learn Git for version control (it can be used with the command line - aka Terminal panel that is available in Rstudio):
- Git-Novice is a good lesson to start with.

Preliminary training program

  • github and R - get started with a project (understand the basic principles)
  • data wrangling
  • data exploration and visualization (ensure data quality, what do I have)
  • eventually … going further

Back to Index

LS0tDQp0aXRsZTogImByIHBhcmFtcyR0aXRsZWAiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiDQphdXRob3I6IEV2ZSBaZXlsIEZpc2tlYmVjayBhbmQgTWFkZWxhaW5lIE5vcnN0csO2bQ0KcGFyYW1zOg0KICB0aXRsZTogIkJlZm9yZSB3ZSBtZWV0OiBJbnN0YWxsYXRpb24gJiByZWFkaW5ncyIgDQogIHByb2plY3RfcGF0aDogImByIGhlcmU6OmhlcmUoKWAiDQogIA0Ka25pdDogKGZ1bmN0aW9uKGlucHV0RmlsZSwgZW5jb2RpbmcpIHsNCiAgcm1hcmtkb3duOjpyZW5kZXIoaW5wdXRGaWxlLCBlbmNvZGluZyA9IGVuY29kaW5nLCBvdXRwdXRfZGlyID0gIi4uLy4uL2RvY3MiKSB9KQ0KICANCm91dHB1dDogDQogIA0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICAgIGNzczogLi4vc3R5bGVzL3N0eWxlLmNzcw0KICAgICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICAgIHRvY19kZXB0aDogNA0KICAgICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICAgIGF1dGhvcjogcGFyYW1zJGF1dGhvcg0KICAgICAgaGlnaGxpZ2h0OiBlc3ByZXNzbw0KICAgICAgDQoNCiAgDQplZGl0b3Jfb3B0aW9uczogDQogIG1hcmtkb3duOiANCiAgICB3cmFwOiA3Mg0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCiMgSW5zdGFsbGF0aW9uICYgcmVhZGluZ3MNCg0KUnN0dWRpbyBpcyBhbiBJREUgKEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQpIHRoYXQgbWFrZXMgaXQNCmVhc2llciB0byB3cml0ZSBhbmQgZXhlY3V0ZSBSIGNvZGUuDQoNClIgaXMgYSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IGlzIHVzZWQgZm9yIGEgbG90IGZvciBkYXRhIGFuYWx5c2lzIGFuZA0Kc3RhdGlzdGljcy4gV2Ugd2lsbCBpbnRyb2R1Y2UgeW91IHRvIGl0J3MgdXNhZ2UuIFRpbWUgaXMgc2hvcnQsIHBsZWFzZSA6DQoNCi0gICBbIF0g4oCCSW5zdGFsbCBSIHN0dWRpbyAtIE5vbiBjb21tZXJjaWFsID0gUnN0dWRpbyBEZXNrdG9wIChmcmVlDQogICAgZWRpdGlvbikuIFZpc2l0IFtwb3NpdA0KICAgIHdlYnBhZ2VdKGh0dHBzOi8vcG9zaXQuY28vZG93bmxvYWQvcnN0dWRpby1kZXNrdG9wLykgZm9yDQogICAgaW5zdGFsbGF0aW9uLg0KDQotICAgWyBdIOKAgkdldCBmYW1pbGlhciB3aXRoIHNvbWUgYmFzaWMgdm9jYWJ1bGFyeSA6IFJzdHVkaW8gaW50ZXJmYWNlDQogICAgKGJlbG93KS4gTmFtZXMgb2YgdGhlIHdpbmRvd3MgYXJlIGluIHJlZC4NCg0KPGltZyBzcmM9Imh0dHBzOi8vZG9jcy5wb3NpdC5jby9pZGUvdXNlci9pZGUvZ3VpZGUvdWkvaW1hZ2VzL3JzdHVkaW8tcGFuZXMtbGFiZWxlZC5qcGVnIiBhbHQ9InBhbmVzIiBjbGFzcz0iLmltZzEiLz4NCg0KTm90ZTogU2hvdWxkIHlvdSB3YW50IHRvIGtub3cgbW9yZSwgdGhlIGd1aWRlZCB0b3VyIGZvcg0KW1JzdHVkaW9dKGh0dHBzOi8vZG9jcy5wb3NpdC5jby9pZGUvdXNlci8pIGlzIGF2YWlsYWJsZS4NCg0KLSAgIFsgXSDigIJIYXZlIGEgbG9vayBhdCB0aGUgZm9sbG93aW5nIHZpZGVvOiBbUm1hcmtkb3duOiB3aGF0IGl0IGlzIGFuZA0KICAgIGl0J3MgcG90ZW50aWFsDQogICAgdXNhZ2VzXShodHRwczovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbS9hdXRob3JpbmdfcXVpY2tfdG91ci5odG1sKSBXZQ0KICAgIHdpbGwgdXNlIFJtYXJrZG93biB0byBydW4gY29kZSBkdXJpbmcgdGhlIGNvdXJzZS4gVGhpcyB3aWxsIGFsc28NCiAgICBhbGxvdyB5b3UgdG8gdGFrZSBub3RlcyBhdCB0aGUgc2FtZSB0aW1lLg0KICAgIA0KLSAgIFsgXSDigIJJbnN0YWxsIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMvbWV0YXBhY2thZ2UgaW4gUiwgYnkgdHlwaW5nIGV4YWN0bHkgdGhlIA0KY29tbWFuZCBiZWxvdyBpbiBSc3R1ZGlvICoqY29uc29sZSoqIGFuZCB0aGVuIHByZXNzaW5nIGBlbnRlcmAuIFdlIHdpbGwgZXhwbGFpbiBsYXRlcg0KZHVyaW5nIHRoZSBjb3Vyc2UgKHdlIHdpbGwgaW5zdGFsbCBvdGhlciBwYWNrYWdlcykuIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgdGltZS4NCg0KDQpgYGB7ciBzaG93IGNvZGUgLSBkbyBub3QgcnVuLCBlY2hvPVRSVUUsICBldmFsID0gRkFMU0UsIGNsYXNzLnNvdXJjZSA9ICJmb2xkLXNob3cifQ0KaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIiwgZGVwZW5kZW5jaWVzID0gVFJVRSkNCmBgYA0KDQoNCiAgICANCi0gWyBdIOKAgiBJZiB5b3UgYXJlIHVuY2VydGFpbiBvZiB3aGF0IGFyZSB0aGUgYmVzdCBwcmFjdGljZXMgZm9yIHJlZ2lzdGVyaW5nIGFuZCBvcmdhbml6aW5nIA0KeW91ciBkYXRhIHBsZWFzZSByZWFkIHRoaXMgdHV0b3JpYWwsIHBhcnRpY3VsYXJseSB0aGUgc2VjdGlvbiBvZiANCltzcHJlYWRzaGVldCBiZXN0IHByYWN0aWNlc10oaHR0cHM6Ly91Y2RhdmlzZGF0YWxhYi5naXRodWIuaW8vd29ya3Nob3Bfa2VlcGluZ19kYXRhX3RpZHkvI2NvbnRlbnQpLg0KTkI6IFRvb2xzIGxpa2UgS29ib1Rvb2xib3ggYW5kIFdIT05FVCBhcmUgdXN1YWxseSB1c2VmdWwgdG8gaGVscCBmb2xsb3dpbmcgdGhvc2UgcHJpbmNpcGxlcw0Kd2hlbiByZWdpc3RlcmluZyBkYXRhLCBidXQgdW5kZXJzdGFuZGluZyBtb3JlIGFib3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRob3NlIHJlcXVpcmVtZW50cw0KaXMgaW1wb3J0YW50LiAgDQoNCi0gWyBdIOKAglBsZWFzZSBpbnN0YWxsIFtnaXRdKGh0dHBzOi8vZ2l0LXNjbS5jb20vZG93bmxvYWRzL3dpbikgdmVyc2lvbiBjb250cm9sIA0KdXRpbGl0eSBvbiB5b3VyIFBDIGFuZCByZWFkIFt0aGlzXShodHRwczovL3N3Y2FycGVudHJ5LmdpdGh1Yi5pby9naXQtbm92aWNlLzAxLWJhc2ljcy5odG1sKSANCnRvIHVuZGVyc3RhbmQgd2h5IHZlcnNpb24gY29udHJvbCBpcyBhIGZhbnRhc3RpYyB0b29sLg0KDQotIFsgXSDigIJQbGVhc2UgY3JlYXRlIGEgW2dpdGh1YiBhY2NvdW50XShodHRwczovL2dpdGh1Yi5jb20vKSBpZiB5b3UgZG8gbm90IGhhdmUgDQpvbmUuIFlvdSBjYW4gZWcuIGZvbGxvdyANClt0aGlzIHR1dG9yaWFsXShodHRwczovL3N3Y2FycGVudHJ5LmdpdGh1Yi5pby9naXQtbm92aWNlLyNjcmVhdGluZy1hLWdpdGh1Yi1hY2NvdW50KQ0KDQoNCl9UaGlzIGNhbiBiZSBtb3JlIGNoYWxsZW5naW5nLCBpZiB5b3UgaGF2ZSBlbm91Z2ggdGltZSB0byB0cnk6XyANCg0KWW91IHdpbGwgbmVlZCB0byBjcmVhdGUgYSBzc2gga2V5IChUaGUgc3RhcnRzIGlzIHRoZSBtb3N0IGRpZmZpY3VsdCEgbGFzdCBzdGVwLCANCmJ1dCBpdCBpcyB3b3J0aCBpdCAhKQ0KDQotIFsgXSDigIIgUGxlYXNlIHRyeSB0byBjcmVhdGUgYSBzc2gta2V5LCBmb2xsb3dpbmcNClt0aGlzIHR1dG9yaWFsXShodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hdXRoZW50aWNhdGlvbi9jb25uZWN0aW5nLXRvLWdpdGh1Yi13aXRoLXNzaC9hZGRpbmctYS1uZXctc3NoLWtleS10by15b3VyLWdpdGh1Yi1hY2NvdW50KQ0KDQoNCi0gWyBdIOKAgiBQbGVhc2UgdHJ5IHRvIGNvbm5lY3QgeW91ciBnaXRodWIgYWNjb3VudCB0byB5b3VyIFJzdHVkaW8sIA0KeW91IGNhbiBoYXZlIGEgbG9vayB0byBbdGhpcyB0dXRvcmlhbF0oaHR0cHM6Ly9oYXBweWdpdHdpdGhyLmNvbS9yc3R1ZGlvLWdpdC1naXRodWIpIA0KY2FuIGJlIGhlbHBmdWwuDQoNCioqPG1hcms+PGI+UExFQVNFIExFVCBNRSBLTk9XIElGIFlPVSBESUQgTk9UIE1BTkFHRSBUSElTIEJFRk9SRSBXRSBNRUVULjwvYj48L21hcms+DQpXZSBjYW4gZWcuIGhhdmUgYSBsb29rIGR1cmluZyBhbiBvbmxpbmUgbWVldGluZy4qKg0KDQoNCiMgV2h5IHdlIG5lZWQgdG8gZG8gdGhpcyA/IEl0J3MgYWJvdXQgUnByb2R1Y2libGUgc2NpZW5jZSBhbmQgT3BlbiBkYXRhIHNjaWVuY2UNClRoaXMgcGFydCB3aWxsIGJlIGRpc2N1c3NlZCBpbiB0aGUgY291cnNlLiANCg0KVGhlIHdheSB3ZSB3aWxsIHdvcmsgd2lsbCBoZWxwIHVzIHRvIGRvIHJlcHJvZHVjaWJsZSByZXNlYXJjaC4gSXQgd2lsbCANCmhlbHAgeW91IChhbmQgdXMpIHRvIG9yZ2FuaXplIHRoZSBkYXRhIGFuYWx5c2lzIHdvcmssIGFuZCBkb2N1bWVudCB3aGF0IHlvdSANCmhhdmUgZG9uZSwgaW5jbHVkaW5nIHRoZSByZWFzb25zIGJlaGluZCB5b3VyIGNob2ljZXMuDQoNClRocmVlIG1vbnRocyBmcm9tIG5vdyBZT1UgbWlnaHQgbm90IHJlbWVtYmVyIHRoZSByZWFzb25pbmcgYW5kIGFsbCB0aGUgDQpzdGVwcyB5b3UgaGF2ZSBkb25lIGluIHlvdXIgYW5hbHlzZXMuIERvY3VtZW50aW5nIHdoYXQgeW91IGFyZSBkb2luZyBhdCB0aGUgDQpzYW1lIHRpbWUgeW91IGFyZSBkb2luZyBpdCwgaXMgYSB2ZXJ5IGdvb2QgcHJhY3RpY2UuIA0KDQpUaGlzIHdpbGwgc2F2ZSB5b3UgdGltZSBhbmQgc3RydWdnbGVzLiBXaGF0IHlvdSBoYXZlIGRvbmUgd2lsbCBiZSBlc3NlbnRpYWwgaW5mb3JtYXRpb24NCmZvciBwdWJsaWNhdGlvbiBhbmQgbWFudXNjcmlwdCByZXZpc2lvbi4gDQoNCjwhLS0gbGFiIGpvdXJuYWwgdG8gZGF0YSBqb3VybmFsLS0+DQoNCk1vcmVvdmVyLCB3b3JraW5nIHRoaXMgd2F5LCB3aWxsIGFsbG93IHlvdSB0byBzdGFydCBzZXR0aW5nIHVwIHlvdXIgYW5hbHlzZXMgDQpCRUZPUkUgYWxsIHRoZSBkYXRhIGFyZSBjb2xsZWN0ZWQuIFlvdSB3aWxsIGJlIGFibGUgdG8gcmUtcnVuIGFsbCB5b3VyIGNvZGUNCnVzaW5nIHVwZGF0ZWQgZGF0YS4gVGhpcyBpcyBoZWxwaW5nIHlvdSBiZWluZyBwcm8tYWN0aXZlLiANCg0KV2hhdCBhcmUgdGhlIDx1PnJlcXVpcmVtZW50cyBvZiByZXByb2R1Y2libGUgcmVzZWFyY2ggPzwvdT4gDQpUaGUgZm9sbG93aW5nIGFydGljbGUgbWVudGlvbiAgDQpbMTAgUnVsZXMgb2YgcmVwcm9kdWNpYmxlIHJlc2VhcmNoXShodHRwczovL2pvdXJuYWxzLnBsb3Mub3JnL3Bsb3Njb21wYmlvbC9hcnRpY2xlP2lkPTEwLjEzNzEvam91cm5hbC5wY2JpLjEwMDMyODUpDQoNCj4gMS4gRm9yIEV2ZXJ5IFJlc3VsdCwgS2VlcCBUcmFjayBvZiBIb3cgSXQgV2FzIFByb2R1Y2VkDQo+IDIuIEF2b2lkIE1hbnVhbCBEYXRhIE1hbmlwdWxhdGlvbiBTdGVwcw0KPiAzLiBBcmNoaXZlIHRoZSBFeGFjdCBWZXJzaW9ucyBvZiBBbGwgRXh0ZXJuYWwgUHJvZ3JhbXMgVXNlZA0KPiA0LiBWZXJzaW9uIENvbnRyb2w6IFVzZSBpdCBmb3IgYWxsIEN1c3RvbWl6ZWQgU2NyaXB0cw0KPiA1LiBSZWNvcmQgQWxsIEludGVybWVkaWF0ZSBSZXN1bHRzLCBXaGVuIFBvc3NpYmxlIGluIFN0YW5kYXJkaXplZCBGb3JtYXRzDQo+IDYuIEZvciBBbmFseXNlcyBUaGF0IEluY2x1ZGUgUmFuZG9tbmVzcywgTm90ZSBVbmRlcmx5aW5nIFJhbmRvbSBTZWVkcw0KPiA3LiBBbHdheXMgU3RvcmUgUmF3IERhdGEgYmVoaW5kIFBsb3RzDQo+IDguIEdlbmVyYXRlIEhpZXJhcmNoaWNhbCBBbmFseXNpcyBPdXRwdXQsIEFsbG93aW5nIExheWVycyBvZiBJbmNyZWFzaW5nIERldGFpbCB0byBCZSBJbnNwZWN0ZWQNCj4gOS4gQ29ubmVjdCBUZXh0dWFsIFN0YXRlbWVudHMgdG8gVW5kZXJseWluZyBSZXN1bHRzDQo+IDEwLiBQcm92aWRlIFB1YmxpYyBBY2Nlc3MgdG8gU2NyaXB0cywgUnVucywgYW5kIFJlc3VsdHMNCg0KV2Ugd2lsbCBzZWUgdGhhdCB1c2luZyBSIGFuZCBSc3R1ZGlvIGNhbiBoZWxwIHlvdSB0byByZWxhdGl2ZWx5IGVhc3kgZm9sbG93IGFsbCANCnN0ZXBzIGJ1dCA0IGFuZCAxMC4gVGhlIGxhdGVzdCwgd2hpY2ggcmVxdWlyZSB1c2luZyBhIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gDQpsaWtlIEdpdCwgYW5kIGV2ZW50dWFsbHkgYW4gYXNzb2NpYXRlZCBvbmxpbmUgcGxhdGZvcm0gbGlrZSBnaXRodWIgdGhhdCBhbGxvd3MgDQp0byBzdG9yZSB5b3VyIGNvZGUgb24gdGhlIHdlYi4gR2l0aHViIGluIHR1cm4gY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSANCnB1YmxpY2F0aW9uIGFuZCBjYW4gZmFjaWxpdGF0ZSB0aGUgY3JlYXRpb24gb2YgRE9JIHZpYSBpbnRlZ3JhdGlvbiB3aXRoIFplbm9kby4gDQpUaGlzIHRoZW4gYWxsb3dzIHBlb3BsZSB0byBjaXRlIHlvdXIgZGF0YSBhbmFseXNpcyB3b3JrIGFuZCBjb2RlIQ0KDQo8bWFyaz48dT5XQVJOSU5HOjwvdT4NCk5FVkVSIFBVVCBZT1VSIERBVEEgT04gR0lUSFVCLCBvbmx5IHRoZSBjb2RlIHRvIHByb2Nlc3MgdGhlIGRhdGEgDQo8L21hcms+DQoNCg0KIyBBZGRpdGlvbmFsIHJlc3NvdXJjZXMgeW91IGNhbiBldmVudHVhbGx5IHJlYWQNCg0KDQotIFtUdXRvcmlhbDogT3BlbiBEYXRhIFNjaWVuY2Ugd2l0aCBSXShodHRwczovL2NhcnBlbnRyaWVzLWluY3ViYXRvci5naXRodWIuaW8vb3Blbi1zY2llbmNlLXdpdGgtci8pDQotIFtBcnRpY2xlOiAxMCBSdWxlcyBvZiByZXByb2R1Y2libGUgcmVzZWFyY2hdKGh0dHBzOi8vam91cm5hbHMucGxvcy5vcmcvcGxvc2NvbXBiaW9sL2FydGljbGU/aWQ9MTAuMTM3MS9qb3VybmFsLnBjYmkuMTAwMzI4NSkNCi0gW1R1dG9yaWFsOiBJbnRyb2R1Y3Rpb24gdG8gUm1hcmtkb3duIGFuZCByZXByb2R1Y2libGUgcmVzZWFyY2hdKGh0dHBzOi8vbS1jbGFyay5naXRodWIuaW8vSW50cm9kdWN0aW9uLXRvLVJtYXJrZG93bi8pDQoNCg0KV2UgbWlnaHQgbm90IGhhdmUgdGltZSB0byBnbyBpbnRvIGRldGFpbHMgd2l0aCBnaXQgYW5kIGdpdGh1YiwgYnV0IHdlIHdpbGwgdHJ5IHRvDQoNCg0KQnV0IGlmIHlvdSBmZWVsIGxpa2UgaXQsIHlvdSBjYW4gbGVhcm4gR2l0IGZvciB2ZXJzaW9uIGNvbnRyb2wgKGl0IGNhbiBiZSB1c2VkIHdpdGggDQp0aGUgY29tbWFuZCBsaW5lIC0gYWthIGBUZXJtaW5hbGAgcGFuZWwgdGhhdCBpcyBhdmFpbGFibGUgaW4gUnN0dWRpbyk6ICANCi0gW0dpdC1Ob3ZpY2VdKGh0dHBzOi8vc3djYXJwZW50cnkuZ2l0aHViLmlvL2dpdC1ub3ZpY2UvKSBpcyBhIGdvb2QgbGVzc29uIHRvIHN0YXJ0IHdpdGguDQoNCg0KIyBQcmVsaW1pbmFyeSB0cmFpbmluZyBwcm9ncmFtIA0KDQotIGdpdGh1YiBhbmQgUiAtIGdldCBzdGFydGVkIHdpdGggYSBwcm9qZWN0ICh1bmRlcnN0YW5kIHRoZSBiYXNpYyBwcmluY2lwbGVzKQ0KLSBkYXRhIHdyYW5nbGluZw0KLSBkYXRhIGV4cGxvcmF0aW9uIGFuZCB2aXN1YWxpemF0aW9uIChlbnN1cmUgZGF0YSBxdWFsaXR5LCB3aGF0IGRvIEkgaGF2ZSkNCi0gZXZlbnR1YWxseSAuLi4gZ29pbmcgZnVydGhlcg0KDQoNCkJhY2sgdG8gW0luZGV4XShpbmRleC5odG1sKQ==