The Idea Behind Difference in Differences

Simple before and after studies often can’t account for changes over time that would have occurred even in the absence of a program. Things change, and not always in ways directly related to an intervention you might be studying.

Consider, for example, a program that provides nutritional supplements to poor schoolchildren. We certainly can’t compare the heights of kids who get the supplement with the heights of those who don’t get it as a means of assessing the effect of the program on child stature.

The program is deliberately targeted to poor kids who, in the absence of the supplements, are likely to be shorter than those who are ineligible. If we observed little difference in average heights between the treated and the untreated, it would be a mistake to infer that the supplements had no effect.

What to do? Well, let’s start with a before-and-after comparison of a group of people who take part in a program. And suppose we see a change in the average outcome over time. We know that some of the change could have been unrelated to the program itself. It would have happened in any case. But even so, the rest of any observed change over and above what would have happened could be attributed to the treatment.

We just don’t know how much if we are unable to find a group of untreated individuals who gain impacts. Within-without study– maybe we can construct one artificially. In particular, can we use the change in outcomes experienced by an untreated group to estimate the counterfactual for the treated group? This is the essence of a difference in differences approach to estimating the average impact of an intervention.

In regression

A contruction of the data before doing a diff and diff

Each row represents about in individual.

\(_i\) represents each individual

\(_t =\) O or 1 , \(_t\) representing the time of the treatment meaning = before or after the program.

With this data, we are ready to write an equation.

The overal equation is written :

\(Y_{it} = \alpha + \beta T_{it} + \gamma P_{it} + \delta T_{it} * P_it + \epsilon_{it}\)

Difference in Differences Without Time

But the same technique can be used with cross sectional data. That is data collected at just one point in time. Example :

Difference in Difference in Differences

An alternative approach is to use an otherwise comparable sample observed at the same two times before and after the treatment and made up of the same two kinds of people, boys and girls, but in which none of the individuals actually subject to the treatment. (like in a Placebo test)

Watch the video to know how to structure the dataset and the equation.

One problem with a triple difference approach is power. Every time you add another difference, you roughly double the size of the sample you need to get the same power. Alternatively, if you don’t double the sample size, then the estimate of program impact might be very imprecise.

Imperfect compliance and attrition

While the conceptual parallels are clear and instructive, there are many differences between such science experiments and the field experience in which we are interested. A big one shared by all clinical medical trials as well is that the interventions we assess involve people. And unlike test tubes, people get to make choices.

Amongst other things,

Imperfect compliance

Non compliance in the control group : some find a way to get treated eventhough they were assigned to treatment Non compliance in the treated group : some are absent during the treatment phase (after the baseline survey)

Intention to Treat :

  • Impact it has on treated only because of the treatment (the LATE, the local average treatment effect)

  • Impact it has on untreated despite the offer (we assume there is no impact)

  • Impact it has on the people treated anyway (they would have been treated without being offered the treatment)

On overall, it measures the impact of being offered the treatment and taking it up if you desire

Measuring compliance

In both groups, they are the never treated : the idea is that they never get treated, whether they are offered the treatment as part of the study or not.

It’s important to recognize that this never treated group is not necessarily a random sample of the treatment group. The people in this group either choose not to be treated based on their own preferences, or are confronted by some kind of constraint to being treated that others did not face.

The likelyhood of never being treated is the same in the control and the treated groups (e.g. same chance to face a difficulty that makes the person unavailable)

There is the same logic for the always treated (it is for the same reason, for the same characteristics that they will be all the time treated in both groups)

The compliers : third group who take up the treatment because they are offered it under our program, but who wouldn’t have otherwise.

Compliers = 1 - never treated - always treated (or \(\phi_C = 1 - \phi_N -\phi_A\)). This is the fraction of people in the treatment group who are treated because of the existence of the program and the study. (Of course there is a similar fraction of people in the control group who would have been treated if they had been offered the treatment.) It is called the compliance rate in the sample of people from both groups.

Example : In an experiment in Kenya to test the impact of access to a widely available bank account accessible by mobile phone, about 33% of members of the control group had an account, while some 60% of the treatment group did. Thus \(\phi_A\) was about 0.33, \(\phi_N\) was about 0.4, and \(\phi_C\), the compliance rate, was about 0.27.

Measuring Impact with Imperfect Compliance – Calculating the ITT and LATE

LS0tCnRpdGxlOiAiRGlmZmVyZW5jZS1pbi1EaWZmZXJlbmNlcyBpbiBFZHgiCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgd29yZF9kb2N1bWVudDogZGVmYXVsdAotLS0KCiMjIFRoZSBJZGVhIEJlaGluZCBEaWZmZXJlbmNlIGluIERpZmZlcmVuY2VzCgpTaW1wbGUgYmVmb3JlIGFuZCBhZnRlciBzdHVkaWVzIG9mdGVuIGNhbid0IGFjY291bnQgZm9yIGNoYW5nZXMgb3ZlciB0aW1lIHRoYXQgd291bGQgaGF2ZSBvY2N1cnJlZCBldmVuIGluIHRoZSBhYnNlbmNlIG9mIGEgcHJvZ3JhbS4gVGhpbmdzIGNoYW5nZSwgYW5kIG5vdCBhbHdheXMgaW4gd2F5cyBkaXJlY3RseSByZWxhdGVkIHRvIGFuIGludGVydmVudGlvbiB5b3UgbWlnaHQgYmUgc3R1ZHlpbmcuCgoqKkNvbnNpZGVyLCBmb3IgZXhhbXBsZSwgYSBwcm9ncmFtIHRoYXQgcHJvdmlkZXMgbnV0cml0aW9uYWwgc3VwcGxlbWVudHMgdG8gcG9vciBzY2hvb2xjaGlsZHJlbi4qKiBXZSBjZXJ0YWlubHkgY2FuJ3QgY29tcGFyZSB0aGUgaGVpZ2h0cyBvZiBraWRzIHdobyBnZXQgdGhlIHN1cHBsZW1lbnQgd2l0aCB0aGUgaGVpZ2h0cyBvZiB0aG9zZSB3aG8gZG9uJ3QgZ2V0IGl0IGFzIGEgbWVhbnMgb2YgYXNzZXNzaW5nIHRoZSBlZmZlY3Qgb2YgdGhlIHByb2dyYW0gb24gY2hpbGQgc3RhdHVyZS4KClRoZSBwcm9ncmFtIGlzIGRlbGliZXJhdGVseSB0YXJnZXRlZCB0byBwb29yIGtpZHMgd2hvLCBpbiB0aGUgYWJzZW5jZSBvZiB0aGUgc3VwcGxlbWVudHMsIGFyZSBsaWtlbHkgdG8gYmUgc2hvcnRlciB0aGFuIHRob3NlIHdobyBhcmUgaW5lbGlnaWJsZS4gSWYgd2Ugb2JzZXJ2ZWQgbGl0dGxlIGRpZmZlcmVuY2UgaW4gYXZlcmFnZSBoZWlnaHRzIGJldHdlZW4gdGhlIHRyZWF0ZWQgYW5kIHRoZSB1bnRyZWF0ZWQsIGl0IHdvdWxkIGJlIGEgbWlzdGFrZSB0byBpbmZlciB0aGF0IHRoZSBzdXBwbGVtZW50cyBoYWQgbm8gZWZmZWN0LgoKV2hhdCB0byBkbz8gV2VsbCwgbGV0J3Mgc3RhcnQgd2l0aCBhIGJlZm9yZS1hbmQtYWZ0ZXIgY29tcGFyaXNvbiBvZiBhIGdyb3VwIG9mIHBlb3BsZSB3aG8gdGFrZSBwYXJ0IGluIGEgcHJvZ3JhbS4gQW5kIHN1cHBvc2Ugd2Ugc2VlIGEgY2hhbmdlIGluIHRoZSBhdmVyYWdlIG91dGNvbWUgb3ZlciB0aW1lLiBXZSBrbm93IHRoYXQgc29tZSBvZiB0aGUgY2hhbmdlIGNvdWxkIGhhdmUgYmVlbiB1bnJlbGF0ZWQgdG8gdGhlIHByb2dyYW0gaXRzZWxmLiBJdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGluIGFueSBjYXNlLiBCdXQgZXZlbiBzbywgdGhlIHJlc3Qgb2YgYW55IG9ic2VydmVkIGNoYW5nZSBvdmVyIGFuZCBhYm92ZSB3aGF0IHdvdWxkIGhhdmUgaGFwcGVuZWQgY291bGQgYmUgYXR0cmlidXRlZCB0byB0aGUgdHJlYXRtZW50LgoKV2UganVzdCBkb24ndCBrbm93IGhvdyBtdWNoIGlmIHdlIGFyZSB1bmFibGUgdG8gZmluZCBhIGdyb3VwIG9mIHVudHJlYXRlZCBpbmRpdmlkdWFscyB3aG8gZ2FpbiBpbXBhY3RzLiBXaXRoaW4td2l0aG91dCBzdHVkeS0tIG1heWJlIHdlIGNhbiBjb25zdHJ1Y3Qgb25lIGFydGlmaWNpYWxseS4gSW4gcGFydGljdWxhciwgY2FuIHdlIHVzZSB0aGUgY2hhbmdlIGluIG91dGNvbWVzIGV4cGVyaWVuY2VkIGJ5IGFuIHVudHJlYXRlZCBncm91cCB0byBlc3RpbWF0ZSB0aGUgY291bnRlcmZhY3R1YWwgZm9yIHRoZSB0cmVhdGVkIGdyb3VwPyBUaGlzIGlzIHRoZSBlc3NlbmNlIG9mIGEgZGlmZmVyZW5jZSBpbiBkaWZmZXJlbmNlcyBhcHByb2FjaCB0byBlc3RpbWF0aW5nIHRoZSBhdmVyYWdlIGltcGFjdCBvZiBhbiBpbnRlcnZlbnRpb24uCgo8Y2VudGVyPiFbXShpbWFnZXMvRkJEMUY1OTQtQkU5Qy00RkJBLTg2NTQtN0M4MTNEODZBOEQyLTAxLmpwZWcpPC9jZW50ZXI+CgpccGFnZWJyZWFrCgojIyBJbiByZWdyZXNzaW9uCgo8Y2VudGVyPiFbQSBjb250cnVjdGlvbiBvZiB0aGUgZGF0YSBiZWZvcmUgZG9pbmcgYSBkaWZmIGFuZCBkaWZmXShpbWFnZXMvQ2FwdHVyZSUyMGQlRTIlODAlOTllJUNDJTgxY3JhbiUyMDIwMjMtMDMtMDUlMjBhJUNDJTgwJTIwMjAuNDAuMTkucG5nKTwvY2VudGVyPgoKRWFjaCByb3cgcmVwcmVzZW50cyBhYm91dCBpbiBpbmRpdmlkdWFsLgoKJF9pJCByZXByZXNlbnRzIGVhY2ggaW5kaXZpZHVhbAoKJF90ID0kIE8gb3IgMSAsICRfdCQgcmVwcmVzZW50aW5nIHRoZSB0aW1lIG9mIHRoZSB0cmVhdG1lbnQgbWVhbmluZyA9IGJlZm9yZSBvciBhZnRlciB0aGUgcHJvZ3JhbS4KCldpdGggdGhpcyBkYXRhLCB3ZSBhcmUgcmVhZHkgdG8gd3JpdGUgYW4gZXF1YXRpb24uCgotICAgQmVmb3JlIHRoZSBpbnRlcnZlbnRpb24sIGl0IHdhcyBhbiBSQ1QsIHdlIGV4cGVjdCwgYmVmb3JlIHRoZSBpbnRlcnZlbnRpb24gdGhlIG91dGNvbWUgaW4gdHJlYXRlZCBhbmQgdGhlIGNvbnRyb2wgZ3JvdXAgdG8gYmUgdGhlIHNhbWUuIEl0IGlzIG5vdCB0aGUgY2FzZSBpbiBSQ1QuIFRoZSBjb2VmZmljaWVudCAkXGJldGEkIHJlcHJlc2VudHMgdGhlIG91dGNvbWUgb2YgYWZ0ZXIgdGhlIGludGVydmVudGlvbiBjb21wYXJlZCB0byBiZWZvcmUgdGhlIGludGVydmVudGlvbiBpbiB0aGUgdHJlYXRlZCBncm91cCwgYnV0IGluIHRoZSBhYnNlbmNlIG9mIHRyZWF0bWVudAoKLSAgIFRoZSBjb2VmZmljaWVudCAkXGdhbW1hJCxyZXByZXNlbnRzIHRoZSBvdXRjb21lIG9mIGFmdGVyIHRoZSBpbnRlcnZlbnRpb24gY29tcGFyZWQgdG8gYmVmb3JlIHRoZSBpbnRlcnZlbnRpb24gaW4gdGhlIGNvbnRyb2wgZ3JvdXAgKGl0IHNheXMgd2hhdCB3b3VsZCBoYXZlIG9jY3VyZWQgaW4gdGltZSB3aXRob3V0IHRoZSB0cmVhdG1lbnQpCgotICAgVGhlcmVmb3JlLCB0aGUgYXZlcmFnZSBvdXRjb21lLCBiZWZvcmUgdGhlIGludGVydmVudGlvbiBpbiB0aGUgY29udHJvbCBncm91cCBpcyAkXGFscGhhJC4gQWZ0ZXIgdGhlIGludGVydmVudGlvbiwgdGhlIGF2ZXJhZ2Ugb3V0Y29tZSBpbiB0aGUgY29udHJvbCBncm91cCBpcyAkXGFscGhhICsgXGdhbW1hJC4KCi0gICBBbHNvLCB0aGVyZSwgdGhlIGF2ZXJhZ2Ugb3V0Y29tZSwgYmVmb3JlIHRoZSBpbnRlcnZlbnRpb24gaW4gdGhlIHRyZWF0ZWQgZ3JvdXAgaXMgJFxhbHBoYSArIFxiZXRhJC4gQWZ0ZXIgdGhlIGludGVydmVudGlvbiwgdGhlIGF2ZXJhZ2Ugb3V0Y29tZSBpbiB0aGUgdHJlYXRlZCBncm91cCBpcyAkXGFscGhhICsgXGJldGEgKyBcZ2FtbWEkLCBpbiB0aGUgYWJzZW5jZSBvZiB0aGUgdHJlYXRlbWVudC4gKkl0IGlzIGxvZ2ljYWwsIHNpbmNlIHdlIG5lZWQgdGhlIGRpZmZlcmVuY2UgaW4gb3V0Y29tZXMgaW4gdGhlIGNvbnRyb2wgZ3JvdXAgdG8gdGVsbCB1cyB3aGF0IHdvdWxkIGhhdmUgb2NjdXJlZCBpbiB0aGUgYWJzZW5jZSBvZiB0aGUgdHJlYXRlbWVudC4qCgotICAgQnV0IHRoZXJlJ3Mgb25lIG1vcmUgdGVybSBpbiB0aGUgZXF1YXRpb24gdGhhdCBjb21iaW5lcyB0aGUgdHJlYXRtZW50IGFuZCB0aGUgcG9zdCB2YXJpYWJsZXMsICRcZGVsdGEgVCAqIFAkIC4gVGhpcyBpcyBjYWxsZWQgdGhlIGludGVyYWN0aW9uIHRlcm0uIFRvIGV4cGxhaW4gOiB0aGUgYXZlcmFnZSBvdXRjb21lLCBpbiB0aGUgdHJlYXRtZW50IGdyb3VwIGFmdGVyIHRoZSBpbnRlcnZlbnRpb24gaXMgJFxhbHBoYSArIFxiZXRhICsgXGdhbW1hICsgXGRlbHRhJC4KCi0gICBXZSBjYW4gc2VlIHRoYXQgJFxkZWx0YSQgY2FwdHVyZXMgdGhlIGV4dGVudCB0byB3aGljaCB0aGUgb3V0Y29tZSBmb3IgdHJlYXRlZCBpbmRpdmlkdWFscyBkaWZmZXJzIGZyb20gd2hhdCBpdCB3b3VsZCBoYXZlIGJlZW4gaWYgdGhlIHRyZWF0bWVudCBoYWQgbm90IHRha2VuIHBsYWNlIHRoYXQgZXF1YWxzICRcYWxwaGEgKyBcYmV0YSArIFxnYW1tYSQgLGFnYWluLCB1bmRlciB0aGUgcGFyYWxsZWwgdHJlbmRzIGFzc3VtcHRpb24uIFRoaXMgaXMgb24gdGhpcyB2YWx1ZSB0aGF0IHdlIHNob3VsZCBhIHQtdGVzdCA6IEZvciBleGFtcGxlLCBpZiB0aGUgdmFsdWUgMCBsaWVzIG91dHNpZGUgdGhlIDk1JSBjb25maWRlbmNlIGludGVydmFsIGFyb3VuZCAkXGRlbHRhJCB0aGVuIHdlIHdpbGwgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMgdGhhdCB0aGUgdHJlYXRtZW50IGhhcyBubyBlZmZlY3QgYXQgdGhlIDUlIGxldmVsLgoKXHBhZ2VicmVhawoKKipUaGUgb3ZlcmFsIGVxdWF0aW9uIGlzIHdyaXR0ZW4gOioqCgokWV97aXR9ID0gXGFscGhhICsgXGJldGEgVF97aXR9ICsgXGdhbW1hIFBfe2l0fSArIFxkZWx0YSBUX3tpdH0gKiBQX2l0ICsgXGVwc2lsb25fe2l0fSQKCjxjZW50ZXI+IVtdKGltYWdlcy9DYXB0dXJlJTIwZCVFMiU4MCU5OWUlQ0MlODFjcmFuJTIwMjAyMy0wMy0wNSUyMGElQ0MlODAlMjAyMS4yMi40Mi0wMS5wbmcpPC9jZW50ZXI+CgpccGFnZWJyZWFrCgojIyBEaWZmZXJlbmNlIGluIERpZmZlcmVuY2VzIFdpdGhvdXQgVGltZQoKQnV0IHRoZSBzYW1lIHRlY2huaXF1ZSBjYW4gYmUgdXNlZCB3aXRoIGNyb3NzIHNlY3Rpb25hbCBkYXRhLiBUaGF0IGlzIGRhdGEgY29sbGVjdGVkIGF0IGp1c3Qgb25lIHBvaW50IGluIHRpbWUuIEV4YW1wbGUgOgoKLSAgIFdlIGFzc3VtZSB0aGF0IGxldmVsIG9mIHNjaG9vbCBhdHRlbmRhbmNlIGluIGdyYWRlcyBpbiBiZXR3ZWVuIGJveXMgYW5kIGdpcmxzIGlzIHRoZSBzYW1lIGZyb20gNXRoIHRvIDZ0aAoKLSAgIFRoZSBpbnRlcnZlbnRpb24gaXMgOiBnaXZpbmcgYSBiaWtlIHRvIGdpcmxzIGJldHdlZW4gNXRoIHRvIDZ0aCBncmFkZQoKLSAgIFRoZW4gdGhlIGRpZmZlcmVuY2UtaW4tZGlmZmVyZW5jZSBlc3RpbWF0ZSBvZiB0aGUgZWZmZWN0IG9mIGdpdmluZyBhIGJpa2Ugb24gYXR0ZW5kYW5jZSBpcyAkPSAoZ2lybCBcIGF0dGVuZGFuY2UgXCBpbiBcIDZ0aCBcIGdyYWRlIC0gYm95IGF0dGVuZGFuY2UgaW4gNnRoIGdyYWRlKSAtIChnaXJsIGF0dGVuZGFuY2UgaW4gNXRoIGdyYWRlLSBib3kgYXR0ZW5kYW5jZSBpbiA1dGggZ3JhZGUpJCBccGFnZWJyZWFrCgojIyBEaWZmZXJlbmNlIGluIERpZmZlcmVuY2UgaW4gRGlmZmVyZW5jZXMKCkFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIGlzIHRvIHVzZSBhbiBvdGhlcndpc2UgY29tcGFyYWJsZSBzYW1wbGUgb2JzZXJ2ZWQgYXQgdGhlIHNhbWUgdHdvIHRpbWVzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHRyZWF0bWVudCBhbmQgbWFkZSB1cCBvZiB0aGUgc2FtZSB0d28ga2luZHMgb2YgcGVvcGxlLCBib3lzIGFuZCBnaXJscywgYnV0IGluIHdoaWNoIG5vbmUgb2YgdGhlIGluZGl2aWR1YWxzIGFjdHVhbGx5IHN1YmplY3QgdG8gdGhlIHRyZWF0bWVudC4gKGxpa2UgaW4gYSBQbGFjZWJvIHRlc3QpCgpbV2F0Y2ggdGhlIHZpZGVvIHRvIGtub3cgaG93IHRvIHN0cnVjdHVyZSB0aGUgZGF0YXNldCBhbmQgdGhlIGVxdWF0aW9uLl0oaHR0cHM6Ly9sZWFybmluZy5lZHgub3JnL2NvdXJzZS9jb3Vyc2UtdjE6V0JHeCtJRU0wMXgrMVQyMDIyL2Jsb2NrLXYxOldCR3grSUVNMDF4KzFUMjAyMit0eXBlQHNlcXVlbnRpYWwrYmxvY2tAZDExZTUxNzk0NDExNDViNjhhZmY4Mzg0ZmYxODg3NjIvYmxvY2stdjE6V0JHeCtJRU0wMXgrMVQyMDIyK3R5cGVAdmVydGljYWwrYmxvY2tANzYzMGZiZGYxNTIxNGRiNTgwMTNmODYwZTJkYWUzYWIpCgpPbmUgcHJvYmxlbSB3aXRoIGEgdHJpcGxlIGRpZmZlcmVuY2UgYXBwcm9hY2ggaXMgcG93ZXIuIEV2ZXJ5IHRpbWUgeW91IGFkZCBhbm90aGVyIGRpZmZlcmVuY2UsIHlvdSByb3VnaGx5IGRvdWJsZSB0aGUgc2l6ZSBvZiB0aGUgc2FtcGxlIHlvdSBuZWVkIHRvIGdldCB0aGUgc2FtZSBwb3dlci4gQWx0ZXJuYXRpdmVseSwgaWYgeW91IGRvbid0IGRvdWJsZSB0aGUgc2FtcGxlIHNpemUsICoqdGhlbiB0aGUgZXN0aW1hdGUgb2YgcHJvZ3JhbSBpbXBhY3QgbWlnaHQgYmUgdmVyeSBpbXByZWNpc2UuKioKClxwYWdlYnJlYWsKCiMgSW1wZXJmZWN0IGNvbXBsaWFuY2UgYW5kIGF0dHJpdGlvbgoKV2hpbGUgdGhlIGNvbmNlcHR1YWwgcGFyYWxsZWxzIGFyZSBjbGVhciBhbmQgaW5zdHJ1Y3RpdmUsIHRoZXJlIGFyZSBtYW55IGRpZmZlcmVuY2VzIGJldHdlZW4gc3VjaCBzY2llbmNlIGV4cGVyaW1lbnRzIGFuZCB0aGUgZmllbGQgZXhwZXJpZW5jZSBpbiB3aGljaCB3ZSBhcmUgaW50ZXJlc3RlZC4gQSBiaWcgb25lIHNoYXJlZCBieSBhbGwgY2xpbmljYWwgbWVkaWNhbCB0cmlhbHMgYXMgd2VsbCBpcyB0aGF0IHRoZSBpbnRlcnZlbnRpb25zIHdlIGFzc2VzcyBpbnZvbHZlIHBlb3BsZS4gQW5kIHVubGlrZSB0ZXN0IHR1YmVzLCBwZW9wbGUgZ2V0IHRvIG1ha2UgY2hvaWNlcy4KCkFtb25nc3Qgb3RoZXIgdGhpbmdzLAoKLSAgIHRoZXkgY2hvb3NlIHdoZXRoZXIgdG8gc2lnbiB1cCBmb3IgYSBzdHVkeSx3aGV0aGVyIHRvIGNvbXBseSB3aXRoIHRoZSB0cmVhdG1lbnQgdG8gd2hpY2ggdGhleSBhcmUgYXNzaWduZWQsCgotICAgd2hldGhlciB0byBhbnN3ZXIgcXVlc3Rpb25uYWlyZXMsCgotICAgYW5kIGlmIHNvIHdoZXRoZXIgdG8gYW5zd2VyIHRydXRoZnVsbHksIGFuZCB3aGV0aGVyIHRvIGNvbnRpbnVlIHRvIHRha2UgcGFydCBpbiB0aGUgc3R1ZHkgb3ZlciB0aW1lLgoKIyMgSW1wZXJmZWN0IGNvbXBsaWFuY2UKCk5vbiBjb21wbGlhbmNlIGluIHRoZSBjb250cm9sIGdyb3VwIDogc29tZSBmaW5kIGEgd2F5IHRvIGdldCB0cmVhdGVkIGV2ZW50aG91Z2ggdGhleSB3ZXJlIGFzc2lnbmVkIHRvIHRyZWF0bWVudCBOb24gY29tcGxpYW5jZSBpbiB0aGUgdHJlYXRlZCBncm91cCA6IHNvbWUgYXJlIGFic2VudCBkdXJpbmcgdGhlIHRyZWF0bWVudCBwaGFzZSAoYWZ0ZXIgdGhlIGJhc2VsaW5lIHN1cnZleSkKCkludGVudGlvbiB0byBUcmVhdCA6CgotICAgSW1wYWN0IGl0IGhhcyBvbiB0cmVhdGVkIG9ubHkgYmVjYXVzZSBvZiB0aGUgdHJlYXRtZW50ICh0aGUgTEFURSwgdGhlIGxvY2FsIGF2ZXJhZ2UgdHJlYXRtZW50IGVmZmVjdCkKCi0gICBJbXBhY3QgaXQgaGFzIG9uIHVudHJlYXRlZCBkZXNwaXRlIHRoZSBvZmZlciAod2UgYXNzdW1lIHRoZXJlIGlzIG5vIGltcGFjdCkKCi0gICBJbXBhY3QgaXQgaGFzIG9uIHRoZSBwZW9wbGUgdHJlYXRlZCBhbnl3YXkgKHRoZXkgd291bGQgaGF2ZSBiZWVuIHRyZWF0ZWQgd2l0aG91dCBiZWluZyBvZmZlcmVkIHRoZSB0cmVhdG1lbnQpCgpPbiBvdmVyYWxsLCBpdCBtZWFzdXJlcyB0aGUgaW1wYWN0IG9mIGJlaW5nIG9mZmVyZWQgdGhlIHRyZWF0bWVudCBhbmQgdGFraW5nIGl0IHVwIGlmIHlvdSBkZXNpcmUKCiMjIE1lYXN1cmluZyBjb21wbGlhbmNlCgpJbiBib3RoIGdyb3VwcywgdGhleSBhcmUgdGhlICoqbmV2ZXIgdHJlYXRlZCoqIDogdGhlIGlkZWEgaXMgdGhhdCB0aGV5IG5ldmVyIGdldCB0cmVhdGVkLCB3aGV0aGVyIHRoZXkgYXJlIG9mZmVyZWQgdGhlIHRyZWF0bWVudCBhcyBwYXJ0IG9mIHRoZSBzdHVkeSBvciBub3QuCgpJdCdzIGltcG9ydGFudCB0byByZWNvZ25pemUgdGhhdCB0aGlzIG5ldmVyIHRyZWF0ZWQgZ3JvdXAgaXMgbm90IG5lY2Vzc2FyaWx5IGEgcmFuZG9tIHNhbXBsZSBvZiB0aGUgdHJlYXRtZW50IGdyb3VwLiBUaGUgcGVvcGxlIGluIHRoaXMgZ3JvdXAgZWl0aGVyIGNob29zZSBub3QgdG8gYmUgdHJlYXRlZCBiYXNlZCBvbiB0aGVpciBvd24gcHJlZmVyZW5jZXMsIG9yIGFyZSBjb25mcm9udGVkIGJ5IHNvbWUga2luZCBvZiBjb25zdHJhaW50IHRvIGJlaW5nIHRyZWF0ZWQgdGhhdCBvdGhlcnMgZGlkIG5vdCBmYWNlLgoKVGhlIGxpa2VseWhvb2Qgb2YgbmV2ZXIgYmVpbmcgdHJlYXRlZCBpcyB0aGUgc2FtZSBpbiB0aGUgY29udHJvbCBhbmQgdGhlIHRyZWF0ZWQgZ3JvdXBzIChlLmcuIHNhbWUgY2hhbmNlIHRvIGZhY2UgYSBkaWZmaWN1bHR5IHRoYXQgbWFrZXMgdGhlIHBlcnNvbiB1bmF2YWlsYWJsZSkKClRoZXJlIGlzIHRoZSBzYW1lIGxvZ2ljIGZvciB0aGUgKiphbHdheXMgdHJlYXRlZCoqIChpdCBpcyBmb3IgdGhlIHNhbWUgcmVhc29uLCBmb3IgdGhlIHNhbWUgY2hhcmFjdGVyaXN0aWNzIHRoYXQgdGhleSB3aWxsIGJlIGFsbCB0aGUgdGltZSB0cmVhdGVkIGluIGJvdGggZ3JvdXBzKQoKKipUaGUgY29tcGxpZXJzKiogOiB0aGlyZCBncm91cCB3aG8gdGFrZSB1cCB0aGUgdHJlYXRtZW50IGJlY2F1c2UgdGhleSBhcmUgb2ZmZXJlZCBpdCB1bmRlciBvdXIgcHJvZ3JhbSwgYnV0IHdobyB3b3VsZG4ndCBoYXZlIG90aGVyd2lzZS4KCioqQ29tcGxpZXJzKiogPSAxIC0gKipuZXZlciB0cmVhdGVkKiogLSAqKmFsd2F5cyB0cmVhdGVkKiogKG9yICRccGhpX0MgPSAxIC0gXHBoaV9OIC1ccGhpX0EkKS4gVGhpcyBpcyB0aGUgZnJhY3Rpb24gb2YgcGVvcGxlIGluIHRoZSB0cmVhdG1lbnQgZ3JvdXAgd2hvIGFyZSB0cmVhdGVkIGJlY2F1c2Ugb2YgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgcHJvZ3JhbSBhbmQgdGhlIHN0dWR5LiAoT2YgY291cnNlIHRoZXJlIGlzIGEgc2ltaWxhciBmcmFjdGlvbiBvZiBwZW9wbGUgaW4gdGhlIGNvbnRyb2wgZ3JvdXAgd2hvIHdvdWxkIGhhdmUgYmVlbiB0cmVhdGVkIGlmIHRoZXkgaGFkIGJlZW4gb2ZmZXJlZCB0aGUgdHJlYXRtZW50LikgSXQgaXMgY2FsbGVkIHRoZSBjb21wbGlhbmNlIHJhdGUgaW4gdGhlIHNhbXBsZSBvZiBwZW9wbGUgZnJvbSBib3RoIGdyb3Vwcy4KCioqRXhhbXBsZSoqIDogSW4gYW4gZXhwZXJpbWVudCBpbiBLZW55YSB0byB0ZXN0IHRoZSBpbXBhY3Qgb2YgYWNjZXNzIHRvIGEgd2lkZWx5IGF2YWlsYWJsZSBiYW5rIGFjY291bnQgYWNjZXNzaWJsZSBieSBtb2JpbGUgcGhvbmUsIGFib3V0IDMzJSBvZiBtZW1iZXJzIG9mIHRoZSBjb250cm9sIGdyb3VwIGhhZCBhbiBhY2NvdW50LCB3aGlsZSBzb21lIDYwJSBvZiB0aGUgdHJlYXRtZW50IGdyb3VwIGRpZC4gVGh1cyAkXHBoaV9BJCB3YXMgYWJvdXQgMC4zMywgJFxwaGlfTiQgd2FzIGFib3V0IDAuNCwgYW5kICRccGhpX0MkLCB0aGUgY29tcGxpYW5jZSByYXRlLCB3YXMgYWJvdXQgMC4yNy4KCiMjIyBNZWFzdXJpbmcgSW1wYWN0IHdpdGggSW1wZXJmZWN0IENvbXBsaWFuY2Ug4oCTIENhbGN1bGF0aW5nIHRoZSBJVFQgYW5kIExBVEUKCgo=