Tableau Assignment: Bank Marketing
Introduction.
For this assignment I chose the dataset “BankMarketingCSV” to draw
insights how marketing campaigns are used and targeted. This dataset
includes multiple variables such as age of participants, account
balances, occupations, education, duration of the marketing campaign and
also how many times a participant was called before the campaign and
called during the marketing campaign. This data was used to create a
dashboard and a story to share specific insights from the data using
Tableau.
library(lubridate)
x <- getURL("https://jessgorr01.github.io/jGorrCV/wk10/BankMarketingCSV.csv")
Banks <- read.csv(text = x)
Now that the data has been subsetted, it is time to create the map in
tableau.
When at the two scatterplots, they show significant insights. First
let’s start with number of contacts before the campaign. This scatter
plot shows that the higher account balances were contacted exponentially
more before marketing campaigns before the lower accounts. This
scatterplot also showed that those with higher educations tended to have
higher account balances. Now looking at the graph for contacts during
the marketing campaign, it also supported this idea.Another insight from
this scatterplot showed that married individuals had higher account
balances, which makes sense as two individuals shared the account.
Moving on to the second story point, which displayed differences in
the categorical variables. Both these bar charts reinforce the
scatterplots. Married accounts have higher balances than the others. In
the education bar chart, those with secondary and Tertiary have higher
account balances than the less educated groups.
Finally the last story point displaces the distribution of two
variables, Age of the participants and duration of the campaign. The
median age for the participants was 35 and the distrubtion for the
duration was scewed right, meaning most of the campains were short.
LS0tDQp0aXRsZTogIkludGVyYWN0aXZlIFRhYmxlYXUgR3JhcGhpY3MgYW5kIERhc2hib2FyZHMiDQphdXRob3I6ICJKZXNzaWNhIEdvcnIiDQpkYXRlOiAiV2VzdCBDaGVzdGVyIFVuaXZlcnNpdHkiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogbm8NCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiByZWFkYWJsZQ0KLS0tDQogICAgICANCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpkaXYjVE9DIGxpIHsNCiAgICBsaXN0LXN0eWxlOm5vbmU7DQogICAgYmFja2dyb3VuZC1pbWFnZTpub25lOw0KICAgIGJhY2tncm91bmQtcmVwZWF0Om5vbmU7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOw0KfQ0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDI0cHg7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoNC5hdXRob3IgeyANCiAgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmg0LmRhdGUgeyANCiAgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6IERhcmtCbHVlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoMSB7IA0KICAgIC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAyMnB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmgyIHsgDQogICAgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCmgzIHsgDQogICAgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE1cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgZm9udC1mYWNlOiBib2xkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQpoNCB7IA0KICAgIC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQogICAvKiBjZW50ZXIgbWFwcyB1c2luZyBjaHVuayBvcHRpb246IGZpZy5hbGlnbj0nY2VudGVyJyAqLw0KLmh0bWwtd2lkZ2V0IHsNCiAgICBtYXJnaW46IGF1dG87DQp9DQo8L3N0eWxlPg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmlmICghcmVxdWlyZSgidGlkeXZlcnNlIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCmlmICghcmVxdWlyZSgia25pdHIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQ0KICAgbGlicmFyeShrbml0cikNCn0NCmlmICghcmVxdWlyZSgic2YiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygic2YiKQ0KICAgbGlicmFyeShzZikNCn0NCmlmICghcmVxdWlyZSgidGVycmEiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygidGVycmEiKQ0KICAgbGlicmFyeSh0ZXJyYSkNCn0NCmlmICghcmVxdWlyZSgicGxvdGx5IikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpDQogICBsaWJyYXJ5KHBsb3RseSkNCn0NCmlmICghcmVxdWlyZSgiZHBseXIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygiZHBseXIiKQ0KICAgbGlicmFyeShkcGx5cikNCn0NCmlmICghcmVxdWlyZSgicG5nIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJwbmciKSAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJwbmciKQ0KfQ0KaWYgKCFyZXF1aXJlKCJzcERhdGEiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInNwRGF0YSIpICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoInNwRGF0YSIpDQp9DQppZiAoIXJlcXVpcmUoImNvbG91cnBpY2tlciIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiY29sb3VycGlja2VyIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImNvbG91cnBpY2tlciIpDQp9DQppZiAoIXJlcXVpcmUoImdpZnNraSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiZ2lmc2tpIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdpZnNraSIpDQp9DQppZiAoIXJlcXVpcmUoIm1hZ2ljayIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibWFnaWNrIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoIm1hZ2ljayIpDQp9DQojaWYgKCFyZXF1aXJlKCJzcERhdGFMYXJnZSIpKSB7DQogIyAgIGluc3RhbGwucGFja2FnZXMoInNwRGF0YUxhcmdlIikgICAgICAgICAgICAgIA0KICAgIyBsaWJyYXJ5KCJzcERhdGFMYXJnZSIpDQojfQ0KIyMjIGdncGxvdCBhbmQgZXh0ZW5zaW9ucw0KaWYgKCFyZXF1aXJlKCJnZ3Bsb3QyIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdncGxvdDIiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJnZ2FuaW1hdGUiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImdnYW5pbWF0ZSIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJnZ2FuaW1hdGUiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJ0bWFwIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJ0bWFwIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoInRtYXAiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJzZiIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygic2YiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgic2YiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJ0aWdyaXMiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInRpZ3JpcyIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJ0aWdyaXMiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJtYXB2aWV3IikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJtYXB2aWV3IikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoIm1hcHZpZXciKQ0KfQ0KaWYgKCFyZXF1aXJlKCJwYW5kZXIiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInBhbmRlciIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJwYW5kZXIiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJsYXR0aWNlIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJsYXR0aWNlIikNCmxpYnJhcnkoImxhdHRpY2UiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJzcCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygic3AiKQ0KbGlicmFyeSgic3AiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJsZWFmbGV0IikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJsZWFmbGV0IikNCmxpYnJhcnkoImxlYWZsZXQiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJsZWFmcG9wIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJsZWFmcG9wIikNCmxpYnJhcnkoImxlYWZwb3AiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJsZWFmZW0iKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImxlYWZlbSIpDQpsaWJyYXJ5KCJsZWFmZW0iKQ0KfQ0KaWYgKCFyZXF1aXJlKCJzcERhdGFMYXJnZSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygic3BEYXRhTGFyZ2UiLCByZXBvcyA9ICJodHRwczovL2dlb2NvbXByLnItdW5pdmVyc2UuZGV2IikNCmxpYnJhcnkoInNwRGF0YUxhcmdlIikNCn0NCmlmICghcmVxdWlyZSgiaHRtbHdpZGdldHMiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImh0bWx3aWRnZXRzIikNCmxpYnJhcnkoImh0bWx3aWRnZXRzIikNCn0NCmlmICghcmVxdWlyZSgibGVhZmxldC5leHRyYXMiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImxlYWZsZXQuZXh0cmFzIikNCmxpYnJhcnkoImxlYWZsZXQuZXh0cmFzIikNCn0NCmlmICghcmVxdWlyZSgiaHRtbHRvb2xzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJodG1sdG9vbHMiKQ0KbGlicmFyeSgiaHRtbHRvb2xzIikNCn0NCmlmKCFyZXF1aXJlKCJwbmciKSl7DQogIGluc3RhbGwucGFja2FnZXMoInBuZyIpDQogIGxpYnJhcnkocG5nKQ0KfQ0KaWYoIXJlcXVpcmUoInZpcmlkaXMiKSl7DQogIGluc3RhbGwucGFja2FnZXMoInZpcmlkaXMiKQ0KICBsaWJyYXJ5KHZpcmlkaXMpDQp9DQppZighcmVxdWlyZSgiZ2dtYXAiKSl7DQogIGluc3RhbGwucGFja2FnZXMoImdnbWFwIikNCiAgbGlicmFyeShnZ21hcCkNCn0NCmlmKCFyZXF1aXJlKCJ3ZWJzaG90Iikpew0KICBpbnN0YWxsLnBhY2thZ2VzKCJ3ZWJzaG90IikNCiAgbGlicmFyeSh3ZWJzaG90KQ0KfQ0KaWYoIXJlcXVpcmUoImh0bWx3aWRnZXRzIikpew0KICBpbnN0YWxsLnBhY2thZ2VzKCJodG1sd2lkZ2V0cyIpDQogIGxpYnJhcnkoaHRtbHdpZGdldHMpDQp9DQppZighcmVxdWlyZSgiYW5pbWF0aW9uIikpew0KICBpbnN0YWxsLnBhY2thZ2VzKCJhbmltYXRpb24iKQ0KICBsaWJyYXJ5KGFuaW1hdGlvbikNCn0NCmlmKCFyZXF1aXJlKCJnaWZza2kiKSl7DQogIGluc3RhbGwucGFja2FnZXMoImdpZnNraSIpDQogIGxpYnJhcnkoZ2lmc2tpKQ0KfQ0KaWYoIXJlcXVpcmUoImh0bWxUYWJsZSIpKXsNCiAgaW5zdGFsbC5wYWNrYWdlcygiaHRtbFRhYmxlIikNCiAgbGlicmFyeShodG1sVGFibGUpDQp9DQppZighcmVxdWlyZSgibWFncml0dHIiKSl7DQogIGluc3RhbGwucGFja2FnZXMoIm1hZ3JpdHRyIikNCiAgbGlicmFyeShtYWdyaXR0cikNCn0NCg0KaWYgKCFyZXF1aXJlKCJSQ3VybCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiUkN1cmwiKSAgICAgICAgICAgICAjIEluc3RhbGwgUkN1cmwgcGFja2FnZQ0KICAgIGxpYnJhcnkoIlJDdXJsIikNCn0NCg0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwgICANCiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBUUlVFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gTkEpDQpgYGANCg0KVGFibGVhdSBBc3NpZ25tZW50OiBCYW5rIE1hcmtldGluZw0KDQojIyBJbnRyb2R1Y3Rpb24uDQoNCg0KRm9yIHRoaXMgYXNzaWdubWVudCBJIGNob3NlIHRoZSBkYXRhc2V0ICJCYW5rTWFya2V0aW5nQ1NWIiB0byBkcmF3IGluc2lnaHRzIGhvdyBtYXJrZXRpbmcgY2FtcGFpZ25zIGFyZSB1c2VkIGFuZCB0YXJnZXRlZC4gVGhpcyBkYXRhc2V0IGluY2x1ZGVzIG11bHRpcGxlIHZhcmlhYmxlcyBzdWNoIGFzIGFnZSBvZiBwYXJ0aWNpcGFudHMsIGFjY291bnQgYmFsYW5jZXMsIG9jY3VwYXRpb25zLCBlZHVjYXRpb24sIGR1cmF0aW9uIG9mIHRoZSBtYXJrZXRpbmcgY2FtcGFpZ24gYW5kIGFsc28gaG93IG1hbnkgdGltZXMgYSBwYXJ0aWNpcGFudCB3YXMgY2FsbGVkIGJlZm9yZSB0aGUgY2FtcGFpZ24gYW5kIGNhbGxlZCBkdXJpbmcgdGhlIG1hcmtldGluZyBjYW1wYWlnbi4gVGhpcyBkYXRhIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGRhc2hib2FyZCBhbmQgYSBzdG9yeSB0byBzaGFyZSBzcGVjaWZpYyBpbnNpZ2h0cyBmcm9tIHRoZSBkYXRhIHVzaW5nIFRhYmxlYXUuDQoNCmBgYHtyLCBmaWcuYWxpZ249J2NlbnRlcid9DQpsaWJyYXJ5KGx1YnJpZGF0ZSkgDQoNCg0KeCA8LSBnZXRVUkwoImh0dHBzOi8vamVzc2dvcnIwMS5naXRodWIuaW8vakdvcnJDVi93azEwL0JhbmtNYXJrZXRpbmdDU1YuY3N2IikNCkJhbmtzIDwtIHJlYWQuY3N2KHRleHQgPSB4KQ0KDQoNCmBgYA0KDQoNCk5vdyB0aGF0IHRoZSBkYXRhIGhhcyBiZWVuIHN1YnNldHRlZCwgaXQgaXMgdGltZSB0byBjcmVhdGUgdGhlIG1hcCBpbiB0YWJsZWF1LiANCg0KPHRhYmxlPg0KPHRyPg0KPHRkPg0KDQo8ZGl2IGNsYXNzPSd0YWJsZWF1UGxhY2Vob2xkZXInIGlkPSd2aXoxNzEyODA0OTkwMzkwJyBzdHlsZT0ncG9zaXRpb246IHJlbGF0aXZlJz48bm9zY3JpcHQ+PGEgaHJlZj0nIyc+PGltZyBhbHQ9J0Rhc2hib2FyZCA0ICcgc3JjPSdodHRwczomIzQ3OyYjNDc7cHVibGljLnRhYmxlYXUuY29tJiM0NztzdGF0aWMmIzQ3O2ltYWdlcyYjNDc7QmEmIzQ3O0JhbmtNYXJrZXRpbmdpbnNpZ2h0c0Rhc2gmIzQ3O0Rhc2hib2FyZDQmIzQ3OzFfcnNzLnBuZycgc3R5bGU9J2JvcmRlcjogbm9uZScgLz48L2E+PC9ub3NjcmlwdD48b2JqZWN0IGNsYXNzPSd0YWJsZWF1Vml6JyAgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPjxwYXJhbSBuYW1lPSdob3N0X3VybCcgdmFsdWU9J2h0dHBzJTNBJTJGJTJGcHVibGljLnRhYmxlYXUuY29tJTJGJyAvPiA8cGFyYW0gbmFtZT0nZW1iZWRfY29kZV92ZXJzaW9uJyB2YWx1ZT0nMycgLz4gPHBhcmFtIG5hbWU9J3NpdGVfcm9vdCcgdmFsdWU9JycgLz48cGFyYW0gbmFtZT0nbmFtZScgdmFsdWU9J0JhbmtNYXJrZXRpbmdpbnNpZ2h0c0Rhc2gmIzQ3O0Rhc2hib2FyZDQnIC8+PHBhcmFtIG5hbWU9J3RhYnMnIHZhbHVlPSdubycgLz48cGFyYW0gbmFtZT0ndG9vbGJhcicgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nc3RhdGljX2ltYWdlJyB2YWx1ZT0naHR0cHM6JiM0NzsmIzQ3O3B1YmxpYy50YWJsZWF1LmNvbSYjNDc7c3RhdGljJiM0NztpbWFnZXMmIzQ3O0JhJiM0NztCYW5rTWFya2V0aW5naW5zaWdodHNEYXNoJiM0NztEYXNoYm9hcmQ0JiM0NzsxLnBuZycgLz4gPHBhcmFtIG5hbWU9J2FuaW1hdGVfdHJhbnNpdGlvbicgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9zdGF0aWNfaW1hZ2UnIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3Bpbm5lcicgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9vdmVybGF5JyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X2NvdW50JyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdsYW5ndWFnZScgdmFsdWU9J2VuLVVTJyAvPjxwYXJhbSBuYW1lPSdmaWx0ZXInIHZhbHVlPSdwdWJsaXNoPXllcycgLz48L29iamVjdD48L2Rpdj4gICAgICAgICANCg0KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndml6MTcxMjgwNDk5MDM5MCcpOyAgICAgICAgICAgICAgICAgICAgdmFyIHZpekVsZW1lbnQgPSBkaXZFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKVswXTsgICAgICAgICAgICAgICAgICAgIGlmICggZGl2RWxlbWVudC5vZmZzZXRXaWR0aCA+IDgwMCApIHsgdml6RWxlbWVudC5zdHlsZS53aWR0aD0nMTAwMHB4Jzt2aXpFbGVtZW50LnN0eWxlLmhlaWdodD0nODI3cHgnO30gZWxzZSBpZiAoIGRpdkVsZW1lbnQub2Zmc2V0V2lkdGggPiA1MDAgKSB7IHZpekVsZW1lbnQuc3R5bGUud2lkdGg9JzEwMDBweCc7dml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9JzgyN3B4Jzt9IGVsc2UgeyB2aXpFbGVtZW50LnN0eWxlLndpZHRoPScxMDAlJzt2aXpFbGVtZW50LnN0eWxlLmhlaWdodD0nMTg3N3B4Jzt9ICAgICAgICAgICAgICAgICAgICAgdmFyIHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgICAgICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQuc3JjID0gJ2h0dHBzOi8vcHVibGljLnRhYmxlYXUuY29tL2phdmFzY3JpcHRzL2FwaS92aXpfdjEuanMnOyAgICAgICAgICAgICAgICAgICAgdml6RWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzY3JpcHRFbGVtZW50LCB2aXpFbGVtZW50KTsgICAgICAgICAgICAgICAgPC9zY3JpcHQ+DQoNCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KDQoNCjx0YWJsZT4NCjx0cj4NCjx0ZD4NCjxkaXYgY2xhc3M9J3RhYmxlYXVQbGFjZWhvbGRlcicgaWQ9J3ZpejE3MTI4MDQ1ODQ3ODUnIHN0eWxlPSdwb3NpdGlvbjogcmVsYXRpdmUnPjxub3NjcmlwdD48YSBocmVmPScjJz48aW1nIGFsdD0nQmFuayBNYXJrZXRpbmcgSW5zaWdodHMgJyBzcmM9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztCYSYjNDc7QmFua01hcmtldGluZ2luc2lnaHRzJiM0NztTdG9yeTEmIzQ3OzFfcnNzLnBuZycgc3R5bGU9J2JvcmRlcjogbm9uZScgLz48L2E+PC9ub3NjcmlwdD48b2JqZWN0IGNsYXNzPSd0YWJsZWF1Vml6JyAgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPjxwYXJhbSBuYW1lPSdob3N0X3VybCcgdmFsdWU9J2h0dHBzJTNBJTJGJTJGcHVibGljLnRhYmxlYXUuY29tJTJGJyAvPiA8cGFyYW0gbmFtZT0nZW1iZWRfY29kZV92ZXJzaW9uJyB2YWx1ZT0nMycgLz4gPHBhcmFtIG5hbWU9J3NpdGVfcm9vdCcgdmFsdWU9JycgLz48cGFyYW0gbmFtZT0nbmFtZScgdmFsdWU9J0JhbmtNYXJrZXRpbmdpbnNpZ2h0cyYjNDc7U3RvcnkxJyAvPjxwYXJhbSBuYW1lPSd0YWJzJyB2YWx1ZT0nbm8nIC8+PHBhcmFtIG5hbWU9J3Rvb2xiYXInIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J3N0YXRpY19pbWFnZScgdmFsdWU9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztCYSYjNDc7QmFua01hcmtldGluZ2luc2lnaHRzJiM0NztTdG9yeTEmIzQ3OzEucG5nJyAvPiA8cGFyYW0gbmFtZT0nYW5pbWF0ZV90cmFuc2l0aW9uJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X3N0YXRpY19pbWFnZScgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9zcGlubmVyJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X292ZXJsYXknIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J2Rpc3BsYXlfY291bnQnIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J2xhbmd1YWdlJyB2YWx1ZT0nZW4tVVMnIC8+PHBhcmFtIG5hbWU9J2ZpbHRlcicgdmFsdWU9J3B1Ymxpc2g9eWVzJyAvPjwvb2JqZWN0PjwvZGl2PiAgICAgICAgICAgICANCg0KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndml6MTcxMjgwNDU4NDc4NScpOyAgICAgICAgICAgICAgICAgICAgdmFyIHZpekVsZW1lbnQgPSBkaXZFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKVswXTsgICAgICAgICAgICAgICAgICAgIHZpekVsZW1lbnQuc3R5bGUud2lkdGg9JzEwMTZweCc7dml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9Jzk5MXB4JzsgICAgICAgICAgICAgICAgICAgIHZhciBzY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7ICAgICAgICAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LnNyYyA9ICdodHRwczovL3B1YmxpYy50YWJsZWF1LmNvbS9qYXZhc2NyaXB0cy9hcGkvdml6X3YxLmpzJzsgICAgICAgICAgICAgICAgICAgIHZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgIDwvc2NyaXB0PiAgIA0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KDQoNCldoZW4gYXQgdGhlIHR3byBzY2F0dGVycGxvdHMsIHRoZXkgc2hvdyBzaWduaWZpY2FudCBpbnNpZ2h0cy4gRmlyc3QgbGV0J3Mgc3RhcnQgd2l0aCBudW1iZXIgb2YgY29udGFjdHMgYmVmb3JlIHRoZSBjYW1wYWlnbi4gVGhpcyBzY2F0dGVyIHBsb3Qgc2hvd3MgdGhhdCB0aGUgaGlnaGVyIGFjY291bnQgYmFsYW5jZXMgd2VyZSBjb250YWN0ZWQgZXhwb25lbnRpYWxseSBtb3JlIGJlZm9yZSBtYXJrZXRpbmcgY2FtcGFpZ25zIGJlZm9yZSB0aGUgbG93ZXIgYWNjb3VudHMuIFRoaXMgc2NhdHRlcnBsb3QgYWxzbyBzaG93ZWQgdGhhdCB0aG9zZSB3aXRoIGhpZ2hlciBlZHVjYXRpb25zIHRlbmRlZCB0byBoYXZlIGhpZ2hlciBhY2NvdW50IGJhbGFuY2VzLiBOb3cgbG9va2luZyBhdCB0aGUgZ3JhcGggZm9yIGNvbnRhY3RzIGR1cmluZyB0aGUgbWFya2V0aW5nIGNhbXBhaWduLCBpdCBhbHNvIHN1cHBvcnRlZCB0aGlzIGlkZWEuQW5vdGhlciBpbnNpZ2h0IGZyb20gdGhpcyBzY2F0dGVycGxvdCBzaG93ZWQgdGhhdCBtYXJyaWVkIGluZGl2aWR1YWxzIGhhZCBoaWdoZXIgYWNjb3VudCBiYWxhbmNlcywgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdHdvIGluZGl2aWR1YWxzIHNoYXJlZCB0aGUgYWNjb3VudC4NCg0KTW92aW5nIG9uIHRvIHRoZSBzZWNvbmQgc3RvcnkgcG9pbnQsIHdoaWNoIGRpc3BsYXllZCBkaWZmZXJlbmNlcyBpbiB0aGUgY2F0ZWdvcmljYWwgdmFyaWFibGVzLiBCb3RoIHRoZXNlIGJhciBjaGFydHMgcmVpbmZvcmNlIHRoZSBzY2F0dGVycGxvdHMuIE1hcnJpZWQgYWNjb3VudHMgaGF2ZSBoaWdoZXIgYmFsYW5jZXMgdGhhbiB0aGUgb3RoZXJzLiBJbiB0aGUgZWR1Y2F0aW9uIGJhciBjaGFydCwgdGhvc2Ugd2l0aCBzZWNvbmRhcnkgYW5kIFRlcnRpYXJ5IGhhdmUgaGlnaGVyIGFjY291bnQgYmFsYW5jZXMgdGhhbiB0aGUgbGVzcyBlZHVjYXRlZCBncm91cHMuDQoNCkZpbmFsbHkgdGhlIGxhc3Qgc3RvcnkgcG9pbnQgZGlzcGxhY2VzIHRoZSBkaXN0cmlidXRpb24gb2YgdHdvIHZhcmlhYmxlcywgQWdlIG9mIHRoZSBwYXJ0aWNpcGFudHMgYW5kIGR1cmF0aW9uIG9mIHRoZSBjYW1wYWlnbi4gVGhlIG1lZGlhbiBhZ2UgZm9yIHRoZSBwYXJ0aWNpcGFudHMgd2FzIDM1IGFuZCB0aGUgZGlzdHJ1YnRpb24gZm9yIHRoZSBkdXJhdGlvbiB3YXMgc2Nld2VkIHJpZ2h0LCBtZWFuaW5nIG1vc3Qgb2YgdGhlIGNhbXBhaW5zIHdlcmUgc2hvcnQuDQoNCg==