HONOR CODE
Integrity is a core value at WCU. All students must familiarize
themselves with the Student Academic Integrity Policy and pledge to
observe its provisions in all written and oral work. Please review WCU’s
Undergraduate Student Academic Integrity Policy and understand what
Honor Code violations might look like in this class.
This is a project-driven advanced topic course, all submitted work
must be yours. You are encouraged to collaborate with your classmates on
the course materials, but not the assignments! Here are some suggestions
on how to avoid academic dishonesty:
Read the instruction of each assignment carefully to understand
the specific requirements. In this semester, you will work on the same
topic on each weekly assignment but with different data sets. All
assignments must be completed independently. There will be NO group
project for this course.
Never share your assignments with others. If classmates have a
question, try to help them. Sharing your assignment with others will not
teach them anything and you might be accused of academic dishonesty
since I will check similarities between your submitted work.
If you paraphrase or summarize what someone else said or from
internet blogs and published papers, you must provide me the source and
make sure the write-up and code must be yours.
I will provide code for all analyses in the class notes. You can
use the algorithm and logic behind my code but try to avoid copying and
pasting my code and only change the name of the data. You are expected
to give meaningful names to R objects by yourself.
If you experience unusual circumstances and cannot meet the
deadline, please reach out to me to request an extension for an
assignment. Late work without prior arrangements can only receive up to
80% of the credit. Start working on your assignment earlier and Don’t
wait until the night before to begin an assignment.
Data Set
Description
This data set includes the percentage of protein
intake from different types of food in countries around the
world. The last couple of columns also includes counts of obesity and
COVID-19 cases as percentages of the total population for comparison
purposes.
Data can be found at kaggle.com.
I also upload this data set on the course web page w02-Protein_Supply_Quantity_Data.csv.
url="https://pengdsci.github.io/STA321/ww02/w02-Protein_Supply_Quantity_Data.csv"
protein = read.csv(url, header = TRUE)
names(protein)
[1] "Country" "AlcoholicBeverages" "AnimalProducts"
[4] "Animalfats" "CerealsExcludingBeer" "Eggs"
[7] "FishSeafood" "FruitsExcludingWine" "Meat"
[10] "MilkExcludingButter" "Offals" "Oilcrops"
[13] "Pulses" "Spices" "StarchyRoots"
[16] "Stimulants" "Treenuts" "VegetalProducts"
[19] "VegetableOils" "Vegetables" "Miscellaneous"
[22] "Obesity" "Confirmed" "Deaths"
[25] "Recovered" "Active" "Population"
Instruction of
Assignment for Week #2
Study the class note and make sure you understand the bootstrap
confidence interval.
Use the above code to read data in R. and explore the variables
in the data set. Choose a variable from the data set to construct
confidence intervals of the mean of that variable.
Please go to the D2L discussion Board to tell your class which
variable you will use for your assignment. If that variable has been
chosen by your classmates, then go back to the data set to choose other
variables. I want to make sure everybody will work on the different data
set. To go to discussion board: communications
=>Discussions
When you finish your analysis and write-up, go to D2L to submit
your work: Assessment => Assignments.
You MUST submit your RMarkdown and the URL of HTML format report
(published on either RPubs or GitHub) via D2L but Not
email!
Steps for publishing your HTML format report on RPubs
- Register an RPubs account (https://rpubs.com/)
- Stay singed in
- Knit you RMarkdown report to HTML format
- Click the RPubs publish icon

Assignment
Problems
Open an R Markdown document, please feel free to use the template
in my RMD for the class note.
Write a few sentences to describe the variable you are going to
use in your analysis.
Construct a confidence interval of the mean of the variable use
methods you learned in your previous courses. For example, MAT 125, STA
200, STA 319, and/or STA320.
Use the Bootstrap method introduced this week (see the class note
on the course web page) to construct the bootstrap confidence interval
for the mean of the selected variable.
Plot the bootstrap sampling distribution of the sample
mean.
Compare the two confidence intervals and interpret your findings
and interpret the intervals.
LS0tDQp0aXRsZTogJ1NUQTMyMTogV2VlayAjMDIgQXNzaWdubWVudCcNCmF1dGhvcjogJ0R1ZTogV2VkbmVzZGF5LCAxMTozMCBQTScNCmRhdGU6ICIiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIGZpZ193aWR0aDogNg0KICAgIGZpZ19oZWlnaHQ6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICB0aGVtZTogbHVtZW4NCiAgcGRmX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiAnNCcNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQpkaXYjVE9DIGxpIHsNCiAgICBsaXN0LXN0eWxlOnVwcGVyLXJvbWFuOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCn0NCg0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDIwcHg7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoMSB7IC8qIEhlYWRlciAxIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAyMnB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDIgeyAvKiBIZWFkZXIgMiAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoMyB7IC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNXB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmg0IHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCmBgYA0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCiMgY29kZSBjaHVuayBzcGVjaWZpZXMgd2hldGhlciB0aGUgUiBjb2RlLCB3YXJuaW5ncywgYW5kIG91dHB1dCANCiMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IGZpbGVzLg0KDQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikNCiAgIGxpYnJhcnkoa25pdHIpDQp9DQojDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsICAgICAgICAgICAgIyBpbmNsdWRlIGNvZGUgY2h1bmsgaW4gdGhlIG91dHB1dCBmaWxlDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgICAgICAgIyBzb21ldGltZXMsIHlvdSBjb2RlIG1heSBwcm9kdWNlIHdhcm5pbmcgbWVzc2FnZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB5b3UgY2FuIGNob29zZSB0byBpbmNsdWRlIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIGluDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgb3V0cHV0IGZpbGUuIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSAibWFya3VwIiwgICAgICMgeW91IGNhbiBhbHNvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIG91dHB1dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIG91dHB1dCBmaWxlLg0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gTkENCiAgICAgICAgICAgICAgICAgICAgICApICAgDQpgYGANCg0KDQojIEhPTk9SIENPREUNCg0KSW50ZWdyaXR5IGlzIGEgY29yZSB2YWx1ZSBhdCBXQ1UuIEFsbCBzdHVkZW50cyBtdXN0IGZhbWlsaWFyaXplIHRoZW1zZWx2ZXMgd2l0aCB0aGUgU3R1ZGVudCBBY2FkZW1pYyBJbnRlZ3JpdHkgUG9saWN5IGFuZCBwbGVkZ2UgdG8gb2JzZXJ2ZSBpdHMgcHJvdmlzaW9ucyBpbiBhbGwgd3JpdHRlbiBhbmQgb3JhbCB3b3JrLiBQbGVhc2UgcmV2aWV3IFtXQ1XigJlzIFVuZGVyZ3JhZHVhdGUgU3R1ZGVudCBBY2FkZW1pYyBJbnRlZ3JpdHkgUG9saWN5XShodHRwczovL2NhdGFsb2cud2N1cGEuZWR1L3VuZGVyZ3JhZHVhdGUvYWNhZGVtaWMtcG9saWNpZXMtcHJvY2VkdXJlcy9hY2FkZW1pYy1pbnRlZ3JpdHkvKSBhbmQgdW5kZXJzdGFuZCB3aGF0IEhvbm9yIENvZGUgdmlvbGF0aW9ucyBtaWdodCBsb29rIGxpa2UgaW4gdGhpcyBjbGFzcy4NCg0KVGhpcyBpcyBhIHByb2plY3QtZHJpdmVuIGFkdmFuY2VkIHRvcGljIGNvdXJzZSwgYWxsIHN1Ym1pdHRlZCB3b3JrIG11c3QgYmUgeW91cnMuIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBjb2xsYWJvcmF0ZSB3aXRoIHlvdXIgY2xhc3NtYXRlcyBvbiB0aGUgY291cnNlIG1hdGVyaWFscywgYnV0IG5vdCB0aGUgYXNzaWdubWVudHMhIEhlcmUgYXJlIHNvbWUgc3VnZ2VzdGlvbnMgb24gaG93IHRvIGF2b2lkIGFjYWRlbWljIGRpc2hvbmVzdHk6DQoNCiogUmVhZCB0aGUgaW5zdHJ1Y3Rpb24gb2YgZWFjaCBhc3NpZ25tZW50IGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyByZXF1aXJlbWVudHMuIEluIHRoaXMgc2VtZXN0ZXIsIHlvdSB3aWxsIHdvcmsgb24gdGhlIHNhbWUgdG9waWMgb24gZWFjaCB3ZWVrbHkgYXNzaWdubWVudCBidXQgd2l0aCBkaWZmZXJlbnQgZGF0YSBzZXRzLiBBbGwgYXNzaWdubWVudHMgbXVzdCBiZSBjb21wbGV0ZWQgaW5kZXBlbmRlbnRseS4gVGhlcmUgd2lsbCBiZSBOTyBncm91cCBwcm9qZWN0IGZvciB0aGlzIGNvdXJzZS4gDQoNCiogTmV2ZXIgc2hhcmUgeW91ciBhc3NpZ25tZW50cyB3aXRoIG90aGVycy4gSWYgY2xhc3NtYXRlcyBoYXZlIGEgcXVlc3Rpb24sIHRyeSB0byBoZWxwIHRoZW0uIFNoYXJpbmcgeW91ciBhc3NpZ25tZW50IHdpdGggb3RoZXJzIHdpbGwgbm90IHRlYWNoIHRoZW0gYW55dGhpbmcgYW5kIHlvdSBtaWdodCBiZSBhY2N1c2VkIG9mIGFjYWRlbWljIGRpc2hvbmVzdHkgc2luY2UgSSB3aWxsIGNoZWNrIHNpbWlsYXJpdGllcyBiZXR3ZWVuIHlvdXIgc3VibWl0dGVkIHdvcmsuDQoNCiogSWYgeW91IHBhcmFwaHJhc2Ugb3Igc3VtbWFyaXplIHdoYXQgc29tZW9uZSBlbHNlIHNhaWQgb3IgZnJvbSBpbnRlcm5ldCBibG9ncyBhbmQgcHVibGlzaGVkIHBhcGVycywgeW91IG11c3QgcHJvdmlkZSBtZSB0aGUgc291cmNlIGFuZCBtYWtlIHN1cmUgdGhlIHdyaXRlLXVwIGFuZCBjb2RlIG11c3QgYmUgeW91cnMuIA0KDQoqIEkgd2lsbCBwcm92aWRlIGNvZGUgZm9yIGFsbCBhbmFseXNlcyBpbiB0aGUgY2xhc3Mgbm90ZXMuIFlvdSBjYW4gdXNlIHRoZSBhbGdvcml0aG0gYW5kIGxvZ2ljIGJlaGluZCBteSBjb2RlIGJ1dCB0cnkgdG8gYXZvaWQgY29weWluZyBhbmQgcGFzdGluZyBteSBjb2RlIGFuZCBvbmx5IGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgZGF0YS4gWW91IGFyZSBleHBlY3RlZCB0byBnaXZlIG1lYW5pbmdmdWwgbmFtZXMgdG8gUiBvYmplY3RzIGJ5IHlvdXJzZWxmLg0KDQoqIElmIHlvdSBleHBlcmllbmNlIHVudXN1YWwgY2lyY3Vtc3RhbmNlcyBhbmQgY2Fubm90IG1lZXQgdGhlIGRlYWRsaW5lLCBwbGVhc2UgcmVhY2ggb3V0IHRvIG1lIHRvIHJlcXVlc3QgYW4gZXh0ZW5zaW9uIGZvciBhbiBhc3NpZ25tZW50LiBMYXRlIHdvcmsgd2l0aG91dCBwcmlvciBhcnJhbmdlbWVudHMgY2FuIG9ubHkgcmVjZWl2ZSB1cCB0byA4MCUgb2YgdGhlIGNyZWRpdC4gU3RhcnQgd29ya2luZyBvbiB5b3VyIGFzc2lnbm1lbnQgZWFybGllciBhbmQgRG9u4oCZdCB3YWl0IHVudGlsIHRoZSBuaWdodCBiZWZvcmUgdG8gYmVnaW4gYW4gYXNzaWdubWVudC4NCg0KDQojIERhdGEgU2V0IERlc2NyaXB0aW9uDQoNClRoaXMgZGF0YSBzZXQgaW5jbHVkZXMgdGhlICoqcGVyY2VudGFnZSBvZiBwcm90ZWluIGludGFrZSoqIGZyb20gZGlmZmVyZW50IHR5cGVzIG9mIGZvb2QgaW4gY291bnRyaWVzIGFyb3VuZCB0aGUgd29ybGQuIFRoZSBsYXN0IGNvdXBsZSBvZiBjb2x1bW5zIGFsc28gaW5jbHVkZXMgY291bnRzIG9mIG9iZXNpdHkgYW5kIENPVklELTE5IGNhc2VzIGFzIHBlcmNlbnRhZ2VzIG9mIHRoZSB0b3RhbCBwb3B1bGF0aW9uIGZvciBjb21wYXJpc29uIHB1cnBvc2VzLg0KDQoNCkRhdGEgY2FuIGJlIGZvdW5kIGF0IFtrYWdnbGUuY29tXShodHRwczovL3d3dy5rYWdnbGUuY29tL21hcmlhcmVuL2NvdmlkMTktaGVhbHRoeS1kaWV0LWRhdGFzZXQ/c2VsZWN0PVByb3RlaW5fU3VwcGx5X1F1YW50aXR5X0RhdGEuY3N2KS4gSSBhbHNvIHVwbG9hZCB0aGlzIGRhdGEgc2V0IG9uIHRoZSBjb3Vyc2Ugd2ViIHBhZ2UgW3cwMi1Qcm90ZWluX1N1cHBseV9RdWFudGl0eV9EYXRhLmNzdl0oaHR0cHM6Ly9wZW5nZHNjaS5naXRodWIuaW8vU1RBMzIxL3d3MDIvdzAyLVByb3RlaW5fU3VwcGx5X1F1YW50aXR5X0RhdGEuY3N2KS4NCg0KDQpgYGB7cn0NCnVybD0iaHR0cHM6Ly9wZW5nZHNjaS5naXRodWIuaW8vU1RBMzIxL3d3MDIvdzAyLVByb3RlaW5fU3VwcGx5X1F1YW50aXR5X0RhdGEuY3N2Ig0KcHJvdGVpbiA9IHJlYWQuY3N2KHVybCwgaGVhZGVyID0gVFJVRSkNCm5hbWVzKHByb3RlaW4pDQpgYGANCg0KDQojIEluc3RydWN0aW9uIG9mIEFzc2lnbm1lbnQgZm9yIFdlZWsgIzINCg0KKiBTdHVkeSB0aGUgY2xhc3Mgbm90ZSBhbmQgbWFrZSBzdXJlIHlvdSB1bmRlcnN0YW5kIHRoZSBib290c3RyYXAgY29uZmlkZW5jZSBpbnRlcnZhbC4NCg0KKiBVc2UgdGhlIGFib3ZlIGNvZGUgdG8gcmVhZCBkYXRhIGluIFIuIGFuZCBleHBsb3JlIHRoZSB2YXJpYWJsZXMgaW4gdGhlIGRhdGEgc2V0LiBDaG9vc2UgYSB2YXJpYWJsZSBmcm9tIHRoZSBkYXRhIHNldCB0byBjb25zdHJ1Y3QgY29uZmlkZW5jZSBpbnRlcnZhbHMgb2YgdGhlIG1lYW4gb2YgdGhhdCB2YXJpYWJsZS4NCg0KKiBQbGVhc2UgZ28gdG8gdGhlIEQyTCBkaXNjdXNzaW9uIEJvYXJkIHRvIHRlbGwgeW91ciBjbGFzcyB3aGljaCB2YXJpYWJsZSB5b3Ugd2lsbCB1c2UgZm9yIHlvdXIgYXNzaWdubWVudC4gSWYgdGhhdCB2YXJpYWJsZSBoYXMgYmVlbiBjaG9zZW4gYnkgeW91ciBjbGFzc21hdGVzLCB0aGVuIGdvIGJhY2sgdG8gdGhlIGRhdGEgc2V0IHRvIGNob29zZSBvdGhlciB2YXJpYWJsZXMuIEkgd2FudCB0byBtYWtlIHN1cmUgZXZlcnlib2R5IHdpbGwgd29yayBvbiB0aGUgZGlmZmVyZW50IGRhdGEgc2V0LiBUbyBnbyB0byBkaXNjdXNzaW9uIGJvYXJkOiAqKmNvbW11bmljYXRpb25zID0+RGlzY3Vzc2lvbnMqKg0KDQoqIFdoZW4geW91IGZpbmlzaCB5b3VyIGFuYWx5c2lzIGFuZCB3cml0ZS11cCwgZ28gdG8gRDJMIHRvIHN1Ym1pdCB5b3VyIHdvcms6ICoqQXNzZXNzbWVudCA9PiBBc3NpZ25tZW50cyoqLg0KDQoqIFlvdSBNVVNUIHN1Ym1pdCB5b3VyIFJNYXJrZG93biBhbmQgdGhlIFVSTCBvZiBIVE1MIGZvcm1hdCByZXBvcnQgKHB1Ymxpc2hlZCBvbiBlaXRoZXIgUlB1YnMgb3IgR2l0SHViKSB2aWEgRDJMIGJ1dCAqKk5vdCBlbWFpbCEqKg0KDQoqIFN0ZXBzIGZvciBwdWJsaXNoaW5nIHlvdXIgSFRNTCBmb3JtYXQgcmVwb3J0IG9uIFJQdWJzDQogICsgUmVnaXN0ZXIgYW4gUlB1YnMgYWNjb3VudCAoPGh0dHBzOi8vcnB1YnMuY29tLz4pDQogICsgU3RheSBzaW5nZWQgaW4NCiAgKyBLbml0IHlvdSBSTWFya2Rvd24gcmVwb3J0IHRvIEhUTUwgZm9ybWF0DQogICsgQ2xpY2sgdGhlIFJQdWJzIHB1Ymxpc2ggaWNvbiA8aW1nIHNyYz0iUlB1YnNJY29uLnBuZyIgd2lkdGg9IjkwIiBoZWlnaHQ9IjIwIj4NCg0KIyBBc3NpZ25tZW50IFByb2JsZW1zDQoNCjEuIE9wZW4gYW4gUiBNYXJrZG93biBkb2N1bWVudCwgcGxlYXNlIGZlZWwgZnJlZSB0byB1c2UgdGhlIHRlbXBsYXRlIGluIG15IFJNRCBmb3IgdGhlIGNsYXNzIG5vdGUuDQoNCjIuIFdyaXRlIGEgZmV3IHNlbnRlbmNlcyB0byBkZXNjcmliZSB0aGUgdmFyaWFibGUgeW91IGFyZSBnb2luZyB0byB1c2UgaW4geW91ciBhbmFseXNpcy4NCg0KMy4gQ29uc3RydWN0IGEgY29uZmlkZW5jZSBpbnRlcnZhbCBvZiB0aGUgbWVhbiBvZiB0aGUgdmFyaWFibGUgdXNlIG1ldGhvZHMgeW91IGxlYXJuZWQgaW4geW91ciBwcmV2aW91cyBjb3Vyc2VzLiBGb3IgZXhhbXBsZSwgTUFUIDEyNSwgU1RBIDIwMCwgU1RBIDMxOSwgYW5kL29yIFNUQTMyMC4NCg0KNC4gVXNlIHRoZSBCb290c3RyYXAgbWV0aG9kIGludHJvZHVjZWQgdGhpcyB3ZWVrIChzZWUgdGhlIGNsYXNzIG5vdGUgb24gdGhlIGNvdXJzZSB3ZWIgcGFnZSkgdG8gY29uc3RydWN0IHRoZSBib290c3RyYXAgY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgdGhlIG1lYW4gb2YgdGhlIHNlbGVjdGVkIHZhcmlhYmxlLg0KDQo1LiBQbG90IHRoZSBib290c3RyYXAgc2FtcGxpbmcgZGlzdHJpYnV0aW9uIG9mIHRoZSBzYW1wbGUgbWVhbi4NCg0KNi4gQ29tcGFyZSB0aGUgdHdvIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGFuZCBpbnRlcnByZXQgeW91ciBmaW5kaW5ncyBhbmQgaW50ZXJwcmV0IHRoZSBpbnRlcnZhbHMuDQoNCg0KDQoNCg0KDQoNCg==