1 Introduction

Unlike the plots the base R plots and ggplots that users read passively, interactive plots allow users to interact directly with them by exploring different types of information from different perspectives.

Essentially, interactive data visualization has an advantage over static representations of data in that it offers tools for engaging with the information shown in real time, allowing the end user to see more details, generate new insights and questions, and squeeze more juice out of the available data sets.

2 Strategies for Creating Interactive DataViz

To develop effective interactive maps, charts, and graphs, there are several factors we need to consider when we plan the design stage.

  • Availability of sufficient data available to design an ideal visualization.
  • Tools and skills to make the visualization comprehensible and easy to navigate.
  • Capability of generating valuable insights one can act upon.

Typically, interactive data visualization will be structured around identifying the desired goals, understanding the challenges stemming from the restrictions posed by data sets, and designing a model in which data can be quickly iterated and reviewed.

Once the design concept takes shape, we can move on to complex data modeling aimed at thoroughly charting every piece of data and meta-data involved. Next up is the design of the user interface and the development of core technology which can be achieved with the help of various data visualization tools.

With these steps completed, it’s time to user-test for compatibility, functionality, security, UI, and performance. Put some finishing touches by introducing any improvements that may be required and you’re ready to go live with your target audience.

3 Benefits of Interactive DataViz

Interactive visualizations allow viewers to interface with the information presented in ways not possible with static charts and maps. Interactivity is the way to go especially when dealing with complex data.

Among the benefits of interactive data visualization are:

  • Identifying trends faster – Humans are way better at processing visual data than just plain text. Being able to see and directly rearrange data makes it easier to acquire information and act on it accordingly.

  • Identifying relationships more efficiently – The opportunity to focus on particular metrics allows users to discern cause-and-effect relationships throughout definable time frames.

  • Valuable data storytelling – The presentation of a data story works best with humans when it’s served in a clear, linear fashion. Interactive data visualization allowing you to zoom in and out, highlight relevant information, filter, and change the parameters will lead to a better understanding of the information.

  • Simplifying complex data – A huge data set with many interconnected pieces may at first glance look very chaotic. Adding in interactive controls like zooming and filtering will introduce the much-needed order and generate valuable insights.

Editable data visualizations are extremely useful in that they optimize the way information is shown. Dashboards with long tables, tons of numbers and text simply aren’t as practical. A chart you can engage with allows for a better understanding of whatever topic is being presented due to its ability to group data and create hierarchies.

