Data in R

To run your code, click run. It will let you know if your code is correct or not, and will offer hints on what to fix if needed. If you are stuck, you can see the solution by clicking Solution.

Exercise 1: Vectors

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImRmIDwtIHJlYWQuY3N2KHRleHQ9XCJndmtleSxkYXRhZGF0ZSxmeWVhcix0aWMsY29ubSxhdCxkcHRjLGx0LG5pXG4zMjQzLDIwMTAxMjMxLDIwMTAsQyxDSVRJR1JPVVAgSU5DLDE5MTM5MDIsODQ0OTY4LDE3NDgxMTMsMTA2MDJcbjMyNDMsMjAxMTEyMzEsMjAxMSxDLENJVElHUk9VUCBJTkMsMTg3Mzg3OCw4NjU5MzYsMTY5NDMwNSwxMTA2N1xuMzI0MywyMDEyMTIzMSwyMDEyLEMsQ0lUSUdST1VQIElOQywxODY0NjYwLDkzMDU2MCwxNjczNjYzLDc1NDFcbjMyNDMsMjAxMzEyMzEsMjAxMyxDLENJVElHUk9VUCBJTkMsMTg4MDM4Miw5NjgyNzMsMTY3NDI0OSwxMzY3M1xuMzI0MywyMDE0MTIzMSwyMDE0LEMsQ0lUSUdST1VQIElOQywxODQyNTMwLDg5OTMzMiwxNjMwNDg1LDczMTNcbjMyNDMsMjAxNTEyMzEsMjAxNSxDLENJVElHUk9VUCBJTkMsMTczMTIxMCw5MDc4ODcsMTUwODExOCwxNzI0MlxuMzI0MywyMDE2MTIzMSwyMDE2LEMsQ0lUSUdST1VQIElOQywxNzkyMDc3LDkyOTQwNiwxNTY1OTM0LDE0OTEyXG4zMjQzLDIwMTcxMjMxLDIwMTcsQyxDSVRJR1JPVVAgSU5DLDE4NDI0NjUsOTU5ODIyLDE2NDA3OTMsLTY3OThcbjExNDYyOCwyMDEwMTIzMSwyMDEwLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTMzMiwzODU2OSw4MzMxMDQsODM1NFxuMTE0NjI4LDIwMTExMjMxLDIwMTEsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsOTIzMjI1LDQ2MTA5LDg1MTM5Niw0NDQyXG4xMTQ2MjgsMjAxMjEyMzEsMjAxMixHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw5Mzg1NTUsNzAxMjQsODYyMzMxLDc0NzVcbjExNDYyOCwyMDEzMTIzMSwyMDEzLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTUwNyw3MDgwNyw4MzI3MTQsODA0MFxuMTE0NjI4LDIwMTQxMjMxLDIwMTQsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsODU2MjQwLDgzMDA4LDc3MzAzOSw4NDc3XG4xMTQ2MjgsMjAxNTEyMzEsMjAxNSxHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw4NjEzOTUsOTc1MTksNzc0MjA4LDYwODNcbjExNDYyOCwyMDE2MTIzMSwyMDE2LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDg2MDE2NSwxMjQwOTgsNzcyNzY2LDczOThcbjExNDYyOCwyMDE3MTIzMSwyMDE3LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxNjc3NiwxMzg2MDQsODMzOTgwLDQyODZcbjI5NjgsMjAxMDEyMzEsMjAxMCxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMTE3NjA1LDkzMDM2OSwxOTQxNDk5LDE3MzcwXG4yOTY4LDIwMTExMjMxLDIwMTEsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjI2NTc5MiwxMTI3ODA2LDIwODIyMTksMTg5NzZcbjI5NjgsMjAxMjEyMzEsMjAxMixKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzU5MTQxLDExOTM1OTMsMjE1NTA3MiwyMTI4NFxuMjk2OCwyMDEzMTIzMSwyMDEzLEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0MTU2ODksMTI4Nzc2NSwyMjA0NTExLDE3OTIzXG4yOTY4LDIwMTQxMjMxLDIwMTQsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjU3MzEyNiwxMzYzNDI3LDIzNDEwNjEsMjE3NjJcbjI5NjgsMjAxNTEyMzEsMjAxNSxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzUxNjk4LDEyNzk3MTUsMjEwNDEyNSwyNDQ0MlxuMjk2OCwyMDE2MTIzMSwyMDE2LEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0OTA5NzIsMTM3NTE3OSwyMjM2NzgyLDI0NzMzXG4yOTY4LDIwMTcxMjMxLDIwMTcsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjUzMzYwMCwxNDQzOTgyLDIyNzc5MDcsMjQ0NDFcblwiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKVxubGlicmFyeShkcGx5cilcbmxpYnJhcnkobWFncml0dHIpXG5lYXJuaW5nc19KUE0gPC0gZGYgJT4lIGZpbHRlcih0aWM9PVwiSlBNXCIpICU+JSBzZWxlY3QobmkpICU+JSAuJG5pXG5lYXJuaW5nc19HUyA8LSBkZiAlPiUgZmlsdGVyKHRpYz09XCJHU1wiKSAlPiUgc2VsZWN0KG5pKSAlPiUgLiRuaVxuZWFybmluZ3NfQyA8LSBkZiAlPiUgZmlsdGVyKHRpYz09XCJDXCIpICU+JSBzZWxlY3QobmkpICU+JSAuJG5pIiwic2FtcGxlIjoiIyBFYWNoIHZlY3RvciBiZWxvdyBjb250YWlucyBlYXJuaW5ncyBpbmZvcm1hdGlvbiBmcm9tIDIwMTAgdGhyb3VnaCAyMDE3XG55ZWFycyA8LSBjKDIwMTA6MjAxNylcbmVhcm5pbmdzX0MgICMgQ2l0aWdyb3VwIGVhcm5pbmdzLCBpbiBtaWxsaW9ucyBvZiBVU0RcbmVhcm5pbmdzX0dTICAjIEdvbGRtYW4gU2FjaHMgZWFybmluZ3MsIGluIG1pbGxpb25zIG9mIFVTRFxuXG4jIENyZWF0ZSBhIG5ldyB2ZWN0b3IsIGBDaXRpX21pbnVzX0dvbGRtYW5gLCB0aGF0IGNvbnRhaW5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gQ2l0aWJhbmsncyBhbmQgR29sZG1hbiBTYWNoJ3MgZWFybmluZ3NcbkNpdGlfbWludXNfR29sZG1hbiA8LSBcblxuIyBOYW1lIHRoZSB2ZWN0b3IgYENpdGlfbWludXNfR29sZG1hbmAgd2l0aCB0aGUgYHllYXJzYCB2ZWN0b3JcblxuXG4jIENyZWF0ZSBhIG5ldyB2ZWN0b3IsIGBDaXRpX2xvd2VyYCwgdGhhdCBjb250YWlucyBUUlVFIGZvciB5ZWFycyB3aGVyZSBDaXRpXG4jIEhhZCBsb3dlciBlYXJuaW5ncywgYW5kIEZBTFNFIGZvciBvdGhlciB5ZWFycy4gVXNlIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IHRvIGRldGVybWluZSB0aGlzLlxuQ2l0aV9sb3dlciA8LSBcbiAgXG5DaXRpX2xvd2VyICAjIFByaW50cyB0aGUgdmVjdG9yIC0tIG5vIG5lZWQgdG8gY2hhbmdlIHRoaXMgbGluZVxuXG4jIEluIGhvdyBtYW55IHllYXJzIGRpZCBDaXRpIGhhdmUgbG93ZXIgZWFybmluZ3M/ICBVc2UgYHN1bSgpYCB0byBkZXRlcm1pbmUgdGhpcy5cbkNpdGlfbG93ZXJfY291bnQgPC0gXG5cbkNpdGlfbG93ZXJfY291bnQgICMgUHJpbnRzIHRoZSBudW1iZXIgLS0gbm8gbmVlZCB0byBjaGFuZ2UgdGhpcyBsaW5lXG5cbiNFTkQiLCJzb2x1dGlvbiI6IiMgRWFjaCB2ZWN0b3IgYmVsb3cgY29udGFpbnMgZWFybmluZ3MgaW5mb3JtYXRpb24gZnJvbSAyMDEwIHRocm91Z2ggMjAxN1xueWVhcnMgPC0gYygyMDEwOjIwMTcpXG5lYXJuaW5nc19DICAjIENpdGlncm91cCBlYXJuaW5ncywgaW4gbWlsbGlvbnMgb2YgVVNEXG5lYXJuaW5nc19HUyAgIyBHb2xkbWFuIFNhY2hzIGVhcm5pbmdzLCBpbiBtaWxsaW9ucyBvZiBVU0RcblxuIyBDcmVhdGUgYSBuZXcgdmVjdG9yLCBgQ2l0aV9taW51c19Hb2xkbWFuYCwgdGhhdCBjb250YWlucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIENpdGliYW5rJ3MgYW5kIEdvbGRtYW4gU2FjaCdzIGVhcm5pbmdzXG5DaXRpX21pbnVzX0dvbGRtYW4gPC0gZWFybmluZ3NfQyAtIGVhcm5pbmdzX0dTXG5cbiMgTmFtZSB0aGUgdmVjdG9yIGBDaXRpX21pbnVzX0dvbGRtYW5gIHdpdGggdGhlIGB5ZWFyc2AgdmVjdG9yXG5uYW1lcyhDaXRpX21pbnVzX0dvbGRtYW4pIDwtIHllYXJzXG5cbiMgQ3JlYXRlIGEgbmV3IHZlY3RvciwgYENpdGlfbG93ZXJgLCB0aGF0IGNvbnRhaW5zIFRSVUUgZm9yIHllYXJzIHdoZXJlIENpdGlcbiMgSGFkIGxvd2VyIGVhcm5pbmdzLCBhbmQgRkFMU0UgZm9yIG90aGVyIHllYXJzLiBVc2UgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgdG8gZGV0ZXJtaW5lIHRoaXMuXG5DaXRpX2xvd2VyIDwtIENpdGlfbWludXNfR29sZG1hbiA8IDBcblxuQ2l0aV9sb3dlciAgIyBQcmludHMgdGhlIHZlY3RvciAtLSBubyBuZWVkIHRvIGNoYW5nZSB0aGlzIGxpbmVcblxuIyBJbiBob3cgbWFueSB5ZWFycyBkaWQgQ2l0aSBoYXZlIGxvd2VyIGVhcm5pbmdzPyAgVXNlIGBzdW0oKWAgdG8gZGV0ZXJtaW5lIHRoaXMuXG5DaXRpX2xvd2VyX2NvdW50IDwtIHN1bShDaXRpX2xvd2VyKVxuXG5DaXRpX2xvd2VyICAjIFByaW50cyB0aGUgdmVjdG9yIC0tIG5vIG5lZWQgdG8gY2hhbmdlIHRoaXMgbGluZVxuXG4jRU5EIiwic2N0IjoiIyBUZW1wbGF0ZSBiYXNlZCBvbiBodHRwczovL3d3dy5yZG9jdW1lbnRhdGlvbi5vcmcvcGFja2FnZXMvdGVzdHdoYXQvdmVyc2lvbnMvNC4xLjFcbiMgQ2hlY2sgaWYgc29tZXRoaW5nIGlzIGV4cGxpY2l0bHkgdHlwZWRcbiMgdGVzdF9zdHVkZW50X3R5cGVkKCdyb2EnLCBub3RfdHlwZWRfbXNnPScnKVxuXG4jIENoZWNrIGlmIGZ1bmN0aW9uIHdhcyB1c2VkIGluIGlucHV0IGNvZGVcbiMgdGVzdF9mdW5jdGlvbignYycsaW5jb3JyZWN0X21zZz0nJylcbnRlc3RfZnVuY3Rpb24oJ25hbWVzJyxpbmNvcnJlY3RfbXNnPSdZb3UgbmVlZCB0byB1c2UgdGhlIGBuYW1lcygpYCBmdW5jdGlvbiB0byBuYW1lIHRoZSBlbGVtZW50cyBvZiBgQ2l0aV9taW51c19Hb2xkbWFuYCcpXG50ZXN0X2Z1bmN0aW9uKCdzdW0nLGluY29ycmVjdF9tc2c9J1lvdSBuZWVkIHRvIHVzZSB0aGUgYHN1bSgpYCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiB5ZWFycyB0aGF0IENpdGkgaGFkIGxvd2VyIGVhcm5pbmdzIHRoYW4gR29sZG1hbiBTYWNocy5gJylcblxuIyBSZXF1aXJlcyBhbiBvYmplY3QgYHhgIHRvIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHNvbHV0aW9uXG50ZXN0X29iamVjdChcIkNpdGlfbWludXNfR29sZG1hblwiLGluY29ycmVjdF9tc2cgPSBcImBDaXRpX21pbnVzX0dvbGRtYW5gIHNob3VsZCBjb250YWluIGVhcm5pbmdzIGZvciBDaXRpICptaW51cyogZWFybmluZ3MgZm9yIEdvbGRtYW4gU2FjaHMgZm9yIGVhY2ggeWVhci4gIEl0IHNob3VsZCBhbHNvIGJlIG5hbWVkIHdpdGggdGhlIGB5ZWFyc2AgdmVjdG9yLlwiLHVuZGVmaW5lZF9tc2cgPSBcIkRpZCB5b3UgZGVmaW5lIGBDaXRpX21pbnVzX0dvbGRtYW5gP1wiKVxudGVzdF9vYmplY3QoXCJDaXRpX2xvd2VyXCIsaW5jb3JyZWN0X21zZyA9IFwiYENpdGlfbG93ZXJgIGRvZXMgbm90IGFwcGVhciB0byBiZSBjb3JyZWN0LlwiLHVuZGVmaW5lZF9tc2cgPSBcIkRpZCB5b3UgZGVmaW5lIGBDaXRpX2xvd2VyYD9cIilcbnRlc3Rfb2JqZWN0KFwiQ2l0aV9sb3dlcl9jb3VudFwiLGluY29ycmVjdF9tc2cgPSBcImBDaXRpX2xvd2VyX2NvdW50YCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgY29ycmVjdC5cIix1bmRlZmluZWRfbXNnID0gXCJEaWQgeW91IGRlZmluZSBgQ2l0aV9sb3dlcl9jb3VudGA/XCIpXG5cbiMgUmVxdWlyZXMgYW4gb25qZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgYHhgIGluIHRoZSBzb2x1dGlvblxuIyB0ZXN0X2FuX29iamVjdChcInhcIix1bmRlZmluZWRfbXNnPVwiXCIpXG5cbiMgQ2hlY2sgaWYgYSB2ZWN0b3Igb2YgcHJlZGVmaW5lZCBvYmplY3RzIGFyZSB1bmNoYW5nZWRcbiMgdGVzdF9wcmVkZWZpbmVkX29iamVjdHMoYygneCcsJ3knKSxpbmNvcnJlY3RfbXNnPVwiRG9uJ3Qgb252ZXJ3cml0ZSB0aGUgcHJlZGVmaW5lZCB2YXJpYWJsZXNcIilcblxuIyBDaGVja3MgZm9yIGEgcmVnZXggcGF0dGVybiBpbiB0cmhlIG91dHB1dFxuIyB0ZXN0X291dHB1dF9yZWdleChwYXR0ZXJuLGZpeGVkPUYsIHRpbWVzPTEsIGluY29ycmVjdF9tc2c9JycpXG5cbiMgQ2FuIGNoZWNrIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGFjcm9zcyBib3RoIHNvbHV0aW9uIGFuZCBzdHVkZW50IGNvZGVcbiN0ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwidHlwZW9mKGNvbXBhbnlfbmFtZSlcIiwgaW5jb3JyZWN0X21zZz1cIkRpZCB5b3Ugc3RvcmUgdGV4dHVhbCBkYXRhIGluIGBjb21wYW55X25hbWVgP1wiKVxuXG50ZXN0X2Vycm9yKClcbnN1Y2Nlc3NfbXNnKFwiQXdlc29tZSFcIilcblxuIyBPdGhlciBmdW5jdGlvbnMgdG8gbm90ZTpcbiMgICAgIC0gdGVzdF9vcihhLGIpIC0tIGNoZWNrcyBpZiBlaXRoZXIgdGVzdCBhIG9yIHRlc3QgYiBwYXNzXG4jICAgICAtIHRlc3RfZ2dwbG90KCkgLS0gY2FuIGNoZWNrIGlmIHBsb3RzIGFyZSBjb3JyZWN0XG4jICAgICAtIHRlc3RfZnVuY3Rpb24oKSAtLSBjYW4gYWxzbyBjaGVjayBpbmNsdWRlZCBwYXJhbWV0ZXJzXG4jICAgICAtIHRlc3RfbG9vcCgpIC0tIGNoZWNraW5nIGZvciBhbmQgd2hpbGUgbG9vcHNcbiMgICAgIC0gdGVzdF9saWJyYXJ5X2Z1bmN0aW9uKCdwYWNrYWdlJywgbm90X2NhbGxlZF9tc2c9JycsaW5jb3JyZWN0X21zZz0nJylcbiMgICAgIC0gdGVzdF9pZl9lbHNlKCkgLS0gY2hlY2tpbmcgaWYgc3RhdGVtZW50c1xuIyAgICAgLSB0ZXN0X2V4cHJlc3Npb25fZXJyb3IoKSAtLSBjYW4gY2hlY2sgaWYgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBkZWZpbmVkXG4jICAgICAtIHRlc3Rfb3BlcmF0b3IoJ29wZXJhdG9yJywpLCBub3RfY2FsbGVkX21zZz0nJyxpbmNvcnJlY3RfbXNnPScnKVxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uX2RlZmluaXRpb24oKSAtLSByaWdvcm91c2x5IGNoZWNrIGRlZmluZWQgZnVuY3Rpb25cbiMgICAgIC0gdGVzdF9kYXRhX2ZyYW1lKCkgLS0gY2hlY2sgaWYgZGF0YWZyYW1lIFtjb2x1bW5zXSBhcmUgZXF1aXZhbGVudFxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uX3Jlc3VsdCwgdGVzdF9leHByZXNzaW9uX3Jlc3VsdCJ9

