From 98a2ef3cffed06116a28ed02ad2337a6b8e5ff05 Mon Sep 17 00:00:00 2001 From: peterc8 Date: Mon, 2 Dec 2024 23:03:16 -0500 Subject: [PATCH 1/2] updated links --- .../peterc_finalProjectF24_roughdraft.Rmd | 10 +++++----- .../peterc_finalProjectF24_roughdraft.nb.html | 12 ++++++------ .../peterc_finalProjectF24_roughdraft.pdf | Bin 343715 -> 343830 bytes 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd index ff5cb22..1a87b5e 100644 --- a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd +++ b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd @@ -155,10 +155,10 @@ This helped answer the question of how can we correlate the LIBS and PIXL data s Here is a list data sets, codes, that are used in your work. Along with brief description and URL where they are located. 1. peterc-finalProjectF24.Rmd (with knit pdf and html) is this notebook. -[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc-finalProjectF24.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/rcsid-finalProjectF24.Rmd) +[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd) 2. v1_libs_to_sample.Rds is the combined data set of PIXL and LIBS that includes the distance from a PIXL abrasion to a LIBS sample. -[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/PIXL_LIBS_Combined.Rds). +[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds). Firstly, we set the number of meters distance threshold between a PIXL abrasion and LIBS sample. Within the v1_libs_to_sample.Rds, which Margo and I collaborated on there is a distance variable that is set via a function that Margo created to measure the distance between a PIXL abrasion and LIBS sample using their latitude and longitude coordinates. ```{r} @@ -234,10 +234,10 @@ Using the LIBS and PIXL combined data set, I created a plot of the composition p Here is a list data sets, codes, that are used in your work. Along with brief description and URL where they are located. 1. peterc_finalProjectF24.Rmd (with knit pdf and html) is this notebook. -[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc_finalProjectF24.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc_finalProjectF24.Rmd) +[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd) 2. peterc_assignment5.Rmd (with knit pdf and html) which is my previous notebook. -[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_-finalProjectF24_assignment05.Rmd) +[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd]) 3. supercam_libs_moc_loc.Rds which is the original LIBS data given to our research group. [https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds) @@ -438,7 +438,7 @@ Using the LIBS and PIXL combined data set, we created a ternary plot to show the Here is a list data sets, codes, that are used in your work. Along with brief description and URL where they are located. 1. peterc-finalProjectF24.Rmd (with knit pdf and html) is this notebook. -[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc-finalProjectF24.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/rcsid-finalProjectF24.Rmd) +[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd) 2. supercam_libs_moc_loc.Rds which is the original LIBS data given to our research group. [https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds) diff --git a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html index 450b902..3bc6417 100644 --- a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html +++ b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html @@ -1853,10 +1853,10 @@

0.0 Preliminaries.

Here is a list data sets, codes, that are used in your work. Along with brief description and URL where they are located. 1. peterc-finalProjectF24.Rmd (with knit pdf and html) is this notebook. -[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc-finalProjectF24.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/rcsid-finalProjectF24.Rmd) +[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd) 2. v1_libs_to_sample.Rds is the combined data set of PIXL and LIBS that includes the distance from a PIXL abrasion to a LIBS sample. -[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/PIXL_LIBS_Combined.Rds). +[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds). Firstly, we set the number of meters distance threshold between a PIXL abrasion and LIBS sample. Within the v1_libs_to_sample.Rds, which Margo and I collaborated on there is a distance variable that is set via a function that Margo created to measure the distance between a PIXL abrasion and LIBS sample using their latitude and longitude coordinates. @@ -2027,9 +2027,9 @@

4.1 Data, Code, and Resources

with brief description and URL where they are located.

  1. peterc_finalProjectF24.Rmd (with knit pdf and html) is this -notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc_finalProjectF24.Rmd

  2. +notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd

  3. peterc_assignment5.Rmd (with knit pdf and html) which is my -previous notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd

  4. +previous notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd

  5. supercam_libs_moc_loc.Rds which is the original LIBS data given to our research group. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds

  6. pixl_sol_coordinates.Rds, which is the data set containing the @@ -2335,7 +2335,7 @@

    5.1 Data, Code, and Resources

    with brief description and URL where they are located.

    1. peterc-finalProjectF24.Rmd (with knit pdf and html) is this -notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc-finalProjectF24.Rmd

    2. +notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd

    3. supercam_libs_moc_loc.Rds which is the original LIBS data given to our research group. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds

    @@ -2568,7 +2568,7 @@

    Appendix

    -
    LS0tCnRpdGxlOiAiRGF0YSBBbmFseXRpY3MgUmVzZWFyY2ggSW5kaXZpZHVhbCBGaW5hbCBQcm9qZWN0IFJlcG9ydCAtIE1hcnMiCmF1dGhvcjogIkNoYXJsb3R0ZSBQZXRlcnNvbiIKZGF0ZTogIkZhbGwgMjAyNCIKb3V0cHV0OgogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6ICczJwogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogMwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0aGVtZTogdW5pdGVkCi0tLQoKCiMgREFSIFByb2plY3QgYW5kIEdyb3VwIE1lbWJlcnMKCiogUHJvamVjdCBuYW1lOiBNYXJzCiogR2l0SHViIElEOiBkYXItcGV0ZXJjCiogUHJvamVjdCB0ZWFtIG1lbWJlcnM6IERhbnRlIE13YXRpYm8sIERvw7FhIFJvYmVydHMsIERhdmlkIFdhbGN5emssIFh1YW50aW5nIFdhbmcsIEFzaHRvbiBDb21wdG9uLCBNYXJnbyBWYW5Fc3NlbHN0eW4sIE5pY29sYXMgTW9yYXdza2ksIENKIE1hcmlubywgQWFkaSBMYWhpcmkgCgojIDAuMCBQcmVsaW1pbmFyaWVzLgoKKlIgTm90ZWJvb2tzIGFyZSBtZWFudCB0byBiZSBkeW5hbWljIGRvY3VtZW50cy4gUHJvdmlkZSBhbnkgcmVsZXZhbnQgdGVjaG5pY2FsIGd1aWRhbmNlIGZvciB1c2VycyBvZiB5b3VyIG5vdGVib29rLiBBbHNvIHRha2UgY2FyZSBvZiBhbnkgcHJlbGltaW5hcmllcywgc3VjaCBhcyByZXF1aXJlZCBwYWNrYWdlcy4gU2FtcGxlIHRleHQ6KgoKVGhpcyByZXBvcnQgaXMgZ2VuZXJhdGVkIGZyb20gYW4gUiBNYXJrZG93biBmaWxlIHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBSIGNvZGUgbmVjZXNzYXJ5IHRvIHByb2R1Y2UgdGhlIHJlc3VsdHMgZGVzY3JpYmVkIGFuZCBlbWJlZGRlZCBpbiB0aGUgcmVwb3J0LiAgQ29kZSBibG9ja3MgY2FuIGJlIHN1cnByZXNzZWQgZnJvbSBvdXRwdXQgZm9yIHJlYWRhYmlsaXR5IHVzaW5nIHRoZSBjb21tYW5kIGNvZGUgYHtSLCAgZWNobz1zaG93fWAgaW4gdGhlIGNvZGUgYmxvY2sgaGVhZGVyLiBJZiBgc2hvdyA8LSBGQUxTRWAgdGhlIGNvZGUgYmxvY2sgd2lsbCBiZSBzdXJwcmVzc2VkOyBpZiBgc2hvdyA8LSBUUlVFYCB0aGVuIHRoZSBjb2RlIHdpbGwgYmUgc2hvdy4gCgpgYGB7cn0KIyBTZXQgdG8gVFJVRSB0byBleHBhbmQgUiBjb2RlIGJsb2Nrczsgc2V0IHRvIEZBTFNFIHRvIGNvbGxhcHNlIFIgY29kZSBibG9ja3MgCnNob3cgPC0gVFJVRQpgYGAKCjwhLS0gRXhwYW5kIHRoaXMgbGlzdCBhcyBuZWNlc3NhcnkgZm9yIHlvdXIgbm90ZWJvb2sgLS0+CkV4ZWN1dGluZyB0aGlzIFIgbm90ZWJvb2sgcmVxdWlyZXMgc29tZSBzdWJzZXQgb2YgdGhlIGZvbGxvd2luZyBwYWNrYWdlczoKCiogYGdncGxvdDJgCiogYHRpZHl2ZXJzZWAKKiBgcGFuZG9jYAoqIGBybWFya2Rvd25gCiogYHN0cmluZ3JgCiogYGdnYmlwbG90YAoqIGBrbml0cmAKKiBgcnBhcnRgCiogYHJwYXJ0LnBsb3RgCiogYGNhcmV0YAoqIGBnZ3JlcGVsYAoqIGBnZ3Rlcm5gCgoKVGhlc2Ugd2lsbCBiZSBpbnN0YWxsZWQgYW5kIGxvYWRlZCBhcyBuZWNlc3NhcnkgKGNvZGUgc3VwcHJlc3NlZCkuIAoKPCEtLSBUaGUgYGluY2x1ZGU9RkFMU0VgIG9wdGlvbiBwcmV2ZW50cyB5b3VyIGNvZGUgZnJvbSBiZWluZyBzaG93biBhdCBhbGwgLS0+CmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIFRoaXMgY29kZSB3aWxsIGluc3RhbGwgcmVxdWlyZWQgcGFja2FnZXMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgaW5zdGFsbGVkCiMgQUxXQVlTIElOU1RBTEwgWU9VUiBQQUNLQUdFUyBMSUtFIFRISVMhCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQogICBsaWJyYXJ5KGdncGxvdDIpCn0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQoKaWYgKCFyZXF1aXJlKCJwYW5kb2MiKSkgewogIGluc3RhbGwucGFja2FnZXMoInBhbmRvYyIpCiAgbGlicmFyeShwYW5kb2MpCn0KCiMgUmVxdWlyZWQgcGFja2FnZXMgZm9yIE0yMCBMSUJTIGFuYWx5c2lzCmlmICghcmVxdWlyZSgicm1hcmtkb3duIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJybWFya2Rvd24iKQogIGxpYnJhcnkocm1hcmtkb3duKQp9CgppZiAoIXJlcXVpcmUoInN0cmluZ3IiKSkgewogIGluc3RhbGwucGFja2FnZXMoInN0cmluZ3IiKQogIGxpYnJhcnkoc3RyaW5ncikKfQoKaWYgKCFyZXF1aXJlKCJnZ2JpcGxvdCIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2diaXBsb3QiKQogIGxpYnJhcnkoZ2diaXBsb3QpCn0KCmlmICghcmVxdWlyZSgia25pdHIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikKICBsaWJyYXJ5KGtuaXRyKQp9CgppZiAoIXJlcXVpcmUoInJwYXJ0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydCIpCiAgbGlicmFyeShycGFydCkKfQoKaWYgKCFyZXF1aXJlKCJycGFydC5wbG90IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydC5wbG90IikKICBsaWJyYXJ5KHJwYXJ0KQp9CgppZiAoIXJlcXVpcmUoImNhcmV0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJjYXJldCIpCiAgbGlicmFyeShjYXJldCkKfQogIAppZiAoIXJlcXVpcmUoImdncmVwZWwiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdncmVwZWwiKQogIGxpYnJhcnkoZ2dyZXBlbCkKfQoKaWYgKCFyZXF1aXJlKCJnZW9zcGhlcmUiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdlb3NwaGVyZSIpCiAgbGlicmFyeShnZ3JlcGVsKQp9CgppZiAoIXJlcXVpcmUoImdndGVybiIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2d0ZXJuIikKICBsaWJyYXJ5KGdncmVwZWwpCn0KCmBgYAoKIyAxLjAgUHJvamVjdCBJbnRyb2R1Y3Rpb24KClRoZSBNYXJzIFByb2plY3QgaXMgZm9jdXNlZCBvbiBkYXRhIGZyb20gdGhlIDIwMjAgTWFycyBQZXJzZXZlcmFuY2UgUm92ZXIuIFRoZSBnb2FsIG9mIHRoZSBtaXNzaW9uIGlzIHRvIGxvb2sgZm9yIG1pY3JvYmlhbCBhbmNpZW50IGxpZmUgb3IgZm9ybXMgb2Ygd2F0ZXIgb24gTWFycyAodGhpbmdzIHRoYXQgY291bGQgc3VnZ2VzdCBsaWZlKS4gUGVyc2V2ZXJhbmNlIHVzZXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMsIGluY2x1ZGluZyBQSVhMIChQbGFuZXRhcnkgSW5zdHJ1bWVudCBmb3IgWC1SYXkgTGl0aG9jaGVtaXN0cnkpLCBTSEVSTE9DIChTY2FubmluZyBIYWJpdGFibGUgRW52aXJvbm1lbnRzIHdpdGggUmFtYW4gYW5kIEx1bWluZXNjZW5jZSBmb3IgT3JnYW5pY3MgYW5kIENoZW1pY2FscykgYW5kIFNVUEVSQ0FNLiBTVVBFUkNBTSBoYXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMgdGhhdCBtZWFzdXJlIHNwZWN0cm9zY29weSB0byBtZWFzdXJlIHByb3BlcnRpZXMgb2YgbWF0ZXJpYWxzIG9uIE1hcnMsIGluY2x1ZGluZyBMSUJTIChMYXNlci1pbmR1Y2VkIGJyZWFrZG93biBzcGVjdHJvc2NvcHkpLiBUaGlzIG5vdGVib29rIHdpbGwgcHJpbWFyaWx5IGZvY3VzIG9uIHRoZSBkYXRhIHdlIGhhdmUgYmVlbiBnaXZlbiBvZiBQSVhMIGFuZCBMSUJTLiAgCgojIDIuMCBPcmdhbml6YXRpb24gb2YgUmVwb3J0CgpUaGlzIHJlcG9ydCBpcyBvcmdhbml6ZSBhcyBmb2xsb3dzOiAKCiogU2VjdGlvbiAzLjAuICBGaW5kaW5nIDE6IExJQlMgYW5kIFBJWEwgTWF0Y2hpbmcgLSBXZSB3ZXJlIGFibGUgdG8gY29tYmluZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgYnkgcGlja2luZyBhIG1heGltdW0gZGlzdGFuY2UgdmFyaWFibGUgZnJvbSBhIFBJWEwgYWJyYXNpb24gYW5kIG1hdGNoaW5nIExJQlMgc2FtcGxlcyB0aGF0IHdlcmUgd2l0aGluIHRoZSBzZXQgZGlzdGFuY2Ugb2YgYSBQSVhMIGFicmFzaW9uLiAgCgoqIFNlY3Rpb24gNC4wOiBGaW5kaW5nIDI6IFNvaWwgQ29tcG9zaXRpb24gQW5hbHlzaXMgLSBVc2luZyB0aGUgTElCUyBhbmQgUElYTCBjb21iaW5lZCBkYXRhIHNldCwgSSBjcmVhdGVkIGEgcGxvdCBvZiB0aGUgY29tcG9zaXRpb24gcGVyY2VudGFnZXMgb2YgY2hlbWljYWwgY29tcG91bmRzIHN1Y2ggYXMgU2kwMiwgSzIwLCBldGMuIHVzaW5nIGxvZyBzY2FsaW5nIHRvIGNvbXBhcmUgdGhlIGNvbXBvc2l0aW9ucyBvZiBhIFBJWEwgYWJyYXNpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlIGNvbXBvc2l0aW9ucyAoYmFzZWQgb24gdGhlIExJQlMgc2FtcGxlcyBmb3IgeCBkaXN0YW5jZSBhd2F5IGZyb20gYSBQSVhMIGFicmFzaW9uKS4KCiogU2VjdGlvbiA1LjAgRmluZGluZyAzOiBBbmFseXppbmcgQ2F0aW9uIENvbWJpbmF0aW9ucyB1c2luZyBMSUJTIGFuZCBQSVhMIG1hdGNoZWQgZGF0YTogVXNpbmcgdGhlIExJQlMgYW5kIFBJWEwgY29tYmluZWQgZGF0YSBzZXQsIHdlIGNyZWF0ZWQgYSB0ZXJuYXJ5IHBsb3QgdG8gc2hvdyB0aGUgZGlzdHJpYnV0aW9uIG9mIExJQlMgc2FtcGxlcyBzb3J0ZWQgYnkgd2hhdCBQSVhMIGFicmFzaW9uIHRoZXkgYXJlIGNsb3Nlc3QgdG8gKGJhc2VkIG9uIGEgY2hvc2VuIGRpc3RhbmNlIHZhcmlhYmxlKS4KCiogU2VjdGlvbiA2LjAgT3ZlcmFsbCBjb25jbHVzaW9ucyBhbmQgc3VnZ2VzdGlvbnMgCgoqIFNlY3Rpb24gNy4wIEFwcGVuZGl4IFRoaXMgc2VjdGlvbiBkZXNjcmliZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgd29ya3MgdGhhdCBtYXkgYmUgaGVscGZ1bCBpbiB0aGUgZnV0dXJlIHdvcms6ICpsaXN0IHN1YmplY3RzKi4gIAoKCiMgMy4wIEZpbmRpbmcgMTogUElYTCBhbmQgTElCUyBNYXRjaGluZwoKX0dpdmUgYSBoaWdobGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIG1ham9yIGZpbmRpbmcuIFdoYXQgcXVlc3Rpb25zIHdlcmUgeW91ciB0cnlpbmcgdG8gYWRkcmVzcywgd2hhdCBhcHByb2FjaGVzIGRpZCB5b3UgZW1wbG95LCBhbmQgd2hhdCBoYXBwZW5lZD9fCgpGaXJzdGx5LCB3ZSB3aWxsIGJlIHRha2luZyBhIGxvb2sgYXQgaG93IFBJWEwgYW5kIExJQlMgY29ycmVzcG9uZC4gT3VyIGdyb3VwIGZvdW5kIHZlcnkgZWFybHkgaW4gb3VyIHJlc2VhcmNoIHRoYXQgdGhlcmUgd2Fzbid0IGEgZmVhdHVyZSBhbW9uZyB0aGVtIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggdGhlIGRhdGEgc2V0cy4gRm9yIGV4YW1wbGUsIHRoZSBjb2x1bW5zIG9mIFBJWEwgYXJlIG9yZ2FuaXplZCBieSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGFzIHdlbGwgYXMgc2FtcGxlIG51bWJlciAoMS0xNiksIHNhbXBsZSBuYW1lLCBhbmQgYWJyYXNpb24gbmFtZS4gVW5mb3J0dW5hdGVseSwgTElCUyB3YXNuJ3Qgc29ydGVkIHRoZSBzYW1lIHdheS4gTElCUyB3YXMgb3JnYW5pemVkIGJ5IHRoZSBzb2wgdGhhdCB0aGUgc2FtcGxlIHdhcyB0YWtlbiBhdC4gTElCUyBpcyBicm9rZW4gdXAgaW50byBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBzYW1wbGVzIGFzIHdlbGwsIGluY2x1ZGluZyB0aGUgZmFjdCBpdCBjYXJyaWVzIGFyb3VuZCBlYXJ0aCByZWZlcmVuY2UgZGF0YSB0byBiZSB1c2VkIGluIGNvbXBhcmluZyB3aXRoIGRpZmZlcmVudCBzYW1wbGUgc2l0ZXMuIFRoYXQgYmVpbmcgc2FpZCwgaW4gb3JkZXIgdG8gbWF0Y2ggUElYTCB0YXJnZXRzIHRvIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGVzLCBNYXJnbyBhbmQgSSBjcmVhdGVkIGEgbmV3IGRhdGEgc2V0IHRoYXQgYWRkZWQgYW5vdGhlciBtZXRhZGF0YSBmZWF0dXJlIHRvIFBJWEwgKGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgY29vcmRpbmF0ZXMpIHdoaWNoIHdlIG9idGFpbmVkIGZyb20gdGhlIEFuYWx5c3QncyBOb3RlYm9vay4gT25jZSB0aGlzIHdhcyBhZGRlZCBpbiwgd2UgcmVhbGl6ZWQgdGhhdCB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBkaWRuJ3QgcmVhbGx5IG1hdGNoLiBTbyBNYXJnbyBjcmVhdGVkIGEgZGlzdGFuY2UgZnVuY3Rpb24gdG8gbWF0Y2ggTElCUyBzYW1wbGVzIHRvIFBJWEwgdGFyZ2V0cyBiYXNlZCBvbiB3aGF0ZXZlciBkaXN0YW5jZSBhIHBlcnNvbiBzcGVjaWZpZXMuIE9yaWdpbmFsbHksIHdlIHNldCBpdCB0byBiZSByb3VuZGVkIHRvIHRocmVlIHRob3VzYW5kdGhzIGFuZCBtYXRjaCBiYXNlZCBvbiB0aGF0LgoKVGhpcyBoZWxwZWQgYW5zd2VyIHRoZSBxdWVzdGlvbiBvZiBob3cgY2FuIHdlIGNvcnJlbGF0ZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgdG8gYmUgYWJsZSB0byBwbG90IHRoZW0gb24gdGhlIHNhbWUgYXhpcyBvZiB3aGF0ZXZlciBwbG90IGlzIHRyeWluZyB0byBiZSBjcmVhdGVkLiBJIHdhcyBjdXJpb3VzIHRvIHNlZSBob3cgY2xvc2UgUElYTCB0YXJnZXRzIHdlcmUgdG8gTElCUyBzYW1wbGUgc2l0ZXMgYXMgd2VsbCBhcyBob3cgbWFueSBMSUJTIHNhbXBsZXMgd291bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgUElYTCB0YXJnZXQgcGVyaGFwcyB3aXRoIGEgcmFkaXVzIG9mIDcgb3IgMTAgbWV0ZXJzLgoKIyMgMy4xIERhdGEsIENvZGUsIGFuZCBSZXNvdXJjZXMKCkhlcmUgaXMgYSBsaXN0IGRhdGEgc2V0cywgY29kZXMsIHRoYXQgYXJlIHVzZWQgaW4geW91ciB3b3JrLiBBbG9uZyB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBVUkwgd2hlcmUgdGhleSBhcmUgbG9jYXRlZC4KCjEuIHBldGVyYy1maW5hbFByb2plY3RGMjQuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSBpcyB0aGlzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC90cmVlL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDcvcGV0ZXJjLWZpbmFsUHJvamVjdEYyNC5SbWRdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvdHJlZS9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA3L3Jjc2lkLWZpbmFsUHJvamVjdEYyNC5SbWQpCgoyLiB2MV9saWJzX3RvX3NhbXBsZS5SZHMgaXMgdGhlIGNvbWJpbmVkIGRhdGEgc2V0IG9mIFBJWEwgYW5kIExJQlMgdGhhdCBpbmNsdWRlcyB0aGUgZGlzdGFuY2UgZnJvbSBhIFBJWEwgYWJyYXNpb24gdG8gYSBMSUJTIHNhbXBsZS4gIApbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudERhdGEvdjFfbGlic190b19zYW1wbGUuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50RGF0YS9QSVhMX0xJQlNfQ29tYmluZWQuUmRzKS4gCgpGaXJzdGx5LCB3ZSBzZXQgdGhlIG51bWJlciBvZiBtZXRlcnMgZGlzdGFuY2UgdGhyZXNob2xkIGJldHdlZW4gYSBQSVhMIGFicmFzaW9uIGFuZCBMSUJTIHNhbXBsZS4gV2l0aGluIHRoZSB2MV9saWJzX3RvX3NhbXBsZS5SZHMsIHdoaWNoIE1hcmdvIGFuZCBJIGNvbGxhYm9yYXRlZCBvbiB0aGVyZSBpcyBhIGRpc3RhbmNlIHZhcmlhYmxlIHRoYXQgaXMgc2V0IHZpYSBhIGZ1bmN0aW9uIHRoYXQgTWFyZ28gY3JlYXRlZCB0byBtZWFzdXJlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGEgUElYTCBhYnJhc2lvbiBhbmQgTElCUyBzYW1wbGUgdXNpbmcgdGhlaXIgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBjb29yZGluYXRlcy4gCmBgYHtyfQptZXRlcnMgPC0gMTAwCmBgYAoKVG8gcHJlcGFyZSB0aGUgZGF0YSwgd2Ugd2lsbCBsb2FkIGluIHRoZSB2MV9saWJzX3RvX3NhbXBsZS5SZHMsIGdyb3VwIGJ5IGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgb2YgTElCUywgYW5kIGZpbHRlciBvdXQgZXZlcnkgTElCUyBzYW1wbGUgdGhhdCBoYXMgYSBsYXJnZXIgZGlzdGFuY2UgZnJvbSBpdHMgY29ycmVzcG9uZGluZyBQSVhMIGFicmFzaW9uIHRoYW4gc3BlY2lmaWVkIGluIHRoZSBjaG9zZW4gZGlzdGFuY2UgKG1ldGVyKSB2YWx1ZS4gSW4gb3JkZXIgdG8gbWFrZSBhIHNjYXR0ZXIgcGxvdCBvZiB0aGUgTElCUyBhbmQgUElYTCBwb2ludHMsIHdlIHdpbGwgY3JlYXRlIGEgbmV3IGRhdGEgZnJhbWUgb2YgZWFjaCB1bmlxdWUgUElYTCBhYnJhc2lvbiBhbmQgaXRzIGNvb3JkaW5hdGVzLiBUaGF0IGlzIHRoZSB1bmlxdWVfcGl4bCBkYXRhIGZyYW1lIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBwbG90IHRoZSBQSVhMIGFicmFzaW9uIGNvb3JkaW5hdGVzLgoKYGBge3IgfQpsaWJzX3RvX3NhbXBsZSA8LSByZWFkUkRTKCJ+L0RBUi1NYXJzLUYyNC9TdHVkZW50RGF0YS92MV9saWJzX3RvX3NhbXBsZS5SZHMiKQojbWFrZSBhIGZpbHRlcmVkIGRhdGEgZnJhbWUgdGhhdCBwaWNrcyB0aGUgbWF4IHBvaW50IG91dCBvZiBhbGwgbGlicyBzYW1wbGVzIGF0IGEgY2VydGFpbiB0YXJnZXQgCiMgZm9yIHNpbXBsaWNpdHkKZGZfZmlsdGVyZWQgPC0gbGlic190b19zYW1wbGUgJT4lCiAgZ3JvdXBfYnkoTGF0LmxpYnMsIExvbi5saWJzKSAlPiUKICBmaWx0ZXIoUG9pbnQubGlicyA9PSBtYXgoUG9pbnQubGlicykpICU+JQogIHVuZ3JvdXAoKQpkZl9kaXN0YW5jZV9maWx0ZXIgPC0gZGZfZmlsdGVyZWRbZGZfZmlsdGVyZWQkRGlzdGFuY2UgPD0gbWV0ZXJzLF0KCiNtYWtlIGEgZGF0YSBmcmFtZSB3aXRoIHRoZSB1bmlxdWUgcGl4bCBjb29yZGluYXRlcyBzaW5jZSB0aGV5IGFyZSBpbiBwYWlycyBvZiBpZGVudGljYWwgbGF0L2xvbgp1bmlxdWVfcGl4bCA8LSBkZl9maWx0ZXJlZCAlPiUKICBzZWxlY3QoTGF0LnBpeGwsIExvbi5waXhsLCBBYnJhc2lvbi5waXhsKSAlPiUgZGlzdGluY3QoKQpgYGAKCgojIyAzLjIgQ29udHJpYnV0aW9uCgpUaGUgbG9naXN0aWNzIG9mIGZpbHRlcmluZyB0aGUgb3JpZ2luYWwgZGF0YSBzZXQgaXMgbXkgd29yay4gUHJldmlvdXNseSwgSSBoYWQgdG8gZG8gYSBsb3QgbW9yZSBmaWx0ZXJpbmcgaW4gb3JkZXIgdG8gY2hvb3NlIHRoZSBkaXN0YW5jZSBhbmQgZ2V0IHVuaXF1ZSBMSUJTIHBvaW50cyBpbiBvcmRlciB0byBub3QgcHV0IHRvbyBtYW55IHBvaW50cyBvbiB0aGUgc2NhdHRlcnBsb3QuIE1hcmdvIGFuZCBJIHdvcmtlZCB0b2dldGhlciB0byBjcmVhdGUgdGhlIGRhdGEgc2V0IHRoYXQgSSB1c2UgaW4gdGhpcyBzZWN0aW9uICh2MV9saWJzX3RvX3NhbXBsZS5SZHMpIGJ5IGRlY2lkaW5nIGhvdyB0byBtYXRjaCB1cCBMSUJTIHRvIGNlcnRhaW4gUElYTCBhYnJhc2lvbnMuIE1hcmdvIGNyZWF0ZWQgdGhlIGRpc3RhbmNlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGRpc3RhbmNlIGJldHdlZW4gUElYTCBhYnJhc2lvbnMgYW5kIExJQlMgc2FtcGxlcyBhbmQgYWRkZWQgdGhhdCBjb2x1bW4gdG8gdGhlIGRhdGEgc2V0LiBUaGVuLCBEb25hIGZpeGVkIGFsbCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGluIHRoZSBkYXRhIHNldCBpbiBvcmRlciB0byBoYXZlIGNvbnNpc3RlbmN5IGFuZCBtYWtlIGl0IGVhc3kgdG8gdGVsbCB3aGljaCB2YXJpYWJsZSB3YXMgb3JpZ2luYWxseSBmcm9tIGVhY2ggZGF0YSBzZXQgKGV4LiBOYW1lLnBpeGwsIFRhcmdldC5saWJzKS4gSSB0aGVuIHVzZWQgdGhlIGRhdGEgdG8gY3JlYXRlIHBsb3RzIGFuZCBhbmFseXplLiBCZWxvdyBpcyBhIHNjYXR0ZXJwbG90IHNob3djYXNpbmcgdGhlIGRpc3RyaWJ1dGlvbiBvZiBQSVhMIGFicmFzaW9ucyBhbmQgY29ycmVzcG9uZGluZyBMSUJTIHNhbXBsZXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtYXggZGlzdGFuY2UgYmV0d2VlbiB0aGVtLiAKCgojIyAzLjMgTWV0aG9kcyBEZXNjcmlwdGlvbiAKCkkgY2hvc2UgdG8gdXNlIGdncGxvdCB0byBkaXNwbGF5IHRoZSBMSUJTIGFuZCBQSVhMIGRhdGEgZm9yIGVhc2llciBhbmFseXNpcyBvZiBzZWVpbmcgaG93IG1hbnkgTElCUyBzYW1wbGVzIGFsaWduIHdpdGggZGlmZmVyZW50IFBJWEwgYWJyYXNpb25zLiBJdCB3YXMgdmVyeSBpbnRlcmVzdGluZyB0byBjaGFuZ2UgYXJvdW5kIHRoZSBtYXggZGlzdGFuY2UgYW5kIHNlZSB3aGljaCBhbGlnbmVkIHdpdGggd2hpY2ggYWJyYXNpb24uIEluIHRlcm1zIG9mIGV4ZWN1dGlvbiwgaXQgdG9vayBtZSBhIGJpdCBvZiB0aW1lIHRvIG9yZ2FuaXplIGFsbCBvZiB0aGUgdGhvdWdodHMgTWFyZ28gYW5kIEkgaGFkIG9uIGhvdyB0byBjcmVhdGUgYW5kIG1hbmFnZSB0aGlzIGRhdGEgc2V0LiBPcmlnaW5hbGx5LCB3ZSBoYWQgcm91bmRlZCB0aGUgZGlzdGFuY2VzIHRvIHRoZSBuZWFyZXN0IHRob3VzYW5kdGggdG8gbWF0Y2ggdGhlbSwgYW5kIHRoZW4gd2VyZSBwbG90dGluZyB0aGF0IHdheS4gSG93ZXZlciwgdGhhdCBsZWZ0IGEgbG90IG9mIHJvb20gZm9yIGVycm9yIGFuZCB3YXNuJ3QgYXMgYWNjdXJhdGUuIENyZWF0aW5nIGEgZGlzdGFuY2UgZnVuY3Rpb24gYWxsb3dzIGZvciB0aGUgc2NpZW50aXN0IG9yIHBlcnNvbiB1c2luZyB0aGUgTWFycyBNaXNzaW9uIE1pbmRlciBBcHAgdG8gY2hvb3NlIHdoYXRldmVyIGRpc3RhbmNlIHRoZXkgd291bGQgbGlrZSBhbmQgYWxsb3dzIGZvciBtdWNoIG1vcmUgZnVuY3Rpb25hbGl0eS4gTW9kaWZ5aW5nIHRoZSBkYXRhIHNldCBtb3JlIGVuZGVkIHVwIGJlaW5nIG1vcmUgZWZmaWNpZW50IHRoYW4gYWRkaW5nIHNtYWxsIGVkaXRzIGFzIEkgd2FzIG1ha2luZyBteSBwbG90cyB3aGljaCB3YXMgb3JpZ2luYWxseSBtYWtpbmcgbWUgY3JhenkgKGFzIGluIGNoYW5naW5nIHZhcmlhYmxlIHR5cGVzIGlmIHRoZXkgd2VyZW4ndCB3aGF0IHRoZXkgd2VyZSBzdXBwb3NlZCB0byBiZSkuIEluIHRoZSBlbmQsIEkgbGVhcm5lZCBhIGxvdCBhYm91dCBkYXRhIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBjb25zaXN0ZW5jeSBhbmQgc3RheWluZyBvcmdhbml6ZWQgaXMga2V5IGFuZCBzYXZlcyBhIGxvdCBvZiB0aW1lIGxhdGVyIG9uLgoKCiMjIDMuNCBSZXN1bHQgYW5kIERpc2N1c3Npb24gCgpUbyBjcmVhdGUgYSBwbG90IG9mIHRoZSBMSUJTIGFuZCBQSVhMIGRhdGEgb3JnYW5pemVkIGJ5IHdoYXQgTElCUyBzYW1wbGVzIGFsaWduIHdpdGggd2hhdCBhYnJhc2lvbnMsIGZpcnN0IHBsb3R0ZWQgdGhlIExJQlMgc2FtcGxlcyBjb2xvcmVkIGJ5IHdoYXQgUElYTCBhYnJhc2lvbiB0aGV5IHdlcmUgY2xvc2VzdCB0bywgYW5kIHRoZW4gcGxvdHRlZCB0aCBQSVhMIGFicmFzaW9ucyBhcyByZWQgc3RhcnMgb24gdGhlIHBsb3QgdG8gc2hvdyB3aGVyZSB0aGUgUElYTCBhYnJhc2lvbnMgd2VyZSByZWxhdGl2ZSB0byB0aGUgTElCUyBzYW1wbGVzLgoKYGBge3IgfQojcGxvdCBvZiBsaWJzIGFuZCBwaXhsIGRhdGEgYnkgbGF0L2xvbgpnZ3Bsb3QoZGF0YSA9IGRmX2Rpc3RhbmNlX2ZpbHRlcikgKwogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gTG9uLmxpYnMsIHkgPSBMYXQubGlicywgY29sb3IgPSBBYnJhc2lvbi5waXhsKSkgKyAgICAgICAgICAgICAgICAgIyBDb2xvciBieSBhYnJhc2lvbgogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gTG9uLnBpeGwsIHkgPSBMYXQucGl4bCksIGRhdGEgPSB1bmlxdWVfcGl4bCwgY29sb3IgPSAicmVkIiwgc2hhcGUgPSAzLCBzaXplID0gMykgKyAjIEZpeGVkIGNvbG9yIGZvciB1bmlxdWVfcGl4bCBwb2ludHMKICBnZW9tX3RleHRfcmVwZWwobWFwcGluZyA9IGFlcyh4ID0gTG9uLnBpeGwsIHkgPSBMYXQucGl4bCwgbGFiZWwgPSBBYnJhc2lvbi5waXhsKSwgZGF0YSA9IHVuaXF1ZV9waXhsLAogICAgICAgICAgICAgICAgICB2anVzdCA9IDIsIGNvbG9yID0gInJlZCIpICsKICBsYWJzKHRpdGxlID0gcGFzdGUoIkxJQlMgU2FtcGxlcyBhbmQgUElYTCBBYnJhc2lvbnMgd2l0aGluIiwgbWV0ZXJzLCAibWV0ZXJzIiksCiAgICAgICB4ID0gIkxvbmdpdHVkZSIsCiAgICAgICB5ID0gIkxhdGl0dWRlIiwKICAgICAgIGNvbG9yID0gIlBJWEwgQWJyYXNpb24iLAogICAgICAgY2FwdGlvbiA9ICJEYXRhIGNvbGxlY3RlZCB1c2luZyBMSUJTIGFuZCBQSVhMIGluc3RydW1lbnRzIG9uIFBlcnNlcnZlcmFuY2Ugcm92ZXIuXG4gU2hvd3MgUElYTCBhYnJhc2lvbnMgcGxvdHRlZCBhcyByZWQgc3RhcnMsXG4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlcyBjb2xvcmVkIGJ5IHRoZWlyIGNsb3Nlc3QgUElYTCBhYnJhc2lvbi4iKSsgICAgICAgICAgIyBMYWJlbCBmb3IgdGhlIGNvbG9yIGxlZ2VuZCAKICMgQ2VudGVyIHRoZSBjYXB0aW9uIG9uIHRoZSBsZWZ0IHNpZGUKICB0aGVtZSgKICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDApICAjIEFsaWducyBjYXB0aW9uIHRvIHRoZSBsZWZ0CiAgKQoKI2FkZCBsZWdlbmQgZm9yIFBJWEwgaWRrIHdoeSBpdCdzIG5vdCB3b3JraW5nCmBgYAoKCiMjIDMuNSBDb25jbHVzaW9ucywgTGltaXRhdGlvbnMsIGFuZCBGdXR1cmUgV29yay4KCkkgYmVsaWV2ZSBteSBmaW5kaW5ncyBtYWtlIGl0IHZlcnkgZWFzeSBmb3IgcmVzZWFyY2hlcnMgYW5kIHNjaWVudGlzdHMgdG8gaGF2ZSBhIHZpc3VhbGl6YXRpb24gb2YgUElYTCBhbmQgTElCUyBzYW1wbGVzIHRoYXQgdGhleSB3YW50IHRvIHNlZSBiYXNlZCBvbiB3aGF0IG1heCBkaXN0YW5jZSB0aGV5IGFyZSBmb2N1c2luZyBvbiB3aGVuIGV4YW1pbmluZyBQSVhMIGFuZCBMSUJTIHRvZ2V0aGVyLiBGb3IgZnV0dXJlIHdvcmssIEkgdGhpbmsgYXMgbW9yZSBjb29yZGluYXRlcyBhbmQgZGF0YSBpcyBhZGRlZCB0byB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgYXMgdGhleSBiZWNvbWUgYXZhaWxhYmxlIGZyb20gTkFTQSB0aGlzIHdpbGwgY29udGludWUgdG8gYmUgYnVpbHQgdXBvbiBhbmQgYWx0aG91Z2ggaXQgaXNuJ3Qgc3VwZXIgY29tcGxpY2F0ZWQgb2YgYSBwbG90LCBpdCBwcm92aWRlcyBhIHZlcnkgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdmlzdWFsaXplIFBJWEwgYW5kIExJQlMuIAoKLSBBZGQgbW9yZSBhYm91dCBsaW1pdGF0aW9ucz8KCiMgNC4wIEZpbmRpbmcgMjogU29pbCBDb21wb3NpdGlvbiBBbmFseXNpcwpfR2l2ZSBhIGhpZ2hsZXZlbCBvdmVydmlldyBvZiB0aGUgbWFqb3IgZmluZGluZy4gV2hhdCBxdWVzdGlvbnMgd2VyZSB5b3VyIHRyeWluZyB0byBhZGRyZXNzLCB3aGF0IGFwcHJvYWNoZXMgZGlkIHlvdSBlbXBsb3ksIGFuZCB3aGF0IGhhcHBlbmVkP18KClVzaW5nIHRoZSBMSUJTIGFuZCBQSVhMIGNvbWJpbmVkIGRhdGEgc2V0LCBJIGNyZWF0ZWQgYSBwbG90IG9mIHRoZSBjb21wb3NpdGlvbiBwZXJjZW50YWdlcyBvZiBjaGVtaWNhbCBjb21wb3VuZHMgc3VjaCBhcyBTaTAyLCBLMjAsIGV0Yy4gdXNpbmcgbG9nIHNjYWxpbmcgdG8gY29tcGFyZSB0aGUgY29tcG9zaXRpb25zIG9mIGEgUElYTCBhYnJhc2lvbiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGUgY29tcG9zaXRpb25zIChiYXNlZCBvbiB0aGUgTElCUyBzYW1wbGVzIGZvciB4IGRpc3RhbmNlIGF3YXkgZnJvbSBhIFBJWEwgYWJyYXNpb24pLiBUaGUgcXVlc3Rpb24gSSB3YXMgdHJ5aW5nIHRvIGFuc3dlciB3YXMgaG93IGRvZXMgdGhlIExJQlMgZGF0YSBvZiBhIGNlcnRhaW4gYXJlYSBjb21wYXJlIHRvIHRoZSBQSVhMIGRhdGEgb2YgdGhhdCBhcmVhPyBCeSBsb29raW5nIGF0IHRoZSBjb21wb3NpdGlvbiBvZiB0aGUgc29pbCBpbiBjZXJ0YWluIGxvY2F0aW9ucywgd2UgY2FuIGNvbXBhcmUgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBQSVhMIGFicmFzaW9uIGFuZCByZWxhdGluZyBMSUJTIHNhbXBsZXMgZm9yIGEgY2VydGFpbiBhcmVhIHV0aWxpemluZyB0aGUgc2FtZSBkYXRhIHNldCAodjFfbGlic190b19zYW1wbGUuUm1kKS4gSW4gb3JkZXIgdG8gYWNjb21wbGlzaCB0aGlzLCAKCgojIyA0LjEgRGF0YSwgQ29kZSwgYW5kIFJlc291cmNlcwpIZXJlIGlzIGEgbGlzdCBkYXRhIHNldHMsIGNvZGVzLCB0aGF0IGFyZSB1c2VkIGluIHlvdXIgd29yay4gQWxvbmcgd2l0aCBicmllZiBkZXNjcmlwdGlvbiBhbmQgVVJMIHdoZXJlIHRoZXkgYXJlIGxvY2F0ZWQuCgoxLiBwZXRlcmNfZmluYWxQcm9qZWN0RjI0LlJtZCAod2l0aCBrbml0IHBkZiBhbmQgaHRtbCkgaXMgdGhpcyBub3RlYm9vay4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvdHJlZS9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA3L3BldGVyY19maW5hbFByb2plY3RGMjQuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L3RyZWUvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwNy9wZXRlcmNfZmluYWxQcm9qZWN0RjI0LlJtZCkKCjIuIHBldGVyY19hc3NpZ25tZW50NS5SbWQgKHdpdGgga25pdCBwZGYgYW5kIGh0bWwpIHdoaWNoIGlzIG15IHByZXZpb3VzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC90cmVlL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDUvcGV0ZXJjX2Fzc2lnbWVudDA1LlJtZF0oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC90cmVlL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDUvcGV0ZXJjXy1maW5hbFByb2plY3RGMjRfYXNzaWdubWVudDA1LlJtZCkKCjMuIHN1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHMgd2hpY2ggaXMgdGhlIG9yaWdpbmFsIExJQlMgZGF0YSBnaXZlbiB0byBvdXIgcmVzZWFyY2ggZ3JvdXAuCltodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9EYXRhL3N1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHNdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcykKCjQuIHBpeGxfc29sX2Nvb3JkaW5hdGVzLlJkcywgd2hpY2ggaXMgdGhlIGRhdGEgc2V0IGNvbnRhaW5pbmcgdGhlIFBJWEwgZGF0YSwgc29sLCBhbmQgY29vcmRpbmF0ZXMuCltodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50RGF0YS9waXhsX3NvbF9jb29yZGluYXRlcy5SZHNdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL1N0dWRlbnREYXRhL3BpeGxfc29sX2Nvb3JkaW5hdGVzLlJkcykKCjQuIExJQlNfdHJhaW5pbmdfc2V0X3F1YXJ0aWxlcy5SZHMgaXMgdGhlIGRhdGEgd2l0aCBlYXJ0aCBxdWFydGlsZSByZWZlcmVuY2UgZGF0YS4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvTElCU190cmFpbmluZ19zZXRfcXVhcnRpbGVzLlJkc10oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9MSUJTX3RyYWluaW5nX3NldF9xdWFydGlsZXMuUmRzKS4gCgpUbyBwcmVwYXJlIHRoZSBkYXRhLCBJIHN0YXJ0IGJ5IGxvYWRpbmcgaW4gdGhlIExJQlMgZGF0YS4gVGhlbiwgd2UgZHJvcCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGNvbHVtbnMgYW5kIHN1bSBvZiBwZXJjZW50YWdlIGNvbHVtbnMgbGVhdmluZyB1cyB3aXRoIGp1c3QgdGhlIHdlaWdodGVkIGNvbXBvc2l0aW9uIGluIHRlcm1zIG9mIG51bWVyaWNhbCBkYXRhLiBXZSBhbHNvIHJlbW92ZSB0aGUgc2NjdCB2YWx1ZXMsIGFzIHRob3NlIHZhbHVlcyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgZWFydGggcmVmZXJlbmNlIHNhbXBsZXMgdGhhdCBQZXJzZXJ2ZXJhbmNlIGNhcnJpZXMgd2l0aCBpdC4gVGhlcmVmb3JlLCB0aGV5IHdpbGwgbm90IGJlIHZlcnkgcmVsZXZhbnQgd2hlbiBwbG90dGluZyB0aGUgTElCUyBkYXRhIGFzIHdlIGFyZSBmb2N1c2VkIG9uIHRoZSBNYXJzIHNvaWwgY29tcG9zaXRpb25zLgoKYGBge3J9CiNFYXJ0aCBxdWFydGlsZXMKZWFydGhxdWFydGlsZXMuZGY8LXJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvRGF0YS9MSUJTX3RyYWluaW5nX3NldF9xdWFydGlsZXMuUmRzIikKI0xvYWQgaW4gTElCUyBkYXRhCmxpYnMuZGYgPC0gcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9EYXRhL3N1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHMiKQojRHJvcCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGZlYXR1cmVzLCB0aGUgc3VtIG9mIHRoZSBwZXJjZW50YWdlcywgCiN0aGUgZGlzdGFuY2UsIGFuZCB0aGUgdG90YWwgZnJlcXVlbmNpZXMKbGlicy5kZiA8LSBsaWJzLmRmICU+JSAKICBzZWxlY3QoIShjKGRpc3RhbmNlX21tLFRvdC5FbS4sU2lPMl9zdGRldixUaU8yX3N0ZGV2LEFsMk8zX3N0ZGV2LEZlT1Rfc3RkZXYsCiAgICAgICAgICAgICBNZ09fc3RkZXYsTmEyT19zdGRldixDYU9fc3RkZXYsSzJPX3N0ZGV2LFRvdGFsKSkpCiMgQ29udmVydCB0aGUgcG9pbnRzIHRvIG51bWVyaWMKbGlicy5kZiRwb2ludCA8LSBhcy5udW1lcmljKGxpYnMuZGYkcG9pbnQpCmxpYnMuZGZbLDY6MTNdIDwtIHNhcHBseShsaWJzLmRmWyw2OjEzXSxhcy5udW1lcmljKQojcmVtb3ZlIHRoZSBzY2N0L3JlZmVyZW5jZSBzYW1wbGVzCmxpYnMuZGY8LWxpYnMuZGYlPiUKICBmaWx0ZXIoIShncmVwbCgic2NjdCIsIHRhcmdldCkpKQojYWRkIGEgY29sdW1uIHRvIGluZGljYXRlIHRoZSBuZWFyZXN0IHBpeGwKbGlicy5kZjwtY2JpbmQobmVhcmVzdHBpeGw9MCxsaWJzLmRmKQojbWFrZSBhIGRhdGFmcmFtZSBvZiBqdXN0IHRoZSBMSUJTIExhdC9Mb25nIGFuZCB0YXJnZXQgbmFtZSBhbmQgcmVtb3ZlIGR1cGxpY2F0ZXMKbGlic3RhcmdldHMuZGY8LWxpYnMuZGZbLGMoMSwzLDQsNSldCmxpYnN0YXJnZXRzLmRmPC1kaXN0aW5jdChsaWJzdGFyZ2V0cy5kZikKYGBgCgpTZXQgbWV0ZXJzIGFuZCBjaG9zZW4gYWJyYXNpb24gdG8gYWN0IGFzIGEgc2xpZGVyIGluIHRoZSAyZCBhcHAuCmBgYHtyfQojQ2hvb3NlIG1heCBkaXN0YW5jZSB2YXJpYWJsZSBiZXR3ZWVuIFBJWEwgYW5kIExJQlMgZGF0YQptZXRlcnMgPSAxMDAKI0Nob29zZSBQSVhMIGFicmFzaW9uIHlvdSB3YW50IHRvIGxvb2sgYXQKYWJyYXNpb25fbmFtZSA9ICJCZXJyeSBIb2xsb3ciCmBgYAoKTmV4dCwgd2UgbG9hZCBpbiB0aGUgUElYTCBkYXRhLiBXZSByZW1vdmUgdGhlIGF0bW9zcGhlcmljIHNhbXBsZSBhbmQgb25seSBzZWxlY3Qgb25lIFBJWEwgc2FtcGxlIG9mIGVhY2ggYWJyYXNpb24uCmBgYHtyLCBkYXRhMDJ9CiNyZWFkIGluIHBpeGwgZGF0YSB3aXRoIGxhdC9sb25nCnBpeGwuZGY8LXJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvU3R1ZGVudERhdGEvcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzIikKI2luY2x1ZGUgb25seSBwaXhsIG1ldGFkYXRhCnBpeGwuZGY8LXBpeGwuZGYgJT4lCiAgc2VsZWN0KGMoMSwyLDE5LDIwLDIyKSkKI2NvbnZlcnQgTGF0L0xvbmcgdG8gbnVtZXJpYwpwaXhsLmRmJExhdCA8LSBhcy5udW1lcmljKHBpeGwuZGYkTGF0KQpwaXhsLmRmJExvbmcgPC0gYXMubnVtZXJpYyhwaXhsLmRmJExvbmcpCiNyZW1vdmUgcm93cyBzbyB3ZSBvbmx5IGhhdmUgb25lIHNhbXBsZSBwZXIgYWJyYXNpb24gYW5kIHJlbW92ZSBhdG1vc3BoZXJpYyBzYW1wbGUKcGl4bC5kZjwtcGl4bC5kZltjKDIsNCw2LDgsMTAsMTIsMTQsMTYpLF0KYGBgCgpOZXh0LCB3ZSB3aWxsIGluaXRpYWxpemUgYSBkaXN0YW5jZSB2YXJpYWJsZSAodG8gaW5kaWNhdGUgZGlzdGFuY2UgYmV0d2VlbiBQSVhMIGFicmFzaW9uIGFuZCBMSUJTIHRhcmdldCkgYW5kIGFsc28gaW5pdGlhbGl6ZSBlYWNoIFBJWEwgYWJyYXNpb24sIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBtYXJrIHdoaWNoIFBJWEwgYWJyYXNpb24gdGhlIExJQlMgc2FtcGxlIGlzIGNsb3Nlc3QgdG8gYnkgdXNpbmcgYSBmYWN0b3Igb2YgMCBvciAxLiAKYGBge3J9CmxpYnN0YXJnZXRzLmRmPC1jYmluZChsaWJzdGFyZ2V0cy5kZiwiRGlzdGFuY2UiPTAsIkJlbGxlZ3JhZGUiPTAsIkRvdXJiZXMiPTAsIlF1YXJ0aWVyIj0wLCJBbGZhbGZhIj0wLCJUaG9ybnRvbkdhcCI9MCwiQmVycnkgSG9sbG93Ij0wLCJOb3ZhcnVwdGEiPTAsIlVnYW5payBJc2xhbmQiPTApCmBgYAoKVGhlIGRpc3RhbmNlIGZ1bmN0aW9uIGJlbG93IHdpbGwgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gTElCUyB0YXJnZXQgYW5kIGFsbCB0aGUgUElYTCBhYnJhc2lvbnMsIGFuZCBwaWNrIHRoZSBzbWFsbGVzdCBkaXN0YW5jZSB0byBwaWNrIHRoZSBjbG9lc3QgUElYTCBhYnJhc2lvbiB0byB0aGF0IExJQlMgdGFyZ2V0LgpgYGB7cn0KZm9yKGkgaW4gMTpucm93KGxpYnN0YXJnZXRzLmRmKSkgewogICAgbGlic3RhcmdldHMuZGZbaSxjKDY6MTMpXTwtYyhkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbMSxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbMixjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbMyxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNCxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNSxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNixjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNyxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbOCxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpKQogICAgCiAgICBsaWJzdGFyZ2V0cy5kZltpLDFdPC13aGljaC5taW4obGlic3RhcmdldHMuZGZbaSxjKDY6MTMpXSkKICAgIGxpYnN0YXJnZXRzLmRmW2ksNV08LW1pbihsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldKQp9CmxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPC1hcy5mYWN0b3IobGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGwpCmxldmVscyhsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bCk8LShjKCJCZWxsZWdyYWRlIiwiRG91cmJlcyIsIlF1YXJ0aWVyIiwiQWxmYWxmYSIsIlRob3JudG9uR2FwIiwiQmVycnkgSG9sbG93IiwiTm92YXJ1cHRhIiwiVWdhbmlrIElzbGFuZCIpKQpgYGAKCkJlbG93IGlzIGFub3RoZXIgaW5pdGlhbGl6ZXIgZm9yIHRoZSBQSVhMIGFicmFzaW9uIGRhdGEuIFRoaXMgc2V0cyB0aGUgdmFyaWFibGVzIGZvciBlYWNoIFBJWEwgYWJyYXNpb24uCmBgYHtyfQpCZWxsZWdyYWRlPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkJlbGxlZ3JhZGUiLF0kdGFyZ2V0CkRvdXJiZXM8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iRG91cmJlcyIsXSR0YXJnZXQKUXVhcnRpZXI8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iUXVhcnRpZXIiLF0kdGFyZ2V0CkFsZmFsZmE8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQWxmYWxmYSIsXSR0YXJnZXQKVGhvcm50b25HYXA8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iVGhvcm50b25HYXAiLF0kdGFyZ2V0CkJlcnJ5SG9sbG93PC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkJlcnJ5IEhvbGxvdyIsXSR0YXJnZXQKTm92YXJ1cHRhPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09Ik5vdmFydXB0YSIsXSR0YXJnZXQKVWdhbmlrSXNsYW5kPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlVnYW5payBJc2xhbmQiLF0kdGFyZ2V0CmBgYAoKTmV4dCwgd2UgZmlsdGVyIG91dCB0aGUgTElCUyB0YXJnZXRzIHRoYXQgYXJlIG5vdCB3aXRoaW4gdGhlIHNwZWNpZmllZCBkaXN0YW5jZSB2YXJpYWJsZS4gVGhlbiwgd2UgbWVyZ2UgdGhlIExJQlMgZGF0YSB3aXRoIHRoZSByZXNwZWN0aXZlIFBJWEwgYWJyYXNpb24gYnkgbXV0YXRpbmcgYW5kIGFkZGluZyBhbiBhYnJhc2lvbiBjb2x1bW4gdGhhdCBoYXMgdGhlIGFicmFzaW9uIG5hbWUgY2xvc2VzdCB0byBlYWNoIExJQlMgdGFyZ2V0LiBXZSBhbHNvIGFkZCBhIGNvbHVtbiwgTElCUyBvciBQSVhMLCB3aGljaCBkZW5vdGVzIGlmIHRoZSByb3cgb2YgZGF0YSBpcyBmcm9tIHRoZSBQSVhMIGFuZCBMSUJTIGRhdGEgc2V0cy4KYGBge3J9CmluY2x1ZGVkLmxpYnM8LShsaWJzdGFyZ2V0cy5kZiU+JQogIGZpbHRlcihEaXN0YW5jZTxtZXRlcnMpKSR0YXJnZXQKbGlicy5tYXRyaXggPC1saWJzLmRmICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBpbmNsdWRlZC5saWJzKQpsaWJzLm1hdHJpeCA8LSBsaWJzLm1hdHJpeFssYyg1LDc6MTQpXQpsaWJzLm1hdHJpeDwtbGlicy5tYXRyaXhbLGMoMToyLDQ6OSwzKV0KbGlicy5tYXRyaXg8LWNiaW5kKCJBYnJhc2lvbiI9MCxsaWJzLm1hdHJpeCkKbGlicy5tYXRyaXg8LWxpYnMubWF0cml4JT4lCiAgbXV0YXRlKEFicmFzaW9uID0gaWZlbHNlKHRhcmdldCVpbiVBbGZhbGZhLCJBbGZhbGZhIiwgCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIEJlbGxlZ3JhZGUsICJCZWxlZ3JhZGUiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBCZXJyeUhvbGxvdywgIkJlcnJ5IEhvbGxvdyIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIERvdXJiZXMsICJEb3VyYmVzIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgTm92YXJ1cHRhLCAiTm92YXJ1cHRhIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgUXVhcnRpZXIsICJRdWFydGllciIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFRob3JudG9uR2FwLCAiVGhvcm50b25HYXAiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBVZ2FuaWtJc2xhbmQsICJVZ2FuaWsgSXNsYW5kIixBYnJhc2lvbikpKSkpKSkpKQpsaWJzLm1hdHJpeDwtY2JpbmQobGlic29ycGl4bD0xLGxpYnMubWF0cml4KQpgYGAKCk5leHQsIHdlIHdpbGwgcmVhZCBpbiB0aGUgUElYTCBkYXRhLiBXZSB3aWxsIHJlbW92ZSB0aGUgYXRtb3NwaGVyaWMgc2FtcGxlIChmaXJzdCBzYW1wbGUpIGFuZCBvbmx5IGNob29zZSBvbmUgb2YgZWFjaCBQSVhMIHNhbXBsZSBpbiBhcyBlYWNoIGFicmFzaW9uIGhhcyB0d28gc2FtcGxlcyAob25seSBvbmUgd2lsbCBiZSBuZWNlc3NhcnkgZm9yIHRoZSBwbG90KS4KCmBgYHtyLCBkYXRhMDN9CiNyZWFkIGluIHBpeGwgZGF0YSB3aXRoIGxhdC9sb25nCnBpeGwuZGY8LXJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvU3R1ZGVudERhdGEvcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzIikKcGl4bC5kZjwtcGl4bC5kZiAlPiUKICBzZWxlY3QoYyg1OjgsMTI6MTQsMTcsMTksMTgsMjIpKQojcmVvcmRlciBwaXhsIGNvbHVtbnMgc28gdGhhdCBpdCBtYXRjaGVzIGxpYnMgZGF0YSBvcmdhbml6YXRpb24KcGl4bC5kZjwtcGl4bC5kZlssYygxMSwxMCw0LDMsOCwyLDYsMSw1LDcpXQojcmVtb3ZlIGF0bW9zcGhlcmljIHNhbXBsZQpwaXhsLmRmPC1waXhsLmRmWzI6MTYsXQpwaXhsLmRmPC1jYmluZChsaWJzb3JwaXhsPTAscGl4bC5kZikKYGBgCgpGaW5hbGx5LCB3ZSBtZXJnZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgd2UgaGF2ZSBtb2RpZmllZCB0aHVzIGZhciBmb3IgYSBjb21iaW5lZCBMSUJTIGFuZCBQSVhMIGRhdGEgZnJhbWUgc3VpdGFibGUgZm9yIGEgc29pbCBjb21wb3NpdGlvbiBsaW5lIHBsb3QuCmBgYHtyfQpjb2xuYW1lcyhwaXhsLmRmKTwtY29sbmFtZXMobGlicy5tYXRyaXgpCnBpeGxsaWJzLmRmPC1yYmluZChwaXhsLmRmLGxpYnMubWF0cml4KQpgYGAKCiMjIDQuMiBDb250cmlidXRpb24KClNvbWUgb2YgdGhlIGRhdGEgbWFuaXB1bGF0aW5nIHdvcmsgd2FzIE1hcmdvJ3MsIHN1Y2ggYXMgdGhlIGRpc3RhbmNlIGZ1bmN0aW9uLiBJbiB0ZXJtcyBvZiBwaXZvdGluZyB0aGUgZGF0YSBmcmFtZSBhbmQgdGhlIG90aGVyIHN0ZXBzIG9mIHRoZSBwcmVwcm9jZXNzaW5nIGlzIG15IG93biB3b3JrLiBUaGUgbWFuaXB1bGF0aW5nIGJlbG93IHRvIHBsb3QgdGhlIGxpbmUgc29pbCBjb21wb3NpdGlvbiBwbG90cyBpcyBteSBvd24uCgojIyA0LjMgTWV0aG9kcyBEZXNjcmlwdGlvbiAKCldoZW4gZGVjaWRpbmcgaG93IHRvIGFwcHJvYWNoIHRoZSBjb25jZXB0IG9mIGJ1aWxkaW5nIHNvaWwgY29tcG9zaXRpb24gcGxvdHMgb2YgZWFjaCBQSVhMIGFicmFzaW9uIGFuZCB0aGUgY29ycmVzcG9uZGluZyBMSUJTIHRhcmdldHMgd2l0aGluIGEgY2VydGFpbiBkaXN0YW5jZSBtYXhpbXVtLCBJIGRlY2lkZWQgdGhlIGJlc3Qgd2F5IHdhcyB0byBzdGFydCB3aXRoIHRoZSBvcmlnaW5hbCBkYXRhIHNldHMgYW5kIG1vZGlmeSB0aGVtIGFzIG5lZWRlZC4gRm9yIHRoZSBhY3R1YWwgcGxvdCwgdGhlIGJlc3Qgd2F5IHRvIGZvcm1hdCB0aGUgZGF0YSBjb3JyZWN0bHkgaXMgdG8gcGl2b3QgaXQsIGFzIEkgbmVlZCB0aGUgeCBheGlzIHRvIGJlIHRoZSBjb2x1bW4gbmFtZXMgaW4gdGhlIGN1cnJlbnQgZGF0YSBmcmFtZSB3ZSBoYXZlIChTaU8yIGFuZCBvdGhlciBjb21wb3NpdGlvbnMpIGFuZCB0aGUgeSBheGlzIHRvIGJlIHRoZSB3ZWlnaHRlZCBjb21wb3NpdGlvbiB2YWx1ZXMuIFdlIGFsc28gbmVlZCBhbiBpbmRpY2F0b3Igb2YgaWYgdGhlIGRhdGEgaXMgZnJvbSBQSVhMIG9yIExJQlMsIHdoaWNoIGFsc28gaXMgaGVscGZ1bCBmb3IgYnVpbGRpbmcgdGhlIGxpbmUgcGxvdHMuIAoKVXNlcnMgd2lsbCBoYXZlIHRvIHNldCB0aGUgZGlzdGFuY2UgdmFyaWFibGUgaW4gb3JkZXIgdG8gY2hvb3NlIHRoZSBtYXggZGlzdGFuY2UgYmV0d2VlbiBQSVhMIGFicmFzaW9ucyBhbmQgTElCUyB0YXJnZXRzLiBUaGlzIGNhbiB2YXN0bHkgY2hhbmdlIHRoZSBudW1iZXIgb2YgbGluZXMgb24gdGhlIHBsb3RzIHdoaWNoIGNhbiBoZWxwIHByZXZlbnQgb3ZlcmNyb3dkZWQgcGxvdHMuIFVzZXJzIGFsc28gY2FuIHNldCBhIHZhcmlhYmxlIHRvIGNob29zZSBhIHNwZWNpZmljIFBJWEwgYWJyYXNpb24gYW5kIGNvcnJlc3BvbmRpbmcgTElCUyB0YXJnZXRzLCB3aGljaCBpcyBlYXNpZXIgdG8gaW50ZXJwcmV0IGFzIHBsb3R0aW5nIGFsbCBvZiB0aGUgTElCUyBhbmQgUElYTCBjb21wb3NpdGlvbiBpbmZvcm1hdGlvbiBvbiBsaW5lIHBsb3RzIGxlYWRzIHRvIHZlcnkgY29uZGVuc2VkIGdyYXBocyB0aGF0IGFyZSBoYXJkIHRvIHJlYWQuCgojIyA0LjQgUmVzdWx0IGFuZCBEaXNjdXNzaW9uIAoKRmlyc3QsIHdlIHdpbGwgdHVybiB0aGUgZWFydGggcXVhcnRpbGUgaW5mb3JtYXRpb24gaW50byBhIGxvbmcgZGF0YSBmcmFtZSAobWVhbmluZyBwaXZvdGluZyB0aGUgY29sdW1ucyBpbnRvIHRoZSB2YWx1ZXMpLiAKYGBge3J9CiMgRWFydGggcXVhcnRpbGVzCmVhcnRocXVhcnRpbGVzX2xvbmcgPC0gZWFydGhxdWFydGlsZXMuZGYgJT4lCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBzdGFydHNfd2l0aCgiU2lPMiIpOmxhc3RfY29sKCksIG5hbWVzX3RvID0gIkNvbXBvdW5kIiwgdmFsdWVzX3RvID0gIlBlcmNlbnRhZ2UiKQoKZWFydGhxdWFydGlsZXNfbG9uZyA8LSBlYXJ0aHF1YXJ0aWxlc19sb25nICU+JSByZW5hbWUoUXVhcnRpbGVzID0gYFRyYWluaW5nIHNldCBRdWFydGlsZXNgKQpgYGAKClRoZW4sIHRoZSBkYXRhIHdpbGwgYmUgZmlsdGVyZWQgdG8gb25seSBpbmNsdWRlIHRoZSBkYXRhIGZyb20gYSBzcGVjaWZpYyBQSVhMIGFicmFzaW9uIGNob3NlbiBieSB0aGUgdXNlci4gVGhlIGRhdGEgaXMgcGl2b3RlZCBpbnRvIGEgbG9uZyBmb3JtYXQsIGFuZCB0aGUgY29sdW1ucyBhcmUgcmVvcmRlcmVkIHRvIG1pbWljIHNpbWlsYXIgcGxvdHMgZnJvbSBOQVNBIHBhcGVycy4KYGBge3J9CiMgRmlsdGVyIGZvciB0aGUgc3BlY2lmaWMgYWJyYXNpb24gc2FtcGxlLCBlLmcuLCAiQWxmYWxmYSIKcGl4bGxpYnNfZmlsdGVyZWQgPC0gcGl4bGxpYnMuZGYgJT4lCiAgZmlsdGVyKEFicmFzaW9uID09IGFicmFzaW9uX25hbWUpCgojIFBpdm90IHRoZSBkYXRhIHRvIGxvbmdlciBmb3JtYXQgZm9yIGdncGxvdApwaXhsbGlic19sb25nIDwtIHBpeGxsaWJzX2ZpbHRlcmVkICU+JQogIHBpdm90X2xvbmdlcihjb2xzID0gc3RhcnRzX3dpdGgoIlNpTzIiKTpsYXN0X2NvbCgpLCBuYW1lc190byA9ICJDb21wb3VuZCIsIHZhbHVlc190byA9ICJQZXJjZW50YWdlIikKCmRlc2lyZWRfb3JkZXIgPC0gYygiU2lPMiIsICJBbDJPMyIsICJGZU9UIiwgIk1nTyIsICJDYU8iLCAiTmEyTyIsICJLMk8iLCAiVGlPMiIpICAjIFNwZWNpZnkgeW91ciBjdXN0b20gb3JkZXIgaGVyZQpwaXhsbGlic19sb25nJENvbXBvdW5kIDwtIGZhY3RvcihwaXhsbGlic19sb25nJENvbXBvdW5kLCBsZXZlbHMgPSBkZXNpcmVkX29yZGVyKQpgYGAKCkZvciB0aGUgcGxvdCwgd2UgdXNlIGdncGxvdCB0byBwbG90IHRoZSBwaXhsbGlic19sb25nIGRhdGEgZnJhbWUgd2UgY3JlYXRlZC4gVGhlIHBsb3QgaXMgY29sb3JlZCBieSBpZiB0aGUgbGluZSBpcyBhIFBJWEwgYWJyYXNpb24ncyBjb21wb3NpdGlvbiBvciBhIExJQlMgdGFyZ2V0J3MgY29tcG9zaXRpb24uIFdlIGFsc28gYWRkIGEgbGF5ZXIgd2l0aCB0aGUgZWFydGggcXVhcnRpbGUgaW5mb3JtYXRpb24sIHdoaWNoIGlzIHRoZSBkb3R0ZWQgbGluZXMuCmBgYHtyfQojIE1hcCB0aGUgUElYTC9MSUJTIGNvbHVtbiB0byBjb2xvciBhbmQgdXNlIHRhcmdldF9uYW1lIHRvIGRpZmZlcmVudGlhdGUgbGluZXMKZ2dwbG90KHBpeGxsaWJzX2xvbmcsIGFlcyh4ID0gQ29tcG91bmQsIHkgPSBQZXJjZW50YWdlLCBjb2xvciA9IGFzLmZhY3RvcihsaWJzb3JwaXhsKSwgZ3JvdXAgPSB0YXJnZXQpKSArCiAgZ2VvbV9saW5lKCkgKwogIGdlb21fcG9pbnQoKSArCiAgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zPSdsb2cxMCcpICsKICAjIEFkZCBFYXJ0aCBxdWFydGlsZSBsaW5lcyB1c2luZyBlYXJ0aHF1YXJ0aWxlc19sb25nCiAgZ2VvbV9saW5lKGRhdGEgPSBlYXJ0aHF1YXJ0aWxlc19sb25nLCBhZXMoeCA9IENvbXBvdW5kLCB5ID0gUGVyY2VudGFnZSwgbGluZXR5cGUgPSBRdWFydGlsZXMsIGdyb3VwID0gUXVhcnRpbGVzKSwgCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgbGluZXR5cGUgPSAiZG90dGVkIikgKwogIGxhYnModGl0bGUgPSBwYXN0ZSgiU29pbCBDb21wb3NpdGlvbiBmb3IgUElYTCBhYnJhc2lvbiIsYWJyYXNpb25fbmFtZSwiYW5kIExJQlMgd2l0aGluIiwgbWV0ZXJzLCAibWV0ZXJzIiwgc2VwID0gIiAiKSwKICAgICAgIHggPSAiQ2hlbWljYWwgQ29tcG91bmQiLAogICAgICAgeSA9ICJXZWlnaHQgUGVyY2VudGFnZSIsCiAgICAgICBjb2xvciA9ICJNZWFzdXJlbWVudCBUeXBlIiwKICAgICAgIGxpbmV0eXBlID0gIkVhcnRoIFF1YXJ0aWxlcyIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiMCIgPSAiYmx1ZSIsICIxIiA9ICJyZWQiKSwgbGFiZWxzID0gYygiUElYTCIsICJMSUJTIikpICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCkkgc3RpbGwgcGxhbiB0byB1cGRhdGUgYW5kIHRyeSB1c2luZyB0aGUgZ2dwbG90bGF5IGZlYXR1cmUgdG8gaW5jb3Jwb3JhdGUgYWxsIHRoZSBhYnJhc2lvbnMgYW5kIGRhdGEgb250byBvbmUgZ3JpZCBvZiBsaW5lIHBsb3RzLiBJIGFsc28gYW0gZ29pbmcgdG8gYWRkIHBsb3RzIHdoZXJlIHRoZSBtZWFuIGlzIHRha2VuIG9mIGFsbCB0aGUgTElCUyB0YXJnZXRzIHRoYXQgY29ycmVzcG9uZCB0byBhIFBJWEwgYWJyYXNpb24gc28gdGhlIHBsb3Qgd2lsbCBvbmx5IGhhdmUgb25lIExJQlMgbGluZSBhbmQgb25lIFBJWEwgbGluZSAoYWxvbmcgd2l0aCB0aGUgcmVmZXJlbmNlcyksIHRoaXMgaXMgYWxsIGp1c3QgZm9yIHRoZSBkcmFmdC4gSSBhbHNvIG5lZWQgdG8gb25seSBhZGQgY2VydGFpbiBxdWFydGlsZSBpbmZvcm1hdGlvbiBhbmQgbGFiZWwgdGhlbSwgdGhpcyBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgb2YgdGhlIHByZXZpb3VzIHBsb3QuIEFsc28gbWF5YmUgd2lsbCBhZGQgaW4gU0NDVCB2YWx1ZXMgYXMgcmVmZXJlbmNlcywgbm90IHN1cmUgaWYgdGhleSBhcmUgc3VwZXIgcmVsZXZhbnQgb3IgaG93IHRvIHNvcnQgdGhlbS4KCiMjIDQuNSBDb25jbHVzaW9ucyBhbmQgRnV0dXJlIFdvcmsKVGhpcyBmaW5kaW5nIGNhbiBiZSB1c2VkIGJ5IGdlb2xvZ2lzdHMgdG8gYW5hbHl6ZSB3aGF0IGRpZmZlcmVudCBzb2lsIGNvbXBvc2l0aW9ucyBhcm91bmQgZGlmZmVyZW50IFBJWEwgYWJyYXNpb25zIGNhbiBtZWFuIGZvciBsaWZlIG9uIE1hcnMuIEZvciBleGFtcGxlLCBveGlkZSBwcmVzZW5jZSBkb2Vzbid0IG5lY2Vzc2FyaWx5IGluZGljYXRlIGxpZmUsIGJ1dCBpdCBjb3VsZCBpbmRpY2F0ZSBiaW9sb2dpY2FsIG9yIGNoZW1pY2FsIGxpZmUgcHJvY2Vzc2VzLiBGb3IgZXhhbXBsZSwgQ2FPIGNhbiBpbmRpY2F0ZSB0aGUgcHJlc2VuY2Ugb2Ygb2xkIGJpb2xvZ2ljYWwgbWF0ZXJpYWwgbGlrZSBzaGVsbHMgb3IgZm9zc2lscy4KLUFkZCBtb3JlIGFib3V0IGZ1dHVyZSB3b3JrLCBub3Qgc3VyZSB3aGF0IGVsc2UgdG8gaW5jbHVkZQoKIyA1LjAgRmluZGluZyAzOiBBbmFseXppbmcgQ2F0aW9uIENvbWJpbmF0aW9ucyB1c2luZyBMSUJTIGFuZCBQSVhMIG1hdGNoZWQgZGF0YQpVc2luZyB0aGUgTElCUyBhbmQgUElYTCBjb21iaW5lZCBkYXRhIHNldCwgd2UgY3JlYXRlZCBhIHRlcm5hcnkgcGxvdCB0byBzaG93IHRoZSBkaXN0cmlidXRpb24gb2YgTElCUyBzYW1wbGVzIHNvcnRlZCBieSB3aGF0IFBJWEwgYWJyYXNpb24gdGhleSBhcmUgY2xvc2VzdCB0byAoYmFzZWQgb24gYSBjaG9zZW4gZGlzdGFuY2UgdmFyaWFibGUpLiBNdWNoIG9mIHRoZSBkYXRhIHByZXByb2Nlc3NpbmcgaXMgc2ltaWxhciB0byBGaW5kaW5nIDEgd2hpY2ggd2Ugd2lsbCByZXBlYXQgaGVyZS4gSG93ZXZlciwgdGhlIGdvYWwgaGVyZSBpcyB0byBhbmFseXplIGhvdyBkaWZmZXJlbnQgZ3JvdXBzIG9mIExJQlMgc2FtcGxlcyAoY29sb3JlZCBieSBtYXRjaGluZyBQSVhMIGFicmFzaW9uKSBkaWZmZXIgYnkgY2F0aW9uIGNvbXBvc2l0aW9uLgoKIyMgNS4xIERhdGEsIENvZGUsIGFuZCBSZXNvdXJjZXMKSGVyZSBpcyBhIGxpc3QgZGF0YSBzZXRzLCBjb2RlcywgdGhhdCBhcmUgdXNlZCBpbiB5b3VyIHdvcmsuIEFsb25nIHdpdGggYnJpZWYgZGVzY3JpcHRpb24gYW5kIFVSTCB3aGVyZSB0aGV5IGFyZSBsb2NhdGVkLgoKMS4gcGV0ZXJjLWZpbmFsUHJvamVjdEYyNC5SbWQgKHdpdGgga25pdCBwZGYgYW5kIGh0bWwpIGlzIHRoaXMgbm90ZWJvb2suCltodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L3RyZWUvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwNy9wZXRlcmMtZmluYWxQcm9qZWN0RjI0LlJtZF0oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC90cmVlL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDcvcmNzaWQtZmluYWxQcm9qZWN0RjI0LlJtZCkKCjIuIHN1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHMgd2hpY2ggaXMgdGhlIG9yaWdpbmFsIExJQlMgZGF0YSBnaXZlbiB0byBvdXIgcmVzZWFyY2ggZ3JvdXAuCltodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9EYXRhL3N1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHNdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcykKCgpGaXJzdCwgd2Ugc2V0IGEgZGlzdGFuY2UgdmFyaWFibGUgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYSBzbGlkZXIgYmFyIGluIHRoZSBhcHAuIENoYW5naW5nIHRoaXMgdmFyaWFibGUgc2V0cyB0aGUgbWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIGEgUElYTCB0YXJnZXQgYW5kIExJQlMgc2FtcGxlIGZvciB0aGVtIHRvIGJlIGNsYXNzaWZpZWQgdG9nZXRoZXIuCmBgYHtyfQojc2V0IGRpc3RhbmNlIHZhcmlhYmxlIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGEgdG9nZ2xlIHRvb2wKZGlzdGFuY2U9NTAKYGBgCgpUbyBwcmVwYXJlIHRoZSBkYXRhLCBJIHN0YXJ0IGJ5IGxvYWRpbmcgaW4gdGhlIExJQlMgZGF0YS4gVGhlbiwgd2UgZHJvcCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGNvbHVtbnMgYW5kIHN1bSBvZiBwZXJjZW50YWdlIGNvbHVtbnMgbGVhdmluZyB1cyB3aXRoIGp1c3QgdGhlIHdlaWdodGVkIGNvbXBvc2l0aW9uIGluIHRlcm1zIG9mIG51bWVyaWNhbCBkYXRhLiBXZSBhbHNvIHJlbW92ZSB0aGUgc2NjdCB2YWx1ZXMsIGFzIHRob3NlIHZhbHVlcyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgZWFydGggcmVmZXJlbmNlIHNhbXBsZXMgdGhhdCBQZXJzZXJ2ZXJhbmNlIGNhcnJpZXMgd2l0aCBpdC4gVGhlcmVmb3JlLCB0aGV5IHdpbGwgbm90IGJlIHZlcnkgcmVsZXZhbnQgd2hlbiBwbG90dGluZyB0aGUgTElCUyBkYXRhIGFzIHdlIGFyZSBmb2N1c2VkIG9uIHRoZSBjYXRpb24gY29tYmluYXRpb25zIGFuZCB0aGVyZWZvcmUgb25seSBuZWVkIHRoZSB3ZWlnaHRlZCBjb21wb3NpdGlvbnMuCmBgYHtyfQojTG9hZCBpbiBMSUJTIGRhdGEKbGlicy5kZiA8LSByZWFkUkRTKCIvYWNhZGVtaWNzL01BVFAtNDkxMC1GMjQvREFSLU1hcnMtRjI0L0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcyIpCiNEcm9wIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gZmVhdHVyZXMsIHRoZSBzdW0gb2YgdGhlIHBlcmNlbnRhZ2VzLCAKI3RoZSBkaXN0YW5jZSwgYW5kIHRoZSB0b3RhbCBmcmVxdWVuY2llcwpsaWJzLmRmIDwtIGxpYnMuZGYgJT4lIAogIHNlbGVjdCghKGMoZGlzdGFuY2VfbW0sVG90LkVtLixTaU8yX3N0ZGV2LFRpTzJfc3RkZXYsQWwyTzNfc3RkZXYsRmVPVF9zdGRldiwKICAgICAgICAgICAgIE1nT19zdGRldixOYTJPX3N0ZGV2LENhT19zdGRldixLMk9fc3RkZXYsVG90YWwpKSkKIyBDb252ZXJ0IHRoZSBwb2ludHMgdG8gbnVtZXJpYwpsaWJzLmRmJHBvaW50IDwtIGFzLm51bWVyaWMobGlicy5kZiRwb2ludCkKbGlicy5kZlssNjoxM10gPC0gc2FwcGx5KGxpYnMuZGZbLDY6MTNdLGFzLm51bWVyaWMpCiNyZW1vdmUgdGhlIHNjY3QvcmVmZXJlbmNlIHNhbXBsZXMKbGlicy5kZjwtbGlicy5kZiU+JQogIGZpbHRlcighKGdyZXBsKCJzY2N0IiwgdGFyZ2V0KSkpCiNhZGQgYSBjb2x1bW4gdG8gaW5kaWNhdGUgdGhlIG5lYXJlc3QgcGl4bApsaWJzLmRmPC1jYmluZChuZWFyZXN0cGl4bD0wLGxpYnMuZGYpCiNtYWtlIGEgZGF0YWZyYW1lIG9mIGp1c3QgdGhlIExJQlMgTGF0L0xvbmcgYW5kIHRhcmdldCBuYW1lIGFuZCByZW1vdmUgZHVwbGljYXRlcwpsaWJzdGFyZ2V0cy5kZjwtbGlicy5kZlssYygxLDMsNCw1KV0KbGlic3RhcmdldHMuZGY8LWRpc3RpbmN0KGxpYnN0YXJnZXRzLmRmKQpgYGAKCkxvYWQgaW4gUElYTCBkYXRhCmBgYHtyfQojcmVhZCBpbiBwaXhsIGRhdGEgd2l0aCBsYXQvbG9uZwpwaXhsLmRmPC1yZWFkUkRTKCIvYWNhZGVtaWNzL01BVFAtNDkxMC1GMjQvREFSLU1hcnMtRjI0L1N0dWRlbnREYXRhL3BpeGxfc29sX2Nvb3JkaW5hdGVzLlJkcyIpCiNpbmNsdWRlIG9ubHkgcGl4bCBtZXRhZGF0YQpwaXhsLmRmPC1waXhsLmRmICU+JQogIHNlbGVjdChjKDEsMiwxOSwyMCwyMikpCiNjb252ZXJ0IExhdC9Mb25nIHRvIG51bWVyaWMKcGl4bC5kZiRMYXQgPC0gYXMubnVtZXJpYyhwaXhsLmRmJExhdCkKcGl4bC5kZiRMb25nIDwtIGFzLm51bWVyaWMocGl4bC5kZiRMb25nKQojcmVtb3ZlIHJvd3Mgc28gd2Ugb25seSBoYXZlIG9uZSBzYW1wbGUgcGVyIGFicmFzaW9uIGFuZCByZW1vdmUgYXRtb3NwaGVyaWMgc2FtcGxlCnBpeGwuZGY8LXBpeGwuZGZbYygyLDQsNiw4LDEwLDEyLDE0LDE2KSxdCmBgYAoKTmV4dCwgd2Ugd2lsbCBpbml0aWFsaXplIGEgZGlzdGFuY2UgdmFyaWFibGUgKHRvIGluZGljYXRlIGRpc3RhbmNlIGJldHdlZW4gUElYTCBhYnJhc2lvbiBhbmQgTElCUyB0YXJnZXQpIGFuZCBhbHNvIGluaXRpYWxpemUgZWFjaCBQSVhMIGFicmFzaW9uLCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gbWFyayB3aGljaCBQSVhMIGFicmFzaW9uIHRoZSBMSUJTIHNhbXBsZSBpcyBjbG9zZXN0IHRvIGJ5IHVzaW5nIGEgZmFjdG9yIG9mIDAgb3IgMS4gCmBgYHtyfQojTElCUyB0YXJnZXQgZGF0YSBmcmFtZSB3aXRoIGRpc3RhbmNlIHZhcmlhYmxlIGFzIHdlbGwKbGlic3RhcmdldHMuZGY8LWNiaW5kKGxpYnN0YXJnZXRzLmRmLCJEaXN0YW5jZSI9MCwiQmVsbGVncmFkZSI9MCwiRG91cmJlcyI9MCwiUXVhcnRpZXIiPTAsIkFsZmFsZmEiPTAsIlRob3JudG9uR2FwIj0wLCJCZXJyeUhvbGxvdyI9MCwiTm92YXJ1cHRhIj0wLCJVZ2FuaWtJc2xhbmQiPTApCmBgYAoKVGhlIGRpc3RhbmNlIGZ1bmN0aW9uIGJlbG93IHdpbGwgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gTElCUyB0YXJnZXQgYW5kIGFsbCB0aGUgUElYTCBhYnJhc2lvbnMsIGFuZCBwaWNrIHRoZSBzbWFsbGVzdCBkaXN0YW5jZSB0byBwaWNrIHRoZSBjbG9zZXN0IFBJWEwgYWJyYXNpb24gdG8gdGhhdCBMSUJTIHRhcmdldC4KYGBge3J9CiNEaXN0YW5jZSBmdW5jdGlvbgpmb3IoaSBpbiAxOm5yb3cobGlic3RhcmdldHMuZGYpKSB7CiAgICBsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldPC1jKGRpc3RIYXZlcnNpbmUocGl4bC5kZlsxLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZlsyLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZlszLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls0LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls1LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls2LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls3LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls4LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSkpCiAgICAKICAgIGxpYnN0YXJnZXRzLmRmW2ksMV08LXdoaWNoLm1pbihsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldKQogICAgbGlic3RhcmdldHMuZGZbaSw1XTwtbWluKGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV0pCn0KbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw8LWFzLmZhY3RvcihsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bCkKbGV2ZWxzKGxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsKTwtKGMoIkJlbGxlZ3JhZGUiLCJEb3VyYmVzIiwiUXVhcnRpZXIiLCJBbGZhbGZhIiwiVGhvcm50b25HYXAiLCJCZXJyeUhvbGxvdyIsIk5vdmFydXB0YSIsIlVnYW5pa0lzbGFuZCIpKQpgYGAKCkJlbG93IGlzIGFub3RoZXIgaW5pdGlhbGl6ZXIgZm9yIHRoZSBQSVhMIGFicmFzaW9uIGRhdGEuIFRoaXMgc2V0cyB0aGUgdmFyaWFibGVzIGZvciBlYWNoIFBJWEwgYWJyYXNpb24uCmBgYHtyfQojU2V0cyBlYWNoIG5lYXJlc3QgUElYTCB2YXJpYWJsZSBmb3IgZnV0dXJlIHVzZSBpbiBkZWNpZGluZyB3aGljaCB0YXJnZXQgaXMgY2xvc2VzdCB0byBhIExJQlMgc2FtcGxlCkJlbGxlZ3JhZGU8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQmVsbGVncmFkZSIsXSR0YXJnZXQKRG91cmJlczwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJEb3VyYmVzIixdJHRhcmdldApRdWFydGllcjwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJRdWFydGllciIsXSR0YXJnZXQKQWxmYWxmYTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJBbGZhbGZhIixdJHRhcmdldApUaG9ybnRvbkdhcDwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJUaG9ybnRvbkdhcCIsXSR0YXJnZXQKQmVycnlIb2xsb3c8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQmVycnlIb2xsb3ciLF0kdGFyZ2V0Ck5vdmFydXB0YTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJOb3ZhcnVwdGEiLF0kdGFyZ2V0ClVnYW5pa0lzbGFuZDwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJVZ2FuaWtJc2xhbmQiLF0kdGFyZ2V0CmBgYAoKTmV4dCwgd2UgZmlsdGVyIG91dCB0aGUgTElCUyB0YXJnZXRzIHRoYXQgYXJlIG5vdCB3aXRoaW4gdGhlIHNwZWNpZmllZCBkaXN0YW5jZSB2YXJpYWJsZS4gVGhlbiwgd2UgbWVyZ2UgdGhlIExJQlMgZGF0YSB3aXRoIHRoZSByZXNwZWN0aXZlIFBJWEwgYWJyYXNpb24gYnkgbXV0YXRpbmcgYW5kIGFkZGluZyBhbiBhYnJhc2lvbiBjb2x1bW4gdGhhdCBoYXMgdGhlIGFicmFzaW9uIG5hbWUgY2xvc2VzdCB0byBlYWNoIExJQlMgdGFyZ2V0LiBXZSBhbHNvIGFkZCBhIGNvbHVtbiwgTElCUyBvciBQSVhMLCB3aGljaCBkZW5vdGVzIGlmIHRoZSByb3cgb2YgZGF0YSBpcyBmcm9tIHRoZSBQSVhMIGFuZCBMSUJTIGRhdGEgc2V0cy4gV2UgYWxzbyBzZXQgdXAgdGhlIGxpYnMudGVybiBtYXRyaXggd2hpY2ggd2lsbCAKYGBge3J9CmluY2x1ZGVkLmxpYnM8LShsaWJzdGFyZ2V0cy5kZiU+JQogIGZpbHRlcihEaXN0YW5jZTxtZXRlcnMpKSR0YXJnZXQKbGlicy5tYXRyaXggPC1saWJzLmRmICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBpbmNsdWRlZC5saWJzKQojc2V0IExJQlMgbWF0cml4IGFuZCB0ZXJuYXJ5IHBsb3QgYnkgYWRkaW5nIGluIGNhdGlvbiBjb21wb25lbnRzIGFuZCBtdXRhdGluZwpsaWJzLm1hdHJpeCA8LSBsaWJzLm1hdHJpeFssYyg1LDc6MTQpXQpsaWJzLnRlcm4gPC0gYXMuZGF0YS5mcmFtZShsaWJzLm1hdHJpeCkgJT4lCiAgbXV0YXRlKHg9KFNpTzIrQWwyTzMpLzEwMCx5PShGZU9UK01nTykvMTAwLHo9KENhTytOYTJPK0syTykvMTAwKSAlPiUKICBzZWxlY3QoLWMoU2lPMixBbDJPMyxGZU9ULE1nTyxDYU8sTmEyTyxLMk8sVGlPMikpCmxpYnMudGVybjwtY2JpbmQoIkFicmFzaW9uIj0wLGxpYnMudGVybikKI1NldCB3aGF0IGFicmFzaW9uIGdvZXMgd2l0aCB0aGUgcmVzcGVjdGl2ZSBMSUJTIHNhbXBsZSBpdCBtYXRjaGVzIHdpdGgKbGlicy50ZXJuPC1saWJzLnRlcm4lPiUKICBtdXRhdGUoQWJyYXNpb24gPSBpZmVsc2UodGFyZ2V0JWluJUFsZmFsZmEsIkFsZmFsZmEiLCAKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgQmVsbGVncmFkZSwgIkJlbGVncmFkZSIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIEJlcnJ5SG9sbG93LCAiQmVycnlIb2xsb3ciLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBEb3VyYmVzLCAiRG91cmJlcyIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIE5vdmFydXB0YSwgIk5vdmFydXB0YSIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFF1YXJ0aWVyLCAiUXVhcnRpZXIiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBUaG9ybnRvbkdhcCwgIlRob3JudG9uR2FwIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgVWdhbmlrSXNsYW5kLCAiVWdhbmlrSXNsYW5kIixBYnJhc2lvbikpKSkpKSkpKQojc3VtbWFyeSBvZiBMSUJTIGRhdGEgaW5jbHVkaW5nIGRpc3RhbmNlIHBhcmFtZXRlciwgbnVtYmVyIG9mIExJQlMgdGFyZ2V0cywgYW5kIG51bWJlciBvZiBMSUJTIHBvaW50cwprYWJsZWRmPC1yYmluZCgiRGlzdGFuY2UgKG0pIj1tZXRlcnMsIlRhcmdldHMiPWxlbmd0aChpbmNsdWRlZC5saWJzKSwiUG9pbnRzIj1ucm93KGxpYnMudGVybikpCmthYmxlKGthYmxlZGYsIGNhcHRpb24gPSJMSUJTICMgb2YgVGFyZ2V0cyBhbmQgUG9pbnRzIHdpdGhpbiBTcGVjaWZpZWQgRGlzdGFuY2UiKQpgYGAKCgoKIyMgNS4yIENvbnRyaWJ1dGlvbgoKVGhpcyB3b3JrIHdhcyBhbHNvIGEgY29tYmluYXRpb24gb2YgbWUgYW5kIE1hcmdvLiBUaGUgZGF0YSBzZXQgY3JlYXRpb24gd2FzIGJvdGggb2YgdXMgaW4gb3VyIGJyYWluc3Rvcm1pbmcgYXMgdGhpcyB1dGlsaXplcyB0aGUgZGF0YSBzZXQgd2UgY3JlYXRlZCBvZiBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGZvciBQSVhMLgotIEFkZCBtb3JlIGhlcmUKLSBWZXJ5IHNpbWlsYXIgdG8gb3RoZXIgdHdvIHNlY3Rpb25zIGFkZCBpbiBsYXRlciwgTWFyZ28gYW5kIEkgd29ya2VkIG9uIG1vc3Qgb2YgdGhpcyB0b2dldGhlcgoKIyMgNS4zIE1ldGhvZHMgRGVzY3JpcHRpb24gCgotIFN0YXJ0ZWQgd2l0aCBmaWx0ZXJpbmcgb3JpZ2luYWwgZGF0YSB0byBnZXQgcmlkIG9mIFNDQ1QgdmFsdWVzCi0gdGhlbiBzZXQgdXAgdGVybmFyeSBkYXRhIGZyYW1lIGJ5IG11dGF0aW5nIGJ5IGNhdGlvbiBjb21wb3NpdGlvbnMKLSB0aGVuIG11dGF0ZWQgdG8gbWFrZSB0aGUgUElYTCBhYnJhc2lvbnMgdGhlIGtleSwgc28gdGhlIExJQlMgdGFyZ2V0cyBhcmUgY29sb3JlZCBieSB0aGUgY2xvc2VzdCBQSVhMIGFicmFzaW9uLCBjcmVhdGluZyBhIGZvcm0gb2YgY2x1c3RlcnMuCgojIyA1LjQgUmVzdWx0IGFuZCBEaXNjdXNzaW9uIApVc2luZyBhbGwgb2YgdGhlIG1hbmlwdWxhdGlvbiBkb25lIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRlcm5hcnkgcGxvdCwgd2UgdGhlbiBwbG90IHVzaW5nIHRoZSBnZ3Rlcm4gY29tbWFuZC4gV2Ugd2lsbCBjb2xvciBieSBhYnJhc2lvbiB0byBzZWUgdGhlIGRpc3RyaWJ1dGlvbiBvZiBjb21wb3NpdGlvbiBiZXR3ZWVuIGRpZmZlcmVudCBhYnJhc2lvbnMuIFRoaXMgc2hvdWxkIGhlbHAgdXMgYmUgYWJsZSB0byBkcmF3IGRpZmZlcmVudCBjb25jbHVzaW9ucyBhYm91dCBob3cgYWJyYXNpb25zIHJlbGF0ZSBvciBkb24ndCByZWxhdGUuIFRoZSBtYXggZGlzdGFuY2UgYmV0d2VlbiB0aGUgUElYTCB0YXJnZXQgYW5kIExJQlMgc2FtcGxlIGNhbiBiZSBtb2RpZmllZCBob3dldmVyIGRlc2lyZWQuCmBgYHtyfQpnZ3Rlcm4obGlicy50ZXJuLCBnZ3Rlcm46OmFlcyh4PXgseT15LHo9eikpICsKICBnZW9tX3BvaW50KGRhdGE9bGlicy50ZXJuLGFlcyhjb2xvcj1BYnJhc2lvbixhbHBoYT0wLjUpKSArIAogIHRoZW1lX3JnYncoKSArIAogIGxhYnModGl0bGU9cGFzdGUoIk1hcnMgTElCUyBEYXRhIFdpdGhpbiIsZGlzdGFuY2UsIm1ldGVycyBvZiBQSVhMIixzZXA9IiAiKSwKICAgICAgIHg9IlNpK0FsIiwKICAgICAgIHk9IkZlK01nIiwKICAgICAgIHo9IkNhK05hK0siKSt0aGVtZShsZWdlbmQucG9zaXRpb249InJpZ2h0IikgKyAKICBndWlkZXMoYWxwaGE9Im5vbmUiKQpgYGAKCiMjIDUuNSBDb25jbHVzaW9ucyBhbmQgRnV0dXJlIFdvcmsKQmFzZWQgb24gdGhpcyB0ZXJuYXJ5IHBsb3QsIHdlIGNhbiBzZWUgQWxmYWxmYSBhbmQgQmVsZWdyYWRlIGFyZSBoaWdoZXIgaW4gU2krQWwgYW5kIFVnYW5payBJc2xhbmQgaXMgYW4gb3V0bGllci4gQXMgdGhpcyB3YXMgdGhlIGxhc3QgcGllY2Ugb2YgdGhlIFBJWEwgZGF0YSBpbiB0aGUgZGF0YSBzZXQgYW5kIGl0IHdhcyBtaXNzaW5nIGEgcGFpciBzaW5jZSBldmVyeSBvdGhlciBhYnJhc2lvbiB3YXMgbWFkZSB1cCBvZiB0d28gc2FtcGxlcywgaXQgaXMgaW5jbHVkZWQgaW4gaGVyZSBidXQgdW50aWwgdGhlIGRhdGEgc2V0IGlzIHVwZGF0ZWQgdGhlcmUgaXMgbm90IGVub3VnaCBjb250ZXh0IHRvIGV4cGxhaW4gd2h5IGl0IGlzIHNvIHZhc3RseSBkaWZmZXJlbnQuIEkgd291bGQgYXNzdW1lIGl0IGlzIGR1ZSB0byBob3cgdGhlIHJvYm90IGlzIHRyYXZlbGluZyBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBVZ2FuaWtJc2xhbmQgYWJyYXNpb24gaXMgdmVyeSBkaWZmZXJlbnQgdGhhbiB0aGUgb3RoZXIgNyBhYnJhc2lvbnMuCi0gRnV0dXJlIHdvcmssIHdvdWxkIGluY2x1ZGUgbW9yZSBkYXRhIHRvIGdhaW4gYnJvYWRlciBjb250ZXh0CgojIEJpYmxpb2dyYXBoeQpQcm92aWRlIGEgbGlzdGluZyBvZiByZWZlcmVuY2VzIGFuZCBvdGhlciBzb3VyY2VzLgoKKiBBbmFseXN0J3MgTm90ZWJvb2sKKiBOb3Qgc3VyZSB3aGF0IGVsc2UgaXMgcmVsZXZhbnQsIG1vc3Qgb2Ygd2hhdCBJIHVzZWQgd2FzIHNpbWlsYXIgdG8gQW5hbHlzdCdzIE5vdGVib29rCgojIEFwcGVuZGl4CgoqSW5jbHVkZSBoZXJlIHdoYXRldmVyIHlvdSB0aGluayBpcyByZWxldmFudCB0byBzdXBwb3J0IHRoZSBtYWluIGNvbnRlbnQgb2YgeW91ciBub3RlYm9vay4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgaGF2ZSBvbmx5IGluY2x1ZGUgZXhhbXBsZSBmaWd1cmVzIGFib3ZlIGluIHlvdXIgbWFpbiB0ZXh0IGJ1dCBpbmNsdWRlIGFkZGl0aW9uYWwgb25lcyBoZXJlLiBPciB5b3UgbWF5IGhhdmUgZG9uZSBhIG1vcmUgZXh0ZW5zaXZlIGludmVzdGlnYXRpb24sIGFuZCB3YW50IHRvIHB1dCBtb3JlIHJlc3VsdHMgaGVyZSB0byBkb2N1bWVudCB5b3VyIHdvcmsgaW4gdGhlIHNlbWVzdGVyLiBCZSBzdXJlIHRvIGRpdmlkZSBhcHBlbmRpeCBpbnRvIGFwcHJvcHJpYXRlIHNlY3Rpb25zIGFuZCBtYWtlIHRoZSBjb250ZW50cyBjbGVhciB0byB0aGUgcmVhZGVyIHVzaW5nIGFwcHJvYWNoZXMgZGlzY3Vzc2VkIGFib3ZlLiAqIApTaG91bGQgSSBhZGQgbW9yZSBleGFtcGxlcyBoZXJlIG9mIHNvaWwgY29tcG9zaXRpb24gcGxvdHMgb2YgZGlmZmVyZW50IGFicmFzaW9ucz8gSSBhbHNvIGNvdWxkIGFkZCBoZWF0IG1hcCBhbmFseXNpcyB0byB0aGlzIG5vdGVib29rIGFzIGEgZmluZGluZyBidXQgd2Fzbid0IHN1cmUgaWYgaXQgd2FzIHJlYWxseSByZWxldmFudC4KCg==
    +
    LS0tCnRpdGxlOiAiRGF0YSBBbmFseXRpY3MgUmVzZWFyY2ggSW5kaXZpZHVhbCBGaW5hbCBQcm9qZWN0IFJlcG9ydCAtIE1hcnMiCmF1dGhvcjogIkNoYXJsb3R0ZSBQZXRlcnNvbiIKZGF0ZTogIkZhbGwgMjAyNCIKb3V0cHV0OgogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6ICczJwogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogMwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0aGVtZTogdW5pdGVkCi0tLQoKCiMgREFSIFByb2plY3QgYW5kIEdyb3VwIE1lbWJlcnMKCiogUHJvamVjdCBuYW1lOiBNYXJzCiogR2l0SHViIElEOiBkYXItcGV0ZXJjCiogUHJvamVjdCB0ZWFtIG1lbWJlcnM6IERhbnRlIE13YXRpYm8sIERvw7FhIFJvYmVydHMsIERhdmlkIFdhbGN5emssIFh1YW50aW5nIFdhbmcsIEFzaHRvbiBDb21wdG9uLCBNYXJnbyBWYW5Fc3NlbHN0eW4sIE5pY29sYXMgTW9yYXdza2ksIENKIE1hcmlubywgQWFkaSBMYWhpcmkgCgojIDAuMCBQcmVsaW1pbmFyaWVzLgoKKlIgTm90ZWJvb2tzIGFyZSBtZWFudCB0byBiZSBkeW5hbWljIGRvY3VtZW50cy4gUHJvdmlkZSBhbnkgcmVsZXZhbnQgdGVjaG5pY2FsIGd1aWRhbmNlIGZvciB1c2VycyBvZiB5b3VyIG5vdGVib29rLiBBbHNvIHRha2UgY2FyZSBvZiBhbnkgcHJlbGltaW5hcmllcywgc3VjaCBhcyByZXF1aXJlZCBwYWNrYWdlcy4gU2FtcGxlIHRleHQ6KgoKVGhpcyByZXBvcnQgaXMgZ2VuZXJhdGVkIGZyb20gYW4gUiBNYXJrZG93biBmaWxlIHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBSIGNvZGUgbmVjZXNzYXJ5IHRvIHByb2R1Y2UgdGhlIHJlc3VsdHMgZGVzY3JpYmVkIGFuZCBlbWJlZGRlZCBpbiB0aGUgcmVwb3J0LiAgQ29kZSBibG9ja3MgY2FuIGJlIHN1cnByZXNzZWQgZnJvbSBvdXRwdXQgZm9yIHJlYWRhYmlsaXR5IHVzaW5nIHRoZSBjb21tYW5kIGNvZGUgYHtSLCAgZWNobz1zaG93fWAgaW4gdGhlIGNvZGUgYmxvY2sgaGVhZGVyLiBJZiBgc2hvdyA8LSBGQUxTRWAgdGhlIGNvZGUgYmxvY2sgd2lsbCBiZSBzdXJwcmVzc2VkOyBpZiBgc2hvdyA8LSBUUlVFYCB0aGVuIHRoZSBjb2RlIHdpbGwgYmUgc2hvdy4gCgpgYGB7cn0KIyBTZXQgdG8gVFJVRSB0byBleHBhbmQgUiBjb2RlIGJsb2Nrczsgc2V0IHRvIEZBTFNFIHRvIGNvbGxhcHNlIFIgY29kZSBibG9ja3MgCnNob3cgPC0gVFJVRQpgYGAKCjwhLS0gRXhwYW5kIHRoaXMgbGlzdCBhcyBuZWNlc3NhcnkgZm9yIHlvdXIgbm90ZWJvb2sgLS0+CkV4ZWN1dGluZyB0aGlzIFIgbm90ZWJvb2sgcmVxdWlyZXMgc29tZSBzdWJzZXQgb2YgdGhlIGZvbGxvd2luZyBwYWNrYWdlczoKCiogYGdncGxvdDJgCiogYHRpZHl2ZXJzZWAKKiBgcGFuZG9jYAoqIGBybWFya2Rvd25gCiogYHN0cmluZ3JgCiogYGdnYmlwbG90YAoqIGBrbml0cmAKKiBgcnBhcnRgCiogYHJwYXJ0LnBsb3RgCiogYGNhcmV0YAoqIGBnZ3JlcGVsYAoqIGBnZ3Rlcm5gCgoKVGhlc2Ugd2lsbCBiZSBpbnN0YWxsZWQgYW5kIGxvYWRlZCBhcyBuZWNlc3NhcnkgKGNvZGUgc3VwcHJlc3NlZCkuIAoKPCEtLSBUaGUgYGluY2x1ZGU9RkFMU0VgIG9wdGlvbiBwcmV2ZW50cyB5b3VyIGNvZGUgZnJvbSBiZWluZyBzaG93biBhdCBhbGwgLS0+CmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIFRoaXMgY29kZSB3aWxsIGluc3RhbGwgcmVxdWlyZWQgcGFja2FnZXMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgaW5zdGFsbGVkCiMgQUxXQVlTIElOU1RBTEwgWU9VUiBQQUNLQUdFUyBMSUtFIFRISVMhCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQogICBsaWJyYXJ5KGdncGxvdDIpCn0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQoKaWYgKCFyZXF1aXJlKCJwYW5kb2MiKSkgewogIGluc3RhbGwucGFja2FnZXMoInBhbmRvYyIpCiAgbGlicmFyeShwYW5kb2MpCn0KCiMgUmVxdWlyZWQgcGFja2FnZXMgZm9yIE0yMCBMSUJTIGFuYWx5c2lzCmlmICghcmVxdWlyZSgicm1hcmtkb3duIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJybWFya2Rvd24iKQogIGxpYnJhcnkocm1hcmtkb3duKQp9CgppZiAoIXJlcXVpcmUoInN0cmluZ3IiKSkgewogIGluc3RhbGwucGFja2FnZXMoInN0cmluZ3IiKQogIGxpYnJhcnkoc3RyaW5ncikKfQoKaWYgKCFyZXF1aXJlKCJnZ2JpcGxvdCIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2diaXBsb3QiKQogIGxpYnJhcnkoZ2diaXBsb3QpCn0KCmlmICghcmVxdWlyZSgia25pdHIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikKICBsaWJyYXJ5KGtuaXRyKQp9CgppZiAoIXJlcXVpcmUoInJwYXJ0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydCIpCiAgbGlicmFyeShycGFydCkKfQoKaWYgKCFyZXF1aXJlKCJycGFydC5wbG90IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydC5wbG90IikKICBsaWJyYXJ5KHJwYXJ0KQp9CgppZiAoIXJlcXVpcmUoImNhcmV0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJjYXJldCIpCiAgbGlicmFyeShjYXJldCkKfQogIAppZiAoIXJlcXVpcmUoImdncmVwZWwiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdncmVwZWwiKQogIGxpYnJhcnkoZ2dyZXBlbCkKfQoKaWYgKCFyZXF1aXJlKCJnZW9zcGhlcmUiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdlb3NwaGVyZSIpCiAgbGlicmFyeShnZ3JlcGVsKQp9CgppZiAoIXJlcXVpcmUoImdndGVybiIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2d0ZXJuIikKICBsaWJyYXJ5KGdncmVwZWwpCn0KCmBgYAoKIyAxLjAgUHJvamVjdCBJbnRyb2R1Y3Rpb24KClRoZSBNYXJzIFByb2plY3QgaXMgZm9jdXNlZCBvbiBkYXRhIGZyb20gdGhlIDIwMjAgTWFycyBQZXJzZXZlcmFuY2UgUm92ZXIuIFRoZSBnb2FsIG9mIHRoZSBtaXNzaW9uIGlzIHRvIGxvb2sgZm9yIG1pY3JvYmlhbCBhbmNpZW50IGxpZmUgb3IgZm9ybXMgb2Ygd2F0ZXIgb24gTWFycyAodGhpbmdzIHRoYXQgY291bGQgc3VnZ2VzdCBsaWZlKS4gUGVyc2V2ZXJhbmNlIHVzZXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMsIGluY2x1ZGluZyBQSVhMIChQbGFuZXRhcnkgSW5zdHJ1bWVudCBmb3IgWC1SYXkgTGl0aG9jaGVtaXN0cnkpLCBTSEVSTE9DIChTY2FubmluZyBIYWJpdGFibGUgRW52aXJvbm1lbnRzIHdpdGggUmFtYW4gYW5kIEx1bWluZXNjZW5jZSBmb3IgT3JnYW5pY3MgYW5kIENoZW1pY2FscykgYW5kIFNVUEVSQ0FNLiBTVVBFUkNBTSBoYXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMgdGhhdCBtZWFzdXJlIHNwZWN0cm9zY29weSB0byBtZWFzdXJlIHByb3BlcnRpZXMgb2YgbWF0ZXJpYWxzIG9uIE1hcnMsIGluY2x1ZGluZyBMSUJTIChMYXNlci1pbmR1Y2VkIGJyZWFrZG93biBzcGVjdHJvc2NvcHkpLiBUaGlzIG5vdGVib29rIHdpbGwgcHJpbWFyaWx5IGZvY3VzIG9uIHRoZSBkYXRhIHdlIGhhdmUgYmVlbiBnaXZlbiBvZiBQSVhMIGFuZCBMSUJTLiAgCgojIDIuMCBPcmdhbml6YXRpb24gb2YgUmVwb3J0CgpUaGlzIHJlcG9ydCBpcyBvcmdhbml6ZSBhcyBmb2xsb3dzOiAKCiogU2VjdGlvbiAzLjAuICBGaW5kaW5nIDE6IExJQlMgYW5kIFBJWEwgTWF0Y2hpbmcgLSBXZSB3ZXJlIGFibGUgdG8gY29tYmluZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgYnkgcGlja2luZyBhIG1heGltdW0gZGlzdGFuY2UgdmFyaWFibGUgZnJvbSBhIFBJWEwgYWJyYXNpb24gYW5kIG1hdGNoaW5nIExJQlMgc2FtcGxlcyB0aGF0IHdlcmUgd2l0aGluIHRoZSBzZXQgZGlzdGFuY2Ugb2YgYSBQSVhMIGFicmFzaW9uLiAgCgoqIFNlY3Rpb24gNC4wOiBGaW5kaW5nIDI6IFNvaWwgQ29tcG9zaXRpb24gQW5hbHlzaXMgLSBVc2luZyB0aGUgTElCUyBhbmQgUElYTCBjb21iaW5lZCBkYXRhIHNldCwgSSBjcmVhdGVkIGEgcGxvdCBvZiB0aGUgY29tcG9zaXRpb24gcGVyY2VudGFnZXMgb2YgY2hlbWljYWwgY29tcG91bmRzIHN1Y2ggYXMgU2kwMiwgSzIwLCBldGMuIHVzaW5nIGxvZyBzY2FsaW5nIHRvIGNvbXBhcmUgdGhlIGNvbXBvc2l0aW9ucyBvZiBhIFBJWEwgYWJyYXNpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlIGNvbXBvc2l0aW9ucyAoYmFzZWQgb24gdGhlIExJQlMgc2FtcGxlcyBmb3IgeCBkaXN0YW5jZSBhd2F5IGZyb20gYSBQSVhMIGFicmFzaW9uKS4KCiogU2VjdGlvbiA1LjAgRmluZGluZyAzOiBBbmFseXppbmcgQ2F0aW9uIENvbWJpbmF0aW9ucyB1c2luZyBMSUJTIGFuZCBQSVhMIG1hdGNoZWQgZGF0YTogVXNpbmcgdGhlIExJQlMgYW5kIFBJWEwgY29tYmluZWQgZGF0YSBzZXQsIHdlIGNyZWF0ZWQgYSB0ZXJuYXJ5IHBsb3QgdG8gc2hvdyB0aGUgZGlzdHJpYnV0aW9uIG9mIExJQlMgc2FtcGxlcyBzb3J0ZWQgYnkgd2hhdCBQSVhMIGFicmFzaW9uIHRoZXkgYXJlIGNsb3Nlc3QgdG8gKGJhc2VkIG9uIGEgY2hvc2VuIGRpc3RhbmNlIHZhcmlhYmxlKS4KCiogU2VjdGlvbiA2LjAgT3ZlcmFsbCBjb25jbHVzaW9ucyBhbmQgc3VnZ2VzdGlvbnMgCgoqIFNlY3Rpb24gNy4wIEFwcGVuZGl4IFRoaXMgc2VjdGlvbiBkZXNjcmliZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgd29ya3MgdGhhdCBtYXkgYmUgaGVscGZ1bCBpbiB0aGUgZnV0dXJlIHdvcms6ICpsaXN0IHN1YmplY3RzKi4gIAoKCiMgMy4wIEZpbmRpbmcgMTogUElYTCBhbmQgTElCUyBNYXRjaGluZwoKX0dpdmUgYSBoaWdobGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIG1ham9yIGZpbmRpbmcuIFdoYXQgcXVlc3Rpb25zIHdlcmUgeW91ciB0cnlpbmcgdG8gYWRkcmVzcywgd2hhdCBhcHByb2FjaGVzIGRpZCB5b3UgZW1wbG95LCBhbmQgd2hhdCBoYXBwZW5lZD9fCgpGaXJzdGx5LCB3ZSB3aWxsIGJlIHRha2luZyBhIGxvb2sgYXQgaG93IFBJWEwgYW5kIExJQlMgY29ycmVzcG9uZC4gT3VyIGdyb3VwIGZvdW5kIHZlcnkgZWFybHkgaW4gb3VyIHJlc2VhcmNoIHRoYXQgdGhlcmUgd2Fzbid0IGEgZmVhdHVyZSBhbW9uZyB0aGVtIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggdGhlIGRhdGEgc2V0cy4gRm9yIGV4YW1wbGUsIHRoZSBjb2x1bW5zIG9mIFBJWEwgYXJlIG9yZ2FuaXplZCBieSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGFzIHdlbGwgYXMgc2FtcGxlIG51bWJlciAoMS0xNiksIHNhbXBsZSBuYW1lLCBhbmQgYWJyYXNpb24gbmFtZS4gVW5mb3J0dW5hdGVseSwgTElCUyB3YXNuJ3Qgc29ydGVkIHRoZSBzYW1lIHdheS4gTElCUyB3YXMgb3JnYW5pemVkIGJ5IHRoZSBzb2wgdGhhdCB0aGUgc2FtcGxlIHdhcyB0YWtlbiBhdC4gTElCUyBpcyBicm9rZW4gdXAgaW50byBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBzYW1wbGVzIGFzIHdlbGwsIGluY2x1ZGluZyB0aGUgZmFjdCBpdCBjYXJyaWVzIGFyb3VuZCBlYXJ0aCByZWZlcmVuY2UgZGF0YSB0byBiZSB1c2VkIGluIGNvbXBhcmluZyB3aXRoIGRpZmZlcmVudCBzYW1wbGUgc2l0ZXMuIFRoYXQgYmVpbmcgc2FpZCwgaW4gb3JkZXIgdG8gbWF0Y2ggUElYTCB0YXJnZXRzIHRvIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGVzLCBNYXJnbyBhbmQgSSBjcmVhdGVkIGEgbmV3IGRhdGEgc2V0IHRoYXQgYWRkZWQgYW5vdGhlciBtZXRhZGF0YSBmZWF0dXJlIHRvIFBJWEwgKGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgY29vcmRpbmF0ZXMpIHdoaWNoIHdlIG9idGFpbmVkIGZyb20gdGhlIEFuYWx5c3QncyBOb3RlYm9vay4gT25jZSB0aGlzIHdhcyBhZGRlZCBpbiwgd2UgcmVhbGl6ZWQgdGhhdCB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBkaWRuJ3QgcmVhbGx5IG1hdGNoLiBTbyBNYXJnbyBjcmVhdGVkIGEgZGlzdGFuY2UgZnVuY3Rpb24gdG8gbWF0Y2ggTElCUyBzYW1wbGVzIHRvIFBJWEwgdGFyZ2V0cyBiYXNlZCBvbiB3aGF0ZXZlciBkaXN0YW5jZSBhIHBlcnNvbiBzcGVjaWZpZXMuIE9yaWdpbmFsbHksIHdlIHNldCBpdCB0byBiZSByb3VuZGVkIHRvIHRocmVlIHRob3VzYW5kdGhzIGFuZCBtYXRjaCBiYXNlZCBvbiB0aGF0LgoKVGhpcyBoZWxwZWQgYW5zd2VyIHRoZSBxdWVzdGlvbiBvZiBob3cgY2FuIHdlIGNvcnJlbGF0ZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgdG8gYmUgYWJsZSB0byBwbG90IHRoZW0gb24gdGhlIHNhbWUgYXhpcyBvZiB3aGF0ZXZlciBwbG90IGlzIHRyeWluZyB0byBiZSBjcmVhdGVkLiBJIHdhcyBjdXJpb3VzIHRvIHNlZSBob3cgY2xvc2UgUElYTCB0YXJnZXRzIHdlcmUgdG8gTElCUyBzYW1wbGUgc2l0ZXMgYXMgd2VsbCBhcyBob3cgbWFueSBMSUJTIHNhbXBsZXMgd291bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgUElYTCB0YXJnZXQgcGVyaGFwcyB3aXRoIGEgcmFkaXVzIG9mIDcgb3IgMTAgbWV0ZXJzLgoKIyMgMy4xIERhdGEsIENvZGUsIGFuZCBSZXNvdXJjZXMKCkhlcmUgaXMgYSBsaXN0IGRhdGEgc2V0cywgY29kZXMsIHRoYXQgYXJlIHVzZWQgaW4geW91ciB3b3JrLiBBbG9uZyB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBVUkwgd2hlcmUgdGhleSBhcmUgbG9jYXRlZC4KCjEuIHBldGVyYy1maW5hbFByb2plY3RGMjQuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSBpcyB0aGlzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwN19EcmFmdEZpbmFsUHJvamVjdE5vdGVib29rL3BldGVyY19maW5hbFByb2plY3RGMjRfcm91Z2hkcmFmdC5SbWQpCgoyLiB2MV9saWJzX3RvX3NhbXBsZS5SZHMgaXMgdGhlIGNvbWJpbmVkIGRhdGEgc2V0IG9mIFBJWEwgYW5kIExJQlMgdGhhdCBpbmNsdWRlcyB0aGUgZGlzdGFuY2UgZnJvbSBhIFBJWEwgYWJyYXNpb24gdG8gYSBMSUJTIHNhbXBsZS4gIApbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudERhdGEvdjFfbGlic190b19zYW1wbGUuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50RGF0YS92MV9saWJzX3RvX3NhbXBsZS5SZHMpLiAKCkZpcnN0bHksIHdlIHNldCB0aGUgbnVtYmVyIG9mIG1ldGVycyBkaXN0YW5jZSB0aHJlc2hvbGQgYmV0d2VlbiBhIFBJWEwgYWJyYXNpb24gYW5kIExJQlMgc2FtcGxlLiBXaXRoaW4gdGhlIHYxX2xpYnNfdG9fc2FtcGxlLlJkcywgd2hpY2ggTWFyZ28gYW5kIEkgY29sbGFib3JhdGVkIG9uIHRoZXJlIGlzIGEgZGlzdGFuY2UgdmFyaWFibGUgdGhhdCBpcyBzZXQgdmlhIGEgZnVuY3Rpb24gdGhhdCBNYXJnbyBjcmVhdGVkIHRvIG1lYXN1cmUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBQSVhMIGFicmFzaW9uIGFuZCBMSUJTIHNhbXBsZSB1c2luZyB0aGVpciBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzLiAKYGBge3J9Cm1ldGVycyA8LSAxMDAKYGBgCgpUbyBwcmVwYXJlIHRoZSBkYXRhLCB3ZSB3aWxsIGxvYWQgaW4gdGhlIHYxX2xpYnNfdG9fc2FtcGxlLlJkcywgZ3JvdXAgYnkgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBvZiBMSUJTLCBhbmQgZmlsdGVyIG91dCBldmVyeSBMSUJTIHNhbXBsZSB0aGF0IGhhcyBhIGxhcmdlciBkaXN0YW5jZSBmcm9tIGl0cyBjb3JyZXNwb25kaW5nIFBJWEwgYWJyYXNpb24gdGhhbiBzcGVjaWZpZWQgaW4gdGhlIGNob3NlbiBkaXN0YW5jZSAobWV0ZXIpIHZhbHVlLiBJbiBvcmRlciB0byBtYWtlIGEgc2NhdHRlciBwbG90IG9mIHRoZSBMSUJTIGFuZCBQSVhMIHBvaW50cywgd2Ugd2lsbCBjcmVhdGUgYSBuZXcgZGF0YSBmcmFtZSBvZiBlYWNoIHVuaXF1ZSBQSVhMIGFicmFzaW9uIGFuZCBpdHMgY29vcmRpbmF0ZXMuIFRoYXQgaXMgdGhlIHVuaXF1ZV9waXhsIGRhdGEgZnJhbWUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHBsb3QgdGhlIFBJWEwgYWJyYXNpb24gY29vcmRpbmF0ZXMuCgpgYGB7ciB9CmxpYnNfdG9fc2FtcGxlIDwtIHJlYWRSRFMoIn4vREFSLU1hcnMtRjI0L1N0dWRlbnREYXRhL3YxX2xpYnNfdG9fc2FtcGxlLlJkcyIpCiNtYWtlIGEgZmlsdGVyZWQgZGF0YSBmcmFtZSB0aGF0IHBpY2tzIHRoZSBtYXggcG9pbnQgb3V0IG9mIGFsbCBsaWJzIHNhbXBsZXMgYXQgYSBjZXJ0YWluIHRhcmdldCAKIyBmb3Igc2ltcGxpY2l0eQpkZl9maWx0ZXJlZCA8LSBsaWJzX3RvX3NhbXBsZSAlPiUKICBncm91cF9ieShMYXQubGlicywgTG9uLmxpYnMpICU+JQogIGZpbHRlcihQb2ludC5saWJzID09IG1heChQb2ludC5saWJzKSkgJT4lCiAgdW5ncm91cCgpCmRmX2Rpc3RhbmNlX2ZpbHRlciA8LSBkZl9maWx0ZXJlZFtkZl9maWx0ZXJlZCREaXN0YW5jZSA8PSBtZXRlcnMsXQoKI21ha2UgYSBkYXRhIGZyYW1lIHdpdGggdGhlIHVuaXF1ZSBwaXhsIGNvb3JkaW5hdGVzIHNpbmNlIHRoZXkgYXJlIGluIHBhaXJzIG9mIGlkZW50aWNhbCBsYXQvbG9uCnVuaXF1ZV9waXhsIDwtIGRmX2ZpbHRlcmVkICU+JQogIHNlbGVjdChMYXQucGl4bCwgTG9uLnBpeGwsIEFicmFzaW9uLnBpeGwpICU+JSBkaXN0aW5jdCgpCmBgYAoKCiMjIDMuMiBDb250cmlidXRpb24KClRoZSBsb2dpc3RpY3Mgb2YgZmlsdGVyaW5nIHRoZSBvcmlnaW5hbCBkYXRhIHNldCBpcyBteSB3b3JrLiBQcmV2aW91c2x5LCBJIGhhZCB0byBkbyBhIGxvdCBtb3JlIGZpbHRlcmluZyBpbiBvcmRlciB0byBjaG9vc2UgdGhlIGRpc3RhbmNlIGFuZCBnZXQgdW5pcXVlIExJQlMgcG9pbnRzIGluIG9yZGVyIHRvIG5vdCBwdXQgdG9vIG1hbnkgcG9pbnRzIG9uIHRoZSBzY2F0dGVycGxvdC4gTWFyZ28gYW5kIEkgd29ya2VkIHRvZ2V0aGVyIHRvIGNyZWF0ZSB0aGUgZGF0YSBzZXQgdGhhdCBJIHVzZSBpbiB0aGlzIHNlY3Rpb24gKHYxX2xpYnNfdG9fc2FtcGxlLlJkcykgYnkgZGVjaWRpbmcgaG93IHRvIG1hdGNoIHVwIExJQlMgdG8gY2VydGFpbiBQSVhMIGFicmFzaW9ucy4gTWFyZ28gY3JlYXRlZCB0aGUgZGlzdGFuY2UgZnVuY3Rpb24gdG8gZmluZCB0aGUgZGlzdGFuY2UgYmV0d2VlbiBQSVhMIGFicmFzaW9ucyBhbmQgTElCUyBzYW1wbGVzIGFuZCBhZGRlZCB0aGF0IGNvbHVtbiB0byB0aGUgZGF0YSBzZXQuIFRoZW4sIERvbmEgZml4ZWQgYWxsIHRoZSBuYW1pbmcgY29udmVudGlvbnMgaW4gdGhlIGRhdGEgc2V0IGluIG9yZGVyIHRvIGhhdmUgY29uc2lzdGVuY3kgYW5kIG1ha2UgaXQgZWFzeSB0byB0ZWxsIHdoaWNoIHZhcmlhYmxlIHdhcyBvcmlnaW5hbGx5IGZyb20gZWFjaCBkYXRhIHNldCAoZXguIE5hbWUucGl4bCwgVGFyZ2V0LmxpYnMpLiBJIHRoZW4gdXNlZCB0aGUgZGF0YSB0byBjcmVhdGUgcGxvdHMgYW5kIGFuYWx5emUuIEJlbG93IGlzIGEgc2NhdHRlcnBsb3Qgc2hvd2Nhc2luZyB0aGUgZGlzdHJpYnV0aW9uIG9mIFBJWEwgYWJyYXNpb25zIGFuZCBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIG1heCBkaXN0YW5jZSBiZXR3ZWVuIHRoZW0uIAoKCiMjIDMuMyBNZXRob2RzIERlc2NyaXB0aW9uIAoKSSBjaG9zZSB0byB1c2UgZ2dwbG90IHRvIGRpc3BsYXkgdGhlIExJQlMgYW5kIFBJWEwgZGF0YSBmb3IgZWFzaWVyIGFuYWx5c2lzIG9mIHNlZWluZyBob3cgbWFueSBMSUJTIHNhbXBsZXMgYWxpZ24gd2l0aCBkaWZmZXJlbnQgUElYTCBhYnJhc2lvbnMuIEl0IHdhcyB2ZXJ5IGludGVyZXN0aW5nIHRvIGNoYW5nZSBhcm91bmQgdGhlIG1heCBkaXN0YW5jZSBhbmQgc2VlIHdoaWNoIGFsaWduZWQgd2l0aCB3aGljaCBhYnJhc2lvbi4gSW4gdGVybXMgb2YgZXhlY3V0aW9uLCBpdCB0b29rIG1lIGEgYml0IG9mIHRpbWUgdG8gb3JnYW5pemUgYWxsIG9mIHRoZSB0aG91Z2h0cyBNYXJnbyBhbmQgSSBoYWQgb24gaG93IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHRoaXMgZGF0YSBzZXQuIE9yaWdpbmFsbHksIHdlIGhhZCByb3VuZGVkIHRoZSBkaXN0YW5jZXMgdG8gdGhlIG5lYXJlc3QgdGhvdXNhbmR0aCB0byBtYXRjaCB0aGVtLCBhbmQgdGhlbiB3ZXJlIHBsb3R0aW5nIHRoYXQgd2F5LiBIb3dldmVyLCB0aGF0IGxlZnQgYSBsb3Qgb2Ygcm9vbSBmb3IgZXJyb3IgYW5kIHdhc24ndCBhcyBhY2N1cmF0ZS4gQ3JlYXRpbmcgYSBkaXN0YW5jZSBmdW5jdGlvbiBhbGxvd3MgZm9yIHRoZSBzY2llbnRpc3Qgb3IgcGVyc29uIHVzaW5nIHRoZSBNYXJzIE1pc3Npb24gTWluZGVyIEFwcCB0byBjaG9vc2Ugd2hhdGV2ZXIgZGlzdGFuY2UgdGhleSB3b3VsZCBsaWtlIGFuZCBhbGxvd3MgZm9yIG11Y2ggbW9yZSBmdW5jdGlvbmFsaXR5LiBNb2RpZnlpbmcgdGhlIGRhdGEgc2V0IG1vcmUgZW5kZWQgdXAgYmVpbmcgbW9yZSBlZmZpY2llbnQgdGhhbiBhZGRpbmcgc21hbGwgZWRpdHMgYXMgSSB3YXMgbWFraW5nIG15IHBsb3RzIHdoaWNoIHdhcyBvcmlnaW5hbGx5IG1ha2luZyBtZSBjcmF6eSAoYXMgaW4gY2hhbmdpbmcgdmFyaWFibGUgdHlwZXMgaWYgdGhleSB3ZXJlbid0IHdoYXQgdGhleSB3ZXJlIHN1cHBvc2VkIHRvIGJlKS4gSW4gdGhlIGVuZCwgSSBsZWFybmVkIGEgbG90IGFib3V0IGRhdGEgb3JnYW5pemF0aW9uIGFuZCB0aGF0IGNvbnNpc3RlbmN5IGFuZCBzdGF5aW5nIG9yZ2FuaXplZCBpcyBrZXkgYW5kIHNhdmVzIGEgbG90IG9mIHRpbWUgbGF0ZXIgb24uCgoKIyMgMy40IFJlc3VsdCBhbmQgRGlzY3Vzc2lvbiAKClRvIGNyZWF0ZSBhIHBsb3Qgb2YgdGhlIExJQlMgYW5kIFBJWEwgZGF0YSBvcmdhbml6ZWQgYnkgd2hhdCBMSUJTIHNhbXBsZXMgYWxpZ24gd2l0aCB3aGF0IGFicmFzaW9ucywgZmlyc3QgcGxvdHRlZCB0aGUgTElCUyBzYW1wbGVzIGNvbG9yZWQgYnkgd2hhdCBQSVhMIGFicmFzaW9uIHRoZXkgd2VyZSBjbG9zZXN0IHRvLCBhbmQgdGhlbiBwbG90dGVkIHRoIFBJWEwgYWJyYXNpb25zIGFzIHJlZCBzdGFycyBvbiB0aGUgcGxvdCB0byBzaG93IHdoZXJlIHRoZSBQSVhMIGFicmFzaW9ucyB3ZXJlIHJlbGF0aXZlIHRvIHRoZSBMSUJTIHNhbXBsZXMuCgpgYGB7ciB9CiNwbG90IG9mIGxpYnMgYW5kIHBpeGwgZGF0YSBieSBsYXQvbG9uCmdncGxvdChkYXRhID0gZGZfZGlzdGFuY2VfZmlsdGVyKSArCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBMb24ubGlicywgeSA9IExhdC5saWJzLCBjb2xvciA9IEFicmFzaW9uLnBpeGwpKSArICAgICAgICAgICAgICAgICAjIENvbG9yIGJ5IGFicmFzaW9uCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBMb24ucGl4bCwgeSA9IExhdC5waXhsKSwgZGF0YSA9IHVuaXF1ZV9waXhsLCBjb2xvciA9ICJyZWQiLCBzaGFwZSA9IDMsIHNpemUgPSAzKSArICMgRml4ZWQgY29sb3IgZm9yIHVuaXF1ZV9waXhsIHBvaW50cwogIGdlb21fdGV4dF9yZXBlbChtYXBwaW5nID0gYWVzKHggPSBMb24ucGl4bCwgeSA9IExhdC5waXhsLCBsYWJlbCA9IEFicmFzaW9uLnBpeGwpLCBkYXRhID0gdW5pcXVlX3BpeGwsCiAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMiwgY29sb3IgPSAicmVkIikgKwogIGxhYnModGl0bGUgPSBwYXN0ZSgiTElCUyBTYW1wbGVzIGFuZCBQSVhMIEFicmFzaW9ucyB3aXRoaW4iLCBtZXRlcnMsICJtZXRlcnMiKSwKICAgICAgIHggPSAiTG9uZ2l0dWRlIiwKICAgICAgIHkgPSAiTGF0aXR1ZGUiLAogICAgICAgY29sb3IgPSAiUElYTCBBYnJhc2lvbiIsCiAgICAgICBjYXB0aW9uID0gIkRhdGEgY29sbGVjdGVkIHVzaW5nIExJQlMgYW5kIFBJWEwgaW5zdHJ1bWVudHMgb24gUGVyc2VydmVyYW5jZSByb3Zlci5cbiBTaG93cyBQSVhMIGFicmFzaW9ucyBwbG90dGVkIGFzIHJlZCBzdGFycyxcbiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGVzIGNvbG9yZWQgYnkgdGhlaXIgY2xvc2VzdCBQSVhMIGFicmFzaW9uLiIpKyAgICAgICAgICAjIExhYmVsIGZvciB0aGUgY29sb3IgbGVnZW5kIAogIyBDZW50ZXIgdGhlIGNhcHRpb24gb24gdGhlIGxlZnQgc2lkZQogIHRoZW1lKAogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCkgICMgQWxpZ25zIGNhcHRpb24gdG8gdGhlIGxlZnQKICApCgojYWRkIGxlZ2VuZCBmb3IgUElYTCBpZGsgd2h5IGl0J3Mgbm90IHdvcmtpbmcKYGBgCgoKIyMgMy41IENvbmNsdXNpb25zLCBMaW1pdGF0aW9ucywgYW5kIEZ1dHVyZSBXb3JrLgoKSSBiZWxpZXZlIG15IGZpbmRpbmdzIG1ha2UgaXQgdmVyeSBlYXN5IGZvciByZXNlYXJjaGVycyBhbmQgc2NpZW50aXN0cyB0byBoYXZlIGEgdmlzdWFsaXphdGlvbiBvZiBQSVhMIGFuZCBMSUJTIHNhbXBsZXMgdGhhdCB0aGV5IHdhbnQgdG8gc2VlIGJhc2VkIG9uIHdoYXQgbWF4IGRpc3RhbmNlIHRoZXkgYXJlIGZvY3VzaW5nIG9uIHdoZW4gZXhhbWluaW5nIFBJWEwgYW5kIExJQlMgdG9nZXRoZXIuIEZvciBmdXR1cmUgd29yaywgSSB0aGluayBhcyBtb3JlIGNvb3JkaW5hdGVzIGFuZCBkYXRhIGlzIGFkZGVkIHRvIHRoZSBMSUJTIGFuZCBQSVhMIGRhdGEgc2V0cyBhcyB0aGV5IGJlY29tZSBhdmFpbGFibGUgZnJvbSBOQVNBIHRoaXMgd2lsbCBjb250aW51ZSB0byBiZSBidWlsdCB1cG9uIGFuZCBhbHRob3VnaCBpdCBpc24ndCBzdXBlciBjb21wbGljYXRlZCBvZiBhIHBsb3QsIGl0IHByb3ZpZGVzIGEgdmVyeSBuZWNlc3NhcnkgY29udGV4dCB0byB2aXN1YWxpemUgUElYTCBhbmQgTElCUy4gCgotIEFkZCBtb3JlIGFib3V0IGxpbWl0YXRpb25zPwoKIyA0LjAgRmluZGluZyAyOiBTb2lsIENvbXBvc2l0aW9uIEFuYWx5c2lzCl9HaXZlIGEgaGlnaGxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtYWpvciBmaW5kaW5nLiBXaGF0IHF1ZXN0aW9ucyB3ZXJlIHlvdXIgdHJ5aW5nIHRvIGFkZHJlc3MsIHdoYXQgYXBwcm9hY2hlcyBkaWQgeW91IGVtcGxveSwgYW5kIHdoYXQgaGFwcGVuZWQ/XwoKVXNpbmcgdGhlIExJQlMgYW5kIFBJWEwgY29tYmluZWQgZGF0YSBzZXQsIEkgY3JlYXRlZCBhIHBsb3Qgb2YgdGhlIGNvbXBvc2l0aW9uIHBlcmNlbnRhZ2VzIG9mIGNoZW1pY2FsIGNvbXBvdW5kcyBzdWNoIGFzIFNpMDIsIEsyMCwgZXRjLiB1c2luZyBsb2cgc2NhbGluZyB0byBjb21wYXJlIHRoZSBjb21wb3NpdGlvbnMgb2YgYSBQSVhMIGFicmFzaW9uIGFuZCB0aGUgY29ycmVzcG9uZGluZyBMSUJTIHNhbXBsZSBjb21wb3NpdGlvbnMgKGJhc2VkIG9uIHRoZSBMSUJTIHNhbXBsZXMgZm9yIHggZGlzdGFuY2UgYXdheSBmcm9tIGEgUElYTCBhYnJhc2lvbikuIFRoZSBxdWVzdGlvbiBJIHdhcyB0cnlpbmcgdG8gYW5zd2VyIHdhcyBob3cgZG9lcyB0aGUgTElCUyBkYXRhIG9mIGEgY2VydGFpbiBhcmVhIGNvbXBhcmUgdG8gdGhlIFBJWEwgZGF0YSBvZiB0aGF0IGFyZWE/IEJ5IGxvb2tpbmcgYXQgdGhlIGNvbXBvc2l0aW9uIG9mIHRoZSBzb2lsIGluIGNlcnRhaW4gbG9jYXRpb25zLCB3ZSBjYW4gY29tcGFyZSB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIFBJWEwgYWJyYXNpb24gYW5kIHJlbGF0aW5nIExJQlMgc2FtcGxlcyBmb3IgYSBjZXJ0YWluIGFyZWEgdXRpbGl6aW5nIHRoZSBzYW1lIGRhdGEgc2V0ICh2MV9saWJzX3RvX3NhbXBsZS5SbWQpLiBJbiBvcmRlciB0byBhY2NvbXBsaXNoIHRoaXMsIAoKCiMjIDQuMSBEYXRhLCBDb2RlLCBhbmQgUmVzb3VyY2VzCkhlcmUgaXMgYSBsaXN0IGRhdGEgc2V0cywgY29kZXMsIHRoYXQgYXJlIHVzZWQgaW4geW91ciB3b3JrLiBBbG9uZyB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBVUkwgd2hlcmUgdGhleSBhcmUgbG9jYXRlZC4KCjEuIHBldGVyY19maW5hbFByb2plY3RGMjQuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSBpcyB0aGlzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwN19EcmFmdEZpbmFsUHJvamVjdE5vdGVib29rL3BldGVyY19maW5hbFByb2plY3RGMjRfcm91Z2hkcmFmdC5SbWQpCgoyLiBwZXRlcmNfYXNzaWdubWVudDUuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSB3aGljaCBpcyBteSBwcmV2aW91cyBub3RlYm9vay4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvdHJlZS9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA1L3BldGVyY19hc3NpZ21lbnQwNS5SbWRdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvdHJlZS9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA1L3BldGVyY19hc3NpZ21lbnQwNS5SbWRdKQoKMy4gc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcyB3aGljaCBpcyB0aGUgb3JpZ2luYWwgTElCUyBkYXRhIGdpdmVuIHRvIG91ciByZXNlYXJjaCBncm91cC4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkc10oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzKQoKNC4gcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzLCB3aGljaCBpcyB0aGUgZGF0YSBzZXQgY29udGFpbmluZyB0aGUgUElYTCBkYXRhLCBzb2wsIGFuZCBjb29yZGluYXRlcy4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL1N0dWRlbnREYXRhL3BpeGxfc29sX2Nvb3JkaW5hdGVzLlJkc10oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudERhdGEvcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzKQoKNC4gTElCU190cmFpbmluZ19zZXRfcXVhcnRpbGVzLlJkcyBpcyB0aGUgZGF0YSB3aXRoIGVhcnRoIHF1YXJ0aWxlIHJlZmVyZW5jZSBkYXRhLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9MSUJTX3RyYWluaW5nX3NldF9xdWFydGlsZXMuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9EYXRhL0xJQlNfdHJhaW5pbmdfc2V0X3F1YXJ0aWxlcy5SZHMpLiAKClRvIHByZXBhcmUgdGhlIGRhdGEsIEkgc3RhcnQgYnkgbG9hZGluZyBpbiB0aGUgTElCUyBkYXRhLiBUaGVuLCB3ZSBkcm9wIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gY29sdW1ucyBhbmQgc3VtIG9mIHBlcmNlbnRhZ2UgY29sdW1ucyBsZWF2aW5nIHVzIHdpdGgganVzdCB0aGUgd2VpZ2h0ZWQgY29tcG9zaXRpb24gaW4gdGVybXMgb2YgbnVtZXJpY2FsIGRhdGEuIFdlIGFsc28gcmVtb3ZlIHRoZSBzY2N0IHZhbHVlcywgYXMgdGhvc2UgdmFsdWVzIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBlYXJ0aCByZWZlcmVuY2Ugc2FtcGxlcyB0aGF0IFBlcnNlcnZlcmFuY2UgY2FycmllcyB3aXRoIGl0LiBUaGVyZWZvcmUsIHRoZXkgd2lsbCBub3QgYmUgdmVyeSByZWxldmFudCB3aGVuIHBsb3R0aW5nIHRoZSBMSUJTIGRhdGEgYXMgd2UgYXJlIGZvY3VzZWQgb24gdGhlIE1hcnMgc29pbCBjb21wb3NpdGlvbnMuCgpgYGB7cn0KI0VhcnRoIHF1YXJ0aWxlcwplYXJ0aHF1YXJ0aWxlcy5kZjwtcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9EYXRhL0xJQlNfdHJhaW5pbmdfc2V0X3F1YXJ0aWxlcy5SZHMiKQojTG9hZCBpbiBMSUJTIGRhdGEKbGlicy5kZiA8LSByZWFkUkRTKCIvYWNhZGVtaWNzL01BVFAtNDkxMC1GMjQvREFSLU1hcnMtRjI0L0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcyIpCiNEcm9wIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gZmVhdHVyZXMsIHRoZSBzdW0gb2YgdGhlIHBlcmNlbnRhZ2VzLCAKI3RoZSBkaXN0YW5jZSwgYW5kIHRoZSB0b3RhbCBmcmVxdWVuY2llcwpsaWJzLmRmIDwtIGxpYnMuZGYgJT4lIAogIHNlbGVjdCghKGMoZGlzdGFuY2VfbW0sVG90LkVtLixTaU8yX3N0ZGV2LFRpTzJfc3RkZXYsQWwyTzNfc3RkZXYsRmVPVF9zdGRldiwKICAgICAgICAgICAgIE1nT19zdGRldixOYTJPX3N0ZGV2LENhT19zdGRldixLMk9fc3RkZXYsVG90YWwpKSkKIyBDb252ZXJ0IHRoZSBwb2ludHMgdG8gbnVtZXJpYwpsaWJzLmRmJHBvaW50IDwtIGFzLm51bWVyaWMobGlicy5kZiRwb2ludCkKbGlicy5kZlssNjoxM10gPC0gc2FwcGx5KGxpYnMuZGZbLDY6MTNdLGFzLm51bWVyaWMpCiNyZW1vdmUgdGhlIHNjY3QvcmVmZXJlbmNlIHNhbXBsZXMKbGlicy5kZjwtbGlicy5kZiU+JQogIGZpbHRlcighKGdyZXBsKCJzY2N0IiwgdGFyZ2V0KSkpCiNhZGQgYSBjb2x1bW4gdG8gaW5kaWNhdGUgdGhlIG5lYXJlc3QgcGl4bApsaWJzLmRmPC1jYmluZChuZWFyZXN0cGl4bD0wLGxpYnMuZGYpCiNtYWtlIGEgZGF0YWZyYW1lIG9mIGp1c3QgdGhlIExJQlMgTGF0L0xvbmcgYW5kIHRhcmdldCBuYW1lIGFuZCByZW1vdmUgZHVwbGljYXRlcwpsaWJzdGFyZ2V0cy5kZjwtbGlicy5kZlssYygxLDMsNCw1KV0KbGlic3RhcmdldHMuZGY8LWRpc3RpbmN0KGxpYnN0YXJnZXRzLmRmKQpgYGAKClNldCBtZXRlcnMgYW5kIGNob3NlbiBhYnJhc2lvbiB0byBhY3QgYXMgYSBzbGlkZXIgaW4gdGhlIDJkIGFwcC4KYGBge3J9CiNDaG9vc2UgbWF4IGRpc3RhbmNlIHZhcmlhYmxlIGJldHdlZW4gUElYTCBhbmQgTElCUyBkYXRhCm1ldGVycyA9IDEwMAojQ2hvb3NlIFBJWEwgYWJyYXNpb24geW91IHdhbnQgdG8gbG9vayBhdAphYnJhc2lvbl9uYW1lID0gIkJlcnJ5IEhvbGxvdyIKYGBgCgpOZXh0LCB3ZSBsb2FkIGluIHRoZSBQSVhMIGRhdGEuIFdlIHJlbW92ZSB0aGUgYXRtb3NwaGVyaWMgc2FtcGxlIGFuZCBvbmx5IHNlbGVjdCBvbmUgUElYTCBzYW1wbGUgb2YgZWFjaCBhYnJhc2lvbi4KYGBge3IsIGRhdGEwMn0KI3JlYWQgaW4gcGl4bCBkYXRhIHdpdGggbGF0L2xvbmcKcGl4bC5kZjwtcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9TdHVkZW50RGF0YS9waXhsX3NvbF9jb29yZGluYXRlcy5SZHMiKQojaW5jbHVkZSBvbmx5IHBpeGwgbWV0YWRhdGEKcGl4bC5kZjwtcGl4bC5kZiAlPiUKICBzZWxlY3QoYygxLDIsMTksMjAsMjIpKQojY29udmVydCBMYXQvTG9uZyB0byBudW1lcmljCnBpeGwuZGYkTGF0IDwtIGFzLm51bWVyaWMocGl4bC5kZiRMYXQpCnBpeGwuZGYkTG9uZyA8LSBhcy5udW1lcmljKHBpeGwuZGYkTG9uZykKI3JlbW92ZSByb3dzIHNvIHdlIG9ubHkgaGF2ZSBvbmUgc2FtcGxlIHBlciBhYnJhc2lvbiBhbmQgcmVtb3ZlIGF0bW9zcGhlcmljIHNhbXBsZQpwaXhsLmRmPC1waXhsLmRmW2MoMiw0LDYsOCwxMCwxMiwxNCwxNiksXQpgYGAKCk5leHQsIHdlIHdpbGwgaW5pdGlhbGl6ZSBhIGRpc3RhbmNlIHZhcmlhYmxlICh0byBpbmRpY2F0ZSBkaXN0YW5jZSBiZXR3ZWVuIFBJWEwgYWJyYXNpb24gYW5kIExJQlMgdGFyZ2V0KSBhbmQgYWxzbyBpbml0aWFsaXplIGVhY2ggUElYTCBhYnJhc2lvbiwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1hcmsgd2hpY2ggUElYTCBhYnJhc2lvbiB0aGUgTElCUyBzYW1wbGUgaXMgY2xvc2VzdCB0byBieSB1c2luZyBhIGZhY3RvciBvZiAwIG9yIDEuIApgYGB7cn0KbGlic3RhcmdldHMuZGY8LWNiaW5kKGxpYnN0YXJnZXRzLmRmLCJEaXN0YW5jZSI9MCwiQmVsbGVncmFkZSI9MCwiRG91cmJlcyI9MCwiUXVhcnRpZXIiPTAsIkFsZmFsZmEiPTAsIlRob3JudG9uR2FwIj0wLCJCZXJyeSBIb2xsb3ciPTAsIk5vdmFydXB0YSI9MCwiVWdhbmlrIElzbGFuZCI9MCkKYGBgCgpUaGUgZGlzdGFuY2UgZnVuY3Rpb24gYmVsb3cgd2lsbCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBMSUJTIHRhcmdldCBhbmQgYWxsIHRoZSBQSVhMIGFicmFzaW9ucywgYW5kIHBpY2sgdGhlIHNtYWxsZXN0IGRpc3RhbmNlIHRvIHBpY2sgdGhlIGNsb2VzdCBQSVhMIGFicmFzaW9uIHRvIHRoYXQgTElCUyB0YXJnZXQuCmBgYHtyfQpmb3IoaSBpbiAxOm5yb3cobGlic3RhcmdldHMuZGYpKSB7CiAgICBsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldPC1jKGRpc3RIYXZlcnNpbmUocGl4bC5kZlsxLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZlsyLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZlszLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls0LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls1LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls2LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls3LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls4LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSkpCiAgICAKICAgIGxpYnN0YXJnZXRzLmRmW2ksMV08LXdoaWNoLm1pbihsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldKQogICAgbGlic3RhcmdldHMuZGZbaSw1XTwtbWluKGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV0pCn0KbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw8LWFzLmZhY3RvcihsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bCkKbGV2ZWxzKGxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsKTwtKGMoIkJlbGxlZ3JhZGUiLCJEb3VyYmVzIiwiUXVhcnRpZXIiLCJBbGZhbGZhIiwiVGhvcm50b25HYXAiLCJCZXJyeSBIb2xsb3ciLCJOb3ZhcnVwdGEiLCJVZ2FuaWsgSXNsYW5kIikpCmBgYAoKQmVsb3cgaXMgYW5vdGhlciBpbml0aWFsaXplciBmb3IgdGhlIFBJWEwgYWJyYXNpb24gZGF0YS4gVGhpcyBzZXRzIHRoZSB2YXJpYWJsZXMgZm9yIGVhY2ggUElYTCBhYnJhc2lvbi4KYGBge3J9CkJlbGxlZ3JhZGU8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQmVsbGVncmFkZSIsXSR0YXJnZXQKRG91cmJlczwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJEb3VyYmVzIixdJHRhcmdldApRdWFydGllcjwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJRdWFydGllciIsXSR0YXJnZXQKQWxmYWxmYTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJBbGZhbGZhIixdJHRhcmdldApUaG9ybnRvbkdhcDwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJUaG9ybnRvbkdhcCIsXSR0YXJnZXQKQmVycnlIb2xsb3c8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQmVycnkgSG9sbG93IixdJHRhcmdldApOb3ZhcnVwdGE8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iTm92YXJ1cHRhIixdJHRhcmdldApVZ2FuaWtJc2xhbmQ8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iVWdhbmlrIElzbGFuZCIsXSR0YXJnZXQKYGBgCgpOZXh0LCB3ZSBmaWx0ZXIgb3V0IHRoZSBMSUJTIHRhcmdldHMgdGhhdCBhcmUgbm90IHdpdGhpbiB0aGUgc3BlY2lmaWVkIGRpc3RhbmNlIHZhcmlhYmxlLiBUaGVuLCB3ZSBtZXJnZSB0aGUgTElCUyBkYXRhIHdpdGggdGhlIHJlc3BlY3RpdmUgUElYTCBhYnJhc2lvbiBieSBtdXRhdGluZyBhbmQgYWRkaW5nIGFuIGFicmFzaW9uIGNvbHVtbiB0aGF0IGhhcyB0aGUgYWJyYXNpb24gbmFtZSBjbG9zZXN0IHRvIGVhY2ggTElCUyB0YXJnZXQuIFdlIGFsc28gYWRkIGEgY29sdW1uLCBMSUJTIG9yIFBJWEwsIHdoaWNoIGRlbm90ZXMgaWYgdGhlIHJvdyBvZiBkYXRhIGlzIGZyb20gdGhlIFBJWEwgYW5kIExJQlMgZGF0YSBzZXRzLgpgYGB7cn0KaW5jbHVkZWQubGliczwtKGxpYnN0YXJnZXRzLmRmJT4lCiAgZmlsdGVyKERpc3RhbmNlPG1ldGVycykpJHRhcmdldApsaWJzLm1hdHJpeCA8LWxpYnMuZGYgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGluY2x1ZGVkLmxpYnMpCmxpYnMubWF0cml4IDwtIGxpYnMubWF0cml4WyxjKDUsNzoxNCldCmxpYnMubWF0cml4PC1saWJzLm1hdHJpeFssYygxOjIsNDo5LDMpXQpsaWJzLm1hdHJpeDwtY2JpbmQoIkFicmFzaW9uIj0wLGxpYnMubWF0cml4KQpsaWJzLm1hdHJpeDwtbGlicy5tYXRyaXglPiUKICBtdXRhdGUoQWJyYXNpb24gPSBpZmVsc2UodGFyZ2V0JWluJUFsZmFsZmEsIkFsZmFsZmEiLCAKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgQmVsbGVncmFkZSwgIkJlbGVncmFkZSIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIEJlcnJ5SG9sbG93LCAiQmVycnkgSG9sbG93IiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgRG91cmJlcywgIkRvdXJiZXMiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBOb3ZhcnVwdGEsICJOb3ZhcnVwdGEiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBRdWFydGllciwgIlF1YXJ0aWVyIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgVGhvcm50b25HYXAsICJUaG9ybnRvbkdhcCIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFVnYW5pa0lzbGFuZCwgIlVnYW5payBJc2xhbmQiLEFicmFzaW9uKSkpKSkpKSkpCmxpYnMubWF0cml4PC1jYmluZChsaWJzb3JwaXhsPTEsbGlicy5tYXRyaXgpCmBgYAoKTmV4dCwgd2Ugd2lsbCByZWFkIGluIHRoZSBQSVhMIGRhdGEuIFdlIHdpbGwgcmVtb3ZlIHRoZSBhdG1vc3BoZXJpYyBzYW1wbGUgKGZpcnN0IHNhbXBsZSkgYW5kIG9ubHkgY2hvb3NlIG9uZSBvZiBlYWNoIFBJWEwgc2FtcGxlIGluIGFzIGVhY2ggYWJyYXNpb24gaGFzIHR3byBzYW1wbGVzIChvbmx5IG9uZSB3aWxsIGJlIG5lY2Vzc2FyeSBmb3IgdGhlIHBsb3QpLgoKYGBge3IsIGRhdGEwM30KI3JlYWQgaW4gcGl4bCBkYXRhIHdpdGggbGF0L2xvbmcKcGl4bC5kZjwtcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9TdHVkZW50RGF0YS9waXhsX3NvbF9jb29yZGluYXRlcy5SZHMiKQpwaXhsLmRmPC1waXhsLmRmICU+JQogIHNlbGVjdChjKDU6OCwxMjoxNCwxNywxOSwxOCwyMikpCiNyZW9yZGVyIHBpeGwgY29sdW1ucyBzbyB0aGF0IGl0IG1hdGNoZXMgbGlicyBkYXRhIG9yZ2FuaXphdGlvbgpwaXhsLmRmPC1waXhsLmRmWyxjKDExLDEwLDQsMyw4LDIsNiwxLDUsNyldCiNyZW1vdmUgYXRtb3NwaGVyaWMgc2FtcGxlCnBpeGwuZGY8LXBpeGwuZGZbMjoxNixdCnBpeGwuZGY8LWNiaW5kKGxpYnNvcnBpeGw9MCxwaXhsLmRmKQpgYGAKCkZpbmFsbHksIHdlIG1lcmdlIHRoZSBMSUJTIGFuZCBQSVhMIGRhdGEgc2V0cyB3ZSBoYXZlIG1vZGlmaWVkIHRodXMgZmFyIGZvciBhIGNvbWJpbmVkIExJQlMgYW5kIFBJWEwgZGF0YSBmcmFtZSBzdWl0YWJsZSBmb3IgYSBzb2lsIGNvbXBvc2l0aW9uIGxpbmUgcGxvdC4KYGBge3J9CmNvbG5hbWVzKHBpeGwuZGYpPC1jb2xuYW1lcyhsaWJzLm1hdHJpeCkKcGl4bGxpYnMuZGY8LXJiaW5kKHBpeGwuZGYsbGlicy5tYXRyaXgpCmBgYAoKIyMgNC4yIENvbnRyaWJ1dGlvbgoKU29tZSBvZiB0aGUgZGF0YSBtYW5pcHVsYXRpbmcgd29yayB3YXMgTWFyZ28ncywgc3VjaCBhcyB0aGUgZGlzdGFuY2UgZnVuY3Rpb24uIEluIHRlcm1zIG9mIHBpdm90aW5nIHRoZSBkYXRhIGZyYW1lIGFuZCB0aGUgb3RoZXIgc3RlcHMgb2YgdGhlIHByZXByb2Nlc3NpbmcgaXMgbXkgb3duIHdvcmsuIFRoZSBtYW5pcHVsYXRpbmcgYmVsb3cgdG8gcGxvdCB0aGUgbGluZSBzb2lsIGNvbXBvc2l0aW9uIHBsb3RzIGlzIG15IG93bi4KCiMjIDQuMyBNZXRob2RzIERlc2NyaXB0aW9uIAoKV2hlbiBkZWNpZGluZyBob3cgdG8gYXBwcm9hY2ggdGhlIGNvbmNlcHQgb2YgYnVpbGRpbmcgc29pbCBjb21wb3NpdGlvbiBwbG90cyBvZiBlYWNoIFBJWEwgYWJyYXNpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExJQlMgdGFyZ2V0cyB3aXRoaW4gYSBjZXJ0YWluIGRpc3RhbmNlIG1heGltdW0sIEkgZGVjaWRlZCB0aGUgYmVzdCB3YXkgd2FzIHRvIHN0YXJ0IHdpdGggdGhlIG9yaWdpbmFsIGRhdGEgc2V0cyBhbmQgbW9kaWZ5IHRoZW0gYXMgbmVlZGVkLiBGb3IgdGhlIGFjdHVhbCBwbG90LCB0aGUgYmVzdCB3YXkgdG8gZm9ybWF0IHRoZSBkYXRhIGNvcnJlY3RseSBpcyB0byBwaXZvdCBpdCwgYXMgSSBuZWVkIHRoZSB4IGF4aXMgdG8gYmUgdGhlIGNvbHVtbiBuYW1lcyBpbiB0aGUgY3VycmVudCBkYXRhIGZyYW1lIHdlIGhhdmUgKFNpTzIgYW5kIG90aGVyIGNvbXBvc2l0aW9ucykgYW5kIHRoZSB5IGF4aXMgdG8gYmUgdGhlIHdlaWdodGVkIGNvbXBvc2l0aW9uIHZhbHVlcy4gV2UgYWxzbyBuZWVkIGFuIGluZGljYXRvciBvZiBpZiB0aGUgZGF0YSBpcyBmcm9tIFBJWEwgb3IgTElCUywgd2hpY2ggYWxzbyBpcyBoZWxwZnVsIGZvciBidWlsZGluZyB0aGUgbGluZSBwbG90cy4gCgpVc2VycyB3aWxsIGhhdmUgdG8gc2V0IHRoZSBkaXN0YW5jZSB2YXJpYWJsZSBpbiBvcmRlciB0byBjaG9vc2UgdGhlIG1heCBkaXN0YW5jZSBiZXR3ZWVuIFBJWEwgYWJyYXNpb25zIGFuZCBMSUJTIHRhcmdldHMuIFRoaXMgY2FuIHZhc3RseSBjaGFuZ2UgdGhlIG51bWJlciBvZiBsaW5lcyBvbiB0aGUgcGxvdHMgd2hpY2ggY2FuIGhlbHAgcHJldmVudCBvdmVyY3Jvd2RlZCBwbG90cy4gVXNlcnMgYWxzbyBjYW4gc2V0IGEgdmFyaWFibGUgdG8gY2hvb3NlIGEgc3BlY2lmaWMgUElYTCBhYnJhc2lvbiBhbmQgY29ycmVzcG9uZGluZyBMSUJTIHRhcmdldHMsIHdoaWNoIGlzIGVhc2llciB0byBpbnRlcnByZXQgYXMgcGxvdHRpbmcgYWxsIG9mIHRoZSBMSUJTIGFuZCBQSVhMIGNvbXBvc2l0aW9uIGluZm9ybWF0aW9uIG9uIGxpbmUgcGxvdHMgbGVhZHMgdG8gdmVyeSBjb25kZW5zZWQgZ3JhcGhzIHRoYXQgYXJlIGhhcmQgdG8gcmVhZC4KCiMjIDQuNCBSZXN1bHQgYW5kIERpc2N1c3Npb24gCgpGaXJzdCwgd2Ugd2lsbCB0dXJuIHRoZSBlYXJ0aCBxdWFydGlsZSBpbmZvcm1hdGlvbiBpbnRvIGEgbG9uZyBkYXRhIGZyYW1lIChtZWFuaW5nIHBpdm90aW5nIHRoZSBjb2x1bW5zIGludG8gdGhlIHZhbHVlcykuIApgYGB7cn0KIyBFYXJ0aCBxdWFydGlsZXMKZWFydGhxdWFydGlsZXNfbG9uZyA8LSBlYXJ0aHF1YXJ0aWxlcy5kZiAlPiUKICBwaXZvdF9sb25nZXIoY29scyA9IHN0YXJ0c193aXRoKCJTaU8yIik6bGFzdF9jb2woKSwgbmFtZXNfdG8gPSAiQ29tcG91bmQiLCB2YWx1ZXNfdG8gPSAiUGVyY2VudGFnZSIpCgplYXJ0aHF1YXJ0aWxlc19sb25nIDwtIGVhcnRocXVhcnRpbGVzX2xvbmcgJT4lIHJlbmFtZShRdWFydGlsZXMgPSBgVHJhaW5pbmcgc2V0IFF1YXJ0aWxlc2ApCmBgYAoKVGhlbiwgdGhlIGRhdGEgd2lsbCBiZSBmaWx0ZXJlZCB0byBvbmx5IGluY2x1ZGUgdGhlIGRhdGEgZnJvbSBhIHNwZWNpZmljIFBJWEwgYWJyYXNpb24gY2hvc2VuIGJ5IHRoZSB1c2VyLiBUaGUgZGF0YSBpcyBwaXZvdGVkIGludG8gYSBsb25nIGZvcm1hdCwgYW5kIHRoZSBjb2x1bW5zIGFyZSByZW9yZGVyZWQgdG8gbWltaWMgc2ltaWxhciBwbG90cyBmcm9tIE5BU0EgcGFwZXJzLgpgYGB7cn0KIyBGaWx0ZXIgZm9yIHRoZSBzcGVjaWZpYyBhYnJhc2lvbiBzYW1wbGUsIGUuZy4sICJBbGZhbGZhIgpwaXhsbGlic19maWx0ZXJlZCA8LSBwaXhsbGlicy5kZiAlPiUKICBmaWx0ZXIoQWJyYXNpb24gPT0gYWJyYXNpb25fbmFtZSkKCiMgUGl2b3QgdGhlIGRhdGEgdG8gbG9uZ2VyIGZvcm1hdCBmb3IgZ2dwbG90CnBpeGxsaWJzX2xvbmcgPC0gcGl4bGxpYnNfZmlsdGVyZWQgJT4lCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBzdGFydHNfd2l0aCgiU2lPMiIpOmxhc3RfY29sKCksIG5hbWVzX3RvID0gIkNvbXBvdW5kIiwgdmFsdWVzX3RvID0gIlBlcmNlbnRhZ2UiKQoKZGVzaXJlZF9vcmRlciA8LSBjKCJTaU8yIiwgIkFsMk8zIiwgIkZlT1QiLCAiTWdPIiwgIkNhTyIsICJOYTJPIiwgIksyTyIsICJUaU8yIikgICMgU3BlY2lmeSB5b3VyIGN1c3RvbSBvcmRlciBoZXJlCnBpeGxsaWJzX2xvbmckQ29tcG91bmQgPC0gZmFjdG9yKHBpeGxsaWJzX2xvbmckQ29tcG91bmQsIGxldmVscyA9IGRlc2lyZWRfb3JkZXIpCmBgYAoKRm9yIHRoZSBwbG90LCB3ZSB1c2UgZ2dwbG90IHRvIHBsb3QgdGhlIHBpeGxsaWJzX2xvbmcgZGF0YSBmcmFtZSB3ZSBjcmVhdGVkLiBUaGUgcGxvdCBpcyBjb2xvcmVkIGJ5IGlmIHRoZSBsaW5lIGlzIGEgUElYTCBhYnJhc2lvbidzIGNvbXBvc2l0aW9uIG9yIGEgTElCUyB0YXJnZXQncyBjb21wb3NpdGlvbi4gV2UgYWxzbyBhZGQgYSBsYXllciB3aXRoIHRoZSBlYXJ0aCBxdWFydGlsZSBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgdGhlIGRvdHRlZCBsaW5lcy4KYGBge3J9CiMgTWFwIHRoZSBQSVhML0xJQlMgY29sdW1uIHRvIGNvbG9yIGFuZCB1c2UgdGFyZ2V0X25hbWUgdG8gZGlmZmVyZW50aWF0ZSBsaW5lcwpnZ3Bsb3QocGl4bGxpYnNfbG9uZywgYWVzKHggPSBDb21wb3VuZCwgeSA9IFBlcmNlbnRhZ2UsIGNvbG9yID0gYXMuZmFjdG9yKGxpYnNvcnBpeGwpLCBncm91cCA9IHRhcmdldCkpICsKICBnZW9tX2xpbmUoKSArCiAgZ2VvbV9wb2ludCgpICsKICBzY2FsZV95X2NvbnRpbnVvdXModHJhbnM9J2xvZzEwJykgKwogICMgQWRkIEVhcnRoIHF1YXJ0aWxlIGxpbmVzIHVzaW5nIGVhcnRocXVhcnRpbGVzX2xvbmcKICBnZW9tX2xpbmUoZGF0YSA9IGVhcnRocXVhcnRpbGVzX2xvbmcsIGFlcyh4ID0gQ29tcG91bmQsIHkgPSBQZXJjZW50YWdlLCBsaW5ldHlwZSA9IFF1YXJ0aWxlcywgZ3JvdXAgPSBRdWFydGlsZXMpLCAKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBsaW5ldHlwZSA9ICJkb3R0ZWQiKSArCiAgbGFicyh0aXRsZSA9IHBhc3RlKCJTb2lsIENvbXBvc2l0aW9uIGZvciBQSVhMIGFicmFzaW9uIixhYnJhc2lvbl9uYW1lLCJhbmQgTElCUyB3aXRoaW4iLCBtZXRlcnMsICJtZXRlcnMiLCBzZXAgPSAiICIpLAogICAgICAgeCA9ICJDaGVtaWNhbCBDb21wb3VuZCIsCiAgICAgICB5ID0gIldlaWdodCBQZXJjZW50YWdlIiwKICAgICAgIGNvbG9yID0gIk1lYXN1cmVtZW50IFR5cGUiLAogICAgICAgbGluZXR5cGUgPSAiRWFydGggUXVhcnRpbGVzIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIwIiA9ICJibHVlIiwgIjEiID0gInJlZCIpLCBsYWJlbHMgPSBjKCJQSVhMIiwgIkxJQlMiKSkgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKSSBzdGlsbCBwbGFuIHRvIHVwZGF0ZSBhbmQgdHJ5IHVzaW5nIHRoZSBnZ3Bsb3RsYXkgZmVhdHVyZSB0byBpbmNvcnBvcmF0ZSBhbGwgdGhlIGFicmFzaW9ucyBhbmQgZGF0YSBvbnRvIG9uZSBncmlkIG9mIGxpbmUgcGxvdHMuIEkgYWxzbyBhbSBnb2luZyB0byBhZGQgcGxvdHMgd2hlcmUgdGhlIG1lYW4gaXMgdGFrZW4gb2YgYWxsIHRoZSBMSUJTIHRhcmdldHMgdGhhdCBjb3JyZXNwb25kIHRvIGEgUElYTCBhYnJhc2lvbiBzbyB0aGUgcGxvdCB3aWxsIG9ubHkgaGF2ZSBvbmUgTElCUyBsaW5lIGFuZCBvbmUgUElYTCBsaW5lIChhbG9uZyB3aXRoIHRoZSByZWZlcmVuY2VzKSwgdGhpcyBpcyBhbGwganVzdCBmb3IgdGhlIGRyYWZ0LiBJIGFsc28gbmVlZCB0byBvbmx5IGFkZCBjZXJ0YWluIHF1YXJ0aWxlIGluZm9ybWF0aW9uIGFuZCBsYWJlbCB0aGVtLCB0aGlzIGlzIGp1c3QgYSBwbGFjZWhvbGRlciBvZiB0aGUgcHJldmlvdXMgcGxvdC4gQWxzbyBtYXliZSB3aWxsIGFkZCBpbiBTQ0NUIHZhbHVlcyBhcyByZWZlcmVuY2VzLCBub3Qgc3VyZSBpZiB0aGV5IGFyZSBzdXBlciByZWxldmFudCBvciBob3cgdG8gc29ydCB0aGVtLgoKIyMgNC41IENvbmNsdXNpb25zIGFuZCBGdXR1cmUgV29yawpUaGlzIGZpbmRpbmcgY2FuIGJlIHVzZWQgYnkgZ2VvbG9naXN0cyB0byBhbmFseXplIHdoYXQgZGlmZmVyZW50IHNvaWwgY29tcG9zaXRpb25zIGFyb3VuZCBkaWZmZXJlbnQgUElYTCBhYnJhc2lvbnMgY2FuIG1lYW4gZm9yIGxpZmUgb24gTWFycy4gRm9yIGV4YW1wbGUsIG94aWRlIHByZXNlbmNlIGRvZXNuJ3QgbmVjZXNzYXJpbHkgaW5kaWNhdGUgbGlmZSwgYnV0IGl0IGNvdWxkIGluZGljYXRlIGJpb2xvZ2ljYWwgb3IgY2hlbWljYWwgbGlmZSBwcm9jZXNzZXMuIEZvciBleGFtcGxlLCBDYU8gY2FuIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBvbGQgYmlvbG9naWNhbCBtYXRlcmlhbCBsaWtlIHNoZWxscyBvciBmb3NzaWxzLgotQWRkIG1vcmUgYWJvdXQgZnV0dXJlIHdvcmssIG5vdCBzdXJlIHdoYXQgZWxzZSB0byBpbmNsdWRlCgojIDUuMCBGaW5kaW5nIDM6IEFuYWx5emluZyBDYXRpb24gQ29tYmluYXRpb25zIHVzaW5nIExJQlMgYW5kIFBJWEwgbWF0Y2hlZCBkYXRhClVzaW5nIHRoZSBMSUJTIGFuZCBQSVhMIGNvbWJpbmVkIGRhdGEgc2V0LCB3ZSBjcmVhdGVkIGEgdGVybmFyeSBwbG90IHRvIHNob3cgdGhlIGRpc3RyaWJ1dGlvbiBvZiBMSUJTIHNhbXBsZXMgc29ydGVkIGJ5IHdoYXQgUElYTCBhYnJhc2lvbiB0aGV5IGFyZSBjbG9zZXN0IHRvIChiYXNlZCBvbiBhIGNob3NlbiBkaXN0YW5jZSB2YXJpYWJsZSkuIE11Y2ggb2YgdGhlIGRhdGEgcHJlcHJvY2Vzc2luZyBpcyBzaW1pbGFyIHRvIEZpbmRpbmcgMSB3aGljaCB3ZSB3aWxsIHJlcGVhdCBoZXJlLiBIb3dldmVyLCB0aGUgZ29hbCBoZXJlIGlzIHRvIGFuYWx5emUgaG93IGRpZmZlcmVudCBncm91cHMgb2YgTElCUyBzYW1wbGVzIChjb2xvcmVkIGJ5IG1hdGNoaW5nIFBJWEwgYWJyYXNpb24pIGRpZmZlciBieSBjYXRpb24gY29tcG9zaXRpb24uCgojIyA1LjEgRGF0YSwgQ29kZSwgYW5kIFJlc291cmNlcwpIZXJlIGlzIGEgbGlzdCBkYXRhIHNldHMsIGNvZGVzLCB0aGF0IGFyZSB1c2VkIGluIHlvdXIgd29yay4gQWxvbmcgd2l0aCBicmllZiBkZXNjcmlwdGlvbiBhbmQgVVJMIHdoZXJlIHRoZXkgYXJlIGxvY2F0ZWQuCgoxLiBwZXRlcmMtZmluYWxQcm9qZWN0RjI0LlJtZCAod2l0aCBrbml0IHBkZiBhbmQgaHRtbCkgaXMgdGhpcyBub3RlYm9vay4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA3X0RyYWZ0RmluYWxQcm9qZWN0Tm90ZWJvb2svcGV0ZXJjX2ZpbmFsUHJvamVjdEYyNF9yb3VnaGRyYWZ0LlJtZF0oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kKQoKMi4gc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcyB3aGljaCBpcyB0aGUgb3JpZ2luYWwgTElCUyBkYXRhIGdpdmVuIHRvIG91ciByZXNlYXJjaCBncm91cC4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkc10oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzKQoKCkZpcnN0LCB3ZSBzZXQgYSBkaXN0YW5jZSB2YXJpYWJsZSB3aGljaCBjYW4gYmUgdXNlZCBhcyBhIHNsaWRlciBiYXIgaW4gdGhlIGFwcC4gQ2hhbmdpbmcgdGhpcyB2YXJpYWJsZSBzZXRzIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gYSBQSVhMIHRhcmdldCBhbmQgTElCUyBzYW1wbGUgZm9yIHRoZW0gdG8gYmUgY2xhc3NpZmllZCB0b2dldGhlci4KYGBge3J9CiNzZXQgZGlzdGFuY2UgdmFyaWFibGUgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYSB0b2dnbGUgdG9vbApkaXN0YW5jZT01MApgYGAKClRvIHByZXBhcmUgdGhlIGRhdGEsIEkgc3RhcnQgYnkgbG9hZGluZyBpbiB0aGUgTElCUyBkYXRhLiBUaGVuLCB3ZSBkcm9wIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gY29sdW1ucyBhbmQgc3VtIG9mIHBlcmNlbnRhZ2UgY29sdW1ucyBsZWF2aW5nIHVzIHdpdGgganVzdCB0aGUgd2VpZ2h0ZWQgY29tcG9zaXRpb24gaW4gdGVybXMgb2YgbnVtZXJpY2FsIGRhdGEuIFdlIGFsc28gcmVtb3ZlIHRoZSBzY2N0IHZhbHVlcywgYXMgdGhvc2UgdmFsdWVzIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBlYXJ0aCByZWZlcmVuY2Ugc2FtcGxlcyB0aGF0IFBlcnNlcnZlcmFuY2UgY2FycmllcyB3aXRoIGl0LiBUaGVyZWZvcmUsIHRoZXkgd2lsbCBub3QgYmUgdmVyeSByZWxldmFudCB3aGVuIHBsb3R0aW5nIHRoZSBMSUJTIGRhdGEgYXMgd2UgYXJlIGZvY3VzZWQgb24gdGhlIGNhdGlvbiBjb21iaW5hdGlvbnMgYW5kIHRoZXJlZm9yZSBvbmx5IG5lZWQgdGhlIHdlaWdodGVkIGNvbXBvc2l0aW9ucy4KYGBge3J9CiNMb2FkIGluIExJQlMgZGF0YQpsaWJzLmRmIDwtIHJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzIikKI0Ryb3AgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBmZWF0dXJlcywgdGhlIHN1bSBvZiB0aGUgcGVyY2VudGFnZXMsIAojdGhlIGRpc3RhbmNlLCBhbmQgdGhlIHRvdGFsIGZyZXF1ZW5jaWVzCmxpYnMuZGYgPC0gbGlicy5kZiAlPiUgCiAgc2VsZWN0KCEoYyhkaXN0YW5jZV9tbSxUb3QuRW0uLFNpTzJfc3RkZXYsVGlPMl9zdGRldixBbDJPM19zdGRldixGZU9UX3N0ZGV2LAogICAgICAgICAgICAgTWdPX3N0ZGV2LE5hMk9fc3RkZXYsQ2FPX3N0ZGV2LEsyT19zdGRldixUb3RhbCkpKQojIENvbnZlcnQgdGhlIHBvaW50cyB0byBudW1lcmljCmxpYnMuZGYkcG9pbnQgPC0gYXMubnVtZXJpYyhsaWJzLmRmJHBvaW50KQpsaWJzLmRmWyw2OjEzXSA8LSBzYXBwbHkobGlicy5kZlssNjoxM10sYXMubnVtZXJpYykKI3JlbW92ZSB0aGUgc2NjdC9yZWZlcmVuY2Ugc2FtcGxlcwpsaWJzLmRmPC1saWJzLmRmJT4lCiAgZmlsdGVyKCEoZ3JlcGwoInNjY3QiLCB0YXJnZXQpKSkKI2FkZCBhIGNvbHVtbiB0byBpbmRpY2F0ZSB0aGUgbmVhcmVzdCBwaXhsCmxpYnMuZGY8LWNiaW5kKG5lYXJlc3RwaXhsPTAsbGlicy5kZikKI21ha2UgYSBkYXRhZnJhbWUgb2YganVzdCB0aGUgTElCUyBMYXQvTG9uZyBhbmQgdGFyZ2V0IG5hbWUgYW5kIHJlbW92ZSBkdXBsaWNhdGVzCmxpYnN0YXJnZXRzLmRmPC1saWJzLmRmWyxjKDEsMyw0LDUpXQpsaWJzdGFyZ2V0cy5kZjwtZGlzdGluY3QobGlic3RhcmdldHMuZGYpCmBgYAoKTG9hZCBpbiBQSVhMIGRhdGEKYGBge3J9CiNyZWFkIGluIHBpeGwgZGF0YSB3aXRoIGxhdC9sb25nCnBpeGwuZGY8LXJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvU3R1ZGVudERhdGEvcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzIikKI2luY2x1ZGUgb25seSBwaXhsIG1ldGFkYXRhCnBpeGwuZGY8LXBpeGwuZGYgJT4lCiAgc2VsZWN0KGMoMSwyLDE5LDIwLDIyKSkKI2NvbnZlcnQgTGF0L0xvbmcgdG8gbnVtZXJpYwpwaXhsLmRmJExhdCA8LSBhcy5udW1lcmljKHBpeGwuZGYkTGF0KQpwaXhsLmRmJExvbmcgPC0gYXMubnVtZXJpYyhwaXhsLmRmJExvbmcpCiNyZW1vdmUgcm93cyBzbyB3ZSBvbmx5IGhhdmUgb25lIHNhbXBsZSBwZXIgYWJyYXNpb24gYW5kIHJlbW92ZSBhdG1vc3BoZXJpYyBzYW1wbGUKcGl4bC5kZjwtcGl4bC5kZltjKDIsNCw2LDgsMTAsMTIsMTQsMTYpLF0KYGBgCgpOZXh0LCB3ZSB3aWxsIGluaXRpYWxpemUgYSBkaXN0YW5jZSB2YXJpYWJsZSAodG8gaW5kaWNhdGUgZGlzdGFuY2UgYmV0d2VlbiBQSVhMIGFicmFzaW9uIGFuZCBMSUJTIHRhcmdldCkgYW5kIGFsc28gaW5pdGlhbGl6ZSBlYWNoIFBJWEwgYWJyYXNpb24sIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBtYXJrIHdoaWNoIFBJWEwgYWJyYXNpb24gdGhlIExJQlMgc2FtcGxlIGlzIGNsb3Nlc3QgdG8gYnkgdXNpbmcgYSBmYWN0b3Igb2YgMCBvciAxLiAKYGBge3J9CiNMSUJTIHRhcmdldCBkYXRhIGZyYW1lIHdpdGggZGlzdGFuY2UgdmFyaWFibGUgYXMgd2VsbApsaWJzdGFyZ2V0cy5kZjwtY2JpbmQobGlic3RhcmdldHMuZGYsIkRpc3RhbmNlIj0wLCJCZWxsZWdyYWRlIj0wLCJEb3VyYmVzIj0wLCJRdWFydGllciI9MCwiQWxmYWxmYSI9MCwiVGhvcm50b25HYXAiPTAsIkJlcnJ5SG9sbG93Ij0wLCJOb3ZhcnVwdGEiPTAsIlVnYW5pa0lzbGFuZCI9MCkKYGBgCgpUaGUgZGlzdGFuY2UgZnVuY3Rpb24gYmVsb3cgd2lsbCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBMSUJTIHRhcmdldCBhbmQgYWxsIHRoZSBQSVhMIGFicmFzaW9ucywgYW5kIHBpY2sgdGhlIHNtYWxsZXN0IGRpc3RhbmNlIHRvIHBpY2sgdGhlIGNsb3Nlc3QgUElYTCBhYnJhc2lvbiB0byB0aGF0IExJQlMgdGFyZ2V0LgpgYGB7cn0KI0Rpc3RhbmNlIGZ1bmN0aW9uCmZvcihpIGluIDE6bnJvdyhsaWJzdGFyZ2V0cy5kZikpIHsKICAgIGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV08LWMoZGlzdEhhdmVyc2luZShwaXhsLmRmWzEsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzIsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzMsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzQsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzUsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzYsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzcsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzgsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSkKICAgIAogICAgbGlic3RhcmdldHMuZGZbaSwxXTwtd2hpY2gubWluKGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV0pCiAgICBsaWJzdGFyZ2V0cy5kZltpLDVdPC1taW4obGlic3RhcmdldHMuZGZbaSxjKDY6MTMpXSkKfQpsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bDwtYXMuZmFjdG9yKGxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsKQpsZXZlbHMobGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGwpPC0oYygiQmVsbGVncmFkZSIsIkRvdXJiZXMiLCJRdWFydGllciIsIkFsZmFsZmEiLCJUaG9ybnRvbkdhcCIsIkJlcnJ5SG9sbG93IiwiTm92YXJ1cHRhIiwiVWdhbmlrSXNsYW5kIikpCmBgYAoKQmVsb3cgaXMgYW5vdGhlciBpbml0aWFsaXplciBmb3IgdGhlIFBJWEwgYWJyYXNpb24gZGF0YS4gVGhpcyBzZXRzIHRoZSB2YXJpYWJsZXMgZm9yIGVhY2ggUElYTCBhYnJhc2lvbi4KYGBge3J9CiNTZXRzIGVhY2ggbmVhcmVzdCBQSVhMIHZhcmlhYmxlIGZvciBmdXR1cmUgdXNlIGluIGRlY2lkaW5nIHdoaWNoIHRhcmdldCBpcyBjbG9zZXN0IHRvIGEgTElCUyBzYW1wbGUKQmVsbGVncmFkZTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJCZWxsZWdyYWRlIixdJHRhcmdldApEb3VyYmVzPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkRvdXJiZXMiLF0kdGFyZ2V0ClF1YXJ0aWVyPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlF1YXJ0aWVyIixdJHRhcmdldApBbGZhbGZhPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkFsZmFsZmEiLF0kdGFyZ2V0ClRob3JudG9uR2FwPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlRob3JudG9uR2FwIixdJHRhcmdldApCZXJyeUhvbGxvdzwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJCZXJyeUhvbGxvdyIsXSR0YXJnZXQKTm92YXJ1cHRhPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09Ik5vdmFydXB0YSIsXSR0YXJnZXQKVWdhbmlrSXNsYW5kPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlVnYW5pa0lzbGFuZCIsXSR0YXJnZXQKYGBgCgpOZXh0LCB3ZSBmaWx0ZXIgb3V0IHRoZSBMSUJTIHRhcmdldHMgdGhhdCBhcmUgbm90IHdpdGhpbiB0aGUgc3BlY2lmaWVkIGRpc3RhbmNlIHZhcmlhYmxlLiBUaGVuLCB3ZSBtZXJnZSB0aGUgTElCUyBkYXRhIHdpdGggdGhlIHJlc3BlY3RpdmUgUElYTCBhYnJhc2lvbiBieSBtdXRhdGluZyBhbmQgYWRkaW5nIGFuIGFicmFzaW9uIGNvbHVtbiB0aGF0IGhhcyB0aGUgYWJyYXNpb24gbmFtZSBjbG9zZXN0IHRvIGVhY2ggTElCUyB0YXJnZXQuIFdlIGFsc28gYWRkIGEgY29sdW1uLCBMSUJTIG9yIFBJWEwsIHdoaWNoIGRlbm90ZXMgaWYgdGhlIHJvdyBvZiBkYXRhIGlzIGZyb20gdGhlIFBJWEwgYW5kIExJQlMgZGF0YSBzZXRzLiBXZSBhbHNvIHNldCB1cCB0aGUgbGlicy50ZXJuIG1hdHJpeCB3aGljaCB3aWxsIApgYGB7cn0KaW5jbHVkZWQubGliczwtKGxpYnN0YXJnZXRzLmRmJT4lCiAgZmlsdGVyKERpc3RhbmNlPG1ldGVycykpJHRhcmdldApsaWJzLm1hdHJpeCA8LWxpYnMuZGYgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGluY2x1ZGVkLmxpYnMpCiNzZXQgTElCUyBtYXRyaXggYW5kIHRlcm5hcnkgcGxvdCBieSBhZGRpbmcgaW4gY2F0aW9uIGNvbXBvbmVudHMgYW5kIG11dGF0aW5nCmxpYnMubWF0cml4IDwtIGxpYnMubWF0cml4WyxjKDUsNzoxNCldCmxpYnMudGVybiA8LSBhcy5kYXRhLmZyYW1lKGxpYnMubWF0cml4KSAlPiUKICBtdXRhdGUoeD0oU2lPMitBbDJPMykvMTAwLHk9KEZlT1QrTWdPKS8xMDAsej0oQ2FPK05hMk8rSzJPKS8xMDApICU+JQogIHNlbGVjdCgtYyhTaU8yLEFsMk8zLEZlT1QsTWdPLENhTyxOYTJPLEsyTyxUaU8yKSkKbGlicy50ZXJuPC1jYmluZCgiQWJyYXNpb24iPTAsbGlicy50ZXJuKQojU2V0IHdoYXQgYWJyYXNpb24gZ29lcyB3aXRoIHRoZSByZXNwZWN0aXZlIExJQlMgc2FtcGxlIGl0IG1hdGNoZXMgd2l0aApsaWJzLnRlcm48LWxpYnMudGVybiU+JQogIG11dGF0ZShBYnJhc2lvbiA9IGlmZWxzZSh0YXJnZXQlaW4lQWxmYWxmYSwiQWxmYWxmYSIsIAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBCZWxsZWdyYWRlLCAiQmVsZWdyYWRlIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgQmVycnlIb2xsb3csICJCZXJyeUhvbGxvdyIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIERvdXJiZXMsICJEb3VyYmVzIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgTm92YXJ1cHRhLCAiTm92YXJ1cHRhIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgUXVhcnRpZXIsICJRdWFydGllciIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFRob3JudG9uR2FwLCAiVGhvcm50b25HYXAiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBVZ2FuaWtJc2xhbmQsICJVZ2FuaWtJc2xhbmQiLEFicmFzaW9uKSkpKSkpKSkpCiNzdW1tYXJ5IG9mIExJQlMgZGF0YSBpbmNsdWRpbmcgZGlzdGFuY2UgcGFyYW1ldGVyLCBudW1iZXIgb2YgTElCUyB0YXJnZXRzLCBhbmQgbnVtYmVyIG9mIExJQlMgcG9pbnRzCmthYmxlZGY8LXJiaW5kKCJEaXN0YW5jZSAobSkiPW1ldGVycywiVGFyZ2V0cyI9bGVuZ3RoKGluY2x1ZGVkLmxpYnMpLCJQb2ludHMiPW5yb3cobGlicy50ZXJuKSkKa2FibGUoa2FibGVkZiwgY2FwdGlvbiA9IkxJQlMgIyBvZiBUYXJnZXRzIGFuZCBQb2ludHMgd2l0aGluIFNwZWNpZmllZCBEaXN0YW5jZSIpCmBgYAoKCgojIyA1LjIgQ29udHJpYnV0aW9uCgpUaGlzIHdvcmsgd2FzIGFsc28gYSBjb21iaW5hdGlvbiBvZiBtZSBhbmQgTWFyZ28uIFRoZSBkYXRhIHNldCBjcmVhdGlvbiB3YXMgYm90aCBvZiB1cyBpbiBvdXIgYnJhaW5zdG9ybWluZyBhcyB0aGlzIHV0aWxpemVzIHRoZSBkYXRhIHNldCB3ZSBjcmVhdGVkIG9mIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgZm9yIFBJWEwuCi0gQWRkIG1vcmUgaGVyZQotIFZlcnkgc2ltaWxhciB0byBvdGhlciB0d28gc2VjdGlvbnMgYWRkIGluIGxhdGVyLCBNYXJnbyBhbmQgSSB3b3JrZWQgb24gbW9zdCBvZiB0aGlzIHRvZ2V0aGVyCgojIyA1LjMgTWV0aG9kcyBEZXNjcmlwdGlvbiAKCi0gU3RhcnRlZCB3aXRoIGZpbHRlcmluZyBvcmlnaW5hbCBkYXRhIHRvIGdldCByaWQgb2YgU0NDVCB2YWx1ZXMKLSB0aGVuIHNldCB1cCB0ZXJuYXJ5IGRhdGEgZnJhbWUgYnkgbXV0YXRpbmcgYnkgY2F0aW9uIGNvbXBvc2l0aW9ucwotIHRoZW4gbXV0YXRlZCB0byBtYWtlIHRoZSBQSVhMIGFicmFzaW9ucyB0aGUga2V5LCBzbyB0aGUgTElCUyB0YXJnZXRzIGFyZSBjb2xvcmVkIGJ5IHRoZSBjbG9zZXN0IFBJWEwgYWJyYXNpb24sIGNyZWF0aW5nIGEgZm9ybSBvZiBjbHVzdGVycy4KCiMjIDUuNCBSZXN1bHQgYW5kIERpc2N1c3Npb24gClVzaW5nIGFsbCBvZiB0aGUgbWFuaXB1bGF0aW9uIGRvbmUgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGVybmFyeSBwbG90LCB3ZSB0aGVuIHBsb3QgdXNpbmcgdGhlIGdndGVybiBjb21tYW5kLiBXZSB3aWxsIGNvbG9yIGJ5IGFicmFzaW9uIHRvIHNlZSB0aGUgZGlzdHJpYnV0aW9uIG9mIGNvbXBvc2l0aW9uIGJldHdlZW4gZGlmZmVyZW50IGFicmFzaW9ucy4gVGhpcyBzaG91bGQgaGVscCB1cyBiZSBhYmxlIHRvIGRyYXcgZGlmZmVyZW50IGNvbmNsdXNpb25zIGFib3V0IGhvdyBhYnJhc2lvbnMgcmVsYXRlIG9yIGRvbid0IHJlbGF0ZS4gVGhlIG1heCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBQSVhMIHRhcmdldCBhbmQgTElCUyBzYW1wbGUgY2FuIGJlIG1vZGlmaWVkIGhvd2V2ZXIgZGVzaXJlZC4KYGBge3J9CmdndGVybihsaWJzLnRlcm4sIGdndGVybjo6YWVzKHg9eCx5PXksej16KSkgKwogIGdlb21fcG9pbnQoZGF0YT1saWJzLnRlcm4sYWVzKGNvbG9yPUFicmFzaW9uLGFscGhhPTAuNSkpICsgCiAgdGhlbWVfcmdidygpICsgCiAgbGFicyh0aXRsZT1wYXN0ZSgiTWFycyBMSUJTIERhdGEgV2l0aGluIixkaXN0YW5jZSwibWV0ZXJzIG9mIFBJWEwiLHNlcD0iICIpLAogICAgICAgeD0iU2krQWwiLAogICAgICAgeT0iRmUrTWciLAogICAgICAgej0iQ2ErTmErSyIpK3RoZW1lKGxlZ2VuZC5wb3NpdGlvbj0icmlnaHQiKSArIAogIGd1aWRlcyhhbHBoYT0ibm9uZSIpCmBgYAoKIyMgNS41IENvbmNsdXNpb25zIGFuZCBGdXR1cmUgV29yawpCYXNlZCBvbiB0aGlzIHRlcm5hcnkgcGxvdCwgd2UgY2FuIHNlZSBBbGZhbGZhIGFuZCBCZWxlZ3JhZGUgYXJlIGhpZ2hlciBpbiBTaStBbCBhbmQgVWdhbmlrIElzbGFuZCBpcyBhbiBvdXRsaWVyLiBBcyB0aGlzIHdhcyB0aGUgbGFzdCBwaWVjZSBvZiB0aGUgUElYTCBkYXRhIGluIHRoZSBkYXRhIHNldCBhbmQgaXQgd2FzIG1pc3NpbmcgYSBwYWlyIHNpbmNlIGV2ZXJ5IG90aGVyIGFicmFzaW9uIHdhcyBtYWRlIHVwIG9mIHR3byBzYW1wbGVzLCBpdCBpcyBpbmNsdWRlZCBpbiBoZXJlIGJ1dCB1bnRpbCB0aGUgZGF0YSBzZXQgaXMgdXBkYXRlZCB0aGVyZSBpcyBub3QgZW5vdWdoIGNvbnRleHQgdG8gZXhwbGFpbiB3aHkgaXQgaXMgc28gdmFzdGx5IGRpZmZlcmVudC4gSSB3b3VsZCBhc3N1bWUgaXQgaXMgZHVlIHRvIGhvdyB0aGUgcm9ib3QgaXMgdHJhdmVsaW5nIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIFVnYW5pa0lzbGFuZCBhYnJhc2lvbiBpcyB2ZXJ5IGRpZmZlcmVudCB0aGFuIHRoZSBvdGhlciA3IGFicmFzaW9ucy4KLSBGdXR1cmUgd29yaywgd291bGQgaW5jbHVkZSBtb3JlIGRhdGEgdG8gZ2FpbiBicm9hZGVyIGNvbnRleHQKCiMgQmlibGlvZ3JhcGh5ClByb3ZpZGUgYSBsaXN0aW5nIG9mIHJlZmVyZW5jZXMgYW5kIG90aGVyIHNvdXJjZXMuCgoqIEFuYWx5c3QncyBOb3RlYm9vawoqIE5vdCBzdXJlIHdoYXQgZWxzZSBpcyByZWxldmFudCwgbW9zdCBvZiB3aGF0IEkgdXNlZCB3YXMgc2ltaWxhciB0byBBbmFseXN0J3MgTm90ZWJvb2sKCiMgQXBwZW5kaXgKCipJbmNsdWRlIGhlcmUgd2hhdGV2ZXIgeW91IHRoaW5rIGlzIHJlbGV2YW50IHRvIHN1cHBvcnQgdGhlIG1haW4gY29udGVudCBvZiB5b3VyIG5vdGVib29rLiBGb3IgZXhhbXBsZSwgeW91IG1heSBoYXZlIG9ubHkgaW5jbHVkZSBleGFtcGxlIGZpZ3VyZXMgYWJvdmUgaW4geW91ciBtYWluIHRleHQgYnV0IGluY2x1ZGUgYWRkaXRpb25hbCBvbmVzIGhlcmUuIE9yIHlvdSBtYXkgaGF2ZSBkb25lIGEgbW9yZSBleHRlbnNpdmUgaW52ZXN0aWdhdGlvbiwgYW5kIHdhbnQgdG8gcHV0IG1vcmUgcmVzdWx0cyBoZXJlIHRvIGRvY3VtZW50IHlvdXIgd29yayBpbiB0aGUgc2VtZXN0ZXIuIEJlIHN1cmUgdG8gZGl2aWRlIGFwcGVuZGl4IGludG8gYXBwcm9wcmlhdGUgc2VjdGlvbnMgYW5kIG1ha2UgdGhlIGNvbnRlbnRzIGNsZWFyIHRvIHRoZSByZWFkZXIgdXNpbmcgYXBwcm9hY2hlcyBkaXNjdXNzZWQgYWJvdmUuICogClNob3VsZCBJIGFkZCBtb3JlIGV4YW1wbGVzIGhlcmUgb2Ygc29pbCBjb21wb3NpdGlvbiBwbG90cyBvZiBkaWZmZXJlbnQgYWJyYXNpb25zPyBJIGFsc28gY291bGQgYWRkIGhlYXQgbWFwIGFuYWx5c2lzIHRvIHRoaXMgbm90ZWJvb2sgYXMgYSBmaW5kaW5nIGJ1dCB3YXNuJ3Qgc3VyZSBpZiBpdCB3YXMgcmVhbGx5IHJlbGV2YW50LgoK
    diff --git a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.pdf b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.pdf index 8a913843b637222e3bd858de295a420c2b1cd57e..0102c12272e94280d4037a16eea5a8c31b21e460 100644 GIT binary patch delta 42044 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 delta 41721 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 Date: Tue, 3 Dec 2024 12:21:47 -0500 Subject: [PATCH 2/2] fixing the links AGAIN --- .../peterc_finalProjectF24_roughdraft.Rmd | 10 +++++----- .../peterc_finalProjectF24_roughdraft.html | 12 ++++++------ .../peterc_finalProjectF24_roughdraft.nb.html | 4 ++-- .../peterc_finalProjectF24_roughdraft.pdf | Bin 343830 -> 343829 bytes 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd index 1a87b5e..f72010e 100644 --- a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd +++ b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd @@ -3,16 +3,16 @@ title: "Data Analytics Research Individual Final Project Report - Mars" author: "Charlotte Peterson" date: "Fall 2024" output: - pdf_document: - toc: yes - toc_depth: '3' - html_notebook: default html_document: toc: yes toc_depth: 3 toc_float: yes number_sections: yes theme: united + html_notebook: default + pdf_document: + toc: yes + toc_depth: '3' --- @@ -237,7 +237,7 @@ Here is a list data sets, codes, that are used in your work. Along with brief de [https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd) 2. peterc_assignment5.Rmd (with knit pdf and html) which is my previous notebook. -[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd]) +[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assignment05.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assignment05.Rmd]) 3. supercam_libs_moc_loc.Rds which is the original LIBS data given to our research group. [https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds) diff --git a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.html b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.html index 6e74b7d..69e10cd 100644 --- a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.html +++ b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.html @@ -1614,10 +1614,10 @@

    5.4 3.4 Result and theme( plot.caption = element_text(hjust = 0) # Aligns caption to the left ) -

    +

    #add legend for PIXL idk why it's not working
    @@ -1749,9 +1749,9 @@

    6.1 4.1 Data, Code, and with brief description and URL where they are located.

    1. peterc_finalProjectF24.Rmd (with knit pdf and html) is this -notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc_finalProjectF24.Rmd

    2. +notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd

    3. peterc_assignment5.Rmd (with knit pdf and html) which is my -previous notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd

    4. +previous notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assignment05.Rmd

    5. supercam_libs_moc_loc.Rds which is the original LIBS data given to our research group. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds

    6. pixl_sol_coordinates.Rds, which is the data set containing the @@ -1988,7 +1988,7 @@

      7.1 5.1 Data, Code, and with brief description and URL where they are located.

      1. peterc-finalProjectF24.Rmd (with knit pdf and html) is this -notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc-finalProjectF24.Rmd

      2. +notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd

      3. supercam_libs_moc_loc.Rds which is the original LIBS data given to our research group. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds

      diff --git a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html index 3bc6417..4349dc1 100644 --- a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html +++ b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html @@ -2029,7 +2029,7 @@

      4.1 Data, Code, and Resources

    7. peterc_finalProjectF24.Rmd (with knit pdf and html) is this notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd

    8. peterc_assignment5.Rmd (with knit pdf and html) which is my -previous notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd

    9. +previous notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assignment05.Rmd

    10. supercam_libs_moc_loc.Rds which is the original LIBS data given to our research group. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds

    11. pixl_sol_coordinates.Rds, which is the data set containing the @@ -2568,7 +2568,7 @@

      Appendix

    -
    LS0tCnRpdGxlOiAiRGF0YSBBbmFseXRpY3MgUmVzZWFyY2ggSW5kaXZpZHVhbCBGaW5hbCBQcm9qZWN0IFJlcG9ydCAtIE1hcnMiCmF1dGhvcjogIkNoYXJsb3R0ZSBQZXRlcnNvbiIKZGF0ZTogIkZhbGwgMjAyNCIKb3V0cHV0OgogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6ICczJwogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogMwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0aGVtZTogdW5pdGVkCi0tLQoKCiMgREFSIFByb2plY3QgYW5kIEdyb3VwIE1lbWJlcnMKCiogUHJvamVjdCBuYW1lOiBNYXJzCiogR2l0SHViIElEOiBkYXItcGV0ZXJjCiogUHJvamVjdCB0ZWFtIG1lbWJlcnM6IERhbnRlIE13YXRpYm8sIERvw7FhIFJvYmVydHMsIERhdmlkIFdhbGN5emssIFh1YW50aW5nIFdhbmcsIEFzaHRvbiBDb21wdG9uLCBNYXJnbyBWYW5Fc3NlbHN0eW4sIE5pY29sYXMgTW9yYXdza2ksIENKIE1hcmlubywgQWFkaSBMYWhpcmkgCgojIDAuMCBQcmVsaW1pbmFyaWVzLgoKKlIgTm90ZWJvb2tzIGFyZSBtZWFudCB0byBiZSBkeW5hbWljIGRvY3VtZW50cy4gUHJvdmlkZSBhbnkgcmVsZXZhbnQgdGVjaG5pY2FsIGd1aWRhbmNlIGZvciB1c2VycyBvZiB5b3VyIG5vdGVib29rLiBBbHNvIHRha2UgY2FyZSBvZiBhbnkgcHJlbGltaW5hcmllcywgc3VjaCBhcyByZXF1aXJlZCBwYWNrYWdlcy4gU2FtcGxlIHRleHQ6KgoKVGhpcyByZXBvcnQgaXMgZ2VuZXJhdGVkIGZyb20gYW4gUiBNYXJrZG93biBmaWxlIHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBSIGNvZGUgbmVjZXNzYXJ5IHRvIHByb2R1Y2UgdGhlIHJlc3VsdHMgZGVzY3JpYmVkIGFuZCBlbWJlZGRlZCBpbiB0aGUgcmVwb3J0LiAgQ29kZSBibG9ja3MgY2FuIGJlIHN1cnByZXNzZWQgZnJvbSBvdXRwdXQgZm9yIHJlYWRhYmlsaXR5IHVzaW5nIHRoZSBjb21tYW5kIGNvZGUgYHtSLCAgZWNobz1zaG93fWAgaW4gdGhlIGNvZGUgYmxvY2sgaGVhZGVyLiBJZiBgc2hvdyA8LSBGQUxTRWAgdGhlIGNvZGUgYmxvY2sgd2lsbCBiZSBzdXJwcmVzc2VkOyBpZiBgc2hvdyA8LSBUUlVFYCB0aGVuIHRoZSBjb2RlIHdpbGwgYmUgc2hvdy4gCgpgYGB7cn0KIyBTZXQgdG8gVFJVRSB0byBleHBhbmQgUiBjb2RlIGJsb2Nrczsgc2V0IHRvIEZBTFNFIHRvIGNvbGxhcHNlIFIgY29kZSBibG9ja3MgCnNob3cgPC0gVFJVRQpgYGAKCjwhLS0gRXhwYW5kIHRoaXMgbGlzdCBhcyBuZWNlc3NhcnkgZm9yIHlvdXIgbm90ZWJvb2sgLS0+CkV4ZWN1dGluZyB0aGlzIFIgbm90ZWJvb2sgcmVxdWlyZXMgc29tZSBzdWJzZXQgb2YgdGhlIGZvbGxvd2luZyBwYWNrYWdlczoKCiogYGdncGxvdDJgCiogYHRpZHl2ZXJzZWAKKiBgcGFuZG9jYAoqIGBybWFya2Rvd25gCiogYHN0cmluZ3JgCiogYGdnYmlwbG90YAoqIGBrbml0cmAKKiBgcnBhcnRgCiogYHJwYXJ0LnBsb3RgCiogYGNhcmV0YAoqIGBnZ3JlcGVsYAoqIGBnZ3Rlcm5gCgoKVGhlc2Ugd2lsbCBiZSBpbnN0YWxsZWQgYW5kIGxvYWRlZCBhcyBuZWNlc3NhcnkgKGNvZGUgc3VwcHJlc3NlZCkuIAoKPCEtLSBUaGUgYGluY2x1ZGU9RkFMU0VgIG9wdGlvbiBwcmV2ZW50cyB5b3VyIGNvZGUgZnJvbSBiZWluZyBzaG93biBhdCBhbGwgLS0+CmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIFRoaXMgY29kZSB3aWxsIGluc3RhbGwgcmVxdWlyZWQgcGFja2FnZXMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgaW5zdGFsbGVkCiMgQUxXQVlTIElOU1RBTEwgWU9VUiBQQUNLQUdFUyBMSUtFIFRISVMhCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQogICBsaWJyYXJ5KGdncGxvdDIpCn0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQoKaWYgKCFyZXF1aXJlKCJwYW5kb2MiKSkgewogIGluc3RhbGwucGFja2FnZXMoInBhbmRvYyIpCiAgbGlicmFyeShwYW5kb2MpCn0KCiMgUmVxdWlyZWQgcGFja2FnZXMgZm9yIE0yMCBMSUJTIGFuYWx5c2lzCmlmICghcmVxdWlyZSgicm1hcmtkb3duIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJybWFya2Rvd24iKQogIGxpYnJhcnkocm1hcmtkb3duKQp9CgppZiAoIXJlcXVpcmUoInN0cmluZ3IiKSkgewogIGluc3RhbGwucGFja2FnZXMoInN0cmluZ3IiKQogIGxpYnJhcnkoc3RyaW5ncikKfQoKaWYgKCFyZXF1aXJlKCJnZ2JpcGxvdCIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2diaXBsb3QiKQogIGxpYnJhcnkoZ2diaXBsb3QpCn0KCmlmICghcmVxdWlyZSgia25pdHIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikKICBsaWJyYXJ5KGtuaXRyKQp9CgppZiAoIXJlcXVpcmUoInJwYXJ0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydCIpCiAgbGlicmFyeShycGFydCkKfQoKaWYgKCFyZXF1aXJlKCJycGFydC5wbG90IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydC5wbG90IikKICBsaWJyYXJ5KHJwYXJ0KQp9CgppZiAoIXJlcXVpcmUoImNhcmV0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJjYXJldCIpCiAgbGlicmFyeShjYXJldCkKfQogIAppZiAoIXJlcXVpcmUoImdncmVwZWwiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdncmVwZWwiKQogIGxpYnJhcnkoZ2dyZXBlbCkKfQoKaWYgKCFyZXF1aXJlKCJnZW9zcGhlcmUiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdlb3NwaGVyZSIpCiAgbGlicmFyeShnZ3JlcGVsKQp9CgppZiAoIXJlcXVpcmUoImdndGVybiIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2d0ZXJuIikKICBsaWJyYXJ5KGdncmVwZWwpCn0KCmBgYAoKIyAxLjAgUHJvamVjdCBJbnRyb2R1Y3Rpb24KClRoZSBNYXJzIFByb2plY3QgaXMgZm9jdXNlZCBvbiBkYXRhIGZyb20gdGhlIDIwMjAgTWFycyBQZXJzZXZlcmFuY2UgUm92ZXIuIFRoZSBnb2FsIG9mIHRoZSBtaXNzaW9uIGlzIHRvIGxvb2sgZm9yIG1pY3JvYmlhbCBhbmNpZW50IGxpZmUgb3IgZm9ybXMgb2Ygd2F0ZXIgb24gTWFycyAodGhpbmdzIHRoYXQgY291bGQgc3VnZ2VzdCBsaWZlKS4gUGVyc2V2ZXJhbmNlIHVzZXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMsIGluY2x1ZGluZyBQSVhMIChQbGFuZXRhcnkgSW5zdHJ1bWVudCBmb3IgWC1SYXkgTGl0aG9jaGVtaXN0cnkpLCBTSEVSTE9DIChTY2FubmluZyBIYWJpdGFibGUgRW52aXJvbm1lbnRzIHdpdGggUmFtYW4gYW5kIEx1bWluZXNjZW5jZSBmb3IgT3JnYW5pY3MgYW5kIENoZW1pY2FscykgYW5kIFNVUEVSQ0FNLiBTVVBFUkNBTSBoYXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMgdGhhdCBtZWFzdXJlIHNwZWN0cm9zY29weSB0byBtZWFzdXJlIHByb3BlcnRpZXMgb2YgbWF0ZXJpYWxzIG9uIE1hcnMsIGluY2x1ZGluZyBMSUJTIChMYXNlci1pbmR1Y2VkIGJyZWFrZG93biBzcGVjdHJvc2NvcHkpLiBUaGlzIG5vdGVib29rIHdpbGwgcHJpbWFyaWx5IGZvY3VzIG9uIHRoZSBkYXRhIHdlIGhhdmUgYmVlbiBnaXZlbiBvZiBQSVhMIGFuZCBMSUJTLiAgCgojIDIuMCBPcmdhbml6YXRpb24gb2YgUmVwb3J0CgpUaGlzIHJlcG9ydCBpcyBvcmdhbml6ZSBhcyBmb2xsb3dzOiAKCiogU2VjdGlvbiAzLjAuICBGaW5kaW5nIDE6IExJQlMgYW5kIFBJWEwgTWF0Y2hpbmcgLSBXZSB3ZXJlIGFibGUgdG8gY29tYmluZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgYnkgcGlja2luZyBhIG1heGltdW0gZGlzdGFuY2UgdmFyaWFibGUgZnJvbSBhIFBJWEwgYWJyYXNpb24gYW5kIG1hdGNoaW5nIExJQlMgc2FtcGxlcyB0aGF0IHdlcmUgd2l0aGluIHRoZSBzZXQgZGlzdGFuY2Ugb2YgYSBQSVhMIGFicmFzaW9uLiAgCgoqIFNlY3Rpb24gNC4wOiBGaW5kaW5nIDI6IFNvaWwgQ29tcG9zaXRpb24gQW5hbHlzaXMgLSBVc2luZyB0aGUgTElCUyBhbmQgUElYTCBjb21iaW5lZCBkYXRhIHNldCwgSSBjcmVhdGVkIGEgcGxvdCBvZiB0aGUgY29tcG9zaXRpb24gcGVyY2VudGFnZXMgb2YgY2hlbWljYWwgY29tcG91bmRzIHN1Y2ggYXMgU2kwMiwgSzIwLCBldGMuIHVzaW5nIGxvZyBzY2FsaW5nIHRvIGNvbXBhcmUgdGhlIGNvbXBvc2l0aW9ucyBvZiBhIFBJWEwgYWJyYXNpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlIGNvbXBvc2l0aW9ucyAoYmFzZWQgb24gdGhlIExJQlMgc2FtcGxlcyBmb3IgeCBkaXN0YW5jZSBhd2F5IGZyb20gYSBQSVhMIGFicmFzaW9uKS4KCiogU2VjdGlvbiA1LjAgRmluZGluZyAzOiBBbmFseXppbmcgQ2F0aW9uIENvbWJpbmF0aW9ucyB1c2luZyBMSUJTIGFuZCBQSVhMIG1hdGNoZWQgZGF0YTogVXNpbmcgdGhlIExJQlMgYW5kIFBJWEwgY29tYmluZWQgZGF0YSBzZXQsIHdlIGNyZWF0ZWQgYSB0ZXJuYXJ5IHBsb3QgdG8gc2hvdyB0aGUgZGlzdHJpYnV0aW9uIG9mIExJQlMgc2FtcGxlcyBzb3J0ZWQgYnkgd2hhdCBQSVhMIGFicmFzaW9uIHRoZXkgYXJlIGNsb3Nlc3QgdG8gKGJhc2VkIG9uIGEgY2hvc2VuIGRpc3RhbmNlIHZhcmlhYmxlKS4KCiogU2VjdGlvbiA2LjAgT3ZlcmFsbCBjb25jbHVzaW9ucyBhbmQgc3VnZ2VzdGlvbnMgCgoqIFNlY3Rpb24gNy4wIEFwcGVuZGl4IFRoaXMgc2VjdGlvbiBkZXNjcmliZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgd29ya3MgdGhhdCBtYXkgYmUgaGVscGZ1bCBpbiB0aGUgZnV0dXJlIHdvcms6ICpsaXN0IHN1YmplY3RzKi4gIAoKCiMgMy4wIEZpbmRpbmcgMTogUElYTCBhbmQgTElCUyBNYXRjaGluZwoKX0dpdmUgYSBoaWdobGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIG1ham9yIGZpbmRpbmcuIFdoYXQgcXVlc3Rpb25zIHdlcmUgeW91ciB0cnlpbmcgdG8gYWRkcmVzcywgd2hhdCBhcHByb2FjaGVzIGRpZCB5b3UgZW1wbG95LCBhbmQgd2hhdCBoYXBwZW5lZD9fCgpGaXJzdGx5LCB3ZSB3aWxsIGJlIHRha2luZyBhIGxvb2sgYXQgaG93IFBJWEwgYW5kIExJQlMgY29ycmVzcG9uZC4gT3VyIGdyb3VwIGZvdW5kIHZlcnkgZWFybHkgaW4gb3VyIHJlc2VhcmNoIHRoYXQgdGhlcmUgd2Fzbid0IGEgZmVhdHVyZSBhbW9uZyB0aGVtIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggdGhlIGRhdGEgc2V0cy4gRm9yIGV4YW1wbGUsIHRoZSBjb2x1bW5zIG9mIFBJWEwgYXJlIG9yZ2FuaXplZCBieSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGFzIHdlbGwgYXMgc2FtcGxlIG51bWJlciAoMS0xNiksIHNhbXBsZSBuYW1lLCBhbmQgYWJyYXNpb24gbmFtZS4gVW5mb3J0dW5hdGVseSwgTElCUyB3YXNuJ3Qgc29ydGVkIHRoZSBzYW1lIHdheS4gTElCUyB3YXMgb3JnYW5pemVkIGJ5IHRoZSBzb2wgdGhhdCB0aGUgc2FtcGxlIHdhcyB0YWtlbiBhdC4gTElCUyBpcyBicm9rZW4gdXAgaW50byBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBzYW1wbGVzIGFzIHdlbGwsIGluY2x1ZGluZyB0aGUgZmFjdCBpdCBjYXJyaWVzIGFyb3VuZCBlYXJ0aCByZWZlcmVuY2UgZGF0YSB0byBiZSB1c2VkIGluIGNvbXBhcmluZyB3aXRoIGRpZmZlcmVudCBzYW1wbGUgc2l0ZXMuIFRoYXQgYmVpbmcgc2FpZCwgaW4gb3JkZXIgdG8gbWF0Y2ggUElYTCB0YXJnZXRzIHRvIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGVzLCBNYXJnbyBhbmQgSSBjcmVhdGVkIGEgbmV3IGRhdGEgc2V0IHRoYXQgYWRkZWQgYW5vdGhlciBtZXRhZGF0YSBmZWF0dXJlIHRvIFBJWEwgKGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgY29vcmRpbmF0ZXMpIHdoaWNoIHdlIG9idGFpbmVkIGZyb20gdGhlIEFuYWx5c3QncyBOb3RlYm9vay4gT25jZSB0aGlzIHdhcyBhZGRlZCBpbiwgd2UgcmVhbGl6ZWQgdGhhdCB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBkaWRuJ3QgcmVhbGx5IG1hdGNoLiBTbyBNYXJnbyBjcmVhdGVkIGEgZGlzdGFuY2UgZnVuY3Rpb24gdG8gbWF0Y2ggTElCUyBzYW1wbGVzIHRvIFBJWEwgdGFyZ2V0cyBiYXNlZCBvbiB3aGF0ZXZlciBkaXN0YW5jZSBhIHBlcnNvbiBzcGVjaWZpZXMuIE9yaWdpbmFsbHksIHdlIHNldCBpdCB0byBiZSByb3VuZGVkIHRvIHRocmVlIHRob3VzYW5kdGhzIGFuZCBtYXRjaCBiYXNlZCBvbiB0aGF0LgoKVGhpcyBoZWxwZWQgYW5zd2VyIHRoZSBxdWVzdGlvbiBvZiBob3cgY2FuIHdlIGNvcnJlbGF0ZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgdG8gYmUgYWJsZSB0byBwbG90IHRoZW0gb24gdGhlIHNhbWUgYXhpcyBvZiB3aGF0ZXZlciBwbG90IGlzIHRyeWluZyB0byBiZSBjcmVhdGVkLiBJIHdhcyBjdXJpb3VzIHRvIHNlZSBob3cgY2xvc2UgUElYTCB0YXJnZXRzIHdlcmUgdG8gTElCUyBzYW1wbGUgc2l0ZXMgYXMgd2VsbCBhcyBob3cgbWFueSBMSUJTIHNhbXBsZXMgd291bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgUElYTCB0YXJnZXQgcGVyaGFwcyB3aXRoIGEgcmFkaXVzIG9mIDcgb3IgMTAgbWV0ZXJzLgoKIyMgMy4xIERhdGEsIENvZGUsIGFuZCBSZXNvdXJjZXMKCkhlcmUgaXMgYSBsaXN0IGRhdGEgc2V0cywgY29kZXMsIHRoYXQgYXJlIHVzZWQgaW4geW91ciB3b3JrLiBBbG9uZyB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBVUkwgd2hlcmUgdGhleSBhcmUgbG9jYXRlZC4KCjEuIHBldGVyYy1maW5hbFByb2plY3RGMjQuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSBpcyB0aGlzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwN19EcmFmdEZpbmFsUHJvamVjdE5vdGVib29rL3BldGVyY19maW5hbFByb2plY3RGMjRfcm91Z2hkcmFmdC5SbWQpCgoyLiB2MV9saWJzX3RvX3NhbXBsZS5SZHMgaXMgdGhlIGNvbWJpbmVkIGRhdGEgc2V0IG9mIFBJWEwgYW5kIExJQlMgdGhhdCBpbmNsdWRlcyB0aGUgZGlzdGFuY2UgZnJvbSBhIFBJWEwgYWJyYXNpb24gdG8gYSBMSUJTIHNhbXBsZS4gIApbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudERhdGEvdjFfbGlic190b19zYW1wbGUuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50RGF0YS92MV9saWJzX3RvX3NhbXBsZS5SZHMpLiAKCkZpcnN0bHksIHdlIHNldCB0aGUgbnVtYmVyIG9mIG1ldGVycyBkaXN0YW5jZSB0aHJlc2hvbGQgYmV0d2VlbiBhIFBJWEwgYWJyYXNpb24gYW5kIExJQlMgc2FtcGxlLiBXaXRoaW4gdGhlIHYxX2xpYnNfdG9fc2FtcGxlLlJkcywgd2hpY2ggTWFyZ28gYW5kIEkgY29sbGFib3JhdGVkIG9uIHRoZXJlIGlzIGEgZGlzdGFuY2UgdmFyaWFibGUgdGhhdCBpcyBzZXQgdmlhIGEgZnVuY3Rpb24gdGhhdCBNYXJnbyBjcmVhdGVkIHRvIG1lYXN1cmUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBQSVhMIGFicmFzaW9uIGFuZCBMSUJTIHNhbXBsZSB1c2luZyB0aGVpciBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzLiAKYGBge3J9Cm1ldGVycyA8LSAxMDAKYGBgCgpUbyBwcmVwYXJlIHRoZSBkYXRhLCB3ZSB3aWxsIGxvYWQgaW4gdGhlIHYxX2xpYnNfdG9fc2FtcGxlLlJkcywgZ3JvdXAgYnkgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBvZiBMSUJTLCBhbmQgZmlsdGVyIG91dCBldmVyeSBMSUJTIHNhbXBsZSB0aGF0IGhhcyBhIGxhcmdlciBkaXN0YW5jZSBmcm9tIGl0cyBjb3JyZXNwb25kaW5nIFBJWEwgYWJyYXNpb24gdGhhbiBzcGVjaWZpZWQgaW4gdGhlIGNob3NlbiBkaXN0YW5jZSAobWV0ZXIpIHZhbHVlLiBJbiBvcmRlciB0byBtYWtlIGEgc2NhdHRlciBwbG90IG9mIHRoZSBMSUJTIGFuZCBQSVhMIHBvaW50cywgd2Ugd2lsbCBjcmVhdGUgYSBuZXcgZGF0YSBmcmFtZSBvZiBlYWNoIHVuaXF1ZSBQSVhMIGFicmFzaW9uIGFuZCBpdHMgY29vcmRpbmF0ZXMuIFRoYXQgaXMgdGhlIHVuaXF1ZV9waXhsIGRhdGEgZnJhbWUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHBsb3QgdGhlIFBJWEwgYWJyYXNpb24gY29vcmRpbmF0ZXMuCgpgYGB7ciB9CmxpYnNfdG9fc2FtcGxlIDwtIHJlYWRSRFMoIn4vREFSLU1hcnMtRjI0L1N0dWRlbnREYXRhL3YxX2xpYnNfdG9fc2FtcGxlLlJkcyIpCiNtYWtlIGEgZmlsdGVyZWQgZGF0YSBmcmFtZSB0aGF0IHBpY2tzIHRoZSBtYXggcG9pbnQgb3V0IG9mIGFsbCBsaWJzIHNhbXBsZXMgYXQgYSBjZXJ0YWluIHRhcmdldCAKIyBmb3Igc2ltcGxpY2l0eQpkZl9maWx0ZXJlZCA8LSBsaWJzX3RvX3NhbXBsZSAlPiUKICBncm91cF9ieShMYXQubGlicywgTG9uLmxpYnMpICU+JQogIGZpbHRlcihQb2ludC5saWJzID09IG1heChQb2ludC5saWJzKSkgJT4lCiAgdW5ncm91cCgpCmRmX2Rpc3RhbmNlX2ZpbHRlciA8LSBkZl9maWx0ZXJlZFtkZl9maWx0ZXJlZCREaXN0YW5jZSA8PSBtZXRlcnMsXQoKI21ha2UgYSBkYXRhIGZyYW1lIHdpdGggdGhlIHVuaXF1ZSBwaXhsIGNvb3JkaW5hdGVzIHNpbmNlIHRoZXkgYXJlIGluIHBhaXJzIG9mIGlkZW50aWNhbCBsYXQvbG9uCnVuaXF1ZV9waXhsIDwtIGRmX2ZpbHRlcmVkICU+JQogIHNlbGVjdChMYXQucGl4bCwgTG9uLnBpeGwsIEFicmFzaW9uLnBpeGwpICU+JSBkaXN0aW5jdCgpCmBgYAoKCiMjIDMuMiBDb250cmlidXRpb24KClRoZSBsb2dpc3RpY3Mgb2YgZmlsdGVyaW5nIHRoZSBvcmlnaW5hbCBkYXRhIHNldCBpcyBteSB3b3JrLiBQcmV2aW91c2x5LCBJIGhhZCB0byBkbyBhIGxvdCBtb3JlIGZpbHRlcmluZyBpbiBvcmRlciB0byBjaG9vc2UgdGhlIGRpc3RhbmNlIGFuZCBnZXQgdW5pcXVlIExJQlMgcG9pbnRzIGluIG9yZGVyIHRvIG5vdCBwdXQgdG9vIG1hbnkgcG9pbnRzIG9uIHRoZSBzY2F0dGVycGxvdC4gTWFyZ28gYW5kIEkgd29ya2VkIHRvZ2V0aGVyIHRvIGNyZWF0ZSB0aGUgZGF0YSBzZXQgdGhhdCBJIHVzZSBpbiB0aGlzIHNlY3Rpb24gKHYxX2xpYnNfdG9fc2FtcGxlLlJkcykgYnkgZGVjaWRpbmcgaG93IHRvIG1hdGNoIHVwIExJQlMgdG8gY2VydGFpbiBQSVhMIGFicmFzaW9ucy4gTWFyZ28gY3JlYXRlZCB0aGUgZGlzdGFuY2UgZnVuY3Rpb24gdG8gZmluZCB0aGUgZGlzdGFuY2UgYmV0d2VlbiBQSVhMIGFicmFzaW9ucyBhbmQgTElCUyBzYW1wbGVzIGFuZCBhZGRlZCB0aGF0IGNvbHVtbiB0byB0aGUgZGF0YSBzZXQuIFRoZW4sIERvbmEgZml4ZWQgYWxsIHRoZSBuYW1pbmcgY29udmVudGlvbnMgaW4gdGhlIGRhdGEgc2V0IGluIG9yZGVyIHRvIGhhdmUgY29uc2lzdGVuY3kgYW5kIG1ha2UgaXQgZWFzeSB0byB0ZWxsIHdoaWNoIHZhcmlhYmxlIHdhcyBvcmlnaW5hbGx5IGZyb20gZWFjaCBkYXRhIHNldCAoZXguIE5hbWUucGl4bCwgVGFyZ2V0LmxpYnMpLiBJIHRoZW4gdXNlZCB0aGUgZGF0YSB0byBjcmVhdGUgcGxvdHMgYW5kIGFuYWx5emUuIEJlbG93IGlzIGEgc2NhdHRlcnBsb3Qgc2hvd2Nhc2luZyB0aGUgZGlzdHJpYnV0aW9uIG9mIFBJWEwgYWJyYXNpb25zIGFuZCBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIG1heCBkaXN0YW5jZSBiZXR3ZWVuIHRoZW0uIAoKCiMjIDMuMyBNZXRob2RzIERlc2NyaXB0aW9uIAoKSSBjaG9zZSB0byB1c2UgZ2dwbG90IHRvIGRpc3BsYXkgdGhlIExJQlMgYW5kIFBJWEwgZGF0YSBmb3IgZWFzaWVyIGFuYWx5c2lzIG9mIHNlZWluZyBob3cgbWFueSBMSUJTIHNhbXBsZXMgYWxpZ24gd2l0aCBkaWZmZXJlbnQgUElYTCBhYnJhc2lvbnMuIEl0IHdhcyB2ZXJ5IGludGVyZXN0aW5nIHRvIGNoYW5nZSBhcm91bmQgdGhlIG1heCBkaXN0YW5jZSBhbmQgc2VlIHdoaWNoIGFsaWduZWQgd2l0aCB3aGljaCBhYnJhc2lvbi4gSW4gdGVybXMgb2YgZXhlY3V0aW9uLCBpdCB0b29rIG1lIGEgYml0IG9mIHRpbWUgdG8gb3JnYW5pemUgYWxsIG9mIHRoZSB0aG91Z2h0cyBNYXJnbyBhbmQgSSBoYWQgb24gaG93IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHRoaXMgZGF0YSBzZXQuIE9yaWdpbmFsbHksIHdlIGhhZCByb3VuZGVkIHRoZSBkaXN0YW5jZXMgdG8gdGhlIG5lYXJlc3QgdGhvdXNhbmR0aCB0byBtYXRjaCB0aGVtLCBhbmQgdGhlbiB3ZXJlIHBsb3R0aW5nIHRoYXQgd2F5LiBIb3dldmVyLCB0aGF0IGxlZnQgYSBsb3Qgb2Ygcm9vbSBmb3IgZXJyb3IgYW5kIHdhc24ndCBhcyBhY2N1cmF0ZS4gQ3JlYXRpbmcgYSBkaXN0YW5jZSBmdW5jdGlvbiBhbGxvd3MgZm9yIHRoZSBzY2llbnRpc3Qgb3IgcGVyc29uIHVzaW5nIHRoZSBNYXJzIE1pc3Npb24gTWluZGVyIEFwcCB0byBjaG9vc2Ugd2hhdGV2ZXIgZGlzdGFuY2UgdGhleSB3b3VsZCBsaWtlIGFuZCBhbGxvd3MgZm9yIG11Y2ggbW9yZSBmdW5jdGlvbmFsaXR5LiBNb2RpZnlpbmcgdGhlIGRhdGEgc2V0IG1vcmUgZW5kZWQgdXAgYmVpbmcgbW9yZSBlZmZpY2llbnQgdGhhbiBhZGRpbmcgc21hbGwgZWRpdHMgYXMgSSB3YXMgbWFraW5nIG15IHBsb3RzIHdoaWNoIHdhcyBvcmlnaW5hbGx5IG1ha2luZyBtZSBjcmF6eSAoYXMgaW4gY2hhbmdpbmcgdmFyaWFibGUgdHlwZXMgaWYgdGhleSB3ZXJlbid0IHdoYXQgdGhleSB3ZXJlIHN1cHBvc2VkIHRvIGJlKS4gSW4gdGhlIGVuZCwgSSBsZWFybmVkIGEgbG90IGFib3V0IGRhdGEgb3JnYW5pemF0aW9uIGFuZCB0aGF0IGNvbnNpc3RlbmN5IGFuZCBzdGF5aW5nIG9yZ2FuaXplZCBpcyBrZXkgYW5kIHNhdmVzIGEgbG90IG9mIHRpbWUgbGF0ZXIgb24uCgoKIyMgMy40IFJlc3VsdCBhbmQgRGlzY3Vzc2lvbiAKClRvIGNyZWF0ZSBhIHBsb3Qgb2YgdGhlIExJQlMgYW5kIFBJWEwgZGF0YSBvcmdhbml6ZWQgYnkgd2hhdCBMSUJTIHNhbXBsZXMgYWxpZ24gd2l0aCB3aGF0IGFicmFzaW9ucywgZmlyc3QgcGxvdHRlZCB0aGUgTElCUyBzYW1wbGVzIGNvbG9yZWQgYnkgd2hhdCBQSVhMIGFicmFzaW9uIHRoZXkgd2VyZSBjbG9zZXN0IHRvLCBhbmQgdGhlbiBwbG90dGVkIHRoIFBJWEwgYWJyYXNpb25zIGFzIHJlZCBzdGFycyBvbiB0aGUgcGxvdCB0byBzaG93IHdoZXJlIHRoZSBQSVhMIGFicmFzaW9ucyB3ZXJlIHJlbGF0aXZlIHRvIHRoZSBMSUJTIHNhbXBsZXMuCgpgYGB7ciB9CiNwbG90IG9mIGxpYnMgYW5kIHBpeGwgZGF0YSBieSBsYXQvbG9uCmdncGxvdChkYXRhID0gZGZfZGlzdGFuY2VfZmlsdGVyKSArCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBMb24ubGlicywgeSA9IExhdC5saWJzLCBjb2xvciA9IEFicmFzaW9uLnBpeGwpKSArICAgICAgICAgICAgICAgICAjIENvbG9yIGJ5IGFicmFzaW9uCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBMb24ucGl4bCwgeSA9IExhdC5waXhsKSwgZGF0YSA9IHVuaXF1ZV9waXhsLCBjb2xvciA9ICJyZWQiLCBzaGFwZSA9IDMsIHNpemUgPSAzKSArICMgRml4ZWQgY29sb3IgZm9yIHVuaXF1ZV9waXhsIHBvaW50cwogIGdlb21fdGV4dF9yZXBlbChtYXBwaW5nID0gYWVzKHggPSBMb24ucGl4bCwgeSA9IExhdC5waXhsLCBsYWJlbCA9IEFicmFzaW9uLnBpeGwpLCBkYXRhID0gdW5pcXVlX3BpeGwsCiAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMiwgY29sb3IgPSAicmVkIikgKwogIGxhYnModGl0bGUgPSBwYXN0ZSgiTElCUyBTYW1wbGVzIGFuZCBQSVhMIEFicmFzaW9ucyB3aXRoaW4iLCBtZXRlcnMsICJtZXRlcnMiKSwKICAgICAgIHggPSAiTG9uZ2l0dWRlIiwKICAgICAgIHkgPSAiTGF0aXR1ZGUiLAogICAgICAgY29sb3IgPSAiUElYTCBBYnJhc2lvbiIsCiAgICAgICBjYXB0aW9uID0gIkRhdGEgY29sbGVjdGVkIHVzaW5nIExJQlMgYW5kIFBJWEwgaW5zdHJ1bWVudHMgb24gUGVyc2VydmVyYW5jZSByb3Zlci5cbiBTaG93cyBQSVhMIGFicmFzaW9ucyBwbG90dGVkIGFzIHJlZCBzdGFycyxcbiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGVzIGNvbG9yZWQgYnkgdGhlaXIgY2xvc2VzdCBQSVhMIGFicmFzaW9uLiIpKyAgICAgICAgICAjIExhYmVsIGZvciB0aGUgY29sb3IgbGVnZW5kIAogIyBDZW50ZXIgdGhlIGNhcHRpb24gb24gdGhlIGxlZnQgc2lkZQogIHRoZW1lKAogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCkgICMgQWxpZ25zIGNhcHRpb24gdG8gdGhlIGxlZnQKICApCgojYWRkIGxlZ2VuZCBmb3IgUElYTCBpZGsgd2h5IGl0J3Mgbm90IHdvcmtpbmcKYGBgCgoKIyMgMy41IENvbmNsdXNpb25zLCBMaW1pdGF0aW9ucywgYW5kIEZ1dHVyZSBXb3JrLgoKSSBiZWxpZXZlIG15IGZpbmRpbmdzIG1ha2UgaXQgdmVyeSBlYXN5IGZvciByZXNlYXJjaGVycyBhbmQgc2NpZW50aXN0cyB0byBoYXZlIGEgdmlzdWFsaXphdGlvbiBvZiBQSVhMIGFuZCBMSUJTIHNhbXBsZXMgdGhhdCB0aGV5IHdhbnQgdG8gc2VlIGJhc2VkIG9uIHdoYXQgbWF4IGRpc3RhbmNlIHRoZXkgYXJlIGZvY3VzaW5nIG9uIHdoZW4gZXhhbWluaW5nIFBJWEwgYW5kIExJQlMgdG9nZXRoZXIuIEZvciBmdXR1cmUgd29yaywgSSB0aGluayBhcyBtb3JlIGNvb3JkaW5hdGVzIGFuZCBkYXRhIGlzIGFkZGVkIHRvIHRoZSBMSUJTIGFuZCBQSVhMIGRhdGEgc2V0cyBhcyB0aGV5IGJlY29tZSBhdmFpbGFibGUgZnJvbSBOQVNBIHRoaXMgd2lsbCBjb250aW51ZSB0byBiZSBidWlsdCB1cG9uIGFuZCBhbHRob3VnaCBpdCBpc24ndCBzdXBlciBjb21wbGljYXRlZCBvZiBhIHBsb3QsIGl0IHByb3ZpZGVzIGEgdmVyeSBuZWNlc3NhcnkgY29udGV4dCB0byB2aXN1YWxpemUgUElYTCBhbmQgTElCUy4gCgotIEFkZCBtb3JlIGFib3V0IGxpbWl0YXRpb25zPwoKIyA0LjAgRmluZGluZyAyOiBTb2lsIENvbXBvc2l0aW9uIEFuYWx5c2lzCl9HaXZlIGEgaGlnaGxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtYWpvciBmaW5kaW5nLiBXaGF0IHF1ZXN0aW9ucyB3ZXJlIHlvdXIgdHJ5aW5nIHRvIGFkZHJlc3MsIHdoYXQgYXBwcm9hY2hlcyBkaWQgeW91IGVtcGxveSwgYW5kIHdoYXQgaGFwcGVuZWQ/XwoKVXNpbmcgdGhlIExJQlMgYW5kIFBJWEwgY29tYmluZWQgZGF0YSBzZXQsIEkgY3JlYXRlZCBhIHBsb3Qgb2YgdGhlIGNvbXBvc2l0aW9uIHBlcmNlbnRhZ2VzIG9mIGNoZW1pY2FsIGNvbXBvdW5kcyBzdWNoIGFzIFNpMDIsIEsyMCwgZXRjLiB1c2luZyBsb2cgc2NhbGluZyB0byBjb21wYXJlIHRoZSBjb21wb3NpdGlvbnMgb2YgYSBQSVhMIGFicmFzaW9uIGFuZCB0aGUgY29ycmVzcG9uZGluZyBMSUJTIHNhbXBsZSBjb21wb3NpdGlvbnMgKGJhc2VkIG9uIHRoZSBMSUJTIHNhbXBsZXMgZm9yIHggZGlzdGFuY2UgYXdheSBmcm9tIGEgUElYTCBhYnJhc2lvbikuIFRoZSBxdWVzdGlvbiBJIHdhcyB0cnlpbmcgdG8gYW5zd2VyIHdhcyBob3cgZG9lcyB0aGUgTElCUyBkYXRhIG9mIGEgY2VydGFpbiBhcmVhIGNvbXBhcmUgdG8gdGhlIFBJWEwgZGF0YSBvZiB0aGF0IGFyZWE/IEJ5IGxvb2tpbmcgYXQgdGhlIGNvbXBvc2l0aW9uIG9mIHRoZSBzb2lsIGluIGNlcnRhaW4gbG9jYXRpb25zLCB3ZSBjYW4gY29tcGFyZSB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIFBJWEwgYWJyYXNpb24gYW5kIHJlbGF0aW5nIExJQlMgc2FtcGxlcyBmb3IgYSBjZXJ0YWluIGFyZWEgdXRpbGl6aW5nIHRoZSBzYW1lIGRhdGEgc2V0ICh2MV9saWJzX3RvX3NhbXBsZS5SbWQpLiBJbiBvcmRlciB0byBhY2NvbXBsaXNoIHRoaXMsIAoKCiMjIDQuMSBEYXRhLCBDb2RlLCBhbmQgUmVzb3VyY2VzCkhlcmUgaXMgYSBsaXN0IGRhdGEgc2V0cywgY29kZXMsIHRoYXQgYXJlIHVzZWQgaW4geW91ciB3b3JrLiBBbG9uZyB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBVUkwgd2hlcmUgdGhleSBhcmUgbG9jYXRlZC4KCjEuIHBldGVyY19maW5hbFByb2plY3RGMjQuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSBpcyB0aGlzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwN19EcmFmdEZpbmFsUHJvamVjdE5vdGVib29rL3BldGVyY19maW5hbFByb2plY3RGMjRfcm91Z2hkcmFmdC5SbWQpCgoyLiBwZXRlcmNfYXNzaWdubWVudDUuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSB3aGljaCBpcyBteSBwcmV2aW91cyBub3RlYm9vay4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvdHJlZS9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA1L3BldGVyY19hc3NpZ21lbnQwNS5SbWRdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvdHJlZS9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA1L3BldGVyY19hc3NpZ21lbnQwNS5SbWRdKQoKMy4gc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcyB3aGljaCBpcyB0aGUgb3JpZ2luYWwgTElCUyBkYXRhIGdpdmVuIHRvIG91ciByZXNlYXJjaCBncm91cC4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkc10oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzKQoKNC4gcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzLCB3aGljaCBpcyB0aGUgZGF0YSBzZXQgY29udGFpbmluZyB0aGUgUElYTCBkYXRhLCBzb2wsIGFuZCBjb29yZGluYXRlcy4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL1N0dWRlbnREYXRhL3BpeGxfc29sX2Nvb3JkaW5hdGVzLlJkc10oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudERhdGEvcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzKQoKNC4gTElCU190cmFpbmluZ19zZXRfcXVhcnRpbGVzLlJkcyBpcyB0aGUgZGF0YSB3aXRoIGVhcnRoIHF1YXJ0aWxlIHJlZmVyZW5jZSBkYXRhLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9MSUJTX3RyYWluaW5nX3NldF9xdWFydGlsZXMuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9EYXRhL0xJQlNfdHJhaW5pbmdfc2V0X3F1YXJ0aWxlcy5SZHMpLiAKClRvIHByZXBhcmUgdGhlIGRhdGEsIEkgc3RhcnQgYnkgbG9hZGluZyBpbiB0aGUgTElCUyBkYXRhLiBUaGVuLCB3ZSBkcm9wIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gY29sdW1ucyBhbmQgc3VtIG9mIHBlcmNlbnRhZ2UgY29sdW1ucyBsZWF2aW5nIHVzIHdpdGgganVzdCB0aGUgd2VpZ2h0ZWQgY29tcG9zaXRpb24gaW4gdGVybXMgb2YgbnVtZXJpY2FsIGRhdGEuIFdlIGFsc28gcmVtb3ZlIHRoZSBzY2N0IHZhbHVlcywgYXMgdGhvc2UgdmFsdWVzIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBlYXJ0aCByZWZlcmVuY2Ugc2FtcGxlcyB0aGF0IFBlcnNlcnZlcmFuY2UgY2FycmllcyB3aXRoIGl0LiBUaGVyZWZvcmUsIHRoZXkgd2lsbCBub3QgYmUgdmVyeSByZWxldmFudCB3aGVuIHBsb3R0aW5nIHRoZSBMSUJTIGRhdGEgYXMgd2UgYXJlIGZvY3VzZWQgb24gdGhlIE1hcnMgc29pbCBjb21wb3NpdGlvbnMuCgpgYGB7cn0KI0VhcnRoIHF1YXJ0aWxlcwplYXJ0aHF1YXJ0aWxlcy5kZjwtcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9EYXRhL0xJQlNfdHJhaW5pbmdfc2V0X3F1YXJ0aWxlcy5SZHMiKQojTG9hZCBpbiBMSUJTIGRhdGEKbGlicy5kZiA8LSByZWFkUkRTKCIvYWNhZGVtaWNzL01BVFAtNDkxMC1GMjQvREFSLU1hcnMtRjI0L0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcyIpCiNEcm9wIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gZmVhdHVyZXMsIHRoZSBzdW0gb2YgdGhlIHBlcmNlbnRhZ2VzLCAKI3RoZSBkaXN0YW5jZSwgYW5kIHRoZSB0b3RhbCBmcmVxdWVuY2llcwpsaWJzLmRmIDwtIGxpYnMuZGYgJT4lIAogIHNlbGVjdCghKGMoZGlzdGFuY2VfbW0sVG90LkVtLixTaU8yX3N0ZGV2LFRpTzJfc3RkZXYsQWwyTzNfc3RkZXYsRmVPVF9zdGRldiwKICAgICAgICAgICAgIE1nT19zdGRldixOYTJPX3N0ZGV2LENhT19zdGRldixLMk9fc3RkZXYsVG90YWwpKSkKIyBDb252ZXJ0IHRoZSBwb2ludHMgdG8gbnVtZXJpYwpsaWJzLmRmJHBvaW50IDwtIGFzLm51bWVyaWMobGlicy5kZiRwb2ludCkKbGlicy5kZlssNjoxM10gPC0gc2FwcGx5KGxpYnMuZGZbLDY6MTNdLGFzLm51bWVyaWMpCiNyZW1vdmUgdGhlIHNjY3QvcmVmZXJlbmNlIHNhbXBsZXMKbGlicy5kZjwtbGlicy5kZiU+JQogIGZpbHRlcighKGdyZXBsKCJzY2N0IiwgdGFyZ2V0KSkpCiNhZGQgYSBjb2x1bW4gdG8gaW5kaWNhdGUgdGhlIG5lYXJlc3QgcGl4bApsaWJzLmRmPC1jYmluZChuZWFyZXN0cGl4bD0wLGxpYnMuZGYpCiNtYWtlIGEgZGF0YWZyYW1lIG9mIGp1c3QgdGhlIExJQlMgTGF0L0xvbmcgYW5kIHRhcmdldCBuYW1lIGFuZCByZW1vdmUgZHVwbGljYXRlcwpsaWJzdGFyZ2V0cy5kZjwtbGlicy5kZlssYygxLDMsNCw1KV0KbGlic3RhcmdldHMuZGY8LWRpc3RpbmN0KGxpYnN0YXJnZXRzLmRmKQpgYGAKClNldCBtZXRlcnMgYW5kIGNob3NlbiBhYnJhc2lvbiB0byBhY3QgYXMgYSBzbGlkZXIgaW4gdGhlIDJkIGFwcC4KYGBge3J9CiNDaG9vc2UgbWF4IGRpc3RhbmNlIHZhcmlhYmxlIGJldHdlZW4gUElYTCBhbmQgTElCUyBkYXRhCm1ldGVycyA9IDEwMAojQ2hvb3NlIFBJWEwgYWJyYXNpb24geW91IHdhbnQgdG8gbG9vayBhdAphYnJhc2lvbl9uYW1lID0gIkJlcnJ5IEhvbGxvdyIKYGBgCgpOZXh0LCB3ZSBsb2FkIGluIHRoZSBQSVhMIGRhdGEuIFdlIHJlbW92ZSB0aGUgYXRtb3NwaGVyaWMgc2FtcGxlIGFuZCBvbmx5IHNlbGVjdCBvbmUgUElYTCBzYW1wbGUgb2YgZWFjaCBhYnJhc2lvbi4KYGBge3IsIGRhdGEwMn0KI3JlYWQgaW4gcGl4bCBkYXRhIHdpdGggbGF0L2xvbmcKcGl4bC5kZjwtcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9TdHVkZW50RGF0YS9waXhsX3NvbF9jb29yZGluYXRlcy5SZHMiKQojaW5jbHVkZSBvbmx5IHBpeGwgbWV0YWRhdGEKcGl4bC5kZjwtcGl4bC5kZiAlPiUKICBzZWxlY3QoYygxLDIsMTksMjAsMjIpKQojY29udmVydCBMYXQvTG9uZyB0byBudW1lcmljCnBpeGwuZGYkTGF0IDwtIGFzLm51bWVyaWMocGl4bC5kZiRMYXQpCnBpeGwuZGYkTG9uZyA8LSBhcy5udW1lcmljKHBpeGwuZGYkTG9uZykKI3JlbW92ZSByb3dzIHNvIHdlIG9ubHkgaGF2ZSBvbmUgc2FtcGxlIHBlciBhYnJhc2lvbiBhbmQgcmVtb3ZlIGF0bW9zcGhlcmljIHNhbXBsZQpwaXhsLmRmPC1waXhsLmRmW2MoMiw0LDYsOCwxMCwxMiwxNCwxNiksXQpgYGAKCk5leHQsIHdlIHdpbGwgaW5pdGlhbGl6ZSBhIGRpc3RhbmNlIHZhcmlhYmxlICh0byBpbmRpY2F0ZSBkaXN0YW5jZSBiZXR3ZWVuIFBJWEwgYWJyYXNpb24gYW5kIExJQlMgdGFyZ2V0KSBhbmQgYWxzbyBpbml0aWFsaXplIGVhY2ggUElYTCBhYnJhc2lvbiwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1hcmsgd2hpY2ggUElYTCBhYnJhc2lvbiB0aGUgTElCUyBzYW1wbGUgaXMgY2xvc2VzdCB0byBieSB1c2luZyBhIGZhY3RvciBvZiAwIG9yIDEuIApgYGB7cn0KbGlic3RhcmdldHMuZGY8LWNiaW5kKGxpYnN0YXJnZXRzLmRmLCJEaXN0YW5jZSI9MCwiQmVsbGVncmFkZSI9MCwiRG91cmJlcyI9MCwiUXVhcnRpZXIiPTAsIkFsZmFsZmEiPTAsIlRob3JudG9uR2FwIj0wLCJCZXJyeSBIb2xsb3ciPTAsIk5vdmFydXB0YSI9MCwiVWdhbmlrIElzbGFuZCI9MCkKYGBgCgpUaGUgZGlzdGFuY2UgZnVuY3Rpb24gYmVsb3cgd2lsbCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBMSUJTIHRhcmdldCBhbmQgYWxsIHRoZSBQSVhMIGFicmFzaW9ucywgYW5kIHBpY2sgdGhlIHNtYWxsZXN0IGRpc3RhbmNlIHRvIHBpY2sgdGhlIGNsb2VzdCBQSVhMIGFicmFzaW9uIHRvIHRoYXQgTElCUyB0YXJnZXQuCmBgYHtyfQpmb3IoaSBpbiAxOm5yb3cobGlic3RhcmdldHMuZGYpKSB7CiAgICBsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldPC1jKGRpc3RIYXZlcnNpbmUocGl4bC5kZlsxLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZlsyLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZlszLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls0LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls1LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls2LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls3LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls4LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSkpCiAgICAKICAgIGxpYnN0YXJnZXRzLmRmW2ksMV08LXdoaWNoLm1pbihsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldKQogICAgbGlic3RhcmdldHMuZGZbaSw1XTwtbWluKGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV0pCn0KbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw8LWFzLmZhY3RvcihsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bCkKbGV2ZWxzKGxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsKTwtKGMoIkJlbGxlZ3JhZGUiLCJEb3VyYmVzIiwiUXVhcnRpZXIiLCJBbGZhbGZhIiwiVGhvcm50b25HYXAiLCJCZXJyeSBIb2xsb3ciLCJOb3ZhcnVwdGEiLCJVZ2FuaWsgSXNsYW5kIikpCmBgYAoKQmVsb3cgaXMgYW5vdGhlciBpbml0aWFsaXplciBmb3IgdGhlIFBJWEwgYWJyYXNpb24gZGF0YS4gVGhpcyBzZXRzIHRoZSB2YXJpYWJsZXMgZm9yIGVhY2ggUElYTCBhYnJhc2lvbi4KYGBge3J9CkJlbGxlZ3JhZGU8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQmVsbGVncmFkZSIsXSR0YXJnZXQKRG91cmJlczwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJEb3VyYmVzIixdJHRhcmdldApRdWFydGllcjwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJRdWFydGllciIsXSR0YXJnZXQKQWxmYWxmYTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJBbGZhbGZhIixdJHRhcmdldApUaG9ybnRvbkdhcDwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJUaG9ybnRvbkdhcCIsXSR0YXJnZXQKQmVycnlIb2xsb3c8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQmVycnkgSG9sbG93IixdJHRhcmdldApOb3ZhcnVwdGE8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iTm92YXJ1cHRhIixdJHRhcmdldApVZ2FuaWtJc2xhbmQ8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iVWdhbmlrIElzbGFuZCIsXSR0YXJnZXQKYGBgCgpOZXh0LCB3ZSBmaWx0ZXIgb3V0IHRoZSBMSUJTIHRhcmdldHMgdGhhdCBhcmUgbm90IHdpdGhpbiB0aGUgc3BlY2lmaWVkIGRpc3RhbmNlIHZhcmlhYmxlLiBUaGVuLCB3ZSBtZXJnZSB0aGUgTElCUyBkYXRhIHdpdGggdGhlIHJlc3BlY3RpdmUgUElYTCBhYnJhc2lvbiBieSBtdXRhdGluZyBhbmQgYWRkaW5nIGFuIGFicmFzaW9uIGNvbHVtbiB0aGF0IGhhcyB0aGUgYWJyYXNpb24gbmFtZSBjbG9zZXN0IHRvIGVhY2ggTElCUyB0YXJnZXQuIFdlIGFsc28gYWRkIGEgY29sdW1uLCBMSUJTIG9yIFBJWEwsIHdoaWNoIGRlbm90ZXMgaWYgdGhlIHJvdyBvZiBkYXRhIGlzIGZyb20gdGhlIFBJWEwgYW5kIExJQlMgZGF0YSBzZXRzLgpgYGB7cn0KaW5jbHVkZWQubGliczwtKGxpYnN0YXJnZXRzLmRmJT4lCiAgZmlsdGVyKERpc3RhbmNlPG1ldGVycykpJHRhcmdldApsaWJzLm1hdHJpeCA8LWxpYnMuZGYgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGluY2x1ZGVkLmxpYnMpCmxpYnMubWF0cml4IDwtIGxpYnMubWF0cml4WyxjKDUsNzoxNCldCmxpYnMubWF0cml4PC1saWJzLm1hdHJpeFssYygxOjIsNDo5LDMpXQpsaWJzLm1hdHJpeDwtY2JpbmQoIkFicmFzaW9uIj0wLGxpYnMubWF0cml4KQpsaWJzLm1hdHJpeDwtbGlicy5tYXRyaXglPiUKICBtdXRhdGUoQWJyYXNpb24gPSBpZmVsc2UodGFyZ2V0JWluJUFsZmFsZmEsIkFsZmFsZmEiLCAKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgQmVsbGVncmFkZSwgIkJlbGVncmFkZSIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIEJlcnJ5SG9sbG93LCAiQmVycnkgSG9sbG93IiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgRG91cmJlcywgIkRvdXJiZXMiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBOb3ZhcnVwdGEsICJOb3ZhcnVwdGEiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBRdWFydGllciwgIlF1YXJ0aWVyIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgVGhvcm50b25HYXAsICJUaG9ybnRvbkdhcCIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFVnYW5pa0lzbGFuZCwgIlVnYW5payBJc2xhbmQiLEFicmFzaW9uKSkpKSkpKSkpCmxpYnMubWF0cml4PC1jYmluZChsaWJzb3JwaXhsPTEsbGlicy5tYXRyaXgpCmBgYAoKTmV4dCwgd2Ugd2lsbCByZWFkIGluIHRoZSBQSVhMIGRhdGEuIFdlIHdpbGwgcmVtb3ZlIHRoZSBhdG1vc3BoZXJpYyBzYW1wbGUgKGZpcnN0IHNhbXBsZSkgYW5kIG9ubHkgY2hvb3NlIG9uZSBvZiBlYWNoIFBJWEwgc2FtcGxlIGluIGFzIGVhY2ggYWJyYXNpb24gaGFzIHR3byBzYW1wbGVzIChvbmx5IG9uZSB3aWxsIGJlIG5lY2Vzc2FyeSBmb3IgdGhlIHBsb3QpLgoKYGBge3IsIGRhdGEwM30KI3JlYWQgaW4gcGl4bCBkYXRhIHdpdGggbGF0L2xvbmcKcGl4bC5kZjwtcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9TdHVkZW50RGF0YS9waXhsX3NvbF9jb29yZGluYXRlcy5SZHMiKQpwaXhsLmRmPC1waXhsLmRmICU+JQogIHNlbGVjdChjKDU6OCwxMjoxNCwxNywxOSwxOCwyMikpCiNyZW9yZGVyIHBpeGwgY29sdW1ucyBzbyB0aGF0IGl0IG1hdGNoZXMgbGlicyBkYXRhIG9yZ2FuaXphdGlvbgpwaXhsLmRmPC1waXhsLmRmWyxjKDExLDEwLDQsMyw4LDIsNiwxLDUsNyldCiNyZW1vdmUgYXRtb3NwaGVyaWMgc2FtcGxlCnBpeGwuZGY8LXBpeGwuZGZbMjoxNixdCnBpeGwuZGY8LWNiaW5kKGxpYnNvcnBpeGw9MCxwaXhsLmRmKQpgYGAKCkZpbmFsbHksIHdlIG1lcmdlIHRoZSBMSUJTIGFuZCBQSVhMIGRhdGEgc2V0cyB3ZSBoYXZlIG1vZGlmaWVkIHRodXMgZmFyIGZvciBhIGNvbWJpbmVkIExJQlMgYW5kIFBJWEwgZGF0YSBmcmFtZSBzdWl0YWJsZSBmb3IgYSBzb2lsIGNvbXBvc2l0aW9uIGxpbmUgcGxvdC4KYGBge3J9CmNvbG5hbWVzKHBpeGwuZGYpPC1jb2xuYW1lcyhsaWJzLm1hdHJpeCkKcGl4bGxpYnMuZGY8LXJiaW5kKHBpeGwuZGYsbGlicy5tYXRyaXgpCmBgYAoKIyMgNC4yIENvbnRyaWJ1dGlvbgoKU29tZSBvZiB0aGUgZGF0YSBtYW5pcHVsYXRpbmcgd29yayB3YXMgTWFyZ28ncywgc3VjaCBhcyB0aGUgZGlzdGFuY2UgZnVuY3Rpb24uIEluIHRlcm1zIG9mIHBpdm90aW5nIHRoZSBkYXRhIGZyYW1lIGFuZCB0aGUgb3RoZXIgc3RlcHMgb2YgdGhlIHByZXByb2Nlc3NpbmcgaXMgbXkgb3duIHdvcmsuIFRoZSBtYW5pcHVsYXRpbmcgYmVsb3cgdG8gcGxvdCB0aGUgbGluZSBzb2lsIGNvbXBvc2l0aW9uIHBsb3RzIGlzIG15IG93bi4KCiMjIDQuMyBNZXRob2RzIERlc2NyaXB0aW9uIAoKV2hlbiBkZWNpZGluZyBob3cgdG8gYXBwcm9hY2ggdGhlIGNvbmNlcHQgb2YgYnVpbGRpbmcgc29pbCBjb21wb3NpdGlvbiBwbG90cyBvZiBlYWNoIFBJWEwgYWJyYXNpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExJQlMgdGFyZ2V0cyB3aXRoaW4gYSBjZXJ0YWluIGRpc3RhbmNlIG1heGltdW0sIEkgZGVjaWRlZCB0aGUgYmVzdCB3YXkgd2FzIHRvIHN0YXJ0IHdpdGggdGhlIG9yaWdpbmFsIGRhdGEgc2V0cyBhbmQgbW9kaWZ5IHRoZW0gYXMgbmVlZGVkLiBGb3IgdGhlIGFjdHVhbCBwbG90LCB0aGUgYmVzdCB3YXkgdG8gZm9ybWF0IHRoZSBkYXRhIGNvcnJlY3RseSBpcyB0byBwaXZvdCBpdCwgYXMgSSBuZWVkIHRoZSB4IGF4aXMgdG8gYmUgdGhlIGNvbHVtbiBuYW1lcyBpbiB0aGUgY3VycmVudCBkYXRhIGZyYW1lIHdlIGhhdmUgKFNpTzIgYW5kIG90aGVyIGNvbXBvc2l0aW9ucykgYW5kIHRoZSB5IGF4aXMgdG8gYmUgdGhlIHdlaWdodGVkIGNvbXBvc2l0aW9uIHZhbHVlcy4gV2UgYWxzbyBuZWVkIGFuIGluZGljYXRvciBvZiBpZiB0aGUgZGF0YSBpcyBmcm9tIFBJWEwgb3IgTElCUywgd2hpY2ggYWxzbyBpcyBoZWxwZnVsIGZvciBidWlsZGluZyB0aGUgbGluZSBwbG90cy4gCgpVc2VycyB3aWxsIGhhdmUgdG8gc2V0IHRoZSBkaXN0YW5jZSB2YXJpYWJsZSBpbiBvcmRlciB0byBjaG9vc2UgdGhlIG1heCBkaXN0YW5jZSBiZXR3ZWVuIFBJWEwgYWJyYXNpb25zIGFuZCBMSUJTIHRhcmdldHMuIFRoaXMgY2FuIHZhc3RseSBjaGFuZ2UgdGhlIG51bWJlciBvZiBsaW5lcyBvbiB0aGUgcGxvdHMgd2hpY2ggY2FuIGhlbHAgcHJldmVudCBvdmVyY3Jvd2RlZCBwbG90cy4gVXNlcnMgYWxzbyBjYW4gc2V0IGEgdmFyaWFibGUgdG8gY2hvb3NlIGEgc3BlY2lmaWMgUElYTCBhYnJhc2lvbiBhbmQgY29ycmVzcG9uZGluZyBMSUJTIHRhcmdldHMsIHdoaWNoIGlzIGVhc2llciB0byBpbnRlcnByZXQgYXMgcGxvdHRpbmcgYWxsIG9mIHRoZSBMSUJTIGFuZCBQSVhMIGNvbXBvc2l0aW9uIGluZm9ybWF0aW9uIG9uIGxpbmUgcGxvdHMgbGVhZHMgdG8gdmVyeSBjb25kZW5zZWQgZ3JhcGhzIHRoYXQgYXJlIGhhcmQgdG8gcmVhZC4KCiMjIDQuNCBSZXN1bHQgYW5kIERpc2N1c3Npb24gCgpGaXJzdCwgd2Ugd2lsbCB0dXJuIHRoZSBlYXJ0aCBxdWFydGlsZSBpbmZvcm1hdGlvbiBpbnRvIGEgbG9uZyBkYXRhIGZyYW1lIChtZWFuaW5nIHBpdm90aW5nIHRoZSBjb2x1bW5zIGludG8gdGhlIHZhbHVlcykuIApgYGB7cn0KIyBFYXJ0aCBxdWFydGlsZXMKZWFydGhxdWFydGlsZXNfbG9uZyA8LSBlYXJ0aHF1YXJ0aWxlcy5kZiAlPiUKICBwaXZvdF9sb25nZXIoY29scyA9IHN0YXJ0c193aXRoKCJTaU8yIik6bGFzdF9jb2woKSwgbmFtZXNfdG8gPSAiQ29tcG91bmQiLCB2YWx1ZXNfdG8gPSAiUGVyY2VudGFnZSIpCgplYXJ0aHF1YXJ0aWxlc19sb25nIDwtIGVhcnRocXVhcnRpbGVzX2xvbmcgJT4lIHJlbmFtZShRdWFydGlsZXMgPSBgVHJhaW5pbmcgc2V0IFF1YXJ0aWxlc2ApCmBgYAoKVGhlbiwgdGhlIGRhdGEgd2lsbCBiZSBmaWx0ZXJlZCB0byBvbmx5IGluY2x1ZGUgdGhlIGRhdGEgZnJvbSBhIHNwZWNpZmljIFBJWEwgYWJyYXNpb24gY2hvc2VuIGJ5IHRoZSB1c2VyLiBUaGUgZGF0YSBpcyBwaXZvdGVkIGludG8gYSBsb25nIGZvcm1hdCwgYW5kIHRoZSBjb2x1bW5zIGFyZSByZW9yZGVyZWQgdG8gbWltaWMgc2ltaWxhciBwbG90cyBmcm9tIE5BU0EgcGFwZXJzLgpgYGB7cn0KIyBGaWx0ZXIgZm9yIHRoZSBzcGVjaWZpYyBhYnJhc2lvbiBzYW1wbGUsIGUuZy4sICJBbGZhbGZhIgpwaXhsbGlic19maWx0ZXJlZCA8LSBwaXhsbGlicy5kZiAlPiUKICBmaWx0ZXIoQWJyYXNpb24gPT0gYWJyYXNpb25fbmFtZSkKCiMgUGl2b3QgdGhlIGRhdGEgdG8gbG9uZ2VyIGZvcm1hdCBmb3IgZ2dwbG90CnBpeGxsaWJzX2xvbmcgPC0gcGl4bGxpYnNfZmlsdGVyZWQgJT4lCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBzdGFydHNfd2l0aCgiU2lPMiIpOmxhc3RfY29sKCksIG5hbWVzX3RvID0gIkNvbXBvdW5kIiwgdmFsdWVzX3RvID0gIlBlcmNlbnRhZ2UiKQoKZGVzaXJlZF9vcmRlciA8LSBjKCJTaU8yIiwgIkFsMk8zIiwgIkZlT1QiLCAiTWdPIiwgIkNhTyIsICJOYTJPIiwgIksyTyIsICJUaU8yIikgICMgU3BlY2lmeSB5b3VyIGN1c3RvbSBvcmRlciBoZXJlCnBpeGxsaWJzX2xvbmckQ29tcG91bmQgPC0gZmFjdG9yKHBpeGxsaWJzX2xvbmckQ29tcG91bmQsIGxldmVscyA9IGRlc2lyZWRfb3JkZXIpCmBgYAoKRm9yIHRoZSBwbG90LCB3ZSB1c2UgZ2dwbG90IHRvIHBsb3QgdGhlIHBpeGxsaWJzX2xvbmcgZGF0YSBmcmFtZSB3ZSBjcmVhdGVkLiBUaGUgcGxvdCBpcyBjb2xvcmVkIGJ5IGlmIHRoZSBsaW5lIGlzIGEgUElYTCBhYnJhc2lvbidzIGNvbXBvc2l0aW9uIG9yIGEgTElCUyB0YXJnZXQncyBjb21wb3NpdGlvbi4gV2UgYWxzbyBhZGQgYSBsYXllciB3aXRoIHRoZSBlYXJ0aCBxdWFydGlsZSBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgdGhlIGRvdHRlZCBsaW5lcy4KYGBge3J9CiMgTWFwIHRoZSBQSVhML0xJQlMgY29sdW1uIHRvIGNvbG9yIGFuZCB1c2UgdGFyZ2V0X25hbWUgdG8gZGlmZmVyZW50aWF0ZSBsaW5lcwpnZ3Bsb3QocGl4bGxpYnNfbG9uZywgYWVzKHggPSBDb21wb3VuZCwgeSA9IFBlcmNlbnRhZ2UsIGNvbG9yID0gYXMuZmFjdG9yKGxpYnNvcnBpeGwpLCBncm91cCA9IHRhcmdldCkpICsKICBnZW9tX2xpbmUoKSArCiAgZ2VvbV9wb2ludCgpICsKICBzY2FsZV95X2NvbnRpbnVvdXModHJhbnM9J2xvZzEwJykgKwogICMgQWRkIEVhcnRoIHF1YXJ0aWxlIGxpbmVzIHVzaW5nIGVhcnRocXVhcnRpbGVzX2xvbmcKICBnZW9tX2xpbmUoZGF0YSA9IGVhcnRocXVhcnRpbGVzX2xvbmcsIGFlcyh4ID0gQ29tcG91bmQsIHkgPSBQZXJjZW50YWdlLCBsaW5ldHlwZSA9IFF1YXJ0aWxlcywgZ3JvdXAgPSBRdWFydGlsZXMpLCAKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBsaW5ldHlwZSA9ICJkb3R0ZWQiKSArCiAgbGFicyh0aXRsZSA9IHBhc3RlKCJTb2lsIENvbXBvc2l0aW9uIGZvciBQSVhMIGFicmFzaW9uIixhYnJhc2lvbl9uYW1lLCJhbmQgTElCUyB3aXRoaW4iLCBtZXRlcnMsICJtZXRlcnMiLCBzZXAgPSAiICIpLAogICAgICAgeCA9ICJDaGVtaWNhbCBDb21wb3VuZCIsCiAgICAgICB5ID0gIldlaWdodCBQZXJjZW50YWdlIiwKICAgICAgIGNvbG9yID0gIk1lYXN1cmVtZW50IFR5cGUiLAogICAgICAgbGluZXR5cGUgPSAiRWFydGggUXVhcnRpbGVzIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIwIiA9ICJibHVlIiwgIjEiID0gInJlZCIpLCBsYWJlbHMgPSBjKCJQSVhMIiwgIkxJQlMiKSkgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKSSBzdGlsbCBwbGFuIHRvIHVwZGF0ZSBhbmQgdHJ5IHVzaW5nIHRoZSBnZ3Bsb3RsYXkgZmVhdHVyZSB0byBpbmNvcnBvcmF0ZSBhbGwgdGhlIGFicmFzaW9ucyBhbmQgZGF0YSBvbnRvIG9uZSBncmlkIG9mIGxpbmUgcGxvdHMuIEkgYWxzbyBhbSBnb2luZyB0byBhZGQgcGxvdHMgd2hlcmUgdGhlIG1lYW4gaXMgdGFrZW4gb2YgYWxsIHRoZSBMSUJTIHRhcmdldHMgdGhhdCBjb3JyZXNwb25kIHRvIGEgUElYTCBhYnJhc2lvbiBzbyB0aGUgcGxvdCB3aWxsIG9ubHkgaGF2ZSBvbmUgTElCUyBsaW5lIGFuZCBvbmUgUElYTCBsaW5lIChhbG9uZyB3aXRoIHRoZSByZWZlcmVuY2VzKSwgdGhpcyBpcyBhbGwganVzdCBmb3IgdGhlIGRyYWZ0LiBJIGFsc28gbmVlZCB0byBvbmx5IGFkZCBjZXJ0YWluIHF1YXJ0aWxlIGluZm9ybWF0aW9uIGFuZCBsYWJlbCB0aGVtLCB0aGlzIGlzIGp1c3QgYSBwbGFjZWhvbGRlciBvZiB0aGUgcHJldmlvdXMgcGxvdC4gQWxzbyBtYXliZSB3aWxsIGFkZCBpbiBTQ0NUIHZhbHVlcyBhcyByZWZlcmVuY2VzLCBub3Qgc3VyZSBpZiB0aGV5IGFyZSBzdXBlciByZWxldmFudCBvciBob3cgdG8gc29ydCB0aGVtLgoKIyMgNC41IENvbmNsdXNpb25zIGFuZCBGdXR1cmUgV29yawpUaGlzIGZpbmRpbmcgY2FuIGJlIHVzZWQgYnkgZ2VvbG9naXN0cyB0byBhbmFseXplIHdoYXQgZGlmZmVyZW50IHNvaWwgY29tcG9zaXRpb25zIGFyb3VuZCBkaWZmZXJlbnQgUElYTCBhYnJhc2lvbnMgY2FuIG1lYW4gZm9yIGxpZmUgb24gTWFycy4gRm9yIGV4YW1wbGUsIG94aWRlIHByZXNlbmNlIGRvZXNuJ3QgbmVjZXNzYXJpbHkgaW5kaWNhdGUgbGlmZSwgYnV0IGl0IGNvdWxkIGluZGljYXRlIGJpb2xvZ2ljYWwgb3IgY2hlbWljYWwgbGlmZSBwcm9jZXNzZXMuIEZvciBleGFtcGxlLCBDYU8gY2FuIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBvbGQgYmlvbG9naWNhbCBtYXRlcmlhbCBsaWtlIHNoZWxscyBvciBmb3NzaWxzLgotQWRkIG1vcmUgYWJvdXQgZnV0dXJlIHdvcmssIG5vdCBzdXJlIHdoYXQgZWxzZSB0byBpbmNsdWRlCgojIDUuMCBGaW5kaW5nIDM6IEFuYWx5emluZyBDYXRpb24gQ29tYmluYXRpb25zIHVzaW5nIExJQlMgYW5kIFBJWEwgbWF0Y2hlZCBkYXRhClVzaW5nIHRoZSBMSUJTIGFuZCBQSVhMIGNvbWJpbmVkIGRhdGEgc2V0LCB3ZSBjcmVhdGVkIGEgdGVybmFyeSBwbG90IHRvIHNob3cgdGhlIGRpc3RyaWJ1dGlvbiBvZiBMSUJTIHNhbXBsZXMgc29ydGVkIGJ5IHdoYXQgUElYTCBhYnJhc2lvbiB0aGV5IGFyZSBjbG9zZXN0IHRvIChiYXNlZCBvbiBhIGNob3NlbiBkaXN0YW5jZSB2YXJpYWJsZSkuIE11Y2ggb2YgdGhlIGRhdGEgcHJlcHJvY2Vzc2luZyBpcyBzaW1pbGFyIHRvIEZpbmRpbmcgMSB3aGljaCB3ZSB3aWxsIHJlcGVhdCBoZXJlLiBIb3dldmVyLCB0aGUgZ29hbCBoZXJlIGlzIHRvIGFuYWx5emUgaG93IGRpZmZlcmVudCBncm91cHMgb2YgTElCUyBzYW1wbGVzIChjb2xvcmVkIGJ5IG1hdGNoaW5nIFBJWEwgYWJyYXNpb24pIGRpZmZlciBieSBjYXRpb24gY29tcG9zaXRpb24uCgojIyA1LjEgRGF0YSwgQ29kZSwgYW5kIFJlc291cmNlcwpIZXJlIGlzIGEgbGlzdCBkYXRhIHNldHMsIGNvZGVzLCB0aGF0IGFyZSB1c2VkIGluIHlvdXIgd29yay4gQWxvbmcgd2l0aCBicmllZiBkZXNjcmlwdGlvbiBhbmQgVVJMIHdoZXJlIHRoZXkgYXJlIGxvY2F0ZWQuCgoxLiBwZXRlcmMtZmluYWxQcm9qZWN0RjI0LlJtZCAod2l0aCBrbml0IHBkZiBhbmQgaHRtbCkgaXMgdGhpcyBub3RlYm9vay4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA3X0RyYWZ0RmluYWxQcm9qZWN0Tm90ZWJvb2svcGV0ZXJjX2ZpbmFsUHJvamVjdEYyNF9yb3VnaGRyYWZ0LlJtZF0oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kKQoKMi4gc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcyB3aGljaCBpcyB0aGUgb3JpZ2luYWwgTElCUyBkYXRhIGdpdmVuIHRvIG91ciByZXNlYXJjaCBncm91cC4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkc10oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzKQoKCkZpcnN0LCB3ZSBzZXQgYSBkaXN0YW5jZSB2YXJpYWJsZSB3aGljaCBjYW4gYmUgdXNlZCBhcyBhIHNsaWRlciBiYXIgaW4gdGhlIGFwcC4gQ2hhbmdpbmcgdGhpcyB2YXJpYWJsZSBzZXRzIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gYSBQSVhMIHRhcmdldCBhbmQgTElCUyBzYW1wbGUgZm9yIHRoZW0gdG8gYmUgY2xhc3NpZmllZCB0b2dldGhlci4KYGBge3J9CiNzZXQgZGlzdGFuY2UgdmFyaWFibGUgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYSB0b2dnbGUgdG9vbApkaXN0YW5jZT01MApgYGAKClRvIHByZXBhcmUgdGhlIGRhdGEsIEkgc3RhcnQgYnkgbG9hZGluZyBpbiB0aGUgTElCUyBkYXRhLiBUaGVuLCB3ZSBkcm9wIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gY29sdW1ucyBhbmQgc3VtIG9mIHBlcmNlbnRhZ2UgY29sdW1ucyBsZWF2aW5nIHVzIHdpdGgganVzdCB0aGUgd2VpZ2h0ZWQgY29tcG9zaXRpb24gaW4gdGVybXMgb2YgbnVtZXJpY2FsIGRhdGEuIFdlIGFsc28gcmVtb3ZlIHRoZSBzY2N0IHZhbHVlcywgYXMgdGhvc2UgdmFsdWVzIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBlYXJ0aCByZWZlcmVuY2Ugc2FtcGxlcyB0aGF0IFBlcnNlcnZlcmFuY2UgY2FycmllcyB3aXRoIGl0LiBUaGVyZWZvcmUsIHRoZXkgd2lsbCBub3QgYmUgdmVyeSByZWxldmFudCB3aGVuIHBsb3R0aW5nIHRoZSBMSUJTIGRhdGEgYXMgd2UgYXJlIGZvY3VzZWQgb24gdGhlIGNhdGlvbiBjb21iaW5hdGlvbnMgYW5kIHRoZXJlZm9yZSBvbmx5IG5lZWQgdGhlIHdlaWdodGVkIGNvbXBvc2l0aW9ucy4KYGBge3J9CiNMb2FkIGluIExJQlMgZGF0YQpsaWJzLmRmIDwtIHJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzIikKI0Ryb3AgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBmZWF0dXJlcywgdGhlIHN1bSBvZiB0aGUgcGVyY2VudGFnZXMsIAojdGhlIGRpc3RhbmNlLCBhbmQgdGhlIHRvdGFsIGZyZXF1ZW5jaWVzCmxpYnMuZGYgPC0gbGlicy5kZiAlPiUgCiAgc2VsZWN0KCEoYyhkaXN0YW5jZV9tbSxUb3QuRW0uLFNpTzJfc3RkZXYsVGlPMl9zdGRldixBbDJPM19zdGRldixGZU9UX3N0ZGV2LAogICAgICAgICAgICAgTWdPX3N0ZGV2LE5hMk9fc3RkZXYsQ2FPX3N0ZGV2LEsyT19zdGRldixUb3RhbCkpKQojIENvbnZlcnQgdGhlIHBvaW50cyB0byBudW1lcmljCmxpYnMuZGYkcG9pbnQgPC0gYXMubnVtZXJpYyhsaWJzLmRmJHBvaW50KQpsaWJzLmRmWyw2OjEzXSA8LSBzYXBwbHkobGlicy5kZlssNjoxM10sYXMubnVtZXJpYykKI3JlbW92ZSB0aGUgc2NjdC9yZWZlcmVuY2Ugc2FtcGxlcwpsaWJzLmRmPC1saWJzLmRmJT4lCiAgZmlsdGVyKCEoZ3JlcGwoInNjY3QiLCB0YXJnZXQpKSkKI2FkZCBhIGNvbHVtbiB0byBpbmRpY2F0ZSB0aGUgbmVhcmVzdCBwaXhsCmxpYnMuZGY8LWNiaW5kKG5lYXJlc3RwaXhsPTAsbGlicy5kZikKI21ha2UgYSBkYXRhZnJhbWUgb2YganVzdCB0aGUgTElCUyBMYXQvTG9uZyBhbmQgdGFyZ2V0IG5hbWUgYW5kIHJlbW92ZSBkdXBsaWNhdGVzCmxpYnN0YXJnZXRzLmRmPC1saWJzLmRmWyxjKDEsMyw0LDUpXQpsaWJzdGFyZ2V0cy5kZjwtZGlzdGluY3QobGlic3RhcmdldHMuZGYpCmBgYAoKTG9hZCBpbiBQSVhMIGRhdGEKYGBge3J9CiNyZWFkIGluIHBpeGwgZGF0YSB3aXRoIGxhdC9sb25nCnBpeGwuZGY8LXJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvU3R1ZGVudERhdGEvcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzIikKI2luY2x1ZGUgb25seSBwaXhsIG1ldGFkYXRhCnBpeGwuZGY8LXBpeGwuZGYgJT4lCiAgc2VsZWN0KGMoMSwyLDE5LDIwLDIyKSkKI2NvbnZlcnQgTGF0L0xvbmcgdG8gbnVtZXJpYwpwaXhsLmRmJExhdCA8LSBhcy5udW1lcmljKHBpeGwuZGYkTGF0KQpwaXhsLmRmJExvbmcgPC0gYXMubnVtZXJpYyhwaXhsLmRmJExvbmcpCiNyZW1vdmUgcm93cyBzbyB3ZSBvbmx5IGhhdmUgb25lIHNhbXBsZSBwZXIgYWJyYXNpb24gYW5kIHJlbW92ZSBhdG1vc3BoZXJpYyBzYW1wbGUKcGl4bC5kZjwtcGl4bC5kZltjKDIsNCw2LDgsMTAsMTIsMTQsMTYpLF0KYGBgCgpOZXh0LCB3ZSB3aWxsIGluaXRpYWxpemUgYSBkaXN0YW5jZSB2YXJpYWJsZSAodG8gaW5kaWNhdGUgZGlzdGFuY2UgYmV0d2VlbiBQSVhMIGFicmFzaW9uIGFuZCBMSUJTIHRhcmdldCkgYW5kIGFsc28gaW5pdGlhbGl6ZSBlYWNoIFBJWEwgYWJyYXNpb24sIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBtYXJrIHdoaWNoIFBJWEwgYWJyYXNpb24gdGhlIExJQlMgc2FtcGxlIGlzIGNsb3Nlc3QgdG8gYnkgdXNpbmcgYSBmYWN0b3Igb2YgMCBvciAxLiAKYGBge3J9CiNMSUJTIHRhcmdldCBkYXRhIGZyYW1lIHdpdGggZGlzdGFuY2UgdmFyaWFibGUgYXMgd2VsbApsaWJzdGFyZ2V0cy5kZjwtY2JpbmQobGlic3RhcmdldHMuZGYsIkRpc3RhbmNlIj0wLCJCZWxsZWdyYWRlIj0wLCJEb3VyYmVzIj0wLCJRdWFydGllciI9MCwiQWxmYWxmYSI9MCwiVGhvcm50b25HYXAiPTAsIkJlcnJ5SG9sbG93Ij0wLCJOb3ZhcnVwdGEiPTAsIlVnYW5pa0lzbGFuZCI9MCkKYGBgCgpUaGUgZGlzdGFuY2UgZnVuY3Rpb24gYmVsb3cgd2lsbCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBMSUJTIHRhcmdldCBhbmQgYWxsIHRoZSBQSVhMIGFicmFzaW9ucywgYW5kIHBpY2sgdGhlIHNtYWxsZXN0IGRpc3RhbmNlIHRvIHBpY2sgdGhlIGNsb3Nlc3QgUElYTCBhYnJhc2lvbiB0byB0aGF0IExJQlMgdGFyZ2V0LgpgYGB7cn0KI0Rpc3RhbmNlIGZ1bmN0aW9uCmZvcihpIGluIDE6bnJvdyhsaWJzdGFyZ2V0cy5kZikpIHsKICAgIGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV08LWMoZGlzdEhhdmVyc2luZShwaXhsLmRmWzEsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzIsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzMsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzQsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzUsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzYsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzcsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzgsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSkKICAgIAogICAgbGlic3RhcmdldHMuZGZbaSwxXTwtd2hpY2gubWluKGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV0pCiAgICBsaWJzdGFyZ2V0cy5kZltpLDVdPC1taW4obGlic3RhcmdldHMuZGZbaSxjKDY6MTMpXSkKfQpsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bDwtYXMuZmFjdG9yKGxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsKQpsZXZlbHMobGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGwpPC0oYygiQmVsbGVncmFkZSIsIkRvdXJiZXMiLCJRdWFydGllciIsIkFsZmFsZmEiLCJUaG9ybnRvbkdhcCIsIkJlcnJ5SG9sbG93IiwiTm92YXJ1cHRhIiwiVWdhbmlrSXNsYW5kIikpCmBgYAoKQmVsb3cgaXMgYW5vdGhlciBpbml0aWFsaXplciBmb3IgdGhlIFBJWEwgYWJyYXNpb24gZGF0YS4gVGhpcyBzZXRzIHRoZSB2YXJpYWJsZXMgZm9yIGVhY2ggUElYTCBhYnJhc2lvbi4KYGBge3J9CiNTZXRzIGVhY2ggbmVhcmVzdCBQSVhMIHZhcmlhYmxlIGZvciBmdXR1cmUgdXNlIGluIGRlY2lkaW5nIHdoaWNoIHRhcmdldCBpcyBjbG9zZXN0IHRvIGEgTElCUyBzYW1wbGUKQmVsbGVncmFkZTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJCZWxsZWdyYWRlIixdJHRhcmdldApEb3VyYmVzPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkRvdXJiZXMiLF0kdGFyZ2V0ClF1YXJ0aWVyPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlF1YXJ0aWVyIixdJHRhcmdldApBbGZhbGZhPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkFsZmFsZmEiLF0kdGFyZ2V0ClRob3JudG9uR2FwPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlRob3JudG9uR2FwIixdJHRhcmdldApCZXJyeUhvbGxvdzwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJCZXJyeUhvbGxvdyIsXSR0YXJnZXQKTm92YXJ1cHRhPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09Ik5vdmFydXB0YSIsXSR0YXJnZXQKVWdhbmlrSXNsYW5kPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlVnYW5pa0lzbGFuZCIsXSR0YXJnZXQKYGBgCgpOZXh0LCB3ZSBmaWx0ZXIgb3V0IHRoZSBMSUJTIHRhcmdldHMgdGhhdCBhcmUgbm90IHdpdGhpbiB0aGUgc3BlY2lmaWVkIGRpc3RhbmNlIHZhcmlhYmxlLiBUaGVuLCB3ZSBtZXJnZSB0aGUgTElCUyBkYXRhIHdpdGggdGhlIHJlc3BlY3RpdmUgUElYTCBhYnJhc2lvbiBieSBtdXRhdGluZyBhbmQgYWRkaW5nIGFuIGFicmFzaW9uIGNvbHVtbiB0aGF0IGhhcyB0aGUgYWJyYXNpb24gbmFtZSBjbG9zZXN0IHRvIGVhY2ggTElCUyB0YXJnZXQuIFdlIGFsc28gYWRkIGEgY29sdW1uLCBMSUJTIG9yIFBJWEwsIHdoaWNoIGRlbm90ZXMgaWYgdGhlIHJvdyBvZiBkYXRhIGlzIGZyb20gdGhlIFBJWEwgYW5kIExJQlMgZGF0YSBzZXRzLiBXZSBhbHNvIHNldCB1cCB0aGUgbGlicy50ZXJuIG1hdHJpeCB3aGljaCB3aWxsIApgYGB7cn0KaW5jbHVkZWQubGliczwtKGxpYnN0YXJnZXRzLmRmJT4lCiAgZmlsdGVyKERpc3RhbmNlPG1ldGVycykpJHRhcmdldApsaWJzLm1hdHJpeCA8LWxpYnMuZGYgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGluY2x1ZGVkLmxpYnMpCiNzZXQgTElCUyBtYXRyaXggYW5kIHRlcm5hcnkgcGxvdCBieSBhZGRpbmcgaW4gY2F0aW9uIGNvbXBvbmVudHMgYW5kIG11dGF0aW5nCmxpYnMubWF0cml4IDwtIGxpYnMubWF0cml4WyxjKDUsNzoxNCldCmxpYnMudGVybiA8LSBhcy5kYXRhLmZyYW1lKGxpYnMubWF0cml4KSAlPiUKICBtdXRhdGUoeD0oU2lPMitBbDJPMykvMTAwLHk9KEZlT1QrTWdPKS8xMDAsej0oQ2FPK05hMk8rSzJPKS8xMDApICU+JQogIHNlbGVjdCgtYyhTaU8yLEFsMk8zLEZlT1QsTWdPLENhTyxOYTJPLEsyTyxUaU8yKSkKbGlicy50ZXJuPC1jYmluZCgiQWJyYXNpb24iPTAsbGlicy50ZXJuKQojU2V0IHdoYXQgYWJyYXNpb24gZ29lcyB3aXRoIHRoZSByZXNwZWN0aXZlIExJQlMgc2FtcGxlIGl0IG1hdGNoZXMgd2l0aApsaWJzLnRlcm48LWxpYnMudGVybiU+JQogIG11dGF0ZShBYnJhc2lvbiA9IGlmZWxzZSh0YXJnZXQlaW4lQWxmYWxmYSwiQWxmYWxmYSIsIAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBCZWxsZWdyYWRlLCAiQmVsZWdyYWRlIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgQmVycnlIb2xsb3csICJCZXJyeUhvbGxvdyIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIERvdXJiZXMsICJEb3VyYmVzIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgTm92YXJ1cHRhLCAiTm92YXJ1cHRhIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgUXVhcnRpZXIsICJRdWFydGllciIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFRob3JudG9uR2FwLCAiVGhvcm50b25HYXAiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBVZ2FuaWtJc2xhbmQsICJVZ2FuaWtJc2xhbmQiLEFicmFzaW9uKSkpKSkpKSkpCiNzdW1tYXJ5IG9mIExJQlMgZGF0YSBpbmNsdWRpbmcgZGlzdGFuY2UgcGFyYW1ldGVyLCBudW1iZXIgb2YgTElCUyB0YXJnZXRzLCBhbmQgbnVtYmVyIG9mIExJQlMgcG9pbnRzCmthYmxlZGY8LXJiaW5kKCJEaXN0YW5jZSAobSkiPW1ldGVycywiVGFyZ2V0cyI9bGVuZ3RoKGluY2x1ZGVkLmxpYnMpLCJQb2ludHMiPW5yb3cobGlicy50ZXJuKSkKa2FibGUoa2FibGVkZiwgY2FwdGlvbiA9IkxJQlMgIyBvZiBUYXJnZXRzIGFuZCBQb2ludHMgd2l0aGluIFNwZWNpZmllZCBEaXN0YW5jZSIpCmBgYAoKCgojIyA1LjIgQ29udHJpYnV0aW9uCgpUaGlzIHdvcmsgd2FzIGFsc28gYSBjb21iaW5hdGlvbiBvZiBtZSBhbmQgTWFyZ28uIFRoZSBkYXRhIHNldCBjcmVhdGlvbiB3YXMgYm90aCBvZiB1cyBpbiBvdXIgYnJhaW5zdG9ybWluZyBhcyB0aGlzIHV0aWxpemVzIHRoZSBkYXRhIHNldCB3ZSBjcmVhdGVkIG9mIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgZm9yIFBJWEwuCi0gQWRkIG1vcmUgaGVyZQotIFZlcnkgc2ltaWxhciB0byBvdGhlciB0d28gc2VjdGlvbnMgYWRkIGluIGxhdGVyLCBNYXJnbyBhbmQgSSB3b3JrZWQgb24gbW9zdCBvZiB0aGlzIHRvZ2V0aGVyCgojIyA1LjMgTWV0aG9kcyBEZXNjcmlwdGlvbiAKCi0gU3RhcnRlZCB3aXRoIGZpbHRlcmluZyBvcmlnaW5hbCBkYXRhIHRvIGdldCByaWQgb2YgU0NDVCB2YWx1ZXMKLSB0aGVuIHNldCB1cCB0ZXJuYXJ5IGRhdGEgZnJhbWUgYnkgbXV0YXRpbmcgYnkgY2F0aW9uIGNvbXBvc2l0aW9ucwotIHRoZW4gbXV0YXRlZCB0byBtYWtlIHRoZSBQSVhMIGFicmFzaW9ucyB0aGUga2V5LCBzbyB0aGUgTElCUyB0YXJnZXRzIGFyZSBjb2xvcmVkIGJ5IHRoZSBjbG9zZXN0IFBJWEwgYWJyYXNpb24sIGNyZWF0aW5nIGEgZm9ybSBvZiBjbHVzdGVycy4KCiMjIDUuNCBSZXN1bHQgYW5kIERpc2N1c3Npb24gClVzaW5nIGFsbCBvZiB0aGUgbWFuaXB1bGF0aW9uIGRvbmUgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGVybmFyeSBwbG90LCB3ZSB0aGVuIHBsb3QgdXNpbmcgdGhlIGdndGVybiBjb21tYW5kLiBXZSB3aWxsIGNvbG9yIGJ5IGFicmFzaW9uIHRvIHNlZSB0aGUgZGlzdHJpYnV0aW9uIG9mIGNvbXBvc2l0aW9uIGJldHdlZW4gZGlmZmVyZW50IGFicmFzaW9ucy4gVGhpcyBzaG91bGQgaGVscCB1cyBiZSBhYmxlIHRvIGRyYXcgZGlmZmVyZW50IGNvbmNsdXNpb25zIGFib3V0IGhvdyBhYnJhc2lvbnMgcmVsYXRlIG9yIGRvbid0IHJlbGF0ZS4gVGhlIG1heCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBQSVhMIHRhcmdldCBhbmQgTElCUyBzYW1wbGUgY2FuIGJlIG1vZGlmaWVkIGhvd2V2ZXIgZGVzaXJlZC4KYGBge3J9CmdndGVybihsaWJzLnRlcm4sIGdndGVybjo6YWVzKHg9eCx5PXksej16KSkgKwogIGdlb21fcG9pbnQoZGF0YT1saWJzLnRlcm4sYWVzKGNvbG9yPUFicmFzaW9uLGFscGhhPTAuNSkpICsgCiAgdGhlbWVfcmdidygpICsgCiAgbGFicyh0aXRsZT1wYXN0ZSgiTWFycyBMSUJTIERhdGEgV2l0aGluIixkaXN0YW5jZSwibWV0ZXJzIG9mIFBJWEwiLHNlcD0iICIpLAogICAgICAgeD0iU2krQWwiLAogICAgICAgeT0iRmUrTWciLAogICAgICAgej0iQ2ErTmErSyIpK3RoZW1lKGxlZ2VuZC5wb3NpdGlvbj0icmlnaHQiKSArIAogIGd1aWRlcyhhbHBoYT0ibm9uZSIpCmBgYAoKIyMgNS41IENvbmNsdXNpb25zIGFuZCBGdXR1cmUgV29yawpCYXNlZCBvbiB0aGlzIHRlcm5hcnkgcGxvdCwgd2UgY2FuIHNlZSBBbGZhbGZhIGFuZCBCZWxlZ3JhZGUgYXJlIGhpZ2hlciBpbiBTaStBbCBhbmQgVWdhbmlrIElzbGFuZCBpcyBhbiBvdXRsaWVyLiBBcyB0aGlzIHdhcyB0aGUgbGFzdCBwaWVjZSBvZiB0aGUgUElYTCBkYXRhIGluIHRoZSBkYXRhIHNldCBhbmQgaXQgd2FzIG1pc3NpbmcgYSBwYWlyIHNpbmNlIGV2ZXJ5IG90aGVyIGFicmFzaW9uIHdhcyBtYWRlIHVwIG9mIHR3byBzYW1wbGVzLCBpdCBpcyBpbmNsdWRlZCBpbiBoZXJlIGJ1dCB1bnRpbCB0aGUgZGF0YSBzZXQgaXMgdXBkYXRlZCB0aGVyZSBpcyBub3QgZW5vdWdoIGNvbnRleHQgdG8gZXhwbGFpbiB3aHkgaXQgaXMgc28gdmFzdGx5IGRpZmZlcmVudC4gSSB3b3VsZCBhc3N1bWUgaXQgaXMgZHVlIHRvIGhvdyB0aGUgcm9ib3QgaXMgdHJhdmVsaW5nIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIFVnYW5pa0lzbGFuZCBhYnJhc2lvbiBpcyB2ZXJ5IGRpZmZlcmVudCB0aGFuIHRoZSBvdGhlciA3IGFicmFzaW9ucy4KLSBGdXR1cmUgd29yaywgd291bGQgaW5jbHVkZSBtb3JlIGRhdGEgdG8gZ2FpbiBicm9hZGVyIGNvbnRleHQKCiMgQmlibGlvZ3JhcGh5ClByb3ZpZGUgYSBsaXN0aW5nIG9mIHJlZmVyZW5jZXMgYW5kIG90aGVyIHNvdXJjZXMuCgoqIEFuYWx5c3QncyBOb3RlYm9vawoqIE5vdCBzdXJlIHdoYXQgZWxzZSBpcyByZWxldmFudCwgbW9zdCBvZiB3aGF0IEkgdXNlZCB3YXMgc2ltaWxhciB0byBBbmFseXN0J3MgTm90ZWJvb2sKCiMgQXBwZW5kaXgKCipJbmNsdWRlIGhlcmUgd2hhdGV2ZXIgeW91IHRoaW5rIGlzIHJlbGV2YW50IHRvIHN1cHBvcnQgdGhlIG1haW4gY29udGVudCBvZiB5b3VyIG5vdGVib29rLiBGb3IgZXhhbXBsZSwgeW91IG1heSBoYXZlIG9ubHkgaW5jbHVkZSBleGFtcGxlIGZpZ3VyZXMgYWJvdmUgaW4geW91ciBtYWluIHRleHQgYnV0IGluY2x1ZGUgYWRkaXRpb25hbCBvbmVzIGhlcmUuIE9yIHlvdSBtYXkgaGF2ZSBkb25lIGEgbW9yZSBleHRlbnNpdmUgaW52ZXN0aWdhdGlvbiwgYW5kIHdhbnQgdG8gcHV0IG1vcmUgcmVzdWx0cyBoZXJlIHRvIGRvY3VtZW50IHlvdXIgd29yayBpbiB0aGUgc2VtZXN0ZXIuIEJlIHN1cmUgdG8gZGl2aWRlIGFwcGVuZGl4IGludG8gYXBwcm9wcmlhdGUgc2VjdGlvbnMgYW5kIG1ha2UgdGhlIGNvbnRlbnRzIGNsZWFyIHRvIHRoZSByZWFkZXIgdXNpbmcgYXBwcm9hY2hlcyBkaXNjdXNzZWQgYWJvdmUuICogClNob3VsZCBJIGFkZCBtb3JlIGV4YW1wbGVzIGhlcmUgb2Ygc29pbCBjb21wb3NpdGlvbiBwbG90cyBvZiBkaWZmZXJlbnQgYWJyYXNpb25zPyBJIGFsc28gY291bGQgYWRkIGhlYXQgbWFwIGFuYWx5c2lzIHRvIHRoaXMgbm90ZWJvb2sgYXMgYSBmaW5kaW5nIGJ1dCB3YXNuJ3Qgc3VyZSBpZiBpdCB3YXMgcmVhbGx5IHJlbGV2YW50LgoK
    +
    LS0tCnRpdGxlOiAiRGF0YSBBbmFseXRpY3MgUmVzZWFyY2ggSW5kaXZpZHVhbCBGaW5hbCBQcm9qZWN0IFJlcG9ydCAtIE1hcnMiCmF1dGhvcjogIkNoYXJsb3R0ZSBQZXRlcnNvbiIKZGF0ZTogIkZhbGwgMjAyNCIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiAzCiAgICB0b2NfZmxvYXQ6IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRoZW1lOiB1bml0ZWQKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogJzMnCi0tLQoKCiMgREFSIFByb2plY3QgYW5kIEdyb3VwIE1lbWJlcnMKCiogUHJvamVjdCBuYW1lOiBNYXJzCiogR2l0SHViIElEOiBkYXItcGV0ZXJjCiogUHJvamVjdCB0ZWFtIG1lbWJlcnM6IERhbnRlIE13YXRpYm8sIERvw7FhIFJvYmVydHMsIERhdmlkIFdhbGN5emssIFh1YW50aW5nIFdhbmcsIEFzaHRvbiBDb21wdG9uLCBNYXJnbyBWYW5Fc3NlbHN0eW4sIE5pY29sYXMgTW9yYXdza2ksIENKIE1hcmlubywgQWFkaSBMYWhpcmkgCgojIDAuMCBQcmVsaW1pbmFyaWVzLgoKKlIgTm90ZWJvb2tzIGFyZSBtZWFudCB0byBiZSBkeW5hbWljIGRvY3VtZW50cy4gUHJvdmlkZSBhbnkgcmVsZXZhbnQgdGVjaG5pY2FsIGd1aWRhbmNlIGZvciB1c2VycyBvZiB5b3VyIG5vdGVib29rLiBBbHNvIHRha2UgY2FyZSBvZiBhbnkgcHJlbGltaW5hcmllcywgc3VjaCBhcyByZXF1aXJlZCBwYWNrYWdlcy4gU2FtcGxlIHRleHQ6KgoKVGhpcyByZXBvcnQgaXMgZ2VuZXJhdGVkIGZyb20gYW4gUiBNYXJrZG93biBmaWxlIHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBSIGNvZGUgbmVjZXNzYXJ5IHRvIHByb2R1Y2UgdGhlIHJlc3VsdHMgZGVzY3JpYmVkIGFuZCBlbWJlZGRlZCBpbiB0aGUgcmVwb3J0LiAgQ29kZSBibG9ja3MgY2FuIGJlIHN1cnByZXNzZWQgZnJvbSBvdXRwdXQgZm9yIHJlYWRhYmlsaXR5IHVzaW5nIHRoZSBjb21tYW5kIGNvZGUgYHtSLCAgZWNobz1zaG93fWAgaW4gdGhlIGNvZGUgYmxvY2sgaGVhZGVyLiBJZiBgc2hvdyA8LSBGQUxTRWAgdGhlIGNvZGUgYmxvY2sgd2lsbCBiZSBzdXJwcmVzc2VkOyBpZiBgc2hvdyA8LSBUUlVFYCB0aGVuIHRoZSBjb2RlIHdpbGwgYmUgc2hvdy4gCgpgYGB7cn0KIyBTZXQgdG8gVFJVRSB0byBleHBhbmQgUiBjb2RlIGJsb2Nrczsgc2V0IHRvIEZBTFNFIHRvIGNvbGxhcHNlIFIgY29kZSBibG9ja3MgCnNob3cgPC0gVFJVRQpgYGAKCjwhLS0gRXhwYW5kIHRoaXMgbGlzdCBhcyBuZWNlc3NhcnkgZm9yIHlvdXIgbm90ZWJvb2sgLS0+CkV4ZWN1dGluZyB0aGlzIFIgbm90ZWJvb2sgcmVxdWlyZXMgc29tZSBzdWJzZXQgb2YgdGhlIGZvbGxvd2luZyBwYWNrYWdlczoKCiogYGdncGxvdDJgCiogYHRpZHl2ZXJzZWAKKiBgcGFuZG9jYAoqIGBybWFya2Rvd25gCiogYHN0cmluZ3JgCiogYGdnYmlwbG90YAoqIGBrbml0cmAKKiBgcnBhcnRgCiogYHJwYXJ0LnBsb3RgCiogYGNhcmV0YAoqIGBnZ3JlcGVsYAoqIGBnZ3Rlcm5gCgoKVGhlc2Ugd2lsbCBiZSBpbnN0YWxsZWQgYW5kIGxvYWRlZCBhcyBuZWNlc3NhcnkgKGNvZGUgc3VwcHJlc3NlZCkuIAoKPCEtLSBUaGUgYGluY2x1ZGU9RkFMU0VgIG9wdGlvbiBwcmV2ZW50cyB5b3VyIGNvZGUgZnJvbSBiZWluZyBzaG93biBhdCBhbGwgLS0+CmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIFRoaXMgY29kZSB3aWxsIGluc3RhbGwgcmVxdWlyZWQgcGFja2FnZXMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgaW5zdGFsbGVkCiMgQUxXQVlTIElOU1RBTEwgWU9VUiBQQUNLQUdFUyBMSUtFIFRISVMhCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQogICBsaWJyYXJ5KGdncGxvdDIpCn0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQoKaWYgKCFyZXF1aXJlKCJwYW5kb2MiKSkgewogIGluc3RhbGwucGFja2FnZXMoInBhbmRvYyIpCiAgbGlicmFyeShwYW5kb2MpCn0KCiMgUmVxdWlyZWQgcGFja2FnZXMgZm9yIE0yMCBMSUJTIGFuYWx5c2lzCmlmICghcmVxdWlyZSgicm1hcmtkb3duIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJybWFya2Rvd24iKQogIGxpYnJhcnkocm1hcmtkb3duKQp9CgppZiAoIXJlcXVpcmUoInN0cmluZ3IiKSkgewogIGluc3RhbGwucGFja2FnZXMoInN0cmluZ3IiKQogIGxpYnJhcnkoc3RyaW5ncikKfQoKaWYgKCFyZXF1aXJlKCJnZ2JpcGxvdCIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2diaXBsb3QiKQogIGxpYnJhcnkoZ2diaXBsb3QpCn0KCmlmICghcmVxdWlyZSgia25pdHIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikKICBsaWJyYXJ5KGtuaXRyKQp9CgppZiAoIXJlcXVpcmUoInJwYXJ0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydCIpCiAgbGlicmFyeShycGFydCkKfQoKaWYgKCFyZXF1aXJlKCJycGFydC5wbG90IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydC5wbG90IikKICBsaWJyYXJ5KHJwYXJ0KQp9CgppZiAoIXJlcXVpcmUoImNhcmV0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJjYXJldCIpCiAgbGlicmFyeShjYXJldCkKfQogIAppZiAoIXJlcXVpcmUoImdncmVwZWwiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdncmVwZWwiKQogIGxpYnJhcnkoZ2dyZXBlbCkKfQoKaWYgKCFyZXF1aXJlKCJnZW9zcGhlcmUiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdlb3NwaGVyZSIpCiAgbGlicmFyeShnZ3JlcGVsKQp9CgppZiAoIXJlcXVpcmUoImdndGVybiIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2d0ZXJuIikKICBsaWJyYXJ5KGdncmVwZWwpCn0KCmBgYAoKIyAxLjAgUHJvamVjdCBJbnRyb2R1Y3Rpb24KClRoZSBNYXJzIFByb2plY3QgaXMgZm9jdXNlZCBvbiBkYXRhIGZyb20gdGhlIDIwMjAgTWFycyBQZXJzZXZlcmFuY2UgUm92ZXIuIFRoZSBnb2FsIG9mIHRoZSBtaXNzaW9uIGlzIHRvIGxvb2sgZm9yIG1pY3JvYmlhbCBhbmNpZW50IGxpZmUgb3IgZm9ybXMgb2Ygd2F0ZXIgb24gTWFycyAodGhpbmdzIHRoYXQgY291bGQgc3VnZ2VzdCBsaWZlKS4gUGVyc2V2ZXJhbmNlIHVzZXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMsIGluY2x1ZGluZyBQSVhMIChQbGFuZXRhcnkgSW5zdHJ1bWVudCBmb3IgWC1SYXkgTGl0aG9jaGVtaXN0cnkpLCBTSEVSTE9DIChTY2FubmluZyBIYWJpdGFibGUgRW52aXJvbm1lbnRzIHdpdGggUmFtYW4gYW5kIEx1bWluZXNjZW5jZSBmb3IgT3JnYW5pY3MgYW5kIENoZW1pY2FscykgYW5kIFNVUEVSQ0FNLiBTVVBFUkNBTSBoYXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMgdGhhdCBtZWFzdXJlIHNwZWN0cm9zY29weSB0byBtZWFzdXJlIHByb3BlcnRpZXMgb2YgbWF0ZXJpYWxzIG9uIE1hcnMsIGluY2x1ZGluZyBMSUJTIChMYXNlci1pbmR1Y2VkIGJyZWFrZG93biBzcGVjdHJvc2NvcHkpLiBUaGlzIG5vdGVib29rIHdpbGwgcHJpbWFyaWx5IGZvY3VzIG9uIHRoZSBkYXRhIHdlIGhhdmUgYmVlbiBnaXZlbiBvZiBQSVhMIGFuZCBMSUJTLiAgCgojIDIuMCBPcmdhbml6YXRpb24gb2YgUmVwb3J0CgpUaGlzIHJlcG9ydCBpcyBvcmdhbml6ZSBhcyBmb2xsb3dzOiAKCiogU2VjdGlvbiAzLjAuICBGaW5kaW5nIDE6IExJQlMgYW5kIFBJWEwgTWF0Y2hpbmcgLSBXZSB3ZXJlIGFibGUgdG8gY29tYmluZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgYnkgcGlja2luZyBhIG1heGltdW0gZGlzdGFuY2UgdmFyaWFibGUgZnJvbSBhIFBJWEwgYWJyYXNpb24gYW5kIG1hdGNoaW5nIExJQlMgc2FtcGxlcyB0aGF0IHdlcmUgd2l0aGluIHRoZSBzZXQgZGlzdGFuY2Ugb2YgYSBQSVhMIGFicmFzaW9uLiAgCgoqIFNlY3Rpb24gNC4wOiBGaW5kaW5nIDI6IFNvaWwgQ29tcG9zaXRpb24gQW5hbHlzaXMgLSBVc2luZyB0aGUgTElCUyBhbmQgUElYTCBjb21iaW5lZCBkYXRhIHNldCwgSSBjcmVhdGVkIGEgcGxvdCBvZiB0aGUgY29tcG9zaXRpb24gcGVyY2VudGFnZXMgb2YgY2hlbWljYWwgY29tcG91bmRzIHN1Y2ggYXMgU2kwMiwgSzIwLCBldGMuIHVzaW5nIGxvZyBzY2FsaW5nIHRvIGNvbXBhcmUgdGhlIGNvbXBvc2l0aW9ucyBvZiBhIFBJWEwgYWJyYXNpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlIGNvbXBvc2l0aW9ucyAoYmFzZWQgb24gdGhlIExJQlMgc2FtcGxlcyBmb3IgeCBkaXN0YW5jZSBhd2F5IGZyb20gYSBQSVhMIGFicmFzaW9uKS4KCiogU2VjdGlvbiA1LjAgRmluZGluZyAzOiBBbmFseXppbmcgQ2F0aW9uIENvbWJpbmF0aW9ucyB1c2luZyBMSUJTIGFuZCBQSVhMIG1hdGNoZWQgZGF0YTogVXNpbmcgdGhlIExJQlMgYW5kIFBJWEwgY29tYmluZWQgZGF0YSBzZXQsIHdlIGNyZWF0ZWQgYSB0ZXJuYXJ5IHBsb3QgdG8gc2hvdyB0aGUgZGlzdHJpYnV0aW9uIG9mIExJQlMgc2FtcGxlcyBzb3J0ZWQgYnkgd2hhdCBQSVhMIGFicmFzaW9uIHRoZXkgYXJlIGNsb3Nlc3QgdG8gKGJhc2VkIG9uIGEgY2hvc2VuIGRpc3RhbmNlIHZhcmlhYmxlKS4KCiogU2VjdGlvbiA2LjAgT3ZlcmFsbCBjb25jbHVzaW9ucyBhbmQgc3VnZ2VzdGlvbnMgCgoqIFNlY3Rpb24gNy4wIEFwcGVuZGl4IFRoaXMgc2VjdGlvbiBkZXNjcmliZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgd29ya3MgdGhhdCBtYXkgYmUgaGVscGZ1bCBpbiB0aGUgZnV0dXJlIHdvcms6ICpsaXN0IHN1YmplY3RzKi4gIAoKCiMgMy4wIEZpbmRpbmcgMTogUElYTCBhbmQgTElCUyBNYXRjaGluZwoKX0dpdmUgYSBoaWdobGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIG1ham9yIGZpbmRpbmcuIFdoYXQgcXVlc3Rpb25zIHdlcmUgeW91ciB0cnlpbmcgdG8gYWRkcmVzcywgd2hhdCBhcHByb2FjaGVzIGRpZCB5b3UgZW1wbG95LCBhbmQgd2hhdCBoYXBwZW5lZD9fCgpGaXJzdGx5LCB3ZSB3aWxsIGJlIHRha2luZyBhIGxvb2sgYXQgaG93IFBJWEwgYW5kIExJQlMgY29ycmVzcG9uZC4gT3VyIGdyb3VwIGZvdW5kIHZlcnkgZWFybHkgaW4gb3VyIHJlc2VhcmNoIHRoYXQgdGhlcmUgd2Fzbid0IGEgZmVhdHVyZSBhbW9uZyB0aGVtIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggdGhlIGRhdGEgc2V0cy4gRm9yIGV4YW1wbGUsIHRoZSBjb2x1bW5zIG9mIFBJWEwgYXJlIG9yZ2FuaXplZCBieSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGFzIHdlbGwgYXMgc2FtcGxlIG51bWJlciAoMS0xNiksIHNhbXBsZSBuYW1lLCBhbmQgYWJyYXNpb24gbmFtZS4gVW5mb3J0dW5hdGVseSwgTElCUyB3YXNuJ3Qgc29ydGVkIHRoZSBzYW1lIHdheS4gTElCUyB3YXMgb3JnYW5pemVkIGJ5IHRoZSBzb2wgdGhhdCB0aGUgc2FtcGxlIHdhcyB0YWtlbiBhdC4gTElCUyBpcyBicm9rZW4gdXAgaW50byBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBzYW1wbGVzIGFzIHdlbGwsIGluY2x1ZGluZyB0aGUgZmFjdCBpdCBjYXJyaWVzIGFyb3VuZCBlYXJ0aCByZWZlcmVuY2UgZGF0YSB0byBiZSB1c2VkIGluIGNvbXBhcmluZyB3aXRoIGRpZmZlcmVudCBzYW1wbGUgc2l0ZXMuIFRoYXQgYmVpbmcgc2FpZCwgaW4gb3JkZXIgdG8gbWF0Y2ggUElYTCB0YXJnZXRzIHRvIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGVzLCBNYXJnbyBhbmQgSSBjcmVhdGVkIGEgbmV3IGRhdGEgc2V0IHRoYXQgYWRkZWQgYW5vdGhlciBtZXRhZGF0YSBmZWF0dXJlIHRvIFBJWEwgKGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgY29vcmRpbmF0ZXMpIHdoaWNoIHdlIG9idGFpbmVkIGZyb20gdGhlIEFuYWx5c3QncyBOb3RlYm9vay4gT25jZSB0aGlzIHdhcyBhZGRlZCBpbiwgd2UgcmVhbGl6ZWQgdGhhdCB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBkaWRuJ3QgcmVhbGx5IG1hdGNoLiBTbyBNYXJnbyBjcmVhdGVkIGEgZGlzdGFuY2UgZnVuY3Rpb24gdG8gbWF0Y2ggTElCUyBzYW1wbGVzIHRvIFBJWEwgdGFyZ2V0cyBiYXNlZCBvbiB3aGF0ZXZlciBkaXN0YW5jZSBhIHBlcnNvbiBzcGVjaWZpZXMuIE9yaWdpbmFsbHksIHdlIHNldCBpdCB0byBiZSByb3VuZGVkIHRvIHRocmVlIHRob3VzYW5kdGhzIGFuZCBtYXRjaCBiYXNlZCBvbiB0aGF0LgoKVGhpcyBoZWxwZWQgYW5zd2VyIHRoZSBxdWVzdGlvbiBvZiBob3cgY2FuIHdlIGNvcnJlbGF0ZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgdG8gYmUgYWJsZSB0byBwbG90IHRoZW0gb24gdGhlIHNhbWUgYXhpcyBvZiB3aGF0ZXZlciBwbG90IGlzIHRyeWluZyB0byBiZSBjcmVhdGVkLiBJIHdhcyBjdXJpb3VzIHRvIHNlZSBob3cgY2xvc2UgUElYTCB0YXJnZXRzIHdlcmUgdG8gTElCUyBzYW1wbGUgc2l0ZXMgYXMgd2VsbCBhcyBob3cgbWFueSBMSUJTIHNhbXBsZXMgd291bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgUElYTCB0YXJnZXQgcGVyaGFwcyB3aXRoIGEgcmFkaXVzIG9mIDcgb3IgMTAgbWV0ZXJzLgoKIyMgMy4xIERhdGEsIENvZGUsIGFuZCBSZXNvdXJjZXMKCkhlcmUgaXMgYSBsaXN0IGRhdGEgc2V0cywgY29kZXMsIHRoYXQgYXJlIHVzZWQgaW4geW91ciB3b3JrLiBBbG9uZyB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBVUkwgd2hlcmUgdGhleSBhcmUgbG9jYXRlZC4KCjEuIHBldGVyYy1maW5hbFByb2plY3RGMjQuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSBpcyB0aGlzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwN19EcmFmdEZpbmFsUHJvamVjdE5vdGVib29rL3BldGVyY19maW5hbFByb2plY3RGMjRfcm91Z2hkcmFmdC5SbWQpCgoyLiB2MV9saWJzX3RvX3NhbXBsZS5SZHMgaXMgdGhlIGNvbWJpbmVkIGRhdGEgc2V0IG9mIFBJWEwgYW5kIExJQlMgdGhhdCBpbmNsdWRlcyB0aGUgZGlzdGFuY2UgZnJvbSBhIFBJWEwgYWJyYXNpb24gdG8gYSBMSUJTIHNhbXBsZS4gIApbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudERhdGEvdjFfbGlic190b19zYW1wbGUuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50RGF0YS92MV9saWJzX3RvX3NhbXBsZS5SZHMpLiAKCkZpcnN0bHksIHdlIHNldCB0aGUgbnVtYmVyIG9mIG1ldGVycyBkaXN0YW5jZSB0aHJlc2hvbGQgYmV0d2VlbiBhIFBJWEwgYWJyYXNpb24gYW5kIExJQlMgc2FtcGxlLiBXaXRoaW4gdGhlIHYxX2xpYnNfdG9fc2FtcGxlLlJkcywgd2hpY2ggTWFyZ28gYW5kIEkgY29sbGFib3JhdGVkIG9uIHRoZXJlIGlzIGEgZGlzdGFuY2UgdmFyaWFibGUgdGhhdCBpcyBzZXQgdmlhIGEgZnVuY3Rpb24gdGhhdCBNYXJnbyBjcmVhdGVkIHRvIG1lYXN1cmUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBQSVhMIGFicmFzaW9uIGFuZCBMSUJTIHNhbXBsZSB1c2luZyB0aGVpciBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzLiAKYGBge3J9Cm1ldGVycyA8LSAxMDAKYGBgCgpUbyBwcmVwYXJlIHRoZSBkYXRhLCB3ZSB3aWxsIGxvYWQgaW4gdGhlIHYxX2xpYnNfdG9fc2FtcGxlLlJkcywgZ3JvdXAgYnkgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBvZiBMSUJTLCBhbmQgZmlsdGVyIG91dCBldmVyeSBMSUJTIHNhbXBsZSB0aGF0IGhhcyBhIGxhcmdlciBkaXN0YW5jZSBmcm9tIGl0cyBjb3JyZXNwb25kaW5nIFBJWEwgYWJyYXNpb24gdGhhbiBzcGVjaWZpZWQgaW4gdGhlIGNob3NlbiBkaXN0YW5jZSAobWV0ZXIpIHZhbHVlLiBJbiBvcmRlciB0byBtYWtlIGEgc2NhdHRlciBwbG90IG9mIHRoZSBMSUJTIGFuZCBQSVhMIHBvaW50cywgd2Ugd2lsbCBjcmVhdGUgYSBuZXcgZGF0YSBmcmFtZSBvZiBlYWNoIHVuaXF1ZSBQSVhMIGFicmFzaW9uIGFuZCBpdHMgY29vcmRpbmF0ZXMuIFRoYXQgaXMgdGhlIHVuaXF1ZV9waXhsIGRhdGEgZnJhbWUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHBsb3QgdGhlIFBJWEwgYWJyYXNpb24gY29vcmRpbmF0ZXMuCgpgYGB7ciB9CmxpYnNfdG9fc2FtcGxlIDwtIHJlYWRSRFMoIn4vREFSLU1hcnMtRjI0L1N0dWRlbnREYXRhL3YxX2xpYnNfdG9fc2FtcGxlLlJkcyIpCiNtYWtlIGEgZmlsdGVyZWQgZGF0YSBmcmFtZSB0aGF0IHBpY2tzIHRoZSBtYXggcG9pbnQgb3V0IG9mIGFsbCBsaWJzIHNhbXBsZXMgYXQgYSBjZXJ0YWluIHRhcmdldCAKIyBmb3Igc2ltcGxpY2l0eQpkZl9maWx0ZXJlZCA8LSBsaWJzX3RvX3NhbXBsZSAlPiUKICBncm91cF9ieShMYXQubGlicywgTG9uLmxpYnMpICU+JQogIGZpbHRlcihQb2ludC5saWJzID09IG1heChQb2ludC5saWJzKSkgJT4lCiAgdW5ncm91cCgpCmRmX2Rpc3RhbmNlX2ZpbHRlciA8LSBkZl9maWx0ZXJlZFtkZl9maWx0ZXJlZCREaXN0YW5jZSA8PSBtZXRlcnMsXQoKI21ha2UgYSBkYXRhIGZyYW1lIHdpdGggdGhlIHVuaXF1ZSBwaXhsIGNvb3JkaW5hdGVzIHNpbmNlIHRoZXkgYXJlIGluIHBhaXJzIG9mIGlkZW50aWNhbCBsYXQvbG9uCnVuaXF1ZV9waXhsIDwtIGRmX2ZpbHRlcmVkICU+JQogIHNlbGVjdChMYXQucGl4bCwgTG9uLnBpeGwsIEFicmFzaW9uLnBpeGwpICU+JSBkaXN0aW5jdCgpCmBgYAoKCiMjIDMuMiBDb250cmlidXRpb24KClRoZSBsb2dpc3RpY3Mgb2YgZmlsdGVyaW5nIHRoZSBvcmlnaW5hbCBkYXRhIHNldCBpcyBteSB3b3JrLiBQcmV2aW91c2x5LCBJIGhhZCB0byBkbyBhIGxvdCBtb3JlIGZpbHRlcmluZyBpbiBvcmRlciB0byBjaG9vc2UgdGhlIGRpc3RhbmNlIGFuZCBnZXQgdW5pcXVlIExJQlMgcG9pbnRzIGluIG9yZGVyIHRvIG5vdCBwdXQgdG9vIG1hbnkgcG9pbnRzIG9uIHRoZSBzY2F0dGVycGxvdC4gTWFyZ28gYW5kIEkgd29ya2VkIHRvZ2V0aGVyIHRvIGNyZWF0ZSB0aGUgZGF0YSBzZXQgdGhhdCBJIHVzZSBpbiB0aGlzIHNlY3Rpb24gKHYxX2xpYnNfdG9fc2FtcGxlLlJkcykgYnkgZGVjaWRpbmcgaG93IHRvIG1hdGNoIHVwIExJQlMgdG8gY2VydGFpbiBQSVhMIGFicmFzaW9ucy4gTWFyZ28gY3JlYXRlZCB0aGUgZGlzdGFuY2UgZnVuY3Rpb24gdG8gZmluZCB0aGUgZGlzdGFuY2UgYmV0d2VlbiBQSVhMIGFicmFzaW9ucyBhbmQgTElCUyBzYW1wbGVzIGFuZCBhZGRlZCB0aGF0IGNvbHVtbiB0byB0aGUgZGF0YSBzZXQuIFRoZW4sIERvbmEgZml4ZWQgYWxsIHRoZSBuYW1pbmcgY29udmVudGlvbnMgaW4gdGhlIGRhdGEgc2V0IGluIG9yZGVyIHRvIGhhdmUgY29uc2lzdGVuY3kgYW5kIG1ha2UgaXQgZWFzeSB0byB0ZWxsIHdoaWNoIHZhcmlhYmxlIHdhcyBvcmlnaW5hbGx5IGZyb20gZWFjaCBkYXRhIHNldCAoZXguIE5hbWUucGl4bCwgVGFyZ2V0LmxpYnMpLiBJIHRoZW4gdXNlZCB0aGUgZGF0YSB0byBjcmVhdGUgcGxvdHMgYW5kIGFuYWx5emUuIEJlbG93IGlzIGEgc2NhdHRlcnBsb3Qgc2hvd2Nhc2luZyB0aGUgZGlzdHJpYnV0aW9uIG9mIFBJWEwgYWJyYXNpb25zIGFuZCBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIG1heCBkaXN0YW5jZSBiZXR3ZWVuIHRoZW0uIAoKCiMjIDMuMyBNZXRob2RzIERlc2NyaXB0aW9uIAoKSSBjaG9zZSB0byB1c2UgZ2dwbG90IHRvIGRpc3BsYXkgdGhlIExJQlMgYW5kIFBJWEwgZGF0YSBmb3IgZWFzaWVyIGFuYWx5c2lzIG9mIHNlZWluZyBob3cgbWFueSBMSUJTIHNhbXBsZXMgYWxpZ24gd2l0aCBkaWZmZXJlbnQgUElYTCBhYnJhc2lvbnMuIEl0IHdhcyB2ZXJ5IGludGVyZXN0aW5nIHRvIGNoYW5nZSBhcm91bmQgdGhlIG1heCBkaXN0YW5jZSBhbmQgc2VlIHdoaWNoIGFsaWduZWQgd2l0aCB3aGljaCBhYnJhc2lvbi4gSW4gdGVybXMgb2YgZXhlY3V0aW9uLCBpdCB0b29rIG1lIGEgYml0IG9mIHRpbWUgdG8gb3JnYW5pemUgYWxsIG9mIHRoZSB0aG91Z2h0cyBNYXJnbyBhbmQgSSBoYWQgb24gaG93IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHRoaXMgZGF0YSBzZXQuIE9yaWdpbmFsbHksIHdlIGhhZCByb3VuZGVkIHRoZSBkaXN0YW5jZXMgdG8gdGhlIG5lYXJlc3QgdGhvdXNhbmR0aCB0byBtYXRjaCB0aGVtLCBhbmQgdGhlbiB3ZXJlIHBsb3R0aW5nIHRoYXQgd2F5LiBIb3dldmVyLCB0aGF0IGxlZnQgYSBsb3Qgb2Ygcm9vbSBmb3IgZXJyb3IgYW5kIHdhc24ndCBhcyBhY2N1cmF0ZS4gQ3JlYXRpbmcgYSBkaXN0YW5jZSBmdW5jdGlvbiBhbGxvd3MgZm9yIHRoZSBzY2llbnRpc3Qgb3IgcGVyc29uIHVzaW5nIHRoZSBNYXJzIE1pc3Npb24gTWluZGVyIEFwcCB0byBjaG9vc2Ugd2hhdGV2ZXIgZGlzdGFuY2UgdGhleSB3b3VsZCBsaWtlIGFuZCBhbGxvd3MgZm9yIG11Y2ggbW9yZSBmdW5jdGlvbmFsaXR5LiBNb2RpZnlpbmcgdGhlIGRhdGEgc2V0IG1vcmUgZW5kZWQgdXAgYmVpbmcgbW9yZSBlZmZpY2llbnQgdGhhbiBhZGRpbmcgc21hbGwgZWRpdHMgYXMgSSB3YXMgbWFraW5nIG15IHBsb3RzIHdoaWNoIHdhcyBvcmlnaW5hbGx5IG1ha2luZyBtZSBjcmF6eSAoYXMgaW4gY2hhbmdpbmcgdmFyaWFibGUgdHlwZXMgaWYgdGhleSB3ZXJlbid0IHdoYXQgdGhleSB3ZXJlIHN1cHBvc2VkIHRvIGJlKS4gSW4gdGhlIGVuZCwgSSBsZWFybmVkIGEgbG90IGFib3V0IGRhdGEgb3JnYW5pemF0aW9uIGFuZCB0aGF0IGNvbnNpc3RlbmN5IGFuZCBzdGF5aW5nIG9yZ2FuaXplZCBpcyBrZXkgYW5kIHNhdmVzIGEgbG90IG9mIHRpbWUgbGF0ZXIgb24uCgoKIyMgMy40IFJlc3VsdCBhbmQgRGlzY3Vzc2lvbiAKClRvIGNyZWF0ZSBhIHBsb3Qgb2YgdGhlIExJQlMgYW5kIFBJWEwgZGF0YSBvcmdhbml6ZWQgYnkgd2hhdCBMSUJTIHNhbXBsZXMgYWxpZ24gd2l0aCB3aGF0IGFicmFzaW9ucywgZmlyc3QgcGxvdHRlZCB0aGUgTElCUyBzYW1wbGVzIGNvbG9yZWQgYnkgd2hhdCBQSVhMIGFicmFzaW9uIHRoZXkgd2VyZSBjbG9zZXN0IHRvLCBhbmQgdGhlbiBwbG90dGVkIHRoIFBJWEwgYWJyYXNpb25zIGFzIHJlZCBzdGFycyBvbiB0aGUgcGxvdCB0byBzaG93IHdoZXJlIHRoZSBQSVhMIGFicmFzaW9ucyB3ZXJlIHJlbGF0aXZlIHRvIHRoZSBMSUJTIHNhbXBsZXMuCgpgYGB7ciB9CiNwbG90IG9mIGxpYnMgYW5kIHBpeGwgZGF0YSBieSBsYXQvbG9uCmdncGxvdChkYXRhID0gZGZfZGlzdGFuY2VfZmlsdGVyKSArCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBMb24ubGlicywgeSA9IExhdC5saWJzLCBjb2xvciA9IEFicmFzaW9uLnBpeGwpKSArICAgICAgICAgICAgICAgICAjIENvbG9yIGJ5IGFicmFzaW9uCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBMb24ucGl4bCwgeSA9IExhdC5waXhsKSwgZGF0YSA9IHVuaXF1ZV9waXhsLCBjb2xvciA9ICJyZWQiLCBzaGFwZSA9IDMsIHNpemUgPSAzKSArICMgRml4ZWQgY29sb3IgZm9yIHVuaXF1ZV9waXhsIHBvaW50cwogIGdlb21fdGV4dF9yZXBlbChtYXBwaW5nID0gYWVzKHggPSBMb24ucGl4bCwgeSA9IExhdC5waXhsLCBsYWJlbCA9IEFicmFzaW9uLnBpeGwpLCBkYXRhID0gdW5pcXVlX3BpeGwsCiAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMiwgY29sb3IgPSAicmVkIikgKwogIGxhYnModGl0bGUgPSBwYXN0ZSgiTElCUyBTYW1wbGVzIGFuZCBQSVhMIEFicmFzaW9ucyB3aXRoaW4iLCBtZXRlcnMsICJtZXRlcnMiKSwKICAgICAgIHggPSAiTG9uZ2l0dWRlIiwKICAgICAgIHkgPSAiTGF0aXR1ZGUiLAogICAgICAgY29sb3IgPSAiUElYTCBBYnJhc2lvbiIsCiAgICAgICBjYXB0aW9uID0gIkRhdGEgY29sbGVjdGVkIHVzaW5nIExJQlMgYW5kIFBJWEwgaW5zdHJ1bWVudHMgb24gUGVyc2VydmVyYW5jZSByb3Zlci5cbiBTaG93cyBQSVhMIGFicmFzaW9ucyBwbG90dGVkIGFzIHJlZCBzdGFycyxcbiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGVzIGNvbG9yZWQgYnkgdGhlaXIgY2xvc2VzdCBQSVhMIGFicmFzaW9uLiIpKyAgICAgICAgICAjIExhYmVsIGZvciB0aGUgY29sb3IgbGVnZW5kIAogIyBDZW50ZXIgdGhlIGNhcHRpb24gb24gdGhlIGxlZnQgc2lkZQogIHRoZW1lKAogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCkgICMgQWxpZ25zIGNhcHRpb24gdG8gdGhlIGxlZnQKICApCgojYWRkIGxlZ2VuZCBmb3IgUElYTCBpZGsgd2h5IGl0J3Mgbm90IHdvcmtpbmcKYGBgCgoKIyMgMy41IENvbmNsdXNpb25zLCBMaW1pdGF0aW9ucywgYW5kIEZ1dHVyZSBXb3JrLgoKSSBiZWxpZXZlIG15IGZpbmRpbmdzIG1ha2UgaXQgdmVyeSBlYXN5IGZvciByZXNlYXJjaGVycyBhbmQgc2NpZW50aXN0cyB0byBoYXZlIGEgdmlzdWFsaXphdGlvbiBvZiBQSVhMIGFuZCBMSUJTIHNhbXBsZXMgdGhhdCB0aGV5IHdhbnQgdG8gc2VlIGJhc2VkIG9uIHdoYXQgbWF4IGRpc3RhbmNlIHRoZXkgYXJlIGZvY3VzaW5nIG9uIHdoZW4gZXhhbWluaW5nIFBJWEwgYW5kIExJQlMgdG9nZXRoZXIuIEZvciBmdXR1cmUgd29yaywgSSB0aGluayBhcyBtb3JlIGNvb3JkaW5hdGVzIGFuZCBkYXRhIGlzIGFkZGVkIHRvIHRoZSBMSUJTIGFuZCBQSVhMIGRhdGEgc2V0cyBhcyB0aGV5IGJlY29tZSBhdmFpbGFibGUgZnJvbSBOQVNBIHRoaXMgd2lsbCBjb250aW51ZSB0byBiZSBidWlsdCB1cG9uIGFuZCBhbHRob3VnaCBpdCBpc24ndCBzdXBlciBjb21wbGljYXRlZCBvZiBhIHBsb3QsIGl0IHByb3ZpZGVzIGEgdmVyeSBuZWNlc3NhcnkgY29udGV4dCB0byB2aXN1YWxpemUgUElYTCBhbmQgTElCUy4gCgotIEFkZCBtb3JlIGFib3V0IGxpbWl0YXRpb25zPwoKIyA0LjAgRmluZGluZyAyOiBTb2lsIENvbXBvc2l0aW9uIEFuYWx5c2lzCl9HaXZlIGEgaGlnaGxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtYWpvciBmaW5kaW5nLiBXaGF0IHF1ZXN0aW9ucyB3ZXJlIHlvdXIgdHJ5aW5nIHRvIGFkZHJlc3MsIHdoYXQgYXBwcm9hY2hlcyBkaWQgeW91IGVtcGxveSwgYW5kIHdoYXQgaGFwcGVuZWQ/XwoKVXNpbmcgdGhlIExJQlMgYW5kIFBJWEwgY29tYmluZWQgZGF0YSBzZXQsIEkgY3JlYXRlZCBhIHBsb3Qgb2YgdGhlIGNvbXBvc2l0aW9uIHBlcmNlbnRhZ2VzIG9mIGNoZW1pY2FsIGNvbXBvdW5kcyBzdWNoIGFzIFNpMDIsIEsyMCwgZXRjLiB1c2luZyBsb2cgc2NhbGluZyB0byBjb21wYXJlIHRoZSBjb21wb3NpdGlvbnMgb2YgYSBQSVhMIGFicmFzaW9uIGFuZCB0aGUgY29ycmVzcG9uZGluZyBMSUJTIHNhbXBsZSBjb21wb3NpdGlvbnMgKGJhc2VkIG9uIHRoZSBMSUJTIHNhbXBsZXMgZm9yIHggZGlzdGFuY2UgYXdheSBmcm9tIGEgUElYTCBhYnJhc2lvbikuIFRoZSBxdWVzdGlvbiBJIHdhcyB0cnlpbmcgdG8gYW5zd2VyIHdhcyBob3cgZG9lcyB0aGUgTElCUyBkYXRhIG9mIGEgY2VydGFpbiBhcmVhIGNvbXBhcmUgdG8gdGhlIFBJWEwgZGF0YSBvZiB0aGF0IGFyZWE/IEJ5IGxvb2tpbmcgYXQgdGhlIGNvbXBvc2l0aW9uIG9mIHRoZSBzb2lsIGluIGNlcnRhaW4gbG9jYXRpb25zLCB3ZSBjYW4gY29tcGFyZSB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIFBJWEwgYWJyYXNpb24gYW5kIHJlbGF0aW5nIExJQlMgc2FtcGxlcyBmb3IgYSBjZXJ0YWluIGFyZWEgdXRpbGl6aW5nIHRoZSBzYW1lIGRhdGEgc2V0ICh2MV9saWJzX3RvX3NhbXBsZS5SbWQpLiBJbiBvcmRlciB0byBhY2NvbXBsaXNoIHRoaXMsIAoKCiMjIDQuMSBEYXRhLCBDb2RlLCBhbmQgUmVzb3VyY2VzCkhlcmUgaXMgYSBsaXN0IGRhdGEgc2V0cywgY29kZXMsIHRoYXQgYXJlIHVzZWQgaW4geW91ciB3b3JrLiBBbG9uZyB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBVUkwgd2hlcmUgdGhleSBhcmUgbG9jYXRlZC4KCjEuIHBldGVyY19maW5hbFByb2plY3RGMjQuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSBpcyB0aGlzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwN19EcmFmdEZpbmFsUHJvamVjdE5vdGVib29rL3BldGVyY19maW5hbFByb2plY3RGMjRfcm91Z2hkcmFmdC5SbWQpCgoyLiBwZXRlcmNfYXNzaWdubWVudDUuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSB3aGljaCBpcyBteSBwcmV2aW91cyBub3RlYm9vay4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvdHJlZS9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA1L3BldGVyY19hc3NpZ25tZW50MDUuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L3RyZWUvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwNS9wZXRlcmNfYXNzaWdubWVudDA1LlJtZF0pCgozLiBzdXBlcmNhbV9saWJzX21vY19sb2MuUmRzIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBMSUJTIGRhdGEgZ2l2ZW4gdG8gb3VyIHJlc2VhcmNoIGdyb3VwLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9EYXRhL3N1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHMpCgo0LiBwaXhsX3NvbF9jb29yZGluYXRlcy5SZHMsIHdoaWNoIGlzIHRoZSBkYXRhIHNldCBjb250YWluaW5nIHRoZSBQSVhMIGRhdGEsIHNvbCwgYW5kIGNvb3JkaW5hdGVzLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudERhdGEvcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50RGF0YS9waXhsX3NvbF9jb29yZGluYXRlcy5SZHMpCgo0LiBMSUJTX3RyYWluaW5nX3NldF9xdWFydGlsZXMuUmRzIGlzIHRoZSBkYXRhIHdpdGggZWFydGggcXVhcnRpbGUgcmVmZXJlbmNlIGRhdGEuCltodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9EYXRhL0xJQlNfdHJhaW5pbmdfc2V0X3F1YXJ0aWxlcy5SZHNdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvTElCU190cmFpbmluZ19zZXRfcXVhcnRpbGVzLlJkcykuIAoKVG8gcHJlcGFyZSB0aGUgZGF0YSwgSSBzdGFydCBieSBsb2FkaW5nIGluIHRoZSBMSUJTIGRhdGEuIFRoZW4sIHdlIGRyb3AgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBjb2x1bW5zIGFuZCBzdW0gb2YgcGVyY2VudGFnZSBjb2x1bW5zIGxlYXZpbmcgdXMgd2l0aCBqdXN0IHRoZSB3ZWlnaHRlZCBjb21wb3NpdGlvbiBpbiB0ZXJtcyBvZiBudW1lcmljYWwgZGF0YS4gV2UgYWxzbyByZW1vdmUgdGhlIHNjY3QgdmFsdWVzLCBhcyB0aG9zZSB2YWx1ZXMgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGVhcnRoIHJlZmVyZW5jZSBzYW1wbGVzIHRoYXQgUGVyc2VydmVyYW5jZSBjYXJyaWVzIHdpdGggaXQuIFRoZXJlZm9yZSwgdGhleSB3aWxsIG5vdCBiZSB2ZXJ5IHJlbGV2YW50IHdoZW4gcGxvdHRpbmcgdGhlIExJQlMgZGF0YSBhcyB3ZSBhcmUgZm9jdXNlZCBvbiB0aGUgTWFycyBzb2lsIGNvbXBvc2l0aW9ucy4KCmBgYHtyfQojRWFydGggcXVhcnRpbGVzCmVhcnRocXVhcnRpbGVzLmRmPC1yZWFkUkRTKCIvYWNhZGVtaWNzL01BVFAtNDkxMC1GMjQvREFSLU1hcnMtRjI0L0RhdGEvTElCU190cmFpbmluZ19zZXRfcXVhcnRpbGVzLlJkcyIpCiNMb2FkIGluIExJQlMgZGF0YQpsaWJzLmRmIDwtIHJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzIikKI0Ryb3AgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBmZWF0dXJlcywgdGhlIHN1bSBvZiB0aGUgcGVyY2VudGFnZXMsIAojdGhlIGRpc3RhbmNlLCBhbmQgdGhlIHRvdGFsIGZyZXF1ZW5jaWVzCmxpYnMuZGYgPC0gbGlicy5kZiAlPiUgCiAgc2VsZWN0KCEoYyhkaXN0YW5jZV9tbSxUb3QuRW0uLFNpTzJfc3RkZXYsVGlPMl9zdGRldixBbDJPM19zdGRldixGZU9UX3N0ZGV2LAogICAgICAgICAgICAgTWdPX3N0ZGV2LE5hMk9fc3RkZXYsQ2FPX3N0ZGV2LEsyT19zdGRldixUb3RhbCkpKQojIENvbnZlcnQgdGhlIHBvaW50cyB0byBudW1lcmljCmxpYnMuZGYkcG9pbnQgPC0gYXMubnVtZXJpYyhsaWJzLmRmJHBvaW50KQpsaWJzLmRmWyw2OjEzXSA8LSBzYXBwbHkobGlicy5kZlssNjoxM10sYXMubnVtZXJpYykKI3JlbW92ZSB0aGUgc2NjdC9yZWZlcmVuY2Ugc2FtcGxlcwpsaWJzLmRmPC1saWJzLmRmJT4lCiAgZmlsdGVyKCEoZ3JlcGwoInNjY3QiLCB0YXJnZXQpKSkKI2FkZCBhIGNvbHVtbiB0byBpbmRpY2F0ZSB0aGUgbmVhcmVzdCBwaXhsCmxpYnMuZGY8LWNiaW5kKG5lYXJlc3RwaXhsPTAsbGlicy5kZikKI21ha2UgYSBkYXRhZnJhbWUgb2YganVzdCB0aGUgTElCUyBMYXQvTG9uZyBhbmQgdGFyZ2V0IG5hbWUgYW5kIHJlbW92ZSBkdXBsaWNhdGVzCmxpYnN0YXJnZXRzLmRmPC1saWJzLmRmWyxjKDEsMyw0LDUpXQpsaWJzdGFyZ2V0cy5kZjwtZGlzdGluY3QobGlic3RhcmdldHMuZGYpCmBgYAoKU2V0IG1ldGVycyBhbmQgY2hvc2VuIGFicmFzaW9uIHRvIGFjdCBhcyBhIHNsaWRlciBpbiB0aGUgMmQgYXBwLgpgYGB7cn0KI0Nob29zZSBtYXggZGlzdGFuY2UgdmFyaWFibGUgYmV0d2VlbiBQSVhMIGFuZCBMSUJTIGRhdGEKbWV0ZXJzID0gMTAwCiNDaG9vc2UgUElYTCBhYnJhc2lvbiB5b3Ugd2FudCB0byBsb29rIGF0CmFicmFzaW9uX25hbWUgPSAiQmVycnkgSG9sbG93IgpgYGAKCk5leHQsIHdlIGxvYWQgaW4gdGhlIFBJWEwgZGF0YS4gV2UgcmVtb3ZlIHRoZSBhdG1vc3BoZXJpYyBzYW1wbGUgYW5kIG9ubHkgc2VsZWN0IG9uZSBQSVhMIHNhbXBsZSBvZiBlYWNoIGFicmFzaW9uLgpgYGB7ciwgZGF0YTAyfQojcmVhZCBpbiBwaXhsIGRhdGEgd2l0aCBsYXQvbG9uZwpwaXhsLmRmPC1yZWFkUkRTKCIvYWNhZGVtaWNzL01BVFAtNDkxMC1GMjQvREFSLU1hcnMtRjI0L1N0dWRlbnREYXRhL3BpeGxfc29sX2Nvb3JkaW5hdGVzLlJkcyIpCiNpbmNsdWRlIG9ubHkgcGl4bCBtZXRhZGF0YQpwaXhsLmRmPC1waXhsLmRmICU+JQogIHNlbGVjdChjKDEsMiwxOSwyMCwyMikpCiNjb252ZXJ0IExhdC9Mb25nIHRvIG51bWVyaWMKcGl4bC5kZiRMYXQgPC0gYXMubnVtZXJpYyhwaXhsLmRmJExhdCkKcGl4bC5kZiRMb25nIDwtIGFzLm51bWVyaWMocGl4bC5kZiRMb25nKQojcmVtb3ZlIHJvd3Mgc28gd2Ugb25seSBoYXZlIG9uZSBzYW1wbGUgcGVyIGFicmFzaW9uIGFuZCByZW1vdmUgYXRtb3NwaGVyaWMgc2FtcGxlCnBpeGwuZGY8LXBpeGwuZGZbYygyLDQsNiw4LDEwLDEyLDE0LDE2KSxdCmBgYAoKTmV4dCwgd2Ugd2lsbCBpbml0aWFsaXplIGEgZGlzdGFuY2UgdmFyaWFibGUgKHRvIGluZGljYXRlIGRpc3RhbmNlIGJldHdlZW4gUElYTCBhYnJhc2lvbiBhbmQgTElCUyB0YXJnZXQpIGFuZCBhbHNvIGluaXRpYWxpemUgZWFjaCBQSVhMIGFicmFzaW9uLCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gbWFyayB3aGljaCBQSVhMIGFicmFzaW9uIHRoZSBMSUJTIHNhbXBsZSBpcyBjbG9zZXN0IHRvIGJ5IHVzaW5nIGEgZmFjdG9yIG9mIDAgb3IgMS4gCmBgYHtyfQpsaWJzdGFyZ2V0cy5kZjwtY2JpbmQobGlic3RhcmdldHMuZGYsIkRpc3RhbmNlIj0wLCJCZWxsZWdyYWRlIj0wLCJEb3VyYmVzIj0wLCJRdWFydGllciI9MCwiQWxmYWxmYSI9MCwiVGhvcm50b25HYXAiPTAsIkJlcnJ5IEhvbGxvdyI9MCwiTm92YXJ1cHRhIj0wLCJVZ2FuaWsgSXNsYW5kIj0wKQpgYGAKClRoZSBkaXN0YW5jZSBmdW5jdGlvbiBiZWxvdyB3aWxsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIExJQlMgdGFyZ2V0IGFuZCBhbGwgdGhlIFBJWEwgYWJyYXNpb25zLCBhbmQgcGljayB0aGUgc21hbGxlc3QgZGlzdGFuY2UgdG8gcGljayB0aGUgY2xvZXN0IFBJWEwgYWJyYXNpb24gdG8gdGhhdCBMSUJTIHRhcmdldC4KYGBge3J9CmZvcihpIGluIDE6bnJvdyhsaWJzdGFyZ2V0cy5kZikpIHsKICAgIGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV08LWMoZGlzdEhhdmVyc2luZShwaXhsLmRmWzEsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzIsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzMsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzQsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzUsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzYsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzcsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzgsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSkKICAgIAogICAgbGlic3RhcmdldHMuZGZbaSwxXTwtd2hpY2gubWluKGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV0pCiAgICBsaWJzdGFyZ2V0cy5kZltpLDVdPC1taW4obGlic3RhcmdldHMuZGZbaSxjKDY6MTMpXSkKfQpsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bDwtYXMuZmFjdG9yKGxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsKQpsZXZlbHMobGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGwpPC0oYygiQmVsbGVncmFkZSIsIkRvdXJiZXMiLCJRdWFydGllciIsIkFsZmFsZmEiLCJUaG9ybnRvbkdhcCIsIkJlcnJ5IEhvbGxvdyIsIk5vdmFydXB0YSIsIlVnYW5payBJc2xhbmQiKSkKYGBgCgpCZWxvdyBpcyBhbm90aGVyIGluaXRpYWxpemVyIGZvciB0aGUgUElYTCBhYnJhc2lvbiBkYXRhLiBUaGlzIHNldHMgdGhlIHZhcmlhYmxlcyBmb3IgZWFjaCBQSVhMIGFicmFzaW9uLgpgYGB7cn0KQmVsbGVncmFkZTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJCZWxsZWdyYWRlIixdJHRhcmdldApEb3VyYmVzPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkRvdXJiZXMiLF0kdGFyZ2V0ClF1YXJ0aWVyPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlF1YXJ0aWVyIixdJHRhcmdldApBbGZhbGZhPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkFsZmFsZmEiLF0kdGFyZ2V0ClRob3JudG9uR2FwPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlRob3JudG9uR2FwIixdJHRhcmdldApCZXJyeUhvbGxvdzwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJCZXJyeSBIb2xsb3ciLF0kdGFyZ2V0Ck5vdmFydXB0YTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJOb3ZhcnVwdGEiLF0kdGFyZ2V0ClVnYW5pa0lzbGFuZDwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJVZ2FuaWsgSXNsYW5kIixdJHRhcmdldApgYGAKCk5leHQsIHdlIGZpbHRlciBvdXQgdGhlIExJQlMgdGFyZ2V0cyB0aGF0IGFyZSBub3Qgd2l0aGluIHRoZSBzcGVjaWZpZWQgZGlzdGFuY2UgdmFyaWFibGUuIFRoZW4sIHdlIG1lcmdlIHRoZSBMSUJTIGRhdGEgd2l0aCB0aGUgcmVzcGVjdGl2ZSBQSVhMIGFicmFzaW9uIGJ5IG11dGF0aW5nIGFuZCBhZGRpbmcgYW4gYWJyYXNpb24gY29sdW1uIHRoYXQgaGFzIHRoZSBhYnJhc2lvbiBuYW1lIGNsb3Nlc3QgdG8gZWFjaCBMSUJTIHRhcmdldC4gV2UgYWxzbyBhZGQgYSBjb2x1bW4sIExJQlMgb3IgUElYTCwgd2hpY2ggZGVub3RlcyBpZiB0aGUgcm93IG9mIGRhdGEgaXMgZnJvbSB0aGUgUElYTCBhbmQgTElCUyBkYXRhIHNldHMuCmBgYHtyfQppbmNsdWRlZC5saWJzPC0obGlic3RhcmdldHMuZGYlPiUKICBmaWx0ZXIoRGlzdGFuY2U8bWV0ZXJzKSkkdGFyZ2V0CmxpYnMubWF0cml4IDwtbGlicy5kZiAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgaW5jbHVkZWQubGlicykKbGlicy5tYXRyaXggPC0gbGlicy5tYXRyaXhbLGMoNSw3OjE0KV0KbGlicy5tYXRyaXg8LWxpYnMubWF0cml4WyxjKDE6Miw0OjksMyldCmxpYnMubWF0cml4PC1jYmluZCgiQWJyYXNpb24iPTAsbGlicy5tYXRyaXgpCmxpYnMubWF0cml4PC1saWJzLm1hdHJpeCU+JQogIG11dGF0ZShBYnJhc2lvbiA9IGlmZWxzZSh0YXJnZXQlaW4lQWxmYWxmYSwiQWxmYWxmYSIsIAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBCZWxsZWdyYWRlLCAiQmVsZWdyYWRlIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgQmVycnlIb2xsb3csICJCZXJyeSBIb2xsb3ciLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBEb3VyYmVzLCAiRG91cmJlcyIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIE5vdmFydXB0YSwgIk5vdmFydXB0YSIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFF1YXJ0aWVyLCAiUXVhcnRpZXIiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBUaG9ybnRvbkdhcCwgIlRob3JudG9uR2FwIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgVWdhbmlrSXNsYW5kLCAiVWdhbmlrIElzbGFuZCIsQWJyYXNpb24pKSkpKSkpKSkKbGlicy5tYXRyaXg8LWNiaW5kKGxpYnNvcnBpeGw9MSxsaWJzLm1hdHJpeCkKYGBgCgpOZXh0LCB3ZSB3aWxsIHJlYWQgaW4gdGhlIFBJWEwgZGF0YS4gV2Ugd2lsbCByZW1vdmUgdGhlIGF0bW9zcGhlcmljIHNhbXBsZSAoZmlyc3Qgc2FtcGxlKSBhbmQgb25seSBjaG9vc2Ugb25lIG9mIGVhY2ggUElYTCBzYW1wbGUgaW4gYXMgZWFjaCBhYnJhc2lvbiBoYXMgdHdvIHNhbXBsZXMgKG9ubHkgb25lIHdpbGwgYmUgbmVjZXNzYXJ5IGZvciB0aGUgcGxvdCkuCgpgYGB7ciwgZGF0YTAzfQojcmVhZCBpbiBwaXhsIGRhdGEgd2l0aCBsYXQvbG9uZwpwaXhsLmRmPC1yZWFkUkRTKCIvYWNhZGVtaWNzL01BVFAtNDkxMC1GMjQvREFSLU1hcnMtRjI0L1N0dWRlbnREYXRhL3BpeGxfc29sX2Nvb3JkaW5hdGVzLlJkcyIpCnBpeGwuZGY8LXBpeGwuZGYgJT4lCiAgc2VsZWN0KGMoNTo4LDEyOjE0LDE3LDE5LDE4LDIyKSkKI3Jlb3JkZXIgcGl4bCBjb2x1bW5zIHNvIHRoYXQgaXQgbWF0Y2hlcyBsaWJzIGRhdGEgb3JnYW5pemF0aW9uCnBpeGwuZGY8LXBpeGwuZGZbLGMoMTEsMTAsNCwzLDgsMiw2LDEsNSw3KV0KI3JlbW92ZSBhdG1vc3BoZXJpYyBzYW1wbGUKcGl4bC5kZjwtcGl4bC5kZlsyOjE2LF0KcGl4bC5kZjwtY2JpbmQobGlic29ycGl4bD0wLHBpeGwuZGYpCmBgYAoKRmluYWxseSwgd2UgbWVyZ2UgdGhlIExJQlMgYW5kIFBJWEwgZGF0YSBzZXRzIHdlIGhhdmUgbW9kaWZpZWQgdGh1cyBmYXIgZm9yIGEgY29tYmluZWQgTElCUyBhbmQgUElYTCBkYXRhIGZyYW1lIHN1aXRhYmxlIGZvciBhIHNvaWwgY29tcG9zaXRpb24gbGluZSBwbG90LgpgYGB7cn0KY29sbmFtZXMocGl4bC5kZik8LWNvbG5hbWVzKGxpYnMubWF0cml4KQpwaXhsbGlicy5kZjwtcmJpbmQocGl4bC5kZixsaWJzLm1hdHJpeCkKYGBgCgojIyA0LjIgQ29udHJpYnV0aW9uCgpTb21lIG9mIHRoZSBkYXRhIG1hbmlwdWxhdGluZyB3b3JrIHdhcyBNYXJnbydzLCBzdWNoIGFzIHRoZSBkaXN0YW5jZSBmdW5jdGlvbi4gSW4gdGVybXMgb2YgcGl2b3RpbmcgdGhlIGRhdGEgZnJhbWUgYW5kIHRoZSBvdGhlciBzdGVwcyBvZiB0aGUgcHJlcHJvY2Vzc2luZyBpcyBteSBvd24gd29yay4gVGhlIG1hbmlwdWxhdGluZyBiZWxvdyB0byBwbG90IHRoZSBsaW5lIHNvaWwgY29tcG9zaXRpb24gcGxvdHMgaXMgbXkgb3duLgoKIyMgNC4zIE1ldGhvZHMgRGVzY3JpcHRpb24gCgpXaGVuIGRlY2lkaW5nIGhvdyB0byBhcHByb2FjaCB0aGUgY29uY2VwdCBvZiBidWlsZGluZyBzb2lsIGNvbXBvc2l0aW9uIHBsb3RzIG9mIGVhY2ggUElYTCBhYnJhc2lvbiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTElCUyB0YXJnZXRzIHdpdGhpbiBhIGNlcnRhaW4gZGlzdGFuY2UgbWF4aW11bSwgSSBkZWNpZGVkIHRoZSBiZXN0IHdheSB3YXMgdG8gc3RhcnQgd2l0aCB0aGUgb3JpZ2luYWwgZGF0YSBzZXRzIGFuZCBtb2RpZnkgdGhlbSBhcyBuZWVkZWQuIEZvciB0aGUgYWN0dWFsIHBsb3QsIHRoZSBiZXN0IHdheSB0byBmb3JtYXQgdGhlIGRhdGEgY29ycmVjdGx5IGlzIHRvIHBpdm90IGl0LCBhcyBJIG5lZWQgdGhlIHggYXhpcyB0byBiZSB0aGUgY29sdW1uIG5hbWVzIGluIHRoZSBjdXJyZW50IGRhdGEgZnJhbWUgd2UgaGF2ZSAoU2lPMiBhbmQgb3RoZXIgY29tcG9zaXRpb25zKSBhbmQgdGhlIHkgYXhpcyB0byBiZSB0aGUgd2VpZ2h0ZWQgY29tcG9zaXRpb24gdmFsdWVzLiBXZSBhbHNvIG5lZWQgYW4gaW5kaWNhdG9yIG9mIGlmIHRoZSBkYXRhIGlzIGZyb20gUElYTCBvciBMSUJTLCB3aGljaCBhbHNvIGlzIGhlbHBmdWwgZm9yIGJ1aWxkaW5nIHRoZSBsaW5lIHBsb3RzLiAKClVzZXJzIHdpbGwgaGF2ZSB0byBzZXQgdGhlIGRpc3RhbmNlIHZhcmlhYmxlIGluIG9yZGVyIHRvIGNob29zZSB0aGUgbWF4IGRpc3RhbmNlIGJldHdlZW4gUElYTCBhYnJhc2lvbnMgYW5kIExJQlMgdGFyZ2V0cy4gVGhpcyBjYW4gdmFzdGx5IGNoYW5nZSB0aGUgbnVtYmVyIG9mIGxpbmVzIG9uIHRoZSBwbG90cyB3aGljaCBjYW4gaGVscCBwcmV2ZW50IG92ZXJjcm93ZGVkIHBsb3RzLiBVc2VycyBhbHNvIGNhbiBzZXQgYSB2YXJpYWJsZSB0byBjaG9vc2UgYSBzcGVjaWZpYyBQSVhMIGFicmFzaW9uIGFuZCBjb3JyZXNwb25kaW5nIExJQlMgdGFyZ2V0cywgd2hpY2ggaXMgZWFzaWVyIHRvIGludGVycHJldCBhcyBwbG90dGluZyBhbGwgb2YgdGhlIExJQlMgYW5kIFBJWEwgY29tcG9zaXRpb24gaW5mb3JtYXRpb24gb24gbGluZSBwbG90cyBsZWFkcyB0byB2ZXJ5IGNvbmRlbnNlZCBncmFwaHMgdGhhdCBhcmUgaGFyZCB0byByZWFkLgoKIyMgNC40IFJlc3VsdCBhbmQgRGlzY3Vzc2lvbiAKCkZpcnN0LCB3ZSB3aWxsIHR1cm4gdGhlIGVhcnRoIHF1YXJ0aWxlIGluZm9ybWF0aW9uIGludG8gYSBsb25nIGRhdGEgZnJhbWUgKG1lYW5pbmcgcGl2b3RpbmcgdGhlIGNvbHVtbnMgaW50byB0aGUgdmFsdWVzKS4gCmBgYHtyfQojIEVhcnRoIHF1YXJ0aWxlcwplYXJ0aHF1YXJ0aWxlc19sb25nIDwtIGVhcnRocXVhcnRpbGVzLmRmICU+JQogIHBpdm90X2xvbmdlcihjb2xzID0gc3RhcnRzX3dpdGgoIlNpTzIiKTpsYXN0X2NvbCgpLCBuYW1lc190byA9ICJDb21wb3VuZCIsIHZhbHVlc190byA9ICJQZXJjZW50YWdlIikKCmVhcnRocXVhcnRpbGVzX2xvbmcgPC0gZWFydGhxdWFydGlsZXNfbG9uZyAlPiUgcmVuYW1lKFF1YXJ0aWxlcyA9IGBUcmFpbmluZyBzZXQgUXVhcnRpbGVzYCkKYGBgCgpUaGVuLCB0aGUgZGF0YSB3aWxsIGJlIGZpbHRlcmVkIHRvIG9ubHkgaW5jbHVkZSB0aGUgZGF0YSBmcm9tIGEgc3BlY2lmaWMgUElYTCBhYnJhc2lvbiBjaG9zZW4gYnkgdGhlIHVzZXIuIFRoZSBkYXRhIGlzIHBpdm90ZWQgaW50byBhIGxvbmcgZm9ybWF0LCBhbmQgdGhlIGNvbHVtbnMgYXJlIHJlb3JkZXJlZCB0byBtaW1pYyBzaW1pbGFyIHBsb3RzIGZyb20gTkFTQSBwYXBlcnMuCmBgYHtyfQojIEZpbHRlciBmb3IgdGhlIHNwZWNpZmljIGFicmFzaW9uIHNhbXBsZSwgZS5nLiwgIkFsZmFsZmEiCnBpeGxsaWJzX2ZpbHRlcmVkIDwtIHBpeGxsaWJzLmRmICU+JQogIGZpbHRlcihBYnJhc2lvbiA9PSBhYnJhc2lvbl9uYW1lKQoKIyBQaXZvdCB0aGUgZGF0YSB0byBsb25nZXIgZm9ybWF0IGZvciBnZ3Bsb3QKcGl4bGxpYnNfbG9uZyA8LSBwaXhsbGlic19maWx0ZXJlZCAlPiUKICBwaXZvdF9sb25nZXIoY29scyA9IHN0YXJ0c193aXRoKCJTaU8yIik6bGFzdF9jb2woKSwgbmFtZXNfdG8gPSAiQ29tcG91bmQiLCB2YWx1ZXNfdG8gPSAiUGVyY2VudGFnZSIpCgpkZXNpcmVkX29yZGVyIDwtIGMoIlNpTzIiLCAiQWwyTzMiLCAiRmVPVCIsICJNZ08iLCAiQ2FPIiwgIk5hMk8iLCAiSzJPIiwgIlRpTzIiKSAgIyBTcGVjaWZ5IHlvdXIgY3VzdG9tIG9yZGVyIGhlcmUKcGl4bGxpYnNfbG9uZyRDb21wb3VuZCA8LSBmYWN0b3IocGl4bGxpYnNfbG9uZyRDb21wb3VuZCwgbGV2ZWxzID0gZGVzaXJlZF9vcmRlcikKYGBgCgpGb3IgdGhlIHBsb3QsIHdlIHVzZSBnZ3Bsb3QgdG8gcGxvdCB0aGUgcGl4bGxpYnNfbG9uZyBkYXRhIGZyYW1lIHdlIGNyZWF0ZWQuIFRoZSBwbG90IGlzIGNvbG9yZWQgYnkgaWYgdGhlIGxpbmUgaXMgYSBQSVhMIGFicmFzaW9uJ3MgY29tcG9zaXRpb24gb3IgYSBMSUJTIHRhcmdldCdzIGNvbXBvc2l0aW9uLiBXZSBhbHNvIGFkZCBhIGxheWVyIHdpdGggdGhlIGVhcnRoIHF1YXJ0aWxlIGluZm9ybWF0aW9uLCB3aGljaCBpcyB0aGUgZG90dGVkIGxpbmVzLgpgYGB7cn0KIyBNYXAgdGhlIFBJWEwvTElCUyBjb2x1bW4gdG8gY29sb3IgYW5kIHVzZSB0YXJnZXRfbmFtZSB0byBkaWZmZXJlbnRpYXRlIGxpbmVzCmdncGxvdChwaXhsbGlic19sb25nLCBhZXMoeCA9IENvbXBvdW5kLCB5ID0gUGVyY2VudGFnZSwgY29sb3IgPSBhcy5mYWN0b3IobGlic29ycGl4bCksIGdyb3VwID0gdGFyZ2V0KSkgKwogIGdlb21fbGluZSgpICsKICBnZW9tX3BvaW50KCkgKwogIHNjYWxlX3lfY29udGludW91cyh0cmFucz0nbG9nMTAnKSArCiAgIyBBZGQgRWFydGggcXVhcnRpbGUgbGluZXMgdXNpbmcgZWFydGhxdWFydGlsZXNfbG9uZwogIGdlb21fbGluZShkYXRhID0gZWFydGhxdWFydGlsZXNfbG9uZywgYWVzKHggPSBDb21wb3VuZCwgeSA9IFBlcmNlbnRhZ2UsIGxpbmV0eXBlID0gUXVhcnRpbGVzLCBncm91cCA9IFF1YXJ0aWxlcyksIAogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGxpbmV0eXBlID0gImRvdHRlZCIpICsKICBsYWJzKHRpdGxlID0gcGFzdGUoIlNvaWwgQ29tcG9zaXRpb24gZm9yIFBJWEwgYWJyYXNpb24iLGFicmFzaW9uX25hbWUsImFuZCBMSUJTIHdpdGhpbiIsIG1ldGVycywgIm1ldGVycyIsIHNlcCA9ICIgIiksCiAgICAgICB4ID0gIkNoZW1pY2FsIENvbXBvdW5kIiwKICAgICAgIHkgPSAiV2VpZ2h0IFBlcmNlbnRhZ2UiLAogICAgICAgY29sb3IgPSAiTWVhc3VyZW1lbnQgVHlwZSIsCiAgICAgICBsaW5ldHlwZSA9ICJFYXJ0aCBRdWFydGlsZXMiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIjAiID0gImJsdWUiLCAiMSIgPSAicmVkIiksIGxhYmVscyA9IGMoIlBJWEwiLCAiTElCUyIpKSArCiAgdGhlbWVfbWluaW1hbCgpCmBgYApJIHN0aWxsIHBsYW4gdG8gdXBkYXRlIGFuZCB0cnkgdXNpbmcgdGhlIGdncGxvdGxheSBmZWF0dXJlIHRvIGluY29ycG9yYXRlIGFsbCB0aGUgYWJyYXNpb25zIGFuZCBkYXRhIG9udG8gb25lIGdyaWQgb2YgbGluZSBwbG90cy4gSSBhbHNvIGFtIGdvaW5nIHRvIGFkZCBwbG90cyB3aGVyZSB0aGUgbWVhbiBpcyB0YWtlbiBvZiBhbGwgdGhlIExJQlMgdGFyZ2V0cyB0aGF0IGNvcnJlc3BvbmQgdG8gYSBQSVhMIGFicmFzaW9uIHNvIHRoZSBwbG90IHdpbGwgb25seSBoYXZlIG9uZSBMSUJTIGxpbmUgYW5kIG9uZSBQSVhMIGxpbmUgKGFsb25nIHdpdGggdGhlIHJlZmVyZW5jZXMpLCB0aGlzIGlzIGFsbCBqdXN0IGZvciB0aGUgZHJhZnQuIEkgYWxzbyBuZWVkIHRvIG9ubHkgYWRkIGNlcnRhaW4gcXVhcnRpbGUgaW5mb3JtYXRpb24gYW5kIGxhYmVsIHRoZW0sIHRoaXMgaXMganVzdCBhIHBsYWNlaG9sZGVyIG9mIHRoZSBwcmV2aW91cyBwbG90LiBBbHNvIG1heWJlIHdpbGwgYWRkIGluIFNDQ1QgdmFsdWVzIGFzIHJlZmVyZW5jZXMsIG5vdCBzdXJlIGlmIHRoZXkgYXJlIHN1cGVyIHJlbGV2YW50IG9yIGhvdyB0byBzb3J0IHRoZW0uCgojIyA0LjUgQ29uY2x1c2lvbnMgYW5kIEZ1dHVyZSBXb3JrClRoaXMgZmluZGluZyBjYW4gYmUgdXNlZCBieSBnZW9sb2dpc3RzIHRvIGFuYWx5emUgd2hhdCBkaWZmZXJlbnQgc29pbCBjb21wb3NpdGlvbnMgYXJvdW5kIGRpZmZlcmVudCBQSVhMIGFicmFzaW9ucyBjYW4gbWVhbiBmb3IgbGlmZSBvbiBNYXJzLiBGb3IgZXhhbXBsZSwgb3hpZGUgcHJlc2VuY2UgZG9lc24ndCBuZWNlc3NhcmlseSBpbmRpY2F0ZSBsaWZlLCBidXQgaXQgY291bGQgaW5kaWNhdGUgYmlvbG9naWNhbCBvciBjaGVtaWNhbCBsaWZlIHByb2Nlc3Nlcy4gRm9yIGV4YW1wbGUsIENhTyBjYW4gaW5kaWNhdGUgdGhlIHByZXNlbmNlIG9mIG9sZCBiaW9sb2dpY2FsIG1hdGVyaWFsIGxpa2Ugc2hlbGxzIG9yIGZvc3NpbHMuCi1BZGQgbW9yZSBhYm91dCBmdXR1cmUgd29yaywgbm90IHN1cmUgd2hhdCBlbHNlIHRvIGluY2x1ZGUKCiMgNS4wIEZpbmRpbmcgMzogQW5hbHl6aW5nIENhdGlvbiBDb21iaW5hdGlvbnMgdXNpbmcgTElCUyBhbmQgUElYTCBtYXRjaGVkIGRhdGEKVXNpbmcgdGhlIExJQlMgYW5kIFBJWEwgY29tYmluZWQgZGF0YSBzZXQsIHdlIGNyZWF0ZWQgYSB0ZXJuYXJ5IHBsb3QgdG8gc2hvdyB0aGUgZGlzdHJpYnV0aW9uIG9mIExJQlMgc2FtcGxlcyBzb3J0ZWQgYnkgd2hhdCBQSVhMIGFicmFzaW9uIHRoZXkgYXJlIGNsb3Nlc3QgdG8gKGJhc2VkIG9uIGEgY2hvc2VuIGRpc3RhbmNlIHZhcmlhYmxlKS4gTXVjaCBvZiB0aGUgZGF0YSBwcmVwcm9jZXNzaW5nIGlzIHNpbWlsYXIgdG8gRmluZGluZyAxIHdoaWNoIHdlIHdpbGwgcmVwZWF0IGhlcmUuIEhvd2V2ZXIsIHRoZSBnb2FsIGhlcmUgaXMgdG8gYW5hbHl6ZSBob3cgZGlmZmVyZW50IGdyb3VwcyBvZiBMSUJTIHNhbXBsZXMgKGNvbG9yZWQgYnkgbWF0Y2hpbmcgUElYTCBhYnJhc2lvbikgZGlmZmVyIGJ5IGNhdGlvbiBjb21wb3NpdGlvbi4KCiMjIDUuMSBEYXRhLCBDb2RlLCBhbmQgUmVzb3VyY2VzCkhlcmUgaXMgYSBsaXN0IGRhdGEgc2V0cywgY29kZXMsIHRoYXQgYXJlIHVzZWQgaW4geW91ciB3b3JrLiBBbG9uZyB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBVUkwgd2hlcmUgdGhleSBhcmUgbG9jYXRlZC4KCjEuIHBldGVyYy1maW5hbFByb2plY3RGMjQuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSBpcyB0aGlzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwN19EcmFmdEZpbmFsUHJvamVjdE5vdGVib29rL3BldGVyY19maW5hbFByb2plY3RGMjRfcm91Z2hkcmFmdC5SbWQpCgoyLiBzdXBlcmNhbV9saWJzX21vY19sb2MuUmRzIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBMSUJTIGRhdGEgZ2l2ZW4gdG8gb3VyIHJlc2VhcmNoIGdyb3VwLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9EYXRhL3N1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHMpCgoKRmlyc3QsIHdlIHNldCBhIGRpc3RhbmNlIHZhcmlhYmxlIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGEgc2xpZGVyIGJhciBpbiB0aGUgYXBwLiBDaGFuZ2luZyB0aGlzIHZhcmlhYmxlIHNldHMgdGhlIG1heGltdW0gZGlzdGFuY2UgYmV0d2VlbiBhIFBJWEwgdGFyZ2V0IGFuZCBMSUJTIHNhbXBsZSBmb3IgdGhlbSB0byBiZSBjbGFzc2lmaWVkIHRvZ2V0aGVyLgpgYGB7cn0KI3NldCBkaXN0YW5jZSB2YXJpYWJsZSB3aGljaCBjYW4gYmUgdXNlZCBhcyBhIHRvZ2dsZSB0b29sCmRpc3RhbmNlPTUwCmBgYAoKVG8gcHJlcGFyZSB0aGUgZGF0YSwgSSBzdGFydCBieSBsb2FkaW5nIGluIHRoZSBMSUJTIGRhdGEuIFRoZW4sIHdlIGRyb3AgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBjb2x1bW5zIGFuZCBzdW0gb2YgcGVyY2VudGFnZSBjb2x1bW5zIGxlYXZpbmcgdXMgd2l0aCBqdXN0IHRoZSB3ZWlnaHRlZCBjb21wb3NpdGlvbiBpbiB0ZXJtcyBvZiBudW1lcmljYWwgZGF0YS4gV2UgYWxzbyByZW1vdmUgdGhlIHNjY3QgdmFsdWVzLCBhcyB0aG9zZSB2YWx1ZXMgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGVhcnRoIHJlZmVyZW5jZSBzYW1wbGVzIHRoYXQgUGVyc2VydmVyYW5jZSBjYXJyaWVzIHdpdGggaXQuIFRoZXJlZm9yZSwgdGhleSB3aWxsIG5vdCBiZSB2ZXJ5IHJlbGV2YW50IHdoZW4gcGxvdHRpbmcgdGhlIExJQlMgZGF0YSBhcyB3ZSBhcmUgZm9jdXNlZCBvbiB0aGUgY2F0aW9uIGNvbWJpbmF0aW9ucyBhbmQgdGhlcmVmb3JlIG9ubHkgbmVlZCB0aGUgd2VpZ2h0ZWQgY29tcG9zaXRpb25zLgpgYGB7cn0KI0xvYWQgaW4gTElCUyBkYXRhCmxpYnMuZGYgPC0gcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9EYXRhL3N1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHMiKQojRHJvcCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGZlYXR1cmVzLCB0aGUgc3VtIG9mIHRoZSBwZXJjZW50YWdlcywgCiN0aGUgZGlzdGFuY2UsIGFuZCB0aGUgdG90YWwgZnJlcXVlbmNpZXMKbGlicy5kZiA8LSBsaWJzLmRmICU+JSAKICBzZWxlY3QoIShjKGRpc3RhbmNlX21tLFRvdC5FbS4sU2lPMl9zdGRldixUaU8yX3N0ZGV2LEFsMk8zX3N0ZGV2LEZlT1Rfc3RkZXYsCiAgICAgICAgICAgICBNZ09fc3RkZXYsTmEyT19zdGRldixDYU9fc3RkZXYsSzJPX3N0ZGV2LFRvdGFsKSkpCiMgQ29udmVydCB0aGUgcG9pbnRzIHRvIG51bWVyaWMKbGlicy5kZiRwb2ludCA8LSBhcy5udW1lcmljKGxpYnMuZGYkcG9pbnQpCmxpYnMuZGZbLDY6MTNdIDwtIHNhcHBseShsaWJzLmRmWyw2OjEzXSxhcy5udW1lcmljKQojcmVtb3ZlIHRoZSBzY2N0L3JlZmVyZW5jZSBzYW1wbGVzCmxpYnMuZGY8LWxpYnMuZGYlPiUKICBmaWx0ZXIoIShncmVwbCgic2NjdCIsIHRhcmdldCkpKQojYWRkIGEgY29sdW1uIHRvIGluZGljYXRlIHRoZSBuZWFyZXN0IHBpeGwKbGlicy5kZjwtY2JpbmQobmVhcmVzdHBpeGw9MCxsaWJzLmRmKQojbWFrZSBhIGRhdGFmcmFtZSBvZiBqdXN0IHRoZSBMSUJTIExhdC9Mb25nIGFuZCB0YXJnZXQgbmFtZSBhbmQgcmVtb3ZlIGR1cGxpY2F0ZXMKbGlic3RhcmdldHMuZGY8LWxpYnMuZGZbLGMoMSwzLDQsNSldCmxpYnN0YXJnZXRzLmRmPC1kaXN0aW5jdChsaWJzdGFyZ2V0cy5kZikKYGBgCgpMb2FkIGluIFBJWEwgZGF0YQpgYGB7cn0KI3JlYWQgaW4gcGl4bCBkYXRhIHdpdGggbGF0L2xvbmcKcGl4bC5kZjwtcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9TdHVkZW50RGF0YS9waXhsX3NvbF9jb29yZGluYXRlcy5SZHMiKQojaW5jbHVkZSBvbmx5IHBpeGwgbWV0YWRhdGEKcGl4bC5kZjwtcGl4bC5kZiAlPiUKICBzZWxlY3QoYygxLDIsMTksMjAsMjIpKQojY29udmVydCBMYXQvTG9uZyB0byBudW1lcmljCnBpeGwuZGYkTGF0IDwtIGFzLm51bWVyaWMocGl4bC5kZiRMYXQpCnBpeGwuZGYkTG9uZyA8LSBhcy5udW1lcmljKHBpeGwuZGYkTG9uZykKI3JlbW92ZSByb3dzIHNvIHdlIG9ubHkgaGF2ZSBvbmUgc2FtcGxlIHBlciBhYnJhc2lvbiBhbmQgcmVtb3ZlIGF0bW9zcGhlcmljIHNhbXBsZQpwaXhsLmRmPC1waXhsLmRmW2MoMiw0LDYsOCwxMCwxMiwxNCwxNiksXQpgYGAKCk5leHQsIHdlIHdpbGwgaW5pdGlhbGl6ZSBhIGRpc3RhbmNlIHZhcmlhYmxlICh0byBpbmRpY2F0ZSBkaXN0YW5jZSBiZXR3ZWVuIFBJWEwgYWJyYXNpb24gYW5kIExJQlMgdGFyZ2V0KSBhbmQgYWxzbyBpbml0aWFsaXplIGVhY2ggUElYTCBhYnJhc2lvbiwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1hcmsgd2hpY2ggUElYTCBhYnJhc2lvbiB0aGUgTElCUyBzYW1wbGUgaXMgY2xvc2VzdCB0byBieSB1c2luZyBhIGZhY3RvciBvZiAwIG9yIDEuIApgYGB7cn0KI0xJQlMgdGFyZ2V0IGRhdGEgZnJhbWUgd2l0aCBkaXN0YW5jZSB2YXJpYWJsZSBhcyB3ZWxsCmxpYnN0YXJnZXRzLmRmPC1jYmluZChsaWJzdGFyZ2V0cy5kZiwiRGlzdGFuY2UiPTAsIkJlbGxlZ3JhZGUiPTAsIkRvdXJiZXMiPTAsIlF1YXJ0aWVyIj0wLCJBbGZhbGZhIj0wLCJUaG9ybnRvbkdhcCI9MCwiQmVycnlIb2xsb3ciPTAsIk5vdmFydXB0YSI9MCwiVWdhbmlrSXNsYW5kIj0wKQpgYGAKClRoZSBkaXN0YW5jZSBmdW5jdGlvbiBiZWxvdyB3aWxsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIExJQlMgdGFyZ2V0IGFuZCBhbGwgdGhlIFBJWEwgYWJyYXNpb25zLCBhbmQgcGljayB0aGUgc21hbGxlc3QgZGlzdGFuY2UgdG8gcGljayB0aGUgY2xvc2VzdCBQSVhMIGFicmFzaW9uIHRvIHRoYXQgTElCUyB0YXJnZXQuCmBgYHtyfQojRGlzdGFuY2UgZnVuY3Rpb24KZm9yKGkgaW4gMTpucm93KGxpYnN0YXJnZXRzLmRmKSkgewogICAgbGlic3RhcmdldHMuZGZbaSxjKDY6MTMpXTwtYyhkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbMSxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbMixjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbMyxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNCxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNSxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNixjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNyxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbOCxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpKQogICAgCiAgICBsaWJzdGFyZ2V0cy5kZltpLDFdPC13aGljaC5taW4obGlic3RhcmdldHMuZGZbaSxjKDY6MTMpXSkKICAgIGxpYnN0YXJnZXRzLmRmW2ksNV08LW1pbihsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldKQp9CmxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPC1hcy5mYWN0b3IobGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGwpCmxldmVscyhsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bCk8LShjKCJCZWxsZWdyYWRlIiwiRG91cmJlcyIsIlF1YXJ0aWVyIiwiQWxmYWxmYSIsIlRob3JudG9uR2FwIiwiQmVycnlIb2xsb3ciLCJOb3ZhcnVwdGEiLCJVZ2FuaWtJc2xhbmQiKSkKYGBgCgpCZWxvdyBpcyBhbm90aGVyIGluaXRpYWxpemVyIGZvciB0aGUgUElYTCBhYnJhc2lvbiBkYXRhLiBUaGlzIHNldHMgdGhlIHZhcmlhYmxlcyBmb3IgZWFjaCBQSVhMIGFicmFzaW9uLgpgYGB7cn0KI1NldHMgZWFjaCBuZWFyZXN0IFBJWEwgdmFyaWFibGUgZm9yIGZ1dHVyZSB1c2UgaW4gZGVjaWRpbmcgd2hpY2ggdGFyZ2V0IGlzIGNsb3Nlc3QgdG8gYSBMSUJTIHNhbXBsZQpCZWxsZWdyYWRlPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkJlbGxlZ3JhZGUiLF0kdGFyZ2V0CkRvdXJiZXM8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iRG91cmJlcyIsXSR0YXJnZXQKUXVhcnRpZXI8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iUXVhcnRpZXIiLF0kdGFyZ2V0CkFsZmFsZmE8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQWxmYWxmYSIsXSR0YXJnZXQKVGhvcm50b25HYXA8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iVGhvcm50b25HYXAiLF0kdGFyZ2V0CkJlcnJ5SG9sbG93PC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkJlcnJ5SG9sbG93IixdJHRhcmdldApOb3ZhcnVwdGE8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iTm92YXJ1cHRhIixdJHRhcmdldApVZ2FuaWtJc2xhbmQ8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iVWdhbmlrSXNsYW5kIixdJHRhcmdldApgYGAKCk5leHQsIHdlIGZpbHRlciBvdXQgdGhlIExJQlMgdGFyZ2V0cyB0aGF0IGFyZSBub3Qgd2l0aGluIHRoZSBzcGVjaWZpZWQgZGlzdGFuY2UgdmFyaWFibGUuIFRoZW4sIHdlIG1lcmdlIHRoZSBMSUJTIGRhdGEgd2l0aCB0aGUgcmVzcGVjdGl2ZSBQSVhMIGFicmFzaW9uIGJ5IG11dGF0aW5nIGFuZCBhZGRpbmcgYW4gYWJyYXNpb24gY29sdW1uIHRoYXQgaGFzIHRoZSBhYnJhc2lvbiBuYW1lIGNsb3Nlc3QgdG8gZWFjaCBMSUJTIHRhcmdldC4gV2UgYWxzbyBhZGQgYSBjb2x1bW4sIExJQlMgb3IgUElYTCwgd2hpY2ggZGVub3RlcyBpZiB0aGUgcm93IG9mIGRhdGEgaXMgZnJvbSB0aGUgUElYTCBhbmQgTElCUyBkYXRhIHNldHMuIFdlIGFsc28gc2V0IHVwIHRoZSBsaWJzLnRlcm4gbWF0cml4IHdoaWNoIHdpbGwgCmBgYHtyfQppbmNsdWRlZC5saWJzPC0obGlic3RhcmdldHMuZGYlPiUKICBmaWx0ZXIoRGlzdGFuY2U8bWV0ZXJzKSkkdGFyZ2V0CmxpYnMubWF0cml4IDwtbGlicy5kZiAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgaW5jbHVkZWQubGlicykKI3NldCBMSUJTIG1hdHJpeCBhbmQgdGVybmFyeSBwbG90IGJ5IGFkZGluZyBpbiBjYXRpb24gY29tcG9uZW50cyBhbmQgbXV0YXRpbmcKbGlicy5tYXRyaXggPC0gbGlicy5tYXRyaXhbLGMoNSw3OjE0KV0KbGlicy50ZXJuIDwtIGFzLmRhdGEuZnJhbWUobGlicy5tYXRyaXgpICU+JQogIG11dGF0ZSh4PShTaU8yK0FsMk8zKS8xMDAseT0oRmVPVCtNZ08pLzEwMCx6PShDYU8rTmEyTytLMk8pLzEwMCkgJT4lCiAgc2VsZWN0KC1jKFNpTzIsQWwyTzMsRmVPVCxNZ08sQ2FPLE5hMk8sSzJPLFRpTzIpKQpsaWJzLnRlcm48LWNiaW5kKCJBYnJhc2lvbiI9MCxsaWJzLnRlcm4pCiNTZXQgd2hhdCBhYnJhc2lvbiBnb2VzIHdpdGggdGhlIHJlc3BlY3RpdmUgTElCUyBzYW1wbGUgaXQgbWF0Y2hlcyB3aXRoCmxpYnMudGVybjwtbGlicy50ZXJuJT4lCiAgbXV0YXRlKEFicmFzaW9uID0gaWZlbHNlKHRhcmdldCVpbiVBbGZhbGZhLCJBbGZhbGZhIiwgCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIEJlbGxlZ3JhZGUsICJCZWxlZ3JhZGUiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBCZXJyeUhvbGxvdywgIkJlcnJ5SG9sbG93IiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgRG91cmJlcywgIkRvdXJiZXMiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBOb3ZhcnVwdGEsICJOb3ZhcnVwdGEiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBRdWFydGllciwgIlF1YXJ0aWVyIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgVGhvcm50b25HYXAsICJUaG9ybnRvbkdhcCIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFVnYW5pa0lzbGFuZCwgIlVnYW5pa0lzbGFuZCIsQWJyYXNpb24pKSkpKSkpKSkKI3N1bW1hcnkgb2YgTElCUyBkYXRhIGluY2x1ZGluZyBkaXN0YW5jZSBwYXJhbWV0ZXIsIG51bWJlciBvZiBMSUJTIHRhcmdldHMsIGFuZCBudW1iZXIgb2YgTElCUyBwb2ludHMKa2FibGVkZjwtcmJpbmQoIkRpc3RhbmNlIChtKSI9bWV0ZXJzLCJUYXJnZXRzIj1sZW5ndGgoaW5jbHVkZWQubGlicyksIlBvaW50cyI9bnJvdyhsaWJzLnRlcm4pKQprYWJsZShrYWJsZWRmLCBjYXB0aW9uID0iTElCUyAjIG9mIFRhcmdldHMgYW5kIFBvaW50cyB3aXRoaW4gU3BlY2lmaWVkIERpc3RhbmNlIikKYGBgCgoKCiMjIDUuMiBDb250cmlidXRpb24KClRoaXMgd29yayB3YXMgYWxzbyBhIGNvbWJpbmF0aW9uIG9mIG1lIGFuZCBNYXJnby4gVGhlIGRhdGEgc2V0IGNyZWF0aW9uIHdhcyBib3RoIG9mIHVzIGluIG91ciBicmFpbnN0b3JtaW5nIGFzIHRoaXMgdXRpbGl6ZXMgdGhlIGRhdGEgc2V0IHdlIGNyZWF0ZWQgb2YgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBmb3IgUElYTC4KLSBBZGQgbW9yZSBoZXJlCi0gVmVyeSBzaW1pbGFyIHRvIG90aGVyIHR3byBzZWN0aW9ucyBhZGQgaW4gbGF0ZXIsIE1hcmdvIGFuZCBJIHdvcmtlZCBvbiBtb3N0IG9mIHRoaXMgdG9nZXRoZXIKCiMjIDUuMyBNZXRob2RzIERlc2NyaXB0aW9uIAoKLSBTdGFydGVkIHdpdGggZmlsdGVyaW5nIG9yaWdpbmFsIGRhdGEgdG8gZ2V0IHJpZCBvZiBTQ0NUIHZhbHVlcwotIHRoZW4gc2V0IHVwIHRlcm5hcnkgZGF0YSBmcmFtZSBieSBtdXRhdGluZyBieSBjYXRpb24gY29tcG9zaXRpb25zCi0gdGhlbiBtdXRhdGVkIHRvIG1ha2UgdGhlIFBJWEwgYWJyYXNpb25zIHRoZSBrZXksIHNvIHRoZSBMSUJTIHRhcmdldHMgYXJlIGNvbG9yZWQgYnkgdGhlIGNsb3Nlc3QgUElYTCBhYnJhc2lvbiwgY3JlYXRpbmcgYSBmb3JtIG9mIGNsdXN0ZXJzLgoKIyMgNS40IFJlc3VsdCBhbmQgRGlzY3Vzc2lvbiAKVXNpbmcgYWxsIG9mIHRoZSBtYW5pcHVsYXRpb24gZG9uZSBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB0ZXJuYXJ5IHBsb3QsIHdlIHRoZW4gcGxvdCB1c2luZyB0aGUgZ2d0ZXJuIGNvbW1hbmQuIFdlIHdpbGwgY29sb3IgYnkgYWJyYXNpb24gdG8gc2VlIHRoZSBkaXN0cmlidXRpb24gb2YgY29tcG9zaXRpb24gYmV0d2VlbiBkaWZmZXJlbnQgYWJyYXNpb25zLiBUaGlzIHNob3VsZCBoZWxwIHVzIGJlIGFibGUgdG8gZHJhdyBkaWZmZXJlbnQgY29uY2x1c2lvbnMgYWJvdXQgaG93IGFicmFzaW9ucyByZWxhdGUgb3IgZG9uJ3QgcmVsYXRlLiBUaGUgbWF4IGRpc3RhbmNlIGJldHdlZW4gdGhlIFBJWEwgdGFyZ2V0IGFuZCBMSUJTIHNhbXBsZSBjYW4gYmUgbW9kaWZpZWQgaG93ZXZlciBkZXNpcmVkLgpgYGB7cn0KZ2d0ZXJuKGxpYnMudGVybiwgZ2d0ZXJuOjphZXMoeD14LHk9eSx6PXopKSArCiAgZ2VvbV9wb2ludChkYXRhPWxpYnMudGVybixhZXMoY29sb3I9QWJyYXNpb24sYWxwaGE9MC41KSkgKyAKICB0aGVtZV9yZ2J3KCkgKyAKICBsYWJzKHRpdGxlPXBhc3RlKCJNYXJzIExJQlMgRGF0YSBXaXRoaW4iLGRpc3RhbmNlLCJtZXRlcnMgb2YgUElYTCIsc2VwPSIgIiksCiAgICAgICB4PSJTaStBbCIsCiAgICAgICB5PSJGZStNZyIsCiAgICAgICB6PSJDYStOYStLIikrdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJyaWdodCIpICsgCiAgZ3VpZGVzKGFscGhhPSJub25lIikKYGBgCgojIyA1LjUgQ29uY2x1c2lvbnMgYW5kIEZ1dHVyZSBXb3JrCkJhc2VkIG9uIHRoaXMgdGVybmFyeSBwbG90LCB3ZSBjYW4gc2VlIEFsZmFsZmEgYW5kIEJlbGVncmFkZSBhcmUgaGlnaGVyIGluIFNpK0FsIGFuZCBVZ2FuaWsgSXNsYW5kIGlzIGFuIG91dGxpZXIuIEFzIHRoaXMgd2FzIHRoZSBsYXN0IHBpZWNlIG9mIHRoZSBQSVhMIGRhdGEgaW4gdGhlIGRhdGEgc2V0IGFuZCBpdCB3YXMgbWlzc2luZyBhIHBhaXIgc2luY2UgZXZlcnkgb3RoZXIgYWJyYXNpb24gd2FzIG1hZGUgdXAgb2YgdHdvIHNhbXBsZXMsIGl0IGlzIGluY2x1ZGVkIGluIGhlcmUgYnV0IHVudGlsIHRoZSBkYXRhIHNldCBpcyB1cGRhdGVkIHRoZXJlIGlzIG5vdCBlbm91Z2ggY29udGV4dCB0byBleHBsYWluIHdoeSBpdCBpcyBzbyB2YXN0bHkgZGlmZmVyZW50LiBJIHdvdWxkIGFzc3VtZSBpdCBpcyBkdWUgdG8gaG93IHRoZSByb2JvdCBpcyB0cmF2ZWxpbmcgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgVWdhbmlrSXNsYW5kIGFicmFzaW9uIGlzIHZlcnkgZGlmZmVyZW50IHRoYW4gdGhlIG90aGVyIDcgYWJyYXNpb25zLgotIEZ1dHVyZSB3b3JrLCB3b3VsZCBpbmNsdWRlIG1vcmUgZGF0YSB0byBnYWluIGJyb2FkZXIgY29udGV4dAoKIyBCaWJsaW9ncmFwaHkKUHJvdmlkZSBhIGxpc3Rpbmcgb2YgcmVmZXJlbmNlcyBhbmQgb3RoZXIgc291cmNlcy4KCiogQW5hbHlzdCdzIE5vdGVib29rCiogTm90IHN1cmUgd2hhdCBlbHNlIGlzIHJlbGV2YW50LCBtb3N0IG9mIHdoYXQgSSB1c2VkIHdhcyBzaW1pbGFyIHRvIEFuYWx5c3QncyBOb3RlYm9vawoKIyBBcHBlbmRpeAoKKkluY2x1ZGUgaGVyZSB3aGF0ZXZlciB5b3UgdGhpbmsgaXMgcmVsZXZhbnQgdG8gc3VwcG9ydCB0aGUgbWFpbiBjb250ZW50IG9mIHlvdXIgbm90ZWJvb2suIEZvciBleGFtcGxlLCB5b3UgbWF5IGhhdmUgb25seSBpbmNsdWRlIGV4YW1wbGUgZmlndXJlcyBhYm92ZSBpbiB5b3VyIG1haW4gdGV4dCBidXQgaW5jbHVkZSBhZGRpdGlvbmFsIG9uZXMgaGVyZS4gT3IgeW91IG1heSBoYXZlIGRvbmUgYSBtb3JlIGV4dGVuc2l2ZSBpbnZlc3RpZ2F0aW9uLCBhbmQgd2FudCB0byBwdXQgbW9yZSByZXN1bHRzIGhlcmUgdG8gZG9jdW1lbnQgeW91ciB3b3JrIGluIHRoZSBzZW1lc3Rlci4gQmUgc3VyZSB0byBkaXZpZGUgYXBwZW5kaXggaW50byBhcHByb3ByaWF0ZSBzZWN0aW9ucyBhbmQgbWFrZSB0aGUgY29udGVudHMgY2xlYXIgdG8gdGhlIHJlYWRlciB1c2luZyBhcHByb2FjaGVzIGRpc2N1c3NlZCBhYm92ZS4gKiAKU2hvdWxkIEkgYWRkIG1vcmUgZXhhbXBsZXMgaGVyZSBvZiBzb2lsIGNvbXBvc2l0aW9uIHBsb3RzIG9mIGRpZmZlcmVudCBhYnJhc2lvbnM/IEkgYWxzbyBjb3VsZCBhZGQgaGVhdCBtYXAgYW5hbHlzaXMgdG8gdGhpcyBub3RlYm9vayBhcyBhIGZpbmRpbmcgYnV0IHdhc24ndCBzdXJlIGlmIGl0IHdhcyByZWFsbHkgcmVsZXZhbnQuCgo=
    diff --git a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.pdf b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.pdf index 0102c12272e94280d4037a16eea5a8c31b21e460..32e58befa4bf34c869a5370595bc18daf971eaee 100644 GIT binary patch delta 5787 zcmV;M7G&v`{uGt|6tFrq0XCC?9wD<_HSG@qd-AhOMRoxMXtlb|v&Kd)0|X@+{R)#o zEEBT}N}mb>HZYSx5Ga$>R6GT^vpes{lND7{e;2k{90jneJ>s}Y5OWrI(P&!0CO^ws z!U}F=WsUw7`X|qtR*zEH9!H_o$hJAtzyt_!;GOIM?NZQu(XF^{WJ+t7`uFA(aH{nw zw`vXessQz8b~^TaZavGZazSshcBw~KbtdPU0N5_6vsIf_w4ml62LHOeAiQPIQM;5k ze<%)Md&7Jfvmkag^F*m@<(ivBv@&Ig((7r&9md0OH0B|TT~}*{59cu3p)KNo#dbIf z0?xuf@3MlmLrb=@PG-N@u2+iueO)QwuQF+0IUc(#fDJFUtzT^4)|`7Ww?3CytKlmx z?YVwZT;qf#imxqlK;s&MTEr>sQjfS*e^#x$QoHFrD-?DN13(U~wp}$pP9_W76V_T^ zv3iv;nXV^Fa%egO&b*jKwy#-3%Y6Oz#p~(I$vL7wyBwd6L62`l-RKc;H@V8ID^U65 zbj+cgr;J)z@W~Adpr-`#^Akup3&dme*Oe zrZ=7C#JytBO?iN8$Ga>C1VzTPf6Fj->BJ5(N@*!5qd|LVYbhsSC_Akr{B0}oC%XiR z=B6y&_V-hsd#`u-*zr&k0} zk{hTDLaRH_nYY8?!hzBPn{khm$7SF0SySaR%41cXg1lSV;C^R1*=+d>K6d%BMGeXw zsj*9p+H-;LtjlFewK(hjf9wBTP$r|C4sU@B+Of}OL#kj$%8(n^+od@#Vmt~SQFB`k zsFbMWrf5T&DjM$+;vP!#?{_rUW{ywU8r@*l)>^PL5curNTGVZpql@c3L3o@L#XG6n zy_R@iRM-|chaPgPUq!vB-6%|5WCo|tlVW-YS z1M9VZ+qAHe9$rz_z;RxQlx*FjQqS*J@+f-YsFS7dSktA7%e1_z0%>|$S1W@SwQZS- zI;9DaqC{5#dSH9`f4V3e{eTXnRKaW>Zi+rHidg6Q&ANcOm`3LMw~tC>=VBrCi_OaL zkV}F3zSev~a$M63GAS(P)~aI0RI{WdG-KI9ms+YCRtpz;)2hjc5zNQ*+oELZqA{sd zDQsQHI!iDuAc$0i5{20D@6*Tu8ItnjE#||3c|Iv#b zHR$@(hoT~1Q=JdvMo&>;uxbclGmU1|=8}+^O4(zIb}*~=#!&em3ZQdAAVw6c9AoY+ z{P&9Xx{ksUfrP479TvP$O$1HOa}9&S zNP~3QNuh#hf4I?eYMDzd6=rKQ%jLvo`1NDem4N#-3|eJ6r$J#6|%ra z`W(Hte*w`HKbeR`q_W78X7c9Q^gTALw(0@SAv^XB!6p;#O#dqHJuzzuMGN0sdIPPF zx$9#PHFWdz0`ik+diKjZeiTDS?I@mw;sEK)n3-YZ^w%Ru-yk?dk@0)cb#s0 zqWW{kIn<*m_!xbf=@WmO!>qi!Z#E0@u1ec5u;slEIldiy^EBp;&wK!l9T%9QDEmR* z(z;fG-w4p@H{H5=mcH$+8hu0$FRp6Q&_$E0g1>?$bOk0ld^$wWvsBi4oR!8EmTNgF z&0Vej7$@o+s}aW=o~ZknhW+n+pw2_+bYh2M@rz}pu9+|(7UC(JdFrK~u0@@RtDK&$ zWcyW0O4<6x-H5P9AKH@99M~8glj{^Bx9x+^liXe*0sWKyUKs%_lNet#OL{%FXp5>@ zE!ByO0_aAKUY7kOVNTbYbn;2iTO@2_SM%Y`BDXp7T>9cfip}>jo9H?C$OBS5^KFRB zeyjqJvJkTchj{g0Y0q6_lYvwdv#MV|PXRcSK@cc^^3ETLW!c*g0J93`3wL+R;T8U5N_Pe}B)Ak}cV>=sLV0y&#CWTn=Yvo}JgFjL^ag zYlIV&qwvC65<&P71^#IgNhBLY7C9PWv@k{o{1Jwn85k1AM%-IrJl{BBf=jp&CMLcS zCKFzNih{JqO%j9&ObW8ZlY(3zObYTj4G6<%A&C`~B0m&XV?FYa(BWYacnwUVu+H#9 zVZGNZzV#_#QrG|{7Q+zqfcTn|2zWn1J}70gcEW)^J1fA_<^@ z=Rpc0XpKeq>a=hX*JcqBjA7()1#T&e0Dwfsz4b<92T>tZ_E0Tok@3Edd610=Nn;N| zpI8{El)wbggbZ8^WQiKwfJvmp8;XGsJb)GnBIFFMus;TSjE$#((aE>75RU?nnl~&n zZr*6_n7UcsF)zS_5fFnVV&t*shWOoJfig1=(GEQGh-{zKjQE~c(TUB`Hi|<;&n$9g zvra4^Kd_!bU~6X9SOu?I7RJIdjbm4TaNZ7Hz7*K%JC}YB?X3m`Ux-&*gYhysAEkGmVMB_Lu2= z00wis2@7q>_GhySe9qvxyrOUZhURZ<{xLM<0+xlqf6S}xRbp_a?}U<-*x@_{;CUewL~Pm|fZfqGTV$K|}yS)Z#P z)v-D_GtCWyG^)i}G!k}$&C-$rLWGNwz1e#sjgKJP7x#AK#R4x*s@dNq?eT8(Dh5Fe zII{^@9){s5OR{;l7`AsYTn^HI0cVrFw6IyPqqJmpi{bhgBRUC3BAuj#CAs9K({8sE zzJDn^Nd#)xU6KS)T(Humuv?7KpBT^@aS(Yx%YXn$M3S?rgM~WkFpb#17#3o1>R${KWaQACos7u#uvVB#2O7D5F*L+LzB4(?jO6T$mp*iVpkZ|Ha@b5V zA<7aQHX_VAZDr6Ma2V6OuON-dl)0Ef+(Ifqg(TZVvr7)@9}k}-7h`K@K|v*>?eJM+ z`z3cfOS%%#71h9*>s_Q5qtL*O7N1Vw6@ZqZbx4tQ89MN(SI;UwaFsB(>}E z+Ww;{1<1i=^2%E%2Hu~JBCP*tO5URE$+zA@!67(w;6bK;Ih^IP>(*Ncm57O5c=R7l zu_qF}@2$TO7t3AcAoX9ClIA4OZ4~UJY4H;Z!VbTs{_9c$Tzuw#u8-pem&quXJMDBU zn%*^azy0gqd?pZ)84`4wEvM7-N2t)Wp-uK#tx{K$`t9<6Le6g{vK%kfVNn;yuMdvj ze6J4oPrmuNm@mFLBBw5<)rGn)CSXx7$58rpRhJi4^=_f|7mLZ&>>6`A4iD$WWqmZ6 z6;o`$e<1OiPTiDsIUfx#H=cpUD8{&CdwYrdX5>*6PP{`o63uqhg@GpN*>VWOl`0#8wKOspEqKCLW92fP22N$eO-o zcl);b=VZ1&TTJdAA5JbWOF+e#o(bpG^<=gL;6eSqL|&Mdm$fj?sc{AEkw(9|BR8qE>XF6JeFXz)rg8etdIc!DJslZBFqr{nTc&9Sx` zVe6*T;&$@wa&}eBm)Fx`S*z-*nw9U=s9=7Jn_^UMnQMNUkK}v71a)xgBqM{4H$EP7 zx?>1G2qM!?SJ;kTcM*$SGic$Ag{iE z#;w1@>Gfy1)t5NEnqPm5)2k14CiYR72alW+?+Wt}`E1~;FU*4r(we)%d>kLvL$F_YZUCx zXX%1l0q}pRut!f4xa~?DF~jX9`;63onLbCTY`T-h@&>9E*KLn-U5$p*YSc&X<@qx` z(j@Dd_%I>`>6_07e^tG_@zU`Ru~6KQzKh~MB&oIe%x&e(T=P` zzB$+>st0ckw8Q@SAcJ>*dF>o>twVL=DaaT${LLmA>9g78PsguLhxHuysJMrJi?Sa6 zzAWY_)_dAL_BPafNTV|Oyw>*1(+*WW|3>gBO~W=FAH`dl(cX8_1z-@e?WVH~-4o~# z^&RBwqVo~Gdg|uqQRal~pYj!8t4Y~B?f-b|^W3(C9(47_Jgu!a?N9VJwKY#@2{)R! zZmoJawlMUt@gnX+C5he5f?mJqM$mXJdZH*_i)g&c=*0A2}T3-`6*%WB&y`R;%EX zfm9Q-=D35+1{;(pe!U#GZ-xO32LuvBmW-33t`monjRA*}jRJ>~jRUumjRbC@Dl;)M zGBGeXEig4FFfb=63NKA>WJFlMLt~$FHB`_XLM*FH!w6HlR*$De;w4zZ_H5`#_{)^>GWQm-jv>z(pFo& zU-hc0s;YV~t(Hn879tTWv0z2s#6Mvn=}y@D1FR(y5{ZNrD-jFk`)odW-PRdR$gk{JS@Nz zoPkSl78crtz$O6PkO*4=L3(H9$T&-PXAz?R$nA8NOmK|q46 zg`&6X_UI|!hSGT*ZonR&WwQJ3o4G&!tRZAF$X{f;y}zr^NN13jAiF_!gGdG0e+|+Z zX}1p@8eHP`{kbYK8D(xCKdB|VQNjB31xFTDZeNS^ErE+_sDWCjgL-HH(ix5J4^}m! znMV=KARD1G@1`Oa(MH=vMS!D&miPn#iB4Ko8q!TmkV4PvrPVaj9{sf3g&2TATKxto ziDBASsu56-v>+}?jL{OzAaF53f2%hqO)*7Fyn~d)G_9@%QHdE^T^I5av$WbKLKAbe z+|?jCF;A-<;!4H>t#*y*#UibClGMc#t#+5}#tN-=d==JcbqecLO2h_i((3fN>_H}D z3${UbpE$-Y5VIg=vFHARtKs?Psm`~Vtoz=r^tt#`s`SXdYq$g+2L#WE~sVdvEZf>f|@vJX@ROLby=nqea*9SVc0nm{Rflg}#bWo$9Ga3gS&!nf?A7)lM ZvTFYUY1EE=m+d|UAqY7NB_%~qMhgFn4>te+ delta 5774 zcmaiWS2P?9)UDA=v=Brm83co2%phv?UZO{jHp(zsv>2lIGJ5pRj1rwhm*~-ZjUHW) zged>_-?i?`eYt0yz1P}%orm+VA9mV3ZTdZJorEX=h7MunXfP8!ro{c%(x9&B10Wbw z!nln$d{q*_!C!O!4qiHvX%!p|(1;W-Y{{G1g_jtBpqMjJ5a^dV?v-os3J~7ft%O}|9g=5FQ zj~Pt3v_t(az>`#L_9pdB6Jel1@QuhzmH_FNyd8tKf-J20!K6X%P#YIcg8G5Wto;+$ zitEUpE&)Mew?)qxfgN&G4Bo<;5ZgEYDDyE%-2>CMT`uZsji*JI{*1`Tb0Ow0QU##mP z{c?-wp2cYOxZRx7Up4iBnta;%R;%bu=UC>6)`$W+r0VCHXNWYE0blJ5{AQFioTU#Z zNgm^BG?s`S!W|Fmm@~p!*lCmEo|_Q1?0SFhf8*hius<#^Q2use zi%A#ekH4Z>^Xq_AUs{~S6GQd%(a2DwPwuc@@}1w0uRdQ%YX-2L@%kL{9?C4#znuqOG1m8Mj4ng!0eC7#ow zitf91Lk4eDlSRm{SIgXevO8If=RK^-K@8xRmymZa`+5->Edl?#^Su36G_SSPRMm`~ z^mWb%zQbd1)I9Lge>ESyk#?>MR1(Kly-s?^$0T{G!JQ4V z>=_V%HCM>BJp=iu>IQ($a=raDD(Q?mPGJF$p9LBixFLDalxN^Qx)Ah=Po z8j~g$E77c>m^+25qFsc!m#pguG*68WLdg>8RarqPVFdZ~ir9-=d-HBn4Gzz{Wo2N! z=cgopn+6fdZM}ldTG9L@hIxn_S9th}slkY`4hT**X52hsmtGY%`z>6$(Mi|_-xGY- z%#+pbsKKjl=NgV}z@NtbprXj58^!V<9nYM^@j_VNL6TLODplr4gzQ^S)bP`&R5;C=_k=mI zJ0kO(8E6$5OVqVUpD6UjTf81YnK@PR%u?feah0-G|Eh8wa?a7x`0|I&fzK&A!E_~R zE_t8XSqrE%?--&tY~6>)IuMwMFRR?fd$OnnbyoiLq(2K~K{r2F$rp0AE6C%So*RHjr|&1uF*C4%HwM{ZLiy1Z>Y){~dH(dK3#fFU~8ECg_bCO79pof6dS)cqGTpZY6% zjh;HtLoQkLvSNQ|D15tKb~Q}8AUOExmyPg~nNB2+Dx^9pJ`*=06vvv{No8mwc9e z#L!xN0fm=sI_tuj@ma!F^_f8fLH;lA%MJ}{9vx5cV8(qLt(Nzu`#^D@p=5Wyr*m(O z>Xt?%{vP`xahm_JyPV1`+}E@)mk|Mq zKy#l|!|U(mW2tdHlS8B-qmgmVPD!Ir)6Ls2x_id)Vrysd?TPS(hwp+je#E(2M>_mL zpRhBcG=%+puL4EZ{ePA_>pE=mmY4G_2BoFwHFqLmoJW&_u0xI#E^!G%-lWOPzk5#6 zYZe@UhZM`F02ef)B}6?)s@XBN$^e5={*`>2TU z+-CwPWh+ zwyZ>VS7Qmbq>G~8|B|n$)BWjiPWB_658bkPAC+UYPiwM5M$w1M_0zTzTU8(aDpHsV zOo*Q%QsmuTdLEjn*i}%hh1g%++{PJ2}*-jx3mbM3}=+_O>8$ zR0UhkBG%};|FkSb#p)Zc|6rVF$^uM4$xC=kuD{@C2eV^)*`VaE@)=Q~MoPL#oc5eh z66D1z9|$n>-1oV;O-KZOAFfodBtP7IDl{oGe*aOnc(^xs)*3)aoD&;@G9laOF7a-) znZ%LBn~QyH#E+XIpkNh)R4tRc99552+;;*t0Oswfchfkxkpu`Zm@?S7w*wgiBs1*M z_n;b6PZwGbhp5C{^L&bAV2gelMJtCt@fY8W)|ce*Ot9)iGL)8luM+Tr(^!Q>&l*Mh zn}I1&Dm`gBRJAmUN~#y7nL-#4_g9~X6oN^2>k(=%W8wOeGq$hosm24%mhIOf7cDza&^JEV1RZ>NZHXFu9? zeEhm~&?1d(Ax$BY`%eAF9|!k|{VVxp>wyLn5(%R^Gt)`YuFh-nF*o@H(UGJbDE+L3 zR{-4400fxT(?NkqW~X#O)U$e%peL*UFSW6{a7?;OQ)R?{Y;Sw0%j#0Ar z0|n9UZEmZH!tkdm?2Y7*`{Yn{kK-SlE*rLE-(S?2b=ST9?Fh3N1%KjkK<(W``4k&L zAq&A^zQmnE1}*Ly&84x3pSk3ykCH96Vnay0TyJ6b;#maL<-rAi#M;bM2~nU5l|YoP zj)foQla-4zi(U$Nkn3P!D@t7-$=BJKk{E-ikg^_bRO^kqv<5%8>y%llsBawlg2{j7 zT6ieBWcGj3{=67<*H9=)xt)#P0Zg(kksADzeRee-fzK56ju)6ml~axKSh=Qvq#or` zq9KWA^^Al}8}`+Zl@SWD)Pq$+jU-7fwX%&CD$*p5bLhm;ru?78$k?2ePiddn3pabb z7O=v17uG#Qz4ODSab%MH6v|aD4}lB=rC`ck8|;?uX9{Vvhd{?OxvbkMi#V{PkAlf; zm!RmdJ1-z^C-ntq<2kCNeS)~-O>9D43Re@63HE@0 z#x|qes-*rF-1@;m6243M3D2?r8M$&xXjZIZ0NLI|NTlI^pOBZDQ_dA7M^{XQD?hB! z2K4IwlU|4|vu)#JnYk-3tyreouC)D-2LT2tyjrksX@B^F(g)B-wws6sg-+R)jO6;a z?`X~|uDU(kz;a3O6(WeU>|=+vZ?bfGmUKYJtUox-n4Ioci}i(Mrx1w}@=q7fQ1(aVf;jS!4#iJ<<*1CXER8E)OEZI6H_hK-i*1+U?!QrK(`;E<1&8@&9) z{ts88bwHNLa{(^r82e|Up3Su86-G|?m}g$b-Xo=_mrdh)?;LQVF8i4V)Z1T8N6MkC z>HMZAiiwGCK+qCO7Pa;5puhC*z*q6RF5frve=gj@QLTIjEwM}%tMrm=g8gtqhrL?u z@9TkrT8V<4*W#Gn^&B`Kf@>!})1E+OCKenPWIlJTY0~*IcI)~}>qpH=?!L3eVZ>pB zO}b_s-~ljzL2gRdUN}L%tojo6_Enj!bg)eG2Z34Gq_(o!k#a@(wEV9<95xx#>B?$Z z>C&iBb??y&#uder#08qww+4N$uJsFEmzFl`0dR8{ULe<*zswiing3`to(B%Ie-krAg;o>WZ{2 zhy0Eg2PAoBb!=5f_padV21~lDyCP|)=Zu0%eu~=3kKMf+%`hc3#jcaY1M!Xd60@?X zFW<{9HTsrqFTV7c-ezjA?RkTT2{->ORxr~yy!3z8OuMg^lb2G=6*Dcshy9J2Ae>hEEttNF%#b&*XSI zZviDmQBw^!?rS1ldNh*44N|o+g{VR?zZC*9#n+M9m{~>pf$5p=y>ixLNS$M;n-Ri8 ztP<-2_U}xZGPUXzLBpRt(z|Giev|-Wu$93?pyO205B0J&yZw6V24FvSNq-ZT8uU33B)8l6?OWaS*sR(rK~} z^dNGeE$O=#AMa>D`TgYQtX4#9HSYDeEqsiY+#fH?kjd?8XP$deo zMz}>3mdeH2;vNBbM1-#%l%ARaR>Gr+M8^aE1MYvoYeC23BZ`QGg++vfAVL|$LIlkJ zSG4d65k!;e$%!k+Aw?)mnqBh$dty#1s9}e2 z@N#5_2|?NaPw8Zt8BsUTr5!kLI=QN<+_^HjKC!N>ybjtG`ERBVF%VEF`v>+x_^XNM zHq>|2)Cy?!>_0@11ojWaPKL!F2)( zLc9Hnb-PcRC-@c5hdXzi7!Gov4ym0E#SK;mWX2b&3b=ZcsD zs!O*f{hb13mXKoiN2Z13?S(}C*7!<49%K6qTJwOucN}n?pK5K6rx1C(+Tv68wX#w69{y3nuR?X zY<2CJDNfHy`~8Oz+rHX{A#+9~T2?N7Aa5aBpG9~O0Z8iUV%D0M`;^VdOD_ml!dQYv z?EkF7JlFqWIc$XoEw|e{y2{s89Fj8FKg;=qqErYL$)}#eTPR%_%{G5;Me_aq`~`aU$ZpURbNR)|L>n=10T5}d@I z3f0O`KKl_}mRSN^lT)*aF;ot%=!aA%koiSFH3iWWMw^&^cS_31ES@DrK7X5Mh*7$< z2{GhTJ+MhO#Hjl`lgB)Hx_!Hq_?V9kj|?u1X|{rpiTN3AmN zzbV&uOU|A{KQ?tKI<3;Q!1V39KFa*j2P#U5OI7j?paoAbYJR`ol~$RJw>6dVj(c|A z>ZVZ|6j0_tYv~)^?g~Im_{VcXj>Sr{0T9BaJQD4uV|xdQoKFutya|>WN74iw#A2jC KprW=C>Hh!*CE_Xo

    5.1 3.1 Data, Code, and with brief description and URL where they are located.

    1. peterc-finalProjectF24.Rmd (with knit pdf and html) is this -notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc-finalProjectF24.Rmd

    2. +notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd

    3. v1_libs_to_sample.Rds is the combined data set of PIXL and LIBS that includes the distance from a PIXL abrasion to a LIBS sample.
      -https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds.

    4. +https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds.

    Firstly, we set the number of meters distance threshold between a PIXL abrasion and LIBS sample. Within the v1_libs_to_sample.Rds, which @@ -1707,7 +1707,7 @@