Prelude

In the social media era, everybody publishes whatever they want. Fake news websites are widely common, publishing lies and fabricated news. Far-right politicians in the post-truth era appeal to emotions and impose personal views; they hide the truth and convince people of what is untrue.

Where do mainstream media organisations stand in the post-truth era? How do they maintain people’s trust, identity, credibility and originality?

Now i would like to analyse this mess we are in as a society, and may be try to put forth few ideas of what can we do to solve this, but before that i need you to get comfortable with few terms/ideas that will appear throughout this analysis.

1.Figures & ground

When a figure or “positive space” (e.g., a human form, or a letter, or a still life is drawn inside a frame, an unavoidable consequence is that its complementary shape-also called the “ground”, or “background”, or “negative space”-has also been drawn. In most drawings, however, this figure ground relationship plays little role. The artist is much less interested in ground than in the figure. But sometimes, an artist will take interest in ground as well.

There are beautiful alphabets which play with this figure-ground distinction. A message written in such an alphabet is shown below. At first it looks like a collection of somewhat random blobs, but if you step back ways and stare at it for a while, all of a sudden, you will see three letters appear in this ..

figure 1

figure 1

now take few minutes and read this overview about figures & grounds.

2.Fake news

If you don’t read newspaper you are uninformed, but if you read you are misinformed - denzel washington

As a society have we failed on how to think about Data and information ?
read this

3.Signal to noise ratio

Signal to noise ratio (SNR) is a measure used in electrical engineering that compares the level of a desired signal to the level of background noise. It is defined as the ratio of signal power to the noise power, often expressed in decibels.

\(SNR = \frac {P_{Signal}}{P_{Noise}}\)

read more about it here

interlude : What follows below is a way of how i might approach this complex problem, and i will try to convey of how I as a data scientist working at KSF Media (Maybe ?) might try to solve this mess and on a short note I might take an initiative and work with my prospective colleagues towards fixing the democracy and maybe our awesome team might even get a nobel award while we’re at it as teased in this video.

Now that you know about these terms, let’s dive and analyse the situation.
This will be a bit lengthy but i promise to keep it interesting, so readon…
This analysis will be divided into two parts where i discuss the problem and some possible solutions.

Part I

The problem of fake news

Problem description and objectives

Fake news detection is an important and complex area for potential application of data mining techniques given the economic and social consequences that are usually associated with these illegal, not so democratic, unethical activities. From the perspective of data analysis, Fake news are usually associated with unusual observations as these are activities that are supposed to be deviations from the norm. These deviations from normal behavior are frequently known as outliers in several data analysis disciplines.

In effect, a standard definition of an outlier is that it is an observation which deviates so much from other observations as to arouse suspicions that it was generated by a different mechanism" (Hawkins, 1980).

But with the proliferation of more and more social media ,It has become rather hard to define what is an outlier (with respect to Fake news) and this gets even messier when you look closely into the actual data ,and realise how something like a facebook could be misused to ramify the effects of this problem ,as evident by the recent presidential election in USA.

Now how do we solve this serious issue ?

well now I’d like you to step back and see this issue from the perspective of a ‘Figure and ground’.

In a perfect ideal world we should have had the real news as a Figure & the Fake news as a Background but in reality those two have switched places and in effect our perception has been manipulated, and we have truly faild to seperate the ‘positive space’ (or the figure ) from the ‘Negative space’ (or the background).

KSF Media’s objective here should be to somehow seperate these spaces and provide a rich, true content to it’s customers, and as a team we can do this .by doing so we can possibly expand our reach as a company and inturn attract more readers.

Now that we have defined our problem and our objective, The data scientists at KSF (I and my awesome colleague’s) can just do dive in and solve this.

Part II

Possible solutions to counter the fake news.

My personal recommendation would be to look for spam posting behavior, build reputations for specific websites, and aggregate user feedback on the veracity of information. Wikipedia can probably teach us a lot about how to do the latter.

AI can’t evaluate a specific claim as being correct or not. For example, if someone posts on social media, “Call to participate in a survey organized by obama, modern AI is not able to figure out how to investigate that claim and figure out if it is true or false. A human would know to check obama’s website for an announcement of the survey, run a web search looking for an announcement, or do a reverse phone lookup to see if the number actually belongs to obama. A human could also speculate about reasons why someone would make the false claim: maybe someone wants to swamp obama’s phone line with calls responding to a survey that doesn’t exist, maybe the phone number doesn’t belong to obama and the poster wants to swamp a 3rd party’s phone line with calls, or maybe the poster owns the number and wants to collect a list of valid phone numbers to use for telemarketing. AI is not yet sophisticated enough to reason about motives in this way.

AI can be used in the fight against fake news, but mostly as a tool for picking up on other signals, the way that spam detectors work.

and we awesome KSF folks can build algorithms which can do some of the tasks mentioned above

Defining the data mining tasks

The main goal of this application is to use data mining to provide guidance in the task of deciding which news reports should be considered for inspection as a result of strong suspicion of being fake after giving it a first pass into our system for further evaluation before we publish it in anything associated with KSF. Given the limited and varying resources available for this inspection task, such guidance should take the form of a ranking of Fake probability.

Two ways of approaching this might be

Linguistic approach

Inspiration from Wittgenstein
How do human beings communicate ideas between one another ?
His answer - Language works by triggering within us pictures of how things are in the world, words enable us to make pictures of facts

Language is the key, to solve most of the problems and with various Natural language processing approaches.

Most liars use their language strategically to avoid being caught. In spite of the attempt to control what they are saying, language “leakage” occurs with certain verbal aspects that are hard to monitor such as frequencies and patterns of pronoun, conjunction, and negative emotion word usage (Feng & Hirst, 2013). The goal in the linguistic approach is to look for such instances of leakage or, so called “predictive deception cues” found in the content of a message.

  1. Data representation : The most simplest approach would be to build a bag of words model and work from there
  2. Deep syntax : Deep syntax analysis is implemented through Probability Context Free Grammars (PCFG). Sentences are transformed to a set of rewrite rules (a parse tree) to describe syntax structure, for example noun and verb phrases, which are in turn rewritten by their syntactic constituent parts (Feng, Banerjee & Choi, 2012). The final set of rewrites produces a parse tree with a certain probability assigned. This method is used to distinguish rule categories (lexicalized, unlexicalized, parent nodes, etc.) for deception detection with 85-91% accuracy (depending on the rule category used) (Feng et al., 2012). Third-party tools, such as the Stanford Parser (de Marneffe, MacCartney, Manning, 2006; Rahangdale & Agrawa, 2014), AutoSlog-TS syntax analyzer (Oraby, Reed, Compton, Riloff, Walker, & Whittaker, 2015) and others assist in the automation.
  3. Sementic analysis : As an alternative to deception cues, signals of truthfulness can also be analyzed and achieved by characterizing the degree of compatibility between a personal experience (e.g., a hotel review) as compared to a content “profile” derived from a collection of analogous data. This approach extends the n-gram plus syntax model by incorporating profile compatibility features, showing the addition significantly improves classification performance. (Feng & Hirst, 2013). The intuition is that a deceptive writer with no experience with an event or object (e.g., never visited the hotel in question) may include contradictions or omission of facts present in profiles on similar topics. For product reviews, a writer of a truthful review is more likely to make similar comments about aspects of the product as other truthful reviewers. Extracted content from key words consists of attribute:descriptor pair. By aligning profiles and the description of the writer’s personal experience, veracity assessment is a function of the compatibility scores: 1.Compatibility with the existence of some distinct aspect (eg. an art museum near the hotel); 2. Compatibility with the description of some general aspect, such as location or service. Prediction of falsehood is shown to be approximately 91% accurate with this method.
  4. Classifiers : Various classifiers such as SVM or naive bayes classifiers can be used to solve this.
  5. Rhetorical structure and Discourse analysis : At the discourse level, deception cues present themselves both in CMC communication and in news content. A description of discourse can be achieved through the Rhetorical Structure Theory (RST) analytic framework, that identifies instances of rhetoric relations between linguistic elements. Systematic differences between deceptive and truthful messages in terms of their coherence and structure has been combined with a Vector Space Model (VSM) that assesses each message’s position in multi-dimensional RST space with respect to its distance to truth and deceptive centers (Rubin & Lukoianova, 2014). At this level of linguistic analysis, the prominent use of certain rhetorical relations can be indicative of deception. Tools to automate rhetorical classification are becoming available, although not yet employed in the context of veracity assessment.

Network approach

Innovative and varied, using network properties and behavior are ways to complement content-based approaches that rely on deceptive language and leakage cues to predict deception. As real-time content on current events is increasingly proliferated through micro-blogging applications such as Twitter, deception analysis tools are all the more important.

  1. Linked data : The inherently structured data network of entities is connected through a predicate relationship. Fact checking can be effectively reduced to a simple network analysis problem: the computation of the simple shortest path. Queries based on extracted fact statements are assigned semantic proximity as a function of the transitive relationship between subject and predicate via other nodes. The closer the nodes, the higher the likelihood that a particular subject-predicate-object statement is true.
  2. Social network behaviour

Closing notes

ufff…..that was long…
now i’d like to thank you for taking your time to read this quick conceptual level analysis of what i might offer , in a sense this is a representation of the way i approach a problem.and I tend to perform good when surrounded by talented induvidals in a work environment and the possibility of working at you’r organisation excites me deeply.

I belive that a company is defined by its people and i really like to be involved in your company so this was kind of my pitch, and i also have a view that when you hire people you must hire the best,as such I think I might be able to offer something new to your organisation and you must seriously consider my application.

So moving forward I hope to be a part of the formal interview, where you can assess my technical skills .

LS0tDQp0aXRsZTogIlBlcmNlcHRpb24sIFdpdHRnZW5zdGVpbiwgTmV3cyAmIERhdGEgU2NpZW5jZSINCmF1dGhvcjogIkJoYXJhdGggZyBzIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOiBkZWZhdWx0DQotLS0NCiNQcmVsdWRlDQoNCkluIHRoZSBzb2NpYWwgbWVkaWEgZXJhLCBldmVyeWJvZHkgcHVibGlzaGVzIHdoYXRldmVyIHRoZXkgd2FudC4gRmFrZSBuZXdzIHdlYnNpdGVzIGFyZSB3aWRlbHkgY29tbW9uLCBwdWJsaXNoaW5nIGxpZXMgYW5kIGZhYnJpY2F0ZWQgbmV3cy4gRmFyLXJpZ2h0IHBvbGl0aWNpYW5zIGluIHRoZSBwb3N0LXRydXRoIGVyYSBhcHBlYWwgdG8gZW1vdGlvbnMgYW5kIGltcG9zZSBwZXJzb25hbCB2aWV3czsgdGhleSBoaWRlIHRoZSB0cnV0aCBhbmQgY29udmluY2UgcGVvcGxlIG9mIHdoYXQgaXMgdW50cnVlLiAgDQoNCldoZXJlIGRvIG1haW5zdHJlYW0gbWVkaWEgb3JnYW5pc2F0aW9ucyBzdGFuZCBpbiB0aGUgW3Bvc3QtdHJ1dGggZXJhXShodHRwczovL2dvby5nbC9PRjRydHUpPyBIb3cgZG8gdGhleSBtYWludGFpbiBwZW9wbGUncyB0cnVzdCwgaWRlbnRpdHksIGNyZWRpYmlsaXR5IGFuZCBvcmlnaW5hbGl0eT8gIA0KDQpOb3cgaSB3b3VsZCBsaWtlIHRvIGFuYWx5c2UgdGhpcyBtZXNzIHdlIGFyZSBpbiBhcyBhIHNvY2lldHksIGFuZCBtYXkgYmUgdHJ5IHRvIHB1dCBmb3J0aCBmZXcgaWRlYXMgb2Ygd2hhdCBjYW4gd2UgZG8gdG8gc29sdmUgdGhpcywgYnV0IGJlZm9yZSB0aGF0IGkgbmVlZCB5b3UgdG8gZ2V0IGNvbWZvcnRhYmxlIHdpdGggZmV3IHRlcm1zL2lkZWFzIHRoYXQgd2lsbCBhcHBlYXIgdGhyb3VnaG91dCB0aGlzIGFuYWx5c2lzLiAgDQoNCiMjIzEuW0ZpZ3VyZXMgJiBncm91bmRdKGh0dHBzOi8vZ29vLmdsL1RIcVhNZykNCg0KV2hlbiBhIGZpZ3VyZSBvciAicG9zaXRpdmUgc3BhY2UiIChlLmcuLCBhIGh1bWFuIGZvcm0sIG9yIGEgbGV0dGVyLCBvciBhIHN0aWxsIGxpZmUgaXMgZHJhd24gaW5zaWRlIGEgZnJhbWUsIGFuIHVuYXZvaWRhYmxlIGNvbnNlcXVlbmNlIGlzIHRoYXQgaXRzIGNvbXBsZW1lbnRhcnkgc2hhcGUtYWxzbyBjYWxsZWQgdGhlICJncm91bmQiLCBvcg0KImJhY2tncm91bmQiLCBvciAibmVnYXRpdmUgc3BhY2UiLWhhcyBhbHNvIGJlZW4gZHJhd24uIEluIG1vc3QgZHJhd2luZ3MsIGhvd2V2ZXIsIHRoaXMNCmZpZ3VyZSBncm91bmQgcmVsYXRpb25zaGlwIHBsYXlzIGxpdHRsZSByb2xlLiBUaGUgYXJ0aXN0IGlzIG11Y2ggbGVzcyBpbnRlcmVzdGVkIGluIGdyb3VuZCB0aGFuDQppbiB0aGUgZmlndXJlLiBCdXQgc29tZXRpbWVzLCBhbiBhcnRpc3Qgd2lsbCB0YWtlIGludGVyZXN0IGluIGdyb3VuZCBhcyB3ZWxsLiAgDQoNClRoZXJlIGFyZSBiZWF1dGlmdWwgYWxwaGFiZXRzIHdoaWNoIHBsYXkgd2l0aCB0aGlzIGZpZ3VyZS1ncm91bmQgZGlzdGluY3Rpb24uIEENCm1lc3NhZ2Ugd3JpdHRlbiBpbiBzdWNoIGFuIGFscGhhYmV0IGlzIHNob3duIGJlbG93LiBBdCBmaXJzdCBpdCBsb29rcyBsaWtlIGEgY29sbGVjdGlvbiBvZg0Kc29tZXdoYXQgcmFuZG9tIGJsb2JzLCBidXQgaWYgeW91IHN0ZXAgYmFjayB3YXlzIGFuZCBzdGFyZSBhdCBpdCBmb3IgYSB3aGlsZSwgYWxsIG9mIGENCnN1ZGRlbiwgeW91IHdpbGwgc2VlIHRocmVlIGxldHRlcnMgYXBwZWFyIGluIHRoaXMgLi4gIA0KDQohW2ZpZ3VyZSAxIF0oRzovY29kZXgvUi9CYWNoLCBmYWtlLW5ld3MsIEtTRi1tZWRpYS9zY2FuLTgyLmpwZykNCg0KDQpub3cgdGFrZSBmZXcgbWludXRlcyBhbmQgcmVhZCB0aGlzIG92ZXJ2aWV3IGFib3V0IFtmaWd1cmVzICYgZ3JvdW5kc10oaHR0cHM6Ly9nb28uZ2wvVEhxWE1nKS4gICANCg0KIyMjMi5GYWtlIG5ld3MNCg0KPiAqKklmIHlvdSBkb24ndCByZWFkIG5ld3NwYXBlciB5b3UgYXJlIHVuaW5mb3JtZWQsIGJ1dCBpZiB5b3UgcmVhZCB5b3UgYXJlIG1pc2luZm9ybWVkKiogLSBbZGVuemVsIHdhc2hpbmd0b25dKGh0dHBzOi8vZ29vLmdsL25Id3h3VCkgIA0KDQpBcyBhIHNvY2lldHkgaGF2ZSB3ZSBmYWlsZWQgb24gaG93IHRvIHRoaW5rIGFib3V0IERhdGEgYW5kIGluZm9ybWF0aW9uID8gIA0KW3JlYWQgdGhpc10oaHR0cHM6Ly9nb28uZ2wvZWxZMUc1KSAgDQoNCg0KIyMjMy5TaWduYWwgdG8gbm9pc2UgcmF0aW8gIA0KDQpTaWduYWwgdG8gbm9pc2UgcmF0aW8gKFNOUikgIGlzIGEgbWVhc3VyZSB1c2VkIGluIGVsZWN0cmljYWwgZW5naW5lZXJpbmcgdGhhdCBjb21wYXJlcyB0aGUgbGV2ZWwgb2YgYSBkZXNpcmVkIHNpZ25hbCB0byB0aGUgbGV2ZWwgb2YgYmFja2dyb3VuZCBub2lzZS4gSXQgaXMgZGVmaW5lZCBhcyB0aGUgcmF0aW8gb2Ygc2lnbmFsIHBvd2VyIHRvIHRoZSBub2lzZSBwb3dlciwgb2Z0ZW4gZXhwcmVzc2VkIGluIGRlY2liZWxzLiAgDQoNCiAkU05SID0gXGZyYWMge1Bfe1NpZ25hbH19e1Bfe05vaXNlfX0kDQogDQpyZWFkIG1vcmUgYWJvdXQgaXQgW2hlcmVdKGh0dHBzOi8vZ29vLmdsL1hYelVTMSkgIA0KDQoNCiMjIyNpbnRlcmx1ZGUgOiAgV2hhdCBmb2xsb3dzIGJlbG93IGlzIGEgd2F5IG9mIGhvdyBpIG1pZ2h0IGFwcHJvYWNoIHRoaXMgY29tcGxleCBwcm9ibGVtLCBhbmQgaSB3aWxsIHRyeSB0byBjb252ZXkgb2YgaG93IEkgYXMgYSBkYXRhIHNjaWVudGlzdCB3b3JraW5nIGF0IEtTRiBNZWRpYSAoTWF5YmUgPykgbWlnaHQgdHJ5IHRvIHNvbHZlIHRoaXMgbWVzcyBhbmQgb24gYSBzaG9ydCBub3RlIEkgbWlnaHQgdGFrZSBhbiBpbml0aWF0aXZlIGFuZCB3b3JrIHdpdGggbXkgcHJvc3BlY3RpdmUgY29sbGVhZ3VlcyB0b3dhcmRzIGZpeGluZyB0aGUgZGVtb2NyYWN5IGFuZCBtYXliZSBvdXIgYXdlc29tZSB0ZWFtIG1pZ2h0IGV2ZW4gZ2V0IGEgbm9iZWwgYXdhcmQgd2hpbGUgd2UncmUgYXQgaXQgYXMgdGVhc2VkIGluIHRoaXMgW3ZpZGVvXShodHRwczovL2dvby5nbC9pQXpIWkYpLiAgICANCg0KDQpOb3cgdGhhdCB5b3Uga25vdyBhYm91dCB0aGVzZSB0ZXJtcywgbGV0J3MgZGl2ZSBhbmQgYW5hbHlzZSB0aGUgc2l0dWF0aW9uLiAgDQpUaGlzIHdpbGwgYmUgYSBiaXQgbGVuZ3RoeSBidXQgaSBwcm9taXNlIHRvIGtlZXAgaXQgaW50ZXJlc3RpbmcsIHNvIHJlYWRvbi4uLiAgDQpUaGlzIGFuYWx5c2lzIHdpbGwgYmUgZGl2aWRlZCBpbnRvIHR3byBwYXJ0cyB3aGVyZSBpIGRpc2N1c3MgdGhlIHByb2JsZW0gYW5kIHNvbWUgcG9zc2libGUgc29sdXRpb25zLiAgDQoNCiNQYXJ0IEkgIA0KDQojI1RoZSBwcm9ibGVtIG9mIGZha2UgbmV3cyAgDQoNCiMjI1Byb2JsZW0gZGVzY3JpcHRpb24gYW5kIG9iamVjdGl2ZXMgIA0KDQpGYWtlIG5ld3MgZGV0ZWN0aW9uIGlzIGFuIGltcG9ydGFudCBhbmQgY29tcGxleCBhcmVhIGZvciBwb3RlbnRpYWwgYXBwbGljYXRpb24gb2YgZGF0YSBtaW5pbmcNCnRlY2huaXF1ZXMgZ2l2ZW4gdGhlIGVjb25vbWljIGFuZCBzb2NpYWwgY29uc2VxdWVuY2VzIHRoYXQgYXJlIHVzdWFsbHkgYXNzb2NpYXRlZA0Kd2l0aCB0aGVzZSBpbGxlZ2FsLCBub3Qgc28gZGVtb2NyYXRpYywgdW5ldGhpY2FsIGFjdGl2aXRpZXMuIEZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGRhdGEgYW5hbHlzaXMsIEZha2UgbmV3cyBhcmUgdXN1YWxseSBhc3NvY2lhdGVkIHdpdGggdW51c3VhbCBvYnNlcnZhdGlvbnMgYXMgdGhlc2UgYXJlIGFjdGl2aXRpZXMgdGhhdA0KYXJlIHN1cHBvc2VkIHRvIGJlIGRldmlhdGlvbnMgZnJvbSB0aGUgbm9ybS4gVGhlc2UgZGV2aWF0aW9ucyBmcm9tIG5vcm1hbA0KYmVoYXZpb3IgYXJlIGZyZXF1ZW50bHkga25vd24gYXMgb3V0bGllcnMgaW4gc2V2ZXJhbCBkYXRhIGFuYWx5c2lzIGRpc2NpcGxpbmVzLiAgDQoNCj4gSW4gZWZmZWN0LCBhIHN0YW5kYXJkIGRlZmluaXRpb24gb2YgYW4gb3V0bGllciBpcyB0aGF0IGl0IGlzIGFuIG9ic2VydmF0aW9uIHdoaWNoDQpkZXZpYXRlcyBzbyBtdWNoIGZyb20gb3RoZXIgb2JzZXJ2YXRpb25zIGFzIHRvIGFyb3VzZSBzdXNwaWNpb25zIHRoYXQgaXQgd2FzDQpnZW5lcmF0ZWQgYnkgYSBkaWZmZXJlbnQgbWVjaGFuaXNtIiAoSGF3a2lucywgMTk4MCkuICANCg0KQnV0IHdpdGggdGhlIHByb2xpZmVyYXRpb24gb2YgbW9yZSBhbmQgbW9yZSBzb2NpYWwgbWVkaWEgLEl0IGhhcyBiZWNvbWUgcmF0aGVyIGhhcmQgdG8gZGVmaW5lIHdoYXQgaXMgYW4gb3V0bGllciAod2l0aCByZXNwZWN0IHRvICBGYWtlIG5ld3MpIGFuZCB0aGlzIGdldHMgZXZlbiBtZXNzaWVyIHdoZW4geW91IGxvb2sgY2xvc2VseSBpbnRvIHRoZSBhY3R1YWwgZGF0YSAsYW5kIHJlYWxpc2UgaG93IHNvbWV0aGluZyBsaWtlIGEgZmFjZWJvb2sgY291bGQgYmUgbWlzdXNlZCB0byByYW1pZnkgdGhlIGVmZmVjdHMgb2YgdGhpcyBwcm9ibGVtICxhcyBldmlkZW50IGJ5IHRoZSByZWNlbnQgcHJlc2lkZW50aWFsIGVsZWN0aW9uIGluIFVTQS4gIA0KDQpOb3cgaG93IGRvIHdlIHNvbHZlIHRoaXMgc2VyaW91cyBpc3N1ZSA/ICANCg0Kd2VsbCBub3cgSSdkIGxpa2UgeW91IHRvIHN0ZXAgYmFjayBhbmQgc2VlIHRoaXMgaXNzdWUgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYSAnRmlndXJlIGFuZCBncm91bmQnLiAgDQoNCkluIGEgcGVyZmVjdCBpZGVhbCB3b3JsZCB3ZSBzaG91bGQgaGF2ZSBoYWQgdGhlIDxtYXJrPnJlYWwgbmV3czwvbWFyaz4gYXMgYSA8bWFyaz5GaWd1cmU8L21hcms+ICYgdGhlIDxtYXJrPkZha2UgbmV3cyA8L21hcms+IGFzIGEgPG1hcms+QmFja2dyb3VuZDwvbWFyaz4gYnV0IGluIHJlYWxpdHkgdGhvc2UgdHdvICBoYXZlIHN3aXRjaGVkIHBsYWNlcyBhbmQgaW4gZWZmZWN0IG91ciBwZXJjZXB0aW9uIGhhcyBiZWVuIG1hbmlwdWxhdGVkLCBhbmQgd2UgaGF2ZSB0cnVseSBmYWlsZCB0byBzZXBlcmF0ZSB0aGUgJ3Bvc2l0aXZlIHNwYWNlJyAob3IgdGhlIGZpZ3VyZSApIGZyb20gdGhlICdOZWdhdGl2ZSBzcGFjZScgKG9yIHRoZSBiYWNrZ3JvdW5kKS4gIA0KDQpLU0YgTWVkaWEncyBvYmplY3RpdmUgaGVyZSBzaG91bGQgYmUgdG8gIHNvbWVob3cgc2VwZXJhdGUgdGhlc2Ugc3BhY2VzIGFuZCBwcm92aWRlIGEgcmljaCwgdHJ1ZSBjb250ZW50IHRvIGl0J3MgY3VzdG9tZXJzLCBhbmQgYXMgYSB0ZWFtIHdlIGNhbiBkbyB0aGlzIC5ieSBkb2luZyBzbyB3ZSBjYW4gcG9zc2libHkgZXhwYW5kIG91ciByZWFjaCBhcyBhIGNvbXBhbnkgYW5kIGludHVybiBhdHRyYWN0IG1vcmUgcmVhZGVycy4gIA0KDQpOb3cgdGhhdCB3ZSBoYXZlIGRlZmluZWQgb3VyIHByb2JsZW0gYW5kIG91ciBvYmplY3RpdmUsIFRoZSBkYXRhIHNjaWVudGlzdHMgYXQgS1NGIChJIGFuZCBteSBhd2Vzb21lIGNvbGxlYWd1ZSdzKSBjYW4ganVzdCBkbyBkaXZlIGluIGFuZCBzb2x2ZSB0aGlzLiAgDQoNCiNQYXJ0IElJDQoNCiMjUG9zc2libGUgc29sdXRpb25zIHRvIGNvdW50ZXIgdGhlIGZha2UgbmV3cy4NCg0KTXkgcGVyc29uYWwgcmVjb21tZW5kYXRpb24gd291bGQgYmUgdG8gbG9vayBmb3Igc3BhbSBwb3N0aW5nIGJlaGF2aW9yLCBidWlsZCByZXB1dGF0aW9ucyBmb3Igc3BlY2lmaWMgd2Vic2l0ZXMsIGFuZCBhZ2dyZWdhdGUgdXNlciBmZWVkYmFjayBvbiB0aGUgdmVyYWNpdHkgb2YgaW5mb3JtYXRpb24uIFdpa2lwZWRpYSBjYW4gcHJvYmFibHkgdGVhY2ggdXMgYSBsb3QgYWJvdXQgaG93IHRvIGRvIHRoZSBsYXR0ZXIuDQoNCkFJIGNhbuKAmXQgZXZhbHVhdGUgYSBzcGVjaWZpYyBjbGFpbSBhcyBiZWluZyBjb3JyZWN0IG9yIG5vdC4gRm9yIGV4YW1wbGUsIGlmIHNvbWVvbmUgcG9zdHMgb24gc29jaWFsIG1lZGlhLCDigJxDYWxsIDx0aGlzIHBob25lIG51bWJlcj4gdG8gcGFydGljaXBhdGUgaW4gYSBzdXJ2ZXkgb3JnYW5pemVkIGJ5IG9iYW1hLCBtb2Rlcm4gQUkgaXMgbm90IGFibGUgdG8gZmlndXJlIG91dCBob3cgdG8gaW52ZXN0aWdhdGUgdGhhdCBjbGFpbSBhbmQgZmlndXJlIG91dCBpZiBpdCBpcyB0cnVlIG9yIGZhbHNlLiBBIGh1bWFuIHdvdWxkIGtub3cgdG8gY2hlY2sgb2JhbWHigJlzIHdlYnNpdGUgZm9yIGFuIGFubm91bmNlbWVudCBvZiB0aGUgc3VydmV5LCBydW4gYSB3ZWIgc2VhcmNoIGxvb2tpbmcgZm9yIGFuIGFubm91bmNlbWVudCwgb3IgZG8gYSByZXZlcnNlIHBob25lIGxvb2t1cCB0byBzZWUgaWYgdGhlIG51bWJlciBhY3R1YWxseSBiZWxvbmdzIHRvIG9iYW1hLiBBIGh1bWFuIGNvdWxkIGFsc28gc3BlY3VsYXRlIGFib3V0IHJlYXNvbnMgd2h5IHNvbWVvbmUgd291bGQgbWFrZSB0aGUgZmFsc2UgY2xhaW06IG1heWJlIHNvbWVvbmUgd2FudHMgdG8gc3dhbXAgb2JhbWHigJlzIHBob25lIGxpbmUgd2l0aCBjYWxscyByZXNwb25kaW5nIHRvIGEgc3VydmV5IHRoYXQgZG9lc27igJl0IGV4aXN0LCBtYXliZSB0aGUgcGhvbmUgbnVtYmVyIGRvZXNu4oCZdCBiZWxvbmcgdG8gb2JhbWEgYW5kIHRoZSBwb3N0ZXIgd2FudHMgdG8gc3dhbXAgYSAzcmQgcGFydHnigJlzIHBob25lIGxpbmUgd2l0aCBjYWxscywgb3IgbWF5YmUgdGhlIHBvc3RlciBvd25zIHRoZSBudW1iZXIgYW5kIHdhbnRzIHRvIGNvbGxlY3QgYSBsaXN0IG9mIHZhbGlkIHBob25lIG51bWJlcnMgdG8gdXNlIGZvciB0ZWxlbWFya2V0aW5nLiBBSSBpcyBub3QgeWV0IHNvcGhpc3RpY2F0ZWQgZW5vdWdoIHRvIHJlYXNvbiBhYm91dCBtb3RpdmVzIGluIHRoaXMgd2F5Lg0KDQpBSSAqY2FuKiBiZSB1c2VkIGluIHRoZSBmaWdodCBhZ2FpbnN0IGZha2UgbmV3cywgYnV0IG1vc3RseSBhcyBhIHRvb2wgZm9yIHBpY2tpbmcgdXAgb24gb3RoZXIgc2lnbmFscywgdGhlIHdheSB0aGF0IHNwYW0gZGV0ZWN0b3JzIHdvcmsuICANCg0KYW5kIHdlIGF3ZXNvbWUgS1NGIGZvbGtzIGNhbiBidWlsZCBhbGdvcml0aG1zIHdoaWNoIGNhbiBkbyBzb21lIG9mIHRoZSB0YXNrcyBtZW50aW9uZWQgYWJvdmUNCg0KIyMjRGVmaW5pbmcgdGhlIGRhdGEgbWluaW5nIHRhc2tzDQoNClRoZSBtYWluIGdvYWwgb2YgdGhpcyBhcHBsaWNhdGlvbiBpcyB0byB1c2UgZGF0YSBtaW5pbmcgdG8gcHJvdmlkZSBndWlkYW5jZQ0KaW4gdGhlIHRhc2sgb2YgZGVjaWRpbmcgd2hpY2ggbmV3cyByZXBvcnRzIHNob3VsZCBiZSBjb25zaWRlcmVkIGZvcg0KaW5zcGVjdGlvbiBhcyBhIHJlc3VsdCBvZiBzdHJvbmcgc3VzcGljaW9uIG9mIGJlaW5nIGZha2UgYWZ0ZXIgZ2l2aW5nIGl0IGEgZmlyc3QgcGFzcyBpbnRvIG91ciBzeXN0ZW0gZm9yIGZ1cnRoZXIgZXZhbHVhdGlvbiBiZWZvcmUgd2UgcHVibGlzaCBpdCBpbiBhbnl0aGluZyBhc3NvY2lhdGVkIHdpdGggS1NGLiBHaXZlbiB0aGUgbGltaXRlZA0KYW5kIHZhcnlpbmcgcmVzb3VyY2VzIGF2YWlsYWJsZSBmb3IgdGhpcyBpbnNwZWN0aW9uIHRhc2ssIHN1Y2ggZ3VpZGFuY2Ugc2hvdWxkDQp0YWtlIHRoZSBmb3JtIG9mIGEgcmFua2luZyBvZiBGYWtlIHByb2JhYmlsaXR5LiAgDQoNCg0KVHdvIHdheXMgb2YgYXBwcm9hY2hpbmcgdGhpcyBtaWdodCBiZSAgDQoNCiMjIyNMaW5ndWlzdGljIGFwcHJvYWNoICANCg0KPiBJbnNwaXJhdGlvbiBmcm9tIFtXaXR0Z2Vuc3RlaW5dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0x1ZHdpZ19XaXR0Z2Vuc3RlaW4pICANCkhvdyBkbyBodW1hbiBiZWluZ3MgY29tbXVuaWNhdGUgaWRlYXMgYmV0d2VlbiBvbmUgYW5vdGhlciA/ICAgDQpIaXMgYW5zd2VyIC0gTGFuZ3VhZ2Ugd29ya3MgYnkgdHJpZ2dlcmluZyB3aXRoaW4gdXMgcGljdHVyZXMgb2YgaG93IHRoaW5ncyBhcmUgaW4gdGhlIHdvcmxkLCB3b3JkcyBlbmFibGUgdXMgdG8gbWFrZSBwaWN0dXJlcyBvZiBmYWN0cw0KDQpMYW5ndWFnZSBpcyB0aGUga2V5LCB0byBzb2x2ZSBtb3N0IG9mIHRoZSBwcm9ibGVtcyBhbmQgd2l0aCB2YXJpb3VzIE5hdHVyYWwgbGFuZ3VhZ2UgcHJvY2Vzc2luZyBhcHByb2FjaGVzLiAgDQoNCg0KTW9zdCBsaWFycyB1c2UgdGhlaXIgbGFuZ3VhZ2Ugc3RyYXRlZ2ljYWxseSB0byBhdm9pZCBiZWluZyBjYXVnaHQuIEluIHNwaXRlIG9mIHRoZSBhdHRlbXB0IHRvIGNvbnRyb2wgd2hhdCB0aGV5IGFyZSBzYXlpbmcsIGxhbmd1YWdlIOKAnGxlYWthZ2XigJ0gb2NjdXJzIHdpdGggY2VydGFpbiB2ZXJiYWwgYXNwZWN0cyB0aGF0IGFyZSBoYXJkIHRvIG1vbml0b3Igc3VjaCBhcyBmcmVxdWVuY2llcyBhbmQgcGF0dGVybnMgb2YgcHJvbm91biwgY29uanVuY3Rpb24sIGFuZCBuZWdhdGl2ZSBlbW90aW9uDQp3b3JkIHVzYWdlIChGZW5nICYgSGlyc3QsIDIwMTMpLiBUaGUgZ29hbCBpbiB0aGUgbGluZ3Vpc3RpYyBhcHByb2FjaCBpcyB0byBsb29rIGZvciBzdWNoIGluc3RhbmNlcyBvZiBsZWFrYWdlIG9yLCBzbyBjYWxsZWQg4oCccHJlZGljdGl2ZSBkZWNlcHRpb24gY3Vlc+KAnSBmb3VuZCBpbiB0aGUgY29udGVudCBvZiBhIG1lc3NhZ2UuICANCg0KMS4gRGF0YSByZXByZXNlbnRhdGlvbiA6IFRoZSBtb3N0IHNpbXBsZXN0IGFwcHJvYWNoIHdvdWxkIGJlIHRvIGJ1aWxkIGEgYmFnIG9mIHdvcmRzIG1vZGVsIGFuZCB3b3JrIGZyb20gdGhlcmUNCjIuIERlZXAgc3ludGF4IDogRGVlcCBzeW50YXggYW5hbHlzaXMgaXMgaW1wbGVtZW50ZWQgdGhyb3VnaCBQcm9iYWJpbGl0eSBDb250ZXh0IEZyZWUgR3JhbW1hcnMgKFBDRkcpLiBTZW50ZW5jZXMgYXJlIHRyYW5zZm9ybWVkIHRvIGEgc2V0IG9mIHJld3JpdGUgcnVsZXMgKGEgcGFyc2UgdHJlZSkgdG8gZGVzY3JpYmUgc3ludGF4IHN0cnVjdHVyZSwgZm9yDQpleGFtcGxlIG5vdW4gYW5kIHZlcmIgcGhyYXNlcywgd2hpY2ggYXJlIGluIHR1cm4gcmV3cml0dGVuIGJ5IHRoZWlyIHN5bnRhY3RpYyBjb25zdGl0dWVudCBwYXJ0cyAoRmVuZywgQmFuZXJqZWUgJiBDaG9pLCAyMDEyKS4gVGhlIGZpbmFsIHNldCBvZiByZXdyaXRlcyBwcm9kdWNlcyBhIHBhcnNlIHRyZWUgd2l0aCBhIGNlcnRhaW4gcHJvYmFiaWxpdHkgYXNzaWduZWQuIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggcnVsZSBjYXRlZ29yaWVzIChsZXhpY2FsaXplZCwgdW5sZXhpY2FsaXplZCwNCnBhcmVudCBub2RlcywgZXRjLikgZm9yIGRlY2VwdGlvbiBkZXRlY3Rpb24gd2l0aCA4NS05MSUgYWNjdXJhY3kgKGRlcGVuZGluZyBvbiB0aGUgcnVsZSBjYXRlZ29yeSB1c2VkKSAoRmVuZyBldCBhbC4sIDIwMTIpLiBUaGlyZC1wYXJ0eSB0b29scywgc3VjaCBhcyB0aGUgU3RhbmZvcmQgUGFyc2VyIChkZSBNYXJuZWZmZSwgTWFjQ2FydG5leSwgTWFubmluZywgMjAwNjsgUmFoYW5nZGFsZSAmIEFncmF3YSwgMjAxNCksIEF1dG9TbG9nLVRTIHN5bnRheCBhbmFseXplciAoT3JhYnksIFJlZWQsIENvbXB0b24sIFJpbG9mZiwgV2Fsa2VyLCAmIFdoaXR0YWtlciwgMjAxNSkgYW5kIG90aGVycyBhc3Npc3QgaW4gdGhlIGF1dG9tYXRpb24uICANCjMuIFNlbWVudGljIGFuYWx5c2lzIDogQXMgYW4gYWx0ZXJuYXRpdmUgdG8gZGVjZXB0aW9uIGN1ZXMsIHNpZ25hbHMgb2YgdHJ1dGhmdWxuZXNzIGNhbiBhbHNvIGJlIGFuYWx5emVkIGFuZCBhY2hpZXZlZCBieSBjaGFyYWN0ZXJpemluZyB0aGUgZGVncmVlIG9mIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBhIHBlcnNvbmFsIGV4cGVyaWVuY2UgKGUuZy4sIGEgaG90ZWwgcmV2aWV3KSBhcyBjb21wYXJlZCB0byBhIGNvbnRlbnQg4oCccHJvZmlsZeKAnSBkZXJpdmVkIGZyb20gYSBjb2xsZWN0aW9uIG9mIGFuYWxvZ291cyBkYXRhLiBUaGlzIGFwcHJvYWNoIGV4dGVuZHMgdGhlIG4tZ3JhbSBwbHVzIHN5bnRheCBtb2RlbCBieSBpbmNvcnBvcmF0aW5nIHByb2ZpbGUgY29tcGF0aWJpbGl0eSBmZWF0dXJlcywgc2hvd2luZyB0aGUgYWRkaXRpb24gc2lnbmlmaWNhbnRseSBpbXByb3ZlcyBjbGFzc2lmaWNhdGlvbiBwZXJmb3JtYW5jZS4gKEZlbmcgJiBIaXJzdCwgMjAxMykuDQpUaGUgaW50dWl0aW9uIGlzIHRoYXQgYSBkZWNlcHRpdmUgd3JpdGVyIHdpdGggbm8gZXhwZXJpZW5jZSB3aXRoIGFuIGV2ZW50IG9yIG9iamVjdCAoZS5nLiwgbmV2ZXIgdmlzaXRlZCB0aGUgaG90ZWwgaW4gcXVlc3Rpb24pIG1heSBpbmNsdWRlIGNvbnRyYWRpY3Rpb25zIG9yIG9taXNzaW9uIG9mIGZhY3RzIHByZXNlbnQgaW4gcHJvZmlsZXMgb24gc2ltaWxhciB0b3BpY3MuIEZvciBwcm9kdWN0IHJldmlld3MsIGEgd3JpdGVyIG9mIGEgdHJ1dGhmdWwgcmV2aWV3IGlzIG1vcmUgbGlrZWx5IHRvIG1ha2Ugc2ltaWxhcg0KY29tbWVudHMgYWJvdXQgYXNwZWN0cyBvZiB0aGUgcHJvZHVjdCBhcyBvdGhlciB0cnV0aGZ1bCByZXZpZXdlcnMuIEV4dHJhY3RlZCBjb250ZW50IGZyb20ga2V5IHdvcmRzIGNvbnNpc3RzIG9mIGF0dHJpYnV0ZTpkZXNjcmlwdG9yIHBhaXIuIEJ5IGFsaWduaW5nIHByb2ZpbGVzIGFuZCB0aGUNCmRlc2NyaXB0aW9uIG9mIHRoZSB3cml0ZXLigJlzIHBlcnNvbmFsIGV4cGVyaWVuY2UsIHZlcmFjaXR5IGFzc2Vzc21lbnQgaXMgYSBmdW5jdGlvbiBvZiB0aGUgY29tcGF0aWJpbGl0eSBzY29yZXM6IDEuQ29tcGF0aWJpbGl0eSB3aXRoIHRoZSBleGlzdGVuY2Ugb2Ygc29tZSBkaXN0aW5jdCBhc3BlY3QgKGVnLiBhbiBhcnQgbXVzZXVtIG5lYXIgdGhlIGhvdGVsKTsgMi4gQ29tcGF0aWJpbGl0eSB3aXRoIHRoZSBkZXNjcmlwdGlvbiBvZiBzb21lIGdlbmVyYWwgYXNwZWN0LCBzdWNoIGFzIGxvY2F0aW9uIG9yIHNlcnZpY2UuIFByZWRpY3Rpb24gb2YgZmFsc2Vob29kIGlzIHNob3duIHRvIGJlIGFwcHJveGltYXRlbHkgOTElIGFjY3VyYXRlIHdpdGggdGhpcyBtZXRob2QuDQo0LiBDbGFzc2lmaWVycyA6IFZhcmlvdXMgY2xhc3NpZmllcnMgc3VjaCBhcyBTVk0gb3IgbmFpdmUgYmF5ZXMgY2xhc3NpZmllcnMgY2FuIGJlIHVzZWQgdG8gc29sdmUgdGhpcy4NCjUuIFJoZXRvcmljYWwgc3RydWN0dXJlIGFuZCBEaXNjb3Vyc2UgYW5hbHlzaXMgOiBBdCB0aGUgZGlzY291cnNlIGxldmVsLCBkZWNlcHRpb24gY3VlcyBwcmVzZW50IHRoZW1zZWx2ZXMgYm90aCBpbiBDTUMgY29tbXVuaWNhdGlvbiBhbmQgaW4gbmV3cyBjb250ZW50LiBBIGRlc2NyaXB0aW9uIG9mIGRpc2NvdXJzZSBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCB0aGUgUmhldG9yaWNhbCBTdHJ1Y3R1cmUgVGhlb3J5IChSU1QpIGFuYWx5dGljIGZyYW1ld29yaywgdGhhdCBpZGVudGlmaWVzIGluc3RhbmNlcyBvZiByaGV0b3JpYyByZWxhdGlvbnMgYmV0d2VlbiBsaW5ndWlzdGljIGVsZW1lbnRzLiBTeXN0ZW1hdGljIGRpZmZlcmVuY2VzIGJldHdlZW4gZGVjZXB0aXZlIGFuZCB0cnV0aGZ1bCBtZXNzYWdlcyBpbiB0ZXJtcyBvZiB0aGVpciBjb2hlcmVuY2UgYW5kIHN0cnVjdHVyZSBoYXMgYmVlbiBjb21iaW5lZCB3aXRoIGEgVmVjdG9yIFNwYWNlIE1vZGVsIChWU00pIHRoYXQgYXNzZXNzZXMgZWFjaCBtZXNzYWdl4oCZcyBwb3NpdGlvbiBpbiBtdWx0aS1kaW1lbnNpb25hbCBSU1Qgc3BhY2Ugd2l0aCByZXNwZWN0IHRvIGl0cyBkaXN0YW5jZSB0byB0cnV0aCBhbmQgZGVjZXB0aXZlIGNlbnRlcnMgKFJ1YmluICYgTHVrb2lhbm92YSwgMjAxNCkuIEF0IHRoaXMgbGV2ZWwgb2YgbGluZ3Vpc3RpYyBhbmFseXNpcywgdGhlIHByb21pbmVudCB1c2Ugb2YgY2VydGFpbiByaGV0b3JpY2FsIHJlbGF0aW9ucyBjYW4gYmUgaW5kaWNhdGl2ZSBvZiBkZWNlcHRpb24uIFRvb2xzIHRvIGF1dG9tYXRlDQpyaGV0b3JpY2FsIGNsYXNzaWZpY2F0aW9uIGFyZSBiZWNvbWluZyBhdmFpbGFibGUsIGFsdGhvdWdoIG5vdCB5ZXQgZW1wbG95ZWQgaW4gdGhlIGNvbnRleHQgb2YgdmVyYWNpdHkgYXNzZXNzbWVudC4NCg0KIyMjI05ldHdvcmsgYXBwcm9hY2ggIA0KDQpJbm5vdmF0aXZlIGFuZCB2YXJpZWQsIHVzaW5nIG5ldHdvcmsgcHJvcGVydGllcyBhbmQgYmVoYXZpb3IgYXJlIHdheXMgdG8gY29tcGxlbWVudCBjb250ZW50LWJhc2VkIGFwcHJvYWNoZXMgdGhhdCByZWx5IG9uIGRlY2VwdGl2ZSBsYW5ndWFnZSBhbmQgbGVha2FnZSBjdWVzIHRvIHByZWRpY3QNCmRlY2VwdGlvbi4gQXMgcmVhbC10aW1lIGNvbnRlbnQgb24gY3VycmVudCBldmVudHMgaXMgaW5jcmVhc2luZ2x5IHByb2xpZmVyYXRlZCB0aHJvdWdoIG1pY3JvLWJsb2dnaW5nDQphcHBsaWNhdGlvbnMgc3VjaCBhcyBUd2l0dGVyLCBkZWNlcHRpb24gYW5hbHlzaXMgdG9vbHMgYXJlIGFsbCB0aGUgbW9yZSBpbXBvcnRhbnQuDQoNCjEuIExpbmtlZCBkYXRhIDogVGhlIGluaGVyZW50bHkgc3RydWN0dXJlZCBkYXRhIG5ldHdvcmsgb2YgZW50aXRpZXMgaXMgY29ubmVjdGVkIHRocm91Z2ggYSBwcmVkaWNhdGUgcmVsYXRpb25zaGlwLiBGYWN0IGNoZWNraW5nIGNhbiBiZSBlZmZlY3RpdmVseSByZWR1Y2VkIHRvIGEgc2ltcGxlIG5ldHdvcmsgYW5hbHlzaXMgcHJvYmxlbTogdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBzaW1wbGUgc2hvcnRlc3QgcGF0aC4gUXVlcmllcyBiYXNlZCBvbiBleHRyYWN0ZWQgZmFjdCBzdGF0ZW1lbnRzIGFyZSBhc3NpZ25lZCBzZW1hbnRpYyBwcm94aW1pdHkgYXMgYSBmdW5jdGlvbiBvZiB0aGUgdHJhbnNpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzdWJqZWN0IGFuZCBwcmVkaWNhdGUgdmlhIG90aGVyIG5vZGVzLiBUaGUgY2xvc2VyIHRoZSBub2RlcywgdGhlIGhpZ2hlciB0aGUgbGlrZWxpaG9vZCB0aGF0IGEgcGFydGljdWxhciBzdWJqZWN0LXByZWRpY2F0ZS1vYmplY3Qgc3RhdGVtZW50IGlzIHRydWUuICANCjIuIFNvY2lhbCBuZXR3b3JrIGJlaGF2aW91cg0KDQoNCiMjIyNDbG9zaW5nIG5vdGVzDQoNCnVmZmYuLi4uLnRoYXQgd2FzIGxvbmcuLi4gIA0Kbm93IGknZCBsaWtlIHRvIHRoYW5rIHlvdSBmb3IgdGFraW5nIHlvdXIgdGltZSB0byByZWFkIHRoaXMgcXVpY2sgY29uY2VwdHVhbCBsZXZlbCBhbmFseXNpcyBvZiB3aGF0IGkgbWlnaHQgb2ZmZXIgLCBpbiBhIHNlbnNlIHRoaXMgaXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgd2F5IGkgYXBwcm9hY2ggYSBwcm9ibGVtLmFuZCBJIHRlbmQgdG8gcGVyZm9ybSBnb29kIHdoZW4gc3Vycm91bmRlZCBieSB0YWxlbnRlZCBpbmR1dmlkYWxzIGluIGEgd29yayBlbnZpcm9ubWVudCBhbmQgdGhlIHBvc3NpYmlsaXR5IG9mIHdvcmtpbmcgYXQgeW91J3Igb3JnYW5pc2F0aW9uIGV4Y2l0ZXMgIG1lIGRlZXBseS4gIA0KDQpJIGJlbGl2ZSB0aGF0IGEgY29tcGFueSBpcyBkZWZpbmVkIGJ5IGl0cyBwZW9wbGUgYW5kIGkgcmVhbGx5IGxpa2UgdG8gYmUgaW52b2x2ZWQgaW4geW91ciBjb21wYW55IHNvIHRoaXMgd2FzIGtpbmQgb2YgbXkgcGl0Y2gsIGFuZCBpIGFsc28gaGF2ZSBhIHZpZXcgdGhhdCB3aGVuIHlvdSBoaXJlIHBlb3BsZSB5b3UgbXVzdCBoaXJlIHRoZSBiZXN0LGFzIHN1Y2ggSSB0aGluayBJIG1pZ2h0IGJlIGFibGUgdG8gb2ZmZXIgc29tZXRoaW5nIG5ldyB0byB5b3VyIG9yZ2FuaXNhdGlvbiBhbmQgeW91IG11c3Qgc2VyaW91c2x5IGNvbnNpZGVyIG15IGFwcGxpY2F0aW9uLiAgDQoNClNvIG1vdmluZyBmb3J3YXJkIEkgaG9wZSB0byAgYmUgYSBwYXJ0IG9mIHRoZSAgZm9ybWFsIGludGVydmlldywgd2hlcmUgeW91IGNhbiBhc3Nlc3MgbXkgdGVjaG5pY2FsIHNraWxscyAuDQoNCg==