Exercise 2: Lists

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImRmIDwtIHJlYWQuY3N2KHRleHQ9XCJndmtleSxkYXRhZGF0ZSxmeWVhcix0aWMsY29ubSxhdCxkcHRjLGx0LG5pXG4zMjQzLDIwMTAxMjMxLDIwMTAsQyxDSVRJR1JPVVAgSU5DLDE5MTM5MDIsODQ0OTY4LDE3NDgxMTMsMTA2MDJcbjMyNDMsMjAxMTEyMzEsMjAxMSxDLENJVElHUk9VUCBJTkMsMTg3Mzg3OCw4NjU5MzYsMTY5NDMwNSwxMTA2N1xuMzI0MywyMDEyMTIzMSwyMDEyLEMsQ0lUSUdST1VQIElOQywxODY0NjYwLDkzMDU2MCwxNjczNjYzLDc1NDFcbjMyNDMsMjAxMzEyMzEsMjAxMyxDLENJVElHUk9VUCBJTkMsMTg4MDM4Miw5NjgyNzMsMTY3NDI0OSwxMzY3M1xuMzI0MywyMDE0MTIzMSwyMDE0LEMsQ0lUSUdST1VQIElOQywxODQyNTMwLDg5OTMzMiwxNjMwNDg1LDczMTNcbjMyNDMsMjAxNTEyMzEsMjAxNSxDLENJVElHUk9VUCBJTkMsMTczMTIxMCw5MDc4ODcsMTUwODExOCwxNzI0MlxuMzI0MywyMDE2MTIzMSwyMDE2LEMsQ0lUSUdST1VQIElOQywxNzkyMDc3LDkyOTQwNiwxNTY1OTM0LDE0OTEyXG4zMjQzLDIwMTcxMjMxLDIwMTcsQyxDSVRJR1JPVVAgSU5DLDE4NDI0NjUsOTU5ODIyLDE2NDA3OTMsLTY3OThcbjExNDYyOCwyMDEwMTIzMSwyMDEwLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTMzMiwzODU2OSw4MzMxMDQsODM1NFxuMTE0NjI4LDIwMTExMjMxLDIwMTEsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsOTIzMjI1LDQ2MTA5LDg1MTM5Niw0NDQyXG4xMTQ2MjgsMjAxMjEyMzEsMjAxMixHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw5Mzg1NTUsNzAxMjQsODYyMzMxLDc0NzVcbjExNDYyOCwyMDEzMTIzMSwyMDEzLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTUwNyw3MDgwNyw4MzI3MTQsODA0MFxuMTE0NjI4LDIwMTQxMjMxLDIwMTQsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsODU2MjQwLDgzMDA4LDc3MzAzOSw4NDc3XG4xMTQ2MjgsMjAxNTEyMzEsMjAxNSxHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw4NjEzOTUsOTc1MTksNzc0MjA4LDYwODNcbjExNDYyOCwyMDE2MTIzMSwyMDE2LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDg2MDE2NSwxMjQwOTgsNzcyNzY2LDczOThcbjExNDYyOCwyMDE3MTIzMSwyMDE3LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxNjc3NiwxMzg2MDQsODMzOTgwLDQyODZcbjI5NjgsMjAxMDEyMzEsMjAxMCxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMTE3NjA1LDkzMDM2OSwxOTQxNDk5LDE3MzcwXG4yOTY4LDIwMTExMjMxLDIwMTEsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjI2NTc5MiwxMTI3ODA2LDIwODIyMTksMTg5NzZcbjI5NjgsMjAxMjEyMzEsMjAxMixKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzU5MTQxLDExOTM1OTMsMjE1NTA3MiwyMTI4NFxuMjk2OCwyMDEzMTIzMSwyMDEzLEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0MTU2ODksMTI4Nzc2NSwyMjA0NTExLDE3OTIzXG4yOTY4LDIwMTQxMjMxLDIwMTQsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjU3MzEyNiwxMzYzNDI3LDIzNDEwNjEsMjE3NjJcbjI5NjgsMjAxNTEyMzEsMjAxNSxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzUxNjk4LDEyNzk3MTUsMjEwNDEyNSwyNDQ0MlxuMjk2OCwyMDE2MTIzMSwyMDE2LEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0OTA5NzIsMTM3NTE3OSwyMjM2NzgyLDI0NzMzXG4yOTY4LDIwMTcxMjMxLDIwMTcsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjUzMzYwMCwxNDQzOTgyLDIyNzc5MDcsMjQ0NDFcblwiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKVxubGlicmFyeShkcGx5cilcbmxpYnJhcnkobWFncml0dHIpXG5kZiA8LSBkZiAlPiVcbiAgbXV0YXRlKHJvYSA9IG5pL2F0LFxuICAgICAgICAgcm9hX2xhZyA9IGxhZyhyb2EpKVxubW9kZWwgPC0gc3VtbWFyeShsbShyb2EgfiByb2FfbGFnLCBkYXRhPWRmKSkiLCJzYW1wbGUiOiIjIEJlbG93IGlzIGEgbGluZWFyIG1vZGVsIG9mIEpQTW9yZ2FuJ3MsIENpdGkncywgYW5kIEdvbGRtYW4ncyBST0EgcmVncmVzc2VkIG9uIHByaW9yIHllYXIgUk9BXG5tb2RlbFxuc3RyKG1vZGVsKVxuXG4jIFJ1biB0aGUgYWJvdmUgYW5kIGV4YW1pbmUgdGhlIG91dHB1dC5cbiMgRXh0cmFjdCB0aGUgciBzcXVhcmVkIChub3QgYWRqdXN0ZWQpIGZyb20gdGhlIG1vZGVsXG5cbiNFTkQiLCJzb2x1dGlvbiI6IiMgQmVsb3cgaXMgYSBsaW5lYXIgbW9kZWwgb2YgSlBNb3JnYW4ncywgQ2l0aSdzLCBhbmQgR29sZG1hbidzIFJPQSByZWdyZXNzZWQgb24gcHJpb3IgeWVhciBST0Fcbm1vZGVsXG5zdHIobW9kZWwpXG5cbiMgUnVuIHRoZSBhYm92ZSBhbmQgZXhhbWluZSB0aGUgb3V0cHV0LlxuIyBFeHRyYWN0IHRoZSByIHNxdWFyZWQgKG5vdCBhZGp1c3RlZCkgZnJvbSB0aGUgbW9kZWxcbm1vZGVsJHIuc3F1YXJlZFxuI0VORCIsInNjdCI6IiMgVGVtcGxhdGUgYmFzZWQgb24gaHR0cHM6Ly93d3cucmRvY3VtZW50YXRpb24ub3JnL3BhY2thZ2VzL3Rlc3R3aGF0L3ZlcnNpb25zLzQuMS4xXG4jIENoZWNrIGlmIHNvbWV0aGluZyBpcyBleHBsaWNpdGx5IHR5cGVkXG4jIHRlc3Rfc3R1ZGVudF90eXBlZCgneCA8LSAyJywgbm90X3R5cGVkX21zZz0nJylcblxuIyBDaGVjayBpZiBmdW5jdGlvbiB3YXMgdXNlZCBpbiBpbnB1dCBjb2RlXG4jIHRlc3RfZnVuY3Rpb24oJ2MnLGluY29ycmVjdF9tc2c9JycpICBcblxuIyBSZXF1aXJlcyBhbiBvYmplY3QgYHhgIHRvIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHNvbHV0aW9uXG4jIHRlc3Rfb2JqZWN0KFwieFwiLGluY29ycmVjdF9tc2cgPSBcIlwiLHVuZGVmaW5lZF9tc2cgPSBcIlwiKSAgXG5cbiMgUmVxdWlyZXMgYW4gb25qZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgYHhgIGluIHRoZSBzb2x1dGlvblxuIyB0ZXN0X2FuX29iamVjdChcInhcIix1bmRlZmluZWRfbXNnPVwiXCIpXG5cbiMgQ2hlY2tzIGlmIG91dHB1dCBvZiBzdHVkZW50J3MgY29kZSBjb250YWlucyBnaXZlbiBldmFsdWF0ZWQgZXhwcmVzc2lvblxudGVzdF9vdXRwdXRfY29udGFpbnMoXCJtb2RlbCRyLnNxdWFyZWRcIixpbmNvcnJlY3RfbXNnID0gXCJZb3UgaGF2ZSBub3QgZXh0cmFjdGVkIGFuZCBwcmludGVkIHRoZSByaWdodCBudW1iZXIhXCIpXG5cbiMgQ2hlY2sgaWYgYSB2ZWN0b3Igb2YgcHJlZGVmaW5lZCBvYmplY3RzIGFyZSB1bmNoYW5nZWRcbiMgdGVzdF9wcmVkZWZpbmVkX29iamVjdHMoYygneCcsJ3knKSxpbmNvcnJlY3RfbXNnPVwiRG9uJ3Qgb252ZXJ3cml0ZSB0aGUgcHJlZGVmaW5lZCB2YXJpYWJsZXNcIilcblxuIyBDaGVja3MgZm9yIGEgcmVnZXggcGF0dGVybiBpbiB0cmhlIG91dHB1dFxuIyB0ZXN0X291dHB1dF9yZWdleChwYXR0ZXJuLGZpeGVkPUYsIHRpbWVzPTEsIGluY29ycmVjdF9tc2c9JycpXG5cbiMgQ2FuIGNoZWNrIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGFjcm9zcyBib3RoIHNvbHV0aW9uIGFuZCBzdHVkZW50IGNvZGVcbiMgdGVzdF9leHByZXNzaW9uX291dHB1dChcInR5cGVvZihjb21wYW55X25hbWUpXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IHN0b3JlIHRleHR1YWwgZGF0YSBpbiBgY29tcGFueV9uYW1lYD9cIilcblxudGVzdF9lcnJvcigpXG5zdWNjZXNzX21zZyhcIkF3ZXNvbWUhXCIpXG5cbiMgT3RoZXIgZnVuY3Rpb25zIHRvIG5vdGU6XG4jICAgICAtIHRlc3Rfb3IoYSxiKSAtLSBjaGVja3MgaWYgZWl0aGVyIHRlc3QgYSBvciB0ZXN0IGIgcGFzc1xuIyAgICAgLSB0ZXN0X2dncGxvdCgpIC0tIGNhbiBjaGVjayBpZiBwbG90cyBhcmUgY29ycmVjdFxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uKCkgLS0gY2FuIGFsc28gY2hlY2sgaW5jbHVkZWQgcGFyYW1ldGVyc1xuIyAgICAgLSB0ZXN0X2xvb3AoKSAtLSBjaGVja2luZyBmb3IgYW5kIHdoaWxlIGxvb3BzXG4jICAgICAtIHRlc3RfbGlicmFyeV9mdW5jdGlvbigncGFja2FnZScsIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfaWZfZWxzZSgpIC0tIGNoZWNraW5nIGlmIHN0YXRlbWVudHNcbiMgICAgIC0gdGVzdF9leHByZXNzaW9uX2Vycm9yKCkgLS0gY2FuIGNoZWNrIGlmIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgZGVmaW5lZFxuIyAgICAgLSB0ZXN0X29wZXJhdG9yKCdvcGVyYXRvcicsKSwgbm90X2NhbGxlZF9tc2c9JycsaW5jb3JyZWN0X21zZz0nJylcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9kZWZpbml0aW9uKCkgLS0gcmlnb3JvdXNseSBjaGVjayBkZWZpbmVkIGZ1bmN0aW9uXG4jICAgICAtIHRlc3RfZGF0YV9mcmFtZSgpIC0tIGNoZWNrIGlmIGRhdGFmcmFtZSBbY29sdW1uc10gYXJlIGVxdWl2YWxlbnRcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9yZXN1bHQsIHRlc3RfZXhwcmVzc2lvbl9yZXN1bHQifQ==