LS0tDQp0aXRsZTogIldoYXQgSXMgSW50ZXJhY3RpdmUgVmlzdWFsaXphdGlvbj8iDQphdXRob3I6ICJDaGVuZyBQZW5nIg0KZGF0ZTogIldlc3QgQ2hlc3RlciBVbml2ZXJzaXR5ICINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIGZpZ193aWR0aDogNg0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdG9jX2NvbGxhcHNlZDogeWVzDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgc21vb3RoX3Njcm9sbDogdHJ1ZQ0KICAgIHRoZW1lOiByZWFkYWJsZQ0KICAgIGZpZ19oZWlnaHQ6IDQNCi0tLQ0KDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KDQpkaXYjVE9DIGxpIHsNCiAgICBsaXN0LXN0eWxlOm5vbmU7DQogICAgYmFja2dyb3VuZC1jb2xvcjpsaWdodGdyYXk7DQogICAgYmFja2dyb3VuZC1pbWFnZTpub25lOw0KICAgIGJhY2tncm91bmQtcmVwZWF0Om5vbmU7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOw0KICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOw0KICAgIGNvbG9yOiAjNzgwYzBjOw0KfQ0KDQovKiBtb3VzZSBvdmVyIGxpbmsgKi8NCmRpdiNUT0MgYTpob3ZlciB7DQogIGNvbG9yOiByZWQ7DQp9DQoNCi8qIHVudmlzaXRlZCBsaW5rICovDQpkaXYjVE9DIGE6bGluayB7DQogIGNvbG9yOiBibHVlOw0KfQ0KDQoNCg0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDI0cHg7DQogIGNvbG9yOiBEYXJrYmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCiAgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsNCn0NCmg0LmF1dGhvciB7IA0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoNC5kYXRlIHsgDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDEgew0KICAgIGZvbnQtc2l6ZTogMjJweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoMiB7IC8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDMgeyANCiAgICBmb250LXNpemU6IDE1cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQovKiB1bnZpc2l0ZWQgbGluayAqLw0KYTpsaW5rIHsNCiAgY29sb3I6IGdyZWVuOw0KfQ0KDQovKiB2aXNpdGVkIGxpbmsgKi8NCmE6dmlzaXRlZCB7DQogIGNvbG9yOiBncmVlbjsNCn0NCg0KLyogbW91c2Ugb3ZlciBsaW5rICovDQphOmhvdmVyIHsNCiAgY29sb3I6IHJlZDsNCn0NCg0KLyogc2VsZWN0ZWQgbGluayAqLw0KYTphY3RpdmUgew0KICBjb2xvcjogeWVsbG93Ow0KfQ0KDQo8L3N0eWxlPg0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KIyBjb2RlIGNodW5rIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBSIGNvZGUsIHdhcm5pbmdzLCBhbmQgb3V0cHV0IA0KIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuDQpvcHRpb25zKHJlcG9zID0gbGlzdChDUkFOPSJodHRwOi8vY3Jhbi5yc3R1ZGlvLmNvbS8iKSkNCmlmICghcmVxdWlyZSgidGlkeXZlcnNlIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCmlmICghcmVxdWlyZSgia25pdHIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQ0KICAgbGlicmFyeShrbml0cikNCn0NCmlmICghcmVxdWlyZSgiY293cGxvdCIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJjb3dwbG90IikNCiAgIGxpYnJhcnkoY293cGxvdCkNCn0NCmlmICghcmVxdWlyZSgibGF0ZXgyZXhwIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImxhdGV4MmV4cCIpDQogICBsaWJyYXJ5KGxhdGV4MmV4cCkNCn0NCmlmICghcmVxdWlyZSgicGxvdGx5IikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpDQogICBsaWJyYXJ5KHBsb3RseSkNCn0NCmlmICghcmVxdWlyZSgiZ2FwbWluZGVyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImdhcG1pbmRlciIpDQogICBsaWJyYXJ5KGdhcG1pbmRlcikNCn0NCmlmICghcmVxdWlyZSgicG5nIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJwbmciKSAgICAgICAgICAgICAjIEluc3RhbGwgcG5nIHBhY2thZ2UNCiAgICBsaWJyYXJ5KCJwbmciKQ0KfQ0KaWYgKCFyZXF1aXJlKCJSQ3VybCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiUkN1cmwiKSAgICAgICAgICAgICAjIEluc3RhbGwgUkN1cmwgcGFja2FnZQ0KICAgIGxpYnJhcnkoIlJDdXJsIikNCn0NCmlmICghcmVxdWlyZSgiY29sb3VycGlja2VyIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJjb2xvdXJwaWNrZXIiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiY29sb3VycGlja2VyIikNCn0NCmlmICghcmVxdWlyZSgiZ2lmc2tpIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnaWZza2kiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ2lmc2tpIikNCn0NCmlmICghcmVxdWlyZSgibWFnaWNrIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJtYWdpY2siKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgibWFnaWNrIikNCn0NCmlmICghcmVxdWlyZSgiZ3JEZXZpY2VzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnckRldmljZXMiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ3JEZXZpY2VzIikNCn0NCiMjIyBnZ3Bsb3QgYW5kIGV4dGVuc2lvbnMNCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJnZ3Bsb3QyIikNCn0NCmlmICghcmVxdWlyZSgiZ2dhbmltYXRlIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnZ2FuaW1hdGUiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ2dhbmltYXRlIikNCn0NCmlmICghcmVxdWlyZSgiZ2dyaWRnZXMiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImdncmlkZ2VzIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdncmlkZ2VzIikNCn0NCiMga25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiQzovVXNlcnMvNzVDUEVORy9PbmVEcml2ZSAtIFdlc3QgQ2hlc3RlciBVbml2ZXJzaXR5IG9mIFBBL0RvY3VtZW50cyIpDQojIGtuaXRyOjpvcHRzX2tuaXQkc2V0KHJvb3QuZGlyID0gIkM6XFxTVEE0OTBcXHcwNSIpDQoNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUUsICAgDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFKQ0KYGBgDQoNClwNCg0KIyBJbnRyb2R1Y3Rpb24NCg0KVW5saWtlIHRoZSBwbG90cyB0aGUgYmFzZSBSIHBsb3RzIGFuZCBnZ3Bsb3RzIHRoYXQgdXNlcnMgcmVhZCBwYXNzaXZlbHksIGludGVyYWN0aXZlIHBsb3RzIGFsbG93IHVzZXJzIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlbSBieSBleHBsb3JpbmcgZGlmZmVyZW50IHR5cGVzIG9mIGluZm9ybWF0aW9uIGZyb20gZGlmZmVyZW50IHBlcnNwZWN0aXZlcy4gDQoNCkVzc2VudGlhbGx5LCBpbnRlcmFjdGl2ZSBkYXRhIHZpc3VhbGl6YXRpb24gaGFzIGFuIGFkdmFudGFnZSBvdmVyIHN0YXRpYyByZXByZXNlbnRhdGlvbnMgb2YgZGF0YSBpbiB0aGF0IGl0IG9mZmVycyB0b29scyBmb3IgZW5nYWdpbmcgd2l0aCB0aGUgaW5mb3JtYXRpb24gc2hvd24gaW4gcmVhbCB0aW1lLCBhbGxvd2luZyB0aGUgZW5kIHVzZXIgdG8gc2VlIG1vcmUgZGV0YWlscywgZ2VuZXJhdGUgbmV3IGluc2lnaHRzIGFuZCBxdWVzdGlvbnMsIGFuZCBzcXVlZXplIG1vcmUganVpY2Ugb3V0IG9mIHRoZSBhdmFpbGFibGUgZGF0YSBzZXRzLg0KDQoNCiMgU3RyYXRlZ2llcyBmb3IgQ3JlYXRpbmcgSW50ZXJhY3RpdmUgRGF0YVZpeg0KDQpUbyBkZXZlbG9wIGVmZmVjdGl2ZSBpbnRlcmFjdGl2ZSBtYXBzLCBjaGFydHMsIGFuZCBncmFwaHMsIHRoZXJlIGFyZSBzZXZlcmFsIGZhY3RvcnMgd2UgbmVlZCB0byBjb25zaWRlciB3aGVuIHdlIHBsYW4gdGhlIGRlc2lnbiBzdGFnZS4gDQoNCiogQXZhaWxhYmlsaXR5IG9mIHN1ZmZpY2llbnQgZGF0YSBhdmFpbGFibGUgdG8gZGVzaWduIGFuIGlkZWFsIHZpc3VhbGl6YXRpb24uIA0KKiBUb29scyBhbmQgc2tpbGxzIHRvIG1ha2UgdGhlIHZpc3VhbGl6YXRpb24gY29tcHJlaGVuc2libGUgYW5kIGVhc3kgdG8gbmF2aWdhdGUuDQoqIENhcGFiaWxpdHkgb2YgZ2VuZXJhdGluZyB2YWx1YWJsZSBpbnNpZ2h0cyBvbmUgY2FuIGFjdCB1cG9uLg0KDQpUeXBpY2FsbHksIGludGVyYWN0aXZlIGRhdGEgdmlzdWFsaXphdGlvbiB3aWxsIGJlIHN0cnVjdHVyZWQgYXJvdW5kIGlkZW50aWZ5aW5nIHRoZSBkZXNpcmVkIGdvYWxzLCB1bmRlcnN0YW5kaW5nIHRoZSBjaGFsbGVuZ2VzIHN0ZW1taW5nIGZyb20gdGhlIHJlc3RyaWN0aW9ucyBwb3NlZCBieSBkYXRhIHNldHMsIGFuZCBkZXNpZ25pbmcgYSBtb2RlbCBpbiB3aGljaCBkYXRhIGNhbiBiZSBxdWlja2x5IGl0ZXJhdGVkIGFuZCByZXZpZXdlZC4NCg0KT25jZSB0aGUgZGVzaWduIGNvbmNlcHQgdGFrZXMgc2hhcGUsIHdlIGNhbiBtb3ZlIG9uIHRvIGNvbXBsZXggZGF0YSBtb2RlbGluZyBhaW1lZCBhdCB0aG9yb3VnaGx5IGNoYXJ0aW5nIGV2ZXJ5IHBpZWNlIG9mIGRhdGEgYW5kIG1ldGEtZGF0YSBpbnZvbHZlZC4gTmV4dCB1cCBpcyB0aGUgZGVzaWduIG9mIHRoZSB1c2VyIGludGVyZmFjZSBhbmQgdGhlIGRldmVsb3BtZW50IG9mIGNvcmUgdGVjaG5vbG9neSB3aGljaCBjYW4gYmUgYWNoaWV2ZWQgd2l0aCB0aGUgaGVscCBvZiB2YXJpb3VzIGRhdGEgdmlzdWFsaXphdGlvbiB0b29scy4NCg0KV2l0aCB0aGVzZSBzdGVwcyBjb21wbGV0ZWQsIGl04oCZcyB0aW1lIHRvIHVzZXItdGVzdCBmb3IgY29tcGF0aWJpbGl0eSwgZnVuY3Rpb25hbGl0eSwgc2VjdXJpdHksIFVJLCBhbmQgcGVyZm9ybWFuY2UuIFB1dCBzb21lIGZpbmlzaGluZyB0b3VjaGVzIGJ5IGludHJvZHVjaW5nIGFueSBpbXByb3ZlbWVudHMgdGhhdCBtYXkgYmUgcmVxdWlyZWQgYW5kIHlvdeKAmXJlIHJlYWR5IHRvIGdvIGxpdmUgd2l0aCB5b3VyIHRhcmdldCBhdWRpZW5jZS4NCg0KDQojIEJlbmVmaXRzIG9mIEludGVyYWN0aXZlIERhdGFWaXoNCg0KDQpJbnRlcmFjdGl2ZSB2aXN1YWxpemF0aW9ucyBhbGxvdyB2aWV3ZXJzIHRvIGludGVyZmFjZSB3aXRoIHRoZSBpbmZvcm1hdGlvbiBwcmVzZW50ZWQgaW4gd2F5cyBub3QgcG9zc2libGUgd2l0aCBzdGF0aWMgY2hhcnRzIGFuZCBtYXBzLiBJbnRlcmFjdGl2aXR5IGlzIHRoZSB3YXkgdG8gZ28gZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb21wbGV4IGRhdGEuDQoNCkFtb25nIHRoZSBiZW5lZml0cyBvZiBpbnRlcmFjdGl2ZSBkYXRhIHZpc3VhbGl6YXRpb24gYXJlOg0KDQoNCiogKipJZGVudGlmeWluZyB0cmVuZHMgZmFzdGVyKiog4oCTIEh1bWFucyBhcmUgd2F5IGJldHRlciBhdCBwcm9jZXNzaW5nIHZpc3VhbCBkYXRhIHRoYW4ganVzdCBwbGFpbiB0ZXh0LiBCZWluZyBhYmxlIHRvIHNlZSBhbmQgZGlyZWN0bHkgcmVhcnJhbmdlIGRhdGEgbWFrZXMgaXQgZWFzaWVyIHRvIGFjcXVpcmUgaW5mb3JtYXRpb24gYW5kIGFjdCBvbiBpdCBhY2NvcmRpbmdseS4NCg0KDQoqICoqSWRlbnRpZnlpbmcgcmVsYXRpb25zaGlwcyBtb3JlIGVmZmljaWVudGx5Kiog4oCTIFRoZSBvcHBvcnR1bml0eSB0byBmb2N1cyBvbiBwYXJ0aWN1bGFyIG1ldHJpY3MgYWxsb3dzIHVzZXJzIHRvIGRpc2Nlcm4gY2F1c2UtYW5kLWVmZmVjdCByZWxhdGlvbnNoaXBzIHRocm91Z2hvdXQgZGVmaW5hYmxlIHRpbWUgZnJhbWVzLg0KDQoNCiogKipWYWx1YWJsZSBkYXRhIHN0b3J5dGVsbGluZyoqIOKAkyBUaGUgcHJlc2VudGF0aW9uIG9mIGEgZGF0YSBzdG9yeSB3b3JrcyBiZXN0IHdpdGggaHVtYW5zIHdoZW4gaXTigJlzIHNlcnZlZCBpbiBhIGNsZWFyLCBsaW5lYXIgZmFzaGlvbi4gSW50ZXJhY3RpdmUgZGF0YSB2aXN1YWxpemF0aW9uIGFsbG93aW5nIHlvdSB0byB6b29tIGluIGFuZCBvdXQsIGhpZ2hsaWdodCByZWxldmFudCBpbmZvcm1hdGlvbiwgZmlsdGVyLCBhbmQgY2hhbmdlIHRoZSBwYXJhbWV0ZXJzIHdpbGwgbGVhZCB0byBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbmZvcm1hdGlvbi4NCg0KKiAqKlNpbXBsaWZ5aW5nIGNvbXBsZXggZGF0YSoqIOKAkyBBIGh1Z2UgZGF0YSBzZXQgd2l0aCBtYW55IGludGVyY29ubmVjdGVkIHBpZWNlcyBtYXkgYXQgZmlyc3QgZ2xhbmNlIGxvb2sgdmVyeSBjaGFvdGljLiBBZGRpbmcgaW4gaW50ZXJhY3RpdmUgY29udHJvbHMgbGlrZSB6b29taW5nIGFuZCBmaWx0ZXJpbmcgd2lsbCBpbnRyb2R1Y2UgdGhlIG11Y2gtbmVlZGVkIG9yZGVyIGFuZCBnZW5lcmF0ZSB2YWx1YWJsZSBpbnNpZ2h0cy4NCg0KDQpFZGl0YWJsZSBkYXRhIHZpc3VhbGl6YXRpb25zIGFyZSBleHRyZW1lbHkgdXNlZnVsIGluIHRoYXQgdGhleSBvcHRpbWl6ZSB0aGUgd2F5IGluZm9ybWF0aW9uIGlzIHNob3duLiBEYXNoYm9hcmRzIHdpdGggbG9uZyB0YWJsZXMsIHRvbnMgb2YgbnVtYmVycyBhbmQgdGV4dCBzaW1wbHkgYXJlbuKAmXQgYXMgcHJhY3RpY2FsLiBBIGNoYXJ0IHlvdSBjYW4gZW5nYWdlIHdpdGggYWxsb3dzIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXRldmVyIHRvcGljIGlzIGJlaW5nIHByZXNlbnRlZCBkdWUgdG8gaXRzIGFiaWxpdHkgdG8gZ3JvdXAgZGF0YSBhbmQgY3JlYXRlIGhpZXJhcmNoaWVzLiANCg0K