ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8gICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGlzdG9yeSBvZiBDaGFuZ2VzCgpEYW5pZWwgKDI5IE1heSAyMDAwKQotIENvcnJlY3RlZCB0aGUgYml0cy4qIGFzc2lnbm1lbnRzIHdoZW4gdXNpbmcgQ1VSTE9QVCBvcHRpb25zIHRoYXQgb25seQogIHRvZ2dsZXMgb25lIG9mIHRob3NlIGJpdHMuCgotIEFwcGxpZWQgdGhlIGh1Z2UgcGF0Y2hlcyBmcm9tIERhdmlkIExlQmxhbmMgPGRsZWJsYW5jIGF0IHFueC5jb20+IHRoYXQgYWRkCiAgdXNhZ2Ugb2YgdGhlIGdldGhvc3RieW5hbWVfcigpIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyBpbiBjYXNlIHRoZXkncmUgYXJvdW5kLAogIHNpbmNlIHRoYXQgbWFrZSBsaWJjdXJsIG11Y2ggYmV0dGVyIHRocmVhZHNhZmUgaW4gbWFueSBzeXN0ZW1zIChzdWNoIGFzCiAgc29sYXJpcykuIEkgYWRkZWQgdGhlIGNoZWNrcyBmb3IgdGhlc2UgZnVuY3Rpb25zIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0LgoKICBJIGNhbid0IGV4cGxhaW4gd2h5LCBidXQgdGhlIGluZXRfbnRvYV9yKCkgZnVuY3Rpb24gZGlkIG5vdCBhcHBlYXIgaW4gbXkKICBTb2xhcmlzIGluY2x1ZGUgZmlsZXMsIEkgaGFkIHRvIGFkZCBteSBvd24gaW5jbHVkZSBmaWxlIGZvciB0aGlzIGZvciBub3cuCgpEYW5pZWwgKDIyIE1heSAyMDAwKQotIEr2cm4gSGFydHJvdGggYnJvdWdodCBtZSBmaXhlcyB0byBtYWtlIHRoZSB3aW4zMiB2ZXJzaW9uIGNvbXBpbGUgcHJvcGVybHkgYXMKICB3ZWxsIGFzIGEgcmVuYW1lIG9mIHRoZSAnaW50ZXJmYWNlJyBmaWVsZCBpbiB0aGUgdXJsZGF0YSBzdHJ1Y3QsIGFzIGl0IHNlZW1zCiAgdG8gYmUgcmVzZXJ2ZWQgaW4gc29tZSBnY2MgdmVyc2lvbnMhCgotIFJpY2ggR3JheSBzdHJ1Y2sgYmFjayB3aXRoIHlldCBzb21lIHBvcnRhYmlsaXR5IHJlcG9ydHMuIERhdGEgR2VuZXJhbCBERy9VWAogIG5lZWRlZCBhIGxpdHRsZSBmaXggaW4gbGliL2xkYXAuYyBzaW5jZSBpdCBkb2Vzbid0IGhhdmUgUlRMRF9HTE9CQUwgZGVmaW5lZC4KICBNb3JlIGZpeGVzIGFyZSBleHBlY3RlZCBhcyBhIHJlc3VsdCBvZiBSaWNoaWVzIHZlcnkgaGVscGZ1bCB3b3JrLgoKVmVyc2lvbiA3LjAuMWJldGEgcmVsZWFzZWQKCkRhbmllbCAoMjEgTWF5IDIwMDApCi0gVXBkYXRlZCBsb3RzIG9mICNkZWZpbmVzLCBlbnVtcyBhbmQgdmFyaWFibGUgdHlwZSBuYW1lcyBpbiB0aGUgbGlicmFyeS4gTm8KICBtb3JlIHdlaXJkIFVSRyBvciBVUkxUQUcgcHJlZml4ZXMuIEFsbCB0eXBlcyBhbmQgbmFtZXMgc2hvdWxkIGJlIGN1cmwtCiAgcHJlZml4ZWQgdG8gYXZvaWQgbmFtZSBzcGFjZSBjbGFzaGVzLiBUaGUgRkxBR1MtcGFyYW1ldGVyIHRvIHRoZSBmb3JtZXIKICBjdXJsX3VybGdldCgpIGhhcyBiZWVuIGNvbnZlcnRlZCBpbnRvIGEgYnVuY2ggb2YgZmxhZ3MgdG8gdXNlIGluIHNlcGFyYXRlCiAgc2V0b3B0IGNhbGxzLiBJJ20gc3RpbGwgZm9jdXNpbmcgb24gdGhlIGVhc3ktaW50ZXJmYWNlLCBhcyB0aGUgY3VybCB0b29sIGlzCiAgbm93IHVzaW5nIHRoYXQuCgotIEJqb3JuIFJlZXNlIGhhcyBwcm92aWRlZCBtZSB3aXRoIGFuIGFzeW5jaHJvbm91cyBuYW1lIHJlc29sdmVyIHRoYXQgSSBwbGFuCiAgdG8gdXNlIGluIHVwY29taW5nIHZlcnNpb25zIG9mIGN1cmwgdG8gYmUgYWJsZSB0byBncmFjZWZ1bGx5IHRpbWVvdXQgbmFtZQogIGxvb2t1cHMuCgpWZXJzaW9uIDcuMGJldGEgcmVsZWFzZWQKCkRhbmllbCAoMTggTWF5IDIwMDApCi0gSW50cm9kdWNlZCBMSUJDVVJMX1ZFUlNJT05fTlVNIHRvIHRoZSBjdXJsLmggaW5jbHVkZSBmaWxlIHRvIGJldHRlciBhbGxvdwogIHNvdXJjZSBjb2RlcyB0byBiZSBkZXBlbmRlbnQgb24gdGhlIGxpYiB2ZXJzaW9uLiBUaGlzIGRlZmluZSBpcyBub3cgc2V0IHRvCiAgYSBkZXhhZGVjaW1hbCBudW1iZXIsIHdpdGggOCBiaXRzIGVhY2ggZm9yIG1ham9yIG51bWJlciwgbWlub3IgbnVtYmVyIGFuZAogIHBhdGNoIG51bWJlci4gSW4gb3RoZXIgd29yZHMsIHZlcnNpb24gMS4yLjMgd291bGQgbWFrZSBpdCAweDAxMDIwMy4gSXQgYWxzbwogIG1ha2VzIGEgbGFyZ2VyIG51bWJlciBhIG5ld2VyIHZlcnNpb24uCgpEYW5pZWwgKDE3IE1heSAyMDAwKQotIE1hcnRpbiBLYW1tZXJob2ZlciBjb3JyZWN0bHkgcG9pbnRlZCBvdXQgc2V2ZXJhbCBmbGF3cyBpbiB0aGUgRlRQIHJhbmdlCiAgb3B0aW9uLiBJIGNvcnJlY3RlZCB0aGVtLgotIFJlbW92ZWQgdGhlIHdpbjMyIHdpbnNvY2sgaW5pdCBjcmFwIGZyb20gdGhlIGxpYiB0byB0aGUgc3JjL21haW4uYyBmaWxlCiAgaW4gdGhlIGFwcGxpY2F0aW9uIGluc3RlYWQuIFRoZXkgY2FuJ3QgYmUgaW4gdGhlIGxpYiwgZXNwZWNpYWxseSBub3QgZm9yCiAgbXVsdGl0aHJlYWRlZCBwdXJwb3Nlcy4KCkRhbmllbCAoMTYgTWF5IDIwMDApCi0gUmV3cm90ZSB0aGUgc3JjL21haW4uYyBzb3VyY2UgdG8gdXNlIHRoZSBuZXcgZWFzeS1pbnRlcmZhY2UgdG8gbGliY3VybCA3LgogIFRoZXJlIGlzIHN0aWxsIG1vcmUgd29yayB0byBkbywgYnV0IHRoZSBmaXJzdCBzdGVwIGlzIG5vdyB0YWtlbi4KICA8Y3VybC9lYXN5Lmg+IGlzIHRoZSBpbmNsdWRlIGZpbGUgdG8gdXNlLgoKRGFuaWVsICgxNCBNYXkgMjAwMCkKLSBGVFAgVVJMcyBhcmUgbm93IHRyZWF0ZWQgc2xpZ2h0bHkgZGlmZmVyZW50LCBtb3JlIGFjY29yZGluZyB0byBSRkMgMTczOC4KLSBGVFAgc2Vzc2lvbnMgYXJlIG5vdyBwZXJmb3JtZWQgZGlmZmVyZW50bHksIHdpdGggQ1dEIGNvbW1hbmRzIHRvIGNoYW5nZQogIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIFJFVFIvU1RPUi9MSVNUIHdpdGggdGhlIGZ1bGwgcGF0aC4gRGlzY3Vzc2lvbnMgd2l0aAogIFJpY2ggR3JheSBtYWRlIG1lIG5vdGljZSB0aGVzZSBwcm9ibGVtcy4KLSBKYW5uZSBKb2hhbnNzb24gZGlzY292ZXJlZCBhbmQgY29ycmVjdGVkIGEgYnVmZmVyIG92ZXJmbG93IGluIHRoZQogIHNyYy91c3JnbG9iLmMgZmlsZS4KLSBJIGhhZCB0byBhZGQgYSBsaWIvc3RyZXF1YWwuYyBmaWxlIGZvciBkb2luZyBjYXNlIGluc2Vuc2l0aXZlIHN0cmluZwogIGNvbXBhcmVzIG9uIGFsbCBwbGF0Zm9ybXMuCgpEYW5pZWwgKDggTWF5IDIwMDApOgotIEJlZW4gd29ya2luZyBsb3RzIG9uIHRoZSBuZXcgbGliLgotIFRvZ2V0aGVyIHdpdGggUmljaCBHcmF5LCBJJ3ZlIHRyaWVkIHRvIGFkanVzdCB0aGUgY29uZmlndXJlIHNjcmlwdCB0byB3b3JrCiAgYmV0dGVyIG9uIHRoZSBOQ1IgTVAtUkFTIFVuaXguCgpEYW5pZWwgKDIgTWF5IDIwMDApOgotIEFsYmVydCBDaGluLUEtWW91bmcgcG9pbnRlZCBvdXQgdGhhdCBJIGhhZCBhIGZldyB0b28gbWFueSBpbnN0cnVjdGlvbnMgaW4KICBjb25maWd1cmUuaW4gdGhhdCBkaWRuJ3QgZG8gYW55IGdvb2QuCgpEYW5pZWwgKDI0IEFwcmlsIDIwMDApOgotIEFkZGVkIGEgbmV3IHBhcmFncmFwaCB0byB0aGUgRkFRIGFib3V0IHdoYXQgdG8gZG8gd2hlbiBjb25maWd1cmUgY2FuJ3QKICBmaW5kIE9wZW5TU0wgZXZlbiB0aG91Z2ggaXQgaXMgaW5zdGFsbGVkLiBTdXBwbGllZCBieSBCb2IgQWxsaXNvbgogIDxhbGxpc29uYkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LgoKRGFuaWVsICgxMiBBcHJpbCAyMDAwKToKLSBTdGFydGVkIG1lc3NpbmcgYXJvdW5kIGJpZy10aW1lIHRvIGNvbnZlcnQgdGhlIG9sZCBsaWJyYXJ5IGludGVyZmFjZSB0byBhCiAgYmV0dGVyIG9uZS4uLgoKRGFuaWVsICg4IEFwcmlsIDIwMDApOgotIE1hZGUgdGhlIHByb2dyZXNzIGJhciBsb29rIGJldHRlciBmb3IgZmlsZSBzaXplcyBiZXR3ZWVuIDk5OTkga2lsb2J5dGVzCiAgYW5kIDEwMCBtZWdhYnl0ZXMuIFRoZXkncmUgbm93IGRpc3BsYXllZCBYWC5YTS4KLSBJIGFsc28gbm90aWNlZCB0aGF0IGZ0cCBmZXRjaGVzIHRocm91Z2ggSFRUUCBwcm94aWVzIGRpZG4ndCBhZGQgdGhlIHVzZXIKICBhZ2VudCBzdHJpbmcuIEl0IGRvZXMgbm93LgotIEhhYmliaWUgPGhhYmliaWVATWFpbGFuZE5ld3MuY29tPiBzdXBwbGllZCBhIHByZXR0eSBnb29kIHdheSB0byBidWlsZCBSUE1zCiAgb24gYSBMaW51eCBtYWNoaW5lLiBJdCBzdGlsbCBhKSByZXF1aXJlcyBtZSB0byBiZSByb290IHRvIGRvIGl0LCBiKSBsZWF2ZXMKICB0aGUgcnBtIHBhY2thZ2VzIGxheWluZyBhdCBzb21lIG9kZCBwbGFjZSBvbiBteSBkaXNrIGMpIGRvZXNuJ3Qgd29yayB0bwogIGJ1aWxkIHRoZSBzc2wgdmVyc2lvbiBvZiBjdXJsIHNpbmNlIEkgZGlkbid0IGluc3RhbGwgb3BlbnNzbCBmcm9tIGFuIHJwbQogIHBhY2thZ2Ugc28gbm93IHRoZSBycG0gY3JhcCB0aGlua3MgSSBkb24ndCBoYXZlIG9wZW5zc2wgYW5kIHJlZnVzZXMgdG8gYnVpbGQKICBhIHBhY2thZ2UgdGhhdCBkZXBlbmRzIG9uIHNzbC4uLiBEaWQgSSBtZW50aW9uIEkgZG9uJ3QgZ2V0IGFsb25nIHdpdGggUlBNPwotIE9uY2UgYWdhaW4gSSByZWNlaXZlZCBhIGJ1ZyByZXBvcnQgYWJvdXQgYXV0b2NvbmYgbm90IHNldHRpbmcgLUwgcHJpb3IgdG8gLWwKICBvbiB0aGUgY29tbWFuZCBsaW5lIHdoZW4gY2hlY2tpbmcgZm9yIGxpYnMuIEluIHRoaXMgY2FzZSBpdCBtYWRlIHRoZSBuYXRpdmUKICBjYyBjb21waWxlciBvbiBTb2xhcmlzIDcgdG8gZmFpbCB0aGUgT3BlblNTTCBjaGVjay4gVGhpcyBoYXMgcHJldmlvdXNseSBiZWVuCiAgcmVwb3J0ZWQgdG8gY2F1c2UgcHJvYmxlbXMgb24gSFAtVVggYW5kIGlzIGEga25vd24gZmxhdyBpbiBhdXRvY29uZiAyLjEzLiBJdAogIGlzIGEgcGl0eSB0aGVyZSdzIG5vIG5ld2VyIHJlbGVhc2UgYXJvdW5kLi4uCgpEYW5pZWwgKDQgQXByaWwgMjAwMCk6Ci0gTWFyY28gRy4gU2FsdmFnbm8gPG1nc0B3aGl6LmNqYi5uZXQ+IHN1cHBsaWVkIG1lIHdpdGggdHdvIGZpeGVzIHRoYXQKICBhcHBlYXJhbnRseSBtYWtlcyB0aGUgT1MvMiBwb3J0IHdvcmsgYmV0dGVyIHdpdGggbXVsdGlwbGUgVVJMcy4KCkRhbmllbCAoMiBBcHJpbCAyMDAwKToKLSBBbm90aGVyIExvY2F0aW9uOiBmaXguIFRoaXMgdGltZSwgd2hlbiBjdXJsIGNvbm5lY3RlZCB0byBhIHBvcnQgYW5kIHRoZW4KICBmb2xsb3dlZCBhIGxvY2F0aW9uIHdpdGggYW4gYWJzb2x1dGUgVVJMIHRvIGFub3RoZXIgcG9ydCwgaXQgbWlzYmVoYXZlZC4KCkRhbmllbCAoMjcgTWFyY2ggMjAwMCk6Ci0gSC4gRGFwaG5lIEx1b25nIDxkYXBobmVAdGVsbG1lLmNvbT4gcG9pbnRlZCBvdXQgdGhhdCBjdXJsIHdhcyB3cm9uZ2x5CiAgbWVzc2luZyB1cCB0aGUgcHJveHkgc3RyaW5nIHdoZW4gZmV0Y2hpbmcgYSBkb2N1bWVudCB0aHJvdWdoIGEgaHR0cCBwcm94eSwKICB3aGljaCBzY3Jld2VkIHVwIG11bHRpcGxlIGZldGNoZXMgc3VjaCBhcyBpbiBsb2NhdGlvbjogZm9sbG93aW5ncy4KCkRhbmllbCAoMjMgTWFyY2ggMjAwMCk6Ci0gTWFyY28gRy4gU2FsdmFnbm8gPG1nc0B3aGl6LmNqYi5uZXQ+IGNvcnJlY3RlZCBteSBiYWRseSBhcHBsaWVkIHBhdGNoIGhlCiAgYWN0dWFsbHkgYWxyZWFkeSB0b2xkIG1lIGFib3V0IQoKLSBILiBEYXBobmUgTHVvbmcgPGRhcGhuZUB0ZWxsbWUuY29tPiBicm91Z2h0IG1lIGEgZml4IHRoYXQgbm93IG1ha2VzIGN1cmwKICBpZ25vcmUgc2VsZWN0KCkgZXJyb3JzIGluIHRoZSBkb3dubG9hZCBpZiBlcnJubyBpcyBFSU5UUiwgd2hpY2ggdHVybnMgb3V0IHRvCiAgaGFwcGVuIGV2ZXJ5IG5vdyBhbmQgdGhlbiB3aGVuIHVzaW5nIGxpYmN1cmwgbXVsdGktdGhyZWFkZWQuLi4KCkRhbmllbCAoMjIgTWFyY2ggMjAwMCk6Ci0gV2hhbSBCYW5nIDx3aGFtX2JhbmdAeWFob28uY29tPiBzdXBwbGllZCBhIGNvdXBsZSBvZiB3aW4zMiBmaXhlcy4gSEFWRV9VTkFNRQogIHdhcyBhY2NpZGVudGFsbHkgI2RlZmluZWQgaW4gY29uZmlnLXdpbjMyLmgsIHdoaWNoIGl0IHNob3VsZG4ndCBoYXZlIGJlZW4uCiAgVGhlIEhBVkVfVU5JU1REX0ggaXMgbm90IGRlZmluZWQgd2hlbiBjb21waWxpbmcgd2l0aCB0aGUgTWFrZWZpbGUudmM2CiAgbWFrZWZpbGUgZm9yIE1TIFZDKysuCgpEYW5pZWwgKDIxIE1hcmNoIDIwMDApOgotIEkgcmVtb3ZlZCB0aGUgQUNfUFJPR19JTlNUQUxMIG1hY3JvIGZyb20gY29uZmlndXJlLmluLCBzaW5jZSBpdCBhcHBlYXJzIHRoYXQKICBvbmUgb2YgdGhlIEFNXyogbWFjcm9zIHNlYXJjaGVzIGZvciBhIEJTRCBjb21wYXRpYmxlIGluc3RhbGwgYWxyZWFkeS4gSmFubmUKICBKb2hhbnNzb24gbWFkZSBtZSBhd2FyZSBvZiB0aGlzLgoKVmVyc2lvbiA2LjUuMgoKRGFuaWVsICgyMSBNYXJjaCAyMDAwKToKLSBQYXVsIEhhcnJpbmd0b24gPHBhdWxAcGl6emEub3JnPiBxdWlja2x5IHBvaW50ZWQgb3V0IHRvIG1lIHRoYXQgNi41LjEKICBjcmFzaGVzIGhhcmQuIEkgdXBsb2FkIDYuNS4yIG5vdyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlISBUaGUgcHJvYmxlbSB3YXMKICB0aGUgLUQgYWRqdXN0bWVudHMgaW4gc3JjL21haW4uYy4KClZlcnNpb24gNi41LjEKCkRhbmllbCAoMjAgTWFyY2ggMjAwMCk6Ci0gQW4gYW5vbnltb3VzIHBvc3Qgb24gc291cmNlZm9yZ2UgY29ycmVjdGx5IHBvaW50ZWQgb3V0IGEgcG9zc2libGUgYnVmZmVyCiAgb3ZlcmZsb3cgaW4gdGhlIGN1cmxfdW5lc2NhcGUoKSBmdW5jdGlvbiBmb3IgVVJMIGNvbnZlcnNpb25zLiBUaGUgbWFpbgogIHByb2JsZW0gd2l0aCB0aGlzIGJ1ZyBpcyB0aGF0IHRoZSBmdHAgZG93bmxvYWQgdXNlcyB0aGF0IGZ1bmN0aW9uIGFuZCB0aGlzCiAgc2luZ2xlLSBieXRlIG92ZXJmbG93IGNvdWxkIGxlYWQgdG8gdmVyeSBvZGQgYnVncyAoYXMgb25lIHJlcG9ydGVkIGJ5IEphbm5lCiAgSm9oYW5zc29uKS4KCkRhbmllbCAoMTkgTWFyY2ggMjAwMCk6Ci0gTWFyY28gRy4gU2FsdmFnbm8gPG1nc0B3aGl6LmNqYi5uZXQ+IHN1cHBsaWVkIG1lIHdpdGggYSBzZXJpZXMgb2YgcGF0Y2hlcwogIHRoYXQgbm93IGFsbG93cyBjdXJsIHRvIGdldCBjb21waWxlZCBvbiBPUy8yLiBJdCBldmVuIGluY2x1ZGVzIGEgc2VjdGlvbiBpbgogIHRoZSBJTlNUQUxMIGZpbGUuIFZlcnkgbmljZSBqb2IhCgpEYW5pZWwgKDE3IE1hcmNoIDIwMDApOgotIFdoYW0gQmFuZyA8d2hhbV9iYW5nQHlhaG9vLmNvbT4gc3VwcGxpZWQgYSBwYXRjaCBmb3IgdGhlIGxpYi9NYWtlZmlsZS52YzYKICBmaWxlLiBXZSBzdGlsbCBuZWVkIHNvbWUgZml4ZXMgZm9yIHRoZSBjb25maWctd2luMzIuaCBzaW5jZSBpdCBhcHBlYXJzIHRoYXQKICBWQysrIGFuZCBtaW5ndzMyIGhhdmUgZGlmZmVyZW50IG9waW5pb25zIGFib3V0IChhdCBsZWFzdCkgdW5pc3RkLmgncwogIGV4aXN0ZW5jZS4KCkRhbmllbCAoMTUgTWFyY2ggMjAwMCk6Ci0gSSBtb2RpZmllZCB0aGUgLUQvLS1kdW1wLWhlYWRlciB3b3JraW5ncyBzbyB0aGF0IGl0IGRvZXNuJ3Qgd3JpdGUgYW55dGhpbmcKICB0byB0aGUgZmlsZSB1bnRpbCBpdCBuZWVkcyB0by4gVGhpcyB3YXksIHlvdSBjYW4gYWN0dWFsbHkgdXNlIC1iIGFuZCAtRAogIG9uIHRoZSBzYW1lIGZpbGUgaWYgeW91IHdhbnQgcmVwZWF0ZWQgaW52b2tlcyB0byBzdG9yZSBhbmQgcmVhZCB0aGUgY29va2llcwogIGluIHRoYXQgb25lIHNpbmdsZSBmaWxlLgoKLSBQb2tlZCBhcm91bmQgaW4gbG90cyBvZiB0ZXh0cy4gQWRkZWQgdGhlIEJVR1MgZmlsZSBmb3IgYnVnIHJlcG9ydGluZyBzdHVmZi4KICBBZGRlZCB0aGUgY2xhc3NpYyBIVFRQIFBPU1QgcXVlc3Rpb24gdG8gdGhlIEZBUSwgcmVtb3ZlZCBzb21lICNpZmRlZiBXSU4zMgogIHN0dWZmIGZyb20gdGhlIHNvdXJjZXMgKHRoZXkncmUgY292ZXJlZCBieSB0aGUgY29uZmlnLXdpbjMyLmggbm93KS4KCi0gUGFzY2FsIEdhdWRldHRlIDxwYXNjYWxAZ2F1ZGV0dGUub3JnPiBmaXhlZCBhIG1pc3NpbmcgbGRhcC5jIHByb2JsZW0gaW4gdGhlCiAgTWFrZWZpbGUudmM2IGZpbGUuIEhlIGFsc28gYWRkcmVzc2VkIGEgcHJvYmxlbSBpbiBzcmMvY29uZmlnLXdpbjMyLmguCgpEYW5pZWwgKDE0IE1hcmNoIDIwMDApOgotIFBhdWwgSGFycmluZ3RvbiBwb2ludGVkIG91dCB0aGF0IHRoZSAnaHR0cF9jb2RlJyB2YXJpYWJsZSBpbiB0aGUgLXcgb3V0cHV0CiAgd2FzIG5ldmVyIHdyaXR0ZW4uIEkgZml4ZWQgaXQgbm93LgoKLSBKYW5uZSBKb2hhbnNzb24gPGpqQGR5bmFyYy5zZT4gcmVwb3J0ZWQgdGhlIGNvbXBsYWludHMgdGhhdCBPcGVuQlNEIGRvZXMKICB3aGVuIGdldGRhdGUuYyAjaW5jbHVkZXMgbWFsbG9jLmguIEl0IGNsYWltcyBzdGRsaWIuaCBzaG91bGQgYmUgaW5jbHVkZWQKICBpbnN0ZWFkLiBJIGFkZGVkICNpZmRlZiBIQVZFX01BTExPQ19IIGNvZGUgaW4gZ2V0ZGF0ZS55IGFuZCB0d28gY2hlY2tzIGluCiAgdGhlIGNvbmZpZ3VyZS5pbiBmb3IgbWFsbG9jLmggYW5kIHN0ZGxpYi5oLgoKVmVyc2lvbiA2LjUKCkRhbmllbCAoMTMgTWFyY2ggMjAwMCk6Ci0gPGN1cmxAc3BhbS53b2x2ZXNiYW5lLm5ldD4gcG9pbnRlZCBvdXQgdGhhdCB0aGUgd2F5IGN1cmwgc2VudCBjb29raWVzIGluIGEKICBzaW5nbGUgbGluZSB3YXNuJ3QgZW5qb3llZCBieSBJSVM0LjAgc2VydmVycy4gSW4gbXkgdmlldywgdGhhdCBpcyBub3Qgd2hhdAogIHRoZSBzdGFuZGFyZHMgc2F5LCBidXQgSSBhZGRlZCBhIHdoaXRlIHNwYWNlIGJldHdlZW4gdGhlIG5hbWUvdmFsdWUgcGFpcnMgdG8KICBwZXJoYXBzIG1ha2UgdGhlbSB3b3JrIGJldHRlci4KCi0gQWRkZWQgdGhlIHBlcmwgY2hlY2sgYmFjayBpbiB0aGUgY29uZmlndXJlLmluIGFnYWluIHNpbmNlIHRoZSBta2hlbHAucGwKICBzY3JpcHQgbmVlZHMgaXQhCgotIE1hZGUgc29tZSBiZWF1dGlmaWNhdGlvbnMgaW4gdGhlIGN1cmwgbWFuIHBhZ2UuCgpEYW5pZWwgKDMgTWFyY2ggMjAwMCk6Ci0gSvZybiBoZWxwZWQgbWUgdXBkYXRlIHRoZSBjb25maWctd2luMzIuaCBmaWxlcyB3aXRoIEhBVkVfU0VUVkJVRiBhbmQKICBIQVZFX1NUUkRVUC4KCkRhbmllbCAoMyBNYXJjaCAyMDAwKToKLSBVcGxvYWRlZCB0aGUgNi41cHJlMiBwYWNrYWdlLgoKRGFuaWVsICgyIE1hcmNoIDIwMDApOgotIFJlbW92ZWQgdGhlIHBlcmwtcHJvZ3JhbXMgZnJvbSB0aGUgZGlzdHJpYnV0aW9uLCB0aGV5IG5ldmVyIG1hZGUgbWFueSBwZW9wbGUKICBoYXBweSBhbmQgSSdsbCBzdGlsbCBrZWVwIHRoZW0gYXZhaWxhYmxlIG9uIHRoZSB3ZWIuCgotIEFkZGVkIHRoZSAtdyBhbmQgLU4gc3R1ZmYgdG8gdGhlIG1hbiBwYWdlLiBEb2N1bWVudGVkIHRoZSBuZXcgcHJvZ3Jlc3MgbWV0ZXIKICBkaXNwbGF5IGluIFJFQURNRS5jdXJsLgoKLSBK9nJuIEhhcnRyb3RoIDxKb2Vybi5IYXJ0cm90aEB0ZWxla29tLmRlPiwgQ2hyaXMgPGNiYXlsaXNzQGNzYy5jb21lPiBhbmQgVWxmCiAgTfZsbGVyIGZyb20gdGhlIG9wZW5zc2wgZGV2ZWxvcG1lbnQgdGVhbSBoZWxwZWQgYnJpbmdpbmcgbWUgdGhlIGRldGFpbHMgZm9yCiAgZml4aW5nIGFuIE9wZW5TU0wgdXNhZ2UgZmxhdy4gSXQgYmVjYW1lIGFwcGFyZW50IHdoZW4gdGhleSByZWxlYXNlZCBvcGVuc3NsCiAgMC45LjUgc2luY2UgdGhhdCBiYXJmZWQgb24gY3VybCdzIGJhZCBiZWhhdmlvciAobm90IHNlZWRpbmcgYSByYW5kb20gbnVtYmVyCiAgdGhpbmcpLgoKLSBZZXQgYW5vdGhlciBvcHRpb246IC1OLy0tbm8tYnVmZmVyIGRpc2FibGVzIGJ1ZmZlcmluZyBpbiB0aGUgb3V0cHV0IHN0cmVhbS4KICBQcm9iYWJseSBtb3N0IHVzZWZ1bCBmb3IgdmVyeSBzbG93IHRyYW5zZmVycyB3aGVuIHlvdSByZWFsbHkgd2FudCB0byBnZXQKICBldmVyeSBieXRlIGN1cmwgcmVjZWl2ZXMgd2l0aGluIHNvbWUgcHJlZmVycmVkIHRpbWUuIEFuZHJldyA8dG1yQGdjaS5uZXQ+CiAgc3VnZ2VzdGVkIHRoaXMuCgotIERhbWllbiBBZGFudCA8ZGFtc0B1c2EubmV0PiBtYWlsZWQgbWUgaGlzIGZpeGVzIGZvciBtYWtpbmcgY3VybCBjb21waWxlCiAgb24gVWx0cml4LgoKRGFuaWVsICgyNCBGZWJydWFyeSAyMDAwKToKLSBBcHBsaWVkIEr2cm4gSGFydHJvdGgncyBmaXhlcyBmb3IgY29uZmlnLXdpbjMyLmggYW5kIGxpYi9NYWtlZmlsZS53MzIuCgogIEkgc2hvdWxkIGFsc28gbWFrZSBhIG5vdGUgaGVyZSwgaWYgbm90aGluZyBlbHNlIHRvIG15c2VsZiwgdGhhdCB3aGVuIHVzaW5nCiAgdGhlICUtc3ludGF4IGZvciB2YXJpYWJsZXMgaW4gRE9TIGNvbW1hbmQgcHJvbXB0cywgeW91IG11c3QgdXNlIHR3byAlLQogIGxldHRlcnMgZm9yIGVhY2ggb25lIHNpbmNlIHRoYXQgaXMgYW4gZXNjYXBlIGxldHRlciB0aGVyZSEgTWF5YmUgSSBzaG91bGQKICB1c2UgYW5vdGhlciBsZXR0ZXIgaW5zdGVhZCEKCi0gQWRkZWQgbW9yZSB2YXJpYWJsZXMgdG8gLXc6CgogICdodHRwX2NvZGUnCiAgJ3RpbWVfbmFtZWxvb2t1cCcKICAndGltZV9jb25uZWN0JwogICd0aW1lX3ByZXRyYW5zZmVyJwogICd1cmxfZWZmZWN0aXZlJwoKLSBNYWRlIC13QGZpbGVuYW1lIHJlYWQgdGhlIHN5bnRheCBmcm9tIGEgZmlsZSBhbmQgLXdALSByZWFkcyB0aGUgc3ludGF4IGZyb20KICBzdGRpbiBpbiB0aGUgZ29vZCBvbGQgInN0YW5kYXJkIiBjdXJsIHdheS4KCkRhbmllbCAoMjIgRmVicnVhcnkgMjAwMCk6Ci0gUmVsZWFzZWQgYSA2LjVwcmUxIHZlcnNpb24gdG8gZ2V0IHNvbWUgdGVzdCBhbmQgdXNlciBmZWVkYmFjay4KCkRhbmllbCAoMjEgRmVicnVhcnkgMjAwMCk6CgotIEkgYWRkZWQgdGhlIC13Ly0td3JpdGUtb3V0IGZsYWcgYW5kIHNvbWUgdmFyaWFibGVzIHRvIGdvIHdpdGggaXQuIC13IGlzIGEKICBzaW5nbGUgc3RyaW5nLCB3aGF0ZXZlciB5b3UgZW50ZXIgdGhlcmUgd2lsbCBiZSB3cml0dGVuIG91dCB3aGVuIGN1cmwgaGFzCiAgY29tcGxldGVkIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0LiBUaGVyZSBhcmUgc29tZSB2YXJpYWJsZSBzdWJzdGl0dXRpb25zIGFuZAogIHRoZXkgYXJlIHNwZWNpZmllZCBhcyAnJXt2YXJpYWJsZX0nICh3aXRob3V0IHRoZSBxdW90ZXMpLiBWYXJpYWJsZXMgdGhhdAogIGV4aXN0IGFzIG9mIHRoaXMgbW9tZW50IGFyZToKCiAgICAgICAgdG90YWxfdGltZSAgICAgLSB0b3RhbCB0cmFuc2ZlciB0aW1lIGluIHNlY29uZHMgKHdpdGggMiBkZWNpbWFscykKICAgICAgICBzaXplX2Rvd25sb2FkICAtIHRvdGFsIGRvd25sb2FkZWQgYW1vdW50IG9mIGJ5dGVzCiAgICAgICAgc2l6ZV91cGxvYWQgICAgLSB0b3RhbCB1cGxvYWRlZCBhbW91bnQgb2YgYnl0ZXMKICAgICAgICBzcGVlZF9kb3dubG9hZCAtIHRoZSBhdmVyYWdlIHNwZWVkIG9mIHRoZSBlbnRpcmUgZG93bmxvYWQKICAgICAgICBzcGVlZF91cGxvYWQgICAtIHRoZSBhdmVyYWdlIHNwZWVkIG9mIHRoZSBlbnRpcmUgdXBsb2FkCgogIEkgd2lsbCBvZiBjb3Vyc2UgYWRkIG1vcmUgdmFyaWFibGVzLCBidXQgSSBuZWVkIGlucHV0IG9uIHRoZXNlIGFuZCBvdGhlcnMuCgotIEl0IHN0cnVjayBtZSB0aGF0IHRoZSAtIyBwcm9ncmVzcyBiYXIgd2lsbCBiZSBoYXJkIHRvIGp1c3QgYXBwbHkgb24gdGhlIG5ldwogIHByb2dyZXNzIGJhciBjb25jZXB0LiBJIG5lZWQgc29tZSBmZWVkYmFjayBvbiB0aGlzIGJlZm9yZSB0aGF0J2xsIGdldCByZS0KICBpbnRyb2R1Y2VkISA6LS8KCkRhbmllbCAoMTYgRmVicnVhcnkgMjAwMCk6Ci0gSvZybiBIYXJ0cm90aCBicm91Z2h0IG1lIHNvbWUgZml4ZXMgZm9yIHRoZSBwcm9ncmVzcyBtZXRlciBhbmQgSSBjb250aW51ZWQKICB3b3JraW5nIG9uIGl0LiBJdCBzZWVtcyB0byB3b3JrIGZvciBodHRwIGRvd25sb2FkLCBodHRwIHBvc3QsIGZ0cCBkb3dubG9hZAogIGFuZCBmdHAgdXBsb2FkLiBJdCBzaG91bGQgYmUgYSBwcmV0dHkgZ29vZCB0ZXN0IGl0IHdvcmtzIGdlbmVyYWxseSBnb29kLgoKLSBTdGlsbCBuZWVkIHRvIGFkZCB0aGUgLSMgcHJvZ3Jlc3MgYmFyIGludG8gdGhlIG5ldyBzdHlsZSBwcm9ncmVzcyBpbnRlcmZhY2UuCgotIEdvbm5hIGhhdmUgYSBnbyBhdCBteSBuZXcgb3V0cHV0IG9wdGlvbiBwYXJhbWV0ZXIgbmV4dC4KCkRhbmllbCAoMTUgRmVicnVhcnkgMjAwMCk6Ci0gVGhlIHByb2dyZXNzIG1ldGVyIHN0dWZmIGlzIHNsb3dseSB0YWtpbmcgcGxhY2UuIFRoZXJlJ3MgbW9yZSBsZWZ0IGJlZm9yZSBpdAogIGlzIHdvcmtpbmcgb2sgYW5kIGV2ZXJ5dGhpbmcgaXMgdGVzdGVkLCBidXQgd2UncmUgcmVhY2hpbmcgdGhlcmUuIFNsb3dseSEKCkRhbmllbCAoMTEgRmVicnVhcnkgMjAwMCk6Ci0gUGF1bCBNYXJxdWlzIDxwbWFycXVpc0BpbmFtZS5jb20+IGZpeGVkIHRoZSBjb25maWcgZmlsZSBwYXJzaW5nIG9mIGN1cmwgdG8KICBkZWFsIHdpdGggYW55LWxlbmd0aCBsaW5lcywgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIGxpbWl0IG9mIDRLLgoKLSBFZXR1IE9qYW5lbiA8ZXNvamFuZW5Aanl1LmZpPidzIHN1Z2dlc3Rpb24gb2Ygc3VwcG9ydGluZyB0aGUgQC1zdHlsZSBmb3IgLWIKICBpcyBpbXBsZW1lbnRlZC4gTm93IC1iQDxmaWxlbmFtZT4gd29ya3MgYXMgd2VsbCBhcyB0aGUgb2xkIHN0eWxlLiAtYkAtIGFsc28KICBzaW1pbGFybHkgcmVhZHMgdGhlIGNvb2tpZXMgZnJvbSBzdGRpbi4KCi0gUmVtaW5kZXI6IC1EIHNob3VsZCBub3Qgd3JpdGUgdG8gdGhlIGZpbGUgdW50aWwgaXQgbmVlZHMgdG8sIGluIHRoZSBzYW1lIHdheQogIC1vIGRvZXMuIFRoYXQgd291bGQgZW5hYmxlIGN1cmwgdG8gdXNlIC1iIGFuZCAtRCBvbiB0aGUgc2FtZSBmaWxlLi4uCgotIEVsbGlzIFByaXRjaGFyZCA8ZWxsaXNAY2l0cmlhLmNvbT4gbWFkZSBnZXRkYXRlLnkgd29yayBmb3IgTWFjT1MgWC4KCi0gUGF1bCBIYXJyaW5ndG9uIDxwYXVsQHBpenphLm9yZz4gaGVscGVkIG1lIG91dCBmaW5kaW5nIHRoZSBjcmFzaCBpbiB0aGUKICBjb29raWUgcGFyc2VyLiBIZSBhbHNvIHBvaW50ZWQgb3V0IGN1cmwncyBoYWJpdCBvZiBzZW5kaW5nIGVtcHR5IGNvb2tpZXMgdG8KICB0aGUgc2VydmVyLgoKRGFuaWVsICg4IEZlYnJ1YXJ5IDIwMDApOgogLSBSb24gWmFwcCA8cnphcHBlckB5YWhvby5jb20+IGNvcnJlY3RlZCBhIHByb2JsZW0gaW4gc3JjL3VybGdsb2IuYyB0aGF0CiAgIHByZXZlbnRlZCBjdXJsIGZyb20gZ2V0dGluZyBjb21waWxlZCBvbiBzdW5vcyA0LiBUaGUgcHJvYmxlbSBoYWQgdG8gZG8KICAgd2l0aCB0aGUgZGlmZmVyZW5jZSBpbiBzcHJpbnRmKCkgcmV0dXJuIGNvZGUgdHlwZXMuCgogLSBUcmFuc2ZlcigpIHNob3VsZCBub3cgYmUgYWJsZSB0byBkb3dubG9hZCBhbmQgdXBsb2FkIHNpbXVsdGFuZW91c2x5LiBMZXQncwogICBkbyBzb21lIHByb2dyZXNzIG1ldGVyIGZpeGVzIGxhdGVyIHRoaXMgd2Vlay4KCkRhbmllbCAoMzEgSmFudWFyeSAyMDAwKToKIC0gUGF1bCBIYXJyaW5ndG9uIDxwYXVsQHBpenphLm9yZz4gZm91bmQgYW5vdGhlciBjb3JlIGR1bXAgaW4gdGhlIGNvb2tpZQogICBwYXJzZXIuIEN1cmwgZG9lc24ndCBwcm9wZXJseSByZWNvZ25pemUgdGhlICd2ZXJzaW9uJyBrZXl3b3JkIGFuZCBJIHRoaW5rCiAgIHRoYXQgaXMgd2hhdCBjYXVzZWQgdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggc29tZSBzcGVjcyBvbiBjb29raWVzIGFuZCBzZWUKICAgd2hhdCBlbHNlIGN1cmwgbGFja3MgdG8gaW1wcm92ZSB0aGlzIGEgYml0IG1vcmUgb25jZSBhbmQgZm9yIGFsbC4KCiAgIFJGQyAyMTA5IGNsZWFybHkgc3BlY2lmaWVzIGhvdyBjb29raWVzIHNob3VsZCBiZSBkZWFsdCB3aXRoIHdoZW4gdGhleSBhcmUKICAgY29tcGxpYW50IHdpdGggdGhhdCBzcGVjLiBJIGRvbid0IHRoaW5rIG1hbnkgc2VydmVycyBhcmUgdGhvdWdoLi4uCgogLSBNYXJrIFcuIEVpY2hpbiA8ZWljaGluQHRob2sub3JnPiBmb3VuZCB0aGF0IHdoaWxlIGN1cmwgaXMgdXBsb2FkaW5nIGEgZm9ybQogICB0byBhIHdlYiBzaXRlLCBpdCBkb2Vzbid0IHJlYWQgaW5jb21pbmcgZGF0YSB3aHkgaXQnbGwgaGFuZyBhZnRlciBhIHdoaWxlCiAgIHNpbmNlIHRoZSBzb2NrZXQgInBpcGUiIGJlY29tZXMgZnVsbC4KCiAgIEl0IHRvb2sgbWUgdHdvIGhvdXJzIHRvIHJld3JpdGUgRG93bmxvYWQoKSBhbmQgVXBsb2FkKCkgaW50byB0aGUgbmV3CiAgIHNpbmdsZSBmdW5jdGlvbiBUcmFuc2ZlcigpLiBJdCBldmVuIHNlZW1zIHRvIHdvcmshIE1vcmUgdGVzdGluZyBpcyByZXF1aXJlZAogICBvZiBjb3Vyc2UuLi4gSSBzaG91bGQgZ2V0IHRoZSBoZWFkZXItc2VuZGluZyB0b2dldGhlciBpbiBhIGtpbmQgb2YgcXVldWUKICAgYW5kIGxldCB0aGVtIGdldCAidXBsb2FkZWQiIGluIFRyYW5zZmVyKCkgYXMgd2VsbC4KCiAtIFpoaWJpYW8gV3UgPHd1emJAZXJvbHMuY29tPiBwb2ludGVkIG91dCBhIGN1cmwgYnVnIGluIHRoZSBsb2NhdGlvbjogYXJlYSwKICAgYWx0aG91Z2ggSSBkaWQgbm90IGdldCBhIHJlcHJvZHVjaWJsZSB3YXkgdG8gZG8gdGhpcyB3aHkgSSBoYXZlIHRvIHdhaXQKICAgd2l0aCBmaXhpbmcgYW55dGhpbmcuCgogLSBCb2IgU2NoYWRlciA8cnNjaGFkZXJAcHJvZHVjdC1kZXMuY29tPiBzdWdnZXN0ZWQgSSBzaG91bGQgaW1wbGVtZW50IHJlc3VtZQogICBzdXBwb3J0IGZvciB0aGUgSFRUUCBQVVQgb3BlcmF0aW9uLCBhbmQgYXMgSSB0aGluayBpdCBpcyBhIHZhbGlkIHN1Z2dlc3Rpb24KICAgSSdsbCB3b3JrIG9uIGl0LgoKRGFuaWVsICgyNSBKYW51YXJ5IDIwMDApOgogLSBNIFRyYXZpcyBPYmVuaGF1cyA8VHJhdmlzLk9iZW5oYXVzQGF1ZC5hbGNhdGVsLmNvbT4gcG9pbnRlZCBvdXQgYSBtYW51YWwKICAgbWl4dXAgd2l0aCAteSBhbmQgLVkgdGhhdCB3YXMgY29ycmVjdGVkLgoKIC0gSmVucyBTY2hsZXVzZW5lciA8SmVucy5TY2hsZXVzZW5lckBkbHIuZGU+IHBvaW50ZWQgb3V0IGEgcHJvYmxlbSB0byBjb21waWxlCiAgIGN1cmwgb24gQUlYIDQuMS40IGFuZCBnYXZlIG1lIGEgc29sdXRpb24uIFRoaXMgcHJvYmxlbSB3YXMgYWxyZWFkeSBmaXhlZAogICBieSBK9nJuJ3MgcmVjZW50ICNpbmNsdWRlIG1vZGlmaWNhdGlvbnMhCgpEYW5pZWwgKDE5IEphbnVhcnkgMjAwMCk6CiAtIE9za2FyIExpbGplYmxhZCA8b3NrQGhlbS5wYXNzYWdlbi5zZT4gcG9pbnRlZCBvdXQgYW5kIGNvcnJlY3RlZCBhIHByb2JsZW0KICAgaW4gdGhlIExvY2F0aW9uOiBmb2xsb3dpbmcgc3lzdGVtIHRoYXQgbWFkZSBjdXJsIGZvbGxvd2luZyBhIGxvY2F0aW9uOiB0byBhCiAgIGRpZmZlcmVudCBwcm90b2NvbCB0byBmYWlsLgoKICAgQXQgSmFudWFyeSAzMXN0IEkgcmUtY29uc2lkZXJlZCB0aGlzIGZpeCBhbmQgdGhlIHN1cnJvdW5kaW5nIHNvdXJjZSBjb2RlLiBJCiAgIGNvdWxkIG5vdCByZWFsbHkgc2VlIHRoYXQgdGhlIHBhdGNoIGRpZCBhbnkgZGlmZmVyZW5jZSwgd2h5IEkgcmVtb3ZlZCBpdAogICBhZ2FpbiBmb3IgZnVydGhlciByZXNlYXJjaCBhbmQgZGVidWdnaW5nLiAoSXQgZGlzYWJsZWQgbG9jYXRpb246IGZvbGxvd2luZwogICBvbiBzZXJ2ZXIgbm90IHJ1bm5pbmcgb24gZGVmYXVsdCBwb3J0cy4pCgogLSBK9nJuIEhhcnRyb3RoIDxKb2Vybi5IYXJ0cm90aEB0ZWxla29tLmRlPiBicm91Z2h0IGEgZml4IHRoYXQgb25jZSBhZ2FpbgogICBtYWRlIGl0IHBvc3NpYmxlIHRvIHNlbGVjdCBwcm9ncmVzcyBiYXIuCgogLSBK9nJuIGFsc28gZml4ZWQgYSBmZXcgaW5jbHVkZSBwcm9ibGVtcy4KClZlcnNpb24gNi40CgpEYW5pZWwgKDE3IEphbnVhcnkgMjAwMCk6CiAtIEJhc2VkIG9uIHN1Z2dlc3Rpb25zIGZyb20gQmr2cm4gU3RlbmJlcmcgKGJqb3JuQGhheHgubnUpLCBJIG1hZGUgdGhlCiAgIHByb2dyZXNzIGRlYWwgYmV0dGVyIHdpdGggbGFyZ2VyIGZpbGVzIGFuZCBhZGRlZCBhICJUaW1lIiBmaWVsZCB3aGljaCBzaG93cwogICB0aGUgdGltZSBzcGVudCBvbiB0aGUgZG93bmxvYWQgc28gZmFyLgogLSBJJ20gbm93IHVzaW5nIHRoZSBDVlMgcmVwb3NpdG9yeSBvbiBzb3VyY2Vmb3JnZS5uZXQsIHdoaWNoIGFsc28gYWxsb3dzIHdlYgogICBicm93c2luZy4gU2VlIGh0dHA6Ly9jdXJsLmhheHgubnUuCgpEYW5pZWwgKDEwIEphbnVhcnkgMjAwMCk6CiAtIFJlbnVtYmVyZWQgc29tZSBlbnVtcyBpbiBjdXJsL2N1cmwuaCBzaW5jZSB0YWcgbnVtYmVyIDM1IHdhcyB1c2VkIHR3aWNlIQogLSBBZGRlZCAicG9zdHF1b3RlIiBzdXBwb3J0IHRvIHRoZSBmdHAgc2VjdGlvbiB0aGF0IGVuYWJsZXMgcG9zdC1mdHAtdHJhbnNmZXIKICAgcXVvdGUgY29tbWFuZHMuCiAtIE5vdyBtYWRlIHRoZSAtUS8tLXF1b3RlIHBhcmFtZXRlciByZWNvZ25pemUgJy0nIGFzIGEgcHJlZml4LCB3aGljaCBtZWFucwogICB0aGF0IGNvbW1hbmQgd2lsbCBiZSBpc3N1ZWQgQUZURVIgYSBzdWNjZXNzZnVsIGZ0cCB0cmFuc2Zlci4gVGhpcyBjYW4gb2YKICAgY291cnNlIGJlIHVzZWQgdG8gZGVsZXRlIG9yIHJlbmFtZSBhIGZpbGUgYWZ0ZXIgaXQgaGFzIGJlZW4gdXBsb2FkZWQgb3IKICAgZG93bmxvYWRlZC4gVXNlIHlvdXIgaW1hZ2luYXRpb24hIDstKQogLSBTaW5jZSBJIGRvIHRoZSBtYWluIGRldmVsb3BtZW50IG9uIHNvbGFyaXMgMi42IG5vdywgSSBoYWQgdG8gZG93bmxvYWQgYW5kCiAgIGluc3RhbGwgR05VIGdyb2ZmIHRvIGdlbmVyYXRlIHRoZSBodWdlaGVscC5jIGZpbGUuIFRoZSBzb2xhcmlzIG5yb2ZmIGNvcmVzCiAgIG9uIHRoZSBtYW4gcGFnZSEgU28sIGluIG9yZGVyIHRvIG1ha2UgdGhlIHNvbGFyaXMgY29uZmlndXJlIHNjcmlwdCBmaW5kIGEKICAgYmV0dGVyIHJlc3VsdCBJIG1hZGUgZ25yb2ZmIGdldCBjaGVja2VkIHByaW9yIHRvIHRoZSByZWd1bGFyIG5yb2ZmLgogLSBBZGRlZCBhbGwgdGhlIGN1cmwgZXhpdCBjb2RlcyB0byB0aGUgbWFuIHBhZ2UuCiAtIEppbSBHYWxsYWdoZXIgPGptZ2FsbGFnQHVzYS5uZXQ+IHByb3Blcmx5IHRyYWNrZWQgZG93biBhIGJ1ZyBpbiBhdXRvY29uZgogICAyLjEzLiBUaGUgQUNfQ0hFQ0tfTElCKCkgbWFjcm8gd3JvbmdmdWxseSB1c2VzIHRoZSAtbCBmbGFnIGJlZm9yZSB0aGUgLUwKICAgZmxhZyB0byAnbGQnIHdoaWNoIGNhdXNlcyB0aGUgSFAtVVggMTAuMjAgZmxhdm91ciB0byBmYWlsIG9uIGFsbCBsaWJjaGVja3MKICAgYW5kIHRoZXJlZm9yZSB5b3UgY2FuJ3QgbWFrZSB0aGUgY29uZmlndXJlIHNjcmlwdCBmaW5kIHRoZSBvcGVuc3NsIGxpYnMhCgpEYW5pZWwgKDI4IERlY2VtYmVyIDE5OTkpOgogLSBUaW0gVmVyaG9ldmVuIDxkakB3YWxoYWxsYS5zaW4ua2hrLmJlPiBjb3JyZWN0bHkgaWRlbnRpZmllZCB0aGF0IGN1cmwKICAgZG9lc24ndCBzdXBwb3J0IFVSTCBmb3JtYXR0ZWQgZmlsZSBuYW1lcyB3aGVuIGdldHRpbmcgZnRwLiBOb3csIHRoZXJlJ3MgYQogICBwcm9ibGVtIHdpdGggZ2V0dGluZyB2ZXJ5IHdlaXJkIGZpbGUgbmFtZXMgb2ZmIEZUUCBzZXJ2ZXJzLiBSRkMgOTU5IGRlZmluZXMKICAgdGhhdCB0aGUgZmlsZSBuYW1lIHN5bnRheCB0byB1c2Ugc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGluIHRoZSBuYXRpdmUgT1Mgb2YKICAgdGhlIHNlcnZlci4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgcGVlciBzZXJ2ZXIgc3lzdGVtIHdlIGN1cnJlbnRseSBqdXN0CiAgIHRyYW5zbGF0ZSB0aGUgVVJMIHN5bnRheCBpbnRvIHBsYWluIGxldHRlcnMuIEl0IGlzIHN0aWxsIGJldHRlciBhbmQgd2l0aAogICB0aGUgc29sYXJpcyAyLjYtc3VwcGxpZWQgZnRwIHNlcnZlciBpdCB3b3JrcyB3aXRoIHNwYWNlcyBpbiB0aGUgZmlsZSBuYW1lcy4KCkRhbmllbCAoMjcgRGVjZW1iZXIgMTk5OSk6CiAtIFdoZW4gY3VybCBwYXJzZWQgY29va2llcyBzdHJhaWdodCBvZmYgYSByZW1vdGUgc2l0ZSwgaXQgY29ycnVwdGVkIHRoZSBpbnB1dAogICBkYXRhLCB3aGljaCwgaWYgdGhlIGRvd25sb2FkZWQgaGVhZGVycyB3ZXJlIHN0b3JlZCBtYWRlIHZlcnkgb2RkIGNoYXJhY3RlcnMKICAgaW4gdGhlIHNhdmVkIGRhdGEuIENvcnJlY3RseSBpZGVudGlmaWVkIGFuZCByZXBvcnRlZCBieSBQYXVsIEhhcnJpbmd0b24KICAgPHBhdWxAcGl6emEub3JnPi4KCkRhbmllbCAoMTMgRGVjZW1iZXIgMTk5OSk6CiAtIEdlbmVyYWwgY2xlYW51cHMgaW4gdGhlIGxpYnJhcnkgaW50ZXJmYWNlLiBUaGVyZSBoYWQgYmVlbiBzb21lIGJhZCBrbHVkZ2VzCiAgIGFkZGVkIGR1cmluZyB0aW1lcyBvZiBzdHJlc3MgYW5kIEkgZGlkIG15IGJlc3QgdG8gY2xlYW4gdGhlbSBvZmYuIEl0IHdhcwogICBib3RoIHJlZ2FyZGluZyB0aGUgbGliIEFQSSBhcyB3ZWxsIGFzIGluY2x1ZGUgZmlsZSBjb25mdXNpb25zLgoKRGFuaWVsICgzIERlY2VtYmVyIDE5OTkpOgogLSBBIHNtYWxsIC0tc3RkZXJyIGJ1ZyB3YXMgcmVwb3J0ZWQgYnkgRWV0dSBPamFuZW4gPGVzb2phbmVuQGp5dS5maT4uLi4KCiAtIHdobyBhbHNvIGJyb3VnaHQgdGhlIHN1Z2dlc3Rpb24gb2YgZXh0ZW5kaW5nIHRoZSAtWCBmbGFnIHRvIGZ0cCBsaXN0IGFzCiAgIHdlbGwuIFNvLCBub3cgaXQgaXMgYW5kIHRoZSBsb25nIG9wdGlvbiBpcyBub3cgLS1yZXF1ZXN0IGluc3RlYWQuIEl0IGlzCiAgIG9ubHkgZm9yIGZ0cCBsaXN0IGZvciBub3cgKGFuZCB0aGUgZm9ybWVyIGh0dHAgc3R1ZmYgdG9vIG9mIGNvdXJzZSkuCgpMYXJzIEouIEFhcyA8bGFyc2FAc2ltLm5vPiAoMjQgTm92ZW1iZXIgMTk5OSk6CiAtIFBhdGNoZWQgY3VybCB0byBjb21waWxlIGFuZCBidWlsZCB1bmRlciBCZU9TLiBEb2Vzbid0IHdvcmsgeWV0IHRob3VnaCEKCiAtIENvcnJlY3RlZCB0aGUgTWFrZWZpbGUuYW0gZmlsZXMgdG8gYWxsb3cgcHV0dGluZyBvYmplY3QgZmlsZXMgaW4KICAgZGlmZmVyZW50IGRpcmVjdG9yaWVzIHRoYW4gdGhlIHNvdXJjZXMuCgpWZXJzaW9uIDYuMy4xCgpEYW5pZWwgKDIzIE5vdmVtYmVyIDE5OTkpOgogLSBJJ3ZlIGhhZCB0aGlzIG1ham9yIGRpc2sgY3Jhc2guIE15IGdvb2Qgb2xkIHRydXN0LXdvcnRoeSBzb3VyY2UgZGlzayBkaWVkCiAgIGFsb25nIHdpdGggdGhlIG1hY2hpbmUgdGhhdCBob3N0ZWQgaXQuIFRoYW5rIGdvb2RuZXNzIG1vc3Qgb2YgYWxsIHRoZQogICB0aGluZ3MgSSd2ZSBkb25lIGFyZSBlaXRoZXIgYmFja2VkIHVwIGVsc2V3aGVyZSBvciBzdG9yZWQgaW4gdGhpcyBDVlMKICAgc2VydmVyIQoKIC0gTWljaGFlbCBTLiBTdGV1ZXIgPG1pY2hhZWxAc3RldWVyLmNvbT4gcG9pbnRlZCBvdXQgYSBidWcgaW4gdGhlIC1GIGhhbmRsaW5nCiAgIHRoYXQgbWFkZSBjdXJsIGhhbmcgaWYgeW91IHBvc3RlZCBhbiBlbXB0eSB2YXJpYWJsZSBzdWNoIGFzICctRiBuYW1lPScuIEl0CiAgIHdhcyBvbmUgb2YgdGhvc2Ugb2xkIGJ1Z3MgdGhhdCBuZXZlciBoYXZlIHdvcmtlZCBwcm9wZXJseS4uLgoKIC0gSmFzb24gQmFpZXR0byA8amFzb25AZHVyaWFucy5jb20+IHBvaW50ZWQgb3V0IGEgZ2VuZXJhbCBmbGF3IGluIHRoZSBIVFRQCiAgIGRvd25sb2FkLiBDdXJsIGRpZG4ndCBjb21wbGFpbiBpZiBpdCB3YXMgcHJlbWF0dXJlbHkgYWJvcnRlZCBiZWZvcmUgdGhlCiAgIGVudGlyZSBkb3dubG9hZCB3YXMgY29tcGxldGVkLiBJdCBkb2VzIG5vdy4KCkRhbmllbCAoMTkgTm92ZW1iZXIgMTk5OSk6CiAtIENocmlzIE1hbHRieSA8Y2hyaXNAYXVyZW1hLmNvbT4gdmVyeSBhY2N1cmF0ZWx5IGNyaXRpY2l6ZWQgdGhlIGxhY2sgb2YKICAgcmV0dXJuIGNvZGUgY2hlY2tzIG9uIHRoZSBmd3JpdGUoKSBjYWxscy4gSSBkaWQgYSB0aG9yb3VnaCBjaGVjayBmb3IgYWxsCiAgIG9jY3VycmVuY2VzIGFuZCBjb3JyZWN0ZWQgdGhpcy4KCkRhbmllbCAoMTcgTm92ZW1iZXIgMTk5OSk6CiAtIFBhdWwgSGFycmluZ3RvbiA8cGF1bEBwaXp6YS5vcmc+IHBvaW50ZWQgb3V0IHRoYXQgdGhlIC1tLy0tbWF4LXRpbWUgb3B0aW9uCiAgIGRvZXNuJ3Qgd29yayBmb3IgdGhlIHNsb3cgc3lzdGVtIGNhbGxzIGxpa2UgZ2V0aG9zdGJ5bmFtZSgpLi4uIEkgZG9uJ3QgaGF2ZQogICBhbnkgZ29vZCBmaXggeWV0LCBqdXN0IGEgc2xpZ2h0bHkgbGVzcyBiYWQgb25lIHRoYXQgbWFrZXMgY3VybCBleGl0IGhhcmQKICAgd2hlbiB0aGUgdGltZW91dCBpcyByZWFjaGVkLgoKIC0gQmpvcm4gUmVlc2UgaGVscGVkIG1lIHBvaW50IG91dCBhIHBvc3NpYmxlIHByb2JsZW0gdGhhdCBtaWdodCBiZSB0aGUgcmVhc29uCiAgIHdoeSBUaG9tYXMgSHVyc3QgZXhwZXJpZW5jZSBwcm9ibGVtcyBpbiBoaXMgQW1pZ2EgdmVyc2lvbi4KCiBEYW5pZWwgKDEyIE5vdmVtYmVyIDE5OTkpOgogLSBJIGZvdW5kIGEgY3Jhc2ggaW4gdGhlIG5ldyBjb29raWUgZmlsZSBwYXJzZXIuIEl0IGNyYXNoZWQgd2hlbiB5b3UgZ2F2ZQogICBhIHBsYWluIGh0dHAgaGVhZGVyIGZpbGUgYXMgaW5wdXQuLi4KClZlcnNpb24gNi4zCgogRGFuaWVsICgxMCBOb3ZlbWJlciAxOTk5KToKIC0gSSBraW5kIG9mIGZvdW5kIG91dCB0aGF0IHRoZSBIVFRQIHRpbWUtY29uZGl0aW9uYWwgR0VUcyAoLXopIGFyZW4ndCBhbHdheXMKICAgcmVzcGVjdGVkIGJ5IHRoZSB3ZWIgc2VydmVyIGFuZCB0aGUgZG9jdW1lbnQgaXMgdGhlcmVmb3JlIHNlbnQgaW4gd2hvbGUKICAgYWdhaW4sIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIHJlcXVlc3RlZCBjb25kaXRpb24uIEFmdGVyIHJlYWRpbmcKICAgc2VjdGlvbiAxMy4zLjQgb2YgUkZDIDI2MTYsIEkgdGhpbmsgSSdtIGRvaW5nIHRoZSByaWdodCB0aGluZyBub3cgd2hlbiBJIGRvCiAgIG15IG93biBjaGVjayBhcyB3ZWxsLiBJZiBjdXJsIHRoaW5rcyB0aGUgY29uZGl0aW9uIGlzbid0IG1ldCwgdGhlIHRyYW5zZmVyCiAgIGlzIGFib3J0ZWQgcHJlbWF0dXJlbHkgKGFmdGVyIGFsbCB0aGUgaGVhZGVycyBoYXZlIGJlZW4gcmVjZWl2ZWQpLgoKIC0gQWZ0ZXIgY29tbWVudHMgZnJvbSBSb2JlcnQgTGluZGVuIDxyb2JlcnQubGluZGVuQHBvc3Rjb20uZGV1dHNjaGVwb3N0LmRlPiBJCiAgIGFsc28gcmV3cm90ZSBzb21lIHBhcnRzIG9mIHRoZSBtYW4gcGFnZSB0byBiZXR0ZXIgZGVzY3JpYmUgaG93IHRoZSAtRgogICB3b3Jrcy4KCiAtIE1pY2hhZWwgQW50aSA8YW50aUBwc2hvd2luZy5jb20+IHB1dCB1cCBhIG5ldyBjdXJsIGRvd25sb2FkIG1pcnJvciBpbgogICBDaGluYTogIGh0dHA6Ly93d3cucHNob3dpbmcuY29tL2N1cmwvCgogLSBJIGFkZGVkIHRoZSBsaXN0IG9mIGRvd25sb2FkIG1pcnJvcnMgdG8gdGhlIFJFQURNRSBmaWxlCgogLSBJIGRpZCBhZGQgbW9yZSBleHBsYW5hdGlvbnMgdG8gdGhlIG1hbiBwYWdlCgogRGFuaWVsICg4IE5vdmVtYmVyIDE5OTkpOgogLSBJIG1hZGUgdGhlIC1iLy0tY29va2llIG9wdGlvbiBjYXBhYmxlIG9mIHJlYWRpbmcgbmV0c2NhcGUgZm9ybWF0dGVkIGNvb2tpZQogICBmaWxlcyBhcyB3ZWxsIGFzIG5vcm1hbCBodHRwLWhlYWRlciBmaWxlcy4gSXQgc2hvdWxkIGJlIGFibGUgdG8KICAgdHJhbnNwYXJlbnRseSBmaWd1cmUgb3V0IHdoYXQga2luZCBvZiBmaWxlIGl0IGdvdCBhcyBpbnB1dC4KCiBEYW5pZWwgKDI5IE9jdG9iZXIgMTk5OSk6CiAtIEFub3RoZXIgb25lIG9mIFNlYmFzdGlhYW4gdmFuIEVyaydzIGlkZWFzICh0aGF0IGhhcyBiZWVuIHJlcXVlc3RlZCBiZWZvcmUKICAgYnV0IEkgc2VlbSB0byBoYXZlIGZvcmdvdHRlbiB3aG8gaXQgd2FzKSwgaXMgdG8gYWRkIHN1cHBvcnQgZm9yIHJhbmdlcyBpbgogICBGVFAgZG93bmxvYWRzLiBBcyB1c3VhbCwgb25lIHJlcXVlc3QgaXMganVzdCBhIHJlcXVlc3QsIHdoZW4gdGhleSdyZSB0d28KICAgaXQgaXMgYSBkZW1hbmQuIEkndmUgYWRkZWQgc2ltcGxlIHN1cHBvcnQgZm9yIFgtWSBzdHlsZSBmZXRjaGVzLiBYIGhhcyB0bwogICBiZSB0aGUgbG93ZXIgbnVtYmVyLCB0aG91Z2ggeW91IG1heSBvbWl0IG9uZSBvZiB0aGUgbnVtYmVycy4gVXNlIHRoZSAtci8KICAgLS1yYW5nZSBzd2l0Y2ggKHByZXZpb3VzbHkgSFRUUC1vbmx5KS4KCiAtIFNlYmFzdGlhYW4gdmFuIEVyayA8c2Vic3RlckBzZWJzdGVyLmNvbT4gc3VnZ2VzdGVkIHRoYXQgY3VybCBzaG91bGQgYmUKICAgYWJsZSB0byBzaG93IHRoZSBmaWxlIHNpemUgb2YgYSBzcGVjaWZpZWQgZmlsZS4gSSB0aGluayB0aGlzIGlzIGEgc3BsZW5kaWQKICAgaWRlYSBhbmQgdGhlIC1JIGZsYWcgaXMgbm93IHdvcmtpbmcgZm9yIEZUUC4gSXQgZGlzcGxheXMgdGhlIGZpbGUgc2l6ZSBpbgogICB0aGlzIG1hbm5lcjoKICAgICAgICBDb250ZW50LUxlbmd0aDogWFhYWAogICBBcyBpdCByZXNlbWJsZXMgbm9ybWFsIGhlYWRlcnMsIGFuZCBsZWF2ZXMgdXMgdGhlIG9wcG9ydHVuaXR5IHRvIGFkZCBtb3JlCiAgIGluZm8gaW4gdGhhdCBkaXNwbGF5IGlmIHdlIGNhbiBjb21lIHVwIHdpdGggbW9yZSBpbiB0aGUgZnV0dXJlISBJdCBhbHNvCiAgIG1ha2VzIHNlbnNlIHNpbmNlIGlmIHlvdSBhY2Nlc3MgZnRwIHRocm91Z2ggYSBIVFRQIHByb3h5LCB5b3UnZCBnZXQgdGhlCiAgIGZpbGUgc2l6ZSB0aGUgc2FtZSB3YXkuCgogICBJIGNoYW5nZWQgdGhlIG9yZGVyIG9mIHRoZSBRVU9URSBjb21tYW5kIGV4ZWN1dGlvbnMuIFRoZXkncmUgbm93IGV4ZWN1dGVkCiAgIGp1c3QgYWZ0ZXIgdGhlIGxvZ2luIGFuZCBiZWZvcmUgYW55IG90aGVyIGNvbW1hbmQuIEkgbWFkZSB0aGlzIHRvIGVuYWJsZQogICBxdW90ZSBjb21tYW5kcyB0byBydW4gYmVmb3JlIHRoZSAtSSBzdHVmZiBpcyBkb25lIHRvby4KCiAtIEkgZm91bmQgb3V0IHRoYXQgLUQvLS1kdW1wLWhlYWRlciBhbmQgLVYvLS12ZXJzaW9uIHdlcmVuJ3QgZG9jdW1lbnRlZCBpbgogICB0aGUgbWFuIHBhZ2UuCgogLSBNYW55IEhUVFAvMS4xIHNlcnZlcnMgZG8gbm90IHN1cHBvcnQgcmFuZ2VzLiBEb24ndCBhc2sgbWUgd2h5LiBJIGRpZCBhZGQKICAgc29tZSB0ZXh0IGFib3V0IHRoaXMgaW4gdGhlIG1hbiBwYWdlIGZvciB0aGUgcmFuZ2Ugb3B0aW9uLiBUaGUgdGhyZWFkIGluCiAgIHRoZSBtYWlsaW5nIGxpc3QgdGhhdCBzdGFydGVkIHRoaXMgd2FzIGluaXRpYXRlZCBieSBNaWNoYWVsIEFudGkKICAgPGFudGlAcHNob3dpbmcuY29tPi4KCiAtIEkgZ2V0IHJlcG9ydHMgYWJvdXQgbnJvZmYgY3Jhc2hlcyBvbiBzb2xhcmlzIDIuNisgd2hlbiBkaXNwbGF5aW5nIHRoZSBjdXJsCiAgIG1hbiBwYWdlLiBTd2l0Y2ggdG8gZ25yb2ZmIGluc3RlYWQsIGl0IGlzIHJlcG9ydGVkIHRvIHdvcmsoISkuIEFkYW0gQmFyY2xheQogICA8YWRhbUBvei5vcmc+IHJlcG9ydGVkIGFuZCBicm91Z2h0IHRoZSBzdWdnZXN0aW9uLgoKIC0gSW4gYSBkaWFsb2d1ZSB3aXRoIEpvaGFubmVzIEcuIEtyaXN0aW5zc29uIDxkOThpc0BkdGVrLmNoYWxtZXJzLnNlPiB3ZSBjYW1lCiAgIHVwIHdpdGggdGhlIGlkZWEgdG8gbGV0IC1ILy0taGVhZGVyIHNwZWNpZmllZCBoZWFkZXJzIHJlcGxhY2UgdGhlCiAgIGludGVybmFsbHkgZ2VuZXJhdGVkIGhlYWRlcnMsIGlmIHlvdSBoYXBwZW5lZCB0byBzZWxlY3QgdG8gYWRkIGEgaGVhZGVyCiAgIHRoYXQgY3VybCBub3JtYWxseSB1c2VzIGJ5IGl0c2VsZi4gVGhlIGFkdmFudGFnZSB3aXRoIHRoaXMgaXMgbm90IGVudGlyZWx5CiAgIG9idmlvdXMsIGJ1dCBpbiBKb2hhbm5lcycgY2FzZSBpdCBtZWFucyB0aGF0IGhlIGNhbiB1c2UgYW5vdGhlciBIb3N0OiB0aGFuCiAgIHRoZSBvbmUgY3VybCB3b3VsZCBzZXQuCgogRGFuaWVsICgyNyBPY3RvYmVyIDE5OTkpOgogLSBKb25na2kgU3V3YW5kaSA8Sm9uZ2tpLlN1d2FuZGlAZW5nLnN1bi5jb20+IGJyb3VnaHQgYSBuaWNlIHBhdGNoIGZvcgogICAoeWV0IGFub3RoZXIpIGNyYXNoIHdoZW4gZm9sbG93aW5nIGEgbG9jYXRpb246LiBUaGlzIHRpbWUgeW91IGhhZCB0bwogICBmb2xsb3cgYSBodHRwczovLyBzZXJ2ZXIncyByZWRpcmVjdCB0byBnZXQgdGhlIGNvcmUuCgpWZXJzaW9uIDYuMgoKIERhbmllbCAoMjEgT2N0b2JlciAxOTk5KToKIC0gSSB0aGluayBJIG1hbmFnZWQgdG8gcmVtb3ZlIHRoZSBzdXNwaWNpb3VzIChuaWwpIHRoYXQgaGFzIGJlZW4gc2VlbiBqdXN0CiAgIGJlZm9yZSB0aGUgIkhvc3Q6IiBpbiBIVFRQIHJlcXVlc3RzIHdoZW4gLXYgd2FzIHVzZWQuCiAtIEkgZm91bmQgb3V0IHRoYXQgaWYgeW91IGZvbGxvd2VkIGEgbG9jYXRpb246IHdoZW4gdXNpbmcgYSBwcm94eSwgd2l0aG91dAogICBoYXZpbmcgc3BlY2lmaWVkIGh0dHA6Ly8gaW4gdGhlIFVSTCwgdGhlIHByb3RvY29sIHBhcnQgd2FzIGFkZGVkIG9uY2UgYWdhaW4KICAgd2hlbiBtb3ZpbmcgdG8gdGhlIG5leHQgVVJMISAoVGhlIHByb3RvY29sIHBhcnQgaGFzIHRvIGJlIGFkZGVkIHRvIHRoZQogICBVUkwgd2hlbiBnb2luZyB0aHJvdWdoIGEgcHJveHkgc2luY2UgaXQgaGFzIG5vIHByb3RvY29sLWd1ZXNzaW5nIHN5c3RlbQogICBzdWNoIGFzIGN1cmwgaGFzLikKIC0gQmVuamFtaW4gUml0Y2V5IDxyaXRjZXlAdGZuLmNvbT4gcmVwb3J0ZWQgYSBjb3JlIGR1bXAgdW5kZXIgc29sYXJpcyAyLjYKICAgd2l0aCBPcGVuU1NMIDAuOS40LiBJdCB0dXJuZWQgb3V0IHRoaXMgd2FzIGR1ZSB0byBhIGJhZCBmcmVlKCkgaW4gbWFpbi5jCiAgIHRoYXQgb2NjdXJyZWQgYWZ0ZXIgdGhlIGRvd25sb2FkIHdhcyBkb25lIGFuZCBjb21wbGV0ZWQuCiAtIEJlbmphbWluIGZvdW5kIGZ0cCBkb3dubG9hZHMgdG8gc2hvdyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZG93bmxvYWQgbWV0ZXIKICAgdG8gZ2V0IHdyaXR0ZW4gdHdpY2UsIGFuZCBJIHJlbW92ZWQgdGhhdCBwcm9ibGVtLiBJdCB3YXMgaW50cm9kdWNlZCB3aXRoCiAgIHRoZSBtdWx0aXBsZSBVUkwgc3VwcG9ydC4KIC0gRGFuIFppdHRlciA8ZHppdHRlckB6aXR0ZXIubmV0PiBjb3JyZWN0bHkgcG9pbnRlZCBvdXQgdGhhdCBjdXJsIDYuMSBhbmQKICAgZWFybGllciB2ZXJzaW9ucyBkaWRuJ3QgaG9ub3IgUkZDIDI2MTYgY2hhcHRlciA0IHNlY3Rpb24gMiwgIk1lc3NhZ2UKICAgSGVhZGVycyI6ICIuLi5GaWVsZCBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLiIKICAgSFRUUCBoZWFkZXIgcGFyc2luZyBhc3N1bWVkIGEgY2VydGFpbiBjYXNpbmcuIERhbiBhbHNvIHByb3ZpZGVkIG1lIHdpdGgKICAgYSBwYXRjaCB0aGF0IGNvcnJlY3RlZCB0aGlzLCB3aGljaCBJIHRvb2sgdGhlIGxpYmVydHkgb2YgZWRpdGluZyBzbGlnaHRseS4KIC0gRGFuIFppdHRlciBhbHNvIHByb3ZpZGVkIGEgbmljZSBwYXRjaCBmb3IgY29uZmlnLmd1ZXNzIHRvIGJldHRlciByZWNvZ25pemUKICAgdGhlIE1hYyBPUyBYCiAtIERhbiBhbHNvIGNvcnJlY3RlZCBhIG1pbm9yIHByb2JsZW0gaW4gdGhlIGxpYi9NYWtlZmlsZSB0aGF0IGNhdXNlZCBsaW5raW5nCiAgIHRvIGZhaWwgb24gT1MgWC4KCiBEYW5pZWwgKDE5IE9jdG9iZXIgMTk5OSk6CiAtIExlbiBNYXJpbmFjY2lvIDxsZW5AZ29vZG5ldC5jb20+IGNhbWUgdXAgd2l0aCBzb21lIHByb2JsZW1zIHdpdGggY3VybC4KICAgU2luY2UgV2luZG93cyBoYXMgYSBjcmlwcGxlZCBzaGVsbCwgaXQgY2FuJ3QgcmVkaXJlY3Qgc3RkZXJyIGFuZCB0aGF0CiAgIGNhdXNlcyB0cm91YmxlLiBJIGFkZGVkIC0tc3RkZXJyIHRvZGF5IHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byByZWRpcmVjdAogICB0aGUgc3RkZXJyIHN0cmVhbSB0byBhIGZpbGUgb3Igc3Rkb3V0LgoKIERhbmllbCAoMTggT2N0b2JlciAxOTk5KToKIC0gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgbm93IHVuZGVyc3RhbmRzIHRoZSAnLS13aXRob3V0LXNzbCcgZmxhZywgd2hpY2ggbm93CiAgIHRvdGFsbHkgZGlzYWJsZSBTU0wvaHR0cHMgc3VwcG9ydC4gUHJldmlvdXNseSBpdCB3YXNuJ3QgcG9zc2libGUgdG8gZm9yY2UKICAgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gbGVhdmUgU1NMIGFsb25lLiBUaGUgcHJldmlvdXMgZnVuY3Rpb25hbGl0eSBoYXMKICAgYmVlbiByZXRhaW5lZC4gVHJveSBFbmdlbCBoZWxwZWQgdGVzdCB0aGlzIG5ldyBvbmUuCgpWZXJzaW9uIDYuMQoKIERhbmllbCAoMTcgT2N0b2JlciAxOTk5KToKIC0gSSBpZmRlZidlZCBvciBjb21tZW50ZWQgYWxsIHRoZSB6bGliIHN0dWZmIGluIHRoZSBzb3VyY2VzIGFuZCBjb25maWd1cmUKICAgc2NyaXB0LiBJdCB0dXJuZWQgb3V0IHdlIG5lZWRlZCB0byBtb2NrIG1vcmUgd2l0aCB6bGliIHRoYW4gSSBpbml0aWFsbHkKICAgdGhvdWdodCwgdG8gbWFrZSBpdCBjYXBhYmxlIG9mIGRvd25sb2FkaW5nIGNvbXByZXNzZWQgSFRUUCBkb2N1bWVudHMgYW5kCiAgIHVuY29tcHJlc3MgdGhlbSBvbiB0aGUgZmx5LiBJIGRpZG4ndCBtZWFuIHRoZSB6bGliIHBhcnRzIG9mIGN1cmwgdG8gYmVjb21lCiAgIG1vcmUgdGhhbiBtaW5vciBzbyB0aGlzIG1lYW5zIEkgaGFsdCB0aGUgemxpYiBleHBlZGl0aW9uIGZvciBub3cgYW5kIHdhaXQKICAgdW50aWwgc29tZW9uZSBlaXRoZXIgd3JpdGVzIHRoZSBjb2RlIG9yIHpsaWIgZ2V0cyB1cGRhdGVkIGFuZCBiZXR0ZXIKICAgYWRqdXN0ZWQgZm9yIHRoaXMga2luZCBvZiB1c2FnZS4gIEkgd29uJ3QgZ2V0IGludG8gZGV0YWlscyBoZXJlLCBidXQgYQogICBzaG9ydCBhIHN1bW1hcnkgaXMgc3VpdGFibGU6CiAgIC0gemxpYiBjYW4ndCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGV0aGVyIHRvIHVzZSB6bGliIG9yIGd6aXAKICAgICBkZWNvbXByZXNzaW9uIG1ldGhvZHMuCiAgIC0gemxpYiBpcyB2ZXJ5IG5lYXQgZm9yIHJlYWRpbmcgZ3ppcHBlZCBmaWxlcyBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yLAogICAgIGFsdGhvdWdoIG5vdCBhcyBuaWNlIGZvciByZWFkaW5nIGJ1ZmZlci1iYXNlZCBkYXRhIHN1Y2ggYXMgd2Ugd291bGQKICAgICB3YW50IGl0LgogICAtIHRoZXJlIGFyZSBzdGlsbCBzb21lIHByb2JsZW1zIHdpdGggdGhlIHdpbjMyIHZlcnNpb24gd2hlbiByZWFkaW5nIGZyb20KICAgICBhIGZpbGUgZGVzY3JpcHRvciBpZiB0aGF0IGlzIGEgc29ja2V0CgogRGFuaWVsICgxNCBPY3RvYmVyIDE5OTkpOgogLSBNb3ZlZCB0aGUgKGV4dGVybmFsKSBpbmNsdWRlIGZpbGVzIGZvciBsaWJjdXJsIGludG8gYSBzdWJkaXJlY3RvcnkgbmFtZWQKICAgY3VybCBhbmQgYWRqdXN0ZWQgYWxsICNpbmNsdWRlIGxpbmVzIHRvIHVzZSA8Y3VybC9YWFhYPiB0byBtYWludGFpbiBhCiAgIGJldHRlciBuYW1lIHNwYWNlIGFuZCBjb250cm9sIG9mIHRoZSBoZWFkZXJzLiBUaGlzIGhhcyBiZWVuIHJlcXVlc3RlZC4KCiBEYW5pZWwgKDEyIE9jdG9iZXIgMTk5OSk6CiAtIEkgbW9kaWZpZWQgdGhlICdtYWtldGd6JyBzY3JpcHQgdG8gcGVyZm9ybSBhICdtYWtlJyB0b28gYmVmb3JlIGEgcmVsZWFzZQogICBhcmNoaXZlIGlzIHB1dCB0b2dldGhlciBpbiBhbiBhdHRlbXB0IHRvIG1ha2UgdGhlIHRpbWUgc3RhbXBzIGJldHRlciBhbmQKICAgaG9wZWZ1bGx5IGF2b2lkIHRoZSBkb3VibGUgY29uZmlndXJlLXJ1bm5pbmcgdGhhdCB1c2UgdG8gb2NjdXIuCgogRGFuaWVsICgxMSBPY3RvYmVyIDE5OTkpOgogLSBBcHBsaWVkIEr2cm4ncyBwYXRjaGVzIHRoYXQgZml4ZXMgemxpYiBmb3IgbWluZ3czMiBjb21waWxlcyBhcyB3ZWxsIGFzCiAgIHNvbWUgb3RoZXIgbWlzc2luZyB6bGliICNpZmRlZiBhbmQgbW9yZSB0ZXh0IG9uIHRoZSBtdWx0aXBsZSBVUkwgZG9jcyBpbgogICB0aGUgbWFuIHBhZ2UuCgpWZXJzaW9uIDYuMWJldGEKCiBEYW5pZWwgKDYgT2N0b2JlciAxOTk5KToKIC0gRG91Z2xhcyBFLiBXZWdzY2hlaWQgPHdlZ3NjZEB3aGlybHBvb2wuY29tPiBzZW50IG1lIGEgcGF0Y2ggdGhhdCBtYWRlIHRoZQogICBleGFjdCBzYW1lIHRoaW5nIGFzIEkganVzdCBtYWRlOiB0aGUgLWQgc3dpdGNoIGlzIG5vdyBjYXBhYmxlIG9mIHJlYWRpbmcKICAgcG9zdCBkYXRhIGZyb20gYSBuYW1lZCBmaWxlIG9yIHN0ZGluLiAgVXNlIGl0IHNpbWlsYXJseSB0byB0aGUgLUYuIFRvIHJlYWQKICAgdGhlIHBvc3QgZGF0YSBmcm9tIGEgZ2l2ZW4gZmlsZToKCiAgICAgICAgY3VybCAtZCBAcGF0aC90by9maWxlbmFtZSB3d3cucG9zdHNpdGUuY29tCgogICBvciBsZXQgY3VybCByZWFkIGl0IG91dCBmcm9tIHN0ZGluOgoKICAgICAgICBjdXJsIC1kIEAtIHd3dy5wb3N0aXQuY29tCgogSvZybiBIYXJ0cm90aCAoMyBPY3RvYmVyIDE5OTkpOgogLSBCcm91Z2h0IHNvbWUgbW9yZSBwYXRjaGVzIGZvciBtdWx0aXBsZSBVUkwgZnVuY3Rpb25hbGl0eS4gVGhlIE1JTUUKICAgc2VwYXJhdGlvbiBpZGVhcyBhcmUgYWxtb3N0IHNjcmFwcGVkIG5vdywgYW5kIGEgY3VzdG9tIHNlcGFyYXRvciBpcyBiZWluZwogICB1c2VkIGluc3RlYWQuIFRoaXMgaXMgc3RpbGwgY29tcGlsZS10aW1lICJmbGFnZ2VkIi4KCiBEYW5pZWwKIC0gVXBkYXRlZCBjdXJsLjEgd2l0aCBtdWx0aXBsZSBVUkwgaW5mby4KCiBEYW5pZWwgKDMwIFNlcHRlbWJlciAxOTk5KToKIC0gRmVsaXggdm9uIExlaXRuZXIgPGZlbGl4QGNvbnZlcmdlbmNlLmRlPiBicm91Z2h0IG9wZW5zc2wtY2hlY2sgZml4ZXMKICAgZm9yIGNvbmZpZ3VyZS5pbiB0byB3b3JrIG91dC1vZi10aGUtYm94IHdoZW4gdGhlIG9wZW5zc2wgZmlsZXMgYXJlCiAgIGluc3RhbGxlZCBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgZGlycy4KCiBEYW5pZWwgKDI4IFNlcHRlbWJlciAxOTk5KQogLSBBZGRlZCBsaWJ6IGZ1bmN0aW9uYWxpdHkuIFRoaXMgc2hvdWxkIGVuYWJsZSBkZWNvbXByZXNzaW5nIGd6aXAsIGNvbXByZXNzCiAgIG9yIGRlZmxhdGUgZW5jb2RpbmcgSFRUUCBkb2N1bWVudHMuIEl0IGFsc28gbWFrZXMgY3VybCBzZW5kIGFuIGFjY2VwdCB0aGF0CiAgIGl0IGFjY2VwdHMgdGhhdCBraW5kIG9mIGVuY29kaW5nLiBDb21wcmVzc2VkIGNvbnRlbnRzIHVzdWFsbHkgc2hvcnRlbnMKICAgZG93bmxvYWQgdGltZS4gSSAqbmVlZCogc29tZW9uZSB0byB0ZWxsIG1lIGEgc2l0ZSB0aGF0IHVzZXMgY29tcHJlc3NlZCBIVFRQCiAgIGRvY3VtZW50cyBzbyB0aGF0IEkgY2FuIHRlc3QgdGhpcyBvdXQgcHJvcGVybHkuCgogLSBBcyBhIHJlc3VsdCBvZiB0aGUgYWRkaW5nIG9mIHpsaWIgYXdhcmVuZXNzLCBJIGNoYW5nZWQgdGhlIHZlcnNpb24gc3RyaW5nCiAgIGEgbGl0dGxlLiBJIHBsYW4gdG8gYWRkIG9wZW5sZGFwIHZlcnNpb24gcmVwb3J0aW5nIGluIHRoZXJlIHRvby4KCiBEYW5pZWwgKDE3IFNlcHRlbWJlciAxOTk5KQogLSBNYWRlIHRoZSAtRiBvcHRpb24gYWxsb3cgc3RkaW4gd2hlbiBzcGVjaWZ5aW5nIGZpbGVzLiBCeSB1c2luZyAnLScgaW5zdGVhZAogICBvZiBmaWxlIG5hbWUsIHRoZSBkYXRhIHdpbGwgYmUgcmVhZCBmcm9tIHN0ZGluLgoKVmVyc2lvbiA2LjAKCiBEYW5pZWwgKDEzIFNlcHRlbWJlciAxOTk5KQogLSBBZGRlZCAtWC8tLWh0dHAtcmVxdWVzdCA8cmVxdWVzdD4gdG8gZW5hYmxlIGFueSBIVFRQIGNvbW1hbmQgdG8gYmUgc2VudC4KICAgRG8gbm90IHRoYXQgeW91ciBzZXJ2ZXIgaGFzIHRvIHN1cHBvcnQgdGhlIGV4YWN0IHN0cmluZyB5b3UgZW50ZXIuIFRoaXMKICAgc2hvdWxkIHBvc3NpYmx5IGEgc3RyaW5nIGxpa2UgREVMRVRFIG9yIFRSQUNFLgoKIC0gQXBwbGllZCBEb3VnbGFzJyBtaW5ndzMyLWZpeGVzIGZvciB0aGUgbWFrZWZpbGVzLgoKIERhbmllbCAoMTAgU2VwdGVtYmVyIDE5OTkpCiAtIERvdWdsYXMgRS4gV2Vnc2NoZWlkIDx3ZWdzY2RAd2hpcmxwb29sLmNvbT4gcG9pbnRlZCBvdXQgYSBwcm9ibGVtLiBDdXJsCiAgIGRpZG4ndCBjaGVjayB0aGUgRlRQIHNlcnZlcnMgcmV0dXJuIGNvZGUgcHJvcGVybHkgYWZ0ZXIgdGhlIC0tcXVvdGUKICAgY29tbWFuZHMgd2VyZSBpc3N1ZWQuIEl0IHRvb2sgYW55dGhpbmcgbm9uIDIwMCBhcyBhbiBlcnJvciwgd2hlbiBhbGwgMlhYCiAgIGNvZGVzIHNob3VsZCBiZSBhY2NlcHRlZCBhcyBPSy4KCiAtIFNlbmRpbmcgY29va2llcyB0byB0aGUgc2FtZSBzaXRlIGluIG11bHRpcGxlIGxpbmVzIGxpa2UgY3VybCB1c2VkIHRvIGRvCiAgIHR1cm5lZCBvdXQgdG8gYmUgYmFkIGFuZCBicmVha2luZyB0aGUgY29va2llIHNwZWNzLiBDdXJsIG5vdyBzZW5kcyBhbGwKICAgY29va2llcyBvbiBhIHNpbmdsZSBDb29raWU6IGxpbmUuIEN1cmwgaXMgbm90IHlldCBSRkMgMjEwOSBjb21wbGlhbnQsIGJ1dCBJCiAgIGRvdWJ0IHRoYXQgbWFueSBzZXJ2ZXJzIGRvIHVzZSB0aGF0IHN5bnRheCAoeWV0KS4KCiBEYW5pZWwgKDggU2VwdGVtYmVyIDE5OTkpCiAtIEr2cm4gaGVscGVkIG1lIG1ha2Ugc3VyZSBpdCBzdGlsbCBjb21waWxlcyBuaWNlbHkgd2l0aCBtaW5ndzMyIHVuZGVyIHdpbjMyLgoKIERhbmllbCAoNyBTZXB0ZW1iZXIgMTk5OSkKIC0gRlRQIHVwbG9hZCB0aHJvdWdoIHByb3h5IGlzIG5vdyB0dXJuZWQgaW50byBhIEhUVFAgUFVULiBSZXF1ZXN0ZWQgYnkKICAgU3RlZmFuIEthbnRoYWsgPFN0ZWZhbi5LYW50aGFrQG1jaHAuc2llbWVucy5kZT4uCgogLSBBZGRlZCB0aGUgbGRhcCBmaWxlcyB0byB0aGUgLm0zMiBtYWtlZmlsZS4KCiBEYW5pZWwgKDMgU2VwdGVtYmVyIDE5OTkpCiAtIE1hZGUgY29va2llIG1hdGNoaW5nIHdvcmsgd2hpbGUgdXNpbmcgSFRUUCBwcm94eS4KCiBCam9ybiBSZWVzZSA8YnJlZXNlQG1haWwxLnN0b2ZhbmV0LmRrPiAoMzEgQXVndXN0IDE5OTkpCiAtIFBhc3NlZCBoaXMgbGRhcDovLyBwYXRjaC4gTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgdGhlIG9wZW5sZGFwIHNoYXJlZAogICBsaWJyYXJ5IHRvIGJlIGluc3RhbGxlZCBhbmQgdGhhdCBMRF9MSUJSQVJZX1BBVEggcG9pbnRzIHRvIHRoZQogICBkaXJlY3Rvcnkgd2hlcmUgdGhlIGxpYiB3aWxsIGJlIGZvdW5kIHdoZW4gY3VybCBpcyBydW4gd2l0aCBhCiAgIGxkYXA6Ly8gVVJMLgoKIEr2cm4gSGFydHJvdGggPEpvZXJuLkhhcnRyb3RoQHRlbGVrb20uZGU+ICgzMSBBdWd1c3QgMTk5OSkKIC0gTWFkZSB0aGUgTWluZ3czMiBtYWtlZmlsZXMgaW50byBzaW5nbGUgZmlsZXMuCiAtIE1hZGUgZmlsZTovLyB3b3JrIGZvciBXaW4zMi4gVGhlIHNhbWUgY29kZSBpcyBub3cgdXNlZCBmb3IgdW5peCBhcyB3ZWxsIGZvcgogICBwZXJmb3JtYW5jZSByZWFzb25zLgoKIERvdWdsYXMgRS4gV2Vnc2NoZWlkIDx3ZWdzY2RAd2hpcmxwb29sLmNvbT4gKDMwIEF1Z3VzdCAxOTk5KQogLSBQYXRjaGVkIHRoZSBNaW5ndzMyIG1ha2VmaWxlcyBmb3IgU1NMIGJ1aWxkcy4KCiBNYXR0aGV3IENsYXJrZSA8Y2xhbWF0QHZhbi5tYXZlcy5jYT4gKDMwIEF1Z3VzdCAxOTk5KQogLSBNYWRlIGEgY29vbCBwYXRjaCBmb3IgY29uZmlndXJlLmluIHRvIGFsbG93IC0td2l0aC1zc2wgdG8gc3BlY2lmeSB0aGUKICAgcm9vdCBkaXIgb2YgdGhlIG9wZW5zc2wgaW5zdGFsbGF0aW9uLCBhcyBpbgoKICAgICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtc3NsPS91c3Ivc3NsX2hlcmUKCiAtIENvcnJlY3RlZCB0aGUgJ3JlY29uZicgc2NyaXB0IHRvIHdvcmsgYmV0dGVyIHdpdGggc29tZSBzaGVsbHMuCgogSvZybiBIYXJ0cm90aCA8Sm9lcm4uSGFydHJvdGhAdGVsZWtvbS5kZT4gKDI2IEF1Z3VzdCAxOTk5KQogLSBGaXhlZCB0aGUgTWluZ3czMiBtYWtlZmlsZXMgaW4gbGliLyBhbmQgY29ycmVjdGVkIHRoZSBmaWxlLmMgZm9yIHdpbjMyCiAgIGNvbXBpbGVzLgoKVmVyc2lvbiA1LjExCgogRGFuaWVsICgyNSBBdWd1c3QgMTk5OSkKIC0gSm9obiBXZWlzbWlsbGVyIDxqb2hud2Vpc0Bob21lLmNvbT4gcG9pbnRlZCBvdXQgYSBidWcgaW4gdGhlIGhlYWRlci1saW5lCiAgIHJlYWxsb2MoKSBzeXN0ZW0gaW4gZG93bmxvYWQuYy4KCiAtIEkgYWRkZWQgbGliL2ZpbGUuW2NoXSB0byBvZmZlciBhIGZpcnN0LCBzaW1wbGUsIGZpbGU6Ly8gc3VwcG9ydC4gSXQKICAgcHJvYmFibHkgd29uJ3QgZG8gbXVjaCBnb29kIG9uIHdpbjMyIHN5c3RlbSBhdCB0aGlzIHBvaW50LCBidXQgSSBzZWUgaXQKICAgYXMgYSBzdGFydC4KCiAtIE1hZGUgdGhlIHJlbGVhc2UgYXJjaGl2ZXMgZ2V0IGEgTWFrZWZpbGUgaW4gdGhlIHJvb3QgZGlyLCB3aGljaCBjYW4gYmUKICAgdXNlZCB0byBzdGFydCB0aGUgY29tcGlsaW5nL2J1aWxkaW5nIHByb2Nlc3MgZWFzaWVyLiBJIGhhdmVuJ3QgcmVhbGx5CiAgIGNoYW5nZWQgYW55IElOU1RBTEwgdGV4dCB5ZXQsIEkgd2FudGVkIHRvIGdldCBzb21lIGZlZWQtYmFjayBvbiB0aGlzCiAgIGZpcnN0LgoKIERhbmllbCAoMTcgQXVndXN0IDE5OTkpCiAtIEFub3RoZXIgTG9jYXRpb246IGJ1Zy4gQ3VybCBkaWRuJ3QgZG8gcHJvcGVyIHJlbGF0aXZlIGxvY2F0aW9ucyBpZiB0aGUKICAgb3JpZ2luYWwgVVJMIGhhZCBjZ2ktcGFyYW1ldGVycyB0aGF0IGNvbnRhaW5lZCBhIHNsYXNoLiBOdXN1J3MgcGFnZQogICBhZ2Fpbi4KCiAtIENvcnJlY3RlZCB0aGUgTk9fUFJPWFkgdXNhZ2UuIEl0IGlzIGEgbGlzdCBvZiBzdWJzdHJpbmdzIHRoYXQgaWYgb25lIG9mCiAgIHRoZW0gbWF0Y2hlcyB0aGUgdGFpbCBvZiB0aGUgaG9zdCBuYW1lIGl0IHNob3VsZCBjb25uZWN0IHRvLCBjdXJsIHNob3VsZAogICBub3QgdXNlIGEgcHJveHkgdG8gY29ubmVjdCB0aGVyZS4gUG9pbnRlZCBvdXQgdG8gbWUgYnkgRG91Z2xhcyBFLiBXZWdzY2hlaWQKICAgPHdlZ3NjZEB3aGlybHBvb2wuY29tPi4gSSBhbHNvIGNoYW5nZWQgdGhlIFJFQURNRSB0ZXh0IGEgbGl0dGxlIHJlZ2FyZGluZwogICB0aGlzLgoKIERhbmllbCAoMTYgQXVndXN0IDE5OTkpCiAtIEZpeGVkIGEgbWVtb3J5IGJ1ZyB3aXRoIGh0dHAtc2VydmVycyB0aGF0IHNlbnQgTG9jYXRpb246IHRvIGEgTG9jYXRpb246CiAgIHBhZ2UuIE51c3UncyBwYWdlIHNob3dlZCB0aGlzIHRvby4KCiAtIE1hZGUgY29va2llcyB3b3JrIGEgbG90IGJldHRlci4gU2V0dGluZyB0aGUgc2FtZSBjb29raWUgbmFtZSBzZXZlcmFsIHRpbWVzCiAgIHVzZWQgdG8gYWRkIG1vcmUgY29va2llcyBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGUgZm9ybWVyIG9uZSB3aGljaCBpdAogICBzaG91bGQndmUuIE51c3UgPG51c0BpbnRlcmdvcmoucm8+IGJyb3VnaHQgbWUgYW4gVVJMIHRoYXQgbWFkZSB0aGlzCiAgIHBhaW5mdWxseSB2aXNpYmxlLi4uCgogVHJveSAoMTUgQXVndXN0IDE5OTkpCiAtIEJyb3VnaHQgbmV3IC5zcGVjIGZpbGVzIGFzIHdlbGwgYXMgYSBwYXRjaCBmb3IgY29uZmlndXJlLmluIHRoYXQgbGV0cyB0aGUKICAgY29uZmlndXJlIHNjcmlwdCBmaW5kIHRoZSBvcGVuc3NsIGZpbGVzIGJldHRlciwgZXZlbiB3aGVuIHRoZSBpbmNsdWRlCiAgIGZpbGVzIGFyZSBpbiAvdXNyL2luY2x1ZGUvb3BlbnNzbAoKVmVyc2lvbiA1LjEwCgogRGFuaWVsICgxMyBBdWd1c3QgMTk5OSkKIC0gU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2IoKSBoYXMgYmVlbiBtb2RpZmllZCBpbiB0aGUgMC45LjQgdmVyc2lvbiBvZgogICBPcGVuU1NMLiBOb3cgd2h5IGNvdWxkbid0IHRoZXkgc2ltcGx5IGFkZCBhICpuZXcqIGZ1bmN0aW9uIGluc3RlYWQgb2YKICAgbW9kaWZ5aW5nIHRoZSBwYXJhbWV0ZXJzIG9mIGFuIGFscmVhZHkgZXhpc3RpbmcgZnVuY3Rpb24/IFRoaXMgd2F5LCB3ZSBnZXQKICAgYSBjb21waWxlciB3YXJuaW5nIGlmIGNvbXBpbGluZyB3aXRoIDAuOS40IGJ1dCBub3Qgd2l0aCBlYXJsaWVyLiBTbywgSSBoYWQKICAgdG8gY29tZSB1cCB3aXRoIGEgI2lmIGNvbnN0cnVjdGlvbiB0aGF0IGRlYWxzIHdpdGggdGhpcy4uLgoKIC0gTWFkZSBjdXJsIG91dHB1dCB0aGUgU1NMIHZlcnNpb24gbnVtYmVyIGdldCBkaXNwbGF5ZWQgcHJvcGVybHkgd2l0aCAwLjkuNC4KCiBUcm95ICgxMiBBdWd1c3QgMTk5OSkKIC0gQWRkZWQgTWluZ1czMiAoR0NDLTIuOTUpIHN1cHBvcnQgdW5kZXIgV2luMzIuIFRoZSBJTlNUQUxMIGZpbGUgd2FzIGFsc28KICAgYSBiaXQgcmVhcnJhbmdlZC4KIAogRGFuaWVsICgxMiBBdWd1c3QgMTk5OSkKIC0gSSBoYWQgdG8gY29weSBhIGdvb2QgPGFycGEvdGVsbmV0Lmg+IGluY2x1ZGUgZmlsZSBpbnRvIHRoZSBjdXJsIHNvdXJjZQogICB0cmVlIHRvIGVuYWJsZSB0aGUgc2lsbHkgd2luMzIgc3lzdGVtcyB0byBjb21waWxlLiBUaGUgZGlzdHJpYnV0aW9uIHJpZ2h0cwogICBhbGxvd3MgdXMgdG8gZG8gdGhhdCBhcyBsb25nIGFzIHRoZSBmaWxlIHJlbWFpbnMgdW5tb2RpZmllZC4KCiAtIEkgY29ycmVjdGVkIGEgZmV3IG1pbm9yIHRoaW5ncyB0aGF0IG1hZGUgdGhlIGNvbXBpbGVyIGNvbXBsYWluIHdoZW4KICAgLVdhbGwgLXBlZGFudGljIHdhcyB1c2VkLgoKIC0gSSdtIG1vdmluZyB0aGUgb2ZmaWNpYWwgY3VybCB3ZWIgcGFnZSB0byBodHRwOi8vY3VybC5oYXh4Lm51LiBJIHRoaW5rIGl0CiAgIHdpbGwgbWFrZSBpdCBlYXNpZXIgdG8gcmVtZW1iZXIgYXMgaXQgaXMgYSBsb3Qgc2hvcnRlciBhbmQgbGVzcyBjcnlwdGljLgogICBUaGUgb2xkIG9uZSBzdGlsbCB3b3JrcyBhbmQgc2hvd3MgdGhlIHNhbWUgaW5mby4KCiBEYW5pZWwgKDExIEF1Z3VzdCAxOTk5KQogLSBBbGJlcnQgQ2hpbi1BLVlvdW5nIG1haWxlZCBtZSBhbm90aGVyIGNvcnJlY3Rpb24gZm9yIE5ST0ZGIGluIHRoZQogICBjb25maWd1cmUuaW4gdGhhdCBpcyBzdXBwb3NlZCB0byBiZSBiZXR0ZXIgZm9yIElSSVggdXNlcnMuCgogRGFuaWVsICgxMCBBdWd1c3QgMTk5OSkKIC0gQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPiBoZWxwZWQgbWUgd2l0aCBzb21lIHN0dXBpZAogICBNYWtlZmlsZSB0aGluZ3MsIGFzIHdlbGwgYXMgc29tZSBmaWRkbGluZyB3aXRoIHRoZSBnZXRkYXRlLmMKICAgc3R1ZmYgdGhhdCBoZSBoYWQgcHJvYmxlbXMgd2l0aCB1bmRlciBIUC1VWCB2MTAuIGdldGRhdGUueSB3aWxsIG5vdyBiZQogICBjb21waWxlZCBpbnRvIGdldGRhdGUuYyBpZiB0aGUgYXBwcm9wcmlhdGUgeWFjYyBvciBiaXNvbiBpcyBmb3VuZCBieSB0aGUKICAgY29uZmlndXJlIHNjcmlwdC4gU2luY2UgdGhpcyBpcyBzbGlnaHRseSBuZXcsIHdlIG5lZWQgdG8gdGVzdCB0aGUgb3V0cHV0CiAgIGdldGRhdGUuYyB3aXRoIHdpbjMyIHN5c3RlbXMgdG8gbWFrZSBzdXJlIGl0IHN0aWxsIGNvbXBpbGVzIHRoZXJlLgoKIERhbmllbCAoNSBBdWd1c3QgMTk5OSkKIC0gSSd2ZSBqdXN0IHNldHVwIGEgbmV3IG1haWxpbmcgbGlzdCB3aXRoIHRoZSBpbnRlbnRpb24gdG8ga2VlcCBkaXNjdXNzaW9ucwogICBhcm91bmQgbGliY3VybCBkZXZlbG9wbWVudCBpbiBpdC4gSSBtYWlubHkgZXhwZWN0IGl0IHRvIGJlIGZvciB0aG91Z2h0cyBhbmQKICAgYnJhaW5zdG9ybWluZyBhcm91bmQgYSAibmV4dCBnZW5lcmF0aW9uIiBsaWJyYXJ5LCByYXRoZXIgdGhhbiBuaXRwaWNraW5nCiAgIGFib3V0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9yIGRldGFpbHMgaW4gdGhlIGN1cnJlbnQgbGliY3VybC4KCiAgIFRvIGpvaW4gb3VyIGhhcHB5IGJ1bmNoIG9mIGZ1dHVyZS1sb29raW5nIGdlZWtzLCBlbnRlciAnc3Vic2NyaWJlCiAgIDxhZGRyZXNzPicgaW4gdGhlIGJvZHkgb2YgYSBtYWlsIGFuZCBzZW5kIGl0IHRvCiAgIGxpYmN1cmwtcmVxdWVzdEBsaXN0c2Vydi5mdHMuZnJvbnRlYy5zZS4gIEN1cmwgYnVnIHJlcG9ydHMsIHRoZSB1c3VhbCBjdXJsCiAgIHRhbGsgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgc3RpbGwgYmUga2VwdCBpbiB0aGlzIG1haWxpbmcgbGlzdC4gSSd2ZQogICBzdGFydGVkIHRvIGFyY2hpdmUgdGhpcyBtYWlsaW5nIGxpc3QgYW5kIGhhdmUgcHV0IHRoZSBsaWJjdXJsIHdlYiBwYWdlIGF0CiAgIHd3dy5mdHMuZnJvbnRlYy5zZS9+ZGFzdC9saWJjdXJsLy4KCiAtIFN0ZWZhbiBLYW50aGFrIDxTdGVmYW4uS2FudGhha0BtY2hwLnNpZW1lbnMuZGU+IGNvbnRhY3RlZCBtZSByZWdhcmRpbmcgYQogICBmZXcgcHJvYmxlbXMgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd2hpY2ggaGUgZGlzY292ZXJlZCB3aGVuIHRyeWluZyB0bwogICBtYWtlIGN1cmwgY29tcGlsZSBhbmQgYnVpbGQgdW5kZXIgU2llbWVucyBTSU5JWC1aIFY1LjQyQjIwMDQhCgogLSBNYXJjdXMgS2xlaW4gPG0ua2xlaW5AaW4tb2xwZS5kZT4gdmVyeSBhY2N1cmF0ZWx5IGluZm9ybWVkIG1lIHRoYXQKICAgc3JjL3ZlcnNpb24uaCB3YXMgbm90IHByZXNlbnQgaW4gdGhlIENWUyByZXBvc2l0b3J5LiBPaCwgaG93IHNpbGx5Li4uCgogLSBMaW51cyBOaWVsc2VuIDxMaW51cy5OaWVsc2VuQHN0aC5mcm9udGVjLnNlPiByZXdyb3RlIHRoZSB0ZWxuZXQ6Ly8gcGFydCBhbmQKICAgbm93IGN1cmwgb2ZmZXJzIGxpbWl0ZWQgdGVsbmV0IHN1cHBvcnQuIElmIHlvdSBydW4gY3VybCBsaWtlICdjdXJsCiAgIHRlbG5ldDovL2hvc3QnIHlvdSdsbCBnZXQgYWxsIG91dHB1dCBvbiB0aGUgc2NyZWVuIGFuZCBjdXJsIHdpbGwgcmVhZCBpbnB1dAogICBmcm9tIHN0ZGluLiBZb3UnbGwgYmUgYWJsZSB0byBsb2dpbiBhbmQgcnVuIGNvbW1hbmRzIGV0YywgYnV0IHNpbmNlIHRoZQogICBvdXRwdXQgaXMgYnVmZmVyZWQsIGV4cGVjdCB0byBnZXQgYSBsaXR0bGUgd2VpcmQgb3V0cHV0LgoKICAgVGhpcyBpcyBzdGlsbCBpbiBpdHMgaW5mYW5jeSBhbmQgaXQgbWlnaHQgZ2V0IGNoYW5nZWQuIFdlIG5lZWQgeW91cgogICBmZWVkLWJhY2sgYW5kIGlucHV0IGluIGhvdyB0aGlzIGlzIGJlc3QgZG9uZS4KCiAgIFdJTjMyIE5PVEU6IEkgYmV0IHdlJ2xsIGdldCBwcm9ibGVtcyB3aGVuIHRyeWluZyB0byBjb21waWxlIHRoZSBjdXJyZW50CiAgIGxpYi90ZWxuZXQuYyBvbiB3aW4zMiwgYnV0IEkgdGhpbmsgd2UgY2FuIHNvcnQgdGhlbSBvdXQgaW4gdGltZS4KCiAtIERhdmlkIFNhbmRlcnNvbiA8ZGF2aWRAdHJhbnNhcmMuY29tPiByZXBvcnRlZCB0aGF0IEZPUkNFX0FMTE9DQV9IIG9yCiAgIEhBVkVfQUxMT0NBX0ggbXVzdCBiZSBkZWZpbmVkIGZvciBnZXRkYXRlLmMgdG8gY29tcGlsZSBwcm9wZXJseSBvbiBIUC1VWAogICAxMS4wLiBJIHVwZGF0ZWQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gY2hlY2sgZm9yIGFsbG9jYS5oIHdoaWNoIHNob3VsZAogICBtYWtlIGl0LgoKIERhbmllbCAoNCBBdWd1c3QgMTk5OSkKIC0gSSBmaW5hbGx5IGdvdCB0byB1bmRlcnN0YW5kIE1hcmN1cyBLbGVpbidzIGZ0cCBkb3dubG9hZCByZXN1bWUgcHJvYmxlbSwKICAgd2hpY2ggdHVybnMgb3V0IHRvIGJlIGR1ZSB0byBkaWZmZXJlbnQgb3V0cHV0cyBmcm9tIGRpZmZlcmVudCBmdHAKICAgc2VydmVycy4gSXQgbWFrZXMgZnRwIGRvd25sb2FkIHJlc3VtaW5nIGEgbGl0dGxlIHRyaWNraWVyLCBidXQgSSd2ZSBtYWRlCiAgIHNvbWUgbW9kaWZpY2F0aW9ucyBJIHJlYWxseSBiZWxpZXZlIHdpbGwgd29yayBmb3IgbW9zdCBmdHAgc2VydmVycyBhbmQgSSBkbwogICBob3BlIHlvdSByZXBvcnQgaWYgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCB0aGlzIQoKIC0gQWRkZWQgdGV4dCBhYm91dCBmaWxlIHRyYW5zZmVyIHJlc3VtaW5nIHRvIFJFQURNRS5jdXJsLgoKIERhbmllbCAoMiBBdWd1c3QgMTk5OSkKIC0gQXBwbGllZCBhIHByb2dyZXNzLWJhciBwYXRjaCBmcm9tIExhcnMgSi4gQWFzIDxsYXJzYUBzaW0ubm8+LiBJdCBvZmZlcnMKICAgYSBuZXcgc3R5bGVkIHByb2dyZXNzIGJhciBlbmFibGVkIHdpdGggLSMvLS1wcm9ncmVzcy1iYXIuIAoKIFQuIFlhbWFkYSA8dGFpQGltYXN5Lm9yLmpwPiAoMzAgSnVseSAxOTk5KQogLSBJdCBicmVha3Mgd2l0aCBzZWdmYXVsdCB3aGVuIDEpIGN1cmwgaXMgdXNpbmcgLm5ldHJjIHRvIG9idGFpbgogICB1c2VybmFtZS9wYXNzd29yZCAob3B0aW9uICctbicpLCBhbmQgMikgaXMgYXV0b21hdGljYWxseSByZWRpcmVjdGVkIHRvCiAgIGFub3RoZXIgbG9jYXRpb24gKG9wdGlvbiAnLUwnKS4KCiAgIFRoZXJlIGlzIGEgc21hbGwgYnVnIGluIGxpYi91cmwuYyAoYmxvY2sgc3RhcnRpbmcgZnJvbSBsaW5lIDY0MSksIHdoaWNoCiAgIHRyaWVzIHRvIHRha2Ugb3V0IHVzZXJuYW1lL3Bhc3N3b3JkIGZyb20gdXNlci0gc3VwcGxpZWQgY29tbWFuZC1saW5lCiAgIGFyZ3VtZW50ICgnLXUnIG9wdGlvbikuIFRoaXMgYmxvY2sgaXMgbmV2ZXIgZXhlY3V0ZWQgb24gZmlyc3QgYXR0ZW1wdCBzaW5jZQogICBDT05GX1VTRVJQV0QgYml0IGlzbid0IHNldCBhdCBmaXJzdCwgYnV0IGN1cmwgbGF0ZXIgdHVybnMgaXQgb24gd2hlbiBpdAogICBjaGVja3MgZm9yIENPTkZfTkVUUkMgYml0LiBTbyB3aGVuIGN1cmwgdHJpZXMgdG8gcmVkbyBldmVyeXRoaW5nIGR1ZSB0bwogICByZWRpcmVjdGlvbiwgaXQgc2VnZmF1bHRzIHRyeWluZyB0byBhY2Nlc3MgKmRhdGEtPnVzZXJwd2QuCgpWZXJzaW9uIDUuOS4xCgogRGFuaWVsICgzMCBKdWx5IDE5OTkpCiAtIFN0ZXZlIFdhbGNoIDxzd2FsY2hAY2lzb2Z0LmNvbT4gcG9pbnRlZCBvdXQgdGhhdCB0aGVyZSBpcyBhIG1lbW9yeSBsZWFrIGluCiAgIHRoZSBmb3JtZGF0YSBmdW5jdGlvbnMuIEkgYWRkZWQgYSBGb3JtRnJlZSgpIGZ1bmN0aW9uIHRoYXQgaXMgbm93IHVzZWQgYW5kCiAgIHN1cHBvc2VkIHRvIGNvcnJlY3QgdGhpcyBmbGF3LgoKIC0gTWFyayBXb3R0b24gPG13b3R0b25AYmxhY2sudWcuY3MudXN5ZC5lZHUuYXU+IHJlcG9ydGVkOgogICAnY3VybCAtTCBodHRwczovL3d3dy5jd2EuY29tLmF1LycgY29yZSBkdW1wcy4gIEkgbWFuYWdlZCB0byBjdXJlIHRoaXMgYnkKICAgY29ycmVjdGluZyB0aGUgY2xlYW51cCBwcm9jZWR1cmUuIFRoZSBidWcgc2VlbXMgdG8gYmUgZ29uZSB3aXRoIG15IE9wZW5TU0wKICAgMC45LjJiLCBhbHRob3VnaCBzdGlsbCBvY2N1cnMgd2hlbiBJIHJ1biB0aGUgfjEwMCB5ZWFycyBvbGQgU1NMZWF5IDAuOC4wLiBJCiAgIGRvbid0IGtub3cgd2hldGhlciBpdCBpcyBjdXJsIG9yIFNTTGVheSB0aGF0IGlzIHRvIGJsYW1lIGZvciB0aGF0LgoKIC0gTWFyY3VzIEtsZWluIDxtLmtsZWluQGluLW9scGUuZGU+OgogICBSZXBvcnRlZCBhbiBGVFAgdXBsb2FkIHJlc3VtZSBidWcgdGhhdCBJIHJlYWxseSBjYW4ndCByZXBlYXQgbm9yIHVuZGVyc3RhbmQuCiAgIEkgbGVhdmUgaXQgaGVyZSBzbyB0aGF0IGl0IHdvbid0IGJlIGZvcmdvdHRlbi4KCiBEYW5pZWwgKDI5IEp1bHkgMTk5OSkKIC0gQ29zdHlhIFNodWx5dXBpbiA8Y29zdHlhQHRyaXZuZXQuY29tPiBzdWdnZXN0ZWQgc3VwcG9ydCBmb3IgbG9uZ2VyIFVSTHMKICAgd2hlbiBmb2xsb3dpbmcgTG9jYXRpb246IGFuZCBJIGNvdWxkIG9ubHkgYWdyZWUgYW5kIGZpeCBpdCEKCiAtIExlaWdoIFB1cmRpZSA8bGVpZ2hwQGRlZmNlbi5nb3YuYXU+IGZvdW5kIGEgcHJvYmxlbSBpbiB0aGUgdXBsb2FkL1BPU1QKICAgZGVwYXJ0bWVudC4gSXQgdHVybmVkIG91dCB0aGF0IGh0dHAuYyBhY2NpZGVudGFseSBjbGVhcmVkIHRoZSBwb2ludGVyCiAgIGluc3RlYWQgb2YgdGhlIGJ5dGUgY291bnRlciB3aGVuIHN1cHBvc2VkIHRvLgoKIC0gQ29zdHlhIFNodWx5dXBpbiA8Y29zdHlhQHRyaXZuZXQuY29tPiBwb2ludGVkIG91dCBhIHByb2JsZW0gd2l0aCBwb3J0CiAgIG51bWJlcnMgYW5kIExvY2F0aW9uOi4gSWYgeW91IGhhZCBhIHNlcnZlciBhdCBhIG5vbi1zdGFuZGFyZCBwb3J0IHRoYXQKICAgcmVkaXJlY3RlZCB0byBhbiBVUkwgdXNpbmcgYSBzdGFuZGFyZCBwb3J0IG51bWJlciwgY3VybCBzdGlsbCB1c2VkIHRoYXQKICAgZmlyc3QgcG9ydCBudW1iZXIuCgogLSBSYWxwaCBCZWNrbWFubiA8cmFiZUB1bmktcGFkZXJib3JuLmRlPiBwb2ludGVkIG91dCBhIHByb2JsZW0gd2hlbiB1c2luZyBib3RoCiAgIENPTkZfRk9MTE9XTE9DQVRJT04gYW5kIENPTkZfRkFJTE9ORVJST1Igc2ltdWx0YW5lb3VzbHkuIFNpbmNlIHRoZQogICBDT05GX0ZBSUxPTkVSUk9SIGV4aXRzIG9uIHRoZSAzMDItY29kZSB0aGF0IHRoZSBmb2xsb3cgbG9jYXRpb24gaGVhZGVyCiAgIG91dHB1dHMgaXQgd2lsbCBuZXZlciBzaG93IGFueSBodG1sIG9uIGxvY2F0aW9uOiBwYWdlcy4gSSBoYXZlIG5vdyBtYWRlIGl0CiAgIGxvb2sgZm9yID49NDAwIGNvZGVzIGlmIENPTkZfRk9MTE9XTE9DQVRJT04gaXMgc2V0LgoKIC0gJ3N0cnVjdCBzbGlzdCcgaXMgbm93IHJlbmFtZWQgdG8gJ3N0cnVjdCBjdXJsX3NsaXN0JyAoYXMgc3VnZ2VzdGVkIGJ5IFJhbHBoCiAgIEJlY2ttYW5uKS4KCiAtIEpvc2h1YSBTd2luayA8anBzd2lua0Bob3RtYWlsLmNvbT4gYW5kIFJpY2sgV2VseWtvY2h5IDxyaWNrQHByYXhpcy5jb20uYXU+CiAgIHdlcmUgdGhlIGZpcnN0IHRvIHBvaW50IG91dCB0byBtZSB0aGF0IHRoZSBsYXRlc3QgT3BlblNTTCBwYWNrYWdlIG5vdyBoYXZlCiAgIG1vdmVkIHRoZSBzdGFuZGFyZCBpbmNsdWRlIHBhdGguIEl0IGlzIG5vdyBpbgogICAvdXNyL2xvY2FsL3NzbC9pbmNsdWRlL29wZW5zc2wgYW5kIEkgaGF2ZSBub3cgbW9kaWZpZWQgdGhlIC0tZW5hYmxlLXNzbAogICBvcHRpb24gZm9yIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSB0aGF0IGFzIHRoZSBwcmltYXJ5IHBhdGgsIGFuZCBJCiAgIGxlYXZlIHRoZSBmb3JtZXIgcGF0aCB0b28gdG8gd29yayB3aXRoIG9sZGVyIHBhY2thZ2VzIG9mIE9wZW5TU0wgdG9vLgoKIERhbmllbCAoOSBKdW5lIDE5OTkpCiAtIEkgZmluYWxseSB1bmRlcnN0b29kIHRoZSBJUklYIHByb2JsZW0gYW5kIG5vdyBpdCBzZWVtIHRvIGNvbXBpbGUgb24gaXQhCiAgIEkgYW0gZ29ubmEgcmVtb3ZlIHRob3NlICNkZWZpbmUgc3RyY2FzZWNtcCgpIHRoaW5ncyBvbmNlIGFuZCBmb3IgYWxsIG5vdy4KCiBEYW5pZWwgKDQgSnVuZSAxOTk5KQogLSBJIGFkanVzdGVkIHRoZSBGVFAgcmVwbHkgMjI3IHBhcnNlciB0byBtYWtlIHRoZSBQQVNWIGNvbW1hbmQgd29yayBiZXR0ZXIKICAgd2l0aCBtb3JlIGZ0cCBzZXJ2ZXJzLiBBcHBlYXJhbnRseSB0aGUgUm94ZW4gQ2hhbGxhbmdlciBzZXJ2ZXIgcmVwbGllZAogICBzb21ldGhpbmcgY3VybCA1LjkgY291bGQgZGVhbCB3aXRoISA6LSggUmVwb3J0ZWQgYnkgQXNobGV5IFJlaWQtTW9udGFuYXJvCiAgIDxhc2hsZXlAY29tcHNvYy5tYW4uYWMudWs+IGFuZCBNYXJrIEJ1dGxlciA8YnV0bGVybUB4bWlzc2lvbi5jb20+IGJyb3VnaHQgYQogICBzb2x1dGlvbiBmb3IgaXQuCgogRGFuaWVsICgyNiBNYXkgMTk5OSkKIC0gUmVhcnJhbmdlZC4gUkVBRE1FIGlzIG5ldywgdGhlIG9sZCBvbmUgaXMgbm93IFJFQURNRS5jdXJsIGFuZCBJIGFkZGVkIGEKICAgUkVBRE1FLmxpYmN1cmwgd2l0aCB0ZXh0IEkgZ290IGZyb20gUmFscGggQmVja21hbm4gPHJhYmVAdW5pLXBhZGVyYm9ybi5kZT4uCgogLSBJIGFsc28gdXBkYXRlZCB0aGUgSU5TVEFMTCB0ZXh0LgoKIERhbmllbCAoMjUgTWF5IDE5OTkpCiAtIERhdmlkIEpvbmF0aGFuIExvd3NreSA8ZGxvd3NreUBsZWxhbmQuc3RhbmZvcmQuZWR1PiBjb3JyZWN0bHkgcG9pbnRlZCBvdXQKICAgdGhhdCBjdXJsIGRpZG4ndCBwcm9wZXJseSBkZWFsIHdpdGggZm9ybSBwb3N0aW5nIHdoZXJlIHRoZSB2YXJpYWJsZSAKICAgc2hvdWxkbid0IGhhdmUgYW55IGNvbnRlbnQsIGFzIGluIGN1cmwgLUYgImZvcm09IiB3d3cuc2l0ZS5jb20uIEl0IHdhcwogICBub3cgZml4ZWQuCgpWZXJzaW9uIDUuOQoKIERhbmllbCAoMjIgTWF5IDE5OTkpCiAtIEkndmUgZ290IGEgYnVnIHJlcG9ydCBmcm9tIEFhcm9uIFNjYXJpc2JyaWNrIDxhYXJvbnNjYUBob3RtYWlsLmNvbT4gaW4KICAgd2hpY2ggaGUgc3RhdGVzIGhlIGhhcyBzb21lIHByb2JsZW1zIHdpdGggLUwgdW5kZXIgRnJlZUJTRCAzLjAuIEkgaGF2ZQogICBwcmV2aW91c2x5IGdvdCBhbm90aGVyIGJ1ZyByZXBvcnQgZnJvbSBTdGVmYW4gR3JldGhlcgogICA8c3RlZmFuLmdyZXRoZXJAdWJzLmNvbT4gd2hpY2ggcG9pbnRzIGF0IGFuIGVycm9yIHdpdGggc2ltaWxhciBzeW1wdGhvbXMKICAgd2hlbiB1c2luZyB3aW4zMi4gSSBtYWRlIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBuZXcgdXJsIHN0cmluZyBhIGJpdCBmYXN0ZXIKICAgYW5kIGRpZmZlcmVudCwgZG9uJ3Qga25vdyBpZiBpdCBhY3R1YWxseSBpbXByb3ZlcyBhbnl0aGluZyB0aG91Z2guLi4KCiBEYW5pZWwgKDIwIE1heSAxOTk5KQogLSBNYWRlIHRoZSBjb29raWUgcGFyc2VyIGRlYWwgd2l0aCBDUkxGIG5ld2xpbmVzIHRvby4KCiBEYW5pZWwgKDE5IE1heSAxOTk5KQogLSBEb3dubG9hZCgpIGRpZG4ndCBwcm9wZXJseSBkZWFsIHdpdGggZmFpbGluZyByZXR1cm4gY29kZXMgZnJvbSB0aGUKICAgc3JlYWQoKSBmdW5jdGlvbi4gQWRhbSBDb3luZSA8YWRhbUBnYW1lc3B5LmNvbT4gZm91bmQgdGhlIHByb2JsZW0gaW4gdGhlCiAgIHdpbjMyIHZlcnNpb24sIGFuZCBUcm95IEVuZ2VsIGhlbHBlZCBtZSBvdXQgaXNvbGF0aW5nIGl0LgoKIERhbmllbCAoMTYgTWF5IDE5OTkpCiAtIFJpY2hhcmQgQWRhbXMgPFJpY2hhcmRAU2xheWZvcmQuY29tPiBwb2ludGVkIG91dCBhIGJ1ZyBJIGludHJvZHVjZWQgaW4KICAgNS44LiAtLWR1bXAtaGVhZGVyIGRvZXNuJ3Qgd29yayBhbnltb3JlISA6LS8gSSBmaXhlZCBpdCBub3cuCgogLSBBZnRlciBhIHN1Z2dlc3Rpb24gYnkgSm9zaHVhIFN3aW5rIDxqcHN3aW5rQGhvdG1haWwuY29tPiBJIGFkZGVkIC1TIC8KICAgLS1zaG93LWVycm9yIHRvIGZvcmNlIGN1cmwgdG8gZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIGFuCiAgIGVycm9yLCBldmVuIGlmIC1zLy0tc2lsZW50IHdhcyB1c2VkLgoKIERhbmllbCAoMTAgTWF5IDE5OTkpCiAtIEkgbW92ZWQgdGhlIHN0dWZmIGNvbmNlcm5pbmcgSFRUUCwgRElDVCBhbmQgVEVMTkVUIGl0IHRoZWlyIG93biBzb3VyY2UKICAgZmlsZXMgbm93LiBJdCBpcyBhIGJlZ2lubmluZyBvbiBteSBjbGVhbi11cCBvZiB0aGUgc291cmNlcyB0byBtYWtlIHRoZW0KICAgbGF5ZXIgYWxsIHRob3NlIHByb3RvY29scyBiZXR0ZXIgdG8gZW5hYmxlIG1vcmUgdG8gYmUgYWRkZWQgZWFzaWVyIGluIHRoZQogICBmdXR1cmUhCgogLSBMZW9uIEJyZWVkdCA8bGpiQGRlYmlhbi5vcmc+IHNlbnQgbWUgc29tZSBmaWxlcyBJJ3ZlIG5vdCBwdXQgaW50byB0aGUgbWFpbgogICBjdXJsIGFyY2hpdmUuIFRoZXkncmUgZm9yIGNyZWF0aW5nIHRoZSBEZWJpYW4gcGFja2FnZSB0aGluZ2llLiBIZSBhbHNvIHNlbnQKICAgbWUgYSBkZWJpYW4gcGFja2FnZSB0aGF0IEkndmUgbWFkZSBhdmFpbGFibGUgZm9yIGRvd25sb2FkIGF0IHRoZSB3ZWIgcGFnZQoKIERhbmllbCAoOSBNYXkgMTk5OSkKIC0gTWFkZSBpdCBjb21waWxlIG9uIGN5Z3dpbiB0b28uCgogVHJveSBFbmdlbCAoNyBNYXkgMTk5OSkKIC0gQnJvdWdodCBhIHNlcmllcyBvZiBwYXRjaGVzIHRvIGFsbG93IGN1cmwgdG8gY29tcGlsZSBzbW9vdGhseSBvbiBNU1ZDKysgNgogICBhZ2FpbiEKCiBEYW5pZWwgKDYgTWF5IDE5OTkpCiAtIEkgY2hhbmdlZCB0aGUgI2lmZGVmIEhBVkVfU1RSRlRJTUUgcGxhY2VtZW50IGZvciB0aGUgLXogY29kZSBzbyB0aGF0IGl0CiAgIHdpbGwgYmUgZWFzaWVyIHRvIGRpc2NvdmVyIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIHRoYXQgZnVuY3Rpb24gYW5kIHRodXMKICAgY2FuJ3QgdXNlIC16IHN1Y2Nlc3NmdWxseS4gTWFkZSB0aGUgc3RyZnRpbWUoKSBnZXQgdXNlZCBpZiBXSU4zMiBpcyBkZWZpbmVkCiAgIHRvby4KClZlcnNpb24gNS44CgogRGFuaWVsICg1IE1heSAxOTk5KQogLSBJJ3ZlIGhhZCBpdCB3aXRoIHRoaXMgYXV0b2NvbmYvYXV0b21ha2UgbWVzcy4gSXQgc2VlbXMgdG8gd29yayBhbGxyaWdodAogICBmb3IgbW9zdCBwZW9wbGUgd2hvIGRvbid0IGhhdmUgYXV0b21ha2UgaW5zdGFsbGVkLCBidXQgZm9yIHRob3NlIHdobyBoYXZlCiAgIHRoZXJlIGFyZSBwcm9ibGVtcyBhbGwgb3Zlci4KCiAgIEkndmUgZ290IGxpa2UgZml2ZSBkaWZmZXJlbnQgYnVnIHJlcG9ydHMgb24gdGhpcyBvbmx5IHRoZSBsYXN0CiAgIHdlZWsuLi4gQ2xhdWRpbyBOZXZlcyA8Y2xhdWRpb0BuZXh0aXMuY29tPiBhbmQgRmVkZXJpY28gQmlhbmNoaQogICA8YmlhbmNoaUBwYy1hcnRlMi5hcnRlLnVuaXBpLml0PiBhbmQgcm9vdCA8ZHVnZ2VyajAwMUBoYXdhaWkucnIuY29tPiBhcmUKICAgc29tZSBvZiB0aGVtIHJlcG9ydGluZyB0aGlzLgoKICAgQ3VycmVudGx5LCBJIGhhdmUgbm8gcmVhbGx5IGdvb2QgZml4IHNpbmNlIEkgd2FudCB0byB1c2UgYXV0b21ha2UgbXlzZWxmIHRvCiAgIGdlbmVyYXRlIHRoZSBNYWtlZmlsZS5pbiBmaWxlcy4gSSd2ZSBmb3VuZCBvdXQgdGhhdCB0aGUgQFNIRUxMQC1wcm9ibGVtcwogICBjYW4gb2Z0ZW4gYmUgZml4ZWQgYnkgbWFudWFsbHkgaW52b2tpbmcgJ2F1dG9tYWtlJyBpbiB0aGUgYXJjaGl2ZSByb290CiAgIGJlZm9yZSB5b3UgcnVuIC4vY29uZmlndXJlLi4uIEkndmUgaGFja2VkIG15IG1ha2V0Z3ogc2NyaXB0IG5vdyB0byBmaWRkbGUKICAgYSBiaXQgd2l0aCB0aGlzIGFuZCBteSB0ZXN0cyBzZWVtIHRvIHdvcmsgYmV0dGVyIHRoYW4gYmVmb3JlIGF0IGxlYXN0IQoKIERhbmllbCAoNCBNYXkgMTk5OSkKIC0gbWtoZWxwLnBsIGhhcyBiZWVuIGRvaW5nIGJhZGx5IGxhdGVseS4gSSBjb3JyZWN0ZWQgYSBjYXNlIHByb2JsZW0gaW4KICAgdGhlIHJlZ2V4ZXMuCgogLSBJJ3ZlIG5vdyByZW1hZGUgdGhlIC1vIG9wdGlvbiB0byBub3QgdG91Y2ggdGhlIGZpbGUgdW5sZXNzIGl0IG5lZWRzIHRvLgogICBJIGhhZCB0byBkbyB0aGlzIHRvIG1ha2UgLXogb3B0aW9uIHJlYWxseSBmaW5lLCBzaW5jZSBub3cgeW91IGNhbiBtYWtlIGEKICAgY3VybCBmZXRjaCBhbmQgdXNlIGEgbG9jYWwgY29weSdzIHRpbWUgd2hlbiBkb3dubG9hZGluZyB0byB0aGF0IGZpbGUsIGFzCiAgIGluOgoKICAgICAgICBjdXJsIC16IGR1bXAgLW8gZHVtcCByZW1vdGUuc2l0ZS5jb20vZmlsZS5odG1sCgogICBUaGlzIHdpbGwgb25seSBnZXQgdGhlIGZpbGUgaWYgdGhlIHJlbW90ZSBvbmUgaXMgbmV3ZXIgdGhhbiB0aGUgbG9jYWwuCiAgIEknbSBhd2FyZSB0aGF0IHRoaXMgYWx0ZXJzIHByZXZpb3VzIGJlaGF2aW91ciBhIGxpdHRsZS4gU29tZSBzY3JpcHRzIG91dAogICB0aGVyZSBtYXkgZGVwZW5kIG9uIHRoYXQgdGhlIGZpbGUgaXMgYWx3YXlzIHRvdWNoZWQuLi4KCiAtIENvcnJlY3RlZCBhIGJ1ZyBpbiB0aGUgU1NMdjIvdjMgc2VsZWN0aW9uLgoKIC0gRmVsaXggdm9uIExlaXRuZXIgPGxlaXRuZXJAbWF0aC5mdS1iZXJsaW4uZGU+IHJlcXVlc3RlZCB0aGF0IGN1cmwgc2hvdWxkCiAgIGJlIGFibGUgdG8gc2VuZCAiSWYtTW9kaWZpZWQtU2luY2UiIGhlYWRlcnMsIHdoaWNoIGluZGVlZCBpcyBhIGZhaXIgaWRlYS4KICAgSSBpbXBsZW1lbnRlZCBpdCByaWdodCBhd2F5ISBUcnkgLXogPGV4cHJlc3Npb24+IHdoZXJlIGV4cHJlc3Npb24gaXMgYSBmdWxsCiAgIEdOVSBkYXRlIGV4cHJlc3Npb24gb3IgYSBmaWxlIG5hbWUgdG8gZ2V0IHRoZSBkYXRlIGZyb20hCgogU3RlcGhhbiBMYWdlcmhvbG0gPHN0ZXBoYW5AdW5pbG9nLnNlPiAoMzAgQXByIDE5OTkpCiAtIFBvaW50ZWQgb3V0IGEgcHJvYmxlbSB3aXRoIHRoZSBzcmMvTWFrZWZpbGUgZm9yIEZyZWVCU0QuIFRoZSBSTSB2YXJpYWJsZQogICBpc24ndCBzZXQgYW5kIGNhdXNlcyB0aGUgbWFrZSB0byBmYWlsLgoKIERhbmllbCAoMjYgQXByaWwgMTk5OSkKIC0gQW0gSSBzaWxseSBvciB3aGF0PyA8SXJ2aW5nX1dvbGZlQHdvbGZlLm5ldD4gcG9pbnRlZCBvdXQgdG8gbWUgdGhhdCB0aGUKICAgY3VybCB2ZXJzaW9uIG51bWJlciB3YXMgbm90IHNldCBwcm9wZXJseS4gSGFzbid0IGJlZW4gc2luY2UgNS42LiBUaGlzIHdhcwogICBkdWUgdG8gYSBidWcgaW4gbXkgbWFrZXRneiBzY3JpcHQhCgogRGF2aWQgRXJpa3Nzb24gPGRhdmlkQDJnb29kLmNvbT4gKDI1IEFwciAxOTk5KQogLSBGb3VuZCBhIGJ1ZyBpbiBjb29raWVzLmMgdGhhdCBtYWRlIGl0IGNyYXNoIGF0IHRpbWVzLgoKVmVyc2lvbiA1LjcuMQoKIERvdWcgS2F1Zm1hbiA8ZGthdWZtYW5AcmFodWwubmV0PiAoMjMgQXByIDE5OTkpCiAtIEJyb3VnaHQgdHdvIHN1bm9zIDQgZml4ZXMuIE9uZSBvZiB0aGVtIGJlaW5nIHRoZSBob3N0aXAuYyBmaXggbWVudGlvbmVkCiAgIGJlbG93IGFuZCB0aGUgb3RoZXIgb25lIGEgY29ycmVjdGlvbiBpbiBpbmNsdWRlL3N0ZGNoZWFkZXJzLmgKCiAtIEFkZGVkIGEgcGFyYWdyYXBoIGFib3V0IGNvbXBpbGluZyB3aXRoIHRoZSBVUy12ZXJzaW9uIG9mIG9wZW5zc2wgdG8gdGhlCiAgIElOU1RBTEwgZmlsZS4KCiBEYW5pZWwKIC0gTmV3IG1haWxpbmcgbGlzdCBhZGRyZXNzLiBJbmZvIHVwZGF0ZWQgb24gdGhlIHdlYiBwYWdlIGFzIHdlbGwgYXMgaW4gdGhlCiAgIFJFQURNRSBmaWxlCgogR3JlZyBPbnVmZXIgPEdyZWcuT251ZmVyQEVuZy5TdW4uQ09NPiAoMjAgQXByIDE5OTkpCiAtIGhvc3RpcC5jIGRpZG4ndCBjb21waWxlIHByb3Blcmx5IG9uIFN1bk9TIDUuNS4xLgogICBJdCBuZWVkcyBhbiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CgpWZXJzaW9uIDUuNwoKIERhbmllbCAoQXByIDIwIDE5OTkpCiAtIERlY2lkZWQgdG8gdXBsb2FkIGEgbm9uLWJldGEgdmVyc2lvbiByaWdodCBub3chCgogLSBNYWRlIGN1cmwgc3VwcG9ydCBhbnktbGVuZ3RoIEhUVFAgaGVhZGVycy4gVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBpcyBub3cKICAgc2ltcGx5IGVubGFyZ2VkIGV2ZXJ5IHRpbWUgaXQgdHVybnMgb3V0IHRvIGJlIHRvbyBzbWFsbCEKCiAtIEFkZGVkIHRoZSBGQVEgZmlsZSB0byB0aGUgYXJjaGl2ZS4gU3RpbGwgYSBiaXQgc21hbGxpc2gsIGJ1dCBpdCBpcyBhCiAgIHN0YXJ0LgoKIEVyaWMgVGhlbGluIDxlcmljQGdlbmVyYXRpb24taS5jb20+ICgxNSBBcHIgMTk5OSkKIC0gTWFkZSAtRCBhY2NlcHQgJy0nIGluc3RlYWQgb2YgZmlsZW5hbWUgdG8gd3JpdGUgdG8gc3Rkb3V0LgoKVmVyc2lvbiA1LjYuM2JldGEKCiBEYW5pZWwgKEFwciAxMiAxOTk5KQoKIC0gQ2hhbmdlZCB0d28gI2lmZGVmIFdJTjMyIHRvIGJldHRlciAjaWZkZWYgPGVycm9yY29kZT4gd2hlbiBjb25uZWN0KClpbmcKICAgaW4gdXJsLmMgYW5kIGZ0cC5jLiBNYWtlcyBjeWd3aW4zMiBkZWFsIHdpdGggdGhlbSBiZXR0ZXIgdG9vLiBXZSBzaG91bGQKICAgdHJ5IHRvIGdldCBzb21lIGRlY2VudCB3aW4zMi1yZXBsYWNlbWVudCB0aGVyZS4gQW55b25lPwoKIC0gVGhlIG9sZCAtMy8tLWNybGYgb3B0aW9uIGlzIG5vdyBPTkxZIC0tY3JsZiEKCiAtIEkgY2hhbmdlZCB0aGUgIlNTTCBmaXgiIHRvIGEgbW9yZSBsYW1lIG9uZSwgYnV0IHRoYXQgZG9lc24ndCByZW1vdmUgYXMKICAgbXVjaCBmdW5jdGlvbmFsaXR5LiBOb3cgSSd2ZSBlbmFibGVkIHRoZSBsaWIgdG8gc2VsZWN0IHdoYXQgU1NMIHZlcnNpb24gaXQKICAgc2hvdWxkIHRyeSBmaXJzdC4gQXBwZWFyYW50bHkgc29tZSBvbGRlciBTU0wtc2VydmVycyBkb24ndCBsaWtlIHdoZW4geW91CiAgIHRhbGsgdjMgd2l0aCB0aGVtIHNvIHlvdSBuZWVkIHRvIGJlIGFibGUgdG8gZm9yY2UgY3VybCB0byB0YWxrIHYyIGZyb20gdGhlCiAgIHN0YXJ0LiBUaGUgZml4IGRhdGVkIEFwcmlsIDYgYW5kIHBvc3RlZCBvbiB0aGUgbWFpbGluZyBsaXN0IGZvcmNlZCBjdXJsIHRvCiAgIHVzZSB2MiBhdCBhbGwgdGltZXMgdXNpbmcgYSBtb2Rlcm4gT3BlblNTTCB2ZXJzaW9uLCBidXQgd2UgZG9uJ3QgcmVhbGx5CiAgIHdhbnQgc3VjaCBhIGNyaXBwbGVkIHNvbHV0aW9uLgogCiAtIE1hcmMgQm91Y2hlciA8bWFyY0BtYnNpLmNhPiBzZW50IG1lIGEgcGF0Y2ggdGhhdCBjb3JyZWN0ZWQgYSBtYXRoIGVycm9yCiAgIGZvciB0aGUgIkN1cnIuU3BlZWQiIHByb2dyZXNzIG1ldGVyLgoKIC0gRXJpYyBUaGVsaW4gPGVyaWNAZ2VuZXJhdGlvbi1pLmNvbT4gc2VudCBtZSBhIHBhdGNoIHRoYXQgZW5hYmxlcyAnLUsgLScKICAgdG8gcmVhZCBhIGNvbmZpZyBmaWxlIGZyb20gc3RkaW4uCgogLSBJIGZvdW5kIG91dCB3ZSBkaWRuJ3QgY2xvc2UgdGhlIGZpbGUgcHJvcGVybHkgYmVmb3JlIHNvIEkgYWRkZWQgaXQhCgogRGFuaWVsIChBcHIgOSAxOTk5KQogLSBZdSBYaW4gPGlzQGlzZWUuemEubmV0PiBwb2ludGVkIG91dCBhIHByb2JsZW0gd2l0aCBmdHAgZG93bmxvYWQgcmVzdW1lLgogICBJdCBkaWRuJ3Qgd29yayBhdCBhbGwhIDstTwoKIERhbmllbCAoQXByIDYgMTk5OSkKIC0gQ29ycmVjdGVkIHRoZSB2ZXJzaW9uIHN0cmluZyBwYXJ0IGdlbmVyYXRlZCBmb3IgdGhlIFNTTCB2ZXJzaW9uLgoKIC0gSSBmb3VuZCBhIHdheSB0byBtYWtlIHNvbWUgb3RoZXIgU1NMIHBhZ2Ugd29yayB3aXRoIG9wZW5zc2wgMC45LjErIHRoYXQKICAgcHJldmlvdXNseSBkaWRuJ3QgKHNzbGVheSAwLjguMCB3b3JrcyB3aXRoIGl0IHRob3VnaCEpLiBUcnlpbmcgdG8gZ2V0CiAgIHNvbWUgcmVhbCBpbmZvIGZyb20gdGhlIE9wZW5TU0wgZ3V5cyB0byBzZWUgaG93IEkgc2hvdWxkIGRvIHRvIGJlaGF2ZSB0aGUKICAgYmVzdCB3YXkuIFNTTGVheSAwLjguMCBzaG91bGRuJ3QgYmUgdGhhdCBtdWNoIGluIHVzZSBhbnl3YXkgdGhlc2UgZGF5cyEKClZlcnNpb24gNS42LjJiZXRhCgogRGFuaWVsIChBcHIgNCAxOTk5KQogLSBGaW5hbGx5IGhhdmUgY3VybCBtb3JlIGNvb2tpZSAiYXdhcmUiLiBOb3cgcmVhZCBjYXJlZnVsbHkuIFRoaXMgaXMgaG93CiAgIGl0IHdvcmtzLgogICBUbyBtYWtlIGN1cmwgcmVhZCBjb29raWVzIGZyb20gYW4gYWxyZWFkeSBleGlzdGluZyBmaWxlLCBpbiBwbGFpbiBoZWFkZXItCiAgIGZvcm1hdCAobGlrZSBmcm9tIHRoZSBoZWFkZXJzIG9mIGEgcHJldmlvdXMgZmV0Y2gpIGludm9rZSBjdXJsIHdpdGggdGhlCiAgIC1iIGZsYWcgbGlrZToKCiAgICAgICAgY3VybCAtYiBmaWxlIGh0dHA6Ly9zaXRlL2Zvby5odG1sCgogICBDdXJsIHdpbGwgdGhlbiB1c2UgYWxsIGNvb2tpZXMgaXQgZmluZHMgbWF0Y2hpbmcuIFRoZSBvbGQgc3R5bGUgdGhhdCBzZXRzCiAgIGEgc2luZ2xlIGNvb2tpZSB3aXRoIC1iIGlzIHN0aWxsIHN1cHBvcnRlZCBhbmQgaXMgdXNlZCBpZiB0aGUgc3RyaW5nCiAgIGZvbGxvd2luZyAtYiBpbmNsdWRlcyBhICc9JyBsZXR0ZXIsIGFzIGluICItYiBuYW1lPWRhbmllbCIuCgogICBUbyBtYWtlIGN1cmwgcmVhZCB0aGUgY29va2llcyBzZW50IGluIGNvbWJpbmF0aW9uIHdpdGggYSBsb2NhdGlvbjogKHdoaWNoCiAgIHNpdGVzIG9mdGVuIGRvKSBwb2ludCBjdXJsIHRvIHJlYWQgYSBub24tZXhpc3RpbmcgZmlsZSBhdCBmaXJzdCAoaS5lCiAgIHRvIHN0YXJ0IHdpdGggbm8gZXhpc3RpbmcgY29va2llcyksIGxpa2U6CgogICAgICAgIGN1cmwgLWIgbm93aGVyZSBodHRwOi8vc2l0ZS9zZXRjb29raWVhbmRyZWxvY2F0ZS5odG1sCgogLSBBZGRlZCBhIHBhcmFncmFwaCBpbiB0aGUgVE9ETyBmaWxlIGFib3V0IHRoZSBTU0wgcHJvYmxlbXMgcmVjZW50bHkKICAgcmVwb3J0ZWQuIEV2aWRlbnRseSwgc29tZSBraW5kIG9mIFNTTC1wcm9ibGVtIGN1cmwgbWF5IG5lZWQgdG8gYWRkcmVzcy4KCiAtIEJldHRlciAiTG9jYXRpb246IiBmb2xsb3dpbmcuCgogRG91Z2xhcyBFLiBXZWdzY2hlaWQgPHdlZ3NjZEB3aGlybHBvb2wuY29tPiAoVHVlLCAzMCBNYXIgMTk5OSkKIC0gQSBzdWJzZWNvbmQgZGlzcGxheSBwYXRjaC4KCiBEYW5pZWwgKE1hciAxNCAxOTk5KQogLSBJJ3ZlIHNlcGFyYXRlZCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgbGliY3VybCBhbmQgY3VybCBub3cuIFRvIG1ha2UKICAgdGhpbmdzIGEgbGl0dGxlIGVhc2llciwgSSBkZWNpZGVkIHRvIHN0YXJ0IHRoZSBjdXJsIG51bWJlcmluZyBmcm9tCiAgIDUuNiBhbmQgdGhlIGZvcm1lciB2ZXJzaW9uIG51bWJlciBrbm93biBhcyAiY3VybCIgaXMgbm93IHRoZSBvbmUKICAgc2V0IGZvciBsaWJjdXJsLgoKIC0gUmVtb3ZlZCB0aGUgJ2VuYWJsZS1uby1wYXNzJyBmcm9tIGNvbmZpZ3VyZSwgSSBkb3VidCBhbnlvbmUgd2FudGVkCiAgIHRoYXQuCgogLSBNYWRlIGxvdHMgb2YgdGlueSBhZGp1c3RtZW50cyB0byBjb21waWxlIHNtb290aGx5IHdpdGggY3lnd2luIHVuZGVyCiAgIHdpbjMyLiBJdCdzIGEga2lsbGVyIGZvciBwb3J0aW5nIHRoaXMgdG8gd2luMzIsIGJ5ZSBieWUgVkMrKyEgOy0pCiAgIENvbXBpbGVzIGFuZCBidWlsZHMgb3V0LW9mLXRoZS1ib3ggbm93LiBTZWUgdGhlIG5ldyB3b3JkaW5ncyBpbgogICBJTlNUQUxMIGZvciBkZXRhaWxzLgoKIC0gQmVnaW5uaW5nIGV4cGVyaW1lbnRzIHdpdGggZG93bmxvYWRpbmcgbXVsdGlwbGUgZG9jdW1lbnQgZnJvbSBhIGh0dHAKICAgc2VydmVyIHdoaWxlIHJlbWFpbmluZyBjb25uZWN0ZWQuCgpWZXJzaW9uIDUuNmJldGEKCiBEYW5pZWwgKE1hciAxMyAxOTk5KQogLSBTaW5jZSBJJ3ZlIGNoYW5nZWQgc28gbXVjaCwgSSB0aG91Z2h0IEknZCBqdXN0IGdvIGFoZWFkIGFuZCBpbXBsZW1lbnQKICAgdGhlIHN1Z2dlc3Rpb24gZnJvbSBEb3VnbGFzIEUuIFdlZ3NjaGVpZCA8d2Vnc2NkQHdoaXJscG9vbC5jb20+LiAtRCBvcgogICAtLWR1bXAtaGVhZGVyIGlzIG5vdyBzdG9yaW5nIEhUVFAgaGVhZGVycyBzZXBhcmF0ZWx5IGluIHRoZSBzcGVjaWZpZWQKICAgZmlsZS4KCiAtIEFkZGVkIG5ldyB0ZXh0IHRvIElOU1RBTEwgb24gd2hhdCB0byBkbyB0byBidWlsZCB0aGlzIG9uIHdpbjMyIG5vdy4KCiAtIEFhYXJnaC4gSSBoYWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgcHJlZml4IHRoZSBzaGFyZWQgI2luY2x1ZGUgZmlsZXMKICAgaW4gdGhlIHNvdXJjZXMgd2l0aCAiLi4vaW5jbHVkZS8iIHRvIHBsZWFzZSBWQysrLi4uCgogRGFuaWVsIChNYXIgMTIgMTk5OSkKIC0gU3BsaXQgdGhlIHVybC5jIHNvdXJjZSBpbnRvIG1hbnkgdGlueSBzb3VyY2VzIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkKICAgYW5kIHNtYWxsZXIgc2l6ZS4KCiBEYW5pZWwgKE1hciAxMSAxOTk5KQogLSBTdGFydGVkIHRvIGNoYW5nZSBzdHVmZiBmb3IgYSBtb3ZlIHRvIG1ha2UgbGliY3VybCBhbmQgYSBtb3JlIHNlcGFyYXRlCiAgIGN1cmwgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBsaWJjdXJsLiBNYWRlIHRoZSBsaWJjdXJsIHNvdXJjZXMgaW50bwogICB0aGUgbmV3IGxpYiBkaXJlY3Rvcnkgd2hpbGUgdGhlIGN1cmwgYXBwbGljYXRpb24gd2lsbCByZW1haW4gaW4gc3JjIGFzCiAgIGJlZm9yZS4gTmV3IG1ha2VmaWxlcywgYWRqdXN0ZWQgY29uZmlndXJlIHNjcmlwdCBhbmQgc28uCgogICBsaWJjdXJsLmEgYnVpbHQgcXVpY2tseSBhbmQgZWFzaWx5LiBJIGJldHRlciBtYWtlIGEgYmV0dGVyIGludGVyZmFjZSB0bwogICB0aGUgbGliIGZ1bmN0aW9ucyB0aG91Z2guCgogICBUaGUgbmV3IHJvb3QgZGlyIGluY2x1ZGUvIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4gdGhlIHB1YmxpYyBpbmZvcm1hdGlvbgogICBhYm91dCB0aGUgbmV3IGxpYmN1cmwuIEl0IGlzIGEgbGl0dGxlIHVnbHkgc28gZmFyIDotKQoKCiBEYW5pZWwgKE1hciAxIDE5OTkpCiAtIFRvZGQgS2F1Zm1hbm4gPHRrYXVmbWFubkBhZGZvcmNlLmNvbT4gc2VudCBtZSBhIGdvb2QgbGluayB0byBOZXRzY2FwZSdzCiAgIGNvb2tpZSBzcGVjIGFzIHdlbGwgYXMgdGhlIGluZm8gdGhhdCBSRkMgMjEwOSBzcGVjaWZpZXMgaG93IHRvIHVzZSB0aGVtLgogICBUaGUgbGluayBpcyBub3cgaW4gdGhlIFJFQURNRSBhbmQgdGhlIFJGQyBpbiB0aGUgUkVTT1VSQ0VTLgoKIERhbmllbCAoRmViIDIzIDE5OTkpCiAtIEZpbmFsbHkgbWFkZSBjb25maWd1cmUgYWNjZXB0IC0td2l0aC1zc2wgdG8gbG9vayBmb3IgU1NMIGxpYnMgYW5kIGluY2x1ZGVzCiAgIGluIHRoZSAic3RhbmRhcmQiIHBsYWNlIC91c3IvbG9jYWwvc3NsLi4uCgogRGFuaWVsIChGZWIgMjIgMTk5OSkKIC0gVmVyaWZpZWQgdGhhdCBjdXJsIGxpbmtlZCBmaW5lIHdpdGggT3BlblNTTCAwLjkuMWMgd2hpY2ggc2VlbXMgdG8gYmUKICAgdGhlIG1vc3QgcmVjZW50LgoKIEhlbnJpIEdvbWV6IDxnb21lekBzbGliLmZyPiAoRnJpIEZlYiAgNSAxOTk5KQogLSBTZW50IGluIGFuIHVwZGF0ZWQgY3VybC1zc2wuc3BlYy4gSSBzdGlsbCBtaXNzIHRoZSBzY3JpcHQgdGhhdCBidWlsZHMgYW4KICAgUlBNIGF1dG9tYXRpY2FsbHkuLi4KClZlcnNpb24gNS41LjEKCiBNYXJrIEJ1dGxlciA8YnV0bGVybUB4bWlzc2lvbi5jb20+ICgyNyBKYW4gMTk5OSkKIC0gQ29ycmVjdGVkIHByb2JsZW1zIGluIERvd25sb2FkKCkuCgogRGFuaXRlbCBTdGVuYmVyZyAoMjUgSmFuIDE5OTkpCiAtIEplcmVtaWUgUGV0aXQgPEplcmVtaWUuUGV0aXRARGlnaXRhbC5jb20+IHBvaW50ZWQgb3V0IGEgZmV3IGZsYXdzIGluIHRoZQogICBzb3VyY2UgdGhhdCBwcmV2ZW50ZWQgaXQgZnJvbSBjb21waWxlIHdhcm5pbmcgZnJlZSB3aXRoIHRoZSBuYXRpdmUKICAgY29tcGlsZXIgdW5kZXIgRGlnaXRhbCBVbml4IHY0LjBkLgoKVmVyc2lvbiA1LjUKCiBEYW5pZWwgU3RlbmJlcmcgKDE1IEphbiAxOTk5KQogLSBBZGRlZCBCam9ybnMgc21hbGwgdGV4dCB0byB0aGUgUkVBRE1FIGFib3V0IHRoZSBESUNUIHByb3RvY29sLgoKIERhbmllbCBTdGVuYmVyZyAoMTEgSmFuIDE5OTkpCiAtIDxqc3dpbmtAc29mdGNvbS5uZXQ+IHJlcG9ydGVkIGFib3V0IHRoZSB3aW4zMi12ZXJzaW9pbjogIkRvZXNuJ3QgdXNlCiAgIEFMTF9QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZSIuIFR1cm5lZCBvdXQgdG8gYmUgYmVjYXVzZSBvZiB0aGUgc3RhdGljLQogICBidWZmZXIgbmF0dXJlIG9mIHRoZSB3aW4zMiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxscyEKCiBCam9ybiBSZWVzZSA8YnJlZXNlQGltYWRhLm91LmRrPiAoMTAgSmFuIDE5OTkpCiAtIEkgaGF2ZSBhdHRhY2hlZCBhIHNpbXBsZSBhZGRpdGlvbiBmb3IgdGhlIERJQ1QgcHJvdG9jb2wgKFJGQyAyMjI5KS4KICAgSXQgcGVyZm9ybXMgZGljdGlvbmFyeSBsb29rdXBzLiBUaGUgb3V0cHV0IHN0aWxsIG5lZWRzIHRvIGJlIGJldHRlcgogICBmb3JtYXR0ZWQuCgogICBUbyB0ZXN0IGl0IHRyeSAodGhlIGV4YWN0IGZvcm1hdCwgYW5kIG1vcmUgZXhhbXBsZXMgYXJlIGRlc2NyaWJlZCBpbgogICB0aGUgUkZDKQoKICAgICAgICBkaWN0Oi8vZGljdC5vcmcvbTpoZWxsbwogICAgICAgIGRpY3Q6Ly9kaWN0Lm9yZy9tOmhlbGxvOjpzb3VuZGV4CgoKIFZpY2VudGUgR2FyY2lhIDx2ZXJvdEByZWRlc3RiLmVzPiAoMTAgSmFuIDE5OTkpCiAtIENvcnJlY3RlZCB0aGUgcHJvZ3Jlc3MgbWV0ZXIgZm9yIGZpbGVzIGxhcmdlciB0aGFuIDIwTUIuCgogRGFuaWVsIFN0ZW5iZXJnICg3IEphbiAxOTk5KQogLSBDb3JyZWN0ZWQgdGhlIC10IGFuZCAtVCBoZWxwIHRleHRzLiBUaGV5IGNsYWltZWQgdG8gYmUgRlRQIG9ubHkuCgpWZXJzaW9uIDUuNAoKIERhbmllbCBTdGVuYmVyZwogKDcgSmFuIDE5OTkpCiAtIDxJcnZpbmdfV29sZmVAV29sZmUuTmV0PiByZXBvcnRlZCB0aGF0IGN1cmwgLXMgZGlkbid0IGFsd2F5cyBzdXByZXNzIHRoZQogICBwcm9ncmVzcyByZXBvcnRpbmcuIEl0IHdhcyB0aGUgZm9ybSBwb3N0IHRoYXQgYXV0b2FtdGljYWxseSBhbHdheXMgc3dpdGNoZWQKICAgaXQgb24gYWdhaW4uIFRoaXMgaXMgbm93IGNvcnJlY3RlZCEKCiAoNCBKYW4gMTk5OSkKIC0gQW5kcmVhcyBLb3N0eXJrYSA8YW5kcmVhc0BtdGcuY28uYXQ+IHN1Z2dlc3RlZCBJJ2QgYWRkIFBVVCBhbmQgaGUgaGVscGVkIG1lCiAgIG91dCB0byB0ZXN0IGl0LiBJZiB5b3UgdXNlIC10IG9yIC1UIG5vdyBvbiBhIGh0dHAgb3IgaHR0cHMgc2VydmVyLCBQVVQgd2lsbAogICBiZSB1c2VkIGZvciBmaWxlIHVwbG9hZC4KCiAgIEkgcmVtb3ZlZCB0aGUgZm9ybWVyIHVzZSBvZiAtVCB3aXRoIEhUVFAuIEkgZG91YnQgYW55b25lIGV2ZXIgcmVhbGx5IHVzZWQKICAgdGhhdC4KCiAoNCBKYW4gMTk5OSkKIC0gRXJpayBKYWNvYnNlbiA8ZXJpa0BtaW50LmNvbT4gZm91bmQgYSB3aWR0aCBidWcgaW4gdGhlIG1wcmludGYoKSBmdW5jdGlvbi4KICAgSSBjb3JyZWN0ZWQgaXQgbm93LgoKICg0IEphbiAxOTk5KQogLSBBcyBKb2huIFYuIENob3cgPGpvaG5jaG93QGJyb29rbGluZXRlY2guY29tPiBwb2ludGVkIG91dCB0byBtZSwgY3VybAogICBhY2NlcHRlZCB2ZXJ5IGxpbWl0ZWQgVVJMIHNpemVzLiBJdCBzaG91bGQgbm93IGFjY2VwdCBwYXRoIHBhcnRzIHRoYXQgYXJlCiAgIHVwIHRvIGF0IGxlYXN0IDQwOTYgYnl0ZXMuCgogLSBTb21laG93IEkgc2NyZXdlZCB1cCB3aGVuIGFwcGx5aW5nIHRoZSBBSVggZml4IGZyb20gR2lsYmVydCBSYW1pcmV6LCBzbwogICBJIHJlZGlkIHRoYXQgbm93LgoKVmVyc2lvbiA1LjNhICh3aW4zMiBvbmx5KQoKIFRyb3kgRW5nZWwKIC0gQ29ycmVjdGVkIGEgd2luMzIgYnVnIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBwYXJ0LgoKVmVyc2lvbiA1LjMKCiBHaWxiZXJ0IFJhbWlyZXogSnIuICgyMSBEZWMgMTk5OCkKIC0gSSBoYXZlIGltcGxlbWVudGVkIHRoZSAicXVvdGUiIGZ1bmN0aW9uIG9mIEZUUCBjbGllbnRzLiBJdCBhbGxvd3MgeW91IHRvCiAgIHNlbmQgYXJiaXRyYXJ5IGNvbW1hbmRzIHRvIHRoZSByZW1vdGUgRlRQIHNlcnZlci4gSSBjaG9zZSB0aGUgLVEvLS1xdW90ZQogICBjb21tYW5kLWxpbmUgYXJndW1lbnRzLgoKICAgWW91IGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgcXVvdGVkIHN0cmluZywgYW5kIGN1cmwgd2lsbCBhcHBseSB0aGVtIGluCiAgIG9yZGVyLiAgVGhpcyBpcyB3aGF0IEkgdXNlIGZvciBteSBNVlMgdXBsb2FkOgoKICBjdXJsIC1CIC0tY3JsZiAtUSAic2l0ZSBscmVjbD04MCIgLVEgInNpdGUgYmxrPTgwMDAiIC1UIGZpbGUgZnRwOi8vb3MzOTAvdGVzdAoKICAgQ3VybCB3aWxsIHNlbmQgdGhlIHR3byBxdW90ZWQgInNpdGUiIGNvbW1hbmRzIGluIHRoZSBwcm9wZXIgb3JkZXIuCgogLSBNYWRlIGl0IGNvbXBpbGUgc21vb3RobHkgb24gQUlYLgoKIEdpbGJlcnQgUmFtaXJleiBKci4gPGdyYW1AdmVyZGljdC51dGhzY3NhLmVkdT4gKDE4IERlYyAxOTk4KQogLSBCcm91Z2h0IGFuIE1WUyBwYXRjaDogLTMvLS1tdnMsIGZvciBmdHAgdXBsb2FkIHRvIHRoZSBNVlMgZnRwIHNlcnZlci4KCiBUcm95IEVuZ2VsIDx0ZW5nZWxAc29uaWMubmV0PiAoMTcgRGVjIDE5OTgpCiAtIEJyb3VnaHQgYSBjb3JyZWN0aW9uIHRoYXQgZml4ZXMgdGhlIHdpbjMyIGN1cmwgYnVnLgoKIERhbmllbCBTdGVuYmVyZwogLSBBIGJ1ZywgcG9pbnRlZCBvdXQgdG8gbWUgYnkgRHIgSC4gVC4gTGV1bmcgPGh0bDEwQGN1cy5jYW0uYWMudWs+LCBjYXVzZWQKICAgY3VybCB0byBjcmFzaCBvbiB0aGUgLUEgZmxhZyBvbiBjZXJ0YWluIHN5c3RlbXMuIEFjdHVhbGx5LCBhbGwgc3lzdGVtcwogICBzaG91bGQndmUhCgogLSBBZGRlZCBhIGZldyBkZWZpbmVzIHRvIG1ha2UgZGlyZWN0b3JpZXMvZmlsZSBuYW1lcyBnZXQgYnVpbGQgbmljZXIgKHdpdGggXwogICBpbnN0ZWFkIG9mIC4gYW5kIFwgaW5zdGVhZCBvZiAvIGluIHdpbjMyKS4KCiAtIHN0ZXZlIDxmaXNrQHBvbGFyLmJvd2RvaW4uZWR1PiByZXBvcnRlZCBhIHdlaXJkIGJ1ZyB0aGF0IG9jY3VyZWQgaWYgdGhlCiAgIGZ0cCBzZXJ2ZXIgcmVzcG9uc2UgbGluZSBoYWQgYSBwYXJlbnRoZXNpcyBvbiB0aGUgbGluZSBiZWZvcmUgdGhlIChzaXplKQogICBpbmZvLiBJIGhvcGUgaXQgd29ya3MgYmV0dGVyIG5vdyEKClZlcnNpb24gNS4yLjEKCiBTdGV2ZW4gRy4gSm9obnNvbiA8c3RldmVuakBhbHVtLm1pdC5lZHU+IChEZWMgMTQsIDE5OTgpCiAtIEJyb3VnaHQgYSBmaXggdGhhdCBjb3JyZWN0ZWQgYSBjcmFzaCBpbiA1LjIgZHVlIHRvIGJhZCB0cmVhdG1lbnQgb2YgdGhlCiAgIGVudmlyb25tZW50IHZhcmlhYmxlcy4KClZlcnNpb24gNS4yCgogRGFuaWVsIFN0ZW5iZXJnIChEZWMgMTQsIDE5OTgpCiAtIFJld3JvdGUgdGhlIG1raGVscCBzY3JpcHQgYW5kIG5vdywgdGhlIG1raGVscC5wbCBzY3JpcHQgZ2VuZXJhdGVzIHRoZQogICBodWdlaGVscC5jIGZpbGUgZnJvbSB0aGUgUkVBRE1FICphbmQqIHRoZSBtYW4gcGFnZSBmaWxlIGN1cmwuMS4gQnkgdXNpbmcKICAgYm90aCBmaWxlcywgSSBubyBsb25nZXIgbmVlZCB0byBoYXZlIGRvdWJsZSBpbmZvcm1hdGlvbiBpbiBib3RoIHRoZSBtYW4KICAgcGFnZSBhbmQgdGhlIFJFQURNRSBhcyB3ZWxsLiBTbywgd2luMzItdXNlcnMgd2lsbCBvbmx5IGhhdmUgdGhlIGh1Z2VoZWxwLmMKICAgZmlsZSBmb3IgYWxsIGluZm8sIGJ1dCB0aGVuLCB0aGV5IGRvd25sb2FkIHRoZSBwbGFpbiBiaW5hcnkgbW9zdCB0aW1lcwogICBhbnl3YXkuCgogLSBnY2MyLjguMSB3aXRoIHRoZSAtV2FsbCBmbGFnIGNvbXBsYWludHMgYSBsb3Qgb24gc3Vic2NyaXB0IGhhcyB0eXBlIGBjaGFyJwogICBpZiBJIGRvbid0IGV4cGxpY2l0bHkgdHlwZWNhc3QgdGhlIGFyZ3VtZW50IHRvIGlzZGlnaXQoKSBvciBpc3NwYWNlKCkgdG8KICAgaW50LiBTbyBJIGRpZCB0byBjb21waWxlIHdhcm5pbmcgZnJlZSB3aXRoIHRoYXQgdG9vLgoKIC0gQWRkZWQgY2hlY2tzIGZvciAnbG9uZyBkb3VibGUnIGFuZCAnbG9uZyBsb25nJyBpbiB0aGUgY29uZmlndXJlIHNjcmlwdC4gSQogICBuZWVkIHRob3NlIGZvciB0aGUgbXByaW50Zi5jIHNvdXJjZSB0byBjb21waWxlIHdlbGwgb24gbm9uIGxvbmcgbG9uZwogICBjb21mb3JtaW5nIHN5c3RlbXMhCgpWZXJzaW9uIDUuMSAobm90IHB1YmxpY2x5IHJlbGVhc2VkKQoKIERhbmllbCBTdGVuYmVyZyAoRGVjIDEwLCAxOTk4KQogLSBJIGdvdCBhIHJlcXVlc3QgZm9yIGEgcHJlLWNvbXBpbGVkIE5UIEFscGhhIHZlcnNpb24uIEFueW9uZT8KCiAtIEFkZGVkIEx5bngvQ0VSTiB3d3cgbGliIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlIHN1cHBvcnQuIFRoYXQgbWVhbnMgY3VybAogICBub3cgcmVhZHMgYW5kIHVuZGVyc3RhbmRzIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOgoKCUhUVFBfUFJPWFksIEhUVFBTX1BST1hZLCBGVFBfUFJPWFksIEdPUEhFUl9QUk9YWQoKICAgVGhleSBzaG91bGQgYmUgc2V0IGZvciBwcm90b2NvbC1zcGVjaWZpYyBwcm94aWVzLiBHZW5lcmFsIHByb3h5IHNob3VsZCBiZQogICBzZXQgd2l0aAoJCglBTExfUFJPWFkKCiAgIEFuZCBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGhvc3QgbmFtZXMgdGhhdCBzaG91bGRuJ3QgZ28gdGhyb3VnaCBhbnkKICAgcHJveHkgaXMgc2V0IGluIChvbmx5IGFuIGFzdGVyaXNrLCAnKicgbWF0Y2hlcyBhbGwgaG9zdHMpLgoKCU5PX1BST1hZCgogICBUaGUgdXNhZ2Ugb2YgdGhlIC14Ly0tcHJveHkgZmxhZyBvdmVycmlkZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KCiAtIFByb3h5IGNhbiBub3cgYmUgc3BlY2lmaWVkIHdpdGggYSBwcm9jb3RvbDovLyBwcmVmaXguCgogLSBXcm90ZSB0aGUgY3VybC4xIG1hbiBwYWdlLgoKIC0gSW50cm9kdWNlZCBhIHdob2xlIG5ldyBkeW5hbWljIGJ1ZmZlciBzeXN0ZW0gZm9yIGFsbCBzcHJpbnRmKClzLiBJdCBpcwogICBiYXNlZCBvbiB0aGUgKnByaW50ZigpIHBhY2thZ2UgYnkgeW91cnMgdHJ1bHkgYW5kIEJqb3JuIFJlZXNlLiBIb3BlZnVsbHksCiAgIHRoZXJlIGFyZW4ndCB0aGF0IG1hbnkgYnVmZmVyIG92ZXJmbG93IHJpc2tzIGxlZnQgbm93LgoKIC0gQWgsIEkgc2hvdWxkIG1lbnRpb24gSSd2ZSBjb21waWxlZCBhbmQgYnVpbHQgY3VybCBzdWNjZXNzZnVsbHkgdW5kZXIKICAgc29sYXJpcyAyLjYgd2l0aCBnY2Mgbm93LCBnY2MgMi43LjIgd29uJ3Qgd29yayBidXQgMi44LjEgZGlkIG9rLgoKIE9yZW4gVGlyb3NoIDxvcmVuQGhpc2hvbWUubmV0PiAoRGVjIDMsIDE5OTgpCiAtIEJyb3VnaHQgdHdvIC5zcGVjIGZpbGVzLCB0byB1c2Ugd2hlbiBjcmVhdGluZyAoTGludXgpIFJlZGhhdCBzdHlsZSBSUE0KICAgcGFja2FnZXMuIFRoZXkncmUgbmFtZWQgY3VybC5zcGVjIGFuZCBjdXJsLXNzbC5zcGVjLgoKIFRyb3kgRW5nZWwgPHRlbmdlbEBzb25pYy5uZXQ+CiAtIFN1cHBsaWVkIHRoZSBzcmMvTWFrZWZpbGUudmM2IGZvciBlYXN5IGNvbXBpbGluZyB3aXRoIFZDKysgdW5kZXIgV2luMzIuCgpWZXJzaW9uIDUuMAoKIERhbmllbCBTdGVuYmVyZyAoRGVjIDEsIDE5OTgpCiAtIE5vdCBhIHNpbmdsZSBidWcgcmVwb3J0IGluIGFnZXMuCiAtIENvcnJlY3RlZCBnZXRwYXNzLmMgYW5kIG1haW4uYyB0byBjb21waWxlIHdhcm5pbmcgYW5kIGVycm9yIGZyZWUgd2l0aCB0aGUKICAgV2luMzIgVkMrKyBjcmFwLgoKVmVyc2lvbiA1LjAgYmV0YSAyNAoKIERhbmllbCBTdGVuYmVyZyAoTm92IDIwLCAxOTk4KQoKIEhPVyBUTyBCVUlMRCBBIFJFTEVBU0UgQVJDSElWRToKCiAqIFByZS1yZXF1aXNpdGUgc29mdHdhcmU6CiAgIFdoYXQJCSAgICAgVG8gYnVpbGQgd2hhdCAgICAgICAgICAgICBSZWFkcyBkYXRhIGZyb20KICAgPT09PSAgICAgICAgICAgICAgPT09PT09PT09PT09PSAgICAgICAgICAgICA9PT09PT09PT09PT09PT0KICAgR05VIGF1dG9tYWtlICAgICAgTWFrZWZpbGUuaW4sIGFjbG9jYWwubTQgICBjb25maWd1cmUuaW4KICAgICBHTlUgbWFrZSgxKSAgICAgIC0gIiAtCiAgICAgR05VIGdjYygxKSAgICAgICAtICIgLQogICBHTlUgYXV0b2NvbmYgICAgICBjb25maWd1cmUgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZS5pbgogICBHTlUgYXV0b2hlYWRlcigyKSBjb25maWcuaC5pbgkgICAgICAgY29uZmlndXJlLmluLCBhY2NvbmZpZy5oCgogKiBNYWtlIHN1cmUgYWxsIGZpbGVzIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGFyY2hpdmUgYXJlIHB1dCBpbiBGSUxFUy4KCiAqIFJ1biAnLi9tYWtldGd6JyBhbmQgZW50ZXIgdmVyc2lvbiBudW1iZXIgb2YgdGhlIG5ldyB0byBiZWNvbWUgYXJjaGl2ZS4KCiAgIG1ha2V0Z3ogZG9lczoKCiAgIC0gRW50ZXJzIHRoZSBuZXdseSBjcmVhdGVkIHZlcnNpb24gbnVtYmVyIGluIHVybC5oLgogICAtIChJZiB5b3UgZG9uJ3QgaGF2ZSBhdXRvbWFrZSwgdGhpcyBzY3JpcHQgd2lsbCB3YXJuIGFib3V0IHRoYXQsIGJ1dCB1bmxlc3MKICAgICB5b3UgaGF2ZSBjaGFuZ2VkIHRoZSBNYWtlZmlsZS5hbSBmaWxlcywgdGhhdCBpcyBub3RoaW5nIHRvIGNhcmUgYWJvdXQuKQogICAgIElmIHlvdSBoYXZlIGl0LCBpdCdsbCBydW4gaXQuCiAgIC0gSWYgeW91IGhhdmUgYXV0b2NvbmYsIHRoZSBjb25maWd1cmUuaW4gd2lsbCBiZSBlZGl0ZWQgdG8gZ2V0IHRoZSBuZXdseQogICAgIGNyZWF0ZWQgdmVyc2lvbiBudW1iZXIgYW5kIGF1dG9jb25mIHdpbGwgYmUgcnVuLgogICAtIENyZWF0ZXMgYSBuZXcgZGlyZWN0b3J5IG5hbWVkIGN1cmwtPHZlcnNpb24+LiAoQWN0dWFsbHksIGl0IHVzZXMgdGhlIGJhc2UKICAgICBuYW1lIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB1cCB0byB0aGUgZmlyc3QgJy0nLikKICAgLSBDb3BpZXMgYWxsIGZpbGVzIG1lbnRpb25lZCBpbiBGSUxFUyB0byB0aGUgbmV3IGRpcmVjdG9yeS4gU2F2aW5nCiAgICAgcGVybWlzc2lvbnMgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCiAgIC0gVXNlcyB0YXIgdG8gY3JlYXRlIGFuIGFyY2hpdmUgb2YgaXQgYWxsLCBuYW1lZCBjdXJsLTx2ZXJzaW9uPi50YXIuZ3oKICAgLSBnemlwcyB0aGUgYXJjaGl2ZQogICAtIFJlbW92ZXMgdGhlIG5ldyBkaXJlY3RvcnkgYW5kIGFsbCBpdHMgY29udGVudHMuCgogKiBXaGVuIGRvbmUsIHlvdSBoYXZlIGFuIGFyY2hpdmUgc3RvcmVkIGluIHlvdXIgZGlyZWN0b3J5IG5hbWVkCiAgIGN1cmwtPHZlcnNpb24+LnRhci5nei4KCiAgIERvbmUhCgogICAoMSkgVGhleSdyZSByZXF1aXJlZCB0byBtYWtlIGF1dG9tYWtlIHJ1biBwcm9wZXJseS4KICAgKDIpIEl0IGlzIGRpc3RyaWJ1dGVkIGFzIGEgcGFydCBvZiB0aGUgR05VIGF1dG9jb25mIGFyY2hpdmUuCgogRGFuaWVsIFN0ZW5iZXJnIChOb3YgMTgsIDE5OTgpCiAtIEkgY2hhbmdlZCB0aGUgVEFHLXN5c3RlbS4gSWYgeW91IGV2ZXIgdXNlZCB1cmxnZXQoKSBmcm9tIHRoaXMgcGFja2FnZSBpbgogICBhbm90aGVyIHByb2R1Y3QsIHlvdSBuZWVkIHRvIHJlY29tcGlsZSB3aXRoIHRoZSBuZXcgaGVhZGVycy4gSSBkaWQgdGhpcwogICBuZXcgc3R1ZmYgdG8gYmV0dGVyIGRlYWwgd2l0aCBkaWZmZXJlbnQgY29tcGlsZXJzIGFuZCBzeXN0ZW0gd2l0aCBkaWZmZXJlbnQKICAgdmFyaWFibGUgc2l6ZXMuIEkgdGhpbmsgaXQgbWFrZXMgaXQgYSBsaXR0bGUgbW9yZSBwb3J0YWJsZS4gVGhpcyBwcm92ZXMKICAgdG8gY29tcGlsZSB3YXJuaW5nIGZyZWUgd2l0aCB0aGUgcHJvYmxlbWF0aWMgSVJJWCBjb21waWxlciEKIC0gV2luMzIgY29tcGlsZWQgd2l0aCBhIHNpbGx5IGVycm9yLiBDb3JyZWN0ZWQgbm93LgogLSBCcmlhbiBDaGFwbGluIDxiY2hhcGxpbkBjYXBpdGFsLW1rdHMuY29tPiByZXBvcnRlZCB5ZXQgYW5vdGhlciBwcm9ibGVtIGluCiAgIG11bHRpbGluZSBGVFAgcmVzcG9uc2VzLiBJJ3ZlIHRyaWVkIHRvIGNvcnJlY3QgaXQuIEkgbWFpbGVkIGhpbSBhIG5ldwogICB2ZXJzaW9uIGFuZCBJIGhvcGUgaGUgZ2V0cyBiYWNrIHNvb24gd2l0aCBwb3NpdGl2ZSBmZWVkYmFjayEKIC0gSW1wcm92ZWQgdGhlICdtYWtldGd6JyB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRyZWUgd2hpY2ggaXQgbWFrZXMKICAgYW4gYXJjaGl2ZSBmcm9tIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIHJlbmFtaW5nIG9mIHRoZSBjdXJyZW50IG9uZS4KIC0gTWFpbGluZyBsaXN0IG9wZW5lZCAoc2VlIFJFQURNRSkuCiAtIE1hZGUgLXYgbW9yZSB2ZXJib3NlIG9uIHRoZSBQQVNWIHNlY3Rpb24gb2YgZnRwIHRyYW5zZmVycy4gTm93IGl0IHRlbGxzCiAgIGhvc3QgbmFtZSBhbmQgSVAgb2YgdGhlIG5ldyBob3N0IChhbmQgcG9ydCBudW1iZXIpLiBJIGFsc28gYWRkZWQgYSBzZWN0aW9uCiAgIGFib3V0IFBPUlQgdnMgUEFTViBpbiB0aGUgUkVBRE1FLgoKVmVyc2lvbiA1LjAgYmV0YSAyMQoKIEFuZ3VzIE1hY2theSAoTm92IDE1LCAxOTk4KQogLSBJbnRyb2R1Y2VkIGF1dG9tYWtlIHN0dWZmLgoKIERhbmllbCBTdGVuYmVyZyAoTm92IDEzLCAxOTk4KQogLSBKdXN0IG1hZGUgYSBzdWNjZXNzZnVsIEdFVCBvZiBhIGRvY3VtZW50IGZyb20gYW4gU1NMLXNlcnZlciB1c2luZyBteSBvd24KICAgcHJpdmF0ZSBjZXJ0aWZpY2F0ZSBmb3IgYXV0aGVudGljYXRpb24hIFRoZSBjZXJ0aWZpY2F0ZSBoYXMgdG8gYmUgaW4gUEVNCiAgIGZvcm1hdC4gWW91IGRvIHRoYXQgdGhlIGVhc2llc3Qgd2F5IChhbHRob3VnaCBub3QgKnRoYXQqIGVhc3kpIGJ5CiAgIGRvd25sb2FkaW5nIHRoZSBTU0x5ZWF5IFBLQ1MjMTItcGF0Y2ggYnkgRHIgU3RlcGhlbiBOLiBIZW5zb24gZnJvbSBoaXMgc2l0ZQogICBhdDogaHR0cDovL3d3dy5kcmgtY29uc3VsdGFuY3kuZGVtb24uY28udWsvLiBVc2luZyBoaXMgdG9vbCwgeW91IGNhbgogICBjb252ZXJ0IGFueSBtb2Rlcm4gTmV0c2NhcGUgb3IgKGV2ZW4pIE1TSUUgY2VydGlmaWNhdGUgdG8gUEVNLWZvcm1hdC4gIFVzZQogICBpdCB3aXRoICdjdXJsIC1FIDxjZXJ0aWZpY2F0ZTpwYXNzd29yZD4gaHR0cHM6Ly9zaXRlLmNvbScuICBJZiB0aGlzIGlzbid0IGEKICAgY29vbCBmZWF0dXJlLCB0aGVuIEkgZG9uJ3Qga25vdyB3aGF0IGNvb2wgZmVhdHVyZXMgbG9vayBsaWtlISA7LSkKIC0gV29ya2luZyBzbG93bHkgb24gdGVsbmV0IGNvbm5lY3Rpb25zLiAjZGVmaW5lIFRSWV9URUxORVQgdG8gdHJ5IGl0IG91dC4KICAgKGN1cmwgLXUgdXNlcjpwYXNzd2QgInRlbG5ldDovL2hvc3QuY29tL2NhdCAubG9naW4iIGlzIG9uZSBleGFtcGxlKSBJIGRvCiAgIGhhdmUgcHJvYmxlbSB0byBkZWZpbmUgaG93IGl0IHNob3VsZCB3b3JrLiBUaGUgcHJpbWUgcHVycG9zZSBmb3IgdGhpcyBtdXN0CiAgIGJlIHRvIGdldCAoOGJpdCBjbGVhbikgZmlsZXMgdmlhIHRlbG5ldCwgYW5kIGl0IHJlYWxseSBpc24ndCB0aGF0IGVhc3kgdG8KICAgZ2V0IGZpbGVzIHRoaXMgd2F5LiBTdGlsbCBoYXZpbmcgcHJvYmxlbXMgd2l0aCBcbiBiZWluZyBjb252ZXJ0ZWQgdG8gXHJcbi4KCiBBbmd1cyBNYWNrYXkgKE5vdiAxMiwgMTk5OCkKIC0gQ29ycmVjdGVkIGFub3RoZXIgYnVnIGluIHRoZSBsb25nIHBhcmFtZXRlciBuYW1lIHBhcnNlci4KIC0gTW9kaWZpZWQgZ2V0cGFzcy5jIChOT1RFOiBzZWUgdGhlIHNwZWNpYWwgbGljZW5zaW5nIGluIHRoZSB0b3Agb2YgdGhhdAogICBzb3VyY2UgZmlsZSkuCgogRGFuaWVsIFN0ZW5iZXJnIChOb3YgMTIsIDE5OTgpCiAtIFdlIG1heSBoYXZlIHJlbW92ZWQgdGhlIHNpbGx5IHdhcm5pbmdzIGZyb20gdXJsLmMgd2hlbiBjb21waWxlZCB1bmRlciBJUklYLgogICBUaGFua3MgYWdhaW4gdG8gQmpvcm4gUmVlc2UgPGJyZWVzZUBpbWFkYS5vdS5kaz4gYW5kIE1hcnRpbiBTdGFhZWwKICAgPG1hcnRpbkBuZXRncm91cC5kaz4uCiAtIFdyb3RlIGZvcm1maW5kLnBsIHdoaWNoIGlzIGEgbmV3IHBlcmwgc2NyaXB0IGludGVuZGVkIHRvIGhlbHAgeW91IGZpbmQgb3V0CiAgIGhvdyBhIEZPUk0gc3VibWlzc2lvbiBzaG91bGQgYmUgZG9uZS4gVGhpcyBuZWVkcyBhIGxpdHRsZSBtb3JlIHdvcmsgdG8gZ2V0CiAgIHJlYWxseSBnb29kLgoKIERhbmllbCBTdGVuYmVyZyAoTm92IDExLCAxOTk4KQogLSBNYWRlIHRoZSBIVFRQIGhlYWRlci1jaGVja2VyIGFjY2VwdCB3aGl0ZSBzcGFjZXMgYmVmb3JlIHRoZSBIVFRQLzEuPyBsaW5lLgogICBBcHBlYXJhbnRseSBzb21lIHByb3hpZXMvc2l0ZXMgYWRkIHN1Y2ggYXQgdGltZXMgKG15IHRlc3QgcHJveHkgZGlkIHdoZW4gSQogICBkb3dubG9hZGVkIGEgZ29waGVyIHBhZ2Ugd2l0aCBpdCkhCiAtIE1vdmVkIHRoZSBmb3JtZXIgLWggdG8gLU0gYW5kIG1hZGUgLWggc2hvdyB0aGUgc2hvcnQgaGVscCB0ZXh0IGluc3RlYWQuIEkKICAgaGFkIHRvIGVuYWJsZSBhIGZvcmNlZCBoZWxwIHRleHQgb3B0aW9uLiBOb3cgYW4gZXZlbiBzaG9ydGVyIGhlbHAgdGV4dCB3aWxsCiAgIGJlIHByZXNlbnRlZCB3aGVuIGFuIHVua25vd24gb3B0aW9uIGFuZCBzaW1pbGFyLCBpcyB1c2VkLgogLSBzdGRjaGVhZGVycy5oIGRpZG4ndCB3b3JrIHdpdGggSVJJWCA2LjQgbmF0aXZlIGNjIGNvbXBpbGVyLiBJIGhvcGUgbXkKICAgY2hhbmdlcyBkb24ndCBtYWtlIG90aGVyIHZlcnNpb25zIGdvIG51dHMgaW5zdGVhZC4KCiBEYW5pZWwgU3RlbmJlcmcgKE5vdiAxMCwgMTk5OCkKIC0gQWRkZWQgYSB3ZWlyZCBjaGVjayBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCB0byBjaGVjayBmb3IgdGhlIHNpbGx5IEFJWAogICB3YXJuaW5ncyBhYm91dCBteSAjZGVmaW5lIHN0cmNhc2VjbXAoKSBzdHVmZi4gSSBkbyB0aGF0IGRlZmluZSB0byBwcmV2ZW50CiAgIG1lIGFuZCBvdGhlciBjb250cmlidXRvcnMgdG8gYWNjaWRlbnRhbHkgdXNlIHRoYXQgZnVuY3Rpb24gbmFtZSBpbnN0ZWFkCiAgIG9mIHN0cmVxdWFsKCkuLi4KIC0gSSBidWdmaXhlZCBBbmd1cydzIGdldHBhc3MuYyB2ZXJ5IGxpdHRsZS4KIC0gRml4ZWQgdGhlIHZlcmJvc2UgZmxhZyBuYW1lcyB0byBnZXRvcHQtc3R5bGUsIGkuZSAnY3VybCAtLWxvYycgd2lsbCBiZQogICBzdWZmaWNpZW50IGluc3RlYWQgb2YgLS1sb2NhdGlvbiBhcyAibG9jIiBpcyBhIHVuaXF1ZSBwcmVmaXguIEFsc28sIGFueXRoaW5nCiAgIGFmdGVyIGEgJy0tJyBpcyB0cmVhdGVkIGFzIGFuIFVSTC4gU28gaWYgeW91IGRvIGhhdmUgYSBob3N0IHdpdGggYSB3ZWVlaXJkCiAgIG5hbWUgeW91IGNhbiBkbyAnY3VybCAtLSAtaG9zdC5jb20nLgogLSBBbm90aGVyIGdldG9wdC1hZGp1c3Q7IGN1cmwgbm93IGFjY2VwdHMgZmxhZ3MgYWZ0ZXIgdGhlIFVSTCBvbiB0aGUgY29tbWFuZAogICBsaW5lLiAnY3VybCB3d3cuZm9vLmNvbSAtTycgaXMgcGVyZmVjdGx5IHZhbGlkLgogLSBDb3JyZWN0ZWQgdGhlIC5jdXJscmMgcGFyc2VyIHNvIHRoYXQgc3RydG9rKCkgaXMgbm8gbG9uZ2VyIHVzZWQgYW5kIEkKICAgYmVsaWV2ZSBpdCB3b3JrcyBiZXR0ZXIuIEV2ZW4gVVJMcyBjYW4gYmUgc3BlY2lmaWVkIGluIGl0IG5vdy4KCiBBbmd1cyBNYWNrYXkgKE5vdiA5LCAxOTk4KQogLSBSZXBsYWNlZCBnZXRwYXNzLmMgd2l0aCBhIG5ld2x5IHdyaXR0ZW4gb25lLCBub3QgdW5kZXIgR1BMIGxpY2Vuc2UKIC0gQ2hhbmdlZCBPUyB0byBhICNkZWZpbmUgaW4gY29uZmlnLmggaW5zdGVhZCBvZiBjb21waWxlciBmbGFnCiAtIE1ha2VmaWxlIG5vdyB1c2VzIC1ESEFWRV9DT05GSUdfSAoKIERhbmllbCBTdGVuYmVyZyAoTm92IDksIDE5OTgpCiAtIE9rLCBJIGV4cGFuZGVkIHRoZSB0Z3otdGFyZ2V0IHRvIHVwZGF0ZSB0aGUgdmVyc2lvbiBzdHJpbmcgb24gZWFjaCBvY2NhdGlvbgogICBJIGJ1aWxkIGEgcmVsZWFzZSBhcmNoaXZlIQogLSBJIHJlYWN0ZWQgb24gQW5ndXMgTWFja2F5J3MgaW5pdGlhdGl2ZSBhbmQgcmVtYWRlIHRoZSBwYXJhbWV0ZXIgcGFyc2VyIHRvCiAgIGJlIG1vcmUgZ2V0b3B0IGNvbXBsaWFudC4gQ3VybCBub3cgc3VwcG9ydHMgIm1lcmdlZCIgZmxhZ3MgYXMgaW4gCgljdXJsIC1sc3YgZnRwLnNpdGUuY29tCiAgIERvIG5vdGUgdGhhdCBJIGhhZCB0byBtb3ZlIHRocmVlIHNob3J0LW5hbWVzIG9mIHRoZSBvcHRpb25zLiBQYXJhbWV0ZXJzCiAgIHRoYXQgbmVlZHMgYW4gYWRkaXRpb25hbCBzdHJpbmcgc3VjaCBhcyAteCBtdXN0IGJlIHN0YW5kLWFsb25lIG9yIHRoZQogICBsYXN0IGluIGEgbWVyZ2VkIHNlcXVlbmNlOgoJY3VybCAtbHN4IG15LXByb3h5IGZ0cC5zaXRlLmNvbQogICBpcyBvaywgYnV0IHVzaW5nIHRoZSBmbGFncyBpbiBhIGRpZmZlcmVudCBvcmRlciBsaWtlICctbHhzJyB3b3VsZCBjYXVzZQogICB1bmV4cGVjdGVkIHJlc3VsdHMgKGFzIHRoZSAncycgb3B0aW9uIHdvdWxkIGJlIHNraXBwZWQpLgogLSBJJ3ZlIGNoYW5nZWQgdGhlIGhlYWRlcnMgaW4gYWxsIGZpbGVzIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIE1velBMCiAgIGxpY2Vuc2UsIGFzIHRoZXkgYXJlIHN1cHBvc2VkIHRvIGxvb2sgbGlrZSB3aGVuIGNvbmZvcm1pbmcuCiAtIE1hZGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgbWFrZSB0aGUgY29uZmlnLmguIFRoZSBmb3JtZXIgY29uZmlnLmggaXMgbm93CiAgIHNldHVwLmguCiAtIFRoZSBSRVNPVVJDRVMgYW5kIFRPRE8gZmlsZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBhcmNoaXZlLgoKIEFuZ3VzIE1hY2theSA8YW1hY2theUBndXMubWwub3JnPiAoTm92IDUsIDE5OTgpCiAtIEZpeGVkIGdldHBhc3MuYyBhbmQgdmFyaW91cyBjb25maWd1cmUgc3R1ZmYKCiBEYW5pZWwgU3RlbmJlcmcgKE5vdiAzLCAxOTk4KQogLSBVc2UgLUgvLS1oZWFkZXIgZm9yIGN1c3RvbSBIVFRQLWhlYWRlcnMuIExldHMgeW91IHBhc3Mgb24geW91ciBvd24KICAgc3BlY2lmaWVkIGhlYWRlcnMgdG8gdGhlIHJlbW90ZSBzZXJ2ZXIuIEkgd291bGRuJ3QgcmVjb21tZW5kIHRyeWluZyB0byB1c2UKICAgYSBoZWFkZXIgd2l0aCBhIGRlZmluZWQgdXNhZ2UgYWNjb3JkaW5nIHRvIHN0YW5kYXJkcy4gVXNlIHRoaXMgZmxhZyBvbmNlCiAgIGZvciBldmVyeSBjdXN0b20gaGVhZGVyIHlvdSB3YW50IHRvIGFkZC4KIC0gVXNlIC1CLy0tZnRwLWFzY2lpIHRvIGZvcmNlIGZ0cCB0byB1c2UgQVNDSUkgbW9kZSB3aGVuIHRyYW5zZmVyaW5nIGZpbGVzLgogLSBDb3JyZWN0ZWQgdGhlICdnZXRsaW5rcy5wbCcgc2NyaXB0LCBJIGFjY2lkZW50YWxseSBsZWZ0IG15IHNpbGx5IHByb3h5CiAgIHVzYWdlIGluIHRoZXJlISBTaW5jZSB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSAuY3VybHJjIGZpbGUsIGl0IGlzIGVhc2llciB0bwogICB3cml0ZSBzY3JpcHRzIHRoYXQgdXNlIGN1cmwgc2luY2UgcHJveGllcyBhbmQgc3R1ZmYgc2hvdWxkIGJlIGluIHRoZQogICAuY3VybHJjIGZpbGUgYW55d2F5LgogLSBJbnRyb2R1Y2luZyB0aGUgbmV3IC1GIGZsYWcgZm9yIEhUVFAgUE9TVC4gSXQgc3VwcG9ydHMgbXVsdGlwYXJ0L2Zvcm0tZGF0YQogICB3aGljaCBtZWFucyBpdCBpcyBnb25uYSBiZSBwb3NzaWJsZSB0byB1cGxvYWQgZmlsZXMgZXRjIHRocm91Z2ggSFRUUCBQT1NULgogICBTaGlyYXogS2FuZ2EgPHNrYW5nYUBiaWdmb290LmNvbT4gYXNrZWQgZm9yIHRoZSBmZWF0dXJlIGFuZCBteSBicm90aGVyLAogICBCavZybiBTdGVuYmVyZyA8Qmpvcm4uU3RlbmJlcmdAc3RoLmZyb250ZWMuc2U+IGhlbHBlZCBtZSBkZXNpZ24gdGhlIHVzZXIKICAgaW50ZXJmYWNlIGZvciB0aGlzIGJlYXN0LiAgVGhpcyBmZWF0dXJlIHJlcXVpcmVzIHF1aXRlIHNvbWUgZG9jcywKICAgc2luY2UgaXQgaGFzIHR1cm5lZCBvdXQgbm90IG9ubHkgcXVpdGUgY2FwYWJsZSwgYnV0IGFsc28gY29tcGxpY2F0ZWQhIDotKQogLSBBIG5vdGUgaGVyZSwgc2luY2UgSSd2ZSByZWNlaXZlZCBtYWlsIGFib3V0IGl0LiBTU0xlYXkgdmVyc2lvbnMgcHJpb3IgdG8KICAgMC44IHdpbGwgKm5vdCogd29yayB3aXRoIGN1cmwhCiAtIFdpbCBMYW5nZm9yZCA8d2lsQGxhbmdmb3JkLm5ldD4gcmVwb3J0ZWQgYSBidWcgdGhhdCBvY2N1cnJlZCBzaW5jZSBjdXJsCiAgIGRpZCBub3QgcHJvcGVybHkgdXNlIENSTEYgd2hlbiBpc3N1aW5nIGZ0cCBjb21tYW5kcy4gSSBmaXhlZCBpdC4KIC0gUmVhcnJhbmdlZCB0aGUgb3JkZXIgY29uZmlnIGZpbGVzIGFyZSByZWFkLiAuY3VybHJjIGlzIG5vdyAqYWx3YXlzKiByZWFkCiAgIGZpcnN0IGFuZCBiZWZvcmUgdGhlIGNvbW1hbmQgbGluZSBmbGFncy4gLUsgY29uZmlnIGZpbGVzIHRoZW4gYWN0IGFzCiAgIGFkZGl0aW9uYWwgY29uZmlnIGl0ZW1zLgogLSBVc2UgLXEgQVMgVEhFIEZJUlNUIE9QVElPTiBzcGVjaWZpZWQgdG8gcHJldmVudCAuY3VybHJjIGZyb20gYmVpbmcgcmVhZC4KIC0gWW91IGNhbiBub3cgZGlzYWJsZSBhIHByb3h5IGJ5IHVzaW5nIC14ICIiLiBVc2VmdWwgaWYgdGhlIC5jdXJscmMgZmlsZQogICBzcGVjaWZpZXMgYSBwcm94eSBhbmQgeW91IHdhbm5hIGZldGNoIHNvbWV0aGluZyB3aXRob3V0IGdvaW5nIHRocm91Z2gKICAgdGhhdC4KIC0gSSdtIHRoaW5raW5nIG9mIGRyb3BwaW5nIHRoZSAtcCBzdXBwb3J0LiBJdHMgcmVhbGx5IG5vdCB1c2VmdWwgc2luY2UgcG9ydHMKICAgY291bGQgKGFuZCBzaG91bGQ/KSBiZSBzcGVjaWZpZWQgYXMgOjxwb3J0PiBhcHBlbmRlZCBvbiB0aGUgaG9zdCBuYW1lCiAgIGluc3RlYWQsIGJvdGggaW4gVVJMcyBhbmQgdG8gcHJveHkgaG9zdCBuYW1lcy4KIC0gTWFydGluIFN0YWFlbCA8bWFydGluQG5ldGdyb3VwLmRrPiByZXBvcnRzIGN1cmwgLUwgYnVncyB1bmRlciBXaW5kb3dzIE5UCiAgICh0ZXN0IHdpdGggVVJMIGh0dHA6Ly9jb21lLnRvL3Njc2RlKS4gVGhpcyBidWcgaXMgbm90IHByZXNlbnQgaW4gdGhpcwogICB2ZXJzaW9uIGFueW1vcmUuCiAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSB3ZWlyZCBGVFAgVVJMIHR5cGU9IHRoaW5nLiBZb3UgY2FuIGRvd25sb2FkIGEgZmlsZQogICB1c2luZyBBU0NJSSB0cmFuc2ZlciBieSBhcHBlbmRpbmcgIjt0eXBlPUEiIHRvIHRoZSByaWdodCBvZiBpdC4gT3RoZXIKICAgYXZhaWxhYmxlIHR5cGVzIGFyZSB0eXBlPUQgZm9yIGRpci1saXN0IChOTFNUKSBhbmQgdHlwZT1JIGZvciBiaW5hcnkKICAgdHJhbnNmZXIuIEkgY2FuJ3Qgc2F5IEkndmUgZXZlciBzZWVuIGFueW9uZSB1c2UgdGhpcyBraW5kIG9mIFVSTCB0aG91Z2ghCiAgIDotKQogLSBUcm95IEVuZ2VsIDx0ZW5nZWxAcGFsbGFkaXVtLm5ldD4gcG9pbnRlZCBvdXQgYSBidWcgaW4gbXkgZ2V0ZW52KCJIT01FIikKICAgdXNhZ2UgZm9yIHdpbjMyIHN5c3RlbXMuIEkgaW50cm9kdWNlIGdldGVudi5jIHRvIGJldHRlciBjb3BlIHdpdGgKICAgdGhpcy4gTXIgRW5nZWwgaGVscHMgbWUgd2l0aCB0aGUgZGV0YWlscyBhcm91bmQgdGhhdC4uLgogLSBBIGxpdHRsZSBub3RlIHRvIG15c2VsZiBhbmQgb3RoZXJzLCBJIHNob3VsZCBtYWtlIHRoZSB3aW4zMi1iaW5hcnkgYnVpbHQKICAgd2l0aCBTU0wgc3VwcG9ydC4uLgogLSByLXktYS1uL24tZS1sLXMtby1uIDxyeWFuQGluY2guY29tPiBzZW50IG1lIGNvbW1lbnRzIGFib3V0IGJ1aWxkaW5nIGN1cmwKICAgd2l0aCBTU0wgdW5kZXIgRnJlZUJTRC4gU2VlIHRoZSBNYWtlZmlsZSBmb3IgZGV0YWlscy4gVXNpbmcgdGhlIGNvbmZpZ3VyZQogICBzY3JpcHQsIGl0IHNob3VsZCB3b3JrIGJldHRlciBhbmQgYXV0b21hdGljYWxseSBub3cuLi4KIC0gQ2xlYW5lZCB1cCBpbiB0aGUgcG9ydCBudW1iZXIgbWVzcyBpbiB0aGUgc291cmNlLiBObyBsb25nZXIgc3RvcmVzIGFuZCB1c2VzCiAgIHByb3h5IHBvcnQgbnVtYmVyIHNlcGFyYXRlIGZyb20gbm9ybWFsIHBvcnQgbnVtYmVyLgogLSAnY29uZmlndXJlJyBzY3JpcHQgd29ya2luZy4gQ29uZmlybWVkIGNvbXBpbGVzIG9uOgogICAgSG9zdCAgICAgICAgIFNTTCAgQ29tcGlsZXIKICAgIFN1bk9TIDUuNSAgICBubyAgIGdjYwogICAgU3VuT1MgNS41LjEgIHllcyAgZ2NjCiAgICBTdW5PUyA1LjYgICAgbm8gICBjYyAgKHdpdGggZ2NjLCBpdCBoYXMgdGhlICJnY2MgaW5jbHVkZSBmaWxlcyIgcHJvYmxlbSkKICAgIFN1bk9TIDQuMS4zICBubyAgIGdjYyAod2l0aG91dCBBTlNJIEMgaGVhZGVycykKICAgIFN1bk9TIDQuMS4yICBubyAgIGdjYyAobmF0aXZlIGNvbXBpbGVyIGZhaWxlZCkKICAgIExpbnV4IDIuMC4xOCBubyAgIGdjYwogICAgTGludXggMi4wLjMyIHllcyAgZ2NjCiAgICBMaW51eCAyLjAuMzUgbm8gICBnY2MgKHdpdGggZ2xpYmMpCiAgICBJUklYIDYuMiAgICAgbm8gICBnY2MgKGNjIGNvbXBpbGVzIGdlbmVyYXRlIGEgZmV3IHdhcm5pbmdzKQogICAgSVJJWCA2LjQgICAgIG5vICAgY2MgIChnZW5lcmF0ZWQgd2FybmluZ3MgdGhvdWdoKQogICAgV2luMzIgICAgICAgIG5vICAgQm9ybGFuZAogICAgT1NGNC4wCSBubyAgID8KCiAtIE9vb3BzLiBUaGUgNWJldGEgKGFuZCA0LjEwKSB1bmRlciB3aW4zMiBmYWlsZWQgaWYgdGhlIEhPTUUgdmFyaWFibGUgd2Fzbid0CiAgIHNldC4KIC0gV2hlbiB1c2luZyBhIHByb3h5LCBjdXJsIG5vdyBndWVzc2VzIGFuZCB1c2VzIHRoZSBwcm90b2NvbCBwYXJ0IGluIGNhc2VzCiAgIGxpa2U6CgljdXJsIC14IHByb3h5OjgwIHd3dy5zaXRlLmNvbQogICBQcm94aWVzIG5vcm1hbGx5IGdvIG51dHMgdW5sZXNzIGh0dHA6Ly8gaXMgcHJlcGVuZGVkIHRvIHRoZSBob3N0IG5hbWUsIHNvCiAgIGlmIGN1cmwgaXMgdXNlZCBsaWtlIHRoaXMsIGl0IGd1ZXNzZXMgcHJvdG9jb2wgYW5kIGFwcGVuZHMgdGhlIHByb3RvY29sCiAgIHN0cmluZyBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGUgcHJveHkuIEl0IGFscmVhZHkgZGlkIHRoaXMgd2hlbiB1c2VkCiAgIHdpdGhvdXQgcHJveHkuCiAtIEJldHRlciBwb3J0IHVzYWdlIHdpdGggU1NMIHRocm91Z2ggcHJveHkgbm93LiBJZiB5b3Ugc3BlY2lmaWVkIGEgZGlmZmVyZW50CiAgIGh0dHBzLXBvcnQgd2hlbiBhY2Nlc3NpbmcgdGhyb3VnaCBhIHByb3h5LCBpdCBkaWRuJ3QgdXNlIHRoYXQgbnVtYmVyCiAgIGNvcnJlY3RseS4gSSBhbHNvIHJld3JvdGUgdGhlIGNvZGUgdGhhdCBwYXJzZXMgdGhlIHN0dWZmIHJlYWQgZnJvbSB0aGUKICAgcHJveHkgd2hlbiB5b3Ugd2FubmEgY29ubmVjdCB0aHJvdWdoIGl0IHdpdGggU1NMLgogLSBCam9ybiBSZWVzZSA8YnJlZXNlQGltYWRhLm91LmRrPiBoZWxwZWQgbWUgd29yayBhcm91bmQgb25lIG9mIHRoZSBjb21waWxlcgogICB3YXJuaW5ncyBvbiBJUklYIG5hdGl2ZSBjYyBjb21waWxlcy4KClZlcnNpb24gNC4xMCAoT2N0IDI2LCAxOTk4KQogRGFuaWVsIFN0ZW5iZXJnCiAtIEpvaG4gQS4gQnJpc3RvciA8amJyaXN0b3JAYmVsbHNvdXRoLm5ldD4gc3VnZ2VzdGVkIGEgY29uZmlnIGZpbGUgc3dpdGNoLAogICBhbmQgc2luY2UgSSd2ZSBiZWVuIGhhdmluZyB0aGF0IGlkZWEga2luZCBvZiBpbiB0aGUgYmFja2dyb3VuZCBmb3IgYSBsb25nCiAgIHRpbWUgSSByZXdyb3RlIHRoZSBwYXJhbWV0ZXIgcGFyc2luZyBmdW5jdGlvbiBhIGxpdHRsZSBhbmQgbm93IEkgaW50cm9kdWNlCiAgIHRoZSAtSy8tLWNvbmZpZyBmbGFnLiBJIGFsc28gbWFkZSBjdXJsICphbHdheXMqICh1bmxlc3MgLUsgaXMgdXNlZCkgdHJ5IHRvCiAgIGxvYWQgdGhlIC5jdXJscmMgZmlsZSBmb3IgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuIFRoZSBzeW50YXggZm9yIHRoZQogICBjb25maWcgZmlsZSBpcyB0aGUgc3RhbmRhcmQgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHN0eWxlLiBEZXRhaWxzIGluICdjdXJsCiAgIC1oJyBvciB0aGUgUkVBRE1FLgogLSBJIHJlbW92ZWQgdGhlIC1rIG9wdGlvbi4gS2VlcC1hbGl2ZSBpc24ndCByZWFsbHkgYW55dGhpbmcgYW55b25lIHdvdWxkCiAgIHdhbnQgdG8gZW5hYmxlIHdpdGggY3VybCBhbnl3YXkuCiAtIE1hcnRpbiBTdGFhZWwgPE1hcnRpbkBTdGFhZWwuZGs+IGhlbHBlZCBtZSBhZGQgdGhlICdpcml4JyB0YXJnZXQuIE5vdwogICAibWFrZSBpcml4IiBzaG91bGQgYnVpbGQgY3VybCBzdWNjZXNzZnVsbHkgb24gbm9uLWdjYyBTR0kgbWFjaGluZXMuCiAtIFNpbmdsZSBzd2l0Y2hlcyBub3cgdG9nZ2xlIGJlaGF2aW91cnMuIEkuZSBpZiB5b3UgdXNlIC12IC12IHRoZSBzZWNvbmQKICAgd2lsbCBzd2l0Y2ggb2ZmIHRoZSB2ZXJib3NlIG1vZGUgdGhlIGZpcnN0IG9uZSBlbmFibGVkLiBUaGlzIGlzIHNvIHRoYXQKICAgeW91IGNhbiBkaXNhYmxlIGEgZGVmYXVsdCBzZXR0aW5nIGEgLmN1cmxyYyBmaWxlIGVuYWJsZXMgZXRjLgoKVmVyc2lvbiA0LjkgKE9jdCA3LCAxOTk4KQogRGFuaWVsIFN0ZW5iZXJnCiAtIE1hcnRpbiBTdGFhZWwgPE1hcnRpbkBTdGFhZWwuZGs+IHN1Z2dlc3RlZCBjdXJsIHdvdWxkIHN1cHBvcnQgY29va2llcy4KICAgSSBhZGRlZCAtYi8tLWNvb2tpZSB0byBlbmFibGUgZnJlZS10ZXh0IGNvb2tpZSBkYXRhIHRvIGJlIHBhc3NlZC4gVGhlcmUncwogICBhbHNvIGEgbGl0dGxlIGJsdXJiIGFib3V0IGdlbmVyYWwgY29va2llIHN0dWZmIGluIHRoZSBSRUFETUUvaGVscCB0ZXh0LgogLSBkbWggPGRtaEBqZXQuZXM+IHN1Z2dlc3RlZCBIVFRQIHJlc3VtZSBjYXBhYmlsaXRpZXMuIEFsdGhvdWdoIHlvdSBjb3VsZAogICBtYW51YWxseSBnZXQgY3VybCB0byByZXN1bWUgSFRUUCBkb2N1bWVudHMsIEkgbWFkZSB0aGUgLWMgcmVzdW1lIGZsYWcgd29yawogICBmb3IgSFRUUCB0b28gKHVubGVzcyAtciBpcyB1c2VkIHRvbywgd2hpY2ggd291bGQgYmUgdmVyeSBvZGQgYW55d2F5KS4KIC0gQWRkZWQgY2hlY2tsaW5rcy5wbCB0byB0aGUgYXJjaGl2ZS4gSXQgaXMgYSBzdGlsbCBleHBlcmltZW50YWwgcGVybCBzY3JpcHQKICAgdGhhdCBjaGVja3MgYWxsIGxpbmtzIG9mIGEgd2ViIHBhZ2UgYnkgdXNpbmcgY3VybC4KIC0gUmVhcnJhbmdlZCB0aGUgYXJjaGl2ZSBoaWVyYXJjaHkgYSBsaXR0bGUuIEJ1aWxkIHRoZSBleGVjdXRhYmxlIGluIHRoZQogICBzcmMvIGRpciBmcm9tIG5vdyBvbiEKIC0gVmVyc2lvbiA0LjkgYW5kIGhlcmVhZnRlciwgaXMgbm8gbG9uZ2VyIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwgbGljZW5zZS4KICAgSSBoYXZlIG5vdyB1cGRhdGVkIHRoZSBMRUdBTCBmaWxlIGV0YyBhbmQgbm93IHRoaXMgaXMgcmVsZWFzZWQgdXNpbmcgdGhlCiAgIE1vemlsbGEgUHVibGljIExpY2Vuc2UgdG8gYXZvaWQgdGhlIHBsYWd1ZSBrbm93biBhcyAidGhlIEdQTCB2aXJ1cyIuIFlvdQogICBtdXN0IG1ha2UgdGhlIHNvdXJjZSBhdmFpbGFibGUgaWYgeW91IGRlY2lkZSB0byBjaGFuZ2UgYW5kL29yIHJlZGlzdHJpYnV0ZQogICBjdXJsLCBidXQgaWYgeW91IGRlY2lkZSB0byB1c2UgY3VybCB3aXRoaW4gc29tZXRoaW5nIGVsc2UgeW91IGRvIG5vdCBuZWVkCiAgIHRvIG9mZmVyIHRoZSB3b3JsZCB0aGUgc291cmNlIHRvIHRoYXQgdG9vLgogLSBDdXJsIGRpZCBub3QgbGlrZSBIVFRQIHNlcnZlcnMgdGhhdCBzZW50IG5vIGhlYWRlcnMgYXQgYWxsIG9uIGEgR0VUCiAgIHJlcXVlc3QuICBJdCBpcyBhIHZpb2xhdGlvbiBvZiBSRkMyMDY4IGJ1dCBhcHBlYXJhbnRseSBzb21lIHNlcnZlcnMgZG8KICAgdGhhdCBhbnl3YXkuICBUaGFua3MgdG8gR29yZG9uIEJlYXRvbiA8Z29yZG9uQGVyaXguZXJpY3Nzb24uc2U+IGZvciB0aGUKICAgcmVwb3J0IQogLSAtTC8tLWxvY2F0aW9uIHdhcyBhZGRlZCBhZnRlciBhIHN1Z2dlc3Rpb24gZnJvbSBNYXJ0aW4gU3RhYWVsCiAgIDxNYXJ0aW5AU3RhYWVsLmRrPi4gVGhpcyBtYWtlcyBjdXJsIEFUVEVNUFQgdG8gZm9sbG93IHRoZSBMb2NhdGlvbjoKICAgcmVkaXJlY3QgaWYgb25lIGlzIHByZXNlbnQgaW4gdGhlIEhUVFAgaGVhZGVycy4gSWYgLWkgb3IgLUkgaXMgdXNlZCB3aXRoCiAgIHRoaXMgZmxhZywgeW91IHdpbGwgc2VlIGhlYWRlcnMgZnJvbSBhbGwgc2l0ZXMgdGhlIExvY2F0aW9uOiBwb2ludHMgdG8uIERvCiAgIG5vdGUgdGhhdCB0aGUgZmlyc3Qgc2VydmVyIGNhbiBwb2ludCB0byBhIHNlY29uZCB0aGF0IHBvaW50cyB0byBhIHRoaXJkCiAgIGV0Yy4gSXQgc2VlbXMgdGhlIExvY2F0aW9uOiBwYXJhbWV0ZXIgKHNhaWQgdG8gYmUgYW4gQWJzb2x1dGVVUkkgaW4KICAgUkZDMjA2OCkgaXNuJ3QgYWx3YXlzIGFic29sdXRlLi4gOi0vIEFueXdheSwgSSd2ZSBtYWRlIGN1cmwgQVRURU1QVCB0byBkbwogICB0aGUgYmVzdCBpdCBjYW4gdG8gZGVhbCB3aXRoIHRoZSByZWFsaXR5LgogLSBBZGRlZCBnZXRsaW5rcy5wbCB0byB0aGUgYXJjaGl2ZS4gZ2V0bGlua3MucGwgc2VsZWN0aXZlbHkgZG93bmxvYWRzCiAgIGZpbGVzIHRoYXQgYSB3ZWIgcGFnZSBsaW5rcyB0by4KClZlcnNpb24gNC44LjQKIERhbmllbCBTdGVuYmVyZwogLSBBcyBKdWxpYW4gUm9tZXJvIE5pZXRvIDxqcm9tZXJvQGFuYXlhLmVzPiByZXBvcnRlZCwgY3VybCByZXBvcnRlZCB3cm9uZwogICB2ZXJzaW9uIG51bWJlci4KIC0gQXMgVGVlbXUgWWxpLUVsc2lsYSA8dHlsaWVsc2lAbWFpbC5zdHVkZW50Lm91bHUuZmk+IHBvaW50ZWQgb3V0LAogICB0aGUgd2luMzIgdmVyc2lvbiBvZiA0LjggKGFuZCBwcm9iYWJseSBhbGwgb3RoZXIgdmVyc2lvbnMgZm9yIHdpbjMyKQogICBkaWRuJ3Qgd29yayB3aXRoIGJpbmFyeSBmaWxlcyBzaW5jZSBJJ20gdG9vIHVzZWQgdG8gdGhlIFVOSVggc3R5bGUKICAgZm9wZW4oKSB3aGVyZSBiaW5hcnkgYW5kIHRleHQgZG9uJ3QgZGlmZmVyLi4uCiAtIFJhbHBoIEJlY2ttYW5uIDxyYWJlQHVuaS1wYWRlcmJvcm4uZGU+IGJyb3VnaHQgbWUgc29tZSBjaGFuZ2VzIHRoYXQgbGV0cwogICBjdXJsIGNvbXBpbGUgZXJyb3IgYW5kIHdhcm5pbmcgZnJlZSB3aXRoIC1XYWxsIC1wZWRhbnRpYyB3aXRoCiAgIGcrKy4gSSBhbHNvIHRvb2sgdGhlIG9wcG9ydHVuaXR5IHRvIGNsZWFuIG9mZiBzb21lIHVudXNlZCB2YXJpYWJsZXMKICAgYW5kIHNpbWlsYXIuCiAtIFJhbHBoIEJlY2ttYW5uIDxyYWJlQHVuaS1wYWRlcmJvcm4uZGU+IG1hZGUgbWUgYXdhcmUgb2YgYSByZWFsbHkgb2RkIGJ1ZwogICBub3cgY29ycmVjdGVkLiBXaGVuIGN1cmwgcmVhZCBhIHNldCBvZiBoZWFkZXJzIGZyb20gYSBIVFRQIHNlcnZlciwgZGl2aWRlZAogICBpbnRvIG1vcmUgdGhhbiBvbmUgcmVhZCBhbmQgdGhlIGZpcnN0IHJlYWQgc2hvd2VkIGEgZnVsbCBsaW5lICpleGFjdGx5KgogICAoaS5lIGVuZGluZyB3aXRoIGEgbmV3bGluZSksIGN1cmwgZGlkIG5vdCBiZWhhdmUgd2VsbC4KClZlcnNpb24gNC44LjMKIERhbmllbCBTdGVuYmVyZwogLSBJIHdhcyB0b28gcXVpY2sgdG8gcmVsZWFzZSA0LjguMiB3aXRoIHRvbyBsaXR0bGUgdGVzdGluZy4gT25lIG9mIHRoZQogICBjaGFuZ2VzIGlzIG5vdyByZXZlcnRlZCBzbGlnaHRseSB0byB0aGUgNC44LjEgd2F5IHNpbmNlIDQuOC4yIGNvdWxkbid0CiAgIHVwbG9hZCBmaWxlcy4gSSBzdGlsbCB0aGluayBib3RoIHByb2JsZW1zIGNvcnJlY3RlZCBpbiA0LjguMiByZW1haW4KICAgY29ycmVjdGVkLiAgUmVwb3J0ZWQgYnkgSnVsaWFuIFJvbWVybyBOaWV0byA8anJvbWVyb0BhbmF5YS5lcz4uCgpWZXJzaW9uIDQuOC4yCiBEYW5pZWwgU3RlbmJlcmcKIC0gQmVybmhhcmQgSXNlbGJvcm4gPGJpc2VsYm9yQHJocmsudW5pLWtsLmRlPiByZXBvcnRlZCB0d28gRlRQIHByb3RvY29sCiAgIGVycm9ycyBjdXJsIGRpZC4gVGhleSdyZSBub3cgY29ycmVjdGVkLiBCb3RoIGFwcGVhcmVkIHdoZW4gZ2V0dGluZyBmaWxlcwogICBmcm9tIGEgTVMgRlRQIHNlcnZlciEgOi0pCgpWZXJzaW9uIDQuOC4xCiBEYW5pZWwgU3RlbmJlcmcKIC0gQWRkZWQgYSBsYXN0IHVwZGF0ZSBvZiB0aGUgcHJvZ3Jlc3MgbWV0ZXIgd2hlbiB0aGUgdHJhbnNmZXIgaXMgZG9uZS4gVGhlCiAgIGZpbmFsIG91dHB1dCBvbiB0aGUgc2NyZWVuIGRpZG4ndCBoYXZlIHRvIGJlIHRoZSBmaW5hbCBzaXplIHRyYW5zZmVyZWQKICAgd2hpY2ggbWFkZSBpdCBzb21ldGltZXMgbG9vayBvZGQuCiAtIFRoYW5rcyB0byBEYXZpZCBMb25nIDxsb25nQHJlc2VhcmNoLmJlbGwtbGFicy5jb20+IEkgZ290IHJpZCBvZiBhIHNpbGx5CiAgIGJ1ZyB0aGF0IGhhcHBlbmVkIGlmIGEgSFRUUC1wYWdlIGhhZCBub3RoaW5nIGJ1dCBoZWFkZXIuIEFwcGVhcmFudGx5CiAgIFNvbGFyaXMgZGVhbHMgd2l0aCBuZWdhdGl2ZSBzaXplcyBpbiBmd3JpdGUoKSBjYWxscyBhIGxvdCBiZXR0ZXIgdGhhbgogICBMaW51eCBkb2VzLi4uID1CLV0KClZlcnNpb24gNC44CiBEYW5pZWwgU3RlbmJlcmcKIC0gQ29udGludWUgRlRQIGZpbGUgdHJhbnNmZXIuIC1jIGlzIHRoZSBzd2l0Y2guIE5vdGUgdGhhdCB5b3UgbmVlZCB0bwogICBzcGVjaWZ5IGEgZmlsZSBuYW1lIGlmIHlvdSB3YW5uYSByZXN1bWUgYSBkb3dubG9hZCAoeW91IGNhbid0IHJlc3VtZSBhCiAgIGRvd25sb2FkIHNlbnQgdG8gc3Rkb3V0KS4gUmVzdW1pbmcgdXBsb2FkIG1heSBiZSBsaW1pdGVkIGJ5IHRoZSBzZXJ2ZXIKICAgc2luY2UgY3VybCBpcyB0aGVuIHVzaW5nIHRoZSBub24tUkZDOTU5IGNvbW1hbmQgU0laRSB0byBnZXQgdGhlIHNpemUgb2YKICAgdGhlIHRhcmdldCBmaWxlIGJlZm9yZSB1cGxvYWQgYmVnaW5zICh0byBmaWd1cmUgb3V0IHdoaWNoIG9mZnNldCB0bwogICB1c2UpLiBVc2UgLUMgdG8gc3BlY2lmeSB0aGUgb2Zmc2V0IHlvdXJzZWxmISAtQyBpcyBoYW5keSBpZiB5b3UncmUgZG9pbmcKICAgdGhlIG91dHB1dCB0byBzb21ldGhpbmcgZWxzZSBidXQgYSBwbGFpbiBmaWxlIG9yIHdoZW4geW91IGp1c3Qgd2FudCB0byBnZXQKICAgdGhlIGVuZCBvZiBhIGZpbGUuCiAtIHJlY3Vyc2l2ZWZ0cGdldC5wbCBub3cgZmVhdHVyZXMgYSBtYXhpbXVtIHJlY3Vyc2l2ZSBsZXZlbCBhcmd1bWVudC4KClZlcnNpb24gNC43CiBEYW5pZWwgU3RlbmJlcmcKIC0gQWRkZWQgc3VwcG9ydCB0byBhYm9ydCBhIGRvd25sb2FkIGlmIHRoZSBzcGVlZCBpcyBiZWxvdyBhIGNlcnRhaW4gYW1vdW50CiAgIChzcGVlZC1saW1pdCkgYnl0ZXMgcGVyIHNlY29uZCBmb3IgYSBjZXJ0YWluIChzcGVlZC10aW1lKSB0aW1lLgogLSBXcm90ZSBhIHBlcmwgc2NyaXB0ICdyZWN1cnNpdmVmdHBnZXQucGwnIHRvIHJlY3Vyc2l2ZWx5IHVzZSBjdXJsIHRvIGdldCBhCiAgIHdob2xlIGZ0cCBkaXJlY3RvcnkgdHJlZS4gSXQgaXMgbWVhbnQgYXMgYW4gZXhhbXBsZSBvZiBob3cgY3VybCBjYW4gYmUKICAgdXNlZC4gIEkgYWdyZWUgaXQgaXNuJ3QgdGhlIHdpc2VzdCB0aGluZyB0byBkbyB0byBtYWtlIGEgc2VwYXJhdGUgbmV3CiAgIGNvbm5lY3Rpb24gZm9yIGVhY2ggZmlsZSBhbmQgZGlyZWN0b3J5IGZvciB0aGlzLgoKVmVyc2lvbiA0LjYKIERhbmllbCBTdGVuYmVyZwogLSBBZGRlZCBhIGZpcnN0IGF0dGVtcHQgdG8gb3B0aW9uYWxseSBwYXJzZSB0aGUgLm5ldHJjIGZpbGUgZm9yIGxvZ2luIHVzZXIKICAgYW5kIHBhc3N3b3JkLiBJZiB1c2VkIHdpdGggaHR0cCwgaXQgZW5hYmxlcyB1c2VyIGF1dGhlbnRpY2F0aW9uLiAtbiBpcwogICB0aGUgbmV3IHN3aXRjaC4KIC0gUmVtb3ZlZCB0aGUgZXh0cmEgbmV3bGluZXMgb24gdGhlIGRlZmF1bHQgdXNlci1hZ2VudCBzdHJpbmcuCiAtIENvcnJlY3RlZCB0aGUgbWlzc2luZyBmdHAgdXBsb2FkIGVycm9yIG1lc3NhZ2VzIHdoZW4gaXQgZmFpbGVkIHdpdGhvdXQgdGhlCiAgIHZlcmJvc2UgZmxhZyBzZXQuIEdhcnkgVy4gU3dlYXJpbmdlbiBmb3VuZCBpdC4KIC0gTm93IHVzaW5nIGFsYXJtKCkgdG8gZW5hYmxlIHNlY29uZC1wcmVjaXNpb24gdGltZW91dCBldmVuIG9uIHRoZSBuYW1lCiAgIHJlc29sdmluZy9jb25uZWN0aW5nIHBoYXNlLiBUaGUgdGltZW91dCBpcyBhbHRob3VnaCByZXNldCBhZnRlciB0aGF0IGZpcnN0CiAgIHNlcXVlbmNlLiAoVGhpcyBzaG91bGQgYmUgY29ycmVjdGVkLikgR2FyeSBXLiBTd2VhcmluZ2VuIDxzd2VhckBhYS5uZXQ+CiAgIHJlcG9ydGVkLgogLSBOb3cgc3BlbGxzICJVbmtub3duIiBwcm9wZXJseSwgYXMgaW4gIlVua25vd24gb3B0aW9uICd6JyIuLi4gOi0pCiAtIEFkZGVkIGJ1ZyByZXBvcnQgZW1haWwgYWRkcmVzcyBpbiB0aGUgUkVBRE1FLgogLSBBZGRlZCBhICJjdXJyZW50IHNwZWVkIiBmaWVsZCB0byB0aGUgcHJvZ3Jlc3MgbWV0ZXIuIEl0IHNob3dzIHRoZSBhdmVyYWdlCiAgIHNwZWVkIHRoZSBsYXN0IDUgc2Vjb25kcy4gVGhlIG90aGVyIHNwZWVkIGZpZWxkIHNob3dzIHRoZSBhdmVyYWdlIHNwZWVkIG9mCiAgIHRoZSBlbnRpcmUgdHJhbnNmZXIgc28gZmFyLgoKVmVyc2lvbiA0LjUuMQogTGluYXMgVmVwc3RhcwogLSBTU0wgdGhyb3VnaCBwcm94eSBmaXgKIC0gQWRkZWQgLUEgdG8gYWxsb3cgVXNlci1BZ2VudDogY2hhbmdlcwoKIERhbmllbCBTdGVuYmVyZyAKIC0gTWFkZSB0aGUgLUEgd29yayB3aGVuIFNTTC10aHJvdWdoLXByb3h5LgoKVmVyc2lvbiA0LjUKIExpbmFzIFZlcHN0YXMgPGxpbmFzQGxpbmFzLm9yZz4KIC0gTW9yZSBTU0wgY29ycmVjdGlvbnMKIC0gSSd2ZSBhZGRlZCBhIHBvcnQgdG8gQUlYLgogLSBydW5uaW5nIFNTTCB0aHJvdWdoIGEgcHJveHkgY2F1c2VzIGEgY2h1bmsgb2YgY29kZSB0byBiZSBleGVjdXRyZWQgdHdpY2UuCiAgIG9uZSBvZiB0aG9zZSBibG9ja3MgbmVlZHMgdG8gYmUgZGVsZXRlZC4KCiBEYW5pZWwgU3RlbmJlcmcKIC0gTWFkZSAtaSBhbmQgLUkgd29yayBhZ2FpbgoKVmVyc2lvbiA0LjQKIExpbmFzIFZlcHN0YXMgPGxpbmFzQHVzLmlibS5jb20+CiAtIC14IGNhbiBub3cgYWxzbyBzcGVjaWZ5IHByb3h5cG9ydCB3aGVuIHVzZWQgYXMgaW4gJ3Byb3h5aG9zdDpwcm94eXBvcnQnCiAtIFNTTCBmaXhlcwoKVmVyc2lvbiA0LjMKIERhbmllbCBTdGVuYmVyZwogLSBBZGp1c3RlZCB0byBjb21waWxlIHVuZGVyIHdpbjMyIChWaXN1YWxDKysgNSkuIFRoZSAtUCBzd2l0Y2ggZG9lcyBub3QKICAgc3VwcG9ydCBuZXR3b3JrIGludGVyZmFjZSBuYW1lcyBpbiB3aW4zMi4gSSBjb3VsZG4ndCBmaWd1cmUgb3V0IGhvdyEKClZlcnNpb24gNC4yCiBMaW5hcyBWZXBzdGFzIC8gU2FtcG8gS2VsbG9tYWtpCiAtIEFkZGVkIFNTTCAvIFNTTGVheSBzdXBwb3J0IChodHRwczovLykKIC0gQWRkZWQgdGhlIC1UIHVzYWdlIGZvciBIVFRQIFBPU1QuCgogRGFuaWVsIFN0ZW5iZXJnCiAtIEJ1Z2ZpeGVkIHRoZSBTU0wgaW1wbGVtZW50YXRpb24uCiAtIE1hZGUgLVAgYSBsb3QgYmV0dGVyIHRvIHVzZSBvdGhlciBJUCBhZGRyZXNzZXMuIEl0IG5vdyBhY2NlcHRzIGEgZm9sbG93aW5nCiAgIHBhcmFtZXRlciB0aGF0IGNhbiBiZSBlaXRoZXIKICAgICAgICBpbnRlcmZhY2UgLSBpLmUgImV0aDAiIHRvIHNwZWNpZnkgd2hpY2ggaW50ZXJmYWNlJ3MgSVAgYWRkcmVzcyB5b3UKICAgICAgICAgICAgICAgICAgICB3YW50IHRvIHVzZQogICAgICAgIElQIGFkZHJlc3MgLSBpLmUgIjE5Mi4xNjguMTAuMSIgdG8gc3BlY2lmeSBleGFjdCBJUCBudW1iZXIKICAgICAgICBob3N0IG5hbWUgLSBpLmUgIm15Lmhvc3QuZG9tYWluIiB0byBzcGVjaWZ5IG1hY2hpbmUKICAgICAgICAiLSIgICAgICAgLSAoYW55IHNpbmdsZS1sZXR0ZXIgc3RyaW5nKSB0byBtYWtlIGl0IHBpY2sgdGhlIG1hY2hpbmUncwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQKIC0gVGhlIE1ha2VmaWxlIGlzIG5vdyByZWFkeSB0byBjb21waWxlIGZvciBzb2xhcmlzLCBzdW5vczQgYW5kIGxpbnV4IHJpZ2h0CiAgIG91dCBvZiB0aGUgYm94LgogLSBCZXR0ZXIgZ2VuZXJhdGVkIHZlcnNpb24gc3RyaW5nIHNlZW4gd2l0aCAnY3VybCAtVicKClZlcnNpb24gNC4xCiBEYW5pZWwgU3RlbmJlcmcKIC0gVGhlIElQIG51bWJlciByZXR1cm5lZCBieSB0aGUgZnRwIHNlcnZlciBhcyBhIHJlcGx5IHRvIFBBU1YgZG9lcyBubyBsb25nZXIKICAgaGF2ZSB0byBETlMgcmVzb2x2ZS4gSW4gZmFjdCwgbm8gSVAtbnVtYmVyLW9ubHkgYWRkcmVzc2VzIGhhdmUgdG8gYW55bW9yZS4KIC0gQmluZHMgYmV0dGVyIHRvIGF2YWlsYWJsZSBwb3J0IHdoZW4gLVAgaXMgdXNlZC4KIC0gTm93IExJU1RzIC4vIGluc3RlYWQgb2YgLyB3aGVuIHVzZWQgYXMgaW4gZnRwOi8vZnRwLmZ1bmV0LmZpLy4gVGhlIHJlYXNvbgogICBmb3IgdGhpcyBpcyB0aGF0IGV4YWN0bHkgdGhhdCBzaXRlLCBmdHAuZnVuZXQuZmksIGRvZXMgbm90IGFsbG93IExJU1QgLwogICB3aGlsZSBMSVNUIC4vIGlzIGZpbmUuIEFueSBvYmplY3Rpb25zPwoKVmVyc2lvbiA0ICgxOTk4LTAzLTIwKQogRGFuaWVsIFN0ZW5iZXJnCiAtIEkgdG9vayBhbm90aGVyIGh1Z2Ugc3RlcCBhbmQgY2hhbmdlZCBib3RoIHZlcnNpb24gbnVtYmVyIGFuZCBwcm9qZWN0IG5hbWUhCiAgIFRoZSByZWFzb24gZm9yIHRoZSBuZXcgbmFtZSBpcyB0aGF0IHRoZXJlIGFyZSBqdXN0IG9uZSB0b28gbWFueSBwcm9ncmFtcwogICBuYW1lZCB1cmxnZXQgYWxyZWFkeSBhbmQgdGhpcyBwcm9ncmFtIGFscmVhZHkgY2FuIGEgbG90IG1vcmUgdGhhbiBtZXJlbHkKICAgZ2V0dGluZyBVUkxzLCBhbmQgdGhlIHJlYXNvbiBmb3IgdGhlIHZlcnNpb24gbnVtYmVyIGlzIHRoYXQgSSBkaWQgYWRkIHRoZQogICBwcmV0dHkgYmlnIGNoYW5nZSBpbiAtUCBhbmQgc2luY2UgSSBjaGFuZ2VkIG5hbWUgSSB3YW50ZWQgdG8gc3RhcnQgd2l0aAogICBzb21ldGhpbmcgZnJlc2ghCiAtIFRoZSAtLXN0eWxlIGZsYWdzIGFyZSB3b3JraW5nIGJldHRlciBub3cuCiAtIExpc3RpbmcgZGlyZWN0b3JpZXMgd2l0aCBGVFAgb2Z0ZW4gcmVwb3J0ZWQgdGhhdCB0aGUgZmlsZSB0cmFuc2ZlciB3YXMKICAgaW5jb21wbGV0ZS4gV3JvbmcgYXNzdW1wdGlvbnMgd2VyZSB0b28gY29tbW9uIGZvciBkaXJlY3Rvcmllcywgd2h5IG5vCiAgIHNpemUgd2lsbCBiZSBhdHRlbXB0ZWQgdG8gZ2V0IGNvbXBhcmVkIG9uIHRoZW0gZnJvbSBub3cgb24uCiAtIEltcGxlbWVudGVkIHRoZSAtUCBmbGFnIHRoYXQgbGV0J3MgdGhlIGZ0cCBjb250cm9sIGlzc3VlIGEgUE9SVCBjb21tYW5kCiAgIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIFBBU1YuCiAtIC1hIGZvciBhcHBlbmRpbmcgRlRQIHVwbG9hZHMgd29ya3MuCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKClZlcnNpb24gMy4xMgogRGFuaWVsIFN0ZW5iZXJnCiAtIEVuZC1vZi1oZWFkZXIgdHJhY2tpbmcgc3RpbGwgbGFja2VkIHN1cHBvcnQgZm9yIFxyXG4gb3IganVzdCBcbiBhdCB0aGUKICAgZW5kIG9mIHRoZSBsYXN0IGhlYWRlciBsaW5lLgogU2VyZ2lvIEJhcnJlc2kgPHNiYXJyZXNpQGltaXNwYS5pdD4KIC0gQWRkZWQgUFJPWFkgYXV0aGVudGljYXRpb24uCiBSYWZhZWwgU2FndWxhCiAtIEZpeGVkIHNvbWUgbGl0dGxlIGJ1Z3MuCgpWZXJzaW9uIDMuMTEKIERhbmllbCBTdGVuYmVyZwogLSBUaGUgaGVhZGVyIHBhcnNpbmcgd2FzIHN0aWxsIG5vdCBjb3JyZWN0IHNpbmNlIHRoZSAzLjIgbW9kaWZpY2F0aW9uLi4uCgpWZXJzaW9uIDMuMTAKIERhbmllbCBTdGVuYmVyZwogLSAzLjcgYW5kIDMuOSB3ZXJlIHNpbXVsdGFuZW91c2x5IGRldmVsb3BlZCBhbmQgbWVyZ2VkIGludG8gdGhpcyB2ZXJzaW9uLgogLSBGVFAgdXBsb2FkIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgc2luY2UgMy4yLgoKVmVyc2lvbiAzLjkKIFJhZmFlbCBTYWd1bGEKIC0gQWRkZWQgdGhlICItZSA8dXJsPiAvIC0tcmVmZXJlciA8dXJsPiIgb3B0aW9uIHdoZXJlIHdlIGNhbiBzcGVjaWZ5CiAgIHRoZSByZWZlcmVyIHBhZ2UuIE9idmlvdXNseSwgdGhpcyBpcyBuZWNlc3Nhcnkgb25seSB0byBmb29sIHRoZQogICBzZXJ2ZXIsIGJ1dC4uLgoKVmVyc2lvbiAzLjcKIERhbmllbCBTdGVuYmVyZwogLSBOb3cgY2hlY2tzIHRoZSBsYXN0IGVycm9yIGNvZGUgc2VudCBmcm9tIHRoZSBmdHAgc2VydmVyIGFmdGVyIGEgZmlsZSBoYXMKICAgYmVlbiByZWNlaXZlZCBvciB1cGxvYWRlZC4gV2Fzbid0IGRvbmUgcHJldmlvdXNseS4KIC0gV2hlbiAndXJsZ2V0IDxob3N0PicgaXMgdXNlZCB3aXRob3V0IGEgJ3Byb3RvY29sOi8vJyBmaXJzdCBpbiB0aGUgaG9zdCBwYXJ0LAogICBpdCBub3cgY2hlY2tzIGZvciBob3N0IG5hbWVzIHN0YXJ0aW5nIHdpdGggZnRwIG9yIGdvcGhlciBhbmQgaWYgaXQgZG9lcywKICAgaXQgdXNlcyB0aGF0IHByb3RvY29sIGJ5IGRlZmF1bHQgaW5zdGVhZCBvZiBodHRwLgoKVmVyc2lvbiAzLjYKIERhbmllbCBTdGVuYmVyZwogLSBTaWxseSBtaXN0YWtlIG1hZGUgdGhlIFBPU1QgYnVnLiBUaGlzIGhhcyBub3cgYWxzbyBiZWVuIHRlc3RlZCB0byB3b3JrIHdpdGgKICAgcHJveHkuCgpWZXJzaW9uIDMuNQogRGFuaWVsIFN0ZW5iZXJnCiAtIEhpZ2hseSBpbnNwaXJlZCBieSBSYWZhZWwgU2FndWxhJ3MgY2hhbmdlcyB0byB0aGUgMy4xIHRoYXQgYWRkZWQgYW4gYWxtb3N0CiAgIGZ1bmN0aW9uYWwgUE9TVCwgSSBhcHBsaWVkIGhpcyBjaGFuZ2VzIGludG8gdGhpcyB2ZXJzaW9uIGFuZCBtYWRlIHRoZW0gd29yay4KICAgKEl0IHNlZW1zIFBPU1QgcmVxdWlyZXMgdGhlIENvbnRlbnQtVHlwZSBhbmQgQ29udGVudC1MZW5ndGggaGVhZGVycy4pIEl0IGlzCiAgIG5vdyB1c2FibGUgd2l0aCB0aGUgLWQgc3dpdGNoLgoKVmVyc2lvbiAzLjMgLSAzLjQKIFBhc3NlZCB0byBhdm9pZCBjb25mdXNpb25zCgpWZXJzaW9uIDMuMgogRGFuaWVsIFN0ZW5iZXJnCiAtIE1ham9yIHJld3JpdGUgb2YgdHdvIGNydWNpYWwgcGFydHMgb2YgdGhpcyBjb2RlOiB1cGxvYWQgYW5kIGRvd25sb2FkLgogICBUaGV5IGFyZSBib3RoIG5vdyB1c2luZyBhIHNlbGVjdCgpIHN3aXRjaCwgdGhhdCBhbGxvd3MgbXVjaCBiZXR0ZXIKICAgcHJvZ3Jlc3MgbWV0ZXIgYW5kIHRpbWUgY29udHJvbC4gCiAtIGFsYXJtKCkgdXNhZ2UgcmVtb3ZlZCBjb21wbGV0ZWx5CiAtIEZUUCBnZXQgY2FuIG5vdyBsaXN0IGRpcmVjdG9yeSBjb250ZW50cyBpZiB0aGUgcGF0aCBlbmRzIHdpdGggYSBzbGFzaCAnLycuCiAgIFVybGdldCBvbiBhIGZ0cC1wYXRoIHRoYXQgZG9lc24ndCBlbmQgd2l0aCBhIHNsYXNoIG1lYW5zIHVybGdldCB3aWxsCiAgIGF0dGVtcHQgZ2V0dGluZyBpdCBhcyBhIGZpbGUgbmFtZS4KIC0gRlRQIGRpcmVjdG9yeSB2aWV3IHN1cHBvcnRzIC1sIGZvciAibGlzdC1vbmx5IiB3aGljaCBsaXN0cyB0aGUgZmlsZSBuYW1lcwogICBvbmx5LgogLSBBbGwgb3BlcmF0aW9ucyBzdXBwb3J0IC1tIGZvciBtYXggdGltZSB1c2FnZSBpbiBzZWNvbmRzIGFsbG93ZWQuCiAtIEZUUCB1cGxvYWQgbm93IGFsbG93cyB0aGUgc2l6ZSBvZiB0aGUgdXBsb2FkZWQgZmlsZSB0byBiZSBwcm92aWRlZCwgYW5kCiAgIHRodXMgaXQgY2FuIGJldHRlciBjaGVjayBpdCBhY3R1YWxseSB1cGxvYWRlZCB0aGUgd2hvbGUgZmlsZS4gSXQgYWxzbwogICBtYWtlcyB0aGUgcHJvZ3Jlc3MgbWV0ZXIgZm9yIHVwbG9hZHMgbXVjaCBiZXR0ZXIhCiAtIE1hZGUgdGhlIHBhcmFtZXRlciBwYXJzaW5nIGZhaWwgaW4gY2FzZXMgbGlrZSAndXJsZ2V0IC1yIDkwMCcgd2hpY2gKICAgcHJldmlvdXNseSB0cmllZCB0byBjb25uZWN0IHRvIHRoZSBob3N0IG5hbWVkICc5MDAnLgoKVmVyc2lvbiAzLjEKIEtqZWxsIEVyaWNzb24KIC0gUG9pbnRlZCBvdXQgaG93IHRvIGNvcnJlY3QgdGhlIDMgd2FybmluZ3MgaW4gd2luMzItY29tcGlsZXMuCgogRGFuaWVsIFN0ZW5iZXJnCiAtIFJlbW92ZWQgYWxsIGNhbGxzIHRvIGV4aXQoKS4KIC0gTWFkZSB0aGUgc2hvcnQgaGVscCB0ZXh0IGdldCB3cml0dGVuIHRvIHN0ZG91dCBpbnN0ZWFkIG9mIHN0ZGVyci4KIC0gTWFkZSB0aGlzIGZpbGUgaW5zdGVhZCBvZiBrZWVwaW5nIHRoZXNlIGNvbW1lbnRzIGluIHRoZSBzb3VyY2UuCiAtIE1hZGUgdHdvIGNhbGxiYWNrIGhvb2tzLCB0aGF0IGVuYWJsZSBleHRlcm5hbCBwcm9ncmFtcyB0byB1c2UgdXJsZ2V0KCkKICAgZWFzaWVyIGFuZCB0byBncmFiIHRoZSBvdXRwdXQvb2ZmZXIgdGhlIGlucHV0IGVhc2llci4KIC0gSXQgaXMgZXZpZGVudCB0aGF0IFdpbjMyLWNvbXBpbGVzIGFyZSBwYWluZnVsLiBJIHdhdGNoZWQgdGhlIG91dHB1dCBmcm9tCiAgIHRoZSBCb3JsYW5kIEMrKyB2NSBhbmQgaXQgd2FzIGF3ZnVsLiBKdXN0IGlnbm9yZSBhbGwgdGhvc2Ugd2FybmluZ3MuCgpWZXJzaW9uIDMuMAogRGFuaWVsIFN0ZW5iZXJnCiAtIEFkZGVkIEZUUCB1cGxvYWQgY2FwYWJpbGl0aWVzLiBUaGUgbmFtZSB1cmxnZXQgZ2V0cyBhIGJpdCBzaWxseSBub3cKICAgd2hlbiB3ZSBjYW4gcHV0IHRvby4uLiA9KQogLSBSZXN0cnVjdHVyZWQgdGhlIHNvdXJjZSBxdWl0ZSBhIGxvdC4KICAgQ2hhbmdlZCB0aGUgdXJsZ2V0KCkgaW50ZXJmYWNlLiBUaGlzIHdheSwgd2Ugd2lsbCBzdXJ2aXZlIGNoYW5nZXMgbXVjaAogICBiZXR0ZXIuIE5ldyBmZWF0dXJlcyBjYW4gY29tZSBhbmQgb2xkIGNhbiBiZSByZW1vdmVkIHdpdGhvdXQgdXMgbmVlZGluZwogICB0byBjaGFuZ2UgdGhlIGludGVyZmFjZS4gSSd2ZSB3cml0dGVuIGEgc21hbGwgZXhwbGFuYXRpb24gaW4gdXJsZ2V0LmgKICAgdGhhdCBleHBsYWlucyBpdC4KIC0gTmV3IGZsYWdzIGluY2x1ZGUgLXQsIC1ULCAtTyBhbmQgLWguIFRoZSAtaCB0ZXh0IGlzIGdlbmVyYXRlZCBieSB0aGUgbmV3CiAgIG1raGVscCBzY3JpcHQuCgpWZXJzaW9uIDIuOQogUmVtY28gdmFuIEhvb2ZmCiAtIEFkZGVkIGEgZml4IHRvIG1ha2UgaXQgY29tcGlsZSBzbW9vdGhseSBvbiBBbWlnYSB1c2luZyB0aGUgU0FTL0MKICAgY29tcGlsZXIuCiAgCiBEYW5pZWwgU3RlbmJlcmcKIC0gQmVsaWV2ZSBpdCBvciBub3QsIGJ1dCB0aGUgU1RVUElEIE5vdmVsbCB3ZWIgc2VydmVyIHNlZW1zIHRvIHJlcXVpcmUKICAgdGhhdCB0aGUgSG9zdDoga2V5d29yZCBpcyB1c2VkLCBzbyB3ZWxsIEkgdXNlIGl0IGFuZCBJIChyZS1pbnRyb2R1Y2UpIHRoZQogICB1cmxnZXQgVXNlci1BZ2VudDouIEkgc3RpbGwgaGF2ZSB0byBjaGVjayB0aGF0IHRoaXMgSG9zdDogdXNhZ2Ugd29ya3Mgd2l0aAogICBwcm94aWVzLi4uICdIb3N0OicgaXMgcmVxdWlyZWQgZm9yIEhUVFAvMS4xIEdFVCBhY2NvcmRpbmcgdG8gUkZDMjA2OC4KClZlcnNpb24gMi44CiBSYWZhZWwgU2FndWxhCiAtIHNvbWUgbGl0dGxlIG1vZGlmaWNhdGlvbnMKClZlcnNpb24gMi43CiBEYW5pZWwgU3RlbmJlcmcKIC0gUmVtb3ZlZCB0aGUgLWwgb3B0aW9uIGFuZCBpbnRyb2R1Y2VkIHRoZSAtZiBvcHRpb24gaW5zdGVhZC4gTm93IEknbGwKICAgcmV3cml0ZSB0aGUgZm9ybWVyIC1sIGtsdWRnZSBpbiBhbiBleHRlcm5hbCBzY3JpcHQgdGhhdCdsbCB1c2UgdXJsZ2V0IHRvCiAgIGZldGNoIG11bHRpcGFydCBmaWxlcyBsaWtlIHRoYXQuCiAtICctZicgaXMgaW50cm9kdWNlZCwgaXQgbWVhbnMgRmFpbCB3aXRob3V0IG91dHB1dCBpbiBjYXNlIG9mIEhUVFAgc2VydmVyCiAgIGVycm9ycyAocmV0dXJuIGNvZGUgPj0zMDApLgogLSBBZGRlZCBzdXBwb3J0IGZvciAtciwgcmFuZ2VzLiBTcGVjaWZ5IHdoaWNoIHBhcnQgb2YgYSBkb2N1bWVudCB5b3UgCiAgIHdhbnQsIGFuZCBvbmx5IHRoYXQgcGFydCBpcyByZXR1cm5lZC4gT25seSB3aXRoIEhUVFAvMS4xLXNlcnZlcnMuCiAtIFNwbGl0IHVwIHRoZSBzb3VyY2UgaW4gMyBwYXJ0cy4gTm93IGFsbCBwdXJlIFVSTCBmdW5jdGlvbnMgYXJlIGluCiAgIHVybGdldC5jIGFuZCBzdHVmZiB0aGF0IGRlYWxzIHdpdGggdGhlIHN0YW5kLWFsb25lIHByb2dyYW0gaXMgaW4gbWFpbi5jLgogLSBJIHRvb2sgYSBmZXcgbWludXRlcyBhbmQgd3JvdGUgYW4gZW1icnlvIG9mIGEgUkVBRE1FIGZpbGUgdG8gZXhwbGFpbgogICBhIGZldyB0aGluZ3MuCgpWZXJzaW9uIDIuNgogRGFuaWVsIFN0ZW5iZXJnCiAtIE1hZGUgdGhlIC1sIChsb29wKSB0aGluZyB1c2UgdGhlIG5ldyBDT05GX0ZBSUxPTkVSUk9SIHdoaWNoIG1ha2VzCiAgIHVybGdldCgpIHJldHVybiBlcnJvciBjb2RlIGlmIG5vbi1zdWNjZXNzZnVsLiBJdCBhbHNvIHdvbid0IG91dHB1dCBhbnl0aGluZwogICB0aGVuLiBOb3cgZmluYWxseSByZW1vdmVkIHRoZSBIVFRQIDEuMCBhbmQgZXJyb3IgNDA0IGRlcGVuZGVuY2llcy4KIC0gQWRkZWQgLUkgd2hpY2ggdXNlcyB0aGUgSEVBRCByZXF1ZXN0IHRvIGdldCB0aGUgaGVhZGVyIG9ubHkgZnJvbSBhCiAgIGh0dHAtc2VydmVyLgoKVmVyc2lvbiAyLjUKIFJhZmFlbCBTYWd1bGEKIC0gTWFkZSB0aGUgcHJvZ3Jlc3MgbWV0ZXIgdXNlIEhISDpNTTpTUyBpbnN0ZWFkIG9mIG9ubHkgc2Vjb25kcy4KClZlcnNpb24gMi40CiBEYW5pZWwgU3RlbmJlcmcKIC0gQWRkZWQgcHJvZ3Jlc3MgbWV0ZXIuIEl0IGFwcGVhcnMgd2hlbiBkb3dubG9hZGluZyA+IEJVRkZFUiBTSVpFIGFuZAogICBtdXRlIGlzIG5vdCBzZWxlY3RlZC4gSSBmb3VuZCBvdXQgdGhhdCB3aGVuIGRvd25sb2FkaW5nIGxhcmdlIGZpbGVzIGZyb20KICAgcmVhbGx5IHJlYWxseSBzbG93IHNpdGVzLCBpdCBpcyBkZXNpcmFibGUgdG8ga25vdyB0aGUgc3RhdHVzIG9mIHRoZQogICBkb3dubG9hZC4gRG8gbm90ZSB0aGF0IHNvbWUgZG93bmxvYWRzIGFyZSBkb25lIHVuYXdhcmluZyBvZiB0aGUgc2l6ZSwgd2hpY2gKICAgbWFrZXMgdGhlIHByb2dyZXNzIG1ldGVyIGxlc3MgdGhyaWxsaW5nIDspIElmIHRoZSBvdXRwdXQgaXMgc2VudCB0byBhIHR0eSwKICAgdGhlIHByb2dyZXNzIG1ldGVyIGlzIHNodXQgb2ZmLgogLSBJbmNyZWFzZWQgYnVmZmVyIHNpemUgdXNlZCBmb3IgcmVhZGluZy4KIC0gQWRkZWQgbGVuZ3RoIGNoZWNrcyBpbiB0aGUgdXNlcitwYXNzd2QgcGFyc2luZy4KIC0gTWFkZSBpdCBncm9rIHVzZXIrcGFzc3dkIGZvciBIVFRQIGZldGNoZXMuIFRoZSB0cmljayBpcyB0byBiYXNlNjQKICAgZW5jb2RlIHRoZSB1c2VyK3Bhc3N3ZCBhbmQgc2VuZCBhbiBleHRyYSBoZWFkZXIgbGluZS4gUmVhZCBjaGFwdGVyIDExLjEgaW4KICAgUkZDMjA2OCBmb3IgZGV0YWlscy4gSSBhZGRlZCBpdCB0byBiZSB1c2VkIGp1c3QgbGlrZSB0aGUgZnRwIG9uZS4gIFRvIGdldCBhCiAgIGh0dHAgZG9jdW1lbnQgZnJvbSBhIHBsYWNlIHRoYXQgcmVxdWlyZXMgdXNlciBhbmQgcGFzc3dvcmQsIHVzZSBhbiBVUkwKICAgbGlrZToKCiAgICAgICAgaHR0cDovL3VzZXI6cGFzc3dkQHd3dy5zaXRlLnRvLmxlYWNoL2RvYy5odG1sCgogICBJIGFsc28gYWRkZWQgdGhlIC11IGZsYWcsIHNpbmNlIFdIRU4gVVNJTkcgQSBQUk9YWSBZT1UgQ0FOJ1QgU1BFQ0lGWSBUSEUKICAgVVNFUiBBTkQgUEFTU1dPUkQgV0lUSCBIVFRQIExJS0UgVEhBVC4gVGhlIC11IGZsYWcgd29ya3MgZm9yIGZ0cCB0b28sIGJ1dAogICBub3QgaWYgdXNlZCB3aXRoIHByb3h5LiBUbyBkbyB0aGUgc2FtZSBhcyB0aGUgYWJvdmUgb25lLCB5b3UgY2FuIGludm9rZToKCiAgICAgICAgdXJsZ2V0IC11IHVzZXI6cGFzc3dkIGh0dHA6Ly93d3cuc2l0ZS50by5sZWFjaC9kb2MuaHRtbAoKVmVyc2lvbiAyLjMKIFJhZmFlbCBTYWd1bGEKIC0gQWRkZWQgIi1vIiBvcHRpb24gKG91dHB1dCBmaWxlKQogLSBBZGRlZCBVUkdfSFRUUF9OT1RfRk9VTkQgcmV0dXJuIGNvZGUuCiAgIChEYW5pZWwncyBub3RlOikKICAgUGVyaGFwcyB3ZSBzaG91bGQgZGV0ZWN0IGFsbCBraW5kcyBvZiBlcnJvcnMgYW5kIGluc3RlYWQgb2Ygd3JpdGluZyB0aGF0CiAgIGN1c3RvbSBzdHJpbmcgZm9yIHRoZSBwYXJ0aWN1bGFyIDQwNC1lcnJvciwgdXNlIHRoZSBlcnJvciB0ZXh0IHdlIGFjdHVhbGx5CiAgIGdldCBmcm9tIHRoZSBzZXJ2ZXIuIFNlZSBmdXJ0aGVyIGRldGFpbHMgaW4gUkZDMjA2OCAoSFRUUCAxLjEKICAgZGVmaW5pdGlvbikuIFRoZSBjdXJyZW50IHdheSBhbHNvIHJlbGllcyBvbiBhIEhUVFAvMS4wIHJlcGx5LCB3aGljaCBuZXdlcgogICBzZXJ2ZXJzIG1pZ2h0IG5vdCBkby4KIC0gTG9vcGluZyBtb2RlICgiLWwiIG9wdGlvbikuIEl0J3MgZWFzaWVyIHRvIGdldCB2YXJpb3VzIHNwbGl0IGZpbGVzLgogICAoRGFuaWVsJ3Mgbm90ZTopCiAgIFVzZSBpdCBsaWtlICd1cmxnZXQgLWwgMSBodHRwOi8vZnJvbS50aGlzLnNpdGUvZmlsZSVkLmh0bWwnLCB3aGljaCB3aWxsCiAgIG1ha2UgdXJsZ2V0IHRvIGF0dGVtcHQgdG8gZmV0Y2ggYWxsIGZpbGVzIG5hbWVkIGZpbGUxLmh0bWwsIGZpbGUyLmh0bWwgZXRjCiAgIHVudGlsIG5vIG1vcmUgZmlsZXMgYXJlIGZvdW5kLiBUaGlzIGlzIG9ubHkgYSBtb2RpZmljYXRpb24gb2YgdGhlCiAgIFNUQU5EX0FMT05FIHBhcnQsIG5vdGhpbmcgaW4gdGhlIHVybGdldCgpIGZ1bmN0aW9uIHdhcyBtb2RmaWZpZWQgZm9yIHRoaXMuCiBEYW5pZWwgU3RlbmJlcmcKIC0gQ2hhbmdlZCB0aGUgLWggdG8gYmUgLWkgaW5zdGVhZC4gLWggc2hvdWxkIGJlIHByZXNlcnZlZCB0byBoZWxwIHVzZS4KIC0gQmpvcm4gUmVlc2UgaW5kaWNhdGVkIHRoYXQgQm9ybGFuZCBfbWlnaHRfIHVzZSAnX1dJTjMyJyBpbnN0ZWFkIG9mIHRoZQogICBWQysrIFdJTjMyIGRlZmluZSBhbmQgdGhlcmVmb3JlIEkgYWRkZWQgYSBsaXR0bGUgZml4IGZvciB0aGF0LgoKVmVyc2lvbiAyLjIKIEpvaGFuIEFuZGVyc3NvbgogLSBUaGUgdXJsZ2V0IGZ1bmN0aW9uIGRpZG4ndCBzZXQgdGhlIHBhdGggdG8gdXJsIHdoZW4gdXNpbmcgcHJveHkuCiAtIEZpeGVkIGJ1ZyB3aXRoIElNQyBwcm94eS4gTm93IHVzaW5nIChhbG1vc3QpIGNvbXBsZXRlIEdFVCBjb21tYW5kLgogIAogRGFuaWVsIFN0ZW5iZXJnCiAtIE1hZGUgaXQgY29tcGlsZSBvbiBTb2xhcmlzLiBIYWQgdG8gcmVvcmdhbml6ZSB0aGUgaW5jbHVkZXMgYSBiaXQuCiAgIChzbyBXaW4zMiwgTGludXgsIFN1bk9TIDQgYW5kIFNvbGFyaXMgMiBjb21waWxlIGZpbmUuKQogLSBNYWRlIEpvaGFuJ3Mga2VlcGFsaXZlIGtleXdvcmQgb3B0aW9uYWwgd2l0aCB0aGUgLWsgZmxhZyAoc2luY2UgaXQKICAgbWFrZXMgYSBsb3Qgb2YgdXJsZ2V0cyB0YWtlIGEgbG90IGxvbmdlciB0aW1lKS4KIC0gTWFkZSBhICctaCcgc3dpdGNoIGluIGNhc2UgeW91IHdhbnQgdGhlIEhUVFAtaGVhZGVyIGluIHRoZSBvdXRwdXQuCgpWZXJzaW9uIDIuMQogRGFuaWVsIFN0ZW5iZXJnIGFuZCBLamVsbCBFcmljc29uCiAtIFdpbjMyLWNvbXBpbGFibGUKIC0gTm8gbW9yZSBnbG9iYWwgdmFyaWFibGVzCiAtIE11dGUgb3B0aW9uIChubyBvdXRwdXQgYXQgYWxsIHRvIHN0ZGVycikKIC0gRnVsbCByYW5nZSBvZiByZXR1cm4gY29kZXMgZnJvbSB1cmxnZXQoKSwgd2hpY2ggaXMgbm93IHdyaXR0ZW4gdG8gYmUgYQogICBmdW5jdGlvbiBmb3IgZWFzeS10by11c2UgaW4gW290aGVyXSBwcm9ncmFtcy4KIC0gRGVmaW5lIFNUQU5EX0FMT05FIHRvIGNvbXBpbGUgdGhlIHN0YW5kIGFsb25lIHVybGdldCBwcm9ncmFtCiAtIE5vdyBjb21waWxlcyB3aXRoIGdjYyBvcHRpb25zIC1hbnNpIC1XYWxsIC1wZWRhbnRpYyA7KQoKVmVyc2lvbiAyLjAKIC0gSW50cm9kdWNpbmcgZnRwIEdFVCBzdXBwb3J0LiBUaGUgRlRQIFVSTCB0eXBlIGlzIHJlY29nbml6ZWQgYW5kIHVzZWQuCiAtIFJlbmFtZWQgdGhlIHByb2plY3QgdG8gJ3VybGdldCcuCiAtIFN1cHBvcnRzIHRoZSB1c2VyK3Bhc3N3ZCBpbiB0aGUgRlRQIFVSTCAob3RoZXJ3aXNlIGl0IHRyaWVzIGFub255bW91cwogICBsb2dpbiB3aXRoIGEgd2VpcmQgZW1haWwgYWRkcmVzcyBhcyBwYXNzd29yZCkuCgpWZXJzaW9uIDEuNQogRGFuaWVsIFN0ZW5iZXJnCiAtIFRoZSBza2lwX2hlYWRlcigpIGNyYXAgbWVzc2VkIGl0IHVwIGJpZy10aW1lLiBCeSBzaW1wbHkgcmVtb3ZpbmcgdGhhdAogICBvbmUgd2UgY2FuIGFsbCBvZiBhIHN1ZGRlbiBkb3dubG9hZCBhbnl0aGluZyA7KQogLSBObyBsb25nZXIgcmVxdWlyZXMgYSB0cmFpbGluZyBzbGFzaCBvbiB0aGUgVVJMcy4KIC0gSWYgdGhlIGdpdmVuIFVSTCBpc24ndCBwcmVmaXhlZCB3aXRoICdodHRwOi8vJywgSFRUUCBpcyBhc3N1bWVkIGFuZAogICBnaXZlbiBhIHRyeSEKIC0gJ3ZvaWQgbWFpbigpJyBpcyBoaXN0b3J5LgoKVmVyc2lvbiAxLjQKIERhbmllbCBTdGVuYmVyZwogLSBUaGUgZ29waGVyIHNvdXJjZSB1c2VkIHRoZSBwcGF0aCB2YXJpYWJsZSBpbnN0ZWFkIG9mIHBhdGggd2hpY2ggY291bGQKICAgbGVhZCB0byBkaXNhc3Rlci4KClZlcnNpb24gMS4zCiBEYW5pZWwgU3RlbmJlcmcKIC0gV2VsbCwgSSBhZGRlZCBhIGxhbWUgdGV4dCBhYm91dCB0aGUgdGltZSBpdCB0b29rIHRvIGdldCB0aGUgZGF0YS4gSSBhbHNvCiAgIGZvdWdodCBhZ2FpbnN0IEpvaGFuIHRvIHByZXZlbnQgaGlzIC1mIG9wdGlvbiAodG8gc3BlY2lmeSBhIGZpbGUgbmFtZQogICB0aGF0IHNob3VsZCBiZSB3cml0dGVuIGluc3RlYWQgb2Ygc3Rkb3V0KSEgPSkKIC0gTWFkZSBpdCB3cml0ZSAnY29ubmVjdGlvbiByZWZ1c2VkJyBmb3IgdGhhdCBwYXJ0aWN1bGFyIGNvbm5lY3QoKQogICBwcm9ibGVtLgogLSBSZW51bWJlcmVkIHRoZSB2ZXJzaW9uLiBMZXQncyBub3QgbWFrZSBzaWxseSAxLjAuWCB2ZXJzaW9ucywgdGhpcyBpcwogICBhIHBsYWluIDEuMyBpbnN0ZWFkLgoKVmVyc2lvbiAxLjIKIEpvaGFuIEFuZGVyc3NvbgogLSBEaXNjb3ZlcmVkIGFuZCBmaXhlZCB0aGUgcHJvYmxlbSB3aXRoIGdldHRpbmcgYmluYXJ5IGZpbGVzLiBwdXRzKCkgaXMKICAgbm93IHJlcGxhY2VkIHdpdGggZndyaXRlKCkuIChEYW5pZWwncyBub3RlOiB0aGlzIGFsc28gZml4ZWQgdGhlIGJ1ZmZlcgogICBvdmVyd3JpdGUgcHJvYmxlbSBJIGZvdW5kIGluIHRoZSBwcmV2aW91cyB2ZXJzaW9uLikKCiBSYWZhZWwgU2FndWxhIDxzYWd1bGFAaW5mLnVmcmdzLmJyPgogLSBMZXQgIi1wIiBiZWZvcmUgIi14Ii4KCiBEYW5pZWwgU3RlbmJlcmcgPERhbmllbC5TdGVuYmVyZ0BzdGguZnJvbnRlYy5zZT4KIC0gQnVnZml4ZWQgdGhlIHByb3h5IHVzYWdlLiBJdCBzaG91bGQgKk5PVCogdXNlIG5vciBzdHJpcCB0aGUgcG9ydCBudW1iZXIKICAgZnJvbSB0aGUgVVJMIGJ1dCBzaW1wbHkgcGFzcyB0aGF0IGluZm9ybWF0aW9uIHRvIHRoZSBwcm94eS4gVGhpcyBhbHNvCiAgIG1hZGUgdGhlIHVzZXIvcGFzc3dvcmQgZmllbGRzIHBvc3NpYmxlIHRvIHVzZSBpbiBwcm94eSBbZnRwLV0gVVJMcy4KICAgKGxpa2UgaW4gZnRwOi8vdXNlcjpwYXNzd29yZEBmdHAubXkuc2l0ZTo4MDIxL1JFQURNRSkKCiBKb2hhbiBBbmRlcnNzb24gPGpvaGFuQGhvbWVtYWlsLmNvbT4KIC0gSW1wbGVtZW50ZWQgSFRUUCBwcm94eSBzdXBwb3J0LgogLSBSZWNlaXZlIGJ5dGUgY291bnRlciBhZGRlZC4KCiBCam9ybiBSZWVzZSA8YnJlZXNlQGltYWRhLm91LmRrPgogLSBJbXBsZW1lbnRlZCBVUkxzIChhbmQgc2tpcHBlZCB0aGUgb2xkIHN5bnRheCkuCiAtIE91dHB1dCBpcyB3cml0dGVuIHRvIHN0ZG91dCwgc28gdG8gYWNoaWV2ZSB0aGUgYWJvdmUgZXhhbXBsZSwgZG86CiAgIGh0dHBnZXQgaHR0cDovLzE0My41NC4xMC42L2luZm9fbG9nby5naWYgPiB0ZXN0LmdpZgoKVmVyc2lvbiAxLjEKIERhbmllbCBTdGVuYmVyZyA8RGFuaWVsLlN0ZW5iZXJnQHN0aC5mcm9udGVjLnNlPgogLSBBZGp1c3RlZCBpdCBzbGlnaHRseSB0byBhY2NlcHQgbmFtZWQgaG9zdHMgb24gdGhlIGNvbW1hbmQgbGluZS4gV2UKICAgd291bGRuJ3Qgd2FubmEgdXNlIElQIG51bWJlcnMgZm9yIHRoZSByZXN0IG9mIG91ciBsaWZlcywgd291bGQgd2U/CgpWZXJzaW9uIDEuMAogIFJhZmFlbCBTYWd1bGEgPHNhZ3VsYUBpbmYudWZyZ3MuYnI+CiAgLSBXcm90ZSB0aGUgaW5pdGlhbCBodHRwZ2V0LCB3aGljaCBzdGFydGVkIGFsbCB0aGlzIQo=