Exercise 3: Data frames

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImRmIDwtIHJlYWQuY3N2KHRleHQ9XCJndmtleSxkYXRhZGF0ZSxmeWVhcix0aWMsY29ubSxhdCxkcHRjLGx0LG5pXG4zMjQzLDIwMTAxMjMxLDIwMTAsQyxDSVRJR1JPVVAgSU5DLDE5MTM5MDIsODQ0OTY4LDE3NDgxMTMsMTA2MDJcbjMyNDMsMjAxMTEyMzEsMjAxMSxDLENJVElHUk9VUCBJTkMsMTg3Mzg3OCw4NjU5MzYsMTY5NDMwNSwxMTA2N1xuMzI0MywyMDEyMTIzMSwyMDEyLEMsQ0lUSUdST1VQIElOQywxODY0NjYwLDkzMDU2MCwxNjczNjYzLDc1NDFcbjMyNDMsMjAxMzEyMzEsMjAxMyxDLENJVElHUk9VUCBJTkMsMTg4MDM4Miw5NjgyNzMsMTY3NDI0OSwxMzY3M1xuMzI0MywyMDE0MTIzMSwyMDE0LEMsQ0lUSUdST1VQIElOQywxODQyNTMwLDg5OTMzMiwxNjMwNDg1LDczMTNcbjMyNDMsMjAxNTEyMzEsMjAxNSxDLENJVElHUk9VUCBJTkMsMTczMTIxMCw5MDc4ODcsMTUwODExOCwxNzI0MlxuMzI0MywyMDE2MTIzMSwyMDE2LEMsQ0lUSUdST1VQIElOQywxNzkyMDc3LDkyOTQwNiwxNTY1OTM0LDE0OTEyXG4zMjQzLDIwMTcxMjMxLDIwMTcsQyxDSVRJR1JPVVAgSU5DLDE4NDI0NjUsOTU5ODIyLDE2NDA3OTMsLTY3OThcbjExNDYyOCwyMDEwMTIzMSwyMDEwLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTMzMiwzODU2OSw4MzMxMDQsODM1NFxuMTE0NjI4LDIwMTExMjMxLDIwMTEsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsOTIzMjI1LDQ2MTA5LDg1MTM5Niw0NDQyXG4xMTQ2MjgsMjAxMjEyMzEsMjAxMixHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw5Mzg1NTUsNzAxMjQsODYyMzMxLDc0NzVcbjExNDYyOCwyMDEzMTIzMSwyMDEzLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTUwNyw3MDgwNyw4MzI3MTQsODA0MFxuMTE0NjI4LDIwMTQxMjMxLDIwMTQsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsODU2MjQwLDgzMDA4LDc3MzAzOSw4NDc3XG4xMTQ2MjgsMjAxNTEyMzEsMjAxNSxHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw4NjEzOTUsOTc1MTksNzc0MjA4LDYwODNcbjExNDYyOCwyMDE2MTIzMSwyMDE2LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDg2MDE2NSwxMjQwOTgsNzcyNzY2LDczOThcbjExNDYyOCwyMDE3MTIzMSwyMDE3LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxNjc3NiwxMzg2MDQsODMzOTgwLDQyODZcbjI5NjgsMjAxMDEyMzEsMjAxMCxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMTE3NjA1LDkzMDM2OSwxOTQxNDk5LDE3MzcwXG4yOTY4LDIwMTExMjMxLDIwMTEsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjI2NTc5MiwxMTI3ODA2LDIwODIyMTksMTg5NzZcbjI5NjgsMjAxMjEyMzEsMjAxMixKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzU5MTQxLDExOTM1OTMsMjE1NTA3MiwyMTI4NFxuMjk2OCwyMDEzMTIzMSwyMDEzLEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0MTU2ODksMTI4Nzc2NSwyMjA0NTExLDE3OTIzXG4yOTY4LDIwMTQxMjMxLDIwMTQsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjU3MzEyNiwxMzYzNDI3LDIzNDEwNjEsMjE3NjJcbjI5NjgsMjAxNTEyMzEsMjAxNSxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzUxNjk4LDEyNzk3MTUsMjEwNDEyNSwyNDQ0MlxuMjk2OCwyMDE2MTIzMSwyMDE2LEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0OTA5NzIsMTM3NTE3OSwyMjM2NzgyLDI0NzMzXG4yOTY4LDIwMTcxMjMxLDIwMTcsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjUzMzYwMCwxNDQzOTgyLDIyNzc5MDcsMjQ0NDFcblwiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKVxubGlicmFyeShkcGx5cilcbmxpYnJhcnkobWFncml0dHIpIiwic2FtcGxlIjoiIyBkZiBjb250YWlucyA5IHZhcmlhYmxlcyBhY3Jvc3MgOCB5ZWFycyBhbmQgMyBiYW5rc1xuIyBkcGx5ciAoZnJvbSB0aWR5dmVyc2UpIGlzIGFscmVhZHkgbG9hZGVkIGZvciB5b3VcbmhlYWQoZGYpXG5cbiMgRXh0cmFjdCBhbGwgcm93cyBhYm91dCBDaXRpZ3JvdXAsIGFuZCBzdG9yZSB0aGlzIGluIGBkZl9DYC4gIFVzZSBkcGx5cidzIGBmaWx0ZXIoKWAuXG5kZl9DIDwtIGRmICU+JVxuICBmaWx0ZXIoKVxuXG4jIENhbGN1bGF0ZSB0aGUgcmF0aW8gb2YgZGVidCB0byBhc3NldHMgZm9yIGVhY2ggZmlybS15ZWFyLlxuIyBsdCBpcyB0aGUgYW1vdW50IG9mIGxpYWJpbGl0aWVzIHRoZSBiYW5rIGhhZFxuIyBhdCBpcyB0aGUgYW1vdW50IG9mIGFzc2V0cyB0aGUgYmFuayBoYWRcbiMgU3RvcmUgdGhpcyBpbiBhIG5ldyBjb2x1bW4gb2YgdGhlIGRhdGFmcmFtZSBjYWxsZWQgXCJkZWJ0X3JhdGlvXCJcbiMgVXNlIGRwbHlyJ3MgYG11dGF0ZSgpYCB0byBjYWxjdWxhdGUgdGhpc1xuZGYgPC0gZGYgJT4lXG4gIG11dGF0ZSgpXG5cbiMgV2hhdCBpcyB0aGUgbWVkaWFuIG9mIGRlYnQgdG8gYXNzZXRzIGFjcm9zcyB0aGVzZSBmaXJtIHllYXJzPyAgVXNlIHRoZSBtZWRpYW4gZnVudGlvbiB0byBjYWxjdWxhdGUgdGhpc1xubWVkaWFuKClcblxuIyBOb3csIHNvcnQgdGhlIGRhdGFmcmFtZSB0byBiZSBpbmNyZWFzaW5nIGluIGRlYnRfcmF0aW8uICBVc2UgZHBseXIncyBgYXJyYW5nZSgpYCB0byBhY2NvbXBsaXNoIHRoaXMuXG5kZl9zb3J0ZWQgPC0gZGYgJT4lXG4gIGFycmFuZ2UoKVxuXG5cbiMgRmluaXNoZWQgY29kZSBmb3IgeW91OlxuIyBXaGljaCBiYW5rLXllYXIgaGFkIHRoZSBsb3dlc3QgZGVidCByYXRpbz9cbnByaW50KHBhc3RlKGRmX3NvcnRlZCRmeWVhclsxXSwgZGZfc29ydGVkJGNvbm1bMV0sJzonLGRmX3NvcnRlZCRkZWJ0X3JhdGlvWzFdKSkgICMgVGhpcyBsaW5lIGlzIGZpbmlzaGVkIGFscmVhZHlcblxuIyBUaGUgaGlnaGVzdCBkZWJ0IHJhdGlvP1xuciA8LSBucm93KGRmX3NvcnRlZClcbnByaW50KHBhc3RlKGRmX3NvcnRlZCRmeWVhcltyXSwgZGZfc29ydGVkJGNvbm1bcl0sJzonLGRmX3NvcnRlZCRkZWJ0X3JhdGlvW3JdKSkgICMgVGhpcyBsaW5lIGlzIGZpbmlzaGVkIGFscmVhZHlcblxuI0VORCIsInNvbHV0aW9uIjoiIyBkZiBjb250YWlucyA5IHZhcmlhYmxlcyBhY3Jvc3MgOCB5ZWFycyBhbmQgMyBiYW5rc1xuIyBkcGx5ciAoZnJvbSB0aWR5dmVyc2UpIGlzIGFscmVhZHkgbG9hZGVkIGZvciB5b3VcbmhlYWQoZGYpXG5cbiMgRXh0cmFjdCBhbGwgcm93cyBhYm91dCBDaXRpZ3JvdXAsIGFuZCBzdG9yZSB0aGlzIGluIGBkZl9DYC4gIFVzZSBkcGx5cidzIGBmaWx0ZXIoKWAuXG5kZl9DIDwtIGRmICU+JVxuICBmaWx0ZXIodGljID09IFwiQ1wiKVxuXG4jIENhbGN1bGF0ZSB0aGUgcmF0aW8gb2YgZGVidCB0byBhc3NldHMgZm9yIGVhY2ggZmlybS15ZWFyLlxuIyBsdCBpcyB0aGUgYW1vdW50IG9mIGxpYWJpbGl0aWVzIHRoZSBiYW5rIGhhZFxuIyBhdCBpcyB0aGUgYW1vdW50IG9mIGFzc2V0cyB0aGUgYmFuayBoYWRcbiMgU3RvcmUgdGhpcyBpbiBhIG5ldyBjb2x1bW4gb2YgdGhlIGRhdGFmcmFtZSBjYWxsZWQgXCJkZWJ0X3JhdGlvXCJcbiMgVXNlIGRwbHlyJ3MgYG11dGF0ZSgpYCB0byBjYWxjdWxhdGUgdGhpc1xuZGYgPC0gZGYgJT4lXG4gIG11dGF0ZShkZWJ0X3JhdGlvID0gbHQvYXQpXG5cbiMgV2hhdCBpcyB0aGUgbWVkaWFuIG9mIGRlYnQgdG8gYXNzZXRzIGFjcm9zcyB0aGVzZSBmaXJtIHllYXJzPyAgVXNlIHRoZSBtZWRpYW4gZnVudGlvbiB0byBjYWxjdWxhdGUgdGhpc1xubWVkaWFuKGRmJGRlYnRfcmF0aW8pXG5cbiMgTm93LCBzb3J0IHRoZSBkYXRhZnJhbWUgdG8gYmUgaW5jcmVhc2luZyBpbiBkZWJ0X3JhdGlvLiAgVXNlIGRwbHlyJ3MgYGFycmFuZ2UoKWAgdG8gYWNjb21wbGlzaCB0aGlzLlxuZGZfc29ydGVkIDwtIGRmICU+JVxuICBhcnJhbmdlKGRlYnRfcmF0aW8pXG5cblxuIyBGaW5pc2hlZCBjb2RlIGZvciB5b3U6XG4jIFdoaWNoIGJhbmsteWVhciBoYWQgdGhlIGxvd2VzdCBkZWJ0IHJhdGlvP1xucHJpbnQocGFzdGUoZGZfc29ydGVkJGZ5ZWFyWzFdLCBkZl9zb3J0ZWQkY29ubVsxXSwnOicsZGZfc29ydGVkJGRlYnRfcmF0aW9bMV0pKSAgIyBUaGlzIGxpbmUgaXMgZmluaXNoZWQgYWxyZWFkeVxuXG4jIFRoZSBoaWdoZXN0IGRlYnQgcmF0aW8/XG5yIDwtIG5yb3coZGZfc29ydGVkKVxucHJpbnQocGFzdGUoZGZfc29ydGVkJGZ5ZWFyW3JdLCBkZl9zb3J0ZWQkY29ubVtyXSwnOicsZGZfc29ydGVkJGRlYnRfcmF0aW9bcl0pKSAgIyBUaGlzIGxpbmUgaXMgZmluaXNoZWQgYWxyZWFkeVxuXG4jRU5EIiwic2N0IjoiIyBUZW1wbGF0ZSBiYXNlZCBvbiBodHRwczovL3d3dy5yZG9jdW1lbnRhdGlvbi5vcmcvcGFja2FnZXMvdGVzdHdoYXQvdmVyc2lvbnMvNC4xLjFcbiMgQ2hlY2sgaWYgc29tZXRoaW5nIGlzIGV4cGxpY2l0bHkgdHlwZWRcbiMgdGVzdF9zdHVkZW50X3R5cGVkKCd4IDwtIDInLCBub3RfdHlwZWRfbXNnPScnKVxudGVzdF9leHByZXNzaW9uX291dHB1dChcImRmX0NcIixpbmNvcnJlY3RfbXNnID0gXCJSZW1lbWJlciB0byBmaWx0ZXIgZm9yIENpdGliYW5rJ3Mgcm93cyBhbmQgc3RvcmUgdGhlbSBpbiBgZGZfQ2AuXCIpXG50ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwic3VtKGRmJGRlYnRfcmF0aW8pXCIsaW5jb3JyZWN0X21zZyA9IFwiUmVtZW1iZXIgdG8gY2FsY3VsYXRlIGBkZWJ0X3JhdGlvYCBhbmQgYWRkIGl0IHRvIHRoZSBkYXRhZnJhbWUuXCIpXG50ZXN0X2Z1bmN0aW9uKCdtZWRpYW4nLGluY29ycmVjdF9tc2c9J0RpZCB5b3UgdXNlIGBtZWRpYW4oKWAgdG8gY2FsY3VsYXRlIHRoZSBhdmVyYWdlIHJhdGlvPycpXG50ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwibWVkaWFuKGRmJGRlYnRfcmF0aW8pXCIsaW5jb3JyZWN0X21zZyA9IFwiRGlkIHlvdSBvdXRwdXQgdGhlIG1lZGlhbiBvZiBgcmF0aW9gP1wiKVxudGVzdF9leHByZXNzaW9uX291dHB1dChcImRmX3NvcnRlZCRkZWJ0X3JhdGlvWzFdXCIsaW5jb3JyZWN0X21zZyA9IFwiTWFrZSBzdXJlIHRvIHNvcnQgYnkgYGRlYnRfcmF0aW9gLlwiKVxudGVzdF9lcnJvcigpXG5zdWNjZXNzX21zZyhcIkF3ZXNvbWUhXCIpXG5cbiMgQ2hlY2sgaWYgZnVuY3Rpb24gd2FzIHVzZWQgaW4gaW5wdXQgY29kZVxuXG5cbiMgUmVxdWlyZXMgYW4gb2JqZWN0IGB4YCB0byBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBzb2x1dGlvblxuXG5cbiMgUmVxdWlyZXMgYW4gb25qZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgYHhgIGluIHRoZSBzb2x1dGlvblxuIyB0ZXN0X2FuX29iamVjdChcInhcIix1bmRlZmluZWRfbXNnPVwiXCIpXG5cbiMgQ2hlY2tzIGlmIG91dHB1dCBvZiBzdHVkZW50J3MgY29kZSBjb250YWlucyBnaXZlbiBldmFsdWF0ZWQgZXhwcmVzc2lvblxuXG4jIENoZWNrIGlmIGEgdmVjdG9yIG9mIHByZWRlZmluZWQgb2JqZWN0cyBhcmUgdW5jaGFuZ2VkXG4jIHRlc3RfcHJlZGVmaW5lZF9vYmplY3RzKGMoJ3gnLCd5JyksaW5jb3JyZWN0X21zZz1cIkRvbid0IG9udmVyd3JpdGUgdGhlIHByZWRlZmluZWQgdmFyaWFibGVzXCIpXG5cbiMgQ2hlY2tzIGZvciBhIHJlZ2V4IHBhdHRlcm4gaW4gdHJoZSBvdXRwdXRcbiMgdGVzdF9vdXRwdXRfcmVnZXgocGF0dGVybixmaXhlZD1GLCB0aW1lcz0xLCBpbmNvcnJlY3RfbXNnPScnKVxuXG4jIENhbiBjaGVjayBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbiBhY3Jvc3MgYm90aCBzb2x1dGlvbiBhbmQgc3R1ZGVudCBjb2RlXG4jIHRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJ0eXBlb2YoY29tcGFueV9uYW1lKVwiLCBpbmNvcnJlY3RfbXNnPVwiRGlkIHlvdSBzdG9yZSB0ZXh0dWFsIGRhdGEgaW4gYGNvbXBhbnlfbmFtZWA/XCIpXG5cblxuXG4jIE90aGVyIGZ1bmN0aW9ucyB0byBub3RlOlxuIyAgICAgLSB0ZXN0X29yKGEsYikgLS0gY2hlY2tzIGlmIGVpdGhlciB0ZXN0IGEgb3IgdGVzdCBiIHBhc3NcbiMgICAgIC0gdGVzdF9nZ3Bsb3QoKSAtLSBjYW4gY2hlY2sgaWYgcGxvdHMgYXJlIGNvcnJlY3RcbiMgICAgIC0gdGVzdF9mdW5jdGlvbigpIC0tIGNhbiBhbHNvIGNoZWNrIGluY2x1ZGVkIHBhcmFtZXRlcnNcbiMgICAgIC0gdGVzdF9sb29wKCkgLS0gY2hlY2tpbmcgZm9yIGFuZCB3aGlsZSBsb29wc1xuIyAgICAgLSB0ZXN0X2xpYnJhcnlfZnVuY3Rpb24oJ3BhY2thZ2UnLCBub3RfY2FsbGVkX21zZz0nJyxpbmNvcnJlY3RfbXNnPScnKVxuIyAgICAgLSB0ZXN0X2lmX2Vsc2UoKSAtLSBjaGVja2luZyBpZiBzdGF0ZW1lbnRzXG4jICAgICAtIHRlc3RfZXhwcmVzc2lvbl9lcnJvcigpIC0tIGNhbiBjaGVjayBpZiBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGRlZmluZWRcbiMgICAgIC0gdGVzdF9vcGVyYXRvcignb3BlcmF0b3InLCksIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfZnVuY3Rpb25fZGVmaW5pdGlvbigpIC0tIHJpZ29yb3VzbHkgY2hlY2sgZGVmaW5lZCBmdW5jdGlvblxuIyAgICAgLSB0ZXN0X2RhdGFfZnJhbWUoKSAtLSBjaGVjayBpZiBkYXRhZnJhbWUgW2NvbHVtbnNdIGFyZSBlcXVpdmFsZW50XG4jICAgICAtIHRlc3RfZnVuY3Rpb25fcmVzdWx0LCB0ZXN0X2V4cHJlc3Npb25fcmVzdWx0In0=

