diff --git a/session2a.Rmd b/session2a.Rmd index a2b982a..6d3330a 100644 --- a/session2a.Rmd +++ b/session2a.Rmd @@ -38,11 +38,15 @@ Just visit the **Cytoscape App store** and install/download it from there.



## Experimental Data - For this exercise, we will use a dataset comparing transcriptomic differences between bladder cancer and normal tissue. The study has been published by Radvanyi F et al., and we will get a summarized dataset with fold change and p-value from the **EBI Gene Expression Atlas**. Array-express ID is **E-MTAB-1940**. + For this exercise, we will use a dataset comparing transcriptomic differences between bladder cancer and normal tissue. The study has been published by Radvanyi F et al., and we will get a summarized dataset with fold change and p-value from the **EBI Gene Expression Atlas**. Array-express ID is **E-MTAB-1940**. + +* link to the publication and data : ([Here..!](https://www.ebi.ac.uk/biostudies/arrayexpress/studies/E-MTAB-1940?query=E-MTAB-1940)) + +



-* Download the data: Transcriptomic analysis of bladder cancer reveals convergent molecular pathology. ([Here..!](https://raw.githubusercontent.com/a1aks/Cytoscape_Course/main/Data_Files/E-MTAB-1940-query-results.tsv)). First Select all the contents (by holding control + A or Command + A (Mac-users)) and Save the file by right-clicking the mouse button and using save-as option.

+* Download the data: Transcriptomic analysis of bladder cancer reveals convergent molecular pathology. ([Here..!](https://raw.githubusercontent.com/a1aks/Cytoscape_Course/main/Data_Files/BCLA-all.tsv)). First Select all the contents (by holding control + A or Command + A (Mac-users)) and Save the file by right-clicking the mouse button and using save-as option.

* To open the tsv data file in Excel, first launch Excel and open a blank workbook. Next, go to **Data → Get External Data → Import Text File....**

* In the import wizard, select **Delimited** and in the next step select Tab.

@@ -54,7 +58,12 @@ Just visit the **Cytoscape App store** and install/download it from there. ## Editing experimental data We are going to define a set of up-regulated genes from the full dataset by filtering for fold change and p-value. -



+

+For this reason we will need to edit the raw downloaded file to obtain expression information for the features specific to bladder cancer. + +Download the following file ([Here..!](https://raw.githubusercontent.com/a1aks/Cytoscape_Course/main/Data_Files/E-MTAB-1940-query-results.tsv)) and open in Microsoft Excel. + +

• Select the row containing data value headers (row 4) and select **Data → Filter.**

• In the drop-down for the fold change column, set a filter for fold change greater than 2. This should result in **263** genes.

• Next, one would normally filter out non-significant changes by filtering on the p-value as well, for example setting p-value less than 0.05. But in this case, all genes with a fold change greater than 2 already meet that cutoff.

@@ -157,13 +166,14 @@ The STRING app has built-in enrichment analysis functionality, which includes en * Next, add a split donut chart to the nodes representing the top terms by clicking on

* Explore custom settings via in the top right of the STRING enrichment tab.

+### b. Repeat the whole experiment using "down-regulated" genes. -### b. Export your Networks +### c. Export your Networks -### c. **Save in any of the formats and be ready for publishing.** +### d. **Save in any of the formats and be ready for publishing.** ### We will now go to the next session [session (2B)](session2b.nb.html) to understand how to perform Functional Enrichment. - + \ No newline at end of file diff --git a/session2a.nb.html b/session2a.nb.html index d0de1f5..635abb6 100644 --- a/session2a.nb.html +++ b/session2a.nb.html @@ -2685,7 +2685,71 @@ - + @@ -2880,7 +2944,7 @@

RNA-Seq Data Network Analysis - Session 2-A

Akshay Bhat

-

Last modified: 11 Jun 2024

+

Last modified: 12 Jun 2024

@@ -2920,11 +2984,14 @@

Experimental Data

differences between bladder cancer and normal tissue. The study has been published by Radvanyi F et al., and we will get a summarized dataset with fold change and p-value from the EBI Gene Expression -Atlas. Array-express ID is E-MTAB-1940. -

+Atlas. Array-express ID is E-MTAB-1940.

+ +



-
-

b. Export your Networks

+
+

b. Repeat the whole experiment using “down-regulated” genes.

+
+
+

c. Export your Networks

-
-

c. Save in any of the formats and be ready for +
+

d. Save in any of the formats and be ready for publishing.

@@ -3090,7 +3164,7 @@

We will now go to the next session session (2B)<

-
LS0tDQp0aXRsZTogIlJOQS1TZXEgRGF0YSBOZXR3b3JrIEFuYWx5c2lzIC0gU2Vzc2lvbiAyLUEiDQphdXRob3I6ICJBa3NoYXkgQmhhdCINCmRhdGU6ICdgciBmb3JtYXQoU3lzLnRpbWUoKSwgIkxhc3QgbW9kaWZpZWQ6ICVkICViICVZIilgJw0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIGNzczogc3R5bGVzaGVldHMvc3R5bGVzLmNzcw0KLS0tDQo8aW1nIHNyYz0iaW1hZ2VzL2xvZ28tc20ucG5nIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOjQwcHg7cmlnaHQ6MTBweDsiIHdpZHRoPSIyMDAiIC8+DQoNCg0KIyBQYXJ0IEE6DQoNCg0KIyBSTkEtU2VxIERhdGEgTmV0d29yayBBbmFseXNpcw0KQ3l0b3NjYXBlIGlzIGFuIG9wZW4gc291cmNlIHNvZnR3YXJlIHBsYXRmb3JtIGZvciBpbnRlZ3JhdGluZywgdmlzdWFsaXppbmcsIGFuZCBhbmFseXNpbmcgbWVhc3VyZW1lbnQgZGF0YSBpbiB0aGUgY29udGV4dCBvZiBuZXR3b3Jrcy48YnI+PC9icj4NCiAgDQogIFRoaXMgcHJvdG9jb2wgZGVzY3JpYmVzIGEgbmV0d29yayBhbmFseXNpcyB3b3JrZmxvdyBpbiBDeXRvc2NhcGUgZm9yIGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBnZW5lcyBmcm9tIGFuIFJOQS1TZXEgZXhwZXJpbWVudC4gT3ZlcmFsbCB3b3JrZmxvdzo8YnI+PC9icj4NCiAgDQogIOKAoglGaW5kaW5nIGEgc2V0IG9mIGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBnZW5lcy4gPGJyPjwvYnI+DQogIOKAoglSZXRyaWV2aW5nIHJlbGV2YW50IG5ldHdvcmtzIGZyb20gcHVibGljIGRhdGFiYXNlcy4gPGJyPjwvYnI+DQogIOKAoglJbnRlZ3JhdGlvbiBhbmQgdmlzdWFsaXphdGlvbiBvZiBleHBlcmltZW50YWwgZGF0YS4gPGJyPjwvYnI+DQogIOKAoglOZXR3b3JrIGZ1bmN0aW9uYWwgZW5yaWNobWVudCBhbmFseXNpcy4gPGJyPjwvYnI+DQogIOKAoglFeHBvcnRpbmcgbmV0d29yayB2aXN1YWxpemF0aW9ucy4gPGJyPjwvYnI+DQogIA0KICANCiMjIFNldHVwDQogIA0KICBJbnN0YWxsIHRoZSAoW3N0cmluZ0FwcF0oaHR0cDovL2FwcHMuY3l0b3NjYXBlLm9yZy9hcHBzL3N0cmluZ2FwcCkpIGZyb20gdGhlIEN5dG9zY2FwZSBBcHAgU3RvcmUsIG9yIHZpYSAqKkFwcHMg4oaSIEFwcCBTdG9yZSDihpIgU2hvdyBBcHAgU3RvcmUuKiogPGJyPjwvYnI+DQogIA0KIyMgT1IgPGJyPjwvYnI+DQogIA0KSnVzdCB2aXNpdCB0aGUgKipDeXRvc2NhcGUgQXBwIHN0b3JlKiogYW5kIGluc3RhbGwvZG93bmxvYWQgaXQgZnJvbSB0aGVyZS4NCjxicj48L2JyPjxicj48L2JyPg0KICAhW10oaW1hZ2VzL1N0cmluZ0FwcC5wbmcpDQo8YnI+PC9icj48YnI+PC9icj4NCiAgDQojIyBFeHBlcmltZW50YWwgRGF0YQ0KICBGb3IgdGhpcyBleGVyY2lzZSwgd2Ugd2lsbCB1c2UgYSBkYXRhc2V0IGNvbXBhcmluZyB0cmFuc2NyaXB0b21pYyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGJsYWRkZXIgY2FuY2VyIGFuZCBub3JtYWwgdGlzc3VlLiBUaGUgc3R1ZHkgaGFzIGJlZW4gcHVibGlzaGVkIGJ5IFJhZHZhbnlpIEYgZXQgYWwuLCBhbmQgd2Ugd2lsbCBnZXQgYSBzdW1tYXJpemVkIGRhdGFzZXQgd2l0aCBmb2xkIGNoYW5nZSBhbmQgcC12YWx1ZSBmcm9tIHRoZSAqKkVCSSBHZW5lIEV4cHJlc3Npb24gQXRsYXMqKi4gQXJyYXktZXhwcmVzcyBJRCBpcyAqKkUtTVRBQi0xOTQwKiouDQo8YnI+PC9icj4NCiAgPGJyPjwvYnI+DQogIA0KKiBEb3dubG9hZCB0aGUgZGF0YTogVHJhbnNjcmlwdG9taWMgYW5hbHlzaXMgb2YgYmxhZGRlciBjYW5jZXIgcmV2ZWFscyBjb252ZXJnZW50IG1vbGVjdWxhciBwYXRob2xvZ3kuIChbSGVyZS4uIV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2ExYWtzL0N5dG9zY2FwZV9Db3Vyc2UvbWFpbi9EYXRhX0ZpbGVzL0UtTVRBQi0xOTQwLXF1ZXJ5LXJlc3VsdHMudHN2KSkuICBGaXJzdCBTZWxlY3QgYWxsIHRoZSBjb250ZW50cyAoYnkgaG9sZGluZyBjb250cm9sICsgQSBvciBDb21tYW5kICsgQSAoTWFjLXVzZXJzKSkgYW5kIFNhdmUgdGhlIGZpbGUgYnkgcmlnaHQtY2xpY2tpbmcgdGhlIG1vdXNlIGJ1dHRvbiBhbmQgdXNpbmcgc2F2ZS1hcyBvcHRpb24uICA8YnI+PC9icj4NCiogVG8gb3BlbiB0aGUgdHN2IGRhdGEgZmlsZSBpbiBFeGNlbCwgZmlyc3QgbGF1bmNoIEV4Y2VsIGFuZCBvcGVuIGEgYmxhbmsgd29ya2Jvb2suIE5leHQsIGdvIHRvICoqRGF0YSDihpIgR2V0IEV4dGVybmFsIERhdGEg4oaSIEltcG9ydCBUZXh0IEZpbGUuLi4uKiogPGJyPjwvYnI+DQoqIEluIHRoZSBpbXBvcnQgd2l6YXJkLCBzZWxlY3QgKipEZWxpbWl0ZWQqKiBhbmQgaW4gdGhlIG5leHQgc3RlcCBzZWxlY3QgVGFiLg0KPGJyPjwvYnI+DQoqIEluIHRoZSB0aGlyZCBzdGVwLCB5b3UgY2FuIHNlbGVjdCB0aGUgKipEYXRhIEZvcm1hdCoqIGZvciBldmVyeSBjb2x1bW4uIFRoZSBmaWxlIGhhcyA0IGNvbHVtbnMgb2YgZGF0YTogKipHZW5lIElELCBHZW5lIE5hbWUsIGZvbGQgY2hhbmdlIGFuZCBwLXZhbHVlKiouICoqTWFrZSBzdXJlIHRvIGNoYW5nZSB0aGUgZm9ybWF0IGZvciB0aGUgc2Vjb25kIGNvbHVtbiwgR2VuZSBOYW1lLCB0byBUZXh0LioqIFlvdSB3aWxsIGhhdmUgdG8gc2Nyb2xsIHRvIHRoZSByaWdodCB0byBzZWUgdGhlIHNlY29uZCBjb2x1bW4uDQo8YnI+PC9icj4NCiogQ2xpY2sgKipGaW5pc2gqKiB0byBjb21wbGV0ZSB0aGUgaW1wb3J0Lg0KDQo8YnI+PC9icj4NCiAgDQojIyBFZGl0aW5nIGV4cGVyaW1lbnRhbCBkYXRhDQogIFdlIGFyZSBnb2luZyB0byBkZWZpbmUgYSBzZXQgb2YgdXAtcmVndWxhdGVkIGdlbmVzIGZyb20gdGhlIGZ1bGwgZGF0YXNldCBieSBmaWx0ZXJpbmcgZm9yIGZvbGQgY2hhbmdlIGFuZCBwLXZhbHVlLg0KPGJyPjwvYnI+PGJyPjwvYnI+DQogIOKAoglTZWxlY3QgdGhlIHJvdyBjb250YWluaW5nIGRhdGEgdmFsdWUgaGVhZGVycyAocm93IDQpIGFuZCBzZWxlY3QgKipEYXRhIOKGkiBGaWx0ZXIuKio8YnI+PC9icj4NCiAg4oCiCUluIHRoZSBkcm9wLWRvd24gZm9yIHRoZSBmb2xkIGNoYW5nZSBjb2x1bW4sIHNldCBhIGZpbHRlciBmb3IgZm9sZCBjaGFuZ2UgZ3JlYXRlciB0aGFuIDIuIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiAqKjI2MyoqIGdlbmVzLjxicj48L2JyPg0KICDigKIJTmV4dCwgb25lIHdvdWxkIG5vcm1hbGx5IGZpbHRlciBvdXQgbm9uLXNpZ25pZmljYW50IGNoYW5nZXMgYnkgZmlsdGVyaW5nIG9uIHRoZSBwLXZhbHVlIGFzIHdlbGwsIGZvciBleGFtcGxlIHNldHRpbmcgcC12YWx1ZSBsZXNzIHRoYW4gMC4wNS4gQnV0IGluIHRoaXMgY2FzZSwgYWxsIGdlbmVzIHdpdGggYSBmb2xkIGNoYW5nZSBncmVhdGVyIHRoYW4gMiBhbHJlYWR5IG1lZXQgdGhhdCBjdXRvZmYuPGJyPjwvYnI+DQogIOKAoglXaXRoIHRoZSBmaWx0ZXIgYWN0aXZlLCBzZWxlY3QgYW5kIGNvcHkgYWxsIGVudHJpZXMgaW4gdGhlICoqR2VuZSBOYW1lKiogY29sdW1uLjxicj48L2JyPg0KICA8YnI+PC9icj48YnI+PC9icj4NCiAgIVtdKGltYWdlcy9FeHBfZGF0YS5wbmcpDQoNCjxicj48L2JyPjxicj48L2JyPg0KICANCiMjIFJldHJpZXZlIE5ldHdvcmtzIGZyb20gU1RSSU5HDQogIA0KICBUbyBpZGVudGlmeSBhIHJlbGV2YW50IG5ldHdvcmssIHdlIHdpbGwgdXNlIHRoZSAqKlNUUklORyoqIGRhdGFiYXNlIHRvIGZpbmQgYSBuZXR3b3JrIHJlbGV2YW50IHRvIHRoZSBsaXN0IG9mIHVwLXJlZ3VsYXRlZCBnZW5lcy4NCjxicj48L2JyPjxicj48L2JyPg0KICDigKIJTGF1bmNoIEN5dG9zY2FwZS4gSW4gdGhlICoqTmV0d29yayBTZWFyY2gqKiBiYXIgYXQgdGhlIHRvcCBvZiB0aGUgKipOZXR3b3JrIFBhbmVsKiosIHNlbGVjdCAqKlNUUklORyBwcm90ZWluIHF1ZXJ5KiogZnJvbSB0aGUgZHJvcC1kb3duLCBhbmQgcGFzdGUgaW4gdGhlIGxpc3Qgb2YgMjYzIHVwLXJlZ3VsYXRlZCBnZW5lcy48YnI+PC9icj4NCiAg4oCiCU9wZW4gdGhlIG9wdGlvbnMgcGFuZWwgIGFuZCBjb25maXJtIHlvdSBhcmUgc2VhcmNoaW5nICoqSG9tbyBzYXBpZW5zKiogd2l0aCBhICoqQ29uZmlkZW5jZSBjdXRvZmYgb2YgMC40MCoqIGFuZCAqKjAgTWF4aW11bSBhZGRpdGlvbmFsIGludGVyYWN0b3JzLioqPGJyPjwvYnI+DQogIOKAoglDbGljayB0aGUgKipzZWFyY2ggaWNvbioqIHRvIHNlYXJjaC4gSWYgYW55IG9mIHRoZSBzZWFyY2ggdGVybXMgYXJlIGFtYmlndW91cywgYSAqKlJlc29sdmUgQW1iaWd1b3VzIFRlcm1zKiogZGlhbG9nIHdpbGwgYXBwZWFyLiBDbGljayAqKkltcG9ydCoqIHRvIGNvbnRpbnVlIHdpdGggdGhlIGltcG9ydCB1c2luZyB0aGUgZGVmYXVsdCBjaG9pY2VzLiBUaGUgcmVzdWx0aW5nIG5ldHdvcmsgd2lsbCBsb2FkIGF1dG9tYXRpY2FsbHksIGFuZCBzaG91bGQgaGF2ZSBhcm91bmQgKioxNzMqKiBub2Rlcy4gPGJyPjwvYnI+DQogIA0KICA8YnI+PC9icj4NCiAgDQogICFbXShpbWFnZXMvU3RyaW5nLUltcG9ydC5wbmcpDQo8YnI+PC9icj48YnI+PC9icj4NCiAgDQojIyBTVFJJTkcgTmV0d29yayBVcC1SZWd1bGF0ZWQgR2VuZXMNCiAgDQogIFRoZSByZXN1bHRpbmcgbmV0d29yayBjb250YWlucyB1cC1yZWd1bGF0ZWQgZ2VuZXMgcmVjb2duaXplZCBieSBTVFJJTkcsIGFuZCBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVtIHdpdGggYSBjb25maWRlbmNlIHNjb3JlIG9mIDAuNCBvciBncmVhdGVyLg0KPGJyPjwvYnI+PGJyPjwvYnI+DQogIA0KICAhW10oaW1hZ2VzL1N0cmluZy1JbWFnZTEucG5nKQ0KDQoNCjxicj48L2JyPjxicj48L2JyPg0KICANCiAgVGhlIG5ldHdvcmtzIGNvbnNpc3Qgb2Ygb25lIGxhcmdlIGNvbm5lY3RlZCBjb21wb25lbnQsIHNldmVyYWwgc21hbGxlciBuZXR3b3JrcywgYW5kIHNvbWUgdW5jb25uZWN0ZWQgbm9kZXMuIFdlIHdpbGwgdXNlIG9ubHkgdGhlIGxhcmdlc3QgY29ubmVjdGVkIGNvbXBvbmVudCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHR1dG9yaWFsLjxicj48L2JyPg0KICANCiAg4oCiCVRvIHNlbGVjdCB0aGUgbGFyZ2VzdCBjb25uZWN0ZWQgY29tcG9uZW50LCBzZWxlY3QgKipTZWxlY3Qg4oaSIE5vZGVzIOKGkiBMYXJnZXN0IHN1Ym5ldHdvcmsuKio8YnI+PC9icj4NCiAg4oCiCVNlbGVjdCAqKkZpbGUg4oaSIE5ldyBOZXR3b3JrIOKGkiBGcm9tIFNlbGVjdGVkIE5vZGVzLCBBbGwgRWRnZXMuKio8YnI+PC9icj4NCiAgPGJyPjwvYnI+PGJyPjwvYnI+DQogICFbXShpbWFnZXMvU3RyaW5nLUltYWdlMi5wbmcpDQoNCjxicj48L2JyPg0KDQojIyBEYXRhIEludGVncmF0aW9uDQogIA0KICBOZXh0IHdlIHdpbGwgaW1wb3J0IHRoZSBSTkEtU2VxIGRhdGEgYW5kIHVzZSB0aGVtIHRvIGNyZWF0ZSBhIHZpc3VhbGl6YXRpb24uPGJyPjwvYnI+DQogIA0KICDigKIJTG9hZCB0aGUgZG93bmxvYWRlZCAqKkUtTVRBQi0xOTQwLXF1ZXJ5LXJlc3VsdHMudHN2KiogZmlsZSB1bmRlciBGaWxlIG1lbnUgYnkgc2VsZWN0aW5nICoqSW1wb3J0IOKGkiBUYWJsZSBmcm9tIEZpbGUuLi4uLioqIEFsdGVybmF0aXZlbHksIGRyYWcgYW5kIGRyb3AgdGhlIGRhdGEgZmlsZSBkaXJlY3RseSBvbnRvIHRoZSBOb2RlIFRhYmxlLjxicj48L2JyPg0KICDigKIJSW4gKipBZHZhbmNlZCBPcHRpb25zKiouLi4sIGluIHRoZSAqKklnbm9yZSBMaW5lcyBTdGFydGluZyBXaXRoIGZpZWxkKiosIGVudGVyICMsIHRvIGV4Y2x1ZGUgdGhlIGFkZGl0aW9uYWwgbGluZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF0YSBmaWxlLjxicj48L2JyPg0K4oCiCVNlbGVjdCB0aGUgKipxdWVyeSB0ZXJtKiogY29sdW1uIGFzIHRoZSAqKktleSBjb2x1bW4gZm9yIE5ldHdvcmsqKiBhbmQgc2VsZWN0IHRoZSAqKkdlbmUgTmFtZSoqIGNvbHVtbiBhcyB0aGUga2V5IGNvbHVtbiBieSBjbGlja2luZyBvbiB0aGUgaGVhZGVyIGFuZCBzZWxlY3RpbmcgdGhlIGtleSBzeW1ib2wuPGJyPjwvYnI+DQogIOKAoglDbGljayAqKk9LKiogdG8gaW1wb3J0LiBUd28gbmV3IGNvbHVtbnMgb2YgZGF0YSB3aWxsIGJlIGFkZGVkIHRvIHRoZSAqKk5vZGUgVGFibGUuKio8YnI+PC9icj4NCiAgDQogIDxicj48L2JyPjxicj48L2JyPg0KICAhW10oaW1hZ2VzL0ltcG9ydC1kYXRhLWludC5wbmcpDQohW10oaW1hZ2VzL0ltcG9ydC1Db2x1bW5zLnBuZykNCjxicj48L2JyPjxicj48L2JyPg0KICANCiAgDQojIyBWaXN1YWxpemF0aW9uDQogIE5leHQsIHdlIHdpbGwgY3JlYXRlIGEgdmlzdWFsaXphdGlvbiBvZiB0aGUgaW1wb3J0ZWQgZGF0YSBvbiB0aGUgbmV0d29yay4gRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gZGF0YSB2aXN1YWxpemF0aW9uLCBzZWUgdGhlIFZpc3VhbGl6aW5nIERhdGEgdHV0b3JpYWwuPGJyPjwvYnI+DQogIA0KICDigKIJSW4gdGhlICoqU3R5bGUqKiB0YWIgb2YgdGhlICoqQ29udHJvbCBQYW5lbCoqLCBzd2l0Y2ggdGhlIHN0eWxlIGZyb20gKipTVFJJTkcqKiBzdHlsZSB0byAqKmRlZmF1bHQqKiBpbiB0aGUgZHJvcC1kb3duIGF0IHRoZSB0b3AuPGJyPjwvYnI+DQogIOKAoglDaGFuZ2UgdGhlIGRlZmF1bHQgbm9kZSAqKlNoYXBlKiogdG8gKiplbGxpcHNlKiogYW5kICoqY2hlY2sgTG9jayBub2RlIHdpZHRoIGFuZCBoZWlnaHQuKio8YnI+PC9icj4NCiAg4oCiCVNldCB0aGUgZGVmYXVsdCBub2RlICoqU2l6ZSoqIHRvICoqNTAuKio8YnI+PC9icj4NCiAg4oCiCVNldCB0aGUgZGVmYXVsdCBub2RlICoqRmlsbCBDb2xvcioqIHRvICoqbGlnaHQgZ3JheSoqLjxicj48L2JyPg0KICDigKIJU2V0IHRoZSBkZWZhdWx0ICoqQm9yZGVyIFdpZHRoKiogdG8gMiwgYW5kIG1ha2UgdGhlIGRlZmF1bHQgKipCb3JkZXIgUGFpbnQqKiBkYXJrIGdyYXkuPGJyPjwvYnI+DQogIDxicj48L2JyPjxicj48L2JyPg0KICAhW10oaW1hZ2VzL1Zpc3VhbGl6YXRpb24tU3R5bGVzLnBuZykNCg0KPC9icj48YnI+PC9icj48YnI+PC9icj4NCiAg4oCiCUZvciBub2RlICoqRmlsbCBDb2xvcioqLCBjcmVhdGUgYSBjb250aW51b3VzIG1hcHBpbmcgZm9yICdOTUlCQycgdnMgJ25vcm1hbCcgLmZvbGRDaGFuZ2UuPGJyPjwvYnI+DQogIOKAoglEb3VibGUtY2xpY2sgdGhlIGNvbG9yIG1hcHBpbmcgdG8gb3BlbiB0aGUgKipDb250aW51b3VzIE1hcHBpbmcgRWRpdG9yKiogYW5kIGNsaWNrIHRoZSAqKkN1cnJlbnQgUGFsZXR0ZSoqLiBTZWxlY3QgdGhlIENvbG9yQnJld2VyICoqeWVsbG93LW9yYW5nZS1yZWQgc2hhZGVzIGdyYWRpZW50KiouPGJyPjwvYnI+DQogIOKAoglGaW5hbGx5LCBmb3Igbm9kZSAqKkxhYmVsKiosIHNldCBhIHBhc3N0aHJvdWdoIG1hcHBpbmcgZm9yIGRpc3BsYXkgbmFtZS48YnI+PC9icj4NCiAg4oCiCVNhdmUgeW91ciBuZXcgdmlzdWFsaXphdGlvbiB1bmRlciAqKkNvcHkgU3R5bGUuLi4qKiBpbiB0aGUgKipPcHRpb25zKiogbWVudSBvZiB0aGUgKipTdHlsZSoqIGludGVyZmFjZSwgYW5kIG5hbWUgaXQgZGUgZ2VuZXMgdXAuPGJyPjwvYnI+DQogIDxicj48L2JyPjxicj48L2JyPg0KICAhW10oaW1hZ2VzL1N0eWxlLW9wdGlvbnMucG5nKQ0KPGJyPjwvYnI+PGJyPjwvYnI+DQogIA0KICANCiAgQXBwbHkgdGhlICoqUHJlZnVzZSBGb3JjZSBEaXJlY3RlZCoqIGxheW91dCBieSBjbGlja2luZyB0aGUgKipBcHBseSBQcmVmZXJyZWQgTGF5b3V0KiogYnV0dG9uIGluIHRoZSB0b29sYmFyLiBUaGUgbmV0d29yayB3aWxsIG5vdyBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6DQogIDxicj48L2JyPjxicj48L2JyPg0KICAhW10oaW1hZ2VzL1ByZWZ1c2UtZm9yY2UtbGF5b3V0LnBuZykNCjxicj48L2JyPjxicj48L2JyPg0KDQo8ZGl2IGNsYXNzPSJleGVyY2lzZSI+DQojIEV4ZXJjaXNlDQoNCiMjIGEuIFNUUklORyBFbnJpY2htZW50DQoNClRoZSBTVFJJTkcgYXBwIGhhcyBidWlsdC1pbiBlbnJpY2htZW50IGFuYWx5c2lzIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGluY2x1ZGVzIGVucmljaG1lbnQgZm9yIEdlbmUgT250b2xvZ3ksIEludGVyUHJvLCBLRUdHIFBhdGh3YXlzLCBhbmQgUEZBTS48YnI+PC9icj4NCg0KKglVc2luZyB0aGUgU1RSSU5HIHRhYiBvZiB0aGUgUmVzdWx0cyBQYW5lbCwgY2xpY2sgdGhlICoqRnVuY3Rpb25hbCBFbnJpY2htZW50IGJ1dHRvbioqLiBLZWVwIHRoZSBkZWZhdWx0IHNldHRpbmdzLiBXaGF0IGRvIHlvdSBzZWUuPGJyPjwvYnI+DQogICAgIVtdKGltYWdlcy9GdW5jdGlvbmFsRW5yaWNobWVudEJ1dHRvbi5wbmcpDQogIA0KICA8YnI+PC9icj48YnI+PC9icj4NCg0KKiBXaGVuIHRoZSBlbnJpY2htZW50IGFuYWx5c2lzIGlzIGNvbXBsZXRlLCBhIG5ldyB0YWIgdGl0bGVkICoqU1RSSU5HKiogKipFbnJpY2htZW50Kiogd2lsbCBvcGVuIGluIHRoZSAqKlRhYmxlIFBhbmVsKiouPGJyPjwvYnI+DQoNCiogVGhlIFNUUklORyBhcHAgaW5jbHVkZXMgc2V2ZXJhbCBvcHRpb25zIGZvciBmaWx0ZXJpbmcgYW5kIGRpc3BsYXlpbmcgdGhlIGVucmljaG1lbnQgcmVzdWx0cy4gVGhlIGZlYXR1cmVzIGFyZSBhbGwgYXZhaWxhYmxlIGF0IHRoZSB0b3Agb2YgdGhlICoqU1RSSU5HIEVucmljaG1lbnQgdGFiKiouIEZpbHRlciB0aGUgdGFibGUgdG8gb25seSBzaG93ICoqR08gQmlvbG9naWNhbCBQcm9jZXNzLioqPGJyPjwvYnI+DQogICANCiogQXQgdGhlIHRvcCBsZWZ0IG9mIHRoZSBTVFJJTkcgZW5yaWNobWVudCB0YWIsIGNsaWNrIHRoZSBmaWx0ZXIgaWNvbiBgciBpY29uczo6Zm9udGF3ZXNvbWUoImZpbHRlciIsIHN0eWxlID0gInNvbGlkIilgIC4gU2VsZWN0ICoqR08gQmlvbG9naWNhbCBQcm9jZXNzKiogYW5kIGNoZWNrIHRoZSAqKlJlbW92ZSByZWR1bmRhbnQgdGVybXMgY2hlY2stYm94KiouIFRoZW4gY2xpY2sgKipPSy4qKjxicj48L2JyPg0KKiBOZXh0LCBhZGQgYSBzcGxpdCBkb251dCBjaGFydCB0byB0aGUgbm9kZXMgcmVwcmVzZW50aW5nIHRoZSB0b3AgdGVybXMgYnkgY2xpY2tpbmcgb24gPGJyPjwvYnI+DQoqIEV4cGxvcmUgY3VzdG9tIHNldHRpbmdzIHZpYSAgIGluIHRoZSB0b3AgcmlnaHQgb2YgdGhlIFNUUklORyBlbnJpY2htZW50IHRhYi48YnI+PC9icj4gICANCiAgICANCg0KIyMjIGIuIEV4cG9ydCB5b3VyIE5ldHdvcmtzDQoNCiMjIyBjLiAqKlNhdmUgaW4gYW55IG9mIHRoZSBmb3JtYXRzIGFuZCBiZSByZWFkeSBmb3IgcHVibGlzaGluZy4qKg0KICANCiAgPC9kaXY+DQogIA0KICANCiMjIyBXZSB3aWxsIG5vdyBnbyB0byB0aGUgbmV4dCBzZXNzaW9uIFtzZXNzaW9uICgyQildKHNlc3Npb24yYi5uYi5odG1sKSB0byB1bmRlcnN0YW5kIGhvdyB0byBwZXJmb3JtIEZ1bmN0aW9uYWwgRW5yaWNobWVudC4gICAgDQogIA0K
+
LS0tCnRpdGxlOiAiUk5BLVNlcSBEYXRhIE5ldHdvcmsgQW5hbHlzaXMgLSBTZXNzaW9uIDItQSIKYXV0aG9yOiAiQWtzaGF5IEJoYXQiCmRhdGU6ICdgciBmb3JtYXQoU3lzLnRpbWUoKSwgIkxhc3QgbW9kaWZpZWQ6ICVkICViICVZIilgJwpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IAogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgICBjc3M6IHN0eWxlc2hlZXRzL3N0eWxlcy5jc3MKLS0tCjxpbWcgc3JjPSJpbWFnZXMvbG9nby1zbS5wbmciIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDBweDtyaWdodDoxMHB4OyIgd2lkdGg9IjIwMCIgLz4KCgojIFBhcnQgQToKCgojIFJOQS1TZXEgRGF0YSBOZXR3b3JrIEFuYWx5c2lzCkN5dG9zY2FwZSBpcyBhbiBvcGVuIHNvdXJjZSBzb2Z0d2FyZSBwbGF0Zm9ybSBmb3IgaW50ZWdyYXRpbmcsIHZpc3VhbGl6aW5nLCBhbmQgYW5hbHlzaW5nIG1lYXN1cmVtZW50IGRhdGEgaW4gdGhlIGNvbnRleHQgb2YgbmV0d29ya3MuPGJyPjwvYnI+CiAgCiAgVGhpcyBwcm90b2NvbCBkZXNjcmliZXMgYSBuZXR3b3JrIGFuYWx5c2lzIHdvcmtmbG93IGluIEN5dG9zY2FwZSBmb3IgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGZyb20gYW4gUk5BLVNlcSBleHBlcmltZW50LiBPdmVyYWxsIHdvcmtmbG93Ojxicj48L2JyPgogIAogIOKAoglGaW5kaW5nIGEgc2V0IG9mIGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBnZW5lcy4gPGJyPjwvYnI+CiAg4oCiCVJldHJpZXZpbmcgcmVsZXZhbnQgbmV0d29ya3MgZnJvbSBwdWJsaWMgZGF0YWJhc2VzLiA8YnI+PC9icj4KICDigKIJSW50ZWdyYXRpb24gYW5kIHZpc3VhbGl6YXRpb24gb2YgZXhwZXJpbWVudGFsIGRhdGEuIDxicj48L2JyPgogIOKAoglOZXR3b3JrIGZ1bmN0aW9uYWwgZW5yaWNobWVudCBhbmFseXNpcy4gPGJyPjwvYnI+CiAg4oCiCUV4cG9ydGluZyBuZXR3b3JrIHZpc3VhbGl6YXRpb25zLiA8YnI+PC9icj4KICAKICAKIyMgU2V0dXAKICAKICBJbnN0YWxsIHRoZSAoW3N0cmluZ0FwcF0oaHR0cDovL2FwcHMuY3l0b3NjYXBlLm9yZy9hcHBzL3N0cmluZ2FwcCkpIGZyb20gdGhlIEN5dG9zY2FwZSBBcHAgU3RvcmUsIG9yIHZpYSAqKkFwcHMg4oaSIEFwcCBTdG9yZSDihpIgU2hvdyBBcHAgU3RvcmUuKiogPGJyPjwvYnI+CiAgCiMjIE9SIDxicj48L2JyPgogIApKdXN0IHZpc2l0IHRoZSAqKkN5dG9zY2FwZSBBcHAgc3RvcmUqKiBhbmQgaW5zdGFsbC9kb3dubG9hZCBpdCBmcm9tIHRoZXJlLgo8YnI+PC9icj48YnI+PC9icj4KICAhW10oaW1hZ2VzL1N0cmluZ0FwcC5wbmcpCjxicj48L2JyPjxicj48L2JyPgogIAojIyBFeHBlcmltZW50YWwgRGF0YQogIEZvciB0aGlzIGV4ZXJjaXNlLCB3ZSB3aWxsIHVzZSBhIGRhdGFzZXQgY29tcGFyaW5nIHRyYW5zY3JpcHRvbWljIGRpZmZlcmVuY2VzIGJldHdlZW4gYmxhZGRlciBjYW5jZXIgYW5kIG5vcm1hbCB0aXNzdWUuIFRoZSBzdHVkeSBoYXMgYmVlbiBwdWJsaXNoZWQgYnkgUmFkdmFueWkgRiBldCBhbC4sIGFuZCB3ZSB3aWxsIGdldCBhIHN1bW1hcml6ZWQgZGF0YXNldCB3aXRoIGZvbGQgY2hhbmdlIGFuZCBwLXZhbHVlIGZyb20gdGhlICoqRUJJIEdlbmUgRXhwcmVzc2lvbiBBdGxhcyoqLiBBcnJheS1leHByZXNzIElEIGlzICoqRS1NVEFCLTE5NDAqKi4gIAogIAoqIGxpbmsgdG8gdGhlIHB1YmxpY2F0aW9uIGFuZCBkYXRhIDogKFtIZXJlLi4hXShodHRwczovL3d3dy5lYmkuYWMudWsvYmlvc3R1ZGllcy9hcnJheWV4cHJlc3Mvc3R1ZGllcy9FLU1UQUItMTk0MD9xdWVyeT1FLU1UQUItMTk0MCkpCiAgCiAgCjxicj48L2JyPgogIDxicj48L2JyPgogIAoqIERvd25sb2FkIHRoZSBkYXRhOiBUcmFuc2NyaXB0b21pYyBhbmFseXNpcyBvZiBibGFkZGVyIGNhbmNlciByZXZlYWxzIGNvbnZlcmdlbnQgbW9sZWN1bGFyIHBhdGhvbG9neS4gKFtIZXJlLi4hXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYTFha3MvQ3l0b3NjYXBlX0NvdXJzZS9tYWluL0RhdGFfRmlsZXMvQkNMQS1hbGwudHN2KSkuICBGaXJzdCBTZWxlY3QgYWxsIHRoZSBjb250ZW50cyAoYnkgaG9sZGluZyBjb250cm9sICsgQSBvciBDb21tYW5kICsgQSAoTWFjLXVzZXJzKSkgYW5kIFNhdmUgdGhlIGZpbGUgYnkgcmlnaHQtY2xpY2tpbmcgdGhlIG1vdXNlIGJ1dHRvbiBhbmQgdXNpbmcgc2F2ZS1hcyBvcHRpb24uICA8YnI+PC9icj4KKiBUbyBvcGVuIHRoZSB0c3YgZGF0YSBmaWxlIGluIEV4Y2VsLCBmaXJzdCBsYXVuY2ggRXhjZWwgYW5kIG9wZW4gYSBibGFuayB3b3JrYm9vay4gTmV4dCwgZ28gdG8gKipEYXRhIOKGkiBHZXQgRXh0ZXJuYWwgRGF0YSDihpIgSW1wb3J0IFRleHQgRmlsZS4uLi4qKiA8YnI+PC9icj4KKiBJbiB0aGUgaW1wb3J0IHdpemFyZCwgc2VsZWN0ICoqRGVsaW1pdGVkKiogYW5kIGluIHRoZSBuZXh0IHN0ZXAgc2VsZWN0IFRhYi4KPGJyPjwvYnI+CiogSW4gdGhlIHRoaXJkIHN0ZXAsIHlvdSBjYW4gc2VsZWN0IHRoZSAqKkRhdGEgRm9ybWF0KiogZm9yIGV2ZXJ5IGNvbHVtbi4gVGhlIGZpbGUgaGFzIDQgY29sdW1ucyBvZiBkYXRhOiAqKkdlbmUgSUQsIEdlbmUgTmFtZSwgZm9sZCBjaGFuZ2UgYW5kIHAtdmFsdWUqKi4gKipNYWtlIHN1cmUgdG8gY2hhbmdlIHRoZSBmb3JtYXQgZm9yIHRoZSBzZWNvbmQgY29sdW1uLCBHZW5lIE5hbWUsIHRvIFRleHQuKiogWW91IHdpbGwgaGF2ZSB0byBzY3JvbGwgdG8gdGhlIHJpZ2h0IHRvIHNlZSB0aGUgc2Vjb25kIGNvbHVtbi4KPGJyPjwvYnI+CiogQ2xpY2sgKipGaW5pc2gqKiB0byBjb21wbGV0ZSB0aGUgaW1wb3J0LgoKPGJyPjwvYnI+CiAgCiMjIEVkaXRpbmcgZXhwZXJpbWVudGFsIGRhdGEKICBXZSBhcmUgZ29pbmcgdG8gZGVmaW5lIGEgc2V0IG9mIHVwLXJlZ3VsYXRlZCBnZW5lcyBmcm9tIHRoZSBmdWxsIGRhdGFzZXQgYnkgZmlsdGVyaW5nIGZvciBmb2xkIGNoYW5nZSBhbmQgcC12YWx1ZS4KPGJyPjwvYnI+CkZvciB0aGlzIHJlYXNvbiB3ZSB3aWxsIG5lZWQgdG8gZWRpdCB0aGUgcmF3IGRvd25sb2FkZWQgZmlsZSB0byBvYnRhaW4gZXhwcmVzc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGZlYXR1cmVzIHNwZWNpZmljIHRvIGJsYWRkZXIgY2FuY2VyLiAKCkRvd25sb2FkIHRoZSBmb2xsb3dpbmcgZmlsZSAoW0hlcmUuLiFdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hMWFrcy9DeXRvc2NhcGVfQ291cnNlL21haW4vRGF0YV9GaWxlcy9FLU1UQUItMTk0MC1xdWVyeS1yZXN1bHRzLnRzdikpIGFuZCBvcGVuIGluIE1pY3Jvc29mdCBFeGNlbC4gCgo8YnI+PC9icj4KICDigKIJU2VsZWN0IHRoZSByb3cgY29udGFpbmluZyBkYXRhIHZhbHVlIGhlYWRlcnMgKHJvdyA0KSBhbmQgc2VsZWN0ICoqRGF0YSDihpIgRmlsdGVyLioqPGJyPjwvYnI+CiAg4oCiCUluIHRoZSBkcm9wLWRvd24gZm9yIHRoZSBmb2xkIGNoYW5nZSBjb2x1bW4sIHNldCBhIGZpbHRlciBmb3IgZm9sZCBjaGFuZ2UgZ3JlYXRlciB0aGFuIDIuIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiAqKjI2MyoqIGdlbmVzLjxicj48L2JyPgogIOKAoglOZXh0LCBvbmUgd291bGQgbm9ybWFsbHkgZmlsdGVyIG91dCBub24tc2lnbmlmaWNhbnQgY2hhbmdlcyBieSBmaWx0ZXJpbmcgb24gdGhlIHAtdmFsdWUgYXMgd2VsbCwgZm9yIGV4YW1wbGUgc2V0dGluZyBwLXZhbHVlIGxlc3MgdGhhbiAwLjA1LiBCdXQgaW4gdGhpcyBjYXNlLCBhbGwgZ2VuZXMgd2l0aCBhIGZvbGQgY2hhbmdlIGdyZWF0ZXIgdGhhbiAyIGFscmVhZHkgbWVldCB0aGF0IGN1dG9mZi48YnI+PC9icj4KICDigKIJV2l0aCB0aGUgZmlsdGVyIGFjdGl2ZSwgc2VsZWN0IGFuZCBjb3B5IGFsbCBlbnRyaWVzIGluIHRoZSAqKkdlbmUgTmFtZSoqIGNvbHVtbi48YnI+PC9icj4KICA8YnI+PC9icj48YnI+PC9icj4KICAhW10oaW1hZ2VzL0V4cF9kYXRhLnBuZykKCjxicj48L2JyPjxicj48L2JyPgogIAojIyBSZXRyaWV2ZSBOZXR3b3JrcyBmcm9tIFNUUklORwogIAogIFRvIGlkZW50aWZ5IGEgcmVsZXZhbnQgbmV0d29yaywgd2Ugd2lsbCB1c2UgdGhlICoqU1RSSU5HKiogZGF0YWJhc2UgdG8gZmluZCBhIG5ldHdvcmsgcmVsZXZhbnQgdG8gdGhlIGxpc3Qgb2YgdXAtcmVndWxhdGVkIGdlbmVzLgo8YnI+PC9icj48YnI+PC9icj4KICDigKIJTGF1bmNoIEN5dG9zY2FwZS4gSW4gdGhlICoqTmV0d29yayBTZWFyY2gqKiBiYXIgYXQgdGhlIHRvcCBvZiB0aGUgKipOZXR3b3JrIFBhbmVsKiosIHNlbGVjdCAqKlNUUklORyBwcm90ZWluIHF1ZXJ5KiogZnJvbSB0aGUgZHJvcC1kb3duLCBhbmQgcGFzdGUgaW4gdGhlIGxpc3Qgb2YgMjYzIHVwLXJlZ3VsYXRlZCBnZW5lcy48YnI+PC9icj4KICDigKIJT3BlbiB0aGUgb3B0aW9ucyBwYW5lbCAgYW5kIGNvbmZpcm0geW91IGFyZSBzZWFyY2hpbmcgKipIb21vIHNhcGllbnMqKiB3aXRoIGEgKipDb25maWRlbmNlIGN1dG9mZiBvZiAwLjQwKiogYW5kICoqMCBNYXhpbXVtIGFkZGl0aW9uYWwgaW50ZXJhY3RvcnMuKio8YnI+PC9icj4KICDigKIJQ2xpY2sgdGhlICoqc2VhcmNoIGljb24qKiB0byBzZWFyY2guIElmIGFueSBvZiB0aGUgc2VhcmNoIHRlcm1zIGFyZSBhbWJpZ3VvdXMsIGEgKipSZXNvbHZlIEFtYmlndW91cyBUZXJtcyoqIGRpYWxvZyB3aWxsIGFwcGVhci4gQ2xpY2sgKipJbXBvcnQqKiB0byBjb250aW51ZSB3aXRoIHRoZSBpbXBvcnQgdXNpbmcgdGhlIGRlZmF1bHQgY2hvaWNlcy4gVGhlIHJlc3VsdGluZyBuZXR3b3JrIHdpbGwgbG9hZCBhdXRvbWF0aWNhbGx5LCBhbmQgc2hvdWxkIGhhdmUgYXJvdW5kICoqMTczKiogbm9kZXMuIDxicj48L2JyPgogIAogIDxicj48L2JyPgogIAogICFbXShpbWFnZXMvU3RyaW5nLUltcG9ydC5wbmcpCjxicj48L2JyPjxicj48L2JyPgogIAojIyBTVFJJTkcgTmV0d29yayBVcC1SZWd1bGF0ZWQgR2VuZXMKICAKICBUaGUgcmVzdWx0aW5nIG5ldHdvcmsgY29udGFpbnMgdXAtcmVndWxhdGVkIGdlbmVzIHJlY29nbml6ZWQgYnkgU1RSSU5HLCBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlbSB3aXRoIGEgY29uZmlkZW5jZSBzY29yZSBvZiAwLjQgb3IgZ3JlYXRlci4KPGJyPjwvYnI+PGJyPjwvYnI+CiAgCiAgIVtdKGltYWdlcy9TdHJpbmctSW1hZ2UxLnBuZykKCgo8YnI+PC9icj48YnI+PC9icj4KICAKICBUaGUgbmV0d29ya3MgY29uc2lzdCBvZiBvbmUgbGFyZ2UgY29ubmVjdGVkIGNvbXBvbmVudCwgc2V2ZXJhbCBzbWFsbGVyIG5ldHdvcmtzLCBhbmQgc29tZSB1bmNvbm5lY3RlZCBub2Rlcy4gV2Ugd2lsbCB1c2Ugb25seSB0aGUgbGFyZ2VzdCBjb25uZWN0ZWQgY29tcG9uZW50IGZvciB0aGUgcmVzdCBvZiB0aGUgdHV0b3JpYWwuPGJyPjwvYnI+CiAgCiAg4oCiCVRvIHNlbGVjdCB0aGUgbGFyZ2VzdCBjb25uZWN0ZWQgY29tcG9uZW50LCBzZWxlY3QgKipTZWxlY3Qg4oaSIE5vZGVzIOKGkiBMYXJnZXN0IHN1Ym5ldHdvcmsuKio8YnI+PC9icj4KICDigKIJU2VsZWN0ICoqRmlsZSDihpIgTmV3IE5ldHdvcmsg4oaSIEZyb20gU2VsZWN0ZWQgTm9kZXMsIEFsbCBFZGdlcy4qKjxicj48L2JyPgogIDxicj48L2JyPjxicj48L2JyPgogICFbXShpbWFnZXMvU3RyaW5nLUltYWdlMi5wbmcpCgo8YnI+PC9icj4KCiMjIERhdGEgSW50ZWdyYXRpb24KICAKICBOZXh0IHdlIHdpbGwgaW1wb3J0IHRoZSBSTkEtU2VxIGRhdGEgYW5kIHVzZSB0aGVtIHRvIGNyZWF0ZSBhIHZpc3VhbGl6YXRpb24uPGJyPjwvYnI+CiAgCiAg4oCiCUxvYWQgdGhlIGRvd25sb2FkZWQgKipFLU1UQUItMTk0MC1xdWVyeS1yZXN1bHRzLnRzdioqIGZpbGUgdW5kZXIgRmlsZSBtZW51IGJ5IHNlbGVjdGluZyAqKkltcG9ydCDihpIgVGFibGUgZnJvbSBGaWxlLi4uLi4qKiBBbHRlcm5hdGl2ZWx5LCBkcmFnIGFuZCBkcm9wIHRoZSBkYXRhIGZpbGUgZGlyZWN0bHkgb250byB0aGUgTm9kZSBUYWJsZS48YnI+PC9icj4KICDigKIJSW4gKipBZHZhbmNlZCBPcHRpb25zKiouLi4sIGluIHRoZSAqKklnbm9yZSBMaW5lcyBTdGFydGluZyBXaXRoIGZpZWxkKiosIGVudGVyICMsIHRvIGV4Y2x1ZGUgdGhlIGFkZGl0aW9uYWwgbGluZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF0YSBmaWxlLjxicj48L2JyPgrigKIJU2VsZWN0IHRoZSAqKnF1ZXJ5IHRlcm0qKiBjb2x1bW4gYXMgdGhlICoqS2V5IGNvbHVtbiBmb3IgTmV0d29yayoqIGFuZCBzZWxlY3QgdGhlICoqR2VuZSBOYW1lKiogY29sdW1uIGFzIHRoZSBrZXkgY29sdW1uIGJ5IGNsaWNraW5nIG9uIHRoZSBoZWFkZXIgYW5kIHNlbGVjdGluZyB0aGUga2V5IHN5bWJvbC48YnI+PC9icj4KICDigKIJQ2xpY2sgKipPSyoqIHRvIGltcG9ydC4gVHdvIG5ldyBjb2x1bW5zIG9mIGRhdGEgd2lsbCBiZSBhZGRlZCB0byB0aGUgKipOb2RlIFRhYmxlLioqPGJyPjwvYnI+CiAgCiAgPGJyPjwvYnI+PGJyPjwvYnI+CiAgIVtdKGltYWdlcy9JbXBvcnQtZGF0YS1pbnQucG5nKQohW10oaW1hZ2VzL0ltcG9ydC1Db2x1bW5zLnBuZykKPGJyPjwvYnI+PGJyPjwvYnI+CiAgCiAgCiMjIFZpc3VhbGl6YXRpb24KICBOZXh0LCB3ZSB3aWxsIGNyZWF0ZSBhIHZpc3VhbGl6YXRpb24gb2YgdGhlIGltcG9ydGVkIGRhdGEgb24gdGhlIG5ldHdvcmsuIEZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGRhdGEgdmlzdWFsaXphdGlvbiwgc2VlIHRoZSBWaXN1YWxpemluZyBEYXRhIHR1dG9yaWFsLjxicj48L2JyPgogIAogIOKAoglJbiB0aGUgKipTdHlsZSoqIHRhYiBvZiB0aGUgKipDb250cm9sIFBhbmVsKiosIHN3aXRjaCB0aGUgc3R5bGUgZnJvbSAqKlNUUklORyoqIHN0eWxlIHRvICoqZGVmYXVsdCoqIGluIHRoZSBkcm9wLWRvd24gYXQgdGhlIHRvcC48YnI+PC9icj4KICDigKIJQ2hhbmdlIHRoZSBkZWZhdWx0IG5vZGUgKipTaGFwZSoqIHRvICoqZWxsaXBzZSoqIGFuZCAqKmNoZWNrIExvY2sgbm9kZSB3aWR0aCBhbmQgaGVpZ2h0LioqPGJyPjwvYnI+CiAg4oCiCVNldCB0aGUgZGVmYXVsdCBub2RlICoqU2l6ZSoqIHRvICoqNTAuKio8YnI+PC9icj4KICDigKIJU2V0IHRoZSBkZWZhdWx0IG5vZGUgKipGaWxsIENvbG9yKiogdG8gKipsaWdodCBncmF5KiouPGJyPjwvYnI+CiAg4oCiCVNldCB0aGUgZGVmYXVsdCAqKkJvcmRlciBXaWR0aCoqIHRvIDIsIGFuZCBtYWtlIHRoZSBkZWZhdWx0ICoqQm9yZGVyIFBhaW50KiogZGFyayBncmF5Ljxicj48L2JyPgogIDxicj48L2JyPjxicj48L2JyPgogICFbXShpbWFnZXMvVmlzdWFsaXphdGlvbi1TdHlsZXMucG5nKQoKPC9icj48YnI+PC9icj48YnI+PC9icj4KICDigKIJRm9yIG5vZGUgKipGaWxsIENvbG9yKiosIGNyZWF0ZSBhIGNvbnRpbnVvdXMgbWFwcGluZyBmb3IgJ05NSUJDJyB2cyAnbm9ybWFsJyAuZm9sZENoYW5nZS48YnI+PC9icj4KICDigKIJRG91YmxlLWNsaWNrIHRoZSBjb2xvciBtYXBwaW5nIHRvIG9wZW4gdGhlICoqQ29udGludW91cyBNYXBwaW5nIEVkaXRvcioqIGFuZCBjbGljayB0aGUgKipDdXJyZW50IFBhbGV0dGUqKi4gU2VsZWN0IHRoZSBDb2xvckJyZXdlciAqKnllbGxvdy1vcmFuZ2UtcmVkIHNoYWRlcyBncmFkaWVudCoqLjxicj48L2JyPgogIOKAoglGaW5hbGx5LCBmb3Igbm9kZSAqKkxhYmVsKiosIHNldCBhIHBhc3N0aHJvdWdoIG1hcHBpbmcgZm9yIGRpc3BsYXkgbmFtZS48YnI+PC9icj4KICDigKIJU2F2ZSB5b3VyIG5ldyB2aXN1YWxpemF0aW9uIHVuZGVyICoqQ29weSBTdHlsZS4uLioqIGluIHRoZSAqKk9wdGlvbnMqKiBtZW51IG9mIHRoZSAqKlN0eWxlKiogaW50ZXJmYWNlLCBhbmQgbmFtZSBpdCBkZSBnZW5lcyB1cC48YnI+PC9icj4KICA8YnI+PC9icj48YnI+PC9icj4KICAhW10oaW1hZ2VzL1N0eWxlLW9wdGlvbnMucG5nKQo8YnI+PC9icj48YnI+PC9icj4KICAKICAKICBBcHBseSB0aGUgKipQcmVmdXNlIEZvcmNlIERpcmVjdGVkKiogbGF5b3V0IGJ5IGNsaWNraW5nIHRoZSAqKkFwcGx5IFByZWZlcnJlZCBMYXlvdXQqKiBidXR0b24gaW4gdGhlIHRvb2xiYXIuIFRoZSBuZXR3b3JrIHdpbGwgbm93IGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKICA8YnI+PC9icj48YnI+PC9icj4KICAhW10oaW1hZ2VzL1ByZWZ1c2UtZm9yY2UtbGF5b3V0LnBuZykKPGJyPjwvYnI+PGJyPjwvYnI+Cgo8ZGl2IGNsYXNzPSJleGVyY2lzZSI+CiMgRXhlcmNpc2UKCiMjIGEuIFNUUklORyBFbnJpY2htZW50CgpUaGUgU1RSSU5HIGFwcCBoYXMgYnVpbHQtaW4gZW5yaWNobWVudCBhbmFseXNpcyBmdW5jdGlvbmFsaXR5LCB3aGljaCBpbmNsdWRlcyBlbnJpY2htZW50IGZvciBHZW5lIE9udG9sb2d5LCBJbnRlclBybywgS0VHRyBQYXRod2F5cywgYW5kIFBGQU0uPGJyPjwvYnI+CgoqCVVzaW5nIHRoZSBTVFJJTkcgdGFiIG9mIHRoZSBSZXN1bHRzIFBhbmVsLCBjbGljayB0aGUgKipGdW5jdGlvbmFsIEVucmljaG1lbnQgYnV0dG9uKiouIEtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZ3MuIFdoYXQgZG8geW91IHNlZS48YnI+PC9icj4KICAgICFbXShpbWFnZXMvRnVuY3Rpb25hbEVucmljaG1lbnRCdXR0b24ucG5nKQogIAogIDxicj48L2JyPjxicj48L2JyPgoKKiBXaGVuIHRoZSBlbnJpY2htZW50IGFuYWx5c2lzIGlzIGNvbXBsZXRlLCBhIG5ldyB0YWIgdGl0bGVkICoqU1RSSU5HKiogKipFbnJpY2htZW50Kiogd2lsbCBvcGVuIGluIHRoZSAqKlRhYmxlIFBhbmVsKiouPGJyPjwvYnI+CgoqIFRoZSBTVFJJTkcgYXBwIGluY2x1ZGVzIHNldmVyYWwgb3B0aW9ucyBmb3IgZmlsdGVyaW5nIGFuZCBkaXNwbGF5aW5nIHRoZSBlbnJpY2htZW50IHJlc3VsdHMuIFRoZSBmZWF0dXJlcyBhcmUgYWxsIGF2YWlsYWJsZSBhdCB0aGUgdG9wIG9mIHRoZSAqKlNUUklORyBFbnJpY2htZW50IHRhYioqLiBGaWx0ZXIgdGhlIHRhYmxlIHRvIG9ubHkgc2hvdyAqKkdPIEJpb2xvZ2ljYWwgUHJvY2Vzcy4qKjxicj48L2JyPgogICAKKiBBdCB0aGUgdG9wIGxlZnQgb2YgdGhlIFNUUklORyBlbnJpY2htZW50IHRhYiwgY2xpY2sgdGhlIGZpbHRlciBpY29uIGByIGljb25zOjpmb250YXdlc29tZSgiZmlsdGVyIiwgc3R5bGUgPSAic29saWQiKWAgLiBTZWxlY3QgKipHTyBCaW9sb2dpY2FsIFByb2Nlc3MqKiBhbmQgY2hlY2sgdGhlICoqUmVtb3ZlIHJlZHVuZGFudCB0ZXJtcyBjaGVjay1ib3gqKi4gVGhlbiBjbGljayAqKk9LLioqPGJyPjwvYnI+CiogTmV4dCwgYWRkIGEgc3BsaXQgZG9udXQgY2hhcnQgdG8gdGhlIG5vZGVzIHJlcHJlc2VudGluZyB0aGUgdG9wIHRlcm1zIGJ5IGNsaWNraW5nIG9uIDxicj48L2JyPgoqIEV4cGxvcmUgY3VzdG9tIHNldHRpbmdzIHZpYSAgIGluIHRoZSB0b3AgcmlnaHQgb2YgdGhlIFNUUklORyBlbnJpY2htZW50IHRhYi48YnI+PC9icj4gICAKICAgIAojIyMgYi4gUmVwZWF0IHRoZSB3aG9sZSBleHBlcmltZW50IHVzaW5nICJkb3duLXJlZ3VsYXRlZCIgZ2VuZXMuIAoKIyMjIGMuIEV4cG9ydCB5b3VyIE5ldHdvcmtzCgojIyMgZC4gKipTYXZlIGluIGFueSBvZiB0aGUgZm9ybWF0cyBhbmQgYmUgcmVhZHkgZm9yIHB1Ymxpc2hpbmcuKioKICAKICA8L2Rpdj4KICAKICAKIyMjIFdlIHdpbGwgbm93IGdvIHRvIHRoZSBuZXh0IHNlc3Npb24gW3Nlc3Npb24gKDJCKV0oc2Vzc2lvbjJiLm5iLmh0bWwpIHRvIHVuZGVyc3RhbmQgaG93IHRvIHBlcmZvcm0gRnVuY3Rpb25hbCBFbnJpY2htZW50LiAgICAKICA=