CiRJZCQKTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgoKCQkJICAgIHB2cnVzYjIgZHJpdmVyCgpCYWNrZ3JvdW5kOgoKICBUaGlzIGRyaXZlciBpcyBpbnRlbmRlZCBmb3IgdGhlICJIYXVwcGF1Z2UgV2luVFYgUFZSIFVTQiAyLjAiLCB3aGljaAogIGlzIGEgVVNCIDIuMCBob3N0ZWQgVFYgVHVuZXIuICBUaGlzIGRyaXZlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MuCiAgSXRzIGhpc3Rvcnkgc3RhcnRlZCB3aXRoIHRoZSByZXZlcnNlLWVuZ2luZWVyaW5nIGVmZm9ydCBieSBCavZybgogIERhbmllbHNzb24gPHB2cnVzYjJAZGF4Lm51PiB3aG9zZSB3ZWIgcGFnZSBjYW4gYmUgZm91bmQgaGVyZToKCiAgICBodHRwOi8vcHZydXNiMi5kYXgubnUvCgogIEZyb20gdGhlcmUgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4gYmVnYW4gYW4gZWZmb3J0IHRvCiAgY3JlYXRlIGEgdmlkZW80bGludXggY29tcGF0aWJsZSBkcml2ZXIuICBJIGJlZ2FuIHdpdGggQXVyZWxpZW4ncwogIGxhc3Qga25vd24gc25hcHNob3QgYW5kIGV2b2x2ZWQgdGhlIGRyaXZlciB0byB0aGUgc3RhdGUgaXQgaXMgaW4KICBoZXJlLgoKICBNb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKCiAgICBodHRwOi8vd3d3LmlzZWx5Lm5ldC9wdnJ1c2IyLmh0bWwKCgogIFRoaXMgZHJpdmVyIGhhcyBhIHN0cm9uZyBzZXBhcmF0aW9uIG9mIGxheWVycy4gIFRoZXkgYXJlIHZlcnkKICByb3VnaGx5OgoKICAxYS4gTG93IGxldmVsIHdpcmUtcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gd2l0aCB0aGUgZGV2aWNlLgoKICAxYi4gSTJDIGFkYXB0b3IgaW1wbGVtZW50YXRpb24gYW5kIGNvcnJlc3BvbmRpbmcgSTJDIGNsaWVudCBkcml2ZXJzCiAgICAgIGltcGxlbWVudGVkIGVsc2V3aGVyZSBpbiBWNEwuCgogIDFjLiBIaWdoIGxldmVsIGhhcmR3YXJlIGRyaXZlciBpbXBsZW1lbnRhdGlvbiB3aGljaCBjb29yZGluYXRlcyBhbGwKICAgICAgYWN0aXZpdGllcyB0aGF0IGVuc3VyZSBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgZGV2aWNlLgoKICAyLiAgQSAiY29udGV4dCIgbGF5ZXIgd2hpY2ggbWFuYWdlcyBpbnN0YW5jaW5nIG9mIGRyaXZlciwgc2V0dXAsCiAgICAgIHRlYXItZG93biwgYXJiaXRyYXRpb24sIGFuZCBpbnRlcmFjdGlvbiB3aXRoIGhpZ2ggbGV2ZWwKICAgICAgaW50ZXJmYWNlcyBhcHByb3ByaWF0ZWx5IGFzIGRldmljZXMgYXJlIGhvdHBsdWdnZWQgaW4gdGhlCiAgICAgIHN5c3RlbS4KCiAgMy4gIEhpZ2ggbGV2ZWwgaW50ZXJmYWNlcyB3aGljaCBnbHVlIHRoZSBkcml2ZXIgdG8gdmFyaW91cyBwdWJsaXNoZWQKICAgICAgTGludXggQVBJcyAoVjRMLCBzeXNmcywgbWF5YmUgRFZCIGluIHRoZSBmdXR1cmUpLgoKICBUaGUgbW9zdCBpbXBvcnRhbnQgc2hlYXJpbmcgbGF5ZXIgaXMgYmV0d2VlbiB0aGUgdG9wIDIgbGF5ZXJzLiAgQQogIGxvdCBvZiB3b3JrIHdlbnQgaW50byB0aGUgZHJpdmVyIHRvIGVuc3VyZSB0aGF0IGFueSBraW5kIG9mCiAgY29uY2VpdmFibGUgQVBJIGNhbiBiZSBsYWlkIG9uIHRvcCBvZiB0aGUgY29yZSBkcml2ZXIuICAoWWVzLCB0aGUKICBkcml2ZXIgaW50ZXJuYWxseSBsZXZlcmFnZXMgVjRMIHRvIGRvIGl0cyB3b3JrIGJ1dCB0aGF0IHJlYWxseSBoYXMKICBub3RoaW5nIHRvIGRvIHdpdGggdGhlIEFQSSBwdWJsaXNoZWQgYnkgdGhlIGRyaXZlciB0byB0aGUgb3V0c2lkZQogIHdvcmxkLikgIFRoZSBhcmNoaXRlY3R1cmUgYWxsb3dzIGZvciBkaWZmZXJlbnQgQVBJcyB0bwogIHNpbXVsdGFuZW91c2x5IGFjY2VzcyB0aGUgZHJpdmVyLiAgSSBoYXZlIGEgc3Ryb25nIHNlbnNlIG9mIGZhaXJuZXNzCiAgYWJvdXQgQVBJcyBhbmQgYWxzbyBmZWVsIHRoYXQgaXQgaXMgYSBnb29kIGRlc2lnbiBwcmluY2lwbGUgdG8ga2VlcAogIGltcGxlbWVudGF0aW9uIGFuZCBpbnRlcmZhY2UgaXNvbGF0ZWQgZnJvbSBlYWNoIG90aGVyLiAgVGh1cyB3aGlsZQogIHJpZ2h0IG5vdyB0aGUgVjRMIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlIGlzIHRoZSBtb3N0IGNvbXBsZXRlLCB0aGUKICBzeXNmcyBoaWdoIGxldmVsIGludGVyZmFjZSB3aWxsIHdvcmsgZXF1YWxseSB3ZWxsIGZvciBzaW1pbGFyCiAgZnVuY3Rpb25zLCBhbmQgdGhlcmUncyBubyByZWFzb24gSSBzZWUgcmlnaHQgbm93IHdoeSBpdCBzaG91bGRuJ3QgYmUKICBwb3NzaWJsZSB0byBwcm9kdWNlIGEgRFZCIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlIHRoYXQgY2FuIHNpdCByaWdodAogIGFsb25nc2lkZSBWNEwuCgogIE5PVEU6IENvbXBsZXRlIGRvY3VtZW50YXRpb24gb24gdGhlIHB2cnVzYjIgZHJpdmVyIGlzIGNvbnRhaW5lZCBpbgogIHRoZSBodG1sIGZpbGVzIHdpdGhpbiB0aGUgZG9jIGRpcmVjdG9yeTsgdGhlc2UgYXJlIGV4YWN0bHkgdGhlIHNhbWUKICBhcyB3aGF0IGlzIG9uIHRoZSB3ZWIgc2l0ZSBhdCB0aGUgdGltZS4gIEJyb3dzZSB0aG9zZSBmaWxlcwogIChlc3BlY2lhbGx5IHRoZSBGQVEpIGJlZm9yZSBhc2tpbmcgcXVlc3Rpb25zLgoKCkJ1aWxkaW5nCgogIFRvIGJ1aWxkIHRoZXNlIG1vZHVsZXMgZXNzZW50aWFsbHkgYW1vdW50cyB0byBqdXN0IHJ1bm5pbmcgIk1ha2UiLAogIGJ1dCB5b3UgbmVlZCB0aGUga2VybmVsIHNvdXJjZSB0cmVlIG5lYXJieSBhbmQgeW91IHdpbGwgbGlrZWx5IGFsc28KICB3YW50IHRvIHNldCBhIGZldyBjb250cm9sbGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZmlyc3QgaW4gb3JkZXIKICB0byBsaW5rIHRoaW5ncyB1cCB3aXRoIHRoYXQgc291cmNlIHRyZWUuICBQbGVhc2Ugc2VlIHRoZSBNYWtlZmlsZQogIGhlcmUgZm9yIGNvbW1lbnRzIHRoYXQgZXhwbGFpbiBob3cgdG8gZG8gdGhhdC4KCgpTb3VyY2UgZmlsZSBsaXN0IC8gZnVuY3Rpb25hbCBvdmVydmlldzoKCiAgKE5vdGU6IFRoZSB0ZXJtICJtb2R1bGUiIHVzZWQgYmVsb3cgZ2VuZXJhbGx5IHJlZmVycyB0byBsb29zZWx5CiAgZGVmaW5lZCBmdW5jdGlvbmFsIHVuaXRzIHdpdGhpbiB0aGUgcHZydXNiMiBkcml2ZXIgYW5kIGJlYXJzIG5vCiAgcmVsYXRpb24gdG8gdGhlIExpbnV4IGtlcm5lbCdzIGNvbmNlcHQgb2YgYSBsb2FkYWJsZSBtb2R1bGUuKQoKICBwdnJ1c2IyLWF1ZGlvLltjaF0gLSBUaGlzIGlzIGdsdWUgbG9naWMgdGhhdCByZXNpZGVzIGJldHdlZW4gdGhpcwogICAgZHJpdmVyIGFuZCB0aGUgbXNwMzQwMC5rbyBJMkMgY2xpZW50IGRyaXZlciAod2hpY2ggaXMgZm91bmQKICAgIGVsc2V3aGVyZSBpbiBWNEwpLgoKICBwdnJ1c2IyLWNvbnRleHQuW2NoXSAtIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIGNvbnRleHQgZm9yIGFuCiAgICBpbnN0YW5jZSBvZiB0aGUgZHJpdmVyLiAgRXZlcnl0aGluZyBlbHNlIGV2ZW50dWFsbHkgdGllcyBiYWNrIHRvCiAgICBvciBpcyBvdGhlcndpc2UgaW5zdGFuY2VkIHdpdGhpbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGltcGxlbWVudGVkCiAgICBoZXJlLiAgSG90cGx1Z2dpbmcgaXMgdWx0aW1hdGVseSBjb29yZGluYXRlZCBoZXJlLiAgQWxsIGhpZ2ggbGV2ZWwKICAgIGludGVyZmFjZXMgdGllIGludG8gdGhlIGRyaXZlciB0aHJvdWdoIHRoaXMgbW9kdWxlLiAgVGhpcyBtb2R1bGUKICAgIGhlbHBzIGFyYml0cmF0ZSBlYWNoIGludGVyZmFjZSdzIGFjY2VzcyB0byB0aGUgYWN0dWFsIGRyaXZlciBjb3JlLAogICAgYW5kIGlzIGRlc2lnbmVkIHRvIGFsbG93IGNvbmN1cnJlbnQgYWNjZXNzIHRocm91Z2ggbXVsdGlwbGUKICAgIGluc3RhbmNlcyBvZiBtdWx0aXBsZSBpbnRlcmZhY2VzICh0aHVzIHlvdSBjYW4gZm9yIGV4YW1wbGUgY2hhbmdlCiAgICB0aGUgdHVuZXIncyBmcmVxdWVuY3kgdGhyb3VnaCBzeXNmcyB3aGlsZSBzaW11bHRhbmVvdXNseSBzdHJlYW1pbmcKICAgIHZpZGVvIHRocm91Z2ggVjRMIG91dCB0byBhbiBpbnN0YW5jZSBvZiBtcGxheWVyKS4KCiAgcHZydXNiMi1kZWJ1Zy5oIC0gVGhpcyBoZWFkZXIgZGVmaW5lcyBhIHByaW50aygpIHdyYXBwZXIgYW5kIGEgbWFzawogICAgb2YgZGVidWdnaW5nIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIHZhcmlvdXMga2luZHMgb2YgZGVidWcKICAgIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIGVuYWJsZWQgd2l0aGluIHRoZSBkcml2ZXIuCgogIHB2cnVzYjItZGVidWdpZmMuW2NoXSAtIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBjcnVkZSBjb21tYW5kIGxpbmUKICAgIG9yaWVudGVkIGRlYnVnIGludGVyZmFjZSBpbnRvIHRoZSBkcml2ZXIuICBBc2lkZSBmcm9tIGJlaW5nIHBhcnQKICAgIG9mIHRoZSBwcm9jZXNzIGZvciBpbXBsZW1lbnRpbmcgbWFudWFsIGZpcm13YXJlIGV4dHJhY3Rpb24gKHNlZQogICAgdGhlIHB2cnVzYjIgd2ViIHNpdGUgbWVudGlvbmVkIGVhcmxpZXIpLCBwcm9iYWJseSBJJ20gdGhlIG9ubHkgb25lCiAgICB3aG8gaGFzIGV2ZXIgdXNlZCB0aGlzLiAgSXQgaXMgbWFpbmx5IGEgZGVidWdnaW5nIGFpZC4KCiAgcHZydXNiMi1lZXByb20uW2NoXSAtIFRoaXMgaXMgZ2x1ZSBsb2dpYyB0aGF0IHJlc2lkZXMgYmV0d2VlbiB0aGlzCiAgICBkcml2ZXIgdGhlIHR2ZWVwcm9tLmtvIG1vZHVsZSwgd2hpY2ggaXMgaXRzZWxmIGltcGxlbWVudGVkCiAgICBlbHNld2hlcmUgaW4gVjRMLgoKICBwdnJ1c2IyLWVuY29kZXIuW2NoXSAtIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYWxsIHByb3RvY29sIG5lZWRlZCB0bwogICAgaW50ZXJhY3Qgd2l0aCB0aGUgQ29uZXhhbnQgbXBlZzIgZW5jb2RlciBjaGlwIHdpdGhpbiB0aGUgcHZydXNiMgogICAgZGV2aWNlLiAgSXQgaXMgYSBjcnVkZSBlY2hvIG9mIGNvcnJlc3BvbmRpbmcgbG9naWMgaW4gaXZ0diwKICAgIGhvd2V2ZXIgdGhlIGRlc2lnbiBnb2FscyAoc3RyaWN0IGlzb2xhdGlvbikgYW5kIHBoeXNpY2FsIGxheWVyCiAgICAocHJveHkgdGhyb3VnaCBVU0IgaW5zdGVhZCBvZiBQQ0kpIGFyZSBlbm91Z2ggZGlmZmVyZW50IHRoYXQgdGhpcwogICAgaW1wbGVtZW50YXRpb24gaGFkIHRvIGJlIGNvbXBsZXRlbHkgZGlmZmVyZW50LgoKICBwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIC0gVGhpcyBoZWFkZXIgZGVmaW5lcyB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZQogICAgaW4gdGhlIGRyaXZlciB1c2VkIHRvIHRyYWNrIEFMTCBpbnRlcm5hbCBzdGF0ZSByZWxhdGVkIHRvIGNvbnRyb2wKICAgIG9mIHRoZSBoYXJkd2FyZS4gIE5vYm9keSBvdXRzaWRlIG9mIHRoZSBjb3JlIGhhcmR3YXJlLWhhbmRsaW5nCiAgICBtb2R1bGVzIHNob3VsZCBoYXZlIGFueSBidXNpbmVzcyB1c2luZyB0aGlzIGhlYWRlci4gIEFsbCBleHRlcm5hbAogICAgYWNjZXNzIHRvIHRoZSBkcml2ZXIgc2hvdWxkIGJlIHRocm91Z2ggb25lIG9mIHRoZSBoaWdoIGxldmVsCiAgICBpbnRlcmZhY2VzIChlLmcuIFY0TCwgc3lzZnMsIGV0YyksIGFuZCBpbiBmYWN0IGV2ZW4gdGhvc2UgaGlnaAogICAgbGV2ZWwgaW50ZXJmYWNlcyBhcmUgcmVzdHJpY3RlZCB0byB0aGUgQVBJIGRlZmluZWQgaW4KICAgIHB2cnVzYjItaGR3LmggYW5kIE5PVCB0aGlzIGhlYWRlci4KCiAgcHZydXNiMi1oZHcuaCAtIFRoaXMgaGVhZGVyIGRlZmluZXMgdGhlIGZ1bGwgaW50ZXJuYWwgQVBJIGZvcgogICAgY29udHJvbGxpbmcgdGhlIGhhcmR3YXJlLiAgSGlnaCBsZXZlbCBpbnRlcmZhY2VzIChlLmcuIFY0TCwgc3lzZnMpCiAgICB3aWxsIHdvcmsgdGhyb3VnaCBoZXJlLgoKICBwdnJ1c2IyLWhkdy5jIC0gVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhbGwgdGhlIHZhcmlvdXMgYml0cyBvZiBsb2dpYwogICAgdGhhdCBoYW5kbGUgb3ZlcmFsbCBjb250cm9sIG9mIGEgc3BlY2lmaWMgcHZydXNiMiBkZXZpY2UuCiAgICAoUG9saWN5LCBpbnN0YW50aWF0aW9uLCBhbmQgYXJiaXRyYXRpb24gb2YgcHZydXNiMiBkZXZpY2VzIGZhbGwKICAgIHdpdGhpbiB0aGUganVyaXNkaWN0aW9uIG9mIHB2cnVzYi1jb250ZXh0IG5vdCBoZXJlKS4KCiAgcHZydXNiMi1pMmMtY2hpcHMtKi5jIC0gVGhlc2UgbW9kdWxlcyBpbXBsZW1lbnQgdGhlIGdsdWUgbG9naWMgdG8KICAgIHRpZSB0b2dldGhlciBhbmQgY29uZmlndXJlIHZhcmlvdXMgSTJDIG1vZHVsZXMgYXMgdGhleSBhdHRhY2ggdG8KICAgIHRoZSBJMkMgYnVzLiAgVGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUuICBUaGUgInY0bDIiCiAgICB2ZXJzaW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4tdHJlZSBhbG9uZ3NpZGUgVjRMLCB3aGVyZSB3ZQogICAgaW1wbGVtZW50IGp1c3QgdGhlIGxvZ2ljIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIGEgcHVyZSBWNEwKICAgIGVudmlyb25tZW50LiAgVGhlICJhbGwiIHZlcnNpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIG9mCiAgICBWNEwsIHdoZXJlIHdlIG1pZ2h0IGVuY291bnRlciBvdGhlciBwb3NzaWJseSAiY2hhbGxlbmdpbmciIG1vZHVsZXMKICAgIGZyb20gaXZ0diBvciBvbGRlciBrZXJuZWwgc25hcHNob3RzIChvciBldmVuIHRoZSBzdXBwb3J0IG1vZHVsZXMKICAgIGluIHRoZSBzdGFuZGFsb25lIHNuYXBzaG90KS4KCiAgcHZydXNiMi1pMmMtY21kLXY0bDEuW2NoXSAtIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgZ2VuZXJpYyBWNEwxCiAgICBjb21wYXRpYmxlIGNvbW1hbmRzIHRvIHRoZSBJMkMgbW9kdWxlcy4gIEl0IGlzIGhlcmUgd2hlcmUgc3RhdGUKICAgIGNoYW5nZXMgaW5zaWRlIHRoZSBwdnJ1c2IyIGRyaXZlciBhcmUgdHJhbnNsYXRlZCBpbnRvIFY0TDEKICAgIGNvbW1hbmRzIHRoYXQgYXJlIGluIHR1cm4gc2VuZCB0byB0aGUgdmFyaW91cyBJMkMgbW9kdWxlcy4KCiAgcHZydXNiMi1pMmMtY21kLXY0bDIuW2NoXSAtIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgZ2VuZXJpYyBWNEwyCiAgICBjb21wYXRpYmxlIGNvbW1hbmRzIHRvIHRoZSBJMkMgbW9kdWxlcy4gIEl0IGlzIGhlcmUgd2hlcmUgc3RhdGUKICAgIGNoYW5nZXMgaW5zaWRlIHRoZSBwdnJ1c2IyIGRyaXZlciBhcmUgdHJhbnNsYXRlZCBpbnRvIFY0TDIKICAgIGNvbW1hbmRzIHRoYXQgYXJlIGluIHR1cm4gc2VuZCB0byB0aGUgdmFyaW91cyBJMkMgbW9kdWxlcy4KCiAgcHZydXNiMi1pMmMtY29yZS5bY2hdIC0gVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYQogICAga2VybmVsLWZyaWVuZGx5IEkyQyBhZGFwdG9yIGRyaXZlciwgdGhyb3VnaCB3aGljaCBvdGhlciBleHRlcm5hbAogICAgSTJDIGNsaWVudCBkcml2ZXJzIChlLmcuIG1zcDM0MDAsIHR1bmVyLCBsaXJjKSBtYXkgY29ubmVjdCBhbmQKICAgIG9wZXJhdGUgY29ycmVzcG9uZGluZyBjaGlwcyB3aXRoaW4gdGhlIHRoZSBwdnJ1c2IyIGRldmljZS4gIEl0IGlzCiAgICB0aHJvdWdoIGhlcmUgdGhhdCBvdGhlciBWNEwgbW9kdWxlcyBjYW4gcmVhY2ggaW50byB0aGlzIGRyaXZlciB0bwogICAgb3BlcmF0ZSBzcGVjaWZpYyBwaWVjZXMgKGFuZCB0aG9zZSBtb2R1bGVzIGFyZSBpbiB0dXJuIGRyaXZlbiBieQogICAgZ2x1ZSBsb2dpYyB3aGljaCBpcyBjb29yZGluYXRlZCBieSBwdnJ1c2IyLWhkdywgZG9sZWQgb3V0IGJ5CiAgICBwdnJ1c2IyLWNvbnRleHQsIGFuZCB0aGVuIHVsdGltYXRlbHkgbWFkZSBhdmFpbGFibGUgdG8gdXNlcnMKICAgIHRocm91Z2ggb25lIG9mIHRoZSBoaWdoIGxldmVsIGludGVyZmFjZXMpLgoKICBwdnJ1c2IyLWlvLltjaF0gLSBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgdmVyeSBsb3cgbGV2ZWwgcmluZyBvZgogICAgdHJhbnNmZXIgYnVmZmVycywgcmVxdWlyZWQgaW4gb3JkZXIgdG8gc3RyZWFtIGRhdGEgZnJvbSB0aGUKICAgIGRldmljZS4gIFRoaXMgbW9kdWxlIGlzICp2ZXJ5KiBsb3cgbGV2ZWwuICBJdCBvbmx5IG9wZXJhdGVzIHRoZQogICAgYnVmZmVycyBhbmQgbWFrZXMgbm8gYXR0ZW1wdCB0byBkZWZpbmUgYW55IHBvbGljeSBvciBtZWNoYW5pc20gZm9yCiAgICBob3cgc3VjaCBidWZmZXJzIG1pZ2h0IGJlIHVzZWQuCgogIHB2cnVzYjItaW9yZWFkLltjaF0gLSBUaGlzIG1vZHVsZSBsYXllcnMgb24gdG9wIG9mIHB2cnVzYjItaW8uW2NoXQogICAgdG8gcHJvdmlkZSBhIHN0cmVhbWluZyBBUEkgdXNhYmxlIGJ5IGEgcmVhZCgpIHN5c3RlbSBjYWxsIHN0eWxlIG9mCiAgICBJL08uICBSaWdodCBub3cgdGhpcyBpcyB0aGUgb25seSBsYXllciBvbiB0b3Agb2YgcHZydXNiMi1pby5bY2hdLAogICAgaG93ZXZlciB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgaGVyZSB3YXMgaW50ZW5kZWQgdG8gYWxsb3cgZm9yCiAgICBvdGhlciBzdHlsZXMgb2YgSS9PIHRvIGJlIGltcGxlbWVudGVkIHdpdGggYWRkaXRvbmFsIG1vZHVsZXMsIGxpa2UKICAgIG1tYXAoKSdlZCBidWZmZXJzIG9yIHNvbWV0aGluZyBldmVuIG1vcmUgZXhvdGljLgoKICBwdnJ1c2IyLW1haW4uYyAtIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBvZiB0aGUgZHJpdmVyLiAgTW9kdWxlIGxldmVsCiAgICBhbmQgVVNCIGNvcmUgZW50cnkgcG9pbnRzIGFyZSBoZXJlLiAgVGhpcyBpcyBvdXIgIm1haW4iLgoKICBwdnJ1c2IyLXN5c2ZzLltjaF0gLSBUaGlzIGlzIHRoZSBoaWdoIGxldmVsIGludGVyZmFjZSB3aGljaCB0aWVzIHRoZQogICAgcHZydXNiMiBkcml2ZXIgaW50byBzeXNmcy4gIFRocm91Z2ggdGhpcyBpbnRlcmZhY2UgeW91IGNhbiBkbwogICAgZXZlcnl0aGluZyB3aXRoIHRoZSBkcml2ZXIgZXhjZXB0IGFjdHVhbGx5IHN0cmVhbSBkYXRhLgoKICBwdnJ1c2IyLXR1bmVyLltjaF0gLSBUaGlzIGlzIGdsdWUgbG9naWMgdGhhdCByZXNpZGVzIGJldHdlZW4gdGhpcwogICAgZHJpdmVyIGFuZCB0aGUgdHVuZXIua28gSTJDIGNsaWVudCBkcml2ZXIgKHdoaWNoIGlzIGZvdW5kCiAgICBlbHNld2hlcmUgaW4gVjRMKS4KCiAgcHZydXNiMi11dGlsLmggLSBUaGlzIGhlYWRlciBkZWZpbmVzIHNvbWUgY29tbW9uIG1hY3JvcyB1c2VkCiAgICB0aHJvdWdob3V0IHRoZSBkcml2ZXIuICBUaGVzZSBtYWNyb3MgYXJlIG5vdCByZWFsbHkgc3BlY2lmaWMgdG8KICAgIHRoZSBkcml2ZXIsIGJ1dCB0aGV5IGhhZCB0byBnbyBzb21ld2hlcmUuCgogIHB2cnVzYjItdjRsMi5bY2hdIC0gVGhpcyBpcyB0aGUgaGlnaCBsZXZlbCBpbnRlcmZhY2Ugd2hpY2ggdGllcyB0aGUKICAgIHB2cnVzYjIgZHJpdmVyIGludG8gdmlkZW80bGludXguICBJdCBpcyB0aHJvdWdoIGhlcmUgdGhhdCBWNEwKICAgIGFwcGxpY2F0aW9ucyBjYW4gb3BlbiBhbmQgb3BlcmF0ZSB0aGUgZHJpdmVyIGluIHRoZSB1c3VhbCBWNEwKICAgIHdheXMuICBOb3RlIHRoYXQgKipBTEwqKiBWNEwgZnVuY3Rpb25hbGl0eSBpcyBwdWJsaXNoZWQgb25seQogICAgdGhyb3VnaCBoZXJlIGFuZCBub3doZXJlIGVsc2UuCgogIHB2cnVzYjItdmlkZW8tKi5bY2hdIC0gVGhpcyBpcyBnbHVlIGxvZ2ljIHRoYXQgcmVzaWRlcyBiZXR3ZWVuIHRoaXMKICAgIGRyaXZlciBhbmQgdGhlIHNhYTcxMXgua28gSTJDIGNsaWVudCBkcml2ZXIgKHdoaWNoIGlzIGZvdW5kCiAgICBlbHNld2hlcmUgaW4gVjRMKS4gIE5vdGUgdGhhdCBzYWE3MTF4LmtvIHVzZWQgdG8gYmUga25vd24gYXMKICAgIHNhYTcxMTUua28gaW4gaXZ0di4gIFRoZXJlIGFyZSB0d28gdmVyc2lvbnMgb2YgdGhpczsgb25lIGlzCiAgICBzZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgc2FhNzExWzV4XS5rbyB0aGF0IGlzIGZvdW5kLgoKICBwdnJ1c2IyLmggLSBUaGlzIGhlYWRlciBjb250YWlucyBjb21waWxlIHRpbWUgdHVuYWJsZSBwYXJhbWV0ZXJzCiAgICAoYW5kIGF0IHRoZSBtb21lbnQgdGhlIGRyaXZlciBoYXMgdmVyeSBsaXR0bGUgdGhhdCBuZWVkcyB0byBiZQogICAgdHVuZWQpLgoKCiAgLU1pa2UgSXNlbHkKICBpc2VseUBwb2JveC5jb20KCg==