XGlucHV0IHRleGluZm8gIEBjIC0qLXRleGluZm8tKi0KQGMgJSoqc3RhcnQgb2YgaGVhZGVyCkBzZXRmaWxlbmFtZSBnZm9ydHJhbi5pbmZvCkBzZXQgY29weXJpZ2h0cy1nZm9ydHJhbiAxOTk5LTIwMDUKCkBpbmNsdWRlIGdjYy1jb21tb24udGV4aQoKQHNldHRpdGxlIFRoZSBHTlUgRm9ydHJhbiA5NSBDb21waWxlcgoKQGMgQ3JlYXRlIGEgc2VwYXJhdGUgaW5kZXggZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zCkBkZWZjb2RlaW5kZXggb3AKQGMgTWVyZ2UgdGhlIHN0YW5kYXJkIGluZGV4ZXMgaW50byBhIHNpbmdsZSBvbmUuCkBzeW5jb2RlaW5kZXggZm4gY3AKQHN5bmNvZGVpbmRleCB2ciBjcApAc3luY29kZWluZGV4IGt5IGNwCkBzeW5jb2RlaW5kZXggcGcgY3AKQHN5bmNvZGVpbmRleCB0cCBjcAoKQGMgJSoqZW5kIG9mIGhlYWRlcgoKQGMgVXNlIHdpdGggQEBzbWFsbGJvb2suCgpAYyAlKiogc3RhcnQgb2YgZG9jdW1lbnQKCkBjIENhdXNlIGV2ZW4gbnVtYmVyZWQgcGFnZXMgdG8gYmUgcHJpbnRlZCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YKQGMgdGhlIHBhZ2UgYW5kIG9kZCBudW1iZXJlZCBwYWdlcyB0byBiZSBwcmludGVkIG9uIHRoZSByaWdodCBoYW5kCkBjIHNpZGUgb2YgdGhlIHBhZ2UuICBVc2luZyB0aGlzLCB5b3UgY2FuIHByaW50IG9uIGJvdGggc2lkZXMgb2YgYQpAYyBzaGVldCBvZiBwYXBlciBhbmQgaGF2ZSB0aGUgdGV4dCBvbiB0aGUgc2FtZSBwYXJ0IG9mIHRoZSBzaGVldC4KCkBjIFRoZSB0ZXh0IG9uIHJpZ2h0IGhhbmQgcGFnZXMgaXMgcHVzaGVkIHRvd2FyZHMgdGhlIHJpZ2h0IGhhbmQKQGMgbWFyZ2luIGFuZCB0aGUgdGV4dCBvbiBsZWZ0IGhhbmQgcGFnZXMgaXMgcHVzaGVkIHRvd2FyZCB0aGUgbGVmdApAYyBoYW5kIG1hcmdpbi4KQGMgKFRvIHByb3ZpZGUgdGhlIHJldmVyc2UgZWZmZWN0LCBzZXQgYmluZGluZ29mZnNldCB0byAtMC43NWluLikKCkBjIEB0ZXgKQGMgXGdsb2JhbFxiaW5kaW5nb2Zmc2V0PTAuNzVpbgpAYyBcZ2xvYmFsXG5vcm1hbG9mZnNldCA9MC43NWluCkBjIEBlbmQgdGV4CgpAY29weWluZwpDb3B5cmlnaHQgQGNvcHlyaWdodHt9IEB2YWx1ZXtjb3B5cmlnaHRzLWdmb3J0cmFufSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KClBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAp1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjEgb3IKYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCkludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlJycgYW5kIGBgRnVuZGluZwpGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3Zlcgp0ZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQooc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZApgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgoKKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgoKICAgICBBIEdOVSBNYW51YWwKCihiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgoKICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCiAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgpAZW5kIGNvcHlpbmcKCkBpZmluZm8KQGRpcmNhdGVnb3J5IFByb2dyYW1taW5nCkBkaXJlbnRyeQoqIGdmb3J0cmFuOiAoZ2ZvcnRyYW4pLiAgICAgICAgICAgICAgICAgIFRoZSBHTlUgRm9ydHJhbiA5NSBDb21waWxlci4KQGVuZCBkaXJlbnRyeQpUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSB1c2UgYW5kIHRoZSBpbnRlcm5hbHMgb2YKdGhlIEdOVSBGb3J0cmFuIDk1IGNvbXBpbGVyLCAoQGNvbW1hbmR7Z2ZvcnRyYW59KS4KClB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCjU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMApCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCgpAaW5zZXJ0Y29weWluZwpAZW5kIGlmaW5mbwoKQ29udHJpYnV0ZWQgYnkgU3RldmVuIEJvc3NjaGVyIChAZW1haWx7cy5ib3NzY2hlckBAZ2NjLmdudS5vcmd9KS4KCkBzZXRjaGFwdGVybmV3cGFnZSBvZGQKQHRpdGxlcGFnZQpAdGl0bGUgVXNpbmcgR05VIEZvcnRyYW4gOTUKQHNwIDIKQGNlbnRlciBTdGV2ZW4gQm9zc2NoZXIKQHBhZ2UKQHZza2lwIDBwdCBwbHVzIDFmaWxsbApGb3IgdGhlIEB2YWx1ZXt2ZXJzaW9uLUdDQ30gVmVyc2lvbioKQHNwIDEKUHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gQCoKNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwQCoKQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0FAKgpAYyBMYXN0IHByaW50ZWQgPz9iZXIsIDE5Pz8uQCoKQGMgUHJpbnRlZCBjb3BpZXMgYXJlIGF2YWlsYWJsZSBmb3IgJD8gZWFjaC5AKgpAYyBJU0JOID8/PwpAc3AgMQpAaW5zZXJ0Y29weWluZwpAZW5kIHRpdGxlcGFnZQpAc3VtbWFyeWNvbnRlbnRzCkBjb250ZW50cwpAcGFnZQoKQG5vZGUgVG9wLCBDb3B5aW5nLCwgKERJUikKQHRvcCBJbnRyb2R1Y3Rpb24KQGNpbmRleCBJbnRyb2R1Y3Rpb24KClRoaXMgbWFudWFsIGRvY3VtZW50cyB0aGUgdXNlIG9mIEBjb21tYW5ke2dmb3J0cmFufSwgCnRoZSBHTlUgRm9ydHJhbiA5NSBjb21waWxlci4gWW91IGNhbiBmaW5kIGluIHRoaXMgbWFudWFsIGhvdyB0byBpbnZva2UKQGNvbW1hbmR7Z2ZvcnRyYW59LCBhcyB3ZWxsIGFzIGl0cyBmZWF0dXJlcyBhbmQgaW5jb21wYXRpYmlsaXRpZXMuCgpAaWZzZXQgREVWRUxPUE1FTlQKQGVtcGh7V2FybmluZzp9IFRoaXMgZG9jdW1lbnQsIGFuZCB0aGUgY29tcGlsZXIgaXQgZGVzY3JpYmVzLCBhcmUgc3RpbGwKdW5kZXIgZGV2ZWxvcG1lbnQuICBXaGlsZSBlZmZvcnRzIGFyZSBtYWRlIHRvIGtlZXAgaXQgdXAtdG8tZGF0ZSwgaXQgbWlnaHQKbm90IGFjY3VyYXRlbHkgcmVmbGVjdCB0aGUgc3RhdHVzIG9mIHRoZSBtb3N0IHJlY2VudCBAY29tbWFuZHtnZm9ydHJhbn0uCkBlbmQgaWZzZXQKCkBjb21tZW50CkBjb21tZW50ICBXaGVuIHlvdSBhZGQgYSBuZXcgbWVudSBpdGVtLCBwbGVhc2Uga2VlcCB0aGUgcmlnaHQgaGFuZApAY29tbWVudCAgYWxpZ25lZCB0byB0aGUgc2FtZSBjb2x1bW4uICBEbyBub3QgdXNlIHRhYnMuICBUaGlzIHByb3ZpZGVzCkBjb21tZW50ICBiZXR0ZXIgZm9ybWF0dGluZy4KQGNvbW1lbnQKQG1lbnUKKiBDb3B5aW5nOjogICAgICAgICAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHNheXMKICAgICAgICAgICAgICAgICAgICAgICAgIGhvdyB5b3UgY2FuIGNvcHkgYW5kIHNoYXJlIEdOVSBGb3J0cmFuLgoqIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTo6CgkJICAgICAgICAgSG93IHlvdSBjYW4gY29weSBhbmQgc2hhcmUgdGhpcyBtYW51YWwuCiogRnVuZGluZzo6ICAgICAgICAgICAgICBIb3cgdG8gaGVscCBhc3N1cmUgY29udGludWVkIHdvcmsgZm9yIGZyZWUgc29mdHdhcmUuCiogR2V0dGluZyBTdGFydGVkOjogICAgICBXaGF0IHlvdSBzaG91bGQga25vdyBhYm91dCBAY29tbWFuZHtnZm9ydHJhbn0uCiogR0ZPUlRSQU4gYW5kIEdDQzo6ICAgICBZb3UgY2FuIGNvbXBpbGUgRm9ydHJhbiwgQywgb3Igb3RoZXIgcHJvZ3JhbXMuCiogR0ZPUlRSQU4gYW5kIEc3Nzo6ICAgICBXaHkgd2UgY2hvc2UgdG8gc3RhcnQgZnJvbSBzY3JhdGNoLgoqIEludm9raW5nIEdGT1JUUkFOOjogICAgQ29tbWFuZCBvcHRpb25zIHN1cHBvcnRlZCBieSBAY29tbWFuZHtnZm9ydHJhbn0uCiogUHJvamVjdCBTdGF0dXM6OiAgICAgICBTdGF0dXMgb2YgQGNvbW1hbmR7Z2ZvcnRyYW59LCByb2FkbWFwLCBwcm9wb3NlZCBleHRlbnNpb25zLgoqIENvbnRyaWJ1dGluZzo6ICAgICAgICAgSG93IHlvdSBjYW4gaGVscC4KKiBTdGFuZGFyZHM6OgkgICAgICAgICBTdGFuZGFyZHMgc3VwcG9ydGVkIGJ5IEBjb21tYW5ke2dmb3J0cmFufQoqIEV4dGVuc2lvbnM6OiAgICAgICAgICAgTGFuZ3VhZ2UgZXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBieSBAY29tbWFuZHtnZm9ydHJhbn0KKiBJbnRyaW5zaWMgUHJvY2VkdXJlczo6IEludHJpbnNpYyBwcm9jZWR1cmVzIHN1cHBvcnRlZCBieSBAY29tbWFuZHtnZm9ydHJhbn0KKiBJbmRleDo6ICAgICAgICAgICAgICAgIEluZGV4IG9mIHRoaXMgZG9jdW1lbnRhdGlvbi4KQGVuZCBtZW51CgoKCkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAYyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkBpbmNsdWRlIGdwbC50ZXhpCgoKCkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAYyBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpAaW5jbHVkZSBmZGwudGV4aQoKCgpAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQGMgRnVuZGluZyBGcmVlIFNvZnR3YXJlCkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQGluY2x1ZGUgZnVuZGluZy50ZXhpCgoKCkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAYyBHZXR0aW5nIFN0YXJ0ZWQKQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpAbm9kZSBHZXR0aW5nIFN0YXJ0ZWQKQGNoYXB0ZXIgR2V0dGluZyBTdGFydGVkCgpHZm9ydHJhbiBpcyB0aGUgR05VIEZvcnRyYW4gOTUgY29tcGlsZXIgZnJvbnQgZW5kLApkZXNpZ25lZCBpbml0aWFsbHkgYXMgYSBmcmVlIHJlcGxhY2VtZW50IGZvciwKb3IgYWx0ZXJuYXRpdmUgdG8sIHRoZSB1bml4IEBjb21tYW5ke2Y5NX0gY29tbWFuZDsKQGNvbW1hbmR7Z2ZvcnRyYW59IGlzIGNvbW1hbmQgeW91J2xsIHVzZSB0byBpbnZva2UgdGhlIGNvbXBpbGVyLgoKQGVtcGh7R2ZvcnRyYW4gaXMgbm90IHlldCBhIGZ1bGx5IGNvbmZvcm1hbnQgRm9ydHJhbiA5NSBjb21waWxlcn0uCkl0IGNhbiBnZW5lcmF0ZSBjb2RlIGZvciBtb3N0IGNvbnN0cnVjdHMgYW5kIGV4cHJlc3Npb25zLApidXQgd29yayByZW1haW5zIHRvIGJlIGRvbmUuICBJbiBwYXJ0aWN1bGFyLCB0aGVyZSBhcmUga25vd24KZGVmaWNpZW5jaWVzIHdpdGggRU5UUlksIE5BTUVMSVNULCBhbmQgc29waGlzdGljYXRlZCB1c2Ugb2YKTU9EVUxFUywgUE9JTlRFUlMgYW5kIERFUklWRUQgVFlQRVMuICBGb3IgdGhvc2Ugd2hvc2UgRm9ydHJhbgpjb2RlcyBjb25mb3JtIHRvIGVpdGhlciB0aGUgRm9ydHJhbiA3NyBzdGFuZGFyZCBvciB0aGUKR05VIEZvcnRyYW4gNzcgbGFuZ3VhZ2UsIHdlIHJlY29tbWVuZCB0byB1c2UgQGNvbW1hbmR7Zzc3fQpmcm9tIEdDQyAzLjQuICBXZSByZWNvbW1lbmQgdGhhdCBkaXN0cmlidXRvcnMgY29udGludWUgdG8gcHJvdmlkZQpwYWNrYWdlcyBvZiBnNzctMy40IHVudGlsIHdlIGFubm91bmNlIHRoYXQgQGNvbW1hbmR7Z2ZvcnRyYW59CmZ1bGx5IHJlcGxhY2VzIEBjb21tYW5ke2c3N30uClRoZSBnZm9ydHJhbiBkZXZlbG9wZXJzIHdlbGNvbWUgYW55IGZlZWRiYWNrIG9uIHVzZXIgZXhwZXJpZW5jZQp3aXRoIEBjb21tYW5ke2dmb3J0cmFufSBhdCBAZW1haWx7Zm9ydHJhbkBAZ2NjLmdudS5vcmd9LgoKV2hlbiBAY29tbWFuZHtnZm9ydHJhbn0gaXMgZmluaXNoZWQsCml0IHdpbGwgZG8gZXZlcnl0aGluZyB5b3UgZXhwZWN0IGZyb20gYW55IGRlY2VudCBjb21waWxlcjogCgpAaXRlbWl6ZSBAYnVsbGV0CkBpdGVtClJlYWQgYSB1c2VyJ3MgcHJvZ3JhbSwKc3RvcmVkIGluIGEgZmlsZSBhbmQgY29udGFpbmluZyBpbnN0cnVjdGlvbnMgd3JpdHRlbgppbiBGb3J0cmFuIDc3LCBGb3J0cmFuIDkwIG9yIEZvcnRyYW4gOTUuClRoaXMgZmlsZSBjb250YWlucyBAZGZue3NvdXJjZSBjb2RlfS4KCkBpdGVtClRyYW5zbGF0ZSB0aGUgdXNlcidzIHByb2dyYW0gaW50byBpbnN0cnVjdGlvbnMgYSBjb21wdXRlcgpjYW4gY2Fycnkgb3V0IG1vcmUgcXVpY2tseSB0aGFuIGl0IHRha2VzIHRvIHRyYW5zbGF0ZSB0aGUKaW5zdHJ1Y3Rpb25zIGluIHRoZSBmaXJzdApwbGFjZS4gIFRoZSByZXN1bHQgYWZ0ZXIgY29tcGlsYXRpb24gb2YgYSBwcm9ncmFtIGlzCkBkZm57bWFjaGluZSBjb2RlfSwKY29kZSBkZXNpZ25lZCB0byBiZSBlZmZpY2llbnRseSB0cmFuc2xhdGVkIGFuZCBwcm9jZXNzZWQKYnkgYSBtYWNoaW5lIHN1Y2ggYXMgeW91ciBjb21wdXRlci4KSHVtYW5zIHVzdWFsbHkgYXJlbid0IGFzIGdvb2Qgd3JpdGluZyBtYWNoaW5lIGNvZGUKYXMgdGhleSBhcmUgYXQgd3JpdGluZyBGb3J0cmFuIChvciBDKyssIEFkYSwgb3IgSmF2YSksCmJlY2F1c2UgaXMgZWFzeSB0byBtYWtlIHRpbnkgbWlzdGFrZXMgd3JpdGluZyBtYWNoaW5lIGNvZGUuCgpAaXRlbQpQcm92aWRlIHRoZSB1c2VyIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlYXNvbnMgd2h5CnRoZSBjb21waWxlciBpcyB1bmFibGUgdG8gY3JlYXRlIGEgYmluYXJ5IGZyb20gdGhlIHNvdXJjZSBjb2RlLgpVc3VhbGx5IHRoaXMgd2lsbCBiZSB0aGUgY2FzZSBpZiB0aGUgc291cmNlIGNvZGUgaXMgZmxhd2VkLgpXaGVuIHdyaXRpbmcgRm9ydHJhbiwgaXQgaXMgZWFzeSB0byBtYWtlIGJpZyBtaXN0YWtlcy4KVGhlIEZvcnRyYW4gOTAgcmVxdWlyZXMgdGhhdCB0aGUgY29tcGlsZXIgY2FuIHBvaW50IG91dAptaXN0YWtlcyB0byB0aGUgdXNlci4KQW4gaW5jb3JyZWN0IHVzYWdlIG9mIHRoZSBsYW5ndWFnZSBjYXVzZXMgYW4gQGRmbntlcnJvciBtZXNzYWdlfS4KClRoZSBjb21waWxlciB3aWxsIGFsc28gYXR0ZW1wdCB0byBkaWFnbm9zZSBjYXNlcyB3aGVyZSB0aGUKdXNlcidzIHByb2dyYW0gY29udGFpbnMgYSBjb3JyZWN0IHVzYWdlIG9mIHRoZSBsYW5ndWFnZSwKYnV0IGluc3RydWN0cyB0aGUgY29tcHV0ZXIgdG8gZG8gc29tZXRoaW5nIHF1ZXN0aW9uYWJsZS4KVGhpcyBraW5kIG9mIGRpYWdub3N0aWNzIG1lc3NhZ2UgaXMgY2FsbGVkIGEgQGRmbnt3YXJuaW5nIG1lc3NhZ2V9LgoKQGl0ZW0KUHJvdmlkZSBvcHRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJhbnNsYXRpb24gcGFzc2VzCmZyb20gdGhlIHNvdXJjZSBjb2RlIHRvIG1hY2hpbmUgY29kZS4KVGhpcyBjYW4gaGVscCBhIHVzZXIgb2YgdGhlIGNvbXBpbGVyIHRvIGZpbmQgdGhlIGNhdXNlIG9mCmNlcnRhaW4gYnVncyB3aGljaCBtYXkgbm90IGJlIG9idmlvdXMgaW4gdGhlIHNvdXJjZSBjb2RlLApidXQgbWF5IGJlIG1vcmUgZWFzaWx5IGZvdW5kIGF0IGEgbG93ZXIgbGV2ZWwgY29tcGlsZXIgb3V0cHV0LgpJdCBhbHNvIGhlbHBzIGRldmVsb3BlcnMgdG8gZmluZCBidWdzIGluIHRoZSBjb21waWxlciBpdHNlbGYuCgpAaXRlbQpQcm92aWRlIGluZm9ybWF0aW9uIGluIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIHRoYXQgY2FuCm1ha2UgaXQgZWFzaWVyIHRvIGZpbmQgYnVncyBpbiB0aGUgcHJvZ3JhbSAodXNpbmcgYSBkZWJ1Z2dpbmcgdG9vbCwKY2FsbGVkIGEgQGRmbntkZWJ1Z2dlcn0sIHN1Y2ggYXMgdGhlIEdOVSBEZWJ1Z2dlciBAY29tbWFuZHtnZGJ9KS4gCgpAaXRlbQpMb2NhdGUgYW5kIGdhdGhlciBtYWNoaW5lIGNvZGUgYWxyZWFkeSBnZW5lcmF0ZWQgdG8KcGVyZm9ybSBhY3Rpb25zIHJlcXVlc3RlZCBieSBzdGF0ZW1lbnRzIGluIHRoZSB1c2VyJ3MgcHJvZ3JhbS4KVGhpcyBtYWNoaW5lIGNvZGUgaXMgb3JnYW5pemVkIGludG8gQGRmbnttb2R1bGVzfSBhbmQgaXMgbG9jYXRlZAphbmQgQGRmbntsaW5rZWR9IHRvIHRoZSB1c2VyIHByb2dyYW0uIApAZW5kIGl0ZW1pemUKCkdmb3J0cmFuIGNvbnNpc3RzIG9mIHNldmVyYWwgY29tcG9uZW50czoKCkBpdGVtaXplIEBidWxsZXQKQGl0ZW0KQSB2ZXJzaW9uIG9mIHRoZSBAY29tbWFuZHtnY2N9IGNvbW1hbmQKKHdoaWNoIGFsc28gbWlnaHQgYmUgaW5zdGFsbGVkIGFzIHRoZSBzeXN0ZW0ncyBAY29tbWFuZHtjY30gY29tbWFuZCkKdGhhdCBhbHNvIHVuZGVyc3RhbmRzIGFuZCBhY2NlcHRzIEZvcnRyYW4gc291cmNlIGNvZGUuClRoZSBAY29tbWFuZHtnY2N9IGNvbW1hbmQgaXMgdGhlIEBkZm57ZHJpdmVyfSBwcm9ncmFtIGZvcgphbGwgdGhlIGxhbmd1YWdlcyBpbiB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk7CldpdGggQGNvbW1hbmR7Z2NjfSwKeW91IGNhbiBjb21waWxlciB0aGUgc291cmNlIGNvZGUgb2YgYW55IGxhbmd1YWdlIGZvcgp3aGljaCBhIGZyb250IGVuZCBpcyBhdmFpbGFibGUgaW4gR0NDLgoKQGl0ZW0KVGhlIEBjb21tYW5ke2dmb3J0cmFufSBjb21tYW5kIGl0c2VsZiwKd2hpY2ggYWxzbyBtaWdodCBiZSBpbnN0YWxsZWQgYXMgdGhlCnN5c3RlbSdzIEBjb21tYW5ke2Y5NX0gY29tbWFuZC4KQGNvbW1hbmR7Z2ZvcnRyYW59IGlzIGp1c3QgYW5vdGhlciBkcml2ZXIgcHJvZ3JhbSwKYnV0IHNwZWNpZmljYWxseSBmb3IgdGhlIEZvcnRyYW4gOTUgY29tcGlsZXIgb25seS4KVGhlIGRpZmZlcmVuY2Ugd2l0aCBAY29tbWFuZHtnY2N9IGlzIHRoYXQgQGNvbW1hbmR7Z2ZvcnRyYW59CndpbGwgYXV0b21hdGljYWxseSBsaW5rIHRoZSBjb3JyZWN0IGxpYnJhcmllcyB0byB5b3VyIHByb2dyYW0uCgpAaXRlbQpBIGNvbGxlY3Rpb24gb2YgcnVuLXRpbWUgbGlicmFyaWVzLgpUaGVzZSBsaWJyYXJpZXMgY29udGFpbnMgdGhlIG1hY2hpbmUgY29kZSBuZWVkZWQgdG8gc3VwcG9ydApjYXBhYmlsaXRpZXMgb2YgdGhlIEZvcnRyYW4gbGFuZ3VhZ2UgdGhhdCBhcmUgbm90IGRpcmVjdGx5CnByb3ZpZGVkIGJ5IHRoZSBtYWNoaW5lIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZQpAY29tbWFuZHtnZm9ydHJhbn0gY29tcGlsYXRpb24gcGhhc2UsCnN1Y2ggYXMgaW50cmluc2ljIGZ1bmN0aW9ucyBhbmQgc3Vicm91dGluZXMsCmFuZCByb3V0aW5lcyBmb3IgaW50ZXJhY3Rpb24gd2l0aCBmaWxlcyBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0uCkBjIGFuZCBtZWNoYW5pc21zIHRvIHNwYXduLApAYyB1bmxlYXNoIGFuZCBwYXVzZSB0aHJlYWRzIGluIHBhcmFsbGVsaXplZCBjb2RlLgoKQGl0ZW0KVGhlIEZvcnRyYW4gY29tcGlsZXIgaXRzZWxmLCAoQGNvbW1hbmR7Zjk1MX0pLgpUaGlzIGlzIHRoZSBnZm9ydHJhbiBwYXJzZXIgYW5kIGNvZGUgZ2VuZXJhdG9yLApsaW5rZWQgdG8gYW5kIGludGVyZmFjZWQgd2l0aCB0aGUgR0NDIGJhY2tlbmQgbGlicmFyeS4KQGNvbW1hbmR7Zjk1MX0gYGB0cmFuc2xhdGVzJycgdGhlIHNvdXJjZSBjb2RlIHRvCmFzc2VtYmxlciBjb2RlLiAgWW91IHdvdWxkIHR5cGljYWxseSBub3QgdXNlIHRoaXMKcHJvZ3JhbSBkaXJlY3RseTsKaW5zdGVhZCwgdGhlIEBjb21tYW5ke2djY30gb3IgQGNvbW1hbmR7Z2ZvcnRyYW59IGRyaXZlcgpwcm9ncmFtcyB3aWxsIGNhbGwgaXQgZm9yIHlvdS4KQGVuZCBpdGVtaXplCgoKCkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAYyBHRk9SVFJBTiBhbmQgR0NDCkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQG5vZGUgR0ZPUlRSQU4gYW5kIEdDQwpAY2hhcHRlciBHRk9SVFJBTiBhbmQgR0NDCkBjaW5kZXggR05VIENvbXBpbGVyIENvbGxlY3Rpb24KCkdDQyB1c2VkIHRvIGJlIHRoZSBHTlUgYGBDJycgQ29tcGlsZXIsCmJ1dCBpcyBub3cga25vd24gYXMgdGhlIEBkZm57R05VIENvbXBpbGVyIENvbGxlY3Rpb259LgpHQ0MgcHJvdmlkZXMgdGhlIEdOVSBzeXN0ZW0gd2l0aCBhIHZlcnkgdmVyc2F0aWxlCmNvbXBpbGVyIG1pZGRsZSBlbmQgKHNoYXJlZCBvcHRpbWl6YXRpb24gcGFzc2VzKSwKYW5kIHdpdGggYmFjayBlbmRzIChjb2RlIGdlbmVyYXRvcnMpIGZvciBtYW55IGRpZmZlcmVudApjb21wdXRlciBhcmNoaXRlY3R1cmVzIGFuZCBvcGVyYXRpbmcgc3lzdGVtcy4KVGhlIGNvZGUgb2YgdGhlIG1pZGRsZSBlbmQgYW5kIGJhY2sgZW5kIGFyZSBzaGFyZWQgYnkgYWxsCmNvbXBpbGVyIGZyb250IGVuZHMgdGhhdCBhcmUgaW4gdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uLgoKQSBHQ0MgZnJvbnQgZW5kIGlzIGVzc2VudGlhbGx5IGEgc291cmNlIGNvZGUgcGFyc2VyCmFuZCBhIHBhc3MgdG8gZ2VuZXJhdGUgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2VtYW50aWNzCm9mIHRoZSBwcm9ncmFtIGluIHRoZSBzb3VyY2UgY29kZSBpbiB0aGUgR0NDIGxhbmd1YWdlCmluZGVwZW5kZW50IGludGVybWVkaWF0ZSBsYW5ndWFnZSwKY2FsbGVkIEBkZm57R0VORVJJQ30uCgpUaGUgcGFyc2VyIHRha2VzIGEgc291cmNlIGZpbGUgd3JpdHRlbiBpbiBhCnBhcnRpY3VsYXIgY29tcHV0ZXIgbGFuZ3VhZ2UsIHJlYWRzIGFuZCBwYXJzZXMgaXQsCmFuZCB0cmllcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc291cmNlIGNvZGUgY29uZm9ybXMgdG8KdGhlIGxhbmd1YWdlIHJ1bGVzLgpPbmNlIHRoZSBjb3JyZWN0bmVzcyBvZiBhIHByb2dyYW0gaGFzIGJlZW4gZXN0YWJsaXNoZWQsCnRoZSBjb21waWxlciB3aWxsIGJ1aWxkIGEgZGF0YSBzdHJ1Y3R1cmUga25vd24gYXMgdGhlCkBkZm57QWJzdHJhY3QgU3ludGF4IHRyZWV9LApvciBqdXN0IEBkZm57QVNUfSBvciBgYHRyZWUnJyBmb3Igc2hvcnQuClRoaXMgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgd2hvbGUgcHJvZ3JhbQpvciBhIHN1YnJvdXRpbmUgb3IgYSBmdW5jdGlvbi4KVGhlIGBgdHJlZScnIGlzIHBhc3NlZCB0byB0aGUgR0NDIG1pZGRsZSBlbmQsCndoaWNoIHdpbGwgcGVyZm9ybSBvcHRpbWl6YXRpb24gcGFzc2VzIG9uIGl0LApwYXNzIHRoZSBvcHRpbWl6ZWQgQVNUIGFuZCBnZW5lcmF0ZSBhc3NlbWJseQpmb3IgdGhlIHByb2dyYW0gdW5pdC4KCkRpZmZlcmVudCBwaGFzZXMgaW4gdGhpcyB0cmFuc2xhdGlvbiBwcm9jZXNzIGNhbiBiZSwKYW5kIGluIGZhY3QgQGVtcGh7YXJlfSBtZXJnZWQgaW4gbWFueSBjb21waWxlciBmcm9udCBlbmRzLgpHTlUgRm9ydHJhbiA5NSBoYXMgYSBzdHJpY3Qgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZQpwYXJzZXIgYW5kIGNvZGUgZ2VuZXJhdG9yLgoKVGhlIGdvYWwgb2YgdGhlIGdmb3J0cmFuIHByb2plY3QgaXMgdG8gYnVpbGQgYSBuZXcgZnJvbnQgZW5kIGZvciBHQ0M6CkEgRm9ydHJhbiA5NSBmcm9udCBlbmQuCkluIGEgbm9uLWdmb3J0cmFuIGluc3RhbGxhdGlvbiwKQGNvbW1hbmR7Z2NjfSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvbXBpbGUgRm9ydHJhbiA5NSBzb3VyY2UgY29kZQoob25seSB0aGUgYGBDJycgZnJvbnQgZW5kIGhhcyB0byBiZSBjb21waWxlZCBpZiB5b3Ugd2FudCB0byBidWlsZCBHQ0MsCmFsbCBvdGhlciBsYW5ndWFnZXMgYXJlIG9wdGlvbmFsKS4KSWYgeW91IGJ1aWxkIEdDQyB3aXRoIGdmb3J0cmFuLCBAY29tbWFuZHtnY2N9IHdpbGwgcmVjb2duaXplCkBmaWxley5mLy5mOTAvLmY5NX0gc291cmNlIGZpbGVzIGFuZCBhY2NlcHRzIEZvcnRyYW4gOTUgc3BlY2lmaWMKY29tbWFuZCBsaW5lIG9wdGlvbnMuCgoKCkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAYyBHRk9SVFJBTiBhbmQgRzc3CkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQG5vZGUgR0ZPUlRSQU4gYW5kIEc3NwpAY2hhcHRlciBHRk9SVFJBTiBhbmQgRzc3CkBjaW5kZXggRm9ydHJhbiA3NwpAY2luZGV4IEc3NwoKV2h5IGRvIHdlIHdyaXRlIGEgY29tcGlsZXIgZnJvbnQgZW5kIGZyb20gc2NyYXRjaD8gClRoZXJlJ3MgYSBmaW5lIEZvcnRyYW4gNzcgY29tcGlsZXIgaW4gdGhlCkdOVSBDb21waWxlciBDb2xsZWN0aW9uIHRoYXQgYWNjZXB0cyBzb21lIGZlYXR1cmVzCm9mIHRoZSBGb3J0cmFuIDkwIHN0YW5kYXJkIGFzIGV4dGVuc2lvbnMuCldoeSBub3Qgc3RhcnQgZnJvbSB0aGVyZSBhbmQgcmV2YW1wIGl0PwoKT25lIG9mIHRoZSByZWFzb25zIGlzIHRoYXQgQ3JhaWcgQnVybGV5LCB0aGUgYXV0aG9yIG9mIEc3NywKaGFzIGRlY2lkZWQgdG8gc3RvcCB3b3JraW5nIG9uIHRoZSBHNzcgZnJvbnQgZW5kLgpPbiBAdXJlZntodHRwOi8vd29ybGQuc3RkLmNvbS9+YnVybGV5L2c3Ny13aHkuaHRtbCwKQ3JhaWcgZXhwbGFpbnMgdGhlIHJlYXNvbnMgZm9yIGhpcyBkZWNpc2lvbiB0byBzdG9wIHdvcmtpbmcgb24gRzc3fQppbiBvbmUgb2YgdGhlIHBhZ2VzIGluIGhpcyBob21lcGFnZS4KQW1vbmcgdGhlIHJlYXNvbnMgaXMgYSBsYWNrIG9mIGludGVyZXN0IGluIGltcHJvdmVtZW50cyB0bwpAY29tbWFuZHtnNzd9LgpVc2VycyBhcHBlYXIgdG8gYmUgcXVpdGUgc2F0aXNmaWVkIHdpdGggQGNvbW1hbmR7Zzc3fSBhcyBpdCBpcy4KV2hpbGUgQGNvbW1hbmR7Zzc3fSBpcyBzdGlsbCBiZWluZyBtYWludGFpbmVkIChieSBUb29uIE1vZW5lKSwKaXQgaXMgdW5saWtlbHkgdGhhdCBzdWZmaWNpZW50IHBlb3BsZSB3aWxsIGJlIHdpbGxpbmcKdG8gY29tcGxldGVseSByZXdyaXRlIHRoZSBleGlzdGluZyBjb2RlLiAKCkJ1dCB0aGVyZSBhcmUgb3RoZXIgcmVhc29ucyB0byBzdGFydCBmcm9tIHNjcmF0Y2guCk1hbnkgcGVvcGxlLCBpbmNsdWRpbmcgQ3JhaWcgQnVybGV5LApubyBsb25nZXIgYWdyZWVkIHdpdGggY2VydGFpbiBkZXNpZ24gZGVjaXNpb25zIGluIHRoZSBHNzcgZnJvbnQgZW5kLgpBbHNvLCB0aGUgaW50ZXJmYWNlIG9mIEBjb21tYW5ke2c3N30gdG8gdGhlIGJhY2sgZW5kIGlzIHdyaXR0ZW4gaW4KYSBzdHlsZSB3aGljaCBpcyBjb25mdXNpbmcgYW5kIG5vdCB1cCB0byBkYXRlIG9uIHJlY29tbWVuZGVkIHByYWN0aWNlLgpJbiBmYWN0LCBhIGZ1bGwgcmV3cml0ZSBoYWQgYWxyZWFkeSBiZWVuIHBsYW5uZWQgZm9yIEdDQyAzLjAuCgpXaGVuIENyYWlnIGRlY2lkZWQgdG8gc3RvcCwKaXQganVzdCBzZWVtZWQgdG8gYmUgYSBiZXR0ZXIgaWRlYSB0byBzdGFydCBhIG5ldyBwcm9qZWN0IGZyb20gc2NyYXRjaCwKYmVjYXVzZSBpdCB3YXMgZXhwZWN0ZWQgdG8gYmUgZWFzaWVyIHRvIG1haW50YWluIGNvZGUgd2UKZGV2ZWxvcCBvdXJzZWx2ZXMgdGhhbiB0byBkbyBhIG1ham9yIG92ZXJoYXVsIG9mIEBjb21tYW5ke2c3N30gZmlyc3QsCmFuZCB0aGVuIGJ1aWxkIGEgRm9ydHJhbiA5NSBjb21waWxlciBvdXQgb2YgaXQuCgpAaW5jbHVkZSBpbnZva2UudGV4aQoKQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBjIFByb2plY3QgU3RhdHVzCkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQG5vZGUgUHJvamVjdCBTdGF0dXMKQGNoYXB0ZXIgUHJvamVjdCBTdGF0dXMKCkBxdW90YXRpb24KQXMgc29vbiBhcyBnZm9ydHJhbiBjYW4gcGFyc2UgYWxsIG9mIHRoZSBzdGF0ZW1lbnRzIGNvcnJlY3RseSwKaXQgd2lsbCBiZSBpbiB0aGUgYGBsYXJ2YScnIHN0YXRlLgpXaGVuIHdlIGdlbmVyYXRlIGNvZGUsIHRoZSBgYHB1cHBhJycgc3RhdGUuCldoZW4gZ2ZvcnRyYW4gaXMgZG9uZSwKd2UnbGwgc2VlIGlmIGl0IHdpbGwgYmUgYSBiZWF1dGlmdWwgYnV0dGVyZmx5LApvciBqdXN0IGEgYmlnIGJ1Zy4uLi4KCi0tQW5keSBWYXVnaHQsIEFwcmlsIDIwMDAKQGVuZCBxdW90YXRpb24KClRoZSBzdGFydCBvZiB0aGUgR05VIEZvcnRyYW4gOTUgcHJvamVjdCB3YXMgYW5ub3VuY2VkIG9uCnRoZSBHQ0MgaG9tZXBhZ2UgaW4gTWFyY2ggMTgsIDIwMDAKKGV2ZW4gdGhvdWdoIEFuZHkgaGFkIGFscmVhZHkgYmVlbiB3b3JraW5nIG9uIGl0IGZvciBhIHdoaWxlLApvciBjb3Vyc2UpLgoKR2ZvcnRyYW4gaXMgY3VycmVudGx5IHJlYWNoaW5nIHRoZSBzdGFnZSB3aGVyZSBpcyBpcyBhYmxlIHRvIGNvbXBpbGUgcmVhbAp3b3JsZCBwcm9ncmFtcy4gIEhvd2V2ZXIgaXQgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGhhcyBtYW55IHJvdWdoCmVkZ2VzLgoKQG1lbnUKKiBDb21waWxlciBTdGF0dXM6OgoqIExpYnJhcnkgU3RhdHVzOjoKKiBQcm9wb3NlZCBFeHRlbnNpb25zOjoKQGVuZCBtZW51CgpAbm9kZSBDb21waWxlciBTdGF0dXMKQHNlY3Rpb24gQ29tcGlsZXIgU3RhdHVzCgpAdGFibGUgQGVtcGgKQGl0ZW0gRnJvbnQgZW5kClRoaXMgaXMgdGhlIHBhcnQgb2YgZ2ZvcnRyYW4gd2hpY2ggcGFyc2VzIGEgc291cmNlIGZpbGUsIHZlcmlmaWVzIHRoYXQgaXQKaXMgdmFsaWQgRm9ydHJhbiA5NSwgcGVyZm9ybXMgY29tcGlsZSB0aW1lIHJlcGxhY2VtZW50IG9mIGNvbnN0YW50cwooUEFSQU1FVEVSIHZhcmlhYmxlcykgYW5kIHJlYWRzIGFuZCBnZW5lcmF0ZSBtb2R1bGUgZmlsZXMuIFRoaXMgaXMKYWxtb3N0IGNvbXBsZXRlLiBFdmVyeSBGb3J0cmFuIDk1IHNvdXJjZSBzaG91bGQgYmUgYWNjZXB0ZWQsIGFuZCBtb3N0Cm5vbmUtRm9ydHJhbiA5NSBzb3VyY2Ugc2hvdWxkIGJlIHJlamVjdGVkLiBJZiB5b3UgZmluZCBhIHNvdXJjZSBmaWxlIHdoZXJlCnRoaXMgaXMgbm90IHRydWUsIHBsZWFzZSB0ZWxsIHVzLiBZb3UgY2FuIHVzZSB0aGUgLWZzeW50YXgtb25seSBzd2l0Y2ggdG8KbWFrZSBnZm9ydHJhbiBxdWl0IGFmdGVyIHJ1bm5pbmcgdGhlIGZyb250IGVuZCwgZWZmZWN0aXZlbHkgcmVkdWNpbmcgaXQgdG8KYSBzeW50YXggY2hlY2tlci4KCkBpdGVtIE1pZGRsZSBlbmQgaW50ZXJmYWNlClRoZXNlIGFyZSB0aGUgcGFydHMgb2YgZ2ZvcnRyYW4gdGhhdCB0YWtlIHRoZSBwYXJzZSB0cmVlIGdlbmVyYXRlZCBieSB0aGUKZnJvbnQgZW5kIGFuZCB0cmFuc2xhdGUgaXQgdG8gdGhlIEdFTkVSSUMgZm9ybSByZXF1aXJlZCBieSB0aGUgR0NDIGJhY2sKZW5kLiBXb3JrIGlzIG9uZ29pbmcgaW4gdGhlc2UgcGFydHMgb2YgZ2ZvcnRyYW4sIGJ1dCBhIGxhcmdlIHBhcnQgaGFzCmFscmVhZHkgYmVlbiBjb21wbGV0ZWQuCkBlbmQgdGFibGUKCkBub2RlIExpYnJhcnkgU3RhdHVzCkBzZWN0aW9uIExpYnJhcnkgU3RhdHVzCgpTb21lIGludHJpbnNpYyBmdW5jdGlvbnMgbWFwIGRpcmVjdGx5IHRvIGxpYnJhcnkgZnVuY3Rpb25zLCBhbmQgaW4gbW9zdApjYXNlcyB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBmdW5jdGlvbiB1c2VkIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgdGhlCmFyZ3VtZW50cy4gIEZvciBzb21lIGludHJpbnNpY3Mgd2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUsIGFuZCBmb3Igb3RoZXJzLApzdWNoIGFzIHNpbiwgY29zIGFuZCBzcXJ0LCB3ZSByZWx5IG9uIHRoZSBiYWNrZW5kIHRvIHVzZSBzcGVjaWFsCmluc3RydWN0aW9ucyBpbiB0aGUgZmxvYXRpbmcgcG9pbnQgdW5pdCBvZiB0aGUgQ1BVIGlmIGF2YWlsYWJsZSwgb3IgdG8KZmFsbCBiYWNrIHRvIGEgY2FsbCB0byBsaWJtIGlmIHRoZXNlIGFyZSBub3QgYXZhaWxhYmxlLgoKSW1wbGVtZW50YXRpb24gb2Ygc29tZSBub24tZWxlbWVudGFsIGludHJpbnNpYyBmdW5jdGlvbnMgKGVnLiBET1RfUFJPRFVDVCwKQVZFUkFHRSkgaXMgbm90IHlldCBvcHRpbWFsLiBUaGlzIGlzIGhhcmQgYmVjYXVzZSB3ZSBoYXZlIHRvIG1ha2UgZGVjaXNpb25zCndoZXRoZXIgdG8gdXNlIGlubGluZSBjb2RlIChnb29kIGZvciBzbWFsbCBhcnJheXMgYXMgbm8gZnVuY3Rpb24gY2FsbApvdmVyaGVhZCBvY2N1cnMpIG9yIGdlbmVyYXRlIGZ1bmN0aW9uIGNhbGxzIChnb29kIGZvciBsYXJnZSBhcnJheXMgYXMgaXQKYWxsb3dzIHVzZSBvZiBoYW5kLW9wdGltaXplZCBhc3NlbWJseSByb3V0aW5lcywgU0lNRCBpbnN0cnVjdGlvbnMsIGV0Yy4pCgpUaGUgSU8gbGlicmFyeSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudC4gIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgc2hvdWxkIGJlCnVzYWJsZSBmb3IgcmVhbCBwcm9ncmFtczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbSBMaXN0IGRpcmVjdGVkCkBpdGVtIFVuZm9ybWF0dGVkIHNlcXVlbnRpYWwKQGVuZCBpdGVtaXplCgpVc2FibGUgd2l0aCBidWdzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtIEZvcm1hdHRlZCBzZXF1ZW50aWFsICgnVCcgZWRpdCBkZXNjcmlwdG9yLCBhbmQgb3RoZXJzKQpAZW5kIGl0ZW1pemUKCk5vdCByZWNvbW1lbmRlZDoKCkBpdGVtaXplIEBtaW51cwpAaXRlbSBVbmZvcm1hdHRlZCBkaXJlY3QgYWNjZXNzCkBpdGVtIEZvcm1hdHRlZCBkaXJlY3QgYWNjZXNzCkBlbmQgaXRlbWl6ZQoKTWFueSBGb3J0cmFuIHByb2dyYW1zIG9ubHkgdXNlIGEgc21hbGwgc3Vic2V0IG9mIHRoZSBhdmFpbGFibGUgSU8KY2FwYWJpbGl0aWVzLCBzbyB5b3VyIG1pbGVhZ2UgbWF5IHZhcnkuCgpAbm9kZSBQcm9wb3NlZCBFeHRlbnNpb25zCkBzZWN0aW9uIFByb3Bvc2VkIEV4dGVuc2lvbnMKCkhlcmUncyBhIGxpc3Qgb2YgcHJvcG9zZWQgZXh0ZW5zaW9ucyBmb3IgQGNvbW1hbmR7Z2ZvcnRyYW59LCBpbiBubyBwYXJ0aWN1bGFyCm9yZGVyLiAgTW9zdCBvZiB0aGVzZSBhcmUgbmVjZXNzYXJ5IHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aApleGlzdGluZyBGb3J0cmFuIGNvbXBpbGVycywgYnV0IHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBvZmZpY2lhbApKMyBGb3J0cmFuIDk1IHN0YW5kYXJkLgoKQHN1YnNlY3Rpb24gQ29tcGlsZXIgZXh0ZW5zaW9uczogCkBpdGVtaXplIEBidWxsZXQKQGl0ZW0KRmxhZyBmb3IgZGVmaW5pbmcgdGhlIGtpbmQgbnVtYmVyIGZvciBkZWZhdWx0IGxvZ2ljYWxzLgoKQGl0ZW0KVXNlci1zcGVjaWZpZWQgYWxpZ25tZW50IHJ1bGVzIGZvciBzdHJ1Y3R1cmVzLgpAaXRlbQpGbGFnIHRvIGdlbmVyYXRlIGEgQGNvZGV7TWFrZWZpbGV9IGluZm8uCgpAaXRlbQpBdXRvbWF0aWNhbGx5IGV4dGVuZCBzaW5nbGUgcHJlY2lzaW9uIGNvbnN0YW50cyB0byBkb3VibGUuCgpAaXRlbQpDcmF5IHBvaW50ZXJzICh0aGlzIHdhcyBoaWdoIG9uIHRoZSBAY29tbWFuZHtnNzd9IHdpc2hsaXN0KS4KCkBpdGVtCkNvbXBpbGUgY29kZSB0aGF0IGNvbnNlcnZlcyBtZW1vcnkgYnkgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBjb21tb24gYW5kCm1vZHVsZSBzdG9yYWdlIGVpdGhlciBvbiBzdGFjayBvciBoZWFwLgoKQGl0ZW0KRmxhZyB0byBjYXVzZSB0aGUgY29tcGlsZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1cHBlciBhbmQgbG93ZXIgY2FzZQpuYW1lcy4gIFRoZSBGb3J0cmFuIDk1IHN0YW5kYXJkIGRvZXMgbm90IGRpc3Rpbmd1aXNoIHRoZW0uCgpAaXRlbQpDb21waWxlIGZsYWcgdG8gZ2VuZXJhdGUgY29kZSBmb3IgYXJyYXkgY29uZm9ybWFuY2UgY2hlY2tpbmcgKHN1Z2dlc3QgLUNDKS4KCkBpdGVtClVzZXIgY29udHJvbCBvZiBzeW1ib2wgbmFtZXMgKHVuZGVyc2NvcmVzLCBldGMpLgoKQGl0ZW0KQ29tcGlsZSBzZXR0aW5nIGZvciBtYXhpbXVtIHNpemUgb2Ygc3RhY2sgZnJhbWUgc2l6ZSBiZWZvcmUgc3BpbGxpbmcKcGFydHMgdG8gc3RhdGljIG9yIGhlYXAuCgpAaXRlbQpGbGFnIHRvIGZvcmNlIGxvY2FsIHZhcmlhYmxlcyBpbnRvIHN0YXRpYyBzcGFjZS4KCkBpdGVtCkZsYWcgdG8gZm9yY2UgbG9jYWwgdmFyaWFibGVzIG9udG8gc3RhY2suCgpAaXRlbQpGbGFnIHRvIGNvbXBpbGUgbGluZXMgYmVnaW5uaW5nIHdpdGggYGBEJycuCgpAaXRlbQpGbGFnIHRvIGlnbm9yZSBsaW5lcyBiZWdpbm5pbmcgd2l0aCBgYEQnJy4KCkBpdGVtCkZsYWcgZm9yIG1heGltdW0gZXJyb3JzIGJlZm9yZSBlbmRpbmcgY29tcGlsZS4KCkBpdGVtCkdlbmVyYXRlIGNvZGUgdG8gY2hlY2sgZm9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgLS0gcHJpbnRzIGxvY3VzIG9mCmRlcmVmZXJlbmNlIGluc3RlYWQgb2Ygc2VnZmF1bHRpbmcuICBUaGVyZSB3YXMgc29tZSBkaXNjdXNzaW9uIGFib3V0IHRoaXMKb3B0aW9uIGluIHRoZSBnOTUgZGV2ZWxvcG1lbnQgbWFpbGluZyBsaXN0LgoKQGl0ZW0KQWxsb3cgc2V0dGluZyBkZWZhdWx0IHVuaXQgbnVtYmVyLgoKQGl0ZW0KT3B0aW9uIHRvIGluaXRpYWxpemUgb2Ygb3RoZXJ3aXNlIHVuaW5pdGlhbGl6ZWQgaW50ZWdlciBhbmQgZmxvYXRpbmcKcG9pbnQgdmFyaWFibGVzLgoKQGl0ZW0KU3VwcG9ydCBmb3IgT3Blbk1QIGRpcmVjdGl2ZXMuICBUaGlzIGFsc28gcmVxdWlyZXMgc3VwcG9ydCBmcm9tIHRoZSBydW50aW1lCmxpYnJhcnkgYW5kIHRoZSByZXN0IG9mIHRoZSBjb21waWxlci4KCkBpdGVtClN1cHBvcnQgZm9yIEZvcnRyYW4gMjAweC4gVGhpcyBpbmNsdWRlcyBzZXZlcmFsIG5ldyBmZWF0dXJlcyBpbmNsdWRpbmcKZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9ucywgZXh0ZW5kZWQgdXNlIG9mIGFsbG9jYXRhYmxlIGFycmF5cywgQwppbnRlcm9wZXJhYmlsaXR5LCBQYXJhbWV0ZXJpemVyIGRhdGEgdHlwZXMgYW5kIGZ1bmN0aW9uIHBvaW50ZXJzLgpAZW5kIGl0ZW1pemUKCgpAc3Vic2VjdGlvbiBFbnZpcm9ubWVudCBPcHRpb25zCkBpdGVtaXplIEBidWxsZXQKQGl0ZW0KUGx1Z2dhYmxlIGxpYnJhcnkgbW9kdWxlcyBmb3IgcmFuZG9tIG51bWJlcnMsIGxpbmVhciBhbGdlYnJhLgpMQSBzaG91bGQgdXNlIEJMQVMgY2FsbGluZyBjb252ZW50aW9ucy4KCkBpdGVtCkVudmlyb25tZW50IHZhcmlhYmxlcyBjb250cm9sbGluZyBhY3Rpb25zIG9uIGFyaXRobWV0aWMgZXhjZXB0aW9ucyBsaWtlCm92ZXJmbG93LCB1bmRlcmZsb3csIHByZWNpc2lvbiBsb3NzIC0tIEdlbmVyYXRlIE5hTiwgYWJvcnQsIGRlZmF1bHQuCmFjdGlvbi4KCkBpdGVtClNldCBwcmVjaXNpb24gZm9yIGZwIHVuaXRzIHRoYXQgc3VwcG9ydCBpdCAoaTM4NykuCgpAaXRlbQpWYXJpYWJsZXMgZm9yIHNldHRpbmcgZnAgcm91bmRpbmcgbW9kZS4KCkBpdGVtClZhcmlhYmxlIHRvIGZpbGwgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgd2l0aCBhIHVzZXItZGVmaW5lZCBiaXQKcGF0dGVybi4KCkBpdGVtCkVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRyb2xsaW5nIGZpbGVuYW1lIHRoYXQgaXMgb3BlbmVkIGZvciB0aGF0IHVuaXQKbnVtYmVyLgoKQGl0ZW0KRW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY2xlYXIvdHJhc2ggbWVtb3J5IGJlaW5nIGZyZWVkLgoKQGl0ZW0KRW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY29udHJvbCB0cmFjaW5nIG9mIGFsbG9jYXRpb25zIGFuZCBmcmVlcy4KCkBpdGVtCkVudmlyb25tZW50IHZhcmlhYmxlIHRvIGRpc3BsYXkgYWxsb2NhdGVkIG1lbW9yeSBhdCBub3JtYWwgcHJvZ3JhbSBlbmQuCgpAaXRlbQpFbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgZmlsZW5hbWUgZm9yICogSU8tdW5pdC4KCkBpdGVtCkVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0ZW1wb3JhcnkgZmlsZSBkaXJlY3RvcnkuCgpAaXRlbQpFbnZpcm9ubWVudCB2YXJpYWJsZSBmb3JjaW5nIHN0YW5kYXJkIG91dHB1dCB0byBiZSBsaW5lIGJ1ZmZlcmVkICh1bml4KS4KCkBpdGVtClZhcmlhYmxlIGZvciBzd2FwcGluZyBlbmRpYW5uZXNzIGR1cmluZyB1bmZvcm1hdHRlZCByZWFkLgoKQGl0ZW0KVmFyaWFibGUgZm9yIHN3YXBwaW5nIEVuZGlhbm5lc3MgZHVyaW5nIHVuZm9ybWF0dGVkIHdyaXRlLgpAZW5kIGl0ZW1pemUKCkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAYyBFeHRlbnNpb25zCkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQGMgTWF5YmUgdGhpcyBjaGFwdGVyIHNob3VsZCBiZSBtZXJnZWQgd2l0aCB0aGUgJ1N0YW5kYXJkcycgc2VjdGlvbiwKQGMgd2hlbmV2ZXIgdGhhdCBpcyB3cml0dGVuIDotKQoKQG5vZGUgRXh0ZW5zaW9ucwpAY2hhcHRlciBFeHRlbnNpb25zCkBjaW5kZXggRXh0ZW5zaW9uCgpAY29tbWFuZHtnZm9ydHJhbn0gaW1wbGVtZW50cyBhIG51bWJlciBvZiBleHRlbnNpb25zIG92ZXIgc3RhbmRhcmQKRm9ydHJhbi4gVGhpcyBjaGFwdGVyIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZWlyIHN5bnRheCBhbmQKbWVhbmluZy4KCkBtZW51CiogT2xkLXN0eWxlIGtpbmQgc3BlY2lmaWNhdGlvbnM6OgoqIE9sZC1zdHlsZSB2YXJpYWJsZSBpbml0aWFsaXphdGlvbjo6CiogRXh0ZW5zaW9ucyB0byBuYW1lbGlzdDo6CkBlbmQgbWVudQoKQG5vZGUgT2xkLXN0eWxlIGtpbmQgc3BlY2lmaWNhdGlvbnMKQHNlY3Rpb24gT2xkLXN0eWxlIGtpbmQgc3BlY2lmaWNhdGlvbnMKQGNpbmRleCBLaW5kIHNwZWNpZmljYXRpb25zCgpAY29tbWFuZHtnZm9ydHJhbn0gYWxsb3dzIG9sZC1zdHlsZSBraW5kIHNwZWNpZmljYXRpb25zIGluCmRlY2xhcmF0aW9ucy4gVGhlc2UgbG9vayBsaWtlOgpAc21hbGxleGFtcGxlCiAgICAgIFRZUEVTUEVDKmsgeCx5LHoKQGVuZCBzbWFsbGV4YW1wbGUKd2hlcmUgQGNvZGV7VFlQRVNQRUN9IGlzIGEgYmFzaWMgdHlwZSwgYW5kIHdoZXJlIEBjb2Rle2t9IGlzIGEgdmFsaWQga2luZApudW1iZXIgZm9yIHRoYXQgdHlwZS4gVGhlIHN0YXRlbWVudCB0aGVuIGRlY2xhcmVzIEBjb2Rle3h9LCBAY29kZXt5fQphbmQgQGNvZGV7en0gdG8gYmUgb2YgdHlwZSBAY29kZXtUWVBFU1BFQ30gd2l0aCBraW5kIEBjb2Rle2t9LiBJbgpvdGhlciB3b3JkcywgaXQgaXMgZXF1aXZhbGVudCB0byB0aGUgc3RhbmRhcmQgY29uZm9ybWluZyBkZWNsYXJhdGlvbgpAc21hbGxleGFtcGxlCiAgICAgIFRZUEVTUEVDKGspIHgseSx6CkBlbmQgc21hbGxleGFtcGxlCgpAbm9kZSBPbGQtc3R5bGUgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24KQHNlY3Rpb24gT2xkLXN0eWxlIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uCkBjaW5kZXggSW5pdGlhbGl6YXRpb24KCkBjb21tYW5ke2dmb3J0cmFufSBhbGxvd3Mgb2xkLXN0eWxlIGluaXRpYWxpemF0aW9uIG9mIHZhcmlhYmxlcyBvZiB0aGUKZm9ybToKQHNtYWxsZXhhbXBsZQogICAgICBJTlRFR0VSKjQgaS8xLyxqLzIvCiAgICAgIFJFQUwqOCB4KDIsMikgLzMqMC4sMS4vCkBlbmQgc21hbGxleGFtcGxlClRoZXNlIGFyZSBvbmx5IGFsbG93ZWQgaW4gZGVjbGFyYXRpb25zIHdpdGhvdXQgZG91YmxlIGNvbG9ucwooQGNvZGV7Ojp9KSwgYXMgdGhlc2Ugd2VyZSBpbnRyb2R1Y2VkIGluIEZvcnRyYW4gOTAgd2hpY2ggYWxzbwppbnRyb2R1Y2VkIGEgbmV3IHN5bnRheCBmb3IgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLiBUaGUgc3ludGF4IGZvcgp0aGUgaW5kaXZpZHVhbCBpbml0aWFsaXplcnMgaXMgYXMgZm9yIHRoZSBAY29kZXtEQVRBfSBzdGF0ZW1lbnQsIGJ1dAp1bmxpa2UgaW4gYSBAY29kZXtEQVRBfSBzdGF0ZW1lbnQsIGFuIGluaXRpYWxpemVyIG9ubHkgYXBwbGllcyB0byB0aGUKdmFyaWFibGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nLiBJbiBvdGhlciB3b3Jkcywgc29tZXRoaW5nIGxpa2UKQGNvZGV7SU5URUdFUiBJLEovMiwzL30gaXMgbm90IHZhbGlkLgoKRXhhbXBsZXMgb2Ygc3RhbmRhcmQgY29uZm9ybWluZyBjb2RlIGVxdWl2YWxlbnQgdG8gdGhlIGFib3ZlIGV4YW1wbGUsIGFyZToKQHNtYWxsZXhhbXBsZQohIEZvcnRyYW4gOTAKICAgICAgSU5URUdFUig0KSA6OiBpID0gMSwgaiA9IDIKICAgICAgUkVBTCg4KSA6OiB4KDIsMikgPSBSRVNIQVBFKCgvMC4sMC4sMC4sMS4vKSxTSEFQRSh4KSkKISBGb3J0cmFuIDc3CiAgICAgIElOVEVHRVIgIGksIGoKICAgICAgRE9VQkxFIFBSRUNJU0lPTiB4KDIsMikKICAgICAgREFUQSBpLGoseCAvMSwyLDMqMC4sMS4vCkBlbmQgc21hbGxleGFtcGxlCgpAbm9kZSBFeHRlbnNpb25zIHRvIG5hbWVsaXN0CkBzZWN0aW9uIEV4dGVuc2lvbnMgdG8gbmFtZWxpc3QKQGNpbmRleCBOYW1lbGlzdAoKQGNvbW1hbmR7Z2ZvcnRyYW59IGZ1bGx5IHN1cHBvcnRzIHRoZSBmb3J0cmFuOTUgc3RhbmRhcmQgZm9yIG5hbWVsaXN0IGlvCmluY2x1ZGluZyBhcnJheSBxdWFsaWZpZXJzLCBzdWJzdHJpbmdzIGFuZCBmdWxseSBxdWFsaWZpZWQgZGVyaXZlZCB0eXBlcy4KVGhlIG91dHB1dCBmcm9tIGEgbmFtZWxpc3Qgd3JpdGUgaXMgY29tcGF0aWJsZSB3aXRoIG5hbWVsaXN0IHJlYWQuICBUaGUKb3V0cHV0IGhhcyBhbGwgbmFtZXMgaW4gdXBwZXIgY2FzZSBhbmQgaW5kZW50YXRpb24gdG8gY29sdW1uIDEgYWZ0ZXIgdGhlCm5hbWVsaXN0IG5hbWUuICBUd28gZXh0ZW5zaW9ucyBhcmUgcGVybWl0dGVkOgoKT2xkLXN0eWxlIHVzZSBvZiAkIGluc3RlYWQgb2YgJgpAc21hbGxleGFtcGxlCiRNWU5NTAogWCg6KSVZKDIpID0gMS4wIDIuMCAzLjAKIENIKDE6NCkgPSAiYWJjZCIKJEVORApAZW5kIHNtYWxsZXhhbXBsZQoKSXQgc2hvdWxkIGJlIG5vdGljZWQgdGhhdCB0aGUgZGVmYXVsdCB0ZXJtaW5hdG9yIGlzIC8gcmF0aGVyIHRoYW4gJkVORC4KClF1ZXJ5aW5nIG9mIHRoZSBuYW1lbGlzdCB3aGVuIGlucHV0dGluZyBmcm9tIHN0ZGluLiBBZnRlciBhdCBsZWFzdApvbmUgc3BhY2UsIGVudGVyaW5nID8gc2VuZHMgdG8gc3Rkb3V0IHRoZSBuYW1lbGlzdCBuYW1lIGFuZCB0aGUgbmFtZXMgb2YKdGhlIHZhcmlhYmxlcyBpbiB0aGUgbmFtZWxpc3Q6CkBzbWFsbGV4YW1wbGUKPwoKJm15bm1sCiB4CiB4JXkKIGNoCiZlbmQKQGVuZCBzbWFsbGV4YW1wbGUKCkVudGVyaW5nID0/IG91dHB1dHMgdGhlIG5hbWVsaXN0IHRvIHN0ZG91dCwgYXMgaWYgV1JJVEUgKCosTk1MID0gbXlubWwpCmhhZCBiZWVuIGNhbGxlZDoKQHNtYWxsZXhhbXBsZQo9PwoKJk1ZTk1MCiBYKDEpJVk9ICAwLjAwMDAwMCAgICAsICAxLjAwMDAwMCAgICAsICAwLjAwMDAwMCAgICAsCiBYKDIpJVk9ICAwLjAwMDAwMCAgICAsICAyLjAwMDAwMCAgICAsICAwLjAwMDAwMCAgICAsCiBYKDMpJVk9ICAwLjAwMDAwMCAgICAsICAzLjAwMDAwMCAgICAsICAwLjAwMDAwMCAgICAsCiBDSD1hYmNkLCAgLwpAZW5kIHNtYWxsZXhhbXBsZQoKVG8gYWlkIHRoaXMgZGlhbG9nLCB3aGVuIGlucHV0IGlzIGZyb20gc3RkaW4sIGVycm9ycyBwcm9kdWNlIHNlbmQgdGhlaXIKbWVzc2FnZXMgdG8gc3RkZXJyIGFuZCBleGVjdXRpb24gY29udGludWVzLCBldmVuIGlmIElPU1RBVCBpcyBzZXQuCgpAaW5jbHVkZSBpbnRyaW5zaWMudGV4aQpAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQGMgQ29udHJpYnV0aW5nCkBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQG5vZGUgQ29udHJpYnV0aW5nCkBjaGFwdGVyIENvbnRyaWJ1dGluZwpAY2luZGV4IENvbnRyaWJ1dGluZwoKRnJlZSBzb2Z0d2FyZSBpcyBvbmx5IHBvc3NpYmxlIGlmIHBlb3BsZSBjb250cmlidXRlIHRvIGVmZm9ydHMKdG8gY3JlYXRlIGl0LgpXZSdyZSBhbHdheXMgaW4gbmVlZCBvZiBtb3JlIHBlb3BsZSBoZWxwaW5nIG91dCB3aXRoIGlkZWFzCmFuZCBjb21tZW50cywgd3JpdGluZyBkb2N1bWVudGF0aW9uIGFuZCBjb250cmlidXRpbmcgY29kZS4KCklmIHlvdSB3YW50IHRvIGNvbnRyaWJ1dGUgdG8gR05VIEZvcnRyYW4gOTUsCmhhdmUgYSBsb29rIGF0IHRoZSBsb25nIGxpc3RzIG9mIHByb2plY3RzIHlvdSBjYW4gdGFrZSBvbi4KU29tZSBvZiB0aGVzZSBwcm9qZWN0cyBhcmUgc21hbGwsCnNvbWUgb2YgdGhlbSBhcmUgbGFyZ2U7CnNvbWUgYXJlIGNvbXBsZXRlbHkgb3J0aG9nb25hbCB0byB0aGUgcmVzdCBvZiB3aGF0IGlzCmhhcHBlbmluZyBvbiBAY29tbWFuZHtnZm9ydHJhbn0sCmJ1dCBvdGhlcnMgYXJlIGBgbWFpbnN0cmVhbScnIHByb2plY3RzIGluIG5lZWQgb2YgZW50aHVzaWFzdGljIGhhY2tlcnMuCkFsbCBvZiB0aGVzZSBwcm9qZWN0cyBhcmUgaW1wb3J0YW50IQpXZSdsbCBldmVudHVhbGx5IGdldCBhcm91bmQgdG8gdGhlIHRoaW5ncyBoZXJlLApidXQgdGhleSBhcmUgYWxzbyB0aGluZ3MgZG9hYmxlIGJ5IHNvbWVvbmUgd2hvIGlzIHdpbGxpbmcgYW5kIGFibGUuCgpAbWVudQoqIENvbnRyaWJ1dG9yczo6CiogUHJvamVjdHM6OgpAZW5kIG1lbnUKCgpAbm9kZSBDb250cmlidXRvcnMKQHNlY3Rpb24gQ29udHJpYnV0b3JzIHRvIEdOVSBGb3J0cmFuIDk1CkBjaW5kZXggQ29udHJpYnV0b3JzCkBjaW5kZXggQ3JlZGl0cwpAY2luZGV4IEF1dGhvcnMKCk1vc3Qgb2YgdGhlIHBhcnNlciB3YXMgaGFuZC1jcmFmdGVkIGJ5IEBlbXBoe0FuZHkgVmF1Z2h0fSwgd2hvIGlzCmFsc28gdGhlIGluaXRpYXRvciBvZiB0aGUgd2hvbGUgcHJvamVjdC4gIFRoYW5rcyBBbmR5IQpNb3N0IG9mIHRoZSBpbnRlcmZhY2Ugd2l0aCBHQ0Mgd2FzIHdyaXR0ZW4gYnkgQGVtcGh7UGF1bCBCcm9va30uCgpUaGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgY29kZSBhbmQvb3IKaWRlYXMgYW5kIHNpZ25pZmljYW50IGhlbHAgdG8gdGhlIGdmb3J0cmFuIHByb2plY3QKKGluIG5vIHBhcnRpY3VsYXIgb3JkZXIpOiAKCkBpdGVtaXplIEBtaW51cwpAaXRlbSBBbmR5IFZhdWdodApAaXRlbSBLYXRoZXJpbmUgSG9sY29tYgpAaXRlbSBUb2JpYXMgU2NobPx0ZXIKQGl0ZW0gU3RldmVuIEJvc3NjaGVyCkBpdGVtIFRvb24gTW9lbmUKQGl0ZW0gVGltIFByaW5jZQpAaXRlbSBOaWVscyBLcmlzdGlhbiBCZWNoIEplbnNlbgpAaXRlbSBTdGV2ZW4gSm9obnNvbgpAaXRlbSBQYXVsIEJyb29rCkBpdGVtIEZlbmcgV2FuZwpAaXRlbSBCdWQgRGF2aXMKQGVuZCBpdGVtaXplCgpUaGUgZm9sbG93aW5nIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIGJ1ZyByZXBvcnRzLApzbWFsbGVyIG9yIGxhcmdlciBwYXRjaGVzLAphbmQgbXVjaCBuZWVkZWQgZmVlZGJhY2sgYW5kIGVuY291cmFnZW1lbnQgZm9yIHRoZQpAY29tbWFuZHtnZm9ydHJhbn0gcHJvamVjdDogCgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0gRXJpayBTY2huZXR0ZXIKQGl0ZW0gQmlsbCBDbG9kaXVzCkBpdGVtIEthdGUgSGVkc3Ryb20KQGVuZCBpdGVtaXplCgpNYW55IG90aGVyIGluZGl2aWR1YWxzIGhhdmUgaGVscGVkIGRlYnVnLAp0ZXN0IGFuZCBpbXByb3ZlIEBjb21tYW5ke2dmb3J0cmFufSBvdmVyIHRoZSBwYXN0IHR3byB5ZWFycywKYW5kIHdlIHdlbGNvbWUgeW91IHRvIGRvIHRoZSBzYW1lIQpJZiB5b3UgYWxyZWFkeSBoYXZlIGRvbmUgc28sCmFuZCB5b3Ugd291bGQgbGlrZSB0byBzZWUgeW91ciBuYW1lIGxpc3RlZCBpbiB0aGUKbGlzdCBhYm92ZSwgcGxlYXNlIGNvbnRhY3QgdXMuCgoKQG5vZGUgUHJvamVjdHMKQHNlY3Rpb24gUHJvamVjdHMKCkB0YWJsZSBAZW1waAoKQGl0ZW0gSGVscCBidWlsZCB0aGUgdGVzdCBzdWl0ZQpTb2xpY2l0IG1vcmUgY29kZSBmb3IgZG9uYXRpb24gdG8gdGhlIHRlc3Qgc3VpdGUuCldlIGNhbiBrZWVwIGNvZGUgcHJpdmF0ZSBvbiByZXF1ZXN0LgoKQGl0ZW0gQnVnIGh1bnRpbmcvc3F1aXNoaW5nCkZpbmQgYnVncyBhbmQgd3JpdGUgbW9yZSB0ZXN0IGNhc2VzIQpUZXN0IGNhc2VzIGFyZSBlc3BlY2lhbGx5IHZlcnkgd2VsY29tZSwKYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8gY29uY2VudHJhdGUgb24gZml4aW5nIGJ1Z3MKaW5zdGVhZCBvZiBpc29sYXRpbmcgdGhlbS4KCkBpdGVtIFNtYWxsZXIgcHJvamVjdHMgKGBgYnVnJycgZml4ZXMpOgogIEBpdGVtaXplIEBtaW51cwogIEBpdGVtIEFsbG93IGluaXQgZXhwcnMgdG8gYmUgbnVtYmVycyByYWlzZWQgdG8gaW50ZWdlciBwb3dlcnMuCiAgQGl0ZW0gSW1wbGVtZW50IGNvcnJlY3Qgcm91bmRpbmcuCiAgQGl0ZW0gSW1wbGVtZW50IEYgcmVzdHJpY3Rpb25zIG9uIEZvcnRyYW4gOTUgc3ludGF4LgogIEBpdGVtIFNlZSBhYm91dCBtYWtpbmcgRW1hY3MtcGFyc2FibGUgZXJyb3IgbWVzc2FnZXMuCiAgQGVuZCBpdGVtaXplCkBlbmQgdGFibGUKCklmIHlvdSB3aXNoIHRvIHdvcmsgb24gdGhlIHJ1bnRpbWUgbGlicmFyaWVzLApwbGVhc2UgY29udGFjdCBhIHByb2plY3QgbWFpbnRhaW5lci4KQGMgVE9ETzogZW1haWwhCgoKQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBjIFN0YW5kYXJkcwpAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkBub2RlIFN0YW5kYXJkcwpAY2hhcHRlciBTdGFuZGFyZHMKQGNpbmRleCBTdGFuZGFyZHMKClRoZSBHTlUgRm9ydHJhbiA5NSBDb21waWxlciBhaW1zIHRvIGJlIGEgY29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbiBvZgpJU08vSUVDIDE1Mzk6MTk5NyAoRm9ydHJhbiA5NSkuCgpJbiB0aGUgZnV0dXJlIGl0IG1heSBhbHNvIHN1cHBvcnQgb3RoZXIgdmFyaWFudHMgYW5kIGV4dGVuc2lvbnMgdG8gdGhlIEZvcnRyYW4KbGFuZ3VhZ2UuICBUaGlzIGluY2x1ZGVzIEFOU0kgRm9ydHJhbiA3NywgRm9ydHJhbiA5MCwgRm9ydHJhbiAyMDAwIChub3QgeWV0CmZpbmFsaXplZCksIGFuZCBPcGVuTVAuCgpAbm9kZSBJbmRleApAdW5udW1iZXJlZCBJbmRleAoKQHByaW50aW5kZXggY3AKCkBieWUK