Exercise 4: External library usage

Click the expand button to see the plot more clearly (note: may be blocked by pop-up blockers)

Note: If a plot displays, you have the right code. The plot overrides the confirmation message.

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImRmIDwtIHJlYWQuY3N2KHRleHQ9XCJndmtleSxkYXRhZGF0ZSxmeWVhcix0aWMsY29ubSxhdCxkcHRjLGx0LG5pXG4zMjQzLDIwMTAxMjMxLDIwMTAsQyxDSVRJR1JPVVAgSU5DLDE5MTM5MDIsODQ0OTY4LDE3NDgxMTMsMTA2MDJcbjMyNDMsMjAxMTEyMzEsMjAxMSxDLENJVElHUk9VUCBJTkMsMTg3Mzg3OCw4NjU5MzYsMTY5NDMwNSwxMTA2N1xuMzI0MywyMDEyMTIzMSwyMDEyLEMsQ0lUSUdST1VQIElOQywxODY0NjYwLDkzMDU2MCwxNjczNjYzLDc1NDFcbjMyNDMsMjAxMzEyMzEsMjAxMyxDLENJVElHUk9VUCBJTkMsMTg4MDM4Miw5NjgyNzMsMTY3NDI0OSwxMzY3M1xuMzI0MywyMDE0MTIzMSwyMDE0LEMsQ0lUSUdST1VQIElOQywxODQyNTMwLDg5OTMzMiwxNjMwNDg1LDczMTNcbjMyNDMsMjAxNTEyMzEsMjAxNSxDLENJVElHUk9VUCBJTkMsMTczMTIxMCw5MDc4ODcsMTUwODExOCwxNzI0MlxuMzI0MywyMDE2MTIzMSwyMDE2LEMsQ0lUSUdST1VQIElOQywxNzkyMDc3LDkyOTQwNiwxNTY1OTM0LDE0OTEyXG4zMjQzLDIwMTcxMjMxLDIwMTcsQyxDSVRJR1JPVVAgSU5DLDE4NDI0NjUsOTU5ODIyLDE2NDA3OTMsLTY3OThcbjExNDYyOCwyMDEwMTIzMSwyMDEwLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTMzMiwzODU2OSw4MzMxMDQsODM1NFxuMTE0NjI4LDIwMTExMjMxLDIwMTEsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsOTIzMjI1LDQ2MTA5LDg1MTM5Niw0NDQyXG4xMTQ2MjgsMjAxMjEyMzEsMjAxMixHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw5Mzg1NTUsNzAxMjQsODYyMzMxLDc0NzVcbjExNDYyOCwyMDEzMTIzMSwyMDEzLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTUwNyw3MDgwNyw4MzI3MTQsODA0MFxuMTE0NjI4LDIwMTQxMjMxLDIwMTQsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsODU2MjQwLDgzMDA4LDc3MzAzOSw4NDc3XG4xMTQ2MjgsMjAxNTEyMzEsMjAxNSxHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw4NjEzOTUsOTc1MTksNzc0MjA4LDYwODNcbjExNDYyOCwyMDE2MTIzMSwyMDE2LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDg2MDE2NSwxMjQwOTgsNzcyNzY2LDczOThcbjExNDYyOCwyMDE3MTIzMSwyMDE3LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxNjc3NiwxMzg2MDQsODMzOTgwLDQyODZcbjI5NjgsMjAxMDEyMzEsMjAxMCxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMTE3NjA1LDkzMDM2OSwxOTQxNDk5LDE3MzcwXG4yOTY4LDIwMTExMjMxLDIwMTEsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjI2NTc5MiwxMTI3ODA2LDIwODIyMTksMTg5NzZcbjI5NjgsMjAxMjEyMzEsMjAxMixKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzU5MTQxLDExOTM1OTMsMjE1NTA3MiwyMTI4NFxuMjk2OCwyMDEzMTIzMSwyMDEzLEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0MTU2ODksMTI4Nzc2NSwyMjA0NTExLDE3OTIzXG4yOTY4LDIwMTQxMjMxLDIwMTQsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjU3MzEyNiwxMzYzNDI3LDIzNDEwNjEsMjE3NjJcbjI5NjgsMjAxNTEyMzEsMjAxNSxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzUxNjk4LDEyNzk3MTUsMjEwNDEyNSwyNDQ0MlxuMjk2OCwyMDE2MTIzMSwyMDE2LEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0OTA5NzIsMTM3NTE3OSwyMjM2NzgyLDI0NzMzXG4yOTY4LDIwMTcxMjMxLDIwMTcsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjUzMzYwMCwxNDQzOTgyLDIyNzc5MDcsMjQ0NDFcblwiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKVxuZGYkZGVidF9yYXRpbyA9IGRmJGx0IC8gZGYkYXQiLCJzYW1wbGUiOiIjIGRmIGlzIHRoZSBzYW1lIGRhdGFmcmFtZSBmcm9tIEV4ZXJjaXNlICMzXG5cbiMgVG8gdXNlIGBnZ3Bsb3QoKWAgYmVsb3csIHdlIG5lZWQgdG8gbG9hZCB0aGUgYGdncGxvdDJgIHBhY2thZ2VcbiMgTG9hZCB0aGUgcGFja2FnZSBoZXJlXG5cblxuIyBQbG90cyB0aGUgdGhyZWUgYmFua3MnIG5ldCBpbmNvbWUgYnkgZmlzY2FsIHllYXJcbiMgVHJ5IGNoYW5naW5nIHRoZSB2YXJpYWJsZXMgYW5kIGV4cGxvcmUgdGhlIGRhdGEhXG5nZ3Bsb3QoZGYsIGFlcyh4PWZ5ZWFyLCB5PWRlYnRfcmF0aW8pKSArIGdlb21fbGluZSgpICsgZmFjZXRfd3JhcCh+dGljKSAjIFRoaXMgY29kZSBpcyBjb21wbGV0ZSBhbHJlYWR5XG5cbiNFTkQiLCJzb2x1dGlvbiI6IiMgZGYgaXMgdGhlIHNhbWUgZGF0YWZyYW1lIGZyb20gRXhlcmNpc2UgIzNcblxuIyBUbyB1c2UgYGdncGxvdCgpYCBiZWxvdywgd2UgbmVlZCB0byBsb2FkIHRoZSBgZ2dwbG90MmAgcGFja2FnZVxuIyBMb2FkIHRoZSBwYWNrYWdlIGhlcmVcbmxpYnJhcnkoZ2dwbG90MilcblxuIyBQbG90cyB0aGUgdGhyZWUgYmFua3MnIG5ldCBpbmNvbWUgYnkgZmlzY2FsIHllYXJcbiMgVHJ5IGNoYW5naW5nIHRoZSB2YXJpYWJsZXMgYW5kIGV4cGxvcmUgdGhlIGRhdGEhXG5nZ3Bsb3QoZGYsIGFlcyh4PWZ5ZWFyLCB5PWRlYnRfcmF0aW8pKSArIGdlb21fbGluZSgpICsgZmFjZXRfd3JhcCh+dGljKSAjIFRoaXMgY29kZSBpcyBjb21wbGV0ZSBhbHJlYWR5XG5cbiNFTkQiLCJzY3QiOiJ0ZXN0X2Z1bmN0aW9uKCdsaWJyYXJ5JyxpbmNvcnJlY3RfbXNnPSdVc2UgbGlicmFyeSB0byBsb2FkIHRoZSBgZ2dwbG90MmAgcGFja2FnZS4nKVxudGVzdF9zdHVkZW50X3R5cGVkKCdsaWJyYXJ5KGdncGxvdDIpJywgbm90X3R5cGVkX21zZz0nTWFrZSBzdXJlIHlvdSBsb2FkIHRoZSBgZ2dwbG90MmAgcGFja2FnZSEnKVxuXG4jIFRlbXBsYXRlIGJhc2VkIG9uIGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy90ZXN0d2hhdC92ZXJzaW9ucy80LjEuMVxuIyBDaGVjayBpZiBzb21ldGhpbmcgaXMgZXhwbGljaXRseSB0eXBlZFxuIyB0ZXN0X3N0dWRlbnRfdHlwZWQoJ2xpYnJhcnkobGF0dGljZSknLCBub3RfdHlwZWRfbXNnPSdNYWtlIHN1cmUgeW91IGxvYWQgdGhlIHBhY2thZ2UnKVxuXG4jIENoZWNrIGlmIGZ1bmN0aW9uIHdhcyB1c2VkIGluIGlucHV0IGNvZGVcbiMgdGVzdF9mdW5jdGlvbignYycsaW5jb3JyZWN0X21zZz0nJykgIFxuXG4jIFJlcXVpcmVzIGFuIG9iamVjdCBgeGAgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgc29sdXRpb25cbiMgdGVzdF9vYmplY3QoXCJ4XCIsaW5jb3JyZWN0X21zZyA9IFwiXCIsdW5kZWZpbmVkX21zZyA9IFwiXCIpICBcblxuIyBSZXF1aXJlcyBhbiBvbmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiBgeGAgaW4gdGhlIHNvbHV0aW9uXG4jIHRlc3RfYW5fb2JqZWN0KFwieFwiLHVuZGVmaW5lZF9tc2c9XCJcIilcblxuIyBDaGVja3MgaWYgb3V0cHV0IG9mIHN0dWRlbnQncyBjb2RlIGNvbnRhaW5zIGdpdmVuIGV2YWx1YXRlZCBleHByZXNzaW9uXG4jIHRlc3Rfb3V0cHV0X2NvbnRhaW5zKFwieFwiLGluY29ycmVjdF9tc2cgPSBcIlwiKVxuXG4jIENoZWNrIGlmIGEgdmVjdG9yIG9mIHByZWRlZmluZWQgb2JqZWN0cyBhcmUgdW5jaGFuZ2VkXG4jIHRlc3RfcHJlZGVmaW5lZF9vYmplY3RzKGMoJ3gnLCd5JyksaW5jb3JyZWN0X21zZz1cIkRvbid0IG9udmVyd3JpdGUgdGhlIHByZWRlZmluZWQgdmFyaWFibGVzXCIpXG5cbiMgQ2hlY2tzIGZvciBhIHJlZ2V4IHBhdHRlcm4gaW4gdHJoZSBvdXRwdXRcbiMgdGVzdF9vdXRwdXRfcmVnZXgocGF0dGVybixmaXhlZD1GLCB0aW1lcz0xLCBpbmNvcnJlY3RfbXNnPScnKVxuXG4jIENhbiBjaGVjayBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbiBhY3Jvc3MgYm90aCBzb2x1dGlvbiBhbmQgc3R1ZGVudCBjb2RlXG4jIHRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJ0eXBlb2YoY29tcGFueV9uYW1lKVwiLCBpbmNvcnJlY3RfbXNnPVwiRGlkIHlvdSBzdG9yZSB0ZXh0dWFsIGRhdGEgaW4gYGNvbXBhbnlfbmFtZWA/XCIpXG5cbnRlc3RfZXJyb3IoKVxuc3VjY2Vzc19tc2coXCJBd2Vzb21lIVwiKVxuXG4jIE90aGVyIGZ1bmN0aW9ucyB0byBub3RlOlxuIyAgICAgLSB0ZXN0X29yKGEsYikgLS0gY2hlY2tzIGlmIGVpdGhlciB0ZXN0IGEgb3IgdGVzdCBiIHBhc3NcbiMgICAgIC0gdGVzdF9nZ3Bsb3QoKSAtLSBjYW4gY2hlY2sgaWYgcGxvdHMgYXJlIGNvcnJlY3RcbiMgICAgIC0gdGVzdF9mdW5jdGlvbigpIC0tIGNhbiBhbHNvIGNoZWNrIGluY2x1ZGVkIHBhcmFtZXRlcnNcbiMgICAgIC0gdGVzdF9sb29wKCkgLS0gY2hlY2tpbmcgZm9yIGFuZCB3aGlsZSBsb29wc1xuIyAgICAgLSB0ZXN0X2xpYnJhcnlfZnVuY3Rpb24oJ3BhY2thZ2UnLCBub3RfY2FsbGVkX21zZz0nJyxpbmNvcnJlY3RfbXNnPScnKVxuIyAgICAgLSB0ZXN0X2lmX2Vsc2UoKSAtLSBjaGVja2luZyBpZiBzdGF0ZW1lbnRzXG4jICAgICAtIHRlc3RfZXhwcmVzc2lvbl9lcnJvcigpIC0tIGNhbiBjaGVjayBpZiBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGRlZmluZWRcbiMgICAgIC0gdGVzdF9vcGVyYXRvcignb3BlcmF0b3InLCksIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfZnVuY3Rpb25fZGVmaW5pdGlvbigpIC0tIHJpZ29yb3VzbHkgY2hlY2sgZGVmaW5lZCBmdW5jdGlvblxuIyAgICAgLSB0ZXN0X2RhdGFfZnJhbWUoKSAtLSBjaGVjayBpZiBkYXRhZnJhbWUgW2NvbHVtbnNdIGFyZSBlcXVpdmFsZW50XG4jICAgICAtIHRlc3RfZnVuY3Rpb25fcmVzdWx0LCB0ZXN0X2V4cHJlc3Npb25fcmVzdWx0In0=

Exercise 5: Making your own function

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImRmIDwtIHJlYWQuY3N2KHRleHQ9XCJndmtleSxkYXRhZGF0ZSxmeWVhcix0aWMsY29ubSxhdCxkcHRjLGx0LG5pXG4zMjQzLDIwMTAxMjMxLDIwMTAsQyxDSVRJR1JPVVAgSU5DLDE5MTM5MDIsODQ0OTY4LDE3NDgxMTMsMTA2MDJcbjMyNDMsMjAxMTEyMzEsMjAxMSxDLENJVElHUk9VUCBJTkMsMTg3Mzg3OCw4NjU5MzYsMTY5NDMwNSwxMTA2N1xuMzI0MywyMDEyMTIzMSwyMDEyLEMsQ0lUSUdST1VQIElOQywxODY0NjYwLDkzMDU2MCwxNjczNjYzLDc1NDFcbjMyNDMsMjAxMzEyMzEsMjAxMyxDLENJVElHUk9VUCBJTkMsMTg4MDM4Miw5NjgyNzMsMTY3NDI0OSwxMzY3M1xuMzI0MywyMDE0MTIzMSwyMDE0LEMsQ0lUSUdST1VQIElOQywxODQyNTMwLDg5OTMzMiwxNjMwNDg1LDczMTNcbjMyNDMsMjAxNTEyMzEsMjAxNSxDLENJVElHUk9VUCBJTkMsMTczMTIxMCw5MDc4ODcsMTUwODExOCwxNzI0MlxuMzI0MywyMDE2MTIzMSwyMDE2LEMsQ0lUSUdST1VQIElOQywxNzkyMDc3LDkyOTQwNiwxNTY1OTM0LDE0OTEyXG4zMjQzLDIwMTcxMjMxLDIwMTcsQyxDSVRJR1JPVVAgSU5DLDE4NDI0NjUsOTU5ODIyLDE2NDA3OTMsLTY3OThcbjExNDYyOCwyMDEwMTIzMSwyMDEwLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTMzMiwzODU2OSw4MzMxMDQsODM1NFxuMTE0NjI4LDIwMTExMjMxLDIwMTEsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsOTIzMjI1LDQ2MTA5LDg1MTM5Niw0NDQyXG4xMTQ2MjgsMjAxMjEyMzEsMjAxMixHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw5Mzg1NTUsNzAxMjQsODYyMzMxLDc0NzVcbjExNDYyOCwyMDEzMTIzMSwyMDEzLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTUwNyw3MDgwNyw4MzI3MTQsODA0MFxuMTE0NjI4LDIwMTQxMjMxLDIwMTQsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsODU2MjQwLDgzMDA4LDc3MzAzOSw4NDc3XG4xMTQ2MjgsMjAxNTEyMzEsMjAxNSxHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw4NjEzOTUsOTc1MTksNzc0MjA4LDYwODNcbjExNDYyOCwyMDE2MTIzMSwyMDE2LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDg2MDE2NSwxMjQwOTgsNzcyNzY2LDczOThcbjExNDYyOCwyMDE3MTIzMSwyMDE3LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxNjc3NiwxMzg2MDQsODMzOTgwLDQyODZcbjI5NjgsMjAxMDEyMzEsMjAxMCxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMTE3NjA1LDkzMDM2OSwxOTQxNDk5LDE3MzcwXG4yOTY4LDIwMTExMjMxLDIwMTEsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjI2NTc5MiwxMTI3ODA2LDIwODIyMTksMTg5NzZcbjI5NjgsMjAxMjEyMzEsMjAxMixKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzU5MTQxLDExOTM1OTMsMjE1NTA3MiwyMTI4NFxuMjk2OCwyMDEzMTIzMSwyMDEzLEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0MTU2ODksMTI4Nzc2NSwyMjA0NTExLDE3OTIzXG4yOTY4LDIwMTQxMjMxLDIwMTQsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjU3MzEyNiwxMzYzNDI3LDIzNDEwNjEsMjE3NjJcbjI5NjgsMjAxNTEyMzEsMjAxNSxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzUxNjk4LDEyNzk3MTUsMjEwNDEyNSwyNDQ0MlxuMjk2OCwyMDE2MTIzMSwyMDE2LEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0OTA5NzIsMTM3NTE3OSwyMjM2NzgyLDI0NzMzXG4yOTY4LDIwMTcxMjMxLDIwMTcsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjUzMzYwMCwxNDQzOTgyLDIyNzc5MDcsMjQ0NDFcblwiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKVxuZGYyIDwtIHJlYWQuY3N2KHRleHQ9XCJndmtleSxkYXRhZGF0ZSxmeWVhcix0aWMsY29ubSxhdCxkcHRjLGx0LG5pXG4zMjQzLDIwMTAxMjMxLDIwMTAsQyxDSVRJR1JPVVAgSU5DLDE5MTM5MDIsODQ0OTY4LDE3NDgxMTMsMTA2MDJcbjMyNDMsMjAxMTEyMzEsMjAxMSxDLENJVElHUk9VUCBJTkMsMTg3Mzg3OCw4NjU5MzYsMTY5NDMwNSwxMTA2N1xuMzI0MywyMDEyMTIzMSwyMDEyLEMsQ0lUSUdST1VQIElOQywxODY0NjYwLDkzMDU2MCwxNjczNjYzLDc1NDFcbjMyNDMsMjAxMzEyMzEsMjAxMyxDLENJVElHUk9VUCBJTkMsMTg4MDM4Miw5NjgyNzMsMTY3NDI0OSwxMzY3M1xuMzI0MywyMDE0MTIzMSwyMDE0LEMsQ0lUSUdST1VQIElOQywxODQyNTMwLDg5OTMzMiwxNjMwNDg1LDczMTNcbjMyNDMsMjAxNTEyMzEsMjAxNSxDLENJVElHUk9VUCBJTkMsMTczMTIxMCw5MDc4ODcsMTUwODExOCwxNzI0MlxuMzI0MywyMDE2MTIzMSwyMDE2LEMsQ0lUSUdST1VQIElOQywxNzkyMDc3LDkyOTQwNiwxNTY1OTM0LDE0OTEyXG4zMjQzLDIwMTcxMjMxLDIwMTcsQyxDSVRJR1JPVVAgSU5DLDE4NDI0NjUsOTU5ODIyLDE2NDA3OTMsLTY3OThcbjExNDYyOCwyMDEwMTIzMSwyMDEwLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTMzMiwzODU2OSw4MzMxMDQsODM1NFxuMTE0NjI4LDIwMTExMjMxLDIwMTEsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsOTIzMjI1LDQ2MTA5LDg1MTM5Niw0NDQyXG4xMTQ2MjgsMjAxMjEyMzEsMjAxMixHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw5Mzg1NTUsNzAxMjQsODYyMzMxLDc0NzVcbjExNDYyOCwyMDEzMTIzMSwyMDEzLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTUwNyw3MDgwNyw4MzI3MTQsODA0MFxuMTE0NjI4LDIwMTQxMjMxLDIwMTQsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsODU2MjQwLDgzMDA4LDc3MzAzOSw4NDc3XG4xMTQ2MjgsMjAxNTEyMzEsMjAxNSxHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw4NjEzOTUsOTc1MTksNzc0MjA4LDYwODNcbjExNDYyOCwyMDE2MTIzMSwyMDE2LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDg2MDE2NSwxMjQwOTgsNzcyNzY2LDczOThcbjExNDYyOCwyMDE3MTIzMSwyMDE3LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxNjc3NiwxMzg2MDQsODMzOTgwLDQyODZcIiwgc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSlcbmxpYnJhcnkoZHBseXIpXG5saWJyYXJ5KG1hZ3JpdHRyKSIsInNhbXBsZSI6IiMgRGVzaWduIGEgZnVuY3Rpb24gKHVzaW5nIGZ1bmN0aW9uKCkpIHRoYXQgZmluZHMgdGhlIGxhcmdlc3QgYmFuayBmcm9tIHRoZSBkYXRhZnJhbWUgdGhhdCB3ZSBoYXZlIGJlZW4gdXNpbmcuICBIZXJlLCBsYXJnZXN0IG1lYW5zIG1vc3QgYXNzZXRzIGluIGFueSB5ZWFyLlxuIyBUaGUgZnVuY3Rpb24gc2hvdWxkIHRha2UgYGRmYCBhcyBpdHMgYXJndW1lbnQsIGFuZCBzaG91bGQgb3V0cHV0IHRoZSBiYW5rIG5hbWUuICBUaGUgbmFtZSBzaG91bGQgYmUgb2YgdGhlIGJhbmsgdGhhdCBoYWQgdGhlIGhpZ2hlc3QgdG90YWwgYXNzZXRzIG9mIGFueSAoYmFuaywgeWVhcikgcGFpcnMuXG4jIGBkcGx5cmAgYW5kIGBtYWdyaXR0cmAgYXJlIGFscmVhZHkgbG9hZGVkLCBmb3IgY29udmVuaWVuY2UuICBZb3UgY2FuIHNvbHZlIHRoaXMgd2l0aCBvciB3aXRob3V0IHRoZXNlIHBhY2thZ2VzLlxuXG5iaWdnZXN0X2JhbmsgPC0gXG5cbiMgTm93LCBsZXQncyB0ZXN0IHRoZSBmdW5jdGlvbiB5b3UgY3JlYXRlZFxuYmlnZ2VzdF9iYW5rKGRmKVxuXG4jRU5EIiwic29sdXRpb24iOiIjIERlc2lnbiBhIGZ1bmN0aW9uICh1c2luZyBmdW5jdGlvbigpKSB0aGF0IGZpbmRzIHRoZSBsYXJnZXN0IGJhbmsgZnJvbSB0aGUgZGF0YWZyYW1lIHRoYXQgd2UgaGF2ZSBiZWVuIHVzaW5nLiAgSGVyZSwgbGFyZ2VzdCBtZWFucyBtb3N0IGFzc2V0cyBpbiBhbnkgeWVhci5cbiMgVGhlIGZ1bmN0aW9uIHNob3VsZCB0YWtlIGBkZmAgYXMgaXRzIGFyZ3VtZW50LCBhbmQgc2hvdWxkIG91dHB1dCB0aGUgYmFuayBuYW1lLiAgVGhlIG5hbWUgc2hvdWxkIGJlIG9mIHRoZSBiYW5rIHRoYXQgaGFkIHRoZSBoaWdoZXN0IHRvdGFsIGFzc2V0cyBvZiBhbnkgKGJhbmssIHllYXIpIHBhaXJzLiAgTmFtZSBpcyBzdG9yZWQgaW4gdGhhdCBkYXRhIGFzIGBjb25tYC5cbiMgYGRwbHlyYCBhbmQgYG1hZ3JpdHRyYCBhcmUgYWxyZWFkeSBsb2FkZWQsIGZvciBjb252ZW5pZW5jZS4gIFlvdSBjYW4gc29sdmUgdGhpcyB3aXRoIG9yIHdpdGhvdXQgdGhlc2UgcGFja2FnZXMuXG5cbmhlYWQoZGYpXG5cbiMgVGhpcyBpcyBhIHNpbXBsZSB3YXkgdG8gZG8gdGhpcyB1c2luZyBgZHBseXJgIGFuZCBgbWFncml0dHJgLlxuIyBUaGVyZSBhcmUgbWFueSBvdGhlciBzb2x1dGlvbnNcbmJpZ2dlc3RfYmFuayA8LSBmdW5jdGlvbihkZikge1xuICBkZiAlPiVcbiAgICBhcnJhbmdlKC1hdCkgJT4lXG4gICAgc2xpY2UoMSkgJT4lXG4gICAgLiRjb25tXG59XG5cbiMgQW5vdGhlciBwb3NzaWJsZSBzb2x1dGlvbiB3b3VsZCBiZTpcbiMgYmlnZ2VzdF9iYW5rIDwtIGZ1bmN0aW9uKGRmKSB7XG4jICAgbSA8LSBtYXgoZGYkYXQpXG4jICAgZGYkY29ubVt3aGljaChkZiRhdCA9PSBtKV1cbiMgfVxuXG4jIE5vdywgbGV0J3MgdGVzdCB0aGUgZnVuY3Rpb24geW91IGNyZWF0ZWRcbmJpZ2dlc3RfYmFuayhkZilcblxuI0VORCIsInNjdCI6InRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJiaWdnZXN0X2JhbmsoZGYpXCIsIGluY29ycmVjdF9tc2c9XCJJdCBhcHBlYXJzIHRoYXQgeW91ciBmdW5jdGlvbiBkb2Vzbid0IG91dHB1dCB0aGUgcmlnaHQgYmFuay5cIilcbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJiaWdnZXN0X2JhbmsoZGYyKVwiLCBpbmNvcnJlY3RfbXNnPVwiSXQgYXBwZWFycyB0aGF0IHlvdXIgZnVuY3Rpb24gZG9lc24ndCBvdXRwdXQgdGhlIGNvcnJlY3QgYW5zd2VyIG9uIG90aGVyIGRhdGEuXCIpXG5cbiMgVGVtcGxhdGUgYmFzZWQgb24gaHR0cHM6Ly93d3cucmRvY3VtZW50YXRpb24ub3JnL3BhY2thZ2VzL3Rlc3R3aGF0L3ZlcnNpb25zLzQuMS4xXG4jIENoZWNrIGlmIHNvbWV0aGluZyBpcyBleHBsaWNpdGx5IHR5cGVkXG4jIHRlc3Rfc3R1ZGVudF90eXBlZCgneCA8LSAyJywgbm90X3R5cGVkX21zZz0nJylcblxuIyBDaGVjayBpZiBmdW5jdGlvbiB3YXMgdXNlZCBpbiBpbnB1dCBjb2RlXG4jIHRlc3RfZnVuY3Rpb24oJ2MnLGluY29ycmVjdF9tc2c9JycpICBcblxuIyBSZXF1aXJlcyBhbiBvYmplY3QgYHhgIHRvIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHNvbHV0aW9uXG4jIHRlc3Rfb2JqZWN0KFwieFwiLGluY29ycmVjdF9tc2cgPSBcIlwiLHVuZGVmaW5lZF9tc2cgPSBcIlwiKSAgXG5cbiMgUmVxdWlyZXMgYW4gb25qZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgYHhgIGluIHRoZSBzb2x1dGlvblxuIyB0ZXN0X2FuX29iamVjdChcInhcIix1bmRlZmluZWRfbXNnPVwiXCIpXG5cbiMgQ2hlY2tzIGlmIG91dHB1dCBvZiBzdHVkZW50J3MgY29kZSBjb250YWlucyBnaXZlbiBldmFsdWF0ZWQgZXhwcmVzc2lvblxuIyB0ZXN0X291dHB1dF9jb250YWlucyhcInhcIixpbmNvcnJlY3RfbXNnID0gXCJcIilcblxuIyBDaGVjayBpZiBhIHZlY3RvciBvZiBwcmVkZWZpbmVkIG9iamVjdHMgYXJlIHVuY2hhbmdlZFxuIyB0ZXN0X3ByZWRlZmluZWRfb2JqZWN0cyhjKCd4JywneScpLGluY29ycmVjdF9tc2c9XCJEb24ndCBvbnZlcndyaXRlIHRoZSBwcmVkZWZpbmVkIHZhcmlhYmxlc1wiKVxuXG4jIENoZWNrcyBmb3IgYSByZWdleCBwYXR0ZXJuIGluIHRyaGUgb3V0cHV0XG4jIHRlc3Rfb3V0cHV0X3JlZ2V4KHBhdHRlcm4sZml4ZWQ9RiwgdGltZXM9MSwgaW5jb3JyZWN0X21zZz0nJylcblxuIyBDYW4gY2hlY2sgYW4gYXJiaXRyYXJ5IGV4cHJlc3Npb24gYWNyb3NzIGJvdGggc29sdXRpb24gYW5kIHN0dWRlbnQgY29kZVxuIyB0ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwidHlwZW9mKGNvbXBhbnlfbmFtZSlcIiwgaW5jb3JyZWN0X21zZz1cIkRpZCB5b3Ugc3RvcmUgdGV4dHVhbCBkYXRhIGluIGBjb21wYW55X25hbWVgP1wiKVxuXG50ZXN0X2Vycm9yKClcbnN1Y2Nlc3NfbXNnKFwiQXdlc29tZSFcIilcblxuIyBPdGhlciBmdW5jdGlvbnMgdG8gbm90ZTpcbiMgICAgIC0gdGVzdF9vcihhLGIpIC0tIGNoZWNrcyBpZiBlaXRoZXIgdGVzdCBhIG9yIHRlc3QgYiBwYXNzXG4jICAgICAtIHRlc3RfZ2dwbG90KCkgLS0gY2FuIGNoZWNrIGlmIHBsb3RzIGFyZSBjb3JyZWN0XG4jICAgICAtIHRlc3RfZnVuY3Rpb24oKSAtLSBjYW4gYWxzbyBjaGVjayBpbmNsdWRlZCBwYXJhbWV0ZXJzXG4jICAgICAtIHRlc3RfbG9vcCgpIC0tIGNoZWNraW5nIGZvciBhbmQgd2hpbGUgbG9vcHNcbiMgICAgIC0gdGVzdF9saWJyYXJ5X2Z1bmN0aW9uKCdwYWNrYWdlJywgbm90X2NhbGxlZF9tc2c9JycsaW5jb3JyZWN0X21zZz0nJylcbiMgICAgIC0gdGVzdF9pZl9lbHNlKCkgLS0gY2hlY2tpbmcgaWYgc3RhdGVtZW50c1xuIyAgICAgLSB0ZXN0X2V4cHJlc3Npb25fZXJyb3IoKSAtLSBjYW4gY2hlY2sgaWYgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBkZWZpbmVkXG4jICAgICAtIHRlc3Rfb3BlcmF0b3IoJ29wZXJhdG9yJywpLCBub3RfY2FsbGVkX21zZz0nJyxpbmNvcnJlY3RfbXNnPScnKVxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uX2RlZmluaXRpb24oKSAtLSByaWdvcm91c2x5IGNoZWNrIGRlZmluZWQgZnVuY3Rpb25cbiMgICAgIC0gdGVzdF9kYXRhX2ZyYW1lKCkgLS0gY2hlY2sgaWYgZGF0YWZyYW1lIFtjb2x1bW5zXSBhcmUgZXF1aXZhbGVudFxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uX3Jlc3VsdCwgdGVzdF9leHByZXNzaW9uX3Jlc3VsdCJ9