ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBiOWRkNDQ2Li4xMGU0YTk2IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDU1OTggKzEsMTEwMSBAQAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS41OgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorY29tbWl0IDdhZGUwYzYzNGE5NzljMzJmYTkxYTc0ZThmNTc3NWYyNDY1MWZiZTYKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDE4OjA2OjQ4IDIwMDYgKzAyMDAKIAotKiBGaXggc2VxdW9pYSBzZXBhcmF0ZSBvYmplY3QgZGlyZWNvcnkgYnVpbGRpbmcgcHJvYmxlbXMuCisgICAgRml4IGJ1ZyBpbiBQUEM0NDAgTkFORCBkcml2ZXIgY3B1L3BwYzR4eC9uZGZjLmMKKyAgICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IE9jdCAyMDA2CiAKLSogRml4IGJ1ZyBpbiBQUEM0NDAgTkFORCBkcml2ZXIgY3B1L3BwYzR4eC9uZGZjLmMKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNCBPY3QgMjAwNgorY29tbWl0IDhhZTNiNzEzYjIyODZlMGMzMjEzYjc4MDIwNjJlNGMxNTk5MDEwZGUKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+CitEYXRlOiAgIFR1ZSBPY3QgMjQgMTc6MjQ6NTUgMjAwNiArMDIwMAogCi0qIENsZWFudXAgY29tcGlsZSB3YXJuaW5ncy4gUHJlcGFyZSBmb3IgcmVsZWFzZSAxLjEuNQorICAgIE1lcmdlIHdpdGggL2hvbWUvd2QvZ2l0L3UtYm9vdC9tYXN0ZXIKIAotKiBGaXggY29tcGlsZSBwcm9ibGVtIGluIGluY2x1ZGUvY29uZmlncy9lcDgyeHhtLmgKLSAgKG11c3QgaGF2ZSBuZXZlciBiZWVuIHRlc3RlZCBiZWZvcmUhKQorY29tbWl0IDQ3YTY5ODljMTA2ODVkMmFiM2VmY2Y5NTIyOGNlNTBkMmE0OTZkM2UKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+CitEYXRlOiAgIFR1ZSBPY3QgMjQgMTU6MzI6NTcgMjAwNiArMDIwMAogCi0qIE1DQzIwMDogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcHJvYmxlbSBpbiBMQ0QgZHJpdmVyCisgICAgQ29kZSBjbGVhbnVwCiAKLSogQWRkIGJvYXJkL2NwdSBzcGVjaWZpYyBOQU5EIGNoaXAgc2VsZWN0IGZ1bmN0aW9uIHRvIDQ0MCBOREZDCi0gIEJhc2VkIG9uIGlkZWEgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gSmVmZiBNYW5uCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDYKK2NvbW1pdCAzYTc4ZTNlNzViNjMzZWNiNjQxMzExNGZmZDExZTJmMDAwYzRmMTFlCitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDE0OjUxOjM2IDIwMDYgKzAyMDAKIAotKiBNYWtlIDR4eCBib290dXAgbWVzc2FnZSBzaG9ydGVyIG9uIDQ0MEVQeC9HUnggcGxhdGZvcm1zCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggT2N0IDIwMDYKKyAgICBNb3ZlIGF0c3RrMTAwMCBmaWxlcyBpbnRvIHZlbmRvciBzcGVjaWZpYyBkaXJlY3RvcnkuCisgICAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAxMiBTZXAgMjAwNgogCi0qIEFkZCAocHJlbGltaW5hcnkpIHN1cHBvcnQgZm9yIFYzOEIgYm9hcmQKK2NvbW1pdCA2Y2NlYzQ0OTJlNzc0MjhmZDZlYWZkM2RmZTk0ZmJkZjA4ZTkxZDM3CitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDE0OjQyOjM3IDIwMDYgKzAyMDAKIAotKiBQUEM0MDVFUDogQWRkIHN1cHBvcnQgZm9yIGJvYXJkIGNvbmZpZ3VyYXRpb24gb2YgQ1BDMF9QQ0kgcmVnaXN0ZXIKLSAgVGhpcyBpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBjb25maWd1cmUgUGVyV0UqL1BDSV9JTlQqIHBpbiBhcyBQZXJXRSoKLSAgUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDcgQXByIDIwMDYKKyAgICBBZGQgQVRTVEsxMDAwIGFuZCBBVFNUSzEwMDIgYm9hcmQgc3VwcG9ydAorICAgIFBhdGNoIGJ5IEhhYXZhcmQgU2tpbm5lbW9lbiwgMDYgU2VwIDIwMDYKKyAgICAKKyAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFUU1RLMTAwMCB3aXRoIHRoZSBBVFNUSzEwMDIgQ1BVCisgICAgZGF1Z2h0ZXJib2FyZC4KKyAgICAKKyAgICBBVFNUSzEwMDAgaXMgYSBmdWxsLWZlYXR1cmVkIGRldmVsb3BtZW50IGJvYXJkIGZvciBBVDMyQVAgQ1BVcy4gSXQKKyAgICBoYXMgdHdvIGV0aGVybmV0IHBvcnRzLCBhIGhpZ2ggcXVhbGl0eSBRVkdBIExDRCBwYW5lbCwgYSBsb3Vkc3BlYWtlciwKKyAgICBhbmQgY29ubmVjdG9ycyBmb3IgVVNBUlQsIFBTLzIsIFZHQSwgVVNCLCBNTUMvU0QgY2FyZHMgYW5kCisgICAgQ29tcGFjdEZsYXNoIGNhcmRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGlzIHBhZ2U6CisgICAgCisgICAgaHR0cDovL3d3dy5hdG1lbC5jb20vZHluL3Byb2R1Y3RzL3Rvb2xzLmFzcD9mYW1pbHlfaWQ9NjgyCisgICAgCisgICAgVGhlIEFUU1RLMTAwMiBpcyBhIGRhdWdodGVyYm9hcmQgZm9yIHRoZSBBVFNUSzEwMDAgc3VwcG9ydGluZyB0aGUKKyAgICBBVDMyQVA3MDAwIGNoaXAuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CiAKLSogUFBDNDA1RVA6IEFkZCBDRkdfR1BJTzBfT1IsIENGR19HUElPMF9PRFIgdG8gc2V0dXAgR1BJTyBjb21wbGV0ZWx5LgotICAtIEFkZCBjb25maWd1cmF0aW9uIG9mIE9wZW4gRHJhaW4gR1BJTyBPdXRwdXQgc2VsZWN0aW9uCi0gIC0gQWRkIGNvbmZpZ3VyYXRpb24gb2YgaW5pdGlhbCB2YWx1ZSBvZiBHUElPIG91dHB1dCBwaW5zCi0gIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDA3IEFwciAyMDA2Citjb21taXQgZjkzYWU3ODhjMzY0MGZjZGU1ZGIzODM0NzFkNDU1NDhmZjQwNjBkMAorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBwb2xsdXguZGVueC5kZT4KK0RhdGU6ICAgVHVlIE9jdCAyNCAxNDozMToyNCAyMDA2ICswMjAwCiAKLSogRml4IHNwZWxsaW5nOyBtaW5vciBjb2RlIGNsZWFudXAuCisgICAgQWRkIGNvbW1vbiBzZXJpYWwgZHJpdmVyIGZvciBBdG1lbCBBVDMyIGFuZCBBVDkxIGNoaXBzCisgICAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAwNiBTZXAgMjAwNgorICAgIAorICAgIFRoaXMgaXMgYSBmaXJzdCBhdHRlbXB0IGF0IGNyZWF0aW5nIGEgY29tbW9uIHNlcmlhbCBkcml2ZXIgZm9yIEF0bWVsCisgICAgY2hpcHMuIEZvciBub3csIGl0IHN1cHBvcnRzIHRoZSBBVDMyQVA3MDAwIEFWUjMyIGNoaXAsIGJ1dCBpdCBzaG91bGQKKyAgICBiZSBwb3NzaWJsZSB0byBzdXBwb3J0IEFUOTFSTTkyMDAgYW5kIG90aGVyIEFSTS1iYXNlZCBjaGlwcyB3aXRoIHNvbWUKKyAgICBtaW5vciBtb2RpZmljYXRpb25zLgorICAgIAorICAgIFRoZXJlJ3Mgbm90aGluZyBmdW5kYW1lbnRhbGx5IEFWUjMyLXNwZWNpZmljIGluIHRoaXMgZHJpdmVyLCBidXQgaXQKKyAgICBkb2VzIHVzZSBzb21lIGZlYXR1cmVzIHdoaWNoIGFyZSBjdXJyZW50bHkgb25seSBkZWZpbmVkIGZvciB0aGUKKyAgICBBVDMyQVAgQ1BVIHBvcnQ6CisgICAgICAqIHBtX2dldF9jbG9ja19mcmVxOiBPYnRhaW4gdGhlIGNsb2NrIGZyZXF1ZW5jeSBvZiBhIGdpdmVuIGRvbWFpbgorICAgICAgKiBnZC0+Y29uc29sZV91YXJ0OiBBICJzdHJ1Y3QgZGV2aWNlIiBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgIHJlZ2lzdGVyIG1hcHBpbmdzLCBncGlvIHJlc291cmNlcyBhbmQgY2xvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgVUFSVCBkZXZpY2UuCisgICAgCisgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgZmVhdHVyZXMsIHBsZWFzZSBzZWUgdGhlICJBVDMyQVAKKyAgICBDUFUiIHBhdGNoLgogCi0qIEZpeCBKRkZTMiBjb21waWxhdGlvbiBwcm9ibGVtCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTIgT2N0IDIwMDYKK2NvbW1pdCA3MmEwODdlMDQ3MDVjMjZjYWQ5ODI4NzllYmQwNmI1MjgxYmY4MjVhCitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDE0OjI3OjM1IDIwMDYgKzAyMDAKIAotKiBDbGVhbnVwIG9mIE5BTkQgdXBkYXRlIHBhdGNoIChyZW1vdmUgY2hhbmdlbG9nIGZyb20gY21kX25hbmQuYykKLSAgUGF0Y2ggYnkgR3VpZG8gQ2xhc3NlbiwgMTAgT2N0IDIwMDYKKyAgICBBZGQgQVQzMkFQIENQVSBhbmQgQVQzMkFQNzAwMCBTb0Mgc3VwcG9ydAorICAgIFBhdGNoIGJ5IEhhYXZhcmQgU2tpbm5lbW9lbiwgMDYgU2VwIDIwMDYKKyAgICAKKyAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFUMzJBUCBDUFUgZmFtaWx5IGFuZCB0aGUgQVQzMkFQNzAwMAorICAgIGNoaXAsIHdoaWNoIGlzIHRoZSBmaXJzdCBjaGlwIGltcGxlbWVudGluZyB0aGUgQVZSMzIgYXJjaGl0ZWN0dXJlLgorICAgIAorICAgIFRoZSBBVDMyQVAgQ1BVIGNvcmUgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIGltcGxlbWVudGF0aW9uIGZlYXR1cmluZyBhCisgICAgNy1zdGFnZSBwaXBlbGluZSwgc2VwYXJhdGUgaW5zdHJ1Y3Rpb24tIGFuZCBkYXRhIGNhY2hlcywgYW5kIGEgTU1VLgorICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSAiQVZSMzIgQVAgVGVjaG5pY2FsIFJlZmVyZW5jZSI6CisgICAgCisgICAgaHR0cDovL3d3dy5hdG1lbC5jb20vZHluL3Jlc291cmNlcy9wcm9kX2RvY3VtZW50cy9kb2MzMjAwMS5wZGYKKyAgICAKKyAgICBJbiBhZGRpdGlvbiB0byB0aGlzLCB0aGUgQVQzMkFQNzAwMCBjaGlwIGNvbWVzIHdpdGggYSBsYXJnZSBzZXQgb2YKKyAgICBpbnRlZ3JhdGVkIHBlcmlwaGVyYWxzLCBtYW55IG9mIHdoaWNoIGFyZSBzaGFyZWQgd2l0aCB0aGUgQVQ5MSBzZXJpZXMKKyAgICBvZiBBUk0tYmFzZWQgbWljcm9jb250cm9sbGVycyBmcm9tIEF0bWVsLiBGdWxsIGRhdGEgc2hlZXQgaXMKKyAgICBhdmFpbGFibGUgaGVyZToKKyAgICAKKyAgICBodHRwOi8vd3d3LmF0bWVsLmNvbS9keW4vcmVzb3VyY2VzL3Byb2RfZG9jdW1lbnRzL2RvYzMyMDAzLnBkZgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgogCi0qIFNldmVyYWwgaW1wcm92ZW1lbnRzIHRvIHRoZSBuZXcgTkFORCBzdWJzeXN0ZW06Ci0gIC0gSkZGUzIgcmVsYXRlZCBjb21tYW5kcyBpbXBsZW1lbnRlZCBpbiBtdGQtdXRpbHMgc3R5bGUKLSAgLSBTdXBwb3J0IGZvciBiYWQgYmxvY2tzCi0gIC0gQmFkIGJsb2NrIHRlc3RpbmcgY29tbWFuZHMKLSAgLSBOQU5EIGxvY2sgY29tbWFuZHMKLSAgUGxlYXNlIHRha2UgYSBsb29rIGF0IGRvYy9SRUFETUUubmFuZCBmb3IgbW9yZSBkZXRhaWxzCi0gIFBhdGNoIGJ5IEd1aWRvIENsYXNzZW4sIDEwIE9jdCAyMDA2Citjb21taXQgN2I2NGZlZjMzYzY2YmU2NDg4MjZjMGZmOTc1ODI5OGVmMTNkMDYwNAorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBwb2xsdXguZGVueC5kZT4KK0RhdGU6ICAgVHVlIE9jdCAyNCAxNDoyMToxNiAyMDA2ICswMjAwCiAKLSogRGVmaW5lIElIX0NQVV9BVlIzMgotICBNYWtlIGl0IHBvc3NpYmxlIHRvIGdlbmVyYXRlIEFWUjMyIHVJbWFnZSBmaWxlcyB3aXRoIG1raW1hZ2UgYW5kCi0gIG1ha2UgY21kX2Jvb3RtIHJlY29nbml6ZSB0aGVtLgotICBQYXRjaCBieSBIYWF2YXJkIFNraW5uZW1vZW4sIDIyIFNlcCAyMDA2CisgICAgQWRkIEFWUjMyIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgICAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCA2IFNlcCAyMDA2IDE2OjIzOjAyICswMjAwCisgICAgCisgICAgVGhpcyBwYXRjaCBhZGRzIGNvbW1vbiBpbmZyYXN0cnVjdHVyZSBjb2RlIGZvciB0aGUgQXRtZWwgQVZSMzIKKyAgICBhcmNoaXRlY3R1cmUuIFNlZSBkb2MvUkVBRE1FLkFWUjMyIGZvciBkZXRhaWxzLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgogCi0qIEZpeCBidWZmZXIgb3ZlcmZsb3cgcHJvYmxlbSBpbiBmdF9idWlsZC5jCi0gIFBhdGNoIGJ5IEZyZWRyaWsgUm91YmVydCwgMDkgT2N0IDIwMDYKK2NvbW1pdCAyZGEyZDlhNDc2NjA2M2I5ODQ4ZjNhMzVhZDYwMjU0OTljZjg3MjY1CitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDEzOjU3OjMzIDIwMDYgKzAyMDAKIAotKiBNYWtlIGJvb3RwIGltcGxlbWVudGF0aW9uIFJGQzMwNDYgY29tcGxpYW50Ci0gIFBhdGNoIGJ5IEpvYWtpbSBMYXJzc29uLCAyNyBKdW4gMjAwNgorICAgIFVzZSAtZyBpbnN0ZWFkIG9mIC1nc3RhYnMgaW4gQUZMQUdTX0RFQlVHCisgICAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAzMCBBdWcgMjAwNgorICAgIAorICAgIEluIGNvbmZpZy5taywgLVdhLC1nc3RhYnMgaXMgdW5jb25kaXRpb25hbGx5IGFwcGVuZGVkIHRvIEFGTEFHUyBubworICAgIG1hdHRlciB3aGF0IHRoZSB0YXJnZXQncyBwcmVmZXJyZWQgZGVidWdnaW5nIGZvcm1hdCBpcy4gVGhpcyBwYXRjaAorICAgIHNpbXBseSByZXBsYWNlcyAtZ3N0YWJzIHdpdGggLWcsIHNvIHRoYXQgdGhlIGRlZmF1bHQgZGVidWdnaW5nIGZvcm1hdAorICAgIGZvciB0aGUgYXJjaGl0ZWN0dXJlIGlzIHVzZWQuCiAKLSogVFFNNTIwMDogcGVyZm9ybSBQT1NUIG1lbW9yeSB0ZXN0IG9ubHkgb24gU1RLNTJ4eCBjYXJyaWVyIGJvYXJkLgotICAoYW5kIHRoZW4gb25seSBpZiBQU0M2XzMgaXMgcmVhZCBhcyAiMSIgd2hlbiBib290aW5nKS4KLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjEgSnVuIDIwMDYKK2NvbW1pdCA5NjU4Mjk4NzIxNjljMjk5NjAyMzg0MGQ5OGUxZDg1YWQxNDhkNjI5CitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDEzOjU1OjE4IDIwMDYgKzAyMDAKIAotKiBNb3ZlICJhciIgZmxhZ3MgdG8gY29uZmlnLm1rIHRvIGFsbG93IGZvciBzaWxlbnQgIm1ha2UgLXMiCi0gIEJhc2VkIG9uIHBhdGNoIGJ5IE1pa2UgRnJ5c2luZ2VyLCAyMCBKdW4gMjAwNgorICAgIEZpeC93b3JrYXJvdW5kIGJyb2tlbiBkZXBlbmRlbmN5IGhhbmRsaW5nIHdpdGggbWFrZSAzLjgxCisgICAgQmFzZWQgb24gcGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAyOSBBdWcgMjAwNiAxMToyMDozOSArMDIwMAogCi0qIENvZGluZyBzdHlsZSBjbGVhbnVwCitjb21taXQgODMxOGZiZjhjYzMwNDE4YjYyMWVhOWYzOWI4NGI0YzFhMDhmMDAzYQorQXV0aG9yOiBNYXJpYW4gQmFsYWtvd2ljeiA8bThAc2VtaWhhbGYuY29tPgorRGF0ZTogICBNb24gT2N0IDIzIDIyOjE3OjA1IDIwMDYgKzAyMDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgRVA4Mnh4TSBib2FyZHMKLSAgUGF0Y2ggYnkgQWFyb24gU2VsbHMsIDIwIEp1biAyMDA2CisgICAgRml4IHNlcXVvaWEgc2VwYXJhdGUgb2JqZWN0IGRpcmVjb3J5IGJ1aWxkaW5nIHByb2JsZW1zLgogCi0qIEZpeCBjb21tZW50cyBpbiBpbmNsdWRlL3BwYzQ0MC5oCi0gIFBhdGNoIGJ5IE1hcnRpbiBIaWNrcywgMTYgSnVuIDIwMDYKK2NvbW1pdCAzZGZhOWNmZGNlZTc4YjMwZGEzNDMyMzE4YjMyODIxZmZhYmU5NzRiCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBPY3QgMjAgMTc6MTY6MzUgMjAwNiAtMDUwMAogCi0qIFVwZGF0ZSBmb3IgQ0FNNTIwMCBib2FyZDoKLSAgLSBNYXAgaW4gYSBhZGRpdGlvbmFsIGNoaXAgc2VsZWN0cyBDUzQgYW5kIENTNS4KLSAgLSBNb2RpZnkgdGhlIHBvcnQgY29uZmlncmF0aW9uLCBjb25maWd1cmUgc2l4IFVBUlRzIGFuZCBubyBQQ0ksCi0gICAgQVRBIGFuZCBVU0IuCi0gIC0gQWRkIGN1c3RvbSBmbGFzaCBkcml2ZXIgdG8gaGFuZGxlIHNwZWNpZmljIGJ5dGUgc3dhcHBpbmcKKyAgICBVc2UgZ2VuZXJpYyBJMkMgcmVnaXN0ZXIgYmxvY2sgb24gODV4eCBhbmQgODZ4eC4KKyAgICAKKyAgICBSZXBsYWNlIHByaXZhdGUgSU1NQVAgSTJDIHN0cnVjdHVyZXMgd2l0aCBnZW5lcmljIHJlZyBibG9jaworICAgIGFuZCBhbGxvdyA4Nnh4IHRvIGhhdmUgbXVsdGlwbGUgSTJDIGRldmljZSBidXNzZXMuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggVExCIHNldHVwIGZvciBPY290ZWEgYm9hcmQKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMCBTZXAgMjAwNgorY29tbWl0IGY1MDEyODI3ZGYxMWNhMGM5YmUxZGY1ZjhiMTUzZTE4OGRjMmZhN2MKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgRnJpIE9jdCAyMCAxNTo1NDozNCAyMDA2IC0wNTAwCiAKLSogRml4IHJlc2V0IHByb2JsZW0gaW4gc2VxdW9pYSBzZHJhbSBpbml0IGNvZGUKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMyBTZXAgMjAwNgorICAgIEZpeCBjb21waWxhdGlvbiB3YXJuaW5ncyBvbiBhIGZldyA4NXh4IGJvYXJkcy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIERpc2FibGUgYXV0b2Jvb3QgYWJvcnQgZm9yIEZPMzAwIHdoZW4gc2lsZW50IG1vZGUgaXMgZW5hYmxlZAotICAoYWNjb3JkaW5nIHRvIFMxIHN3aXRjaCBzZXR0aW5nKS4KK2NvbW1pdCAyMDQ3NjcyNjg0Y2Y4NWNiNmY5NmExZmJjOTkzMTgwYWFhZjE5YTk5CitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBPY3QgMjAgMTU6NTA6MTUgMjAwNiAtMDUwMAogCi0qIENsZWFudXAgZXhhbXBsZXMgYmluYXJpZXMKKyAgICBDb252ZXJ0ZWQgYWxsIDg1eHggYm9hcmRzIHRvIHVzZSBhIGNvbW1vbiBGU0wgSTJDIGRyaXZlci4KKyAgICBJbnRyb2R1Y2VkIENPRklHX0ZTTF9JMkMgdG8gc2VsZWN0IHRoZSBjb21tb24gRlNMIEkyQyBkcml2ZXIuCisgICAgQW5kIHJlbW92ZWQgaGFyZCBpMmMgcGF0aCBmcm9tIGEgZmV3IHUtYm9vdC5sZHMgc2NpcHRzIHRvby4KKyAgICBNaW5vciB3aGl0ZXNwYWNlIGNsZWFudXBzIGFsb25nIHRoZSB3YXkuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KIAotKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyBSYWluaWVyIFBQWDQ0MEdSeCBldmFsIGJvYXJkCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgU2VwIDIwMDYKK2NvbW1pdCA0ZDQ1ZjY5ZTM2MmIwNTg5MmM5ZTkyYTc5MDdlNTgyMDk5NTYxMmFhCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBPY3QgMTkgMTI6MDI6MjQgMjAwNiAtMDUwMAogCi0qIEFkZCBOQU5EIGVudmlyb25tZW50IHN1cHBvcnQgZm9yIFBQQzQ0MEVQeCBTZXF1b2lhIE5BTkQgYm9vdCBjb25maWcKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMiBTZXAgMjAwNgorICAgIFJld3JpdGUgYSBzZXJpZXMgb2YgZ290byBzdGF0ZW1lbnRzIGFzIGEgc2VxdWVuY2VzIG9mCisgICAgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgaW5zdGVhZC4KKyAgICAKKyAgICBVc2UgY29uc2lzdGVudCByZXR1cm4gY29kZSAwLy0xIGZvciBnb29kL2JhZCBpbmRpY2F0b3JzLgorICAgIAorICAgIEluY2x1ZGUgb25lIGZld2VyIGZpbGUgaWYgdGhlIGRyaXZlciBpc24ndCB1c2VkIGF0IGFsbC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIFVwZGF0ZSBOQU5EIGJvb3QgZG9jdW1lbnRhdGlvbgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEyIFNlcCAyMDA2Citjb21taXQgNzIzN2MwMzNiMDJmZTI5NTg4MDQzNWYxZWI4MDgxOWEwYzk4NzUzMgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgT2N0IDE5IDExOjAyOjE2IDIwMDYgLTA1MDAKIAotKiBGaXggYWxpZ25tZW50IHByb2JsZW0gaW4gIm10ZHBhcnRzIiBjb21tYW5kCisgICAgTW92ZWQgaTJjIGRyaXZlciBvdXQgb2YgY3B1L21wYzg2eHgvaTJjLmMgaW50byBkcml2ZXJzL2ZzbF9pMmMuYworICAgIAorICAgIGluIGFuIGVmZm9ydCB0byBiZWdpbiB0byB1bmlmeSB0aGUgdW1wdGVlbiBGU0wgSTJDIGRyaXZlcnMgdGhhdAorICAgIGFyZSBhbGwgb3RoZXJ3aXNlIHZlcnkgc2ltaWxhci4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBkb2N1bWVudGF0aW9uIG9uIHRoZSBsYXRlc3QgYnVpbGQgZW52aXJvbm1lbnQgZXh0ZW5zaW9ucyB0bwotICB0aGUgUkVBRE1FIGZpbGUuCitjb21taXQgMTNhN2ZjZGYzN2Y2ZWE5NDI5YWUwNGM5ZGY2N2Y4OTMzNjRjZmU0YgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgT2N0IDE5IDExOjMzOjUyIDIwMDYgLTA1MDAKIAotKiBSZW1vdmUgZGVhZCBjb2RlIChpMm8gYW5kIGRtYSkgZnJvbSBjcHUvbXBjODI0eC9kcml2ZXJzLyBkaXJlY3RvcnkuCisgICAgKiBGaXggYSBidW5jaCBvZiBjb21waWxlciB3YXJuaW5ncyBmb3IgZ2NjIDQuMAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IExPR19ESVIgZGlyZWN0b3J5IGNyZWF0aW9uIGVycm9yLgotICBBZGQgc3VwcG9ydCBmb3IgYXV0b21hdGljIGNyZWF0aW9uIG9mIEJVSUxEX0RJUiBkaXJlY3RvcnkuCitjb21taXQgNWYzMjQ5YTBhMTY4ZTQ0NmE0Y2M5NjY5YjJiY2UwYmM0NTZmMGEwOQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBGcmkgT2N0IDEzIDE2OjQ3OjUzIDIwMDYgLTA1MDAKIAotKiBGaXggYnVpbGQgcHJvYmxlbSBjcHUvcHBjNHh4L25kZmMuYwotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IFNlcCAyMDA2CisgICAgRml4ZWQgbGVhZGluZyB3aGl0ZXNwYWNlIGlzc3Vlcy4KKyAgICBSZW1vdmVkIHNwdXJpb3VzIExBV0FSIHRoaW5nLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IGJ1aWxkIHByb2JsZW0gd2l0aCBDUENJNDQwCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgU2VwIDIwMDYKK2NvbW1pdCAwZWU5MGNiNzdlMDFkNmU4Y2NkMzdlMWJkOTY2Nzg1OTc4NzVjMzkxCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBPY3QgMTIgMTA6NDI6MzYgMjAwNiAtMDUwMAogCi0qIENoYW5nZSBZZWxsb3dzdG9uZSB0byB1c2UgQ0ZJIHdyaXRlIGJ1ZmZlcgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IFNlcCAyMDA2CisgICAgUmVtb3ZlIHVubmVlZGVkIGluY2x1ZGUgZmlsZXMgYW5kIGxvY2FsIHZhcmlhYmxlLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgU2VxdW9pYSBQUEM0NDBFUHggZXZhbCBib2FyZAotICAtIEFkZCBzdXBwb3J0IGZvciBQUEM0NDBFUHggJiBQUEM0NDBHUngKLSAgLSBBZGQgc3VwcG9ydCBmb3IgUFBDNDQwRVAoeCkvR1IoeCkgTkFORCBjb250cm9sbGVyCi0gICAgaW4gY3B1L3BwYzR4eCBkaXJlY3RvcnkKLSAgLSBBZGQgTkFORCBib290IGZ1bmN0aW9uYWxpdHkgZm9yIFNlcXVvaWEgYm9hcmQsCi0gICAgcGxlYXNlIHNlZSBkb2MvUkVBRE1FLm5hbmQtYm9vdC1wcGM0NDAgZm9yIGRldGFpbHMKLSAgLSBUaGlzIFNlcXVvaWEgTkFORCBpbWFnZSBkb2Vzbid0IHN1cHBvcnQgZW52aXJvbm1lbnQKLSAgICBpbiBOQU5EIGZvciBub3cuIFRoaXMgd2lsbCBiZSBhZGRlZCBpbiBhIHNob3J0IHdoaWxlLgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IFNlcCAyMDA2Citjb21taXQgMWVhZjNhNWZmNDk2MGE0NmYzYTkwNjM1NjhiYTJhZjc4ODNmMDdjNQorQXV0aG9yOiBHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CitEYXRlOiAgIFR1ZSBPY3QgMTAgMDA6MjM6MzIgMjAwNiAtMDYwMAogCi0qIEZpeCBta2ltYWdlIC1sIGJ1ZyB3aXRoIG11bHRpZmlsZSBpbWFnZXMgb24gNjRiaXQgcGxhdGZvcm1zCi0gIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMDYgU2VwIDIwMDYKKyAgICBGaXggcG9zc2libGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5nLgorICAgIAorICAgIFdoZW4gQ09ORklHX09GX0ZMQUdfVFJFRSBpcyBzZXQsIHRoZSBjb21waWxlciBjb21wbGFpbnMgdGhhdCAnbGVuJyBpbgorICAgIGRvX2Jvb3RtX2xpbnV4KCkgbWF5IGJlIHVuaW5pdGlhbGl6ZWQuICBUaGVyZSBpcyBubyBwb3NzaWJpbGl0eSBpbiB0aGUKKyAgICBjdXJyZW50IGNvZGUgdGhhdCBsZW4gd2lsbCBnZXQgdXNlZCB1bmluaXRpYWxpemVkLCBidXQgdGhpcyBmaXggZm9sbG93cworICAgIHRoZSBleGlzdGluZyBjb252ZW50aW9uIG9mIHNldHRpbmcgYm90aCBsZW4gYW5kIGRhdGEgdG8gemVybyBhdCB0aGUgc2FtZQorICAgIHRpbWUuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgogCi0qIEZpeCBidWlsZCBwcm9ibGVtcyBvbiBzb3JjZXJ5IGJvYXJkLgorY29tbWl0IDczNzZlYjg3YWFhNjAxZjcyOGY5YjhlNWU5Y2QyNzExYTY3ZjUyOWUKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIE9jdCAxMSAxNToxMzowMSAyMDA2IC0wNTAwCiAKLSogRml4IGNvbGRmaXJlIGJ1aWxkIHByb2JsZW1zLgotICBQYXRjaCBieSBNYXJpYW4gQmFsYWtvd2ljeiwgMDEgU2VwIDIwMDYKKyAgICAqIEZpeCBhIGJ1bmNoIG9mIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBnY2MgNC4wCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KIAotKiBBZGQgc3VwcG9ydCBmb3IgYSBzYXZpbmcgYnVpbGQgb2JqZWN0cyBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeS4KLSAgTW9kaWZpY2F0aW9ucyBhcmUgYmFzZWQgb24gdGhlIExpbnV4IGtlcm5lbCBhcHByb2FjaCBhbmQgc3VwcG9ydAotICB0d28gdXNlIGNhc2VzOgotICAxKSBBZGQgTz0gdG8gdGhlIG1ha2UgY29tbWFuZCBsaW5lICdtYWtlIE89L3RtcC9idWlsZCBhbGwnCi0gIDIpIFNldCBlbnZpcm9uZW1lbnQgdmFyaWFibGUgQlVJTERfRElSIHRvIHBvaW50IHRvIHRoZSBkZXNpcmVkIGxvY2F0aW9uCi0JJ2V4cG9ydCBCVUlMRF9ESVI9L3RtcC9idWlsZCcKLQknbWFrZScKLSAgVGhlIHNlY29uZCBhcHByb2FjaCBjYW4gYWxzbyBiZSB1c2VkIHdpdGggYSBNQUtFQUxMIHNjcmlwdAotCSdleHBvcnQgQlVJTERfRElSPS90bXAvYnVpbGQnCi0JJy4vTUFLRUFMTCcKLSAgQ29tbWFuZCBsaW5lICdPPScgc2V0dGluZyBvdmVycmlkZXMgdGhlIEJVSUxEX0RJUiBlbnZpcm9uZW50IHZhcmlhYmxlLgotICBXaGVuIG5vbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMgaXMgdXNlZCB0aGUgbG9jYWwgYnVpbGQgaXMgcGVyZm9ybWVkCi0gIGFuZCB0aGUgb2JqZWN0IGZpbGVzIGFyZSBwbGFjZWQgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCitjb21taXQgYmY2NTFiYWEzNjVlNTQ0NzI0NmFhZDZhNjMzY2NkNjY3Y2YyNGEzOQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgT2N0IDExIDEwOjEwOjQzIDIwMDYgLTA1MDAKIAotKiBSZW1vdmUgdGhlIGJvYXJkL25ldHN0YXIvY3JjaXQgYmluYXJ5IGZyb20gZ2l0IHJlcG9zaXRvcnkuCisgICAgTW92ZSAiYXIiIGZsYWdzIHRvIGNvbmZpZy5tayB0byBhbGxvdyBmb3Igc2lsZW50ICJtYWtlIC1zIgogCi0qIEZpeCB0b29scy91cGRhdGVyIGJ1aWxkIGVycm9yLgorY29tbWl0IDFmZDU2OTlhNGEyNGY1YzFkYWIxYjMyZjQ4MGJhY2UxZWJiOWZjM2UKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAxMCAxNzoxOTowMyAyMDA2IC0wNTAwCiAKLSogRml4IHRvb2xzL2Vhc3lsb2dvIGJ1aWxkIGVycm9yLgorICAgIENvZGluZyBzdHlsZSBjaGFuZ2VzIHRvIHJlbW92ZSBsb2NhbCB2YXJpYmxlIGJsb2NrcworICAgIGFuZCByZWZvcm1hdCBhIGJpdCBuaWNlci4KIAotKiBGaXhlZCBwcm9ibGVtcyBvbiBQUlMyMDAgYm9hcmQgY2F1c2VkIGJ5IGFkZGluZyBzcGxhc2ggc2NyZWVuIG9uIE1DQzIwMAorY29tbWl0IDhiMjgzZGJiM2EwOGQxYjhkNDA2YmMxNWYxMTllMDgxYjNlMjYwNmEKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAxMCAxNzoxNjowNCAyMDA2IC0wNTAwCiAKLSogRXh0ZW5kZWQgUkVBRE1FIGVudHJ5IG9uIGNvZGluZyBzdHlsZQorICAgIEZpeCB3aGl0ZXNwYWNlIGlzc3Vlcy4KIAotKiBBZGRlZCBhbm90aGVyIGV4YW1wbGUgc2hvd2luZyBzaW1wbGUgaW50ZXJydXB0IGludGVyY2VwdGlvbi4KK2NvbW1pdCA3YjM4MmI3MTI1ZjIzOTdjY2U2MzI1M2RmNjJmMTgzZTNkZmEyNzcwCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMTAgMTc6MTQ6NDUgMjAwNiAtMDUwMAogCi0qIEFkZGVkIHNpbXBsZV9zdHJ0b3VsKCksIGdldGVudigpIGFuZCBzZXRlbnYoKSB0byB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLgotICBBbHNvIGJ1bXBlZCB1cCBBQkkgdmVyc2lvbiB0byByZWZsZWN0IHRoaXMgY2hhbmdlLgorICAgIEZpeCB3aGl0ZXNwYWNlIGlzc3Vlcy4KIAotKiBBZGRlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgY2FwYWJpbGl0aWVzIGZvciBtcGM1eHh4IHByb2Nlc3NvcnMuCi0gIEFsc28gYWRkZWQgTGludXggbGlrZSBCVUcoKSBtYWNyb3MuCitjb21taXQgZTEwMzkwZGRkNzM2YjBkYWQxNTI4ZWVjNGIwZmUzNWMwODI3MTM5YQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgT2N0IDEwIDE3OjA2OjUzIDIwMDYgLTA1MDAKIAotKiBDb2RpbmcgU3R5bGUgY2xlYW51cC4KLSAgUGF0Y2ggYnkgU3RlZmFubyBCYWJpYywgMzEgQXVnIDIwMDYKKyAgICBGaXggd2hpdGVzcGFjZSBpc3N1ZXMuCiAKLSogQWRkIHNwbGFzaHNjcmVlbiBzdXBwb3J0IGZvciBNQ0MyMDAgYm9hcmQuCitjb21taXQgODk4NzVlOTZiYTNmMDIzMTU3YmY1MGQ1ZjhlMzNiZjI1NDk2NGE3NgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgT2N0IDEwIDE3OjAzOjQzIDIwMDYgLTA1MDAKIAotKiBNYWtlIHRoZSBzZXJpYWwgZHJpdmVyIGZyYW1ld29yayB3b3JrIHdpdGggQ09ORklHX1NFUklBTF9NVUxUSQotICBlbmFibGVkCisgICAgUmFuIGxpbmRlbnQgYW5kIGNsZWFuZWQgdXAgd2hpdGVzcGFjZSBpc3N1ZXMuCisgICAgRm9ybWF0IGZvciA4MC1jb2x1bW5zIHRvby4KIAotKiBQQ0llIGVuZHBvaW50IHN1cHBvcnQgZm9yIEFNQ0MgWXVjY2EgNDQwU1BlIGJvYXJkCi0gIFBhdGNoIGJ5IFRpcnVtYWxhIFIgTWFycmksIDI2IEF1ZyAyMDA2Citjb21taXQgMzMzOTYxYWU3MDk1ZmM2NmQ4YTA0MWZjZTFhYzllZTg3M2IwOWQ4NgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgT2N0IDEwIDE3OjAyOjIyIDIwMDYgLTA1MDAKIAotKiBJbXByb3ZlIERJTU0gZGV0ZWN0aW9uIGZvciBBTUNDIFl1Y2NhIDQ0MFNQZSBib2FyZAotICBJbXByb3ZlZCB0aGUgbWVtb3J5IERJTU0gZGV0ZWN0aW9uIGZvciB0aGUgWXVjY2EgNDQwU1BlIGJvYXJkIGZvcgotICB0aGUgY2FzZSB3aGVyZSBhIG1lbW9yeSBESU1NIGlzIGZhbHNlbHkgZGV0ZWN0ZWQgYXMgcHJlc2VudC4KLSAgVGhpcyBpc3N1ZSBpcyBzZWVuIG9uIHNvbWUgQU1DQyBZdWNjYSA0NDBTUGUgdmFsaWRhdGlvbiBib2FyZHMgaWYKLSAgb25seSBvbmUgNTEyTUIgbWVtb3J5IERJTU0gaXMgaW5zdGFsbGVkLCBpLmUuIERJTU0gc2xvdCAwIGlzCi0gIHBvcHVsYXRlZCBhbmQgRElNTSBzbG90IDEgaXMgZW1wdHkuICBJbiB0aGlzIGNhc2UsIFUtQm9vdCBkb2VzCi0gIG5vdCBjb3JyZWN0bHkgZGV0ZWN0IHRoYXQgdGhlcmUgaXMgb25seSBvbmUgRElNTSBtZW1vcnkgbW9kdWxlCi0gIGluc3RhbGxlZCBhbmQgd2lsbCBmYWxzZWx5IGRldGVjdCB0d28gRElNTSBtZW1vcnkgbW9kdWxlcyBhcmUKLSAgcHJlc2VudCBhbmQgdGhlcmVmb3JlIFUtQm9vdCB3aWxsIG5vdCBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgYW1vdW50Ci0gIG9mIHRvdGFsIG1lbW9yeSBhbmQgdS1ib290IHdpbGwgbm90IGJvb3RpbmcgdXAuCi0gIFBhdGNoIGJ5IEFkYW0gR3JhaGFtLCAyNCBBdWcgMjAwNgorICAgIEZpeCB3aGl0ZXNwYWNlIGFuZCA4MC1jb2wgaXNzdWVzLgogCi0qIEZpeCB0eXBvLgorY29tbWl0IGY1NWRmMTgxODdlN2E0NWNiNzNmZWM0MzcwZDEyMTM1ZTY2OTFhZTEKK0F1dGhvcjogSm9obiBUcmFpbGwgPGpvaG4udHJhaWxsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBTZXAgMjkgMDg6MjM6MTIgMjAwNiArMDEwMAogCi0qIENvZGUgY2xlYW51cAorICAgIEZpeCBtaXNzaW5nIHRDeWNsZS9tb2RmcmVxIGNhbGN1bGF0aW9uLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvaG4gVHJhaWxsIDxqb2huLnRyYWlsbEBmcmVlc2NhbGUuY29tPgogCi0qIFVwZGF0ZSBmb3IgTUNDMjAwIC8gUFJTMjAwIGJvYXJkczoKLSAgLSBhdXRvLWFkanVzdCBjb25zb2xlIGRldmljZSBmb3IgTGludXguCi0gIC0gZml4IHR5cG9zLgorY29tbWl0IDgyNzJkYzJmNThmMjQ3M2Q4OTk1ZmNjOWI5MTY0NDBjZmJhMDgwZjAKK0F1dGhvcjogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgU2VwIDEzIDEwOjMzOjM1IDIwMDYgLTA1MDAKIAotKiBBZGQgYSBmaXggZm9yIGEgYnVnZ3kgVVNCIGRldmljZSBvbiB0aGUgRk8zMDAgYm9hcmQuCisgICAgVXBkYXRlZCBjb25maWcgaGVhZGVycyB0byBhZGQgZGVmYXVsdCBGRFQtYmFzZWQgYm9vdGluZwogCi0qIFVwZGF0ZXMgZm9yIE1DQzIwMCAvIFBSUzIwMCBib2FyZHM6Ci0gIC0gc3VwcG9ydCBmb3IgY29uZmlndXJhdGlvbnMgd2l0aCBTRFJBTSBvciBERFIgbWVtb3J5LAotICAtIHN1cHBvcnQgZm9yIGhpZ2hib290IGFuZCBsb3dib290Ci0gIC0gYWRqdXN0aW5nIGVudmlyb25tZW50IGRlZmluaXRpb25zCitjb21taXQgMDlmM2UwOWU5ZWJjZmE3OTE5Y2E4OTMxYTRiNTUwNGZhZGQxZjFkMworQXV0aG9yOiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBTZXAgMTMgMTA6MzQ6MTggMjAwNiAtMDUwMAogCi0qIEFkZCBzdXBwb3J0IGZvciBXVEsgRk8zMDAgYm9hcmQgKFRRTTUyMDAgYmFzZWQpLgorICAgIEFkZCBzdXBwb3J0IGZvciBlVFNFQyAzICYgNCBvbiA4NTQ4IENEUworICAgIAorICAgICogQWRkZWQgc3VwcG9ydCBmb3IgdXNpbmcgZVRTRUMgMyBhbmQgZVRTRUMgNCBvbiB0aGUgODU0OCBDRFMuCisgICAgICBUaGlzIHdpbGwgb25seSB3b3JrIG9uIHJldiAxLjMgYm9hcmRzIChidXQgZG9lc24ndCBicmVhayBvbGRlciBib2FyZHMpCisgICAgKiBDbGVhbmVkIHVwIHNvbWUgY29tbWVudHMgdG8gcmVmbGVjdCB0aGUgZXhwYW5kZWQgcm9sZSBvZiB0c2VjCisgICAgICBpbiBvdGhlciBzeXN0ZW1zCiAKLSogRml4IFRRTTgzNHggaGFuZy4KK2NvbW1pdCAwODRkNjQ4YjEwOWM4OTg0ZjgzNjc0MDQzYzFhN2ZhMzg4NWVmODAxCitBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIFNlcCAxMyAxMDozMzo1NiAyMDA2IC0wNTAwCiAKLSogVXBkYXRlIGZvciBTQzUyMCBib2FyZC4KLSAgUGF0Y2ggYnkgRGF2aWQgVXBkZWdyYWZmLCAwMiBEZWMgMjAwNQorICAgIEFkZGVkIGNvZGUgdG8gc3VwcG9ydCAyLjYuMTggUENJIGNoYW5nZXMgaW4gdS1ib290CisgICAgCisgICAgKiBBZGRlZCBjb2RlIHRvIHN3aXp6bGUgdGhlIElSUSBtYXAgZm9yIHRoZSBQQ0kKIAotKiBGaXhlZCBjb21tb24uaCBzcGVsbGluZyBlcnJvci4KLSAgUGF0Y2ggYnkgQ29yeSBUdXNhciwgMzAgTm92IDIwMDUKK2NvbW1pdCBhZmJkYzY0OWY4NzUxZTRmNGYxYTZmNTI3ZWRmZTEzOTc3M2YyYzE1CitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBTZXAgMTkgMDk6MzQ6MTAgMjAwNiAtMDUwMAogCi0qIEZpeCB0eXBvLgotICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAyOCBOb3YgMjAwNQorICAgIE1vZGlmaWVkIG1ha2VmaWxlIGZvciBuZXcgYnVpbGQgbWVjaGFuaXNtLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IGZhdGxvYWQgY29tbWFuZCBvbiBGQVQzMiBmb3JtYXR0ZWQgcGFydGl0aW9ucy4KLSAgUGF0Y2ggYnkgSm9hY2hpbSBKYWVnZXIsIDE4IE5vdiAyMDA1Citjb21taXQgZDE0YmE2YTc5OGJlYjc1M2U3YTg2NDUwMDQxNGZjYzJkMTk4YjhiYworQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgU2VwIDE0IDA4OjQwOjM2IDIwMDYgLTA1MDAKIAotKiBGaXggZHJpdmVycy9kbTkwMDAuYyB3aGVuIGNvbmZpZ3VyZWQgaW4gMzIgYml0IG1vZGUuCi0gIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAxNyBOb3YgMjAwNQorICAgIEhhbmRsZSA4Nnh4IFNWUiB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBuZXcgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICBCb3RoIDg2NDEgYW5kIDg2NDFEIGhhdmUgU1ZSID09IDB4ODA5MCwgYW5kIGFyZSBkaXN0aW5ndWlzaGVkCisgICAgYnkgdGhlIGJ5dGUgaW4gYml0cyAxNi0yMyBpbnN0ZWFkLgorICAgIFRoYW5rcyB0byBKYXNvbiBKaW4gZm9yIG5vdGljaW5nLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogQ2xlYW51cCBkZWJ1ZyBjb2RlIGZvciB5dWNjYSBib2FyZC4KK2NvbW1pdCA4OGM4ZjQ5MjFmYzQ3ZmIwZWIyMzg0YjE2NTg2ZjFiZDdmMjc1YmU3CitBdXRob3I6IFpoYW5nIFdlaSA8d2VpLnpoYW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIE1vbiBBdWcgMjggMTQ6MjU6MzEgMjAwNiArMDgwMAogCi0qIE1DQzIwMDogcmVzdHJpY3QgYWRkcmVzc2FibGUgZmxhc2ggc3BhY2UgdG8gMzIgTUIKKyAgICBGaXhlZCBhbiBPRi10cmVlIG9mZi1ieS1vbmUgYnVnIHdoZW4gYWRkaW5nIGEgbmV3IHByb3BlcnR5IG5hbWUuCisgICAgVGhpcyBidWcgd2lsbCBjYXVzZSB0aGUga2VybmVsIGJvb3RpbmcgdG8gcGF1c2UgYSBsb25nIHRpbWUuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIDJmMTU3NzZjY2M2ZGMzMjM3N2Q4YmE5NjUyYjhmNTgwNTljMjdjNmQgY29tbWl0KQogCi0qIEFkZCBkZWJ1ZyBjb25zb2xlIG9uIENPTTEyIGZvciBNQ0MyMDAgYm9hcmQKK2NvbW1pdCA5YmZmN2E2OWE4ODVhZGViYmQyYmQ0NTk5MDQ5NGVjNGNmOTk4YTMwCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMjkgMTE6MDU6MDkgMjAwNiAtMDUwMAogCi0qIEZpeCBjb250cm9sLWMgaGFuZGluZyBpbiBDT05GSUdfQ01ETElORV9FRElUSU5HCi0gIFByb3Blcmx5IHBhc3MgYnJlYWsgY29kZSBiYWNrIGZyb20gcmVhZGxpbmUuCi0gIFBhdGNoIGJ5IFJvZ2VyIEJsb2ZlbGQsIDMxIEp1bCAyMDA2CisgICAgUmVtb3ZlIHRyYWlsaW5nIGVtcHR5IGxpbmVzLgogCi0qIEFkZCBjb21tYW5kbGluZSBoaXN0b3J5IHN1cHBvcnQgdG8gYWxsIEFNQ0MgZXZhbCBib2FyZHMKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBBdWcgMjAwNgorY29tbWl0IGNkNmQ3M2Q1Yjg5NWE1OTM1YWM0ZmRlMGEzNTYyODgxNDJhNTg0ZTAKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAyOSAwOTo0ODo0OSAyMDA2IC0wNTAwCiAKLSogQWRkIE1hY3Jvbml4IE1YTFYzMjBUIGZsYXNoIHN1cHBvcnQgZm9yIEFNQ0MgQmFtYm9vCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgQXVnIDIwMDYKKyAgICBSZW1vdmUgYm9ndXMgbXN5bmMgYW5kIHVzZSB2b2xhdGlsZSBhc20uCiAKLSogQ2hhbmdlICJtaWkgaW5mbyIgdG8gbm90IHByaW50IGFuIGVycm9yIHVwb24gbWlzc2luZyBQSFkgYXQgYWRkcmVzcwotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IEF1ZyAyMDA2Citjb21taXQgNzc4ZDQ1MDQ5Y2U1OTI3YjY1YjNmZjFkOGU2NjkyYjY1NGJkZDQ5ZQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDI5IDA4OjE3OjE0IDIwMDYgLTA1MDAKIAotKiBGaXggUENJLUV4cHJlc3Mgb24gUFBDNDQwU1BlIHJldi4gQS4KKyAgICBBZGQgbXlzZWxmIGFzIG1haW50YWluZXIgZm9yIE1QQzg2NDFIUENOLgogCi0qIEZpeCBwcmVib290IG1lc3NhZ2Ugb24gVFFNODV4eCBhZnRlciBzd2l0Y2hpbmcgdG8gaHVzaCBwYXJzZXIuCitjb21taXQgMmYxNTc3NmNjYzZkYzMyMzc3ZDhiYTk2NTJiOGY1ODA1OWMyN2M2ZAorQXV0aG9yOiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBNb24gQXVnIDI4IDE0OjI1OjMxIDIwMDYgKzA4MDAKIAotKiBBZGFwdCBUUU04NXh4IHJhbWRpc2sgYWRkcmVzcyB0byBMaW51eCBrZXJuZWwgbWVtb3J5IG1hcAorICAgIEZpeGVkIGFuIE9GLXRyZWUgb2ZmLWJ5LW9uZSBidWcgd2hlbiBhZGRpbmcgYSBuZXcgcHJvcGVydHkgbmFtZS4KKyAgICBUaGlzIGJ1ZyB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgYm9vdGluZyB0byBwYXVzZSBhIGxvbmcgdGltZS4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIFBDSS1FeHByZXNzIG9uIFBQQzQ0MFNQZSAoWXVjY2EgYm9hcmQpLgorY29tbWl0IDU1Njc4MDZiNjdkMGFlODM0OTNhYTg4MjNhZDNiNmM5MTRmNTgxZDcKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgRnJpIEF1ZyAyNSAxNDozODozNCAyMDA2IC0wNDAwCiAKLSogRml4IGNvbXBpbGVyIHdhcm5pbmcgZm9yIFRSQUIgYm9hcmQuCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IEF1ZyAyMDA2CisgICAgQ2hhbmdlIHJhbWRpc2thZGRyIGFuZCBkdGJhZGRyCisgICAgUmVtb3ZlIFBFWCBmbHVmZiBjb21tYW5kcy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWl5aW5nIFdhbmcgPGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogUHJldmVudCBVU0IgY29tbWFuZHMgZnJvbSB3b3JraW5nIHdoZW4gVVNCIGlzIHN0b3BwZWQuCitjb21taXQgYjJiNzg0MjFkOWRiNDljMjFhODIxYWY4YTE5YzIxYzFmN2RmYjI5ZQorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgQXVnIDIzIDEzOjMyOjQ1IDIwMDYgLTA1MDAKIAotKiBBZGQgcnVkaW1lbnRhcnkgaGFuZGxpbmcgb2YgYWx0ZXJuYXRlIHNldHRpbmdzIG9mIFVTQiBpbnRlcmZhY2VzLgotICBUaGlzIGlzIGluIG9yZGVyIHRvIGZpeCBpc3N1ZXMgd2l0aCBzb21lIFVTQiBzdGlja3MgdGltaW5nIG91dAotICBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFNvbWUgY29kZSByZWFkYWJpbGl0eSBpbXByb3ZlbWVudHMuCisgICAgKiBBbm90aGVyIHNtYWxsIGZpeCBmb3IgYm9vdGluZyB3aXRoIGRpc2FibGVfb2YKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgogCi0qIFBQQzQ0MCBERFIgc2V0dXA6IFNldCBTRFJBTTBfQ0ZHMFtQTVVdPTAgZm9yIGJlc3QgcGVyZm9ybWFuY2UKLSAgQU1DQyBzdWdnZXN0ZWQgdG8gc2V0IHRoZSBQTVUgYml0IHRvIDAgZm9yIGJlc3QgcGVyZm9ybWFjZSBvbgotICB0aGUgUFBDNDQwIEREUiBjb250cm9sbGVyLgotICBQbGVhc2Ugc2VlIGRvYy9SRUFETUUuNDQwLUREUi1wZXJmb3JtYW5jZSBmb3IgZGV0YWlscy4KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBKdWwgMjAwNgorY29tbWl0IDRhN2NjMGYyMTkxOGU2ZWNmMDdlZDU3MDc1ZDY3ZGYyYzRhMTI5OWMKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEF1ZyAyMyAxMTowNDo0MyAyMDA2IC0wNTAwCiAKLSogQU1DQyBiYW1ib28gKDQ0MEVQKSBVLUJvb3QgaW1hZ2UgcmVkdWNlZCB0byAzODRrYnl0ZQotICBQbGVhc2Ugc2VlIGRvYy9SRUFETUUuYmFtYm9vIGZvciBkZXRhaWxzLgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI3IEp1bCAyMDA2CisgICAgQ2xlYW51cCBhbmQgbGluZGVudCBuZXcgQUhDSSBkcml2ZXIuCiAKLSogRml4IENPTkZJR19DTURMSU5FX0VESVRJTkcgaW1wbGVtZW50YXRpb24KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNyBKdWwgMjAwNgorY29tbWl0IGRhYmY5ZWY4YzEwYjRkZWFkNWVmMjEwNmVmNzQyYjFjMDZiNTQyZGUKK0F1dGhvcjogSmluIFpoZW5neGlvbmcgPGphc29uQGJ1cy5hcC5mcmVlc2NhbGUubmV0PgorRGF0ZTogICBXZWQgQXVnIDIzIDE5OjE1OjEyIDIwMDYgKzA4MDAKIAotKiBGaXggcHJlYm9vdCBtZXNzYWdlIG9uIFRRTTUyMDAgYWZ0ZXIgc3dpdGNoaW5nIHRvIGh1c2ggcGFyc2VyLgorICAgIEFkZCBBSENJIGRlZmluZSBhbmQgc2F0YSBzdXBwb3J0IGZvciBNUEM4NjQxSFBDTiBib2FyZC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5Okphc29uIEppbjxqYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KIAotKiBNQ0MyMDA6IHNldCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdG8gbG93X2Jvb3QgRERSLAotICBhbmQgc3VwcG9ydCBmb3IgY29uZmlndXJhYmxlIG9wdGlvbnMgaGlnaF9ib290IGFuZC9vciBTRFJBTS4KK2NvbW1pdCA0NzgyYWM4MGIwMmYwZDAxYWZkMzA5ZTIyMDBkZDNjNzAzN2YyYmE0CitBdXRob3I6IEppbiBaaGVuZ3hpb25nIDxqYXNvbkBidXMuYXAuZnJlZXNjYWxlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyAyMyAxOToxMDo0NCAyMDA2ICswODAwCiAKLSogQWRkIHN1cHBvcnQgZm9yIDI1NiBNQiBTRFJBTSBvbiBDUFU4NwotICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDI1IE5vdiAyMDA1CisgICAgQWRkIEFIQ0kgc3VwcG9ydCB0byB1LWJvb3QKKyAgICAKKyAgICBBZGQgQUhDSSBzdXBwb3J0IGluIHUtYm9vdCwgZW5hYmxlIHRoZSBzYXRhIGRpc2sgY29udHJvbGxlcnMgd2hpY2gKKyAgICBmb2xsb3dpbmcgdGhlIEFIQ0kgcHJvdG9jb2wuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTpKYXNvbiBKaW48amFzb24uamluQGZyZWVzY2FsZS5jb20+CiAKLSogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIGNhbTUyMDAgYm9hcmQgKGJhc2VkIG9uIFRRTTUyMDBTKS4KK2NvbW1pdCBkOGVhMmFjZjVmMTM3Y2FlOTk0MTdkZjRmNTczZDAzNmVlMzg0NjY4CitBdXRob3I6IFpoYW5nIFdlaSA8d2VpLnpoYW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBBdWcgMjMgMTc6NTQ6MzIgMjAwNiArMDgwMAogCi0qIE1vcmUgY29kZSBjbGVhbnVwCisgICAgQWRkIGR0YiBib290LXVwIHBhcmFtZXRlciB0byBkZWZhdWx0IGJvb3QgY29tbWFuZHMuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KIAotKiBEaXNhYmxlZCBrdm1lMDgwIGJvYXJkIGluIE1BS0VBTEwgYmVjYXVzZSBvZiBidWlsZCBwcm9ibGVtcy4KK2NvbW1pdCBiOTM3NzVjMjAzNmI5OWJhYTM5MGVhNDI1YzQ3NzE4OTViYmM2M2M0CitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMjIgMTg6MjY6MDggMjAwNiAtMDUwMAogCi0qIENvZGUgY2xlYW51cAorICAgIENsZWFudXAgZXZlbiBtb3JlIHBvb3JseSBpbnRyb2R1Y2VkIHdoaXRlc3BhY2UuCiAKLSogVXBkYXRlIE5ldFN0YXIgYm9hcmQKLSAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDAzIE5vdiAyMDA1Citjb21taXQgYWU2MjQxNjg1Y2JjZjBjNzlhMzYzNjUzMGQyY2VhYjFmYjI5MWE5NAorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDIyIDE4OjA3OjAwIDIwMDYgLTA1MDAKIAotKiBNYWtlIGNvZGUgYmV0dGVyIHJlYWRhYmxlLgotICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMTQgU2VwIDIwMDUKKyAgICBDbGVhbnVwIG1vcmUgcG9vcmx5IGludHJvZHVjZWQgd2hpdGVzcGFjZS4KIAotKiBFbmFibGUgaW5pdHJkIEFUQUcgZm9yIHhtMjUwIGJvYXJkLgotICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDA1IFNlcCAyMDA1Citjb21taXQgMmMzM2U4YTFjNTM1YjNhZTkxY2YwYjI4NDQ4MDYwMGJmM2Y1N2M1NworQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDIyIDE3OjU0OjA1IDIwMDYgLTA1MDAKIAotKiBBZGQgcmVhZGxpbmUgY21kbGluZS1lZGl0aW5nIGV4dGVuc2lvbgotICBQYXRjaCBieSBKaW5IdWEgTHVvLCAwMSBTZXAgMjAwNQorICAgIENsZWFudXAgcG9vcmx5IGludHJvZHVjZWQgd2hpdGVzcGFjZS4KIAotKiBBZGQgc3VwcG9ydCBmb3IgZnJpZW5kbHktYXJtIFNCQy0yNDEwWCBib2FyZAotICBQYXRjaCBieSBKaW5IdWEgTHVvLCAwMSBTZXAgMjAwNQorY29tbWl0IDgwZTk1NWM3ZGQ5OGY0YjRmZDIzYzIxMTNjYWY3NWVkMmI3N2I1YjMKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAyMiAxMjoyNToyNyAyMDA2IC0wNTAwCiAKLSogRml4IG11bHRpLXBhcnQgaW1hZ2Ugc3VwcG9ydCBvbiBpMzg2IHBsYXRmb3JtLgotICBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDE5IEF1ZyAyMDA1CisgICAgR2VuZXJhbCBpbmRlbnQgYW5kIHdoaXRlc3BhY2UgY2xlYW51cHMuCiAKLSogQWRkIHN1cHBvcnQgZm9yIEtWTUUwODAgYm9hcmQKLSAgUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxOCBBdWcgMjAwNQorY29tbWl0IGZmZmYzYWU1NmY1ODQyY2EzNjc5ZTRjZTc5MjJiODE5YTg3YWFkOWYKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAyMiAxMjowNjoxOCAyMDA2IC0wNTAwCiAKLSogRml4IE1JUFMgTEUgYnVpbGQgcHJvYmxlbQotICBQYXRjaCBieSBNYXRlaiBLdXBsamVuLCAxMCBBdWcgMjAwNQorICAgIEdlbmVyYWwgaW5kZW50IGFuZCB3aGl0ZXNwYWNlIGNsZWFudXBzLgogCi0qIENoZWNrIGFyZ3VtZW50IGNvdW50IGluICJtaWkiIGNvbW1hbmQuCi0gIFByb2JsZW0gcG9pbnRlZCBvdXQgYnkgQW5kcmV3IER5ZXIsIDEzIEp1biAyMDA1Citjb21taXQgNDFhMGU4YjMwNGQzZmY1NWZlMjdhMjMwNTA3YWFjNzk2ODQwMTZhYworQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDIyIDEwOjQyOjIxIDIwMDYgLTA1MDAKIAotKiBDbGVhbnVwIFRRTTUyMDAgYm9hcmQgY29uZmlndXJhdGlvbnM6Ci0gIC0gbWFrZSBoaWdoYm9vdCBjb25maWd1cmF0aW9ucyB1c2UgZW52aXJvbm1lbnQgYXQgaGlnaCBlbmQsIHRvbywKLSAgICB0byBhdm9pZCBmbGFzaCBmcmFnbWVudGF0aW9uCi0gIC0gYWx3YXlzIHVzZSByZWR1bmRhbmQgZW52aXJvbm1lbnQKLSAgLSBkb24ndCBlbmFibGUgdmlkZW8gY29kZSBmb3IgbW9kdWxlcyB3aXRob3V0IGdyYXBoaWNzIGNvbnRyb2xsZXIKLSAgLSBwcm92aWRlIHVzZWZ1bCAodGhvdWdoIGRpZmZlcmVudCkgbXRkcGFydHMgc2V0dGluZ3MKLSAgLSBnZXQgcmlkIG9mIENPTkZJR19DU19BVVRPQ09ORiB3aGljaCB3YXMgYWx3YXlzIHNldCBhbnl3YXkKKyAgICBDbGVhbnVwIGNvbXBpbGVyIHdhcm5pbmdzLgogCi0qIEV4dGVuZCBta2NvbmZpZyB0b29sIHRvIHByaW50IG1vcmUgdXNlZnVsIHRhcmdldCBuYW1lCitjb21taXQgNWRlNjJjNDdhODYyOGIzZGE0ZDczZjdjMDcwMjdmMzJhMzM0MmQ0MAorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDIyIDA5OjMxOjU5IDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgaGlnaC1ib290IG9uIFRRTTUyMDAgYW5kIFRRTTUyMDBTIGJvYXJkcy4KLSAgSGludDogdGhlIENQTEQgb24gdGhlIFRRTTUyMDAgbXVzdCBiZSBwcm9ncmFtbWVkIHdpdGggYSBzb2Z0d2FyZQotICB2ZXJzaW9uIHN1cHBvcnRpbmcgdGhlIGhpZ2ggYm9vdCBvcHRpb24hIFRoZSBuZXcgVFFNNTIwMFMgaXMKLSAgYWxyZWFkeSBzdXBwb3J0aW5nIHRoaXMgb3B0aW9uLiBPbiB0aGUgVFFNNTIwMCB0aGlzIG9wdGlvbiB3aWxsIGJlCi0gIHN1cHBvcnRlZCBpbiBjb25maWd1cmF0aW9ucyB3aXRoIE1QQzUyMDAgcmV2IEIgcHJvY2Vzc29ycy4KLSAgVG8gYWN0dWFsbHkgImhpZ2ggYm9vdCIsIHNldCBqdW1wZXIgWDMwIG9uIHRoZSBTVEs1Mnh4LgotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMiBKdWwgMjAwNgorICAgIEZpeCBkaXNhYmxlX29mIGJvb3RpbmcKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBzdXBwb3J0IGZvciBuZXcgVFFNNTIwMCByZXZpc2lvbnMKLSAgLSBTdXBwb3J0IGZvciBUUU01MjAwUyAoc2hvcnQgdmVyc2lvbiB3aXRob3V0IGdyYXBoaWMgY29udHJvbGxlcikKLSAgLSBTdXBwb3J0IGZvciBtb2R1bGVzIHdpdGggJ04nIHR5cGUgUzI5R0wxMjhOIFNwYW5zaW9uIGZsYXNoZXMKLSAgICAocmVxdWlyZXMgY2hhbmdlcyB0byBmbGFzaCBsYXlvdXQpCi0gIC0gU3VwcG9ydCBmb3IgTVBDNTIwMEIgY3B1IChtb3N0bHkgc3VwcG9ydCBmb3Igc2Vjb25kIFNEUkFNIGJhbmspCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IEp1bCAyMDA2Citjb21taXQgODdhNDQ5YzhhYzM5NjQyMGNiMjQyNjBmNzE3ZWE5ZTZmYWE4MjA0NworQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDIyIDA5OjIzOjU1IDIwMDYgLTA1MDAKIAotKiBGaXggc3VwcG9ydCBmb3IgUFMvMiBrZXlib2FyZCBvbiBUUU04NXh4IGJvYXJkcwotICBUaGUgUFMvMiBrZXlvYmFyZCBkcml2ZXIgZm9yIHRoZSBUUU04NXh4IG1vZHVsZXMgb25seSBzdXBwb3J0cyB0aGUKLSAgaW50ZXJuYWwgRFVBUlQgb2YgdGhlIE1QQzg1eHggQ1BVLiBTaW5jZSB0aGUgTVBDODU2MCBkb2Vzbid0Ci0gIGluY2x1ZGUgYSBEVUFSVCwgdGhlIFRRTTg1NjAgbW9kdWxlcyBjYW4ndCBiZSB1c2VkIHdpdGggdGhlIFBTLzIKLSAga2V5Ym9hcmQgY29udHJvbGxlciBvbiB0aGUgU1RLODV4eCBib2FyZC4KLSAgVGhlIFBTLzIga2V5Ym9hcmQgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggdGhlIG1vZHVsZXMgVFFNODU0MCwKLSAgVFFNODU0MSBhbmQgVFFNODU1NSwgYnV0IGl0IG9ubHkgaGFzIGJlZW4gdGVzdGVkIG9uIGEgVFFNODU0MCwgeWV0LgotICBNYWtlIHN1cmUgdGhlIFBTLzIgY29udHJvbGxlciBvbiB0aGUgU1RLODV4eCBpcyBwcm9ncmFtbWVkLiBKdW1wZXIKLSAgc2V0dGluZ3M6IFg2NiAxLTIsIDktMTA7IFg2MSAyLTMKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjEgSnVuIDIwMDYKKyAgICBTdXBwb3J0IGZvciBGRFQgaW4gdUltYWdlIGZvcm1hdCwgZXJyb3Igd2hlbiB1c2luZyBGRFQgZnJvbSBmbGFzaAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CiAKLSogQWRqdXN0IFJUQyBjZW50dXJ5IGhhbmRsaW5nIG9uIFNUSzUyeHggYm9hcmQgdG8gbWF0Y2ggTGludXggZHJpdmVyLgotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMiBKdW4gMjAwNgorY29tbWl0IDc1YzI5OWMzODM2OWQwMWFkZGQ1ZTA1NGI4YTE2MjE3YjcwZjRhODYKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAxNSAxNToxMjo1NSAyMDA2IC0wNDAwCiAKLSogQWRqdXN0IGZpbGVuYW1lcyBmb3IgVVNCIHVwZGF0ZSBpbWFnZXMgb24gVFJBQiBib2FyZC4KLSAgRHVyaW5nIGFuIGF1dG9tYXRpYyB1cGRhdGUgdmlhIFVTQiBzdGljaywgVS1Cb290IHNlYXJjaGVzIGZvcgotICBpbWFnZXMgd2l0aCB0aGUgbmFtZSAiZmlybXdhcmUuaW1nIiBhbmQgImtlcm5lbC5pbWciLiBUaGlzIG5hbWVzCi0gIGFyZSBub3cgY2hhbmdlZCB0byAiZmlybXdfMDEuaW1nIiBhbmQgImtlcm5sXzAxLmltZyIuIFRoaXMgaXMgZG9uZSwKLSAgdG8gcHJldmVudCB1cGRhdGVzIG9mIG5ldyBib2FyZHMgKHdpdGggdGhlIG5ldyBtYWNyb25pY3MgImMiIHN0ZXAKLSAgZmxhc2hlcykgd2l0aCBvbGQsIGluY29tcGF0aWJsZSBmaXJtd2FyZSBvciBrZXJuZWwgdmVyc2lvbnMuCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIxIEp1biAyMDA2CisgICAgVW5sb2NrIGNhY2hlIGJlZm9yZSBrZXJuZWwgc3RhcnRzIHVwIGZvciBNUEM4Nnh4CiAKLSogQnVnZml4IGluIFZGRCByb3V0aW5lIG9uIFRSQUIgYm9hcmQuCi0gIE1ha2Ugc3VyZSB1cHBlciBsZXh0IHBpeGVsIGNhbiBiZSBzZXQgdG8gYmx1ZSwgdG9vCi0gIChzbyBmYXIgb25seSByZWQgd2FzIHBvc3NpYmxlKS4KLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTUgRmViIDIwMDYKK2NvbW1pdCA2NzI1NjY3OGYwMGMwOWIwYTdmMTllODYyZTVjMTg0NzU1M2QzMWJjCitBdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMTUgMTU6MTM6MTUgMjAwNiAtMDQwMAogCi0qIEVuYWJsZSBidWZmZXJlZCBmbGFzaCB3cml0ZXMgZm9yIFRCNTIwMCBib2FyZC4KKyAgICBDb3B5IEdsb2JhbCBEYXRhIFBvaW50ZXIgdG8gcjI5IGZvciBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUgogCi0qIEZpeCBzb21lIGJ1Z3MgaW4gVFJBQiBib2FyZCBmbGFzaCBkcml2ZXIuCi0gIC0gaW5jcmVhc2UgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQgZnJvbSAyIHRvIDE1IHNlY29uZHMKLSAgLSB1c2UgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQgZm9yIHByb2dyYW1taW5nIGluc3RlYWQgb2YgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQKLSAgLSByZW1vdmUgIlVubG9jayBCeXBhc3MiIG1vZGUsIGJlY2F1c2UgbWFjcm9uaXggZmxhc2hlcyBkbyBub3Qgc3VwcG9ydAotICAgIHRoaXMgbW9kZSBvZmZpY2lhbGx5Ci0gIC0gZml4IGZsYXNoIHJlc2V0IGNvbW1hbmQgZnJvbSAweDAwRkYgdG8gMHgwMEYwLiAweDAwRkYgaXMgb25seSBzcGVjaWZpZWQKLSAgICBmb3IgSW50ZWwgY29tcGF0aWJsZSBmbGFzaGVzLCBub3QgZm9yIEFNRCBjb21wYXRpYmxlLgotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNSBGZWIgMjAwNgorY29tbWl0IDFjOGY2ZDhmYjAyOGYxNTYwOTRkMDVmMmQxNDI5OGU2NDc5MzY0YWMKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAxNSAxNToxMjo1NSAyMDA2IC0wNDAwCiAKLSogQWRkIGFkZGl0aW9uYWwgZXJyb3IgbWVzc2FnZXMgdG8gZmxhc2ggZHJpdmVyIG9uIFRSQUIgYm9hcmQKLSAgKGZvciBlcmFzZSBlcnJvcnMgYW5kIHRpbWVvdXQgZXJyb3JzKQotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNCBGZWIgMjAwNgorICAgIFVubG9jayBjYWNoZSBiZWZvcmUga2VybmVsIHN0YXJ0cyB1cCBmb3IgTVBDODZ4eAogCi0qIEFkZCBzdXBwb3J0IGZvciBUQjUyMDAgYm9hcmQKLSAgVGhlIFRCNTIwMCAoIlRpbnlib3giKSBpcyBhIHNtYWxsIGJhc2Vib2FyZCBmb3IgdGhlIFRRTTUyMDAgbW9kdWxlCi0gIGludGVncmF0ZWQgaW4gYSBsaXR0bGUgYWx1bWluaXVtIGNhc2UuCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDggSnVuIDIwMDYKK2NvbW1pdCAwZDljY2M1NWVkZjlhN2YzYzViMmI2MjYzNTgwYTZlYThkNzAyYTA0CitBdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMTUgMTU6MTM6MTUgMjAwNiAtMDQwMAogCi0qIEVuYWJsZSBidWZmZXJlZCBmbGFzaCB3cml0ZXMgZm9yIFRRTTUyMDAgYm9hcmQuCisgICAgQ29weSBHbG9iYWwgRGF0YSBQb2ludGVyIHRvIHIyOSBmb3IgREVDTEFSRV9HTE9CQUxfREFUQV9QVFIKIAotKiBGaXggcHJvYmxlbXMgd2l0aCBTYW5EaXNrIENvcnBvcmF0aW9uIENydXplciBNaWNybyBVU0IgbWVtb3J5IHN0aWNrLgorY29tbWl0IDg2YzhlMTdmMjVlOTcyYTdlMjcyOTUwYTA3MzVmYWQ4NGUwODJiODgKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEF1ZyAxNiAxMzo1OTo0NyAyMDA2IC0wNTAwCiAKLSogQWRkIHN1cHBvcnQgZm9yIFRRTTg4NUQgYm9hcmQuCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIwIE1hciAyMDA2CisgICAgKiBGaXggZGlzYWJsZV9vZiBib290aW5nCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggRkVDIGluaXRpYWxpc2F0aW9uOiBBbGwgTUlJIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB2aWEgRkVDMQotICByZWdpc3RlcnMsIGJ1dCBNSUlfU1BFRUQgd2FzIGNvbmZpZ3VyZWQgYWNjb3JkaW5nIHRvIEZFQyB1c2VkLiBTbwotICBpZiBvbmx5IEZFQzIgd2FzIHVzZWQsIHRoaXMgY2F1c2VkIHRoZSByZWFsIE1JSV9TUEVFRCByZWdpc3RlciBpbgotICBGRUMxIHRvIHN0YXkgdW5pbml0YWxpc2VkLCBsZXFhZGluZyB0byAibWlpX3NlbmQgU1RVQ0shIiBtZXNzYWdlcy4KLSAgRml4OiBhbHdheXMgY29uZmlndXJlIE1JSV9TUEVFRCBvbiBGRUMxIG9ubHkuCi0gIFBhdGNoIGJ5IE1hcmt1cyBLbG90emJ1ZWNoZXIsIDEyIEp1bCAyMDA2Citjb21taXQgMjVjNzUxZTlhZGM4NmUyMmZlM2I1YjQ3Y2YyODA2Mzc5YjU3NWRiNworQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgQXVnIDE2IDEwOjU0OjA5IDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgU1BDMTkyMCBib2FyZC4KLSAgUGF0Y2ggYnkgTWFya3VzIEtsb3R6YnVlY2hlciwgMTIgSnVsIDIwMDYKKyAgICAqIFN1cHBvcnQgZm9yIEZEVCBpbiB1SW1hZ2UgZm9ybWF0LCBlcnJvciB3aGVuIHVzaW5nIEZEVCBmcm9tIGZsYXNoCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KIAotKiBNQ0MyMDAgYm9hcmQ6IHN1cHBvcnQgY29uc29sZSBvbiBhbnkgb25lIG9mIHRoZSBRdWFkIFVBUlQgcG9ydHMuCitjb21taXQgZmVjZjFjN2U0ZGUxYjI3NzllZGMxODc0MmI5MWMyMmJkYzMyYjY4YgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBNb24gQXVnIDE0IDE1OjMzOjM4IDIwMDYgLTA1MDAKIAotKiBGaXggZXJyb3IgaW4gZmxhc2ggcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBvbiBNQ0MyMDAgYm9hcmQuCisgICAgRml4IEJBVDAgdG8gYWN0dWFsbHkgYmUgY2FjaGVhYmxlLCBub24tZ3VhcmRlZCBhcyBkb2N1bWVudGVkLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogTWFqb3IgUENNQ0lBIENsZWFudXAgdG8gbWFrZSBjb2RlIGJldHRlciByZWFkYWJsZSBhbmQgbWFpbnRhaW5hYmxlLgotICBOb3RlczoKLSAgLSBCb2FyZC1kZXBlbmRlbmQgY29kZSBmb3IgUlBYTElURSBhbmQgUlBYQ0xBU1NJQy1iYXNlZCBib2FyZHMKLSAgICBwbGFjZWQgdG8gdGhlIGRyaXZlcnMvcnB4X3BtY2lhLmMgZmlsZSB0byBhdm9pZCBkdXBsaWNhdGlvbi4KLSAgICBTYW1lIGZvciBUUU04eHgtYmFzZWQgYm9hcmRzIChkcml2ZXJzL3RxbTh4eF9wbWNpYS5jKS4KLSAgLSBkcml2ZXJzL2k4MjM2NS5jIGhhcyBiZWVuIHNwbGl0IGludG8gdHdvIHBhcnRzIGxvY2F0ZWQgYXQKLSAgICBib2FyZC9hdGMvdGkxMTN4LmMgYW5kIGJvYXJkL2NwYzQ1L3BkNjcyOTAuYyAoQVRDIGFuZCBDUEM0NSBhcmUKLSAgICB0aGUgb25seSBib2FyZHMgdXNpbmcgQ09ORklHXzgyMzY1KS4KLSAgLSBDaGFuZ2VzIHdlcmUgdGVzdGVkIGZvciBjbGVhbiBidWlsZCBhbmQgKnZlcnkqICpmZXcqIGJvYXJkcy4KK2NvbW1pdCA0MGJjODM1NTlkYjU3NDU2ODE5MDlmZDczODJhZTUwOTU2N2UxMTZkCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBBdWcgOSAxNTozMjoxNiAyMDA2IC0wNTAwCiAKLSogRml4IHRpbWVyIHByb2JsZW1zIG9uIEFNQ0MgeXVjY2EgYm9hcmQuCi0gIFNldCBUaW1lciBDbG9jayBTZWxlY3QgdG8gdXNlIENQVSBjbG9jayBhcyBhIHRpbWVyIGlucHV0IHNvdXJjZS4KKyAgICBSZW1vdmVkIE1QQzg2NDFIUENOIERUUyBzb3VyY2UgZmlsZSBmcm9tIGJ1aWxkLgorICAgIEl0IGlzIG5vIGxvbmdlciBsaW5rZWQgaW50byBVLUJvb3Q7IGl0cyBzb3VyY2VzIGFyZQorICAgIG5vdyBsb2NhdGVkIGluIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIEJyaW5nIHl1Y2NhIGNvbmZpZyBtb3JlIGluIGxpbmUgd2l0aCBvdGhlciBBTUNDIGJvYXJkcy4KK2NvbW1pdCAzNGMzYzBlMDFkYmYxZjhjYzJiZDA4ZGU5MmYyYjg5YmE4NDkyMWViCitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDc6MDMgMjAwNiAtMDUwMAogCi0qIEFkZCBBTUNDIGJhbWJvbyBib2FyZCB0byBNQUtFQUxMIGJ1aWxkIHNjcmlwdC4KKyAgICAqIFN3aXRjaGVkIGRlZmF1bHQgUENJIHNwZWVkIGZvciA4NTQwIEFEUyBiYWNrIHRvIDMzTUh6CisgICAgCisgICAgKiBBZGRlZCBjb21tZW50cyBhbmQgYSBwcmludGYgdG8gd2FybiB0aGF0IFBDSS1YIHdvbid0CisgICAgICB3b3JrIGF0IDMzTUh6CisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IEFNQ0MgYmFtYm9vIGV2YWwgYm9hcmQgY29tcGlsYXRpb24gZXJyb3JzLgorY29tbWl0IGI2YzVlMTM3M2I2ZWEwYmIzN2ExOGU0YWVlY2VjMDA2MTNkMWNkMzkKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NjozNSAyMDA2IC0wNTAwCiAKLSogQWRkIHN5c3RlbSBtZW1vcnkgdG8gdGhlIFBDSSByZWdpb24gbGlzdCBmb3IgQU1DQyBQUEM0NHggQ1BVcy4KLSAgRW5hYmxlZCBpdCBmb3IgWXVjY2EgYm9hcmQuCisgICAgKiBGaXhlZCBhIGJ1ZyB3aGVyZSA4NTU1IFBDSSBjb2RlIHVzZWQgdGhlIG9sZCB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMgUGF0Y2ggYnkgQW5keSBGbGVtaW5nIDE3LU1hci0yMDA2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgogCi0qIENsZWFudXAgY29uZmlnIGZpbGUgYW5kIGJvb3R1cCBvdXRwdXQgZm9yIFl1Y2NhIGJvYXJkLgorY29tbWl0IGJmMWRmZmZkOGMyNmY4ZWNkZDYzMGEwYWU0YzgzNGU3NTFlNGU0NTIKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NjoxMyAyMDA2IC0wNTAwCiAKLSogRml4IENPTkZJR180NDBfR1ggZGVmaW5lIHVzYWdlLgorICAgICogQWRkZWQgVklBIGNvbmZpZ3VyYXRpb24gdGFibGUKKyAgICAKKyAgICAqIEFkZGVkIHN1cHBvcnQgZm9yIFBDSTIgb24gQ0RTCisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogUmVtb3ZlIGF1dG9nZW5lcmF0ZWQgYm1wX2xvZ28uaCBmaWxlLgorY29tbWl0IGM4OGY5ZmU2NmI2NDI0N2U1YjZhMzg0MTBiYTMxNWNhMjU1OTZkMTYKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NTo0MSAyMDA2IC0wNTAwCiAKLSogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgNDQwU1BlIENQVSBiYXNlZCBldmFsIGJvYXJkIChZdWNjYSkuCisgICAgKiBGaXhlZCBQQ0kgbWVtb3J5IGRlZmluaXRpb25zIFBhdGNoIGJ5IEFuZHkgRmxlbWluZyAxNy1NYXItMjAwNgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KIAotKiBDYWxsIHNlcmlhbF9pbml0aWFsaXplKCkgYmVmb3JlIGZpcnN0IGRlYnVnKCkgaXMgdXNlZC4KK2NvbW1pdCA5NzA3NGVkOTY1NTMwOWI2NDIzMWJjMmNlZTY5ZmU4NTM5OWY4MDU1CitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDU6MTcgMjAwNiAtMDUwMAogCi0qIENsZWFudXAgdHJhYiBib2FyZCBmb3IgR0NDLTQueAorICAgICogQWRkZWQgc3VwcG9ydCBmb3IgaW5pdGlhbGl6aW5nIHNlY29uZCBQQ0kgYnVzIG9uIDg1eHggUGF0Y2ggYnkgQW5keSBGbGVtaW5nIDE3LU1hci0yMDA2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgogCi0qIFZvaWNlQmx1ZSB1cGRhdGU6IHVzZSBuZXcgTVREIGZsYXNoIHBhcnRpdGlvbmluZyBtZXRob2RzLCB1c2UgbW9yZQotICByZWFzb25hYmxlIFRFWFRfQkFTRSwgdXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgYW5kIGVuYWJsZSBrZXllZAotICBhdXRvYm9vdC4KLSAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDE2LiBBdWcgMjAwNQorY29tbWl0IGYwZTZmNTdmNzFiM2M0ZmRkMTMwMjhlYjAzYzNmM2U5MTkyNmRkYTIKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NDo0OSAyMDA2IC0wNTAwCiAKLSogQWRkIGZvcmdvdHRlbiBjaGFuZ2VzIGZvciB0aGUgUExFQiAyIEJvYXJkLgotICBQYXRjaCBieSBEYXZpZCBTbm93ZG9uLCAxMy4gQXVnIDIwMDUKKyAgICAqIEFkZGVkIFBDSS1YICNkZWZpbmVzIGZvciBQQ0ktWCBpbml0aWFsaXphdGlvbiBQYXRjaCBieSBBbmR5IEZsZW1pbmcgb24gMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogQWRkIHN1cHBvcnQgZm9yIHdyUFBNQzd4eC83NHh4IGJvYXJkcwotICBQYXRjaCBieSBSaWNoYXJkIERhbnRlciwgMTIgQXVnIDIwMDUKK2NvbW1pdCBhNGUxMTU1OGI4MTBlZjJjZGRmZmRmN2I5ZDg2YmMxMTMwNDQxOTYwCitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDQ6MjMgMjAwNiAtMDUwMAogCi0qIEFkZCBzdXBwb3J0IGZvciBndGgyIGJvYXJkCi0gIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgQXVnIDExIDIwMDUKKyAgICAqIE1hZGUgc3VyZSB0aGUgY29kZSB3aGljaCBkaXNhYmxlcyBwcmVmZXRjaCBmb3IgUENJIGRldmljZXMgc2V0cyB0aGUgc2l6ZSBvZiB0aGUgcHJlZmV0Y2ggcmVnaW9uIHRvIDAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nIG9uIDE3LU1hci0yMDA2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBzdXBwb3J0IGZvciBDT05GSUdfU0VSSUFMX01VTFRJIG9uIE1QQzV4eHgKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgOCBKdW4gMjAwNgorY29tbWl0IDBlMTYzODdkYjFkNGFhY2Q1YmYzNWNiNmQ3YzE5NDI3NjVjMDM0N2IKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0MzozNiAyMDA2IC0wNTAwCiAKLSAgVGhpcyBwYXRjaCBzdXBwb3J0cyB0d28gc2VyaWFsIGNvbnNvbGVzIG9uIGJvYXJkcyB3aXRoCi0gIGEgTVBDNXh4eCBDUFUuIFRoZSBjb25zb2xlIGNhbiBiZSBzd2l0Y2hlZCBhdCBydW50aW1lCi0gIGJ5IHNldHRpbmcgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIHRvIHRoZSBkZXNpcmVkIHNlcmlhbAotICBpbnRlcmZhY2UgKHNlcmlhbDAgb3Igc2VyaWFsMSkuIFRoZSBQU0NzIHRvIGJlIHVzZWQgYXMKLSAgY29uc29sZSBwb3J0IGFyZSBkZWZpbmRlZCBieSBDT05GSUdfUFNDX0NPTlNPTEUKLSAgYW5kIENPTkZJR19QU0NfQ09OU09MRTIuCi0gIFNlZSBSRUFETUUuc2VyaWFsX211bHRpIGZvciBkZXRhaWxzLgorICAgICogQWRkIEZsYXQgRGV2IFRyZWUgY29uc3RydWN0aW9uIGZvciBNUEM4NXh4IEFEUyBhbmQgQ0RTIGJvYXJkcyBQYXRjaCBieSBKb24gTG9lbGlnZXIgMTctSmFuLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIEJ1Z2ZpeCBpbiBJMkMgaW5pdGlhbGlzYXRpb24gb24gUzNDMjQwMC4KLSAgSWYgdGhlIGJ1cyBpcyBibG9ja2VkIGJlY2F1c2Ugb2YgYSBwcmV2aW91c2x5IGludGVycnVwdGVkCi0gIHRyYW5zZmVyLCB1cCB0byBlbGV2ZW4gY2xvY2tzIGFyZSBnZW5lcmF0ZWQgb24gdGhlIEkyQ1NDTAotICBsaW5lIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2ZlciBhbmQgdG8gZnJlZSB0aGUgYnVzLgotICBXaXRoIHRoaXMgZml4IHBpbiBJMkNTQ0wgKFBHNikgaXMgcmVhbGx5IGNvbmZpZ3VyZWQgYXMgR1BJTwotICBzbyB0aGUgY2xvY2sgcHVsc2VzIGFyZSByZWFsbHkgZ2VuZXJhdGVkLgotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNCBBcHIgMjAwNgorY29tbWl0IDg1NWU2ZmIwNzNmOWQwNGZlNGE3ZjA2YzEwN2VjYmFjNjM0NGRkZDQKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0MzowMCAyMDA2IC0wNTAwCiAKLSogRml4IEREUjYgZXJyYXRhIG9uIFRRTTgzNHggYm9hcmRzCi0gIFBhdGNoIGJ5IFRob21hcyBXYWVobmVyLCAwNyBNYXIgMjAwNgorICAgICogUmVtb3ZlZCB0aGUgb2Z0cmVlLmR0cyBmb3Igc3R4eHR4IGluIGxpZ2h0IG9mIHRoZSBjaGFuZ2VzIHRvIHRoZSBmbGF0IGRldmljZSB0cmVlIGhhbmRsaW5nIGNvZGUgUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrIDI2LUp1bmUtMjAwNgogCi0qIFJlbW92ZSBvYnNvbGV0ZSBmbGFzaCBkcml2ZXIgYm9hcmQvdHFtNTIwMC9mbGFzaC5jCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDExIEphbiAyMDA2Citjb21taXQgNTQ5OGQ5MDMxMmFhZDlmNmJkYmYwNDc5ODYwMjdjMzViMDNjZDE2MworQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQyOjI0IDIwMDYgLTA1MDAKIAotKiBVcGRhdGUgY29uZmlndXJhdGlvbiBmb3IgQ01DLVBVMiBib2FyZAotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBOb3YgMjAwNQorICAgICogUGF0Y2ggdG8gbW9kaWZ5IGZ0X2J1aWxkLmMgdG8gdXBkYXRlIGZsYXQgZGV2aWNlIHRyZWVzIGluIHBsYWNlIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jayAyNi1KdW5lLTIwMDYKIAotKiBBZGQgc3VwcG9ydCBmb3IgUFMvMiBrZXlib2FyZCBvbiBUUU04NXh4IGJvYXJkCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IE5vdiAyMDA1Citjb21taXQgMDI2Nzc2OGVkZGM1Y2E3YmMxODY1YmM0MGM4NjY4MjlhYzVlZmJmZQorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQxOjM3IDIwMDYgLTA1MDAKIAotICBUZXN0ZWQgb24gYSBTVEs4NVhYIGJhc2Vib2FyZC4gTWFrZSBzdXJlIHRoZSBQUy8yIGNvbnRyb2xsZXIKLSAgaGFzIGJlZW4gcHJvZ3JhbW1lZC4gSnVtcGVyIFNldHRpbmdzOiBYNjYgMS0yLCA5LTEwOyBYNjEgMi0zCisgICAgKiBNb2RpZnkgYm9vdG0gY29tbWFuZCB0byBzdXBwb3J0IGJvb3Rpbmcgd2l0aCBmbGF0IGRldmljZSB0cmVlcyBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2sgMjYtSnVuZS0yMDA2CiAKLSogRml4IFRSQUIgY2hhbm5lbCBzd2l0Y2hpbmcgZGVsYXkgZm9yIHRyYWJfZmt0LmJpbiBzdGFuZGFsb25lIGFwcGxpa2F0aW9uCi0gIEluIHRzYzIwMDBfcmVhZF9jaGFubmVsKCkgdGhlIGRlbGF5IGFmdGVyIHNldHRpbmcgdGhlIG11bHRpcGxleGVyCi0gIHRvIGEgdGVtcGVyYXR1cmUgY2hhbm5lbCBpcyBpbmNyZWFzZWQgZnJvbSAxLDUgbXMgdG8gMTAgbXMuIFRoaXMKLSAgaXMgdG8gYWxsb3cgdGhlIG11bHRpcGxleGVyIGlucHV0cyB0byBzdGFiaWxpemUgYWZ0ZXIgaHVnZSBzdGVwcwotICBvZiB0aGUgaW5wdXQgc2lnbmFsIGxldmVsLgotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOCBOb3YgMjAwNQorY29tbWl0IDhmYzhiZDJjYzQ3OWI2Y2QxODhmZGVkZTQwMTBlMGUwNTI5NzBiOGEKK0F1dGhvcjogSm9obiBUcmFpbGwgPGpvaG4udHJhaWxsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBBdWcgOSAxNDozMzo1MCAyMDA2ICswMTAwCiAKLSogQWRqdXN0IFRRTTUyMDAgbWFrZSB0YXJnZXRzCi0gIE1ha2UgdGhlIGF1dG9tYXRpYyBDUyBjb25maWd1cmF0aW9uIHRoZSBkZWZhdWx0LgotICBUaGUgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb25zIENPTkZJR19UUU01MjAwX0FBLCBDT05GSUdfVFFNNTIwMF9BQgotICBhbmQgQ09ORklHX1RRTTUyMDBfQUMgYXJlIHJlbW92ZWQuCi0gICJUUU01MjAwX2NvbmZpZyIgaXMgbm93IHRoZSBkZWZhdWx0IGZvciBTVEs1MlhYLjIwMCBiYXNlIGJvYXJkcy4KLSAgT24gYSBTVEs1MlhYLjEwMCBiYXNlIGJvYXJkICJUUU01MjAwX1NUSzEwMF9jb25maWciIG11c3QgYmUgdXNlZC4KLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDcgTm92IDIwMDUKKyAgICBBZGQgUmFwaWRpbyBzdXBwb3J0IGZvciB0aGUgTVBDODY0MUhQQ04KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb2huIFRyYWlsbCA8am9obi50cmFpbGxAZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggc2V0dGluZyBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBvbiB0cmFiIGJvYXJkCi0gIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBpcyBub3cgc2V0IGJlZm9yZQotICBkb19hdXRvX3VwZGF0ZSgpIGlzIGNhbGxlZCwgc28gdGhhdCAidmVyIiBjYW4gYmUgdXNlZAotICBpbiBVU0IgdXBkYXRlIHNjcmlwdHMuCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE9jdCAyMDA1Citjb21taXQgOTFhNDE0YzdkMWZiMGVhYzkxMjU5MmNkOTk1YjMwYzlmMjMwNDVjOQorQXV0aG9yOiBKb2huIFRyYWlsbCA8am9obi50cmFpbGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyA4IDExOjMyOjQzIDIwMDYgKzAxMDAKIAotKiBGaXggd3JvbmcgdXNhZ2Ugb2YgdWRlbGF5KCkgaW4gbGVkX2JsaW5rKCkgb24gdHJhYiBib2FyZAotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNQorICAgIEZpeCBjYXNsYXQgY2FsY3VsYXRpb24KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb2huIFRyYWlsbCA8am9obi50cmFpbGxAZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggdWRlbGF5IGJ1ZyBpbiB2ZmQuYyBmb3IgdHJhYiBib2FyZAotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNQorY29tbWl0IDcwOWQzMDczZTc0MTUzMjc4ZTc5MDRhNzA4MTliYmVmN2RmNTBlMWEKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVGh1IEF1ZyAzIDE2OjE3OjU2IDIwMDYgLTA1MDAKIAotKiBEaXNhYmxlIEpGRlMyIHN1cHBvcnQgZm9yIHRyYWIgYm9hcmQKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDUKKyAgICBDb252ZXJ0IHRvIG1hYy1hZGRyZXNzIGluIGV0aGVybmV0IG5vZGVzLgogCi0qIENoYW5nZSBtdGRwYXJ0cyBkZWZpbml0aW9uIG9uIHRyYWIgYm9hcmQgdG8gbWF0Y2ggY3VycmVudCBmbGFzaCBtYXAKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDUKK2NvbW1pdCA3MTc0OGFmODMzY2ExMDE3ZWRmMTQxNWJlMzc2MzY2ZmYyOTM3ZDE3CitBdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBKdWwgMjggMTI6NDE6MzUgMjAwNiAtMDQwMAogCi0qIEZpeCBtZW1vcnkgaW5pdCBwcm9ibGVtcyBvbiBNQ0MyMDAgYm9hcmQKKyAgICBDb3JyZWN0IHRoZSBpcnEgdmFsdWUgb2YgRFVBUlQyCiAKLSogRml4IEl4RXRoREIuaCB0byBjb21waWxlIGFnYWluCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgSnVuIDIwMDYKK2NvbW1pdCA5Y2IzZTg4MTZhZTRkODU0ZTdkYzIyMTI4YzNlZWEzZDcwYmI5ODJjCitBdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBKdWwgMjggMTI6NDE6NDEgMjAwNiAtMDQwMAogCi0qIE1pbm9yIGNsZWFudXAgZm9yIFBDUzQ0MEVQIGJvYXJkCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgSnVuIDIwMDYKKyAgICBDaGFuZ2UgdGhlIHNwYWNlIHNpemUgb2YgUEVYIElPIGluIFJFQURNRQogCi0qIEFkZCBNQ0Y1MjgyIHN1cHBvcnQgKHdpdGhvdXQgcHJlbG9hZGVyKQotICByZWxvY2F0ZSBpY2hhY2hlX1N0YXRlIHRvIHJhbQotICB1LWJvb3QgY2FuIHJ1biBmcm9tIGludGVybmFsIGZsYXNoCi0gIEFkZCBFQitNQ0YtRVYxMjMgYm9hcmQgc3VwcG9ydC4KLSAgQWRkIG02OGsgQm9hcmRzIHRvIE1BS0VBTEwKLSAgUGF0Y2ggZnJvbSBKZW5zIFNjaGFyc2lnLCAwOCBBdWcgMjAwNQorY29tbWl0IDIzOWRiMzdjOTRmN2E5Mjk0MWM0NDY1ZmVjZWI4NjdjNjA5MjQxYzUKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgRnJpIEp1bCAyOCAxMjo0MToxOCAyMDA2IC0wNDAwCiAKLSogTmlvcyBJSSAtIEFkZCBBbHRlcmEgRVAxQzIwLCBFUDFTMTAgYW5kIEVQMVM0MCBib2FyZHMKLSAgUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwOCBKdW4gMjAwNgorICAgIE1vdmUgZ2V0X2JvYXJkX3N5c19jbGsgdG8gYm9hcmQgZGlyZWN0b3J5CiAKLSogTmlvcyBJSSAtIEFkZCBFUENTIENvbnRyb2xsZXIgYm9vdHJvbSB3b3JrLWFyb3VuZAotICAtV2hlbiBib290aW5nIGZyb20gYW4gZXBjcyBjb250cm9sbGVyLCB0aGUgZXBjcyBib290cm9tIG1heSBsZWF2ZSB0aGUKLSAgc2xhdmUgc2VsZWN0IGluIGFuIGFzc2VydGVkIHN0YXRlIGNhdXNpbmcgc29mdCByZXNldCBoYW5nLiBUaGlzCi0gIHBhdGNoIGVuc3VyZXMgc2xhdmUgc2VsZWN0IGlzIG5lZ2F0ZWQgYXQgcmVzZXQuCi0gIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDggSnVuIDIwMDYKK2NvbW1pdCA0OTI5MDBiOTg1NDM5ZmJjZTFhMTE4YWZkZTFlMzVkZWY4NzBkYjAzCitBdXRob3I6IEpvaG4gVHJhaWxsIDxqb2huLnRyYWlsbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBGcmkgSnVsIDI4IDA5OjAzOjU0IDIwMDYgKzAxMDAKIAotKiBVcGRhdGUgUEsxQzIwIGJvYXJkCi0gIC1VcGRhdGUgYmFzZSBhZGRyZXNzZXMgZm9yIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24KLSAgLUVsaW1pbmF0ZSB1c2Ugb2YgQ0FDSEVfQllQQVNTIGluIGJvYXJkIGNvZGUKLSAgUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwOCBKdW4gMjAwNgorICAgIEZpeCA4NjQxSFBDTiBwb2xsdXRpb24KIAotKiBOaW9zIElJIC0gRml4IEkvTyBNYWNyb3MgYW5kIG1pbmktYXBwIHN0dWJzCi0gIC1GaXggYXNtL2lvLmggbWFjcm9zCi0gIC1FbGltaW5hdGUgdXNlIG9mIENBQ0hFX0JZUEFTUyBpbiBjcHUgY29kZQotICAtRWxpbWluYXRlIGFzc2VtYmxlciB3YXJuaW5ncwotICAtRml4IG1pbmktYXBwIHN0dWJzIGFuZCBmb3JjZSBubyBzbWFsbCBkYXRhCi0gIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDggSnVuIDIwMDYKK2NvbW1pdCA1MTVhYjhhNjJlODU3NGUyYmFiYzZlOGRjYzQzNTQ0YWQyMjFjNWIyCitBdXRob3I6IEpvaG4gVHJhaWxsIDxqb2huLnRyYWlsbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBGcmkgSnVsIDI4IDA4OjE2OjA2IDIwMDYgKzAxMDAKIAotKiBGaXggVS1Cb290IGVudmlyb25tZW50IHNlY3RvciBwcm90ZWN0aW9uIG9uIE1DQzIwMCBib2FyZAorICAgIEZpeCA4NjQxSFBDTiB0aW1lYmFzZQogCi0qIE1pbm9yIGNsZWFudXAgZm9yIFBDUzQ0MEVQIGJvYXJkCitjb21taXQgYzg2MzYwYjgzMGYxZWVjZDdhNzIyMDg1NzVkZGU0ZjU3ODc5ZmFlYQorQXV0aG9yOiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBGcmkgSnVsIDI4IDAwOjAxOjM0IDIwMDYgKzA4MDAKIAotKiBVcGRhdGUgUENTNDQwRVAgcG9ydCB0byBmaXQgaW50byBvbmUgZmxhc2ggZGV2aWNlIChpbmNsLiBlbnZpcm9ubWVudCkKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNiBKdW4gMjAwNgorICAgIEZpeGVkIE9GIGRldmljZSB0cmVlIG9mIG1wYzg2eHhocGNuIGJvYXJkLgorICAgIAorICAgIFRoZSBjaGFuZ2VzIHdvcmtzIGluIHdpdGgga2VybmVsIGlycSBtYXBwaW5nIHJld29yay4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBzdXBwb3J0IGZvciBQQ1M0NDBFUCBib2FyZAotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAyIEp1biAyMDA2Citjb21taXQgYmVhM2YyOGQyODU5NDJiZjNmN2FiMzM5Y2U4NTE3OGRlZDU0NDIyNQorQXV0aG9yOiBIYWl5aW5nIFdhbmcgPGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVsIDEyIDEwOjQ4OjA1IDIwMDYgLTA0MDAKIAotKiBGaXggZXhhbXBsZXMvTWFrZWZpbGU7IHNvbWUgYnVpbGQgdGFyZ2V0cyB3ZXJlIGxvc3QKKyAgICBBZGQgc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBtYWMgYWRkcmVzc2VzIHRvIG9yIGZyb20gSUQgRUVQUk9NLgorICAgIAorICAgIEFkZGVkIGNvZGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgTWFjIGFkZHJlc3NlcyB0by9mcm9tIElEIEVFUFJPTSgweDU3KS4KKyAgICBXaXRoIGF0dGFjaGVkIHBhdGNoLCB3ZSBjYW4gdXNlIGNvbW1hbmQgIm1hYy9tYWMgcmVhZC9tYWMgc2F2ZS8iCisgICAgdG8gcmVhZCBhbmQgd3JpdGUgRUVQUk9NIHVuZGVyIHUtYm9vdCBwcm9tcHQuCisgICAgCisgICAgVS1ib290IHdpbGwgY2FsY3VsYXRlIHRoZSBjaGVja3N1bSBvZiBFRVBST00gd2hpbGUgYm9vdHVwLAorICAgIGlmIGl0IGlzIHJpZ2h0LCB0aGVuIHUtYm9vdCB3aWxsIGNoZWNrIHdoZXRoZXIgdGhlIG1hYyBhZGRyZXNzCisgICAgb2YgZVRTRUMwLzEvMi8zIGlzIGF2YWlsYWxiZSAobm9uLXplcm8pLgorICAgIAorICAgIElmIHRoZXJlIGlzIG1hYyBhZGRyZXNzIGF2YWlsYWJlIGluIEVFUFJPTSwgdS1ib290IHdpbGwgdXNlIGl0LAorICAgIG90aGVyZXdpc2UsIHUtYm9vdCB3aWxsIHVzZSB0aGUgbWFjIGFkZHJlc3MgZGVmaW5lZCBpbgorICAgIE1QQzg2NDFIUENOLmguIFRoaXMgbWF0Y2hlcyB0aGUgcmVxdWlyZW1lbnQgdG8gc2V0IHVuaXF1ZSBtYWMgYWRkcmVzcworICAgIGZvciBlYWNoIFRTRUMgcG9ydC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWl5aW5nIFdhbmcgPGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IFlvcmsgU3VuIDx5b3Jrc3VuQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IHdhdGNoZG9nIGhhbmRsaW5nIGluIENGSSBmbGFzaCBkcml2ZXIKLSAgSnVzdCB1c2UgdWRlbGF5KCkgd2hlbiB3YWl0aW5nIGZvciBzdGF0dXMgY2hhbmdlcyB3aGljaCB3aWxsCi0gIGltcGxpY2l0ZWx5IHRyaWdnZXIgdGhlIHdhdGNoZG9nLgorY29tbWl0IGZjYjI4ZTc2MzQxNWUwZTRlNjZiMGY0NTg0MmQxNTU3YWUxOThlNWUKK0F1dGhvcjogSmluIFpoZW5neGlvbmcgPEphc29uLkppbkBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgSnVsIDEzIDEwOjM1OjEwIDIwMDYgLTA1MDAKIAotKiBGaXggUENJIHRvIG1lbW9yeSB3aW5kb3cgc2l6ZSBwcm9ibGVtcyBvbiBQTTgyeCBib2FyZHMKLSAgV2UgdXNlIHRoZSAiYXV0b21hdGljIiBtb2RlIHRoYXQgd2FzIHVzZWQgZm9yICB0aGUgIE1QQzgyNjZBRFMgIGFuZAotICBNUEM4MjcyIGJvYXJkcy4gRXZlbnR1YWxseSB0aGlzIHNob3VsZCBiZSB1c2VkIG9uIGFsbCBib2FyZHM/XQotICBQYXRjaCBieSBXb2xmZ2FuZyBHcmFuZGVnZ2VyLCAxNyBKYW4gMjAwNgorICAgIEZpeGVkIGluaXRyZCBpc3N1ZSBieSBkZWZpbmUgYmlnIFJBTQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6SmFzb24gSmluIDxKYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KIAotKiBDb3JyZWN0IEdQSU8gc2V0dXAgKFVBUlQxL0lSUSdzKSBvbiB5b3NlbWl0ZSAmIHllbGxvd3N0b25lCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjkgTWF5IDIwMDYKK2NvbW1pdCBlNmNkMmExNzg1ZDc0ZWMzZDMwYTg2ZjFjYjM2MGJlOGRlNDc4MTUxCitBdXRob3I6IEphc29uIEppbiA8SmFzb24uamluQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBKdWwgNyAxMDowMTo0NSAyMDA2IC0wNTAwCiAKLSogVXBkYXRlIEludGVsIElYUDR4eCBzdXBwb3J0Ci0gIC0gQWRkIElYUDR4eCBOUEUgZXRoZXJuZXQgTUFDIHN1cHBvcnQKLSAgLSBBZGQgc3VwcG9ydCBmb3IgSW50ZWwgSVhEUEc0MjUgYm9hcmQKLSAgLSBBZGQgc3VwcG9ydCBmb3IgUHJvZHJpdmUgUEROQjMgYm9hcmQKLSAgLSBBZGQgSVJRIHN1cHBvcnQKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMyBNYXkgMjAwNgorICAgIFdlIG1hZGUgYSB1LWJvb3QgcGF0Y2ggdG8gZml4IHRoZSBoYW5nIHVwIGlzc3VlCisgICAgd2hlbiBib290aW5nIGZpbGVzeXN0ZW0gZnJvbSByYW1kaXNrLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6SmFzb24gSmluIDxKYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggcHJvYmxlbSBpbiBQVlIgZGV0ZWN0aW9uIGZvciA0NDBHUgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IE1heSAyMDA2Citjb21taXQgMzg0MzNjY2M1ODUwZWU3MDU0OWFmMGIyYmM1YjkyMDM1NWVmNTM4OAorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQ3OjAzIDIwMDYgLTA1MDAKIAotKiBGaXggZ2NjIDMuNC54IEFGTEFHUyBzZXR0aW5nIGZvciBtNjhrIHBsYXRmb3JtLgorICAgICogU3dpdGNoZWQgZGVmYXVsdCBQQ0kgc3BlZWQgZm9yIDg1NDAgQURTIGJhY2sgdG8gMzNNSHoKKyAgICAqIEFkZGVkIGNvbW1lbnRzIGFuZCBhIHByaW50ZiB0byB3YXJuIHRoYXQgUENJLVggd29uJ3QKKyAgICAgIHdvcmsgYXQgMzNNSHoKKyAgICAgIFBhdGNoIGJ5IEFuZHkgRmxlbWluZyAxNy1NYXItMjAwNgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KIAotKiBFbmFibGUgYXV0b2Jvb3QgZm9yIE01MjcxRVZCIGJvYXJkLgorY29tbWl0IGU0YzJhMGViMGMzZTNmZmJmODI0ODAwMTg0ZWU0MmJkYzk5ZDViMTkKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NjozNSAyMDA2IC0wNTAwCiAKLSogQ2hhbmdlZCBkZWZhdWx0IHJhbWRpc2sgYWRkciBpbiB5b3NlbWl0ZS95ZWxsb3dzdG9uZSBwb3J0cwotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IE1heSAyMDA2CisgICAgKiBGaXhlZCBhIGJ1ZyB3aGVyZSA4NTU1IFBDSSBjb2RlIHVzZWQgdGhlIG9sZCB2YXJpYWJsZSBhbmQKKyAgICAgIGZ1bmN0aW9uIG5hbWVzCisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IFBDTUNJQSBzdXBwb3J0IG9uIHZpcnRsYWIyCitjb21taXQgY2JmYzdjZTc1NmI4OGViMjZlNTUzN2JjN2I2MjVjNDQ1YzZkY2ZhYworQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQ2OjEzIDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgVmlydExhYjIgYm9hcmQKLSAgKG5lZWRlZCBiZWNhdXNlIG9mIGRpZmZlcmVuY2VzIGluIHRoZSBQQ01DSUEgaGFyZHdhcmUpLgorICAgICogQWRkZWQgVklBIGNvbmZpZ3VyYXRpb24gdGFibGUKKyAgICAqIEFkZGVkIHN1cHBvcnQgZm9yIFBDSTIgb24gQ0RTCisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogTWlub3IgY2xlYW51cC4KK2NvbW1pdCA1MmM3YTY4YjhkNTg3ZWJjZjVhNmIwNTFiNThiM2QzZmZhMzc3ZGRjCitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDU6NDEgMjAwNiAtMDUwMAogCi0qIFVwZGF0ZSB5b3NlbWl0ZSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBmbGFzaCB3cml0ZSBidWZmZXIgc3VwcG9ydAotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIE1heSAyMDA2CisgICAgKiBGaXhlZCBQQ0kgbWVtb3J5IGRlZmluaXRpb25zCisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IGNvbXBpbGUgd2FybmluZ3MgaW4gY29tbW9uL3h5ek1vZGVtLmMKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBNYXkgMjAwNgorY29tbWl0IDA4NzQ1NDYwOWU0NzI5NTQ0M2FmNzkzYTI4MmNkZGNkOTFhNWY0OWMKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NToxNyAyMDA2IC0wNTAwCiAKLSogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgNDQwRVAgUmV2IEMgYW5kIDQ0MEdSIFJldiBCCi0gIFBhdGNoIGJ5IEpvaG4gT3RrZW4sIDA4IE1heSAyMDA2CisgICAgKiBBZGRlZCBzdXBwb3J0IGZvciBpbml0aWFsaXppbmcgc2Vjb25kIFBDSSBidXMgb24gODV4eAorICAgICAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nIDE3LU1hci0yMDA2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgogCi0qIE9NQVAgNTkxMi9PU0s6IHVwZGF0ZSBFTUlGUyBDUzEgdGltaW5nczoKLSAgUHJvYmxlbXMgaGF2ZSBiZWVuIHNlZW4gaW4gdGhlIGxpbnV4IGtlcm5lbCdzIHNtYzkxeCBuZXR3b3JrIGRyaXZlcgotICBkdWUgdG8gaW1wcm9wZXIgYnVzIHRpbWluZ3MuICBUaGUgbGF0ZXN0IDIuNiBPTUFQIGtlcm5lbHMgY3VycmVudGx5Ci0gIGhhdmUgYSB3b3JrYXJvdW5kLCBidXQgdGhpcyBmaXggYmVsb25ncyBpbiB1LWJvb3QuCi0gIFBhdGNoIGJ5IEtldmluIEhpbG1hbiwgMTMgT2N0IDIwMDUKK2NvbW1pdCBiNjM2YWFlYjZmZDUxNmE0NDJmYjYxMWJiZWVkZGYzMDc3YTY4N2ZiCitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDQ6NDkgMjAwNiAtMDUwMAogCi0qIEZpeCBSRUdfTVBVX0xPQURfVElNRVIgZGVmaW5pdGlvbiBpbiBtdWx0aXBsZSBPTUFQIHBvcnRzCi0gIFBhdGNoIGJ5IEhpcm9raSBLYW1pbmFnYSwgMTEgTWFyIDIwMDYKKyAgICAqIEFkZGVkIFBDSS1YICNkZWZpbmVzIGZvciBQQ0ktWCBpbml0aWFsaXphdGlvbgorICAgICAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nIG9uIDE3LU1hci0yMDA2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgogCi0qIFVwZGF0ZSBvbWFwNTkxMm9zayBib2FyZCBzdXBwb3J0Ci0gIC0gRml4IE9NQVAgc3VwcG9ydCB0aGF0IG9tYXA1OTEyb3NrIGNvbXBpbGVzIGluIGN1cnJlbnQgc291cmNlIHRyZWUKLSAgLSBVcGRhdGUgd2l0aCBjb2RlIGZyb20gImh0dHA6Ly9vbWFwLnNwZWN0cnVtZGlnaXRhbC5jb20vb3NrNTkxMiIKLSAgICB0byBmaXggcHJvYmxlbXMgd2l0aCBERFIgaW5pdGlhbGl6YXRpb24KLSAgLSBGaXggdGltZXIgc2V0dXAKLSAgLSBVc2UgQ0ZJIGZsYXNoIGRyaXZlciBhbmQgc3VwcG9ydCBjb21wbGV0ZSAzMk1CIG9mIG9uYm9hcmQgZmxhc2gKLSAgLSBBZGQgInByaW50X2NwdWluZm8oKSIgYW5kICJjaGVja2JvYXJkKCkiIGZ1bmN0aW9ucyB0byBkaXNwbGF5Ci0gICAgQ1BVICh3aXRoIGZyZXF1ZW5jeSkgYW5kIEJvYXJkIGluZm9zCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgTWF5IDIwMDYKK2NvbW1pdCAyMGFiYmM2ZmZmYTExNTY5MDEwN2NjOTQyYzdhYmY4NGJkYzAzYTFiCitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDQ6MjMgMjAwNiAtMDUwMAogCi0qIEZpeCB3YXRjaGRvZyBpc3N1ZXMgZm9yIENvbGRGaXJlIGJvYXJkcy4KKyAgICAqIE1hZGUgc3VyZSB0aGUgY29kZSB3aGljaCBkaXNhYmxlcyBwcmVmZXRjaCBmb3IgUENJIGRldmljZXMKKyAgICAgIHNldHMgdGhlIHNpemUgb2YgdGhlIHByZWZldGNoIHJlZ2lvbiB0byAwCisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgb24gMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogQWRkIE01MjcxRVZCIGJvYXJkIHN1cHBvcnQuCitjb21taXQgNDBkNWZhMzVkMDJkZjIyNTgwNTkzYmYwMDM5YWIxNzMzNjdlOGVmMAorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQzOjM2IDIwMDYgLTA1MDAKIAotKiBNYWtlIFI1MjAwIHNwZWNpZmljIGxvdyBsZXZlbCBpbml0aWFsaXphdGlvbiBib2FyZCBjb25kaXRpb25hbC4KKyAgICAqIEFkZCBGbGF0IERldiBUcmVlIGNvbnN0cnVjdGlvbiBmb3IgTVBDODV4eCBBRFMgYW5kIENEUyBib2FyZHMKKyAgICAgIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciAxNy1KYW4tMjAwNgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogVXBkYXRlIENQVSB0YXJnZXQgaWRlbnRpZmljYXRpb24gc3RyaW5ncyBmb3IgQ29sZEZpcmUgZmFtaWx5LgorY29tbWl0IGJlN2U4YjBjYjVhMGM0OWRjMTgwMDc1Yjk2ZGYyOTZhODkzYmYxNDYKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0MzowMCAyMDA2IC0wNTAwCiAKLSogVXBkYXRlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBNQ0Y1MjcxLgorICAgICogUmVtb3ZlZCB0aGUgb2Z0cmVlLmR0cyBmb3Igc3R4eHR4IGluIGxpZ2h0IG9mIHRoZSBjaGFuZ2VzCisgICAgICB0byB0aGUgZmxhdCBkZXZpY2UgdHJlZSBoYW5kbGluZyBjb2RlCisgICAgICBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2sgMjYtSnVuZS0yMDA2CiAKLSogRml4IHNlcmlhbCBjb25zb2xlIHN1cHBvcnQgZm9yIE1DRjUyNzEuCitjb21taXQgMWIzODBlYzIyNTY2NWU3Mzk1OTY3N2YzODkzZGM2NThjNTkyNWUwNQorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQyOjI0IDIwMDYgLTA1MDAKIAotKiBGaXhlcyBmb3IgZ2NjIDMuNCBiYXNlZCBtNjhrIHRvb2xjaGFpbiwKLSAgYmFzZWQgb24gcGF0Y2ggYnkgSmF0ZSBTdWpqYXZhbmljaC4KKyAgICAqIFBhdGNoIHRvIG1vZGlmeSBmdF9idWlsZC5jIHRvIHVwZGF0ZSBmbGF0IGRldmljZSB0cmVlcyBpbiBwbGFjZQorICAgICAgUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrIDI2LUp1bmUtMjAwNgogCi0qIEZpeCBsb3dib290IHN1cHBvcnQgb24gTUNDMjAwIGJvYXJkCitjb21taXQgOThhOWM0ZDQ2OGE5NDJhMDllYmU4OTc5YmVjNTA4MDE3ZjNlNDQ2MgorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQxOjM3IDIwMDYgLTA1MDAKIAotKiBNZXJnZWQgTVBDODM0OUFEUyBhbmQgTVBDODM0OUVNRFMgcG9ydHMgaW50byBNUEM4MzQ5RU1EUyBwb3J0OgotICAtIFJlbW92ZWQgTVBDODM0OUFEUyBwb3J0Ci0gIC0gQWRkZWQgUENJIHN1cHBvcnQgdG8gTVBDODM0OUFEUwotICAtIHJld29ya2VkIG1lbW9yeSBtYXAgdG8gYWxsb3cgbWFwcGluZyBvZiBhbGwgcmVnaW9ucyB3aXRoIEJBVHMKLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMjAgQXByIDIwMDYKKyAgICAqIE1vZGlmeSBib290bSBjb21tYW5kIHRvIHN1cHBvcnQgYm9vdGluZyB3aXRoIGZsYXQgZGV2aWNlIHRyZWVzCisgICAgICBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2sgMjYtSnVuZS0yMDA2CiAKLSogQ29kaW5nIFN0eWxlIGNsZWFudXAKK2NvbW1pdCBkYTAxMmFiNjYxZmQ0YWIxNjlkZDdiOWIzMjIwMWE0ZGY2MmNmMzRhCitBdXRob3I6IEppbiBaaGVuZ3hpb25nIDxKYXNvbi5KaW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAwODo0Mzo1NiAyMDA2IC0wNTAwCiAKLSogV3JpdGUgUlRDIHNlY29uZHMgZmlyc3QgdG8gbWFpbnRhaW4gc2V0dGluZ3MgaW50ZWdyaXR5IHBlcgotICBNYXhpbS9EYWxsYXMgRFMxMzA2IGRhdGEgc2hlZXQuCi0gIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMDIgTWF5IDIwMDYKKyAgICBDaGFuZ2UgSWQgdG8gc3ltYm9saWMgbmFtZSBmb3IgUlRMODEzOQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEphc29uIEppbiA8SmFzb24uamluQGZyZWVzY2FsZS5jb20+CiAKLSogU2NoZWR1bGVkIGZvciByZW1vdmFsOiBzdHJuaWNtcCgpIHdoaWNoIGlzIHVudXNlZAorY29tbWl0IGJjMDljZjNjMmJmYjhkNTRjNjU5Y2JiMzMyZjc5ZDA5NTA5ODJmZDAKK0F1dGhvcjogSmluIFpoZW5neGlvbmctUjY0MTg4IDxKYXNvbi5KaW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEp1biAyNyAxODoxMjoxMCAyMDA2ICswODAwCiAKLSogVXBkYXRlIGZvciBJbnRlbCBNb25haGFucyBib2FyZHM6Ci0gIC0gc3VwcG9ydCBmb3IgbWFnaWMga2V5IGRldGVjdGlvbiBhbmQgaGFuZGxpbmcgb24gZGVsdGEgYm9hcmQKLSAgLSBOQU5EIHN1cHBvcnQgZm9yIHp5bG9uaXRlIGJvYXJkICsgc29tZSBtaW5vciBjbGVhbnVwCisgICAgRml4IFJUTDgxMzkgaW4gYmlnIGVuZGlhbgorICAgIAorICAgIHNpZ25lZC1vZmYtYnk6IEphc29uIEppbiA8SmFzb24uSmluQGZyZWVzY2FsZS5jb20+CisgICAgc2lnbmVkLW9mZi1ieTogV2VpIFpoYW5nIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KIAotKiBEZWNsYXJlIGxvYWRfc2VyaWFsX3ltb2RlbSgpIHdoZW4gdXNpbmcgQ0ZHX0NNRF9MT0FEQi4KLSAgUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAwMSBNYXkgMjAwNgorY29tbWl0IGZjZmI5YTU3OTQ3ZmMyMDNiOTlmZTgxYWIwNTc4ZjcyODYyNjFmOWYKK0F1dGhvcjogSmluIFpoZW5neGlvbmctUjY0MTg4IDxKYXNvbi5KaW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEp1biAyNyAxODoxMjoyMyAyMDA2ICswODAwCiAKLSogRml4ZWQgaGFuZGxpbmcgb2YgYmFkIGNoZWNrc3VtcyB3aXRoICJta2ltYWdlIC1sIgorICAgIEZpeCBUc2VjIGJ1ZyB3aGVuIG5vIGxpbmsKKyAgICAKKyAgICAgV2hlbiB0ZnRwIGEgbm9uLWV4aXN0IGZpbGUgZnJvbSB0aGUgdGZ0cCBzZXJ2ZXIsIHUtYm9vdCB3aWxsIGNoZWNrCisgICAgIHRoZSBsaW5rIG9mIGFsbCBldGggcG9ydC4gVGhlIG9yaWdpbmFsIGZpbGUgd2lsbCByZXR1cm4gd3JvbmcgbGluaworICAgICBzdGF0ZSBvbiB0aGUgbm8gbGluayBwb3J0cy4KKyAgICAKKyAgICBzaWduZWQtb2ZmLWJ5OiBKYXNvbiBKaW4gPEphc29uLkppbkBmcmVlc2NhbGUuY29tPgogCi0qIEFkZGVkIHN1cHBvcnQgZm9yIEJDMzQ1MCBib2FyZAotICBQYXRjaCBieSBTdGVmYW4gU3Ryb2JsLCAyMSBPY3QgMjAwNQorY29tbWl0IGJkMjJjMmI5NzUxNGZiZmIwZTAzYmQ5YzcyYjM0NDVlNGRiZDU3ZTIKK0F1dGhvcjogSmluIFpoZW5neGlvbmctUjY0MTg4IDxKYXNvbi5KaW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEp1biAyNyAxODoxMjowMiAyMDA2ICswODAwCiAKLSogVXBkYXRlIGZvciBOQzY1MCBib2FyZDoKLSAgLSBTdXBwb3J0IHJldjEgYW5kIHJldjIgaGFyZHdhcmUKLSAgLSBhZGFwdCB0byBuZXcgTkFORCBsYXllcgotICAtIGFkZCBDUDg1MCBjb25maWd1cmF0aW9uIGJhc2VkIG9uIE5DNjUwCisgICAgRml4IGJ1ZyBmb3IgaW9fYmFyIHNpemUgZHVyaW5nIHBjaSBzY2FuCisgICAgCisgICAgRHVyaW5nIHRoZSBwY2kgc2NhbiBwcm9jZXNzLCBTb21lIGRldmljZXMgcmV0dXJuIGJhcl9yZXBvbnNlIHdpdGggdGhlCisgICAgaGlnaGVzdCBieXRlcyAwLCBzdWNoIGFzIHRoZSBwY2kgYnJpZGdlIGluIHVsaTE1NzUgcmV0dXJuIGJhcl9yZXNwb25zZQorICAgIHdpdGggMHhmZmZmZmYsIFNvIHRoZSBiYXJfc2l6ZSBzaG91bGQgYmUgbWFudWFsbHkgc2V0IHVuZGVyIDY0Sy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKYXNvbiBKaW4gPGphc29uLmppbkBmcmVlc2NhbGUuY29tPgogCi0qIE1QQzUyMDA6IGVuYWJsZSBzbm9vcGluZyBvZiBETUEgdHJhbnNhY3Rpb25zIG9uIFhMQiBldmVuIGlmIG5vIFBDSQotICBpcyBjb25maWd1cmVkOyBvdGhyd2lzZSBETUEgYWNjZXNzZXMgYXJlbid0IGNhY2hlIGNvaGVyZW50IHdoaWNoCi0gIGNhdXNlcyBmb3IgZXhhbXBsZSBVU0IgdG8gZmFpbC4KK2NvbW1pdCBmYTdkYjljMzc3YmMyMzUzYTE3YmYxZDM4MWQ2NWE2YzQxODcyOGYwCitBdXRob3I6IEppbiBaaGVuZ3hpb25nLVI2NDE4OCA8SmFzb24uSmluQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBKdW4gMjcgMTg6MTE6NTQgMjAwNiArMDgwMAogCi0qIFNvbWUgY29kZSBjbGVhbnVwCisgICAgRW5hYmxlIFBDSUUxIGZvciBNUEM4NjQxSFBDTiBib2FyZAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEphc29uIEppbiA8SmFzb24uamluQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IGRiYXUxeDAwIGJvYXJkcyBicm9rZW4gYnkgZGJhdTE1NTAgcGF0Y2gKLSAgUExMOnMgd2VyZSBub3Qgc2V0IGZvciBib2FyZHMgb3RoZXIgdGhhbiAxNTUwLgotICBGbGFzaCBDRkkgY2F1c2VkIGNhcmQgdG8gaGFuZyBkdWUgdG8gdW5kZWZpbmVkIENGR19GTEFTSF9CQU5LU19MSVNULgotICBEZWZhdWx0IGJvb3QgaXMgbm93IGJvb3RwIGZvciBjYXJkcyBvdGhlciB0aGFuIDE1NTAuCi0gIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTAgQXVnIDIwMDUKK2NvbW1pdCA2ODQ2MjNjZTkyYzVmZDMyZTdkYjJkNmUwMTY5NDVhNjdjNWZmYWJhCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBKdW4gMjIgMDg6NTE6NDYgMjAwNiAtMDUwMAogCi0qIEZpeGVzIGNvbW1vbi9jbWRfZmxhc2guYzoKLSAgLSBmaXggc29tZSBjb21waWxlci9wYXJzZXIgZXJyb3IsIGlmIHVzaW5nIG02OGsgdG9vbCBjaGFpbgotICAtIG9wdGljYWwgZml4IGZvciBwcm90ZWN0IG9uL29mZiBhbGwgbWVzc2FnZXMsIGlmIHVzaW5nIG1vcmUKLSAgICB0aGVuIG9uZSBiYW5rCi0gIFBhdGNoIGJ5IEplbnMgU2NoYXJzaWcsIDI4IEp1bCAyMDA1CisgICAgRml4IGJ1ZyBpbiA4NjQxaHBjbiByZXNldCBjb21tYW5kIHdpdGggbm8gYXJncy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWl5aW5nIFdhbmcgPGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tPgorICAgIEFja2VkLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIEZpeCBRdWFkIFVBUlQgbWFwcGluZyBvbiBNQ0MyMDAgYm9hcmQgZHVlIHRvIG5ldyBIVyByZXZpc2lvbgorY29tbWl0IDhiZTQyOWE1ZGRiZjBlYmUyZDk0MTc0YmE1OGZjZmM3YTI0Mjg1ZGMKK0F1dGhvcjogWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEp1biAyMCAxNzo0NzoxNSAyMDA2ICswODAwCiAKLSogRml4IEpGRlMyIHN1cHBvcnQgZm9yIGxlZ2FjeSBOQU5EIGRyaXZlci4KKyAgICBSZXdvcmtlZCBJUlEgbWFwcGluZyBpbiBPRi10cmVlLgogCi0qIFJlbW92ZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBEb0MgY29kZSBhbmQgb2xkIGxlZ2FjeSBOQU5EIGRyaXZlci4KK2NvbW1pdCAwZTRjMmExN2NhMzQwMDFlZDM2ZDI1OWYxM2NiODhhZGE0NjExYThjCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBKdW4gMTUgMjE6MzM6MzcgMjAwNiAtMDUwMAogCi0qIEZpeCBQTTgyOF9QQ0kgdGFyZ2V0LCBmb3Igd2hpY2ggUENJIHdhcyAqbm90KiBjb25maWd1cmVkIGluLgorICAgIERvIG5vdCBlbmFibGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBvbiBzZWNvbmRhcnkgQ1BVcy4KKyAgICBEbyBub3Qgc2V0IHVwIEJBVHMgb24gc2Vjb25kYXJ5IENQVXMuICBMZXQgTGludXggZG8gdGhlIG5hc3R5LgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IExpdGU1MjAwQiBzdXBwb3J0OiBpbml0aWFsaXplIFNEZWxheSByZWdpc3RlcgotICBTZWUgRnJlZXNjYWxlJ3MgQU4zMjIxICJNUEM1MjAwQiBTRFJBTSBJbml0aWFsaXphdGlvbiBhbmQKLSAgQ29uZmlndXJhdGlvbiIsIDMuMy4xIFNEZWxheS0tTUJBUiArIDB4MDE5MAorY29tbWl0IDhlY2M5NzE2MThmNTYwMjlhZDk5ZDM1MTZmOGIyOTdhNmVkNTg5NzEKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgV2VkIEp1biA3IDEwOjUzOjU1IDIwMDYgLTA1MDAKIAotKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgorICAgIEZpeCBhIGdldF9ib2FyZF9zeXNfY2xrKCkgdXNlLWJlZm9yZS1kZWYgd2FybmluZy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgogCi0gIC0gQWRkIEludGVsIGxlZ2FjeSBsb2NrL3VubG9jayBzdXBwb3J0IHRvIGNvbW1vbiBDRkkgZHJpdmVyCitjb21taXQgZDliZjQ4NThmY2E1YWE0ZDY1MWIyODMyNzBmNzdkYTcyZWJhZGZkNQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgorRGF0ZTogICBXZWQgSnVuIDcgMTA6NTI6NDkgMjAwNiAtMDUwMAogCi0gICAgT24gc29tZSBJbnRlbCBmbGFzaCdzIChlLmcuIEludGVsIEozKSBsZWdhY3kgdW5sb2NraW5nIGlzCi0gICAgc3VwcG9ydGVkLCBtZWFuaW5nIHRoYXQgdW5sb2NraW5nIG9mIG9uZSBzZWN0b3Igd2lsbCB1bmxvY2sKLSAgICBhbGwgc2VjdG9ycyBvZiB0aGlzIGJhbmsuIFVzaW5nIHRoaXMgZmVhdHVyZSwgdW5sb2NraW5nCi0gICAgb2YgYWxsIHNlY3RvcnMgdXBvbiBzdGFydHVwICh2aWEgZW52IHZhciAidW5sb2NrPXllcyIpIHdpbGwKLSAgICBnZXQgbXVjaCBmYXN0ZXIuCisgICAgQWxsb3cgRFRDIHBhdGggdG8gYmUgcGFzc2VkIGluLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+CiAKLSAgLSBGaXhlZCBwcm9ibGVtIHdpdGggbXVsdGlwbGUgcmVhZHMgb2YgZW52cm9ubWVudCB2YXJpYWJsZQotICAgICJ1bmxvY2siIGFzIHBvaW50ZWQgb3V0IGJ5IFJlaW5oYXJkIEFybHQgJiBBbmRlcnMgTGFyc2VuLgorY29tbWl0IGM4M2FlOWVhNmQ5M2FiYmU3NTFiZjhhMzM5NjIzNmEwODRlNTZmODcKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEp1biA2IDE2OjU0OjI5IDIwMDYgLTA0MDAKIAotICAtIFJlbW92ZWQgdW53YW50ZWQgbGluZWZlZWRzIGZyb20gInByb3RlY3QiIGNvbW1hbmQgd2hlbgotICAgIENGR19GTEFTSF9QUk9URUNUSU9OIGlzIGVuYWJsZWQuCisgICAgTW9kaWZ5IHRoZSBJUlEgb2YgRFVBUlQyCiAKLSAgLSBDaGFuZ2VkIHAzcDQwMCBib2FyZCB0byB1c2UgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KK2NvbW1pdCBjOTM0ZjY1NWY5YWVjYTcwYTVjNWY4OGI0NjVkOWU5ZDU3YThkMjJlCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+CitEYXRlOiAgIFdlZCBNYXkgMzEgMTM6NTU6MzUgMjAwNiAtMDUwMAogCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgQXByIDIwMDYKKyAgICBSZXZpZXcgY2xlYW51cHMuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KIAotKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgotICAtIENvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIENGR19IWiAhPSAxMDAwIChzZXZlcmFsCi0gICAgWFNjYWxlLWJhc2VkIGJvYXJkcykKLSAgLSBGaXggdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gb2YgYnVmZmVyZWQgd3JpdGVzIChvZmYgYnkgYQotICAgIGZhY3RvciBvZiAxMDAwKQotICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAzMSBNYXIgMjAwNgorY29tbWl0IGNiNTk2NWZiOTViNzdhNDlmNGU2YWY5NTI0OGUwYzg0OWY0YWYwM2UKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgV2VkIE1heSAzMSAxMjo0NDo0NCAyMDA2IC0wNTAwCiAKLSogVXBkYXRlcyB0byBjb21tb24gUFBDNHh4IG9uYm9hcmQgKEREUilTRFJBTSBpbml0IGNvZGUgKDQwNSBhbmQgNDQwKQorICAgIFdoaXRlIHNwYWNlIGNsZWFudXAuCisgICAgU29tZSA4MC1jb2x1bW4gY2xlYW51cHMuCisgICAgQ29udmVydCBwcmludGYoKSB0byBwdXRzKCkgd2hlcmUgcG9zc2libGUuCisgICAgVXNlICNpbmNsdWRlICJzcGRfc2RyYW0uaCIgYXMgbmVlZGVkLgorICAgIEVuaGFuY2VkIHJlc2V0IGNvbW1hbmQgdXNhZ2UgbWVzc2FnZSBhIGJpdC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0gIDQwNSBTRFJBTTogLSBUaGUgU0RSQU0gcGFyYW1ldGVycyBjYW4gbm93IGJlIGRlZmluZWQgaW4gdGhlIGJvYXJkCi0JICAgICAgIGNvbmZpZyBmaWxlIGFuZCB0aGUgNDA1IFNEUkFNIGNvbnRyb2xsZXIgdmFsdWVzIHdpbGwKLQkgICAgICAgYmUgY2FsY3VsYXRlZCB1cG9uIGJvb3R1cCAoc2VlIFBQQ2hhbWVsZW9uRVZCKS4KLQkgICAgICAgV2hlbiB0aG9zZSBzZXR0aW5ncyBhcmUgbm90IGRlZmluZWQgaW4gdGhlIGJvYXJkCi0JICAgICAgIGNvbmZpZyBmaWxlLCB0aGUgcmVnaXN0ZXIgc2V0dXAgd2lsbCBiZSBhcyBpdCBpcyBub3csCi0JICAgICAgIHNvIHRoaXMgaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBicmVhayBhbnkgY3VycmVudAotCSAgICAgICBkZXNpZ24gdXNpbmcgdGhpcyBjb2RlLgorY29tbWl0IDNkNWM1YmU1NDc0NDVkZDNiZDJlYjczNjhkODBkZjAzZWE0Mzc5NzAKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgV2VkIE1heSAzMSAxMTozOTozNCAyMDA2IC0wNTAwCiAKLQkgICAgICAgVGhhbmtzIHRvIEFuZHJlYSBNYXJzb24gZnJvbSBEQVZFIGZvciB0aGlzIHBhdGNoLgorICAgIFJlbW92ZWQgdW5uZWVkZWQgbG9jYWxfYnVzX2luaXQoKSBmcm9tIDg2NDFIUENOIGJvYXJkLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSAgNDQwIEREUjogICAtIEFkZGVkIGZ1bmN0aW9uIHNkcmFtX3RyMV9zZXQgdG8gYXV0byBjYWxjdWxhdGUgdGhlCi0JICAgICAgIFRSMSB2YWx1ZSBmb3IgdGhlIEREUi4KLQkgICAgIC0gQWRkZWQgRUNDIHN1cHBvcnQgKHNlZSBwM3A0NDApLgorY29tbWl0IDRkM2Q3MjljMTZjMzkyZDI5ODJkMzI2NmI2NTlkMzMzYzkyNzY5N2QKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgV2VkIE1heSAzMSAxMToyNDoyOCAyMDA2IC0wNTAwCiAKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNyBNYXIgMjAwNgorICAgIE1vdmVkIG1wYzg2NDFocGNuX2JvYXJkX3Jlc2V0KCkgb3V0IG9mIGNwdS8gaW50byBib2FyZC8uCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCBkZXBlbmRlbmN5IGluIGNwdS9hcm05MjB0L3N0YXJ0LlMKLSAgUGF0Y2ggYnkgUGV0ZXIgTWVuemViYWNoLCAxMyBPY3QgMjAwNSBbRE5YIzIwMDYwNDAxNDIwMDA0NzNdCitjb21taXQgYjJhOTQxZGUwNjAzNTBhZDE1ODc4ZDgyMTk4MjVmNDk1MGU5YmI4ZQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgorRGF0ZTogICBXZWQgTWF5IDMxIDEwOjA3OjI4IDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgeW1vZGVtIHByb3RvY29sIGRvd25sb2FkCi0gIFBhdGNoIGJ5IFN0ZWZhbm8gQmFiaWMsIDI5IE1hciAyMDA2CisgICAgUmVtb3ZlIGRlYWQgZGVidWcgY29kZS4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgogCi0qIE1lbW9yeSBNYXAgVXBkYXRlIGZvciBEZWx0YSBib2FyZDogVS1Cb290IGlzIGF0IDB4ODAwMDAwMDAtMHg4NDAwMDAwMAotICBNZXJnZSBmcm9tIE1hcmt1cyBLbG90emL8Y2hlcidzIHJlcG8sIDAxIEFwciAyMDA2Citjb21taXQgMTI2YWE3MGYxMGJhM2QyMGUwYTZmNGQzMjMyODI1MDUxM2I3Nzc3MAorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgTWF5IDMwIDE3OjQ3OjAwIDIwMDYgLTA1MDAKIAotKiBHQ0MtNC54IGZpeGVzOiBjbGVhbiB1cCBnbG9iYWwgZGF0YSBwb2ludGVyIGluaXRpYWxpemF0aW9uIGZvciBhbGwKLSAgYm9hcmRzCisgICAgTW92ZSBtcGM4Nnh4IFBJWElTIGNvZGUgdG8gYm9hcmQgZGlyZWN0b3J5CisgICAgCisgICAgRmlyc3QgY3V0IGF0IG1vdmluZyB0aGUgUElYSVMgcGxhdGZvcm0gY29kZSBvdXQgb2YKKyAgICB0aGUgODZ4eCBjcHUgZGlyZWN0b3J5IGFuZCBpbnRvIGJvYXJkL21wYzg2NDFocGNuCisgICAgd2hlcmUgaXQgYmVsb25ncy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIFVwZGF0ZSBmb3IgRGVsdGEgYm9hcmQ6Ci0gIC0gcmVkdW5kYW50IE5BTkQgZW52aXJvbm1lbnQKLSAgLSBtaXNjIE1vbmFoYW5zIGNsZWFudXBzIChyZW1vdmUgZGVhZCBjb2RlIGV0Yy4pCi0gIC0gREE5MDMwIEluaXRpYWxpemF0aW9uOyBzb21lIG1pbmltYWwgY2hhbmdlcyB0byBQWEEgSTJDIGRyaXZlciB0bwotICAgIG1ha2UgaXQgd29yayB3aXRoIHRoZSBNb25haGFucy4KLSAgLSBNYWtlIE1vbmFoYW5zIGNsb2NrIGZyZXF1ZW5jeSBjb25maWd1cmFibGUgdXNpbmcKLSAgICBDRkdfTU9OQUhBTlNfUlVOX01PREVfT1NDX1JBVElPIGFuZAotICAgIENGR19NT05BSEFOU19UVVJCT19SVU5fTU9ERV9SQVRJTy4KLSAgTWVyZ2UgZnJvbSBNYXJrdXMgS2xvdHpi/GNoZXIncyByZXBvLCAyNSBNYXIgMjAwNgorY29tbWl0IDM4Y2VlMTJkY2ZjYzI1NzM3MWM5MDFjN2UxM2U1OGVjYWIwYTM1ZDgKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxIYWl5aW5nLldhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIE1heSAzMCAwOToxMDozMiAyMDA2IC0wNTAwCiAKLSogRW5hYmxlIFF1YWQgVUFSVCBvbSBNQ0MyMDAgYm9hcmQuCisgICAgSW1wcm92ZSAicmVzZXQiIGNvbW1hbmQncyBpbnRlcmFjdGlvbiB3aXRoIHdhdGNoZG9nLgorICAgIAorICAgICAgICAicmVzZXQgYWx0YmFuayIgd2lsbCByZXNldCBhbm90aGVyIGJhbmsgV0lUSE9VVCB3YXRjaCBkb2cgdGltZXIgZW5hYmxlZAorICAgICAgICAicmVzZXQgYWx0YmFuayB3ZCIgd2lsbCByZXNldCBhbm90aGVyIGJhbmsgV0lUSCB3YXRjaCBkb2cgZW5hYmxlZAorICAgICAgICAiZGlzd2QiIHdpbGwgZGlzYWJsZSB3YXRjaCBkb2cgYWZ0ZXIgdS1ib290IGJvb3RzIHVwIHN1Y2Nlc3NmdWxseQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEhhaXlpbmcgV2FuZyA8SGFpeWluZy5XYW5nQGZyZWVzY2FsZS5jb20+CiAKLSogQ2xlYW51cCBNQ0MyMDAgYm9hcmQgY29uZmlndXJhdGlvbjsgb21pdCBub24tZXhpc3RlbnQgc3R1ZmYuCitjb21taXQgNzAyMDVlNWE2ZGRjODUyOGIxMWRiOWViNGQzZmEwMjA5ZDlmY2UyYQorQXV0aG9yOiBIYWl5aW5nIFdhbmcgPEhhaXlpbmcuV2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgTWF5IDMwIDA4OjUxOjE5IDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgTVBDODU5Lzg2NiBSZXYuIEEuMAorICAgIEZpeCB0d28gU0RSQU0gc2V0dXAgYnVncy4KKyAgICAKKyAgICAgICAgRml4IEVDQyBzZXR1cCBidWcuCisgICAgICAgIEVuYWJsZSAxVC8yVCBiYXNlZCBvbiBudW1iZXIgb2YgRElNTXMgcHJlc2VudC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWl5aW5nIFdhbmcgPEhhaXlpbmcuV2FuZ0BmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBjb21tYW5kIGZvciBoYW5kbGluZyBERFIgRUNDIHJlZ2lzdGVycyBvbiBNUEM4MzQ5RUUgTURTIGJvYXJkLgorY29tbWl0IGQxMWZlYzUwMTUzMzRkZWIyMDEwZTM2Y2UwMGJiMTE4Y2M1NDI5YTUKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxIYWl5aW5nLldhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgRnJpIE1heSAyNiAxMDoyNDo0OCAyMDA2IC0wNTAwCiAKLSogRml4IEREUiBFQ0MgYml0IGRlZmluaXRpb25zIGZvciBNUEM4M3h4LgorICAgIEFkZCBmaXJzdCBkcmFmdCBvZiB0aGUgTVBDODY0MUhQQ04gZG9jL1JFQURNRS4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgogCi0qIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIE1QQzgzNDlFIE1EUyBib2FyZC4KK2NvbW1pdCBlZDQ1ZDZjOTMwYjU5Mzk3MThhODdlZTEyZTI1Y2Y5YTA1OTc4ZDRhCitBdXRob3I6IEhhaXlpbmcgV2FuZyA8SGFpeWluZy5XYW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBNYXkgMjYgMTA6MTM6MDQgMjAwNiAtMDUwMAogCi0qIEFkZCBzdXBwb3J0IGZvciBFQ0MgRERSIGluaXRpYWxpemF0aW9uIG9uIE1QQzgzeHguCisgICAgQWRkZWQgcGNpQDgwMDAgYmxvY2suCisgICAgVXBkYXRlZCBldGhlcm5ldCBpbnRlcnJ1cHQgbWFwcGluZ3MgKG1vdmVkIHVwIDQ4KS4KKyAgICBDbGVhbmVkIHVwIGEgZmV3IGNvbW1lbnRzLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+CiAKLSogQWRkIERNQSBzdXBwb3J0IGZvciBNUEM4M3h4LgorY29tbWl0IDMwMzNlYmIyMGZkN2MzNzJjN2JjYTNjOTk1NWE0NjkyYmIyMjQwYjcKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxIYWl5aW5nLldhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgRnJpIE1heSAyNiAxMDowMToxNiAyMDA2IC0wNTAwCiAKLSogQWRkIHN5bmMgaW4gZG9fcmVzZXQoKSByb3V0aW5lIGZvciBNUEM4M3h4IGFmdGVyIFJQUiByZWdpc3RlcgotICB3YXMgd3JpdHRlbiB0by4gSXQgaXMgbmVlZCBvbiBzb21lIHRhcmdldHMgd2hlbiBCQVQgdHJhbnNsYXRpb24KLSAgaXMgZW5hYmxlZC4KKyAgICBBbGxvdyBhcmdzIG9uIHJlc2V0IGNvbW1hbmQuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KIAotKiBBZGQgYml0IGRlZmluaXRpb25zIGZvciBNUEM4M3h4IEREUiBjb250cm9sbGVyIHJlZ2lzdGVycy4KK2NvbW1pdCAxNGUzNzA4MWZmM2NhYzdlYmU2ZTkzODM2NTIzNDI5ODUzYjZiMjkyCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+CitEYXRlOiAgIEZyaSBNYXkgMTkgMTM6Mjg6MzkgMjAwNiAtMDUwMAogCi0qIEFkZCBEY2J6KCksIERjYmkoKSBhbmQgRGNiZigpIHJvdXRpbmVzIGZvciBNUEM4M3h4LgorICAgIENoYW5nZSBhcmJpdHJhdGlvbiB0byByb3VuZC1yb2JpbiBmb3IgU01QIGxpbnV4LgogCi0qIENvcnJlY3Qgc2hpZnQgb2Zmc2V0cyBpbiBpY2FjaGVfc3RhdHVzIGFuZCBkY2FjaGVfc3RhdHVzIGZvciBNUEM4M3h4LgorY29tbWl0IDlhNjU1ODc2ZTU5OTViZTgwZjQ5MDU0ZTI1MDk1MDBlODcxZTRkM2EKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgRnJpIE1heSAxOSAxMzoyNjozNCAyMDA2IC0wNTAwCiAKLSogQWRkIHN1cHBvcnQgZm9yIERTMTM3NCBSVEMgY2hpcC4KKyAgICBFbmFibGUgZHVhbCBERFIgY29udHJvbGxlcnMgYW5kIGludGVybGVhdmluZy4KIAotKiBBZGQgc3VwcG9ydCBmb3IgTGl0ZTUyMDBCIGJvYXJkLgotICBQYXRjaCBieSAgUGF0Y2ggYnkgSm9zZSBNYXJpYSAoVHhlbWEpIExvcGV6LCAxNiBKYW4gMjAwNgorY29tbWl0IDU4NmQxZDVhYmQzZTUyNWYxZTFkOWI4MWU1YTYxYTRkYTZiMmZhM2MKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgRnJpIE1heSAxOSAxMzoyMjo0NCAyMDA2IC0wNTAwCiAKLSogQXBwbHkgU29DIGNvbmNlcHQgdG8gYXJtOTI2ZWpzIENQVXMsIGkuZS4gbW92ZSB0aGUgU29DIHNwZWNpZmljCi0gIHRpbWVyIGFuZCBjcHVfcmVzZXQgY29kZSBmcm9tIGNwdS8kKENQVSkgaW50byB0aGUgbmV3Ci0gIGNwdS8kKENQVSkvJChTT0MpIGRpcmVjdG9yaWVzCi0gIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDEzIE1hciAyMDA2CisgICAgVXBkYXRlIDg2eHggYWRkcmVzcyBtYXAgYW5kIExBV0JBUnMuCiAKLSogQ2hhbmdlIG1heCBzaXplIG9mIHVuY29tcHJlc3NlZCB1SW1hZ2UncyB0byA4TUJ5dGUgYW5kIGFkZAotICBDRkdfQk9PVE1fTEVOIHRvIGFkanVzdCB0aGlzIHNldHRpbmcuCitjb21taXQgY2NjY2U1ZDA1ODFiYjBiYTQ2MDI3OTlhNGI1MTEyZTU4ZDE1NzljYgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgorRGF0ZTogICBGcmkgTWF5IDE5IDEzOjE0OjE1IDIwMDYgLTA1MDAKIAotICBBcyBtZW50aW9uZWQgYnkgUm9iaW4gR2V0eiBvbiAyMDA1LTA1LTI0IHRoZSBzaXplIG9mIHVuY29tcHJlc3NlZAotICB1SW1hZ2VzIHdhcyByZXN0cmljdGVkIHRvIDRNQnl0ZXMuIFRoaXMgZGVmYXVsdCBzaXplIGlzIG5vdwotICBpbmNyZWFzZWQgdG8gOE1ieXRlcyBhbmQgY2FuIGJlIG92ZXJyaWRlZCBieSBzZXR0aW5nIENGR19CT09UTV9MRU4KLSAgaW4gdGhlIGJvYXJkIGNvbmZpZyBmaWxlLgorICAgIFJlbW92ZSBMMiBDYWNoZSBpbnZhbGlkYXRlIHBvbGxpbmcuCiAKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBNYXIgMjAwNgorY29tbWl0IGYzNWVjNjhmYjA2NmNlYzBlMzYyOTRiZmUwN2RlYzJkNGU4YWQzYTgKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgRnJpIE1heSAxOSAxMjozMzowOSAyMDA2IC0wNTAwCiAKLSogRml4IHByb2JsZW0gd2l0aCB1cGRhdGVkIFBDSSBjb2RlIGluIGNwdS9wcGM0eHgvNDA1Z3BfcGNpLmMKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBNYXIgMjAwNgorICAgIEVuYWJsZSAybmQgQ1BVIGFuZCBJMkMuCiAKLSogY3B1L3BwYzR4eC9zdGFydC5TIDogZXhjZXB0aW9ucyBhcmUgZW5hYmxlZCBhZnRlciByZWxvY2F0aW9uCi0gIFBhdGNoIGJ5IENlZHJpYyBWaW5jZW50LCAwNiBKdWwgMjAwNQorY29tbWl0IGJmNjkwZGNiNTEyZDM0YzRmY2VlYzBlYjFlNWMwZTg4YTlkYjVkNTQKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgTW9uIE1heSAxNSAwNzoyNjo1NiAyMDA2IC0wNTAwCiAKLSogYXUxeDAwX2V0aC5jOiBjaGVjayBtYWxsb2MgcmV0dXJuIHZhbHVlIGFuZCBhYm9ydCBpZiBpdCBmYWlsZWQKLSAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI2IEp1bCAyMDA1CisgICAgVXBkYXRlIGludGVycnVwdCBtYXBwaW5nLgogCi0qIENoYW5nZSB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGluIHNvZnRfaTJjLmM6c2VuZF9hY2soKSB0byBrZWVwIGZyb20KLSAgaW5jb3JyZWN0bHkgZ2VuZXJhdGluZyBzdGFydC9zdG9wIGNvbmRpdGlvbnMgb24gdGhlIGJ1cy4KLSAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI2IEp1bCAyMDA1Citjb21taXQgNmNmZWEzMzQ3N2IwNGI2M2VkNDczODZlZDE2Mjk1Mjk0ODRjMzNiYQorQXV0aG9yOiBIYWl5aW5nIFdhbmcgPEhhaXlpbmcuV2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgTWF5IDEwIDA5OjM4OjA2IDIwMDYgLTA1MDAKIAotKiBGaXggYnVnIGluIFtpZF1jYWNoZV9zdGF0dXMgY29tbWFuZHMgZm9yIE1QQzg1eHggcHJvY2Vzc29yczsKLSAgc2hvdWxkIGxvb2sgYXQgTFNCIG9mIEwxQ1NSbiByZWdpc3RlcnMgdG8gZGV0ZXJtaW5lIGlmIEwxIGNhY2hlIGlzCi0gIGVuYWJsZWQsIG5vdCB0aGUgTVNCLgotICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOSBKdWwgMjAwNQorICAgIFJlbW92ZSB1bm5lZWRlZCBJTklUX1JBTV9MT0NLIGNhY2hlIHR3aWRkbGluZy4KKyAgICBDb3JyZWN0bHkgdHJhY2tzIHIyOSBhcyBnbG9iYWwgZGF0YSBwb2ludGVyIG5vdy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWl5aW5nIFdhbmcgPEhhaXlpbmcuV2FuZ0BmcmVlc2NhbGUuY29tPgogCi0qIEZpeCBhcnJheSBvdmVyZmxvdyB3aXRoIGZ3X3NldGVudiBvbiB1bmluaXRpYWxpc2VkIGVudmlyb25tZW50Ci0gIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE1IEp1bCAyMDA1Citjb21taXQgZDRkZDMxN2I1OGMxMjZhMmE3ZTczZjQ3NjRlY2MxYTdjOTdmODc2YworQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgTWF5IDEwIDA5OjMzOjA3IDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgRW1iZWRkZWRQbGFuZXQgRVA4OHggYm9hcmRzCi0gIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDA1CisgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGZsYXNoLmMgZmlsZS4KIAotKiBSZW1vdmUgYm9hcmQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBmcm9tIHRoZSBjb21tb24geGlsaW54Ci0gIGV0aGVybmV0IGFuZCBpaWMgYWRhcHRlciBjb2RlLgotICBQYXRjaCBieSBNaWNoYWVsIExpYmVza2luZCwgMTIgSnVsIDIwMDUKK2NvbW1pdCAxOGI2YzhjZDhhZjZjYzdmMzUxODBjZWRjNGFkYjMyMzZjYzFhMWI4CitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBNYXkgOSAwODoyMzo0OSAyMDA2IC0wNTAwCiAKLSogQWRkIE5hdCBTZW1pIERQODM4NjUgUEhZIHN1cHBvcnQgdG8gTVBDODV4eCBUU0VDIGRyaXZlcgotICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAwOCBKdWwgMjAwNQorICAgIEdldCBNUEM4NjQxSFBDTiBmbGFzaCBpbWFnZXMgd29ya2luZy4KKyAgICAKKyAgICAgICAgRW5hYmxlIHRoZSBDRkkgZHJpdmVyLgorICAgICAgICBSZW1vdmUgYm9ndXMgTEFXQkFSNyBjcnVmdC4KKyAgICAgICAgVXNlIGNvcnJlY3QgVEVYVF9CQVNFLCBGaXh1cCBsb2FkIHNjcmlwdC4KKyAgICAgICAgRW5hYmxlIFNQRCBFRVBST00gZHVyaW5nIEREUiBzZXR1cC4KKyAgICAgICAgVXNlIGdlbmVyaWMgUkZDIDE5MTggSVAgYWRkcmVzc2VzIGJ5IGRlZmF1bHQuCiAKLSogQWRkIChzb21lKSBkZWZpbml0aW9ucyBmb3IgdGhlIE1QQzg1eHggbG9jYWwgYnVzIGNvbnRyb2xsZXIKLSAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKK2NvbW1pdCA1YzllZmIzNmE2YjU0MzE0MjNmNTI4ODhhMGUzYjRiNTE1ZmU3ZWNhCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgMjcgMTA6MTU6MTYgMjAwNiAtMDUwMAogCi0qIEFkZCBDUE0yIEkvTyBwaW4gZnVuY3Rpb25zIGZvciBNUEM4NXh4IHByb2Nlc3NvcnMKLSAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKKyAgICBDbGVhbnVwIHdoaXRlc3BhY2VzIGFuZCBzdHlsZSBpc3N1ZXMuCisgICAgUmVtb3ZlZCAvLy1zdHlsZSBjb21tZW50cy4KKyAgICBVc2UgODAtY29sdW1uIGxpbmVzLgorICAgIFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgIFJlbW92ZSBkZWFkIGNvZGUgYW5kIGRlYnVnIGNydWZ0LgogCi0qIEZpeCBjb21waWxlIHByb2JsZW0KK2NvbW1pdCBhMjMyMGE2YmY4MTEzYTA5NTQ0YzQyZDE2MGQxMGFjNjlkMDQ5YTAzCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgMjcgMDg6MjI6MzkgMjAwNiAtMDUwMAogCi0qIEFkZGVkIFBDSSBzdXBwb3J0IGZvciBNUEM4MzQ5QURTIGJvYXJkCi0gIFBhdGNoIGJ5IEt1bWFyIEdhbGEgMTEgSmFuIDIwMDYKKyAgICBSZXZlcnQgYmFkIFBDSSBwcmVmZXRjaCBsaW1pdCBjaGFuZ2UuCiAKLSogRW5hYmxlIGFkZHJlc3MgdHJhbnNsYXRpb24gb24gTVBDODN4eAotICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMCBGZWIgMjAwNgotCi0qIERlY29wdWxlZCBzZXR0aW5nIG9mIE9SL0JSIGFuZCBMQkxBV0JBUi9MQkxBV0FSIG9uIE1QQzgzeHgKLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMjUgSmFuIDIwMDYKLQotKiBGaXhlZCBkZWZpbmVzIGZvciBNUEM4M3h4IFNJQ1JMIHJlZ2lzdGVyIHRvIG1hdGNoIGN1cnJlbnQgc3BlY3MKLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMjMgSmFuIDIwMDYKLQotKiBPbmx5IGRpc2FibGUgdGhlIE1QQzgzeHggd2F0Y2hkb2cgaWYgaXRzIGVuYWJsZWQgb3V0IG9mIHJlc2V0LgotICBJZiBpdHMgZGlzYWJsZWQgb3V0IG9mIHJlc2V0IFNXIGNhbiBsYXRlciBlbmFibGUgaXQgaWYgc28gZGVzaXJlZAotICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgotCi0qIEFsbG93IGNvbmZpZyBvZiBHUElPIGRpcmVjdGlvbiAmIGRhdGEgcmVnaXN0ZXJzIGF0IGJvb3Qgb24gODN4eAotICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgotCi0qIEVuYWJsZSB0aW1lIGhhbmRsaW5nIG9uIDgzeHgKLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKLQotKiBNYWtlIFN5c3RlbSBJTyBDb25maWcgUmVnaXN0ZXJzIGJvYXJkIGNvbmZpZ3VyYWJsZSBvbiBNUEM4M3h4Ci0gIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2Ci0KLSogRml4ZWQgUENJIGluZGlyZWN0IGNvbmZpZyBvcHMgdG8gaGFuZGxlIG11bHRpcGxlIFBDSSBjb250cm9sbGVycwotICBXZSBuZWVkIHRvIGFkanVzdCB0aGUgYnVzIG51bWJlciB3ZSBhcmUgdHJ5aW5nIHRvIGFjY2VzcyBiYXNlZAotICBvbiB3aGljaCBQQ0kgY29udHJvbGxlciBpdHMgb24KLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTIgSmFuIDIwMDYKLQotKiBSZXBvcnQgYmFjayBQQ0kgYnVzIHdoZW4gZG9pbmcgdGFibGUgYmFzZWQgZGV2aWNlIGNvbmZpZwotICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgotCi0qIEFkZGVkIHN1cHBvcnQgZm9yIFBDSSBwcmVmZXRjaGFibGUgcmVnaW9uIGFuZCBCQVJzCi0gIElmIGEgaG9zdCBjb250cm9sbGVyIHNldHMgdXAgYSByZWdpb24gYXMgcHJlZmV0Y2hhYmxlIGFuZAotICBhIGRldmljZSdzIEJBUiBkZW5vdGVzIGl0IGFzIHByZWZldGNoYWJsZSwgYWxsb2NhdGUgdGhlCi0gIEJBUiBpbnRvIHRoZSBwcmVmZXRjaCByZWdpb24uCi0KLSAgSWYgYSBCQVIgaXMgcHJlZmV0Y2hhYmxlIGFuZCBubyBwcmVmZXRjaGFibGUgcmVnaW9uIGhhcwotICBiZWVuIHNldHVwIGJ5IHRoZSBjb250cm9sbGVyIHdlIGZhbGwgYmFjayB0byBhbGxvY2F0aW5nCi0gIHRoZSBCQVIgaW50byB0aGUgbm9ybWFsbHkgbWVtb3J5IHJlZ2lvbi4KLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKLQotKiBBZGQgaGVscGVyIGZ1bmN0aW9uIGZvciBnZW5lcmljIGZsYXQgZGV2aWNlIHRyZWUgZml4dXBzIGZvciBtcGM4M3h4Ci0gIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2Ci0KLSogQWRkIHN1cHBvcnQgZm9yIHBhc3NpbmcgaW5pdHJkIGluZm9ybWF0aW9uIHZpYSBmbGF0IGRldmljZSB0cmVlCi0gIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2Ci0KLSogQWRkZWQgT0ZfU1RET1VUX1BBVEggYW5kIE9GX1NPQwotCi0gIE9GX1NURE9VVF9QQVRIIHNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgZGV2aWNlIHRoZSBrZXJuZWwgY2FuIHVzZQotICBmb3IgY29uc29sZSBvdXRwdXQKLQotICBPRl9TT0Mgc3BlY2lmaWVzIHRoZSBwcm9wZXIgbmFtZSBvZiB0aGUgU09DIG5vZGUgaWYgb25lIGV4aXN0cy4KLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKLQotKiBBbGxvdyBib2FyZCBjb2RlIHRvIGZpeHVwIHRoZSBmbGF0IGRldmljZSB0cmVlIGJlZm9yZSBib290aW5nIGEga2VybmVsCi0gIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2Ci0KLSogQWRkZWQgQ09ORklHXyBvcHRpb25zIGZvciBiZF90IGFuZCBlbnYgaW4gZmxhdCBkZXYgdHJlZQotCi0JQ09ORklHX09GX0hBU19CRF9UIHdpbGwgcHV0IGEgY29weSBvZiB0aGUgYmRfdAotCWludG8gdGhlIHJlc3VsdGluZyBmbGF0IGRldmljZSB0cmVlLgotCi0JQ09ORklHX09GX0hBU19VQk9PVF9FTlYgd2lsbCBjb3B5IHRoZSBlbnZpcm9ubWVudAotCXZhcmlhYmxlcyBmcm9tIHUtYm9vdCBpbnRvIHRoZSBmbGF0IGRldmljZSB0cmVlCi0KLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKLQotKiBBZGQgc3VwcG9ydCBmb3IgdGhlIERIQ1AgdmVuZG9yIG9wdGlvbmFsIGJvb3RmaWxlICgjNjcpLgotICBJZ25vcmVzIHRoZSB2ZW5kb3IgVEZUUCBzZXJ2ZXIgbmFtZSBvcHRpb24gKCM2NikuCi0gIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1Ci0KLSogRml4IGEgSFcgdGltaW5nIGlzc3VlIG9uIDg1NDggQ0RTIGZvciBlVFNFQyAzIGluIFJHTUlJIG1vZGUKLSAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nLCAxNCBKdW4gMjAwNQotCi0qIEZpeCBiYWQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIExUWDk3MSBQSFkgb24gTVBDODV4eCBib2FyZHMuCi0gIFBhdGNoIGJ5IEdlcmhhcmQgSmFlZ2VyLCAyMSBKdW4gMjAwNQotCi0qIEFkZCBuZXRjb25zb2xlIGFuZCBzb21lIG1vcmUgY29tbWFuZHMgdG8gUlBYbGl0ZV9EVyBib2FyZAotICBQYXRjaCBieSBTYW0gU29uZywgMTkgSnVuIDIwMDUKLQotKiBGaXggYmFkIGRlY2xhcmF0aW9uIG9uIHBjaV9jZmdmdW5jX25vdGhpbmcKLSAgUGF0Y2ggYnkgU2FtIFNvbmcsIDE5IEp1biAyMDA1Ci0KLSogQWRqdXN0ICJlY2hvIiBhcyBhIGRlZmF1bHQgY29tbWFuZAotICBQYXRjaCBieSBTYW0gU29uZywgMTkgSnVuIDIwMDUKLQotKiBGaXggUENJREYgY2FsY3VsYXRpb24gaW4gY3B1L21wYzgyNjAvc3BlZWQuYyBmb3IgTVBDODI4MEVDCi0gIFBhdGNoIGJ5IEtva0hvdyBUZWgsIDE2IEp1biAyMDA1Ci0KLSogQWRkIGNyYyBvZiBkYXRhIHRvIGpmZnMyIChpbiBqZmZzMl8xcGFzc19idWlsZF9saXN0cygpKS4KLSAgUGF0Y2ggYnkgUmljayBCcm9uc29uLCAxNSBKdW4gMjAwNQotCi0qIENvZGluZyBTdHlsZSBjbGVhbnVwCi0KLSogQXZvaWQgZGVyZWZlcmVuY2luZyBOVUxMIGluIGZpbmRfY21kKCkgaWYgbm8gdmFsaWQgY29tbWFuZHMgd2VyZSBmb3VuZAotICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTMgSnVuIDIwMDUKLQotKiBBZGQgQURJIEJsYWNrZmluIHN1cHBvcnQKLSAgLSBhZGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgQmxhY2tmaW4gQkY1MzMgQ1BVCi0gIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBBREkgQkY1MzMgU3RhbXAgdUNsaW51eCBib2FyZAotICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgQURJIEJGNTMzIEVaS2l0IGJvYXJkCi0gIFBhdGNoZXMgYnkgUmljaGFyZCBLbGluZ2xlciwgMTEgSnVuIDIwMDUKLQotKiBBZGQgbG9hZHMgb2YgbnRvaGwoKSBpbiBpbWFnZSBoZWFkZXIgaGFuZGxpbmcKLSAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgSnVuIDIwMDUKLQotKiBTd2l0Y2ggTVBDODZ4QURTIGFuZCBNUEM4ODVBRFMgYm9hcmRzIHRvIHVzZSBjcHVjbGsgZW52aXJvbm1lbnQKLSAgdmFyaWFibGUgdG8gc2V0IGNsb2NrCi0gIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1Ci0KLSogUlBYbGl0ZSBjb25maWd1cmF0aW9uIGZpeGVzCi0gIC0gVXNlIGNvcnJlY3QgZmxhc2ggc2VjdG9yIHNpemUKLSAgLSBVc2UgY29ycmVjdCBtZW1vcnkgdGVzdCBlbmQgYWRkcmVzcwotICAtIEFkZCBzdXBwb3J0IGZvciBiemlwMiBjb21wcmVzc2lvbgotICAtIFZhcmlvdXMgc21hbGwgZml4ZXMKLSAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKLQotKiBNZW1vcnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGZvciBaUEMuMTkwMCBib2FyZAotICAtIEZpeCBTRFJBTSB0aW1pbmcgb24gYm90aCBsb2NhbCBidXMgYW5kIDYweCBidXMKLSAgLSBBZGQgc3VwcG9ydCBmb3Igc2Vjb25kIGZsYXNoIGJhbmsgKFNJTU0pCi0gIC0gQ2hhbmdlIGJvb3QgZmxhc2ggYmFzZQotICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQotCi0qIEFkZCBzdXBwb3J0IGZvciBBZGRlciBib2FyZHMgd2l0aCAxNk1CIFNEUkFNOwotICBhZGQgc3VwcG9ydCBmb3Igc2Vjb25kIEZFQyBvbiBBZGRlcjg3eCBib2FyZC4KLSAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKLQotKiBGaXggY29uZGl0aW9uYWwgZm9yIGluY2x1ZGluZyBrczg2OTVldGggZHJpdmVyCi0gIFBhdGNoIGJ5IEdyZWcgVW5nZXJlciwgMDQgSnVuIDIwMDUKLQotKiBGaXggTWFrZWZpbGU6IGluY2x1ZGUgY29uZmlnLm1rIG9ubHkgYWZ0ZXIgQ1JPU1NfQ09NUElMRSBpcyBkZWZpbmVkCi0gIFBhdGNoIGJ5IEZyaWVkcmljaCBMb2JlbnN0b2NrLCAwMiBKdW4gMjAwNQotCi0qIEZpeCBjb21tZW50IGluIGNvbW1vbi9zb2Z0X2kyYy5jCi0gIFBhdGNoZXMgYnkgUGV0ZXIgS29yc2dhYXJkL1RvbHVuYXkgT3JrdW4sIDI2IE1heSAyMDA1Ci0KLSogQ2xlYW51cCBjb21waWxlciB3YXJuaW5ncy4KLSAgUGF0Y2ggYnkgR3JlZyBVbmdlcmVyLCAyMSBNYXkgMjAwNQotCi0qIFdvcmQgYWxpZ25tZW50IGZpeGVzIGZvciB3b3JkIGFsaWduZWQgTlMxNjU1MCBVQVJUCi0gIFBhdGNoIGJ5IEplYW4tUGF1bCBTYW1hbiwgMDEgTWFyIDIwMDUKLQotICBGaXhlcyBidWcgd2l0aCBVQVJUIHRoYXQgb25seSBzdXBwb3J0cyB3b3JkIGFsaWduZWQgYWNjZXNzOiByZW1vdmVkCi0gICJfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7IiBmb3IgIihDRkdfTlMxNjU1MF9SRUdfU0laRSA9PSA0KSIgc29tZQotICAoYnJva2VuISkgdmVyc2lvbnMgb2YgR0NDIGdlbmVyYXRlIGJ5dGUgYWNjZXNzZXMgd2hlbiBlbmNvdW50ZXJpbmcKLSAgdGhlIHBhY2tlZCBhdHRyaWJ1dGUgcmVnYXJkbGVzcyBpZiB0aGUgc3RydWN0IGlzIGFscmVhZHkgY29ycmVjdGx5Ci0gIGFsaWduZWQgZm9yIGEgcGxhdGZvcm0uIFBlcmlwaGVyYWxzIHRoYXQgY2FuIG9ubHkgaGFuZGxlIHdvcmQKLSAgYWxpZ25lZCBhY2Nlc3Mgd29uJ3Qgd29yayBwcm9wZXJseSB3aGVuIGFjY2Vzc2VkIHdpdGggYnl0ZSBhY2Nlc3MuCi0gIFRoZSBzdHJ1Y3QgTlMxNjU1MCBpcyBhbHJlYWR5IHdvcmQgYWxpZ25lZCBmb3IgUkVHX1NJWkUgPSA0LCBzbwotICB0aGVyZSBpcyBubyBuZWVkIHRvIHBhY2tlZCB0aGUgc3RydWN0IGluIHRoYXQgY2FzZS4KLQotKiBGaXggYmVoYXZpb3VyIGlmIGdhdGV3YXlpcCBpcyBub3Qgc2V0Ci0gIFBhdGNoIGJ5IFJvYmluIEdpbGtzLCAyMyBEZWMgMjAwNAotCi0qIEZpeCBjbGVhbnVwIGZvciBuZXRzdGFydCBib2FyZC4KLSAgUmVtb3ZlIGJ1aWxkIHJlc3VsdHMgZnJvbSByZXBvc2l0b3J5Ci0KLSogU29tZSBjb2RlIGNsZWFudXAgZm9yIEdDQyA0LngKLQotKiBGaXhlcyB0byBzdXBwb3J0IGVudmlyb25tZW50IGluIE5BTkQgZmxhc2g7Ci0gIGVuYWJsZSBOQU5EIGZsYXNoIGJhc2VkIGVudmlyb25tZW50IGZvciBkZWx0YSBib2FyZC4KLQotKiBBZGQgc3VwcG9ydCBmb3IgSW50ZWwgTW9uYWhhbnMgQ1BVIG9uIFp5bG9uaXRlIGFuZCBEZWx0YSBib2FyZHMKLSAgKFRoaXMgaXMgV29yayBpbiBQcm9ncmVzcyEpCi0KLSogQWRkIHN1cHBvcnQgZm9yIFRRTTgyNjAtQUkgYm9hcmRzLgotCi0qIE1pbm9yIGNvZGUgY2xlYW51cAotCi0qIE1lcmdlIHRoZSBuZXcgTkFORCBjb2RlICh0ZXN0aW5nLU5BTkQgYnJhY2gpOyBzZWUgZG9jL1JFQURNRS5uYW5kCi0gIFJld3JpdGUgb2YgTkFORCBjb2RlIGJhc2VkIG9uIHdoYXQgaXMgaW4gMi42LjEyIExpbnV4IGtlcm5lbAotICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjkgSnVuIDIwMDUKLQotKiBBZGQgbG93Ym9vdCB0YXJnZXQgdG8gbWNjMjAwIGJvYXJkCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNCBNYXIgMjAwNgotCi0qIEZpeCBwcm9ibGVtIHdpdGggZmxhc2hfZ2V0X3NpemUoKSBmcm9tIENGSSBkcml2ZXIgdXBkYXRlCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMSBNYXIgMjAwNgotCi0qIE1ha2UgQ0ZHX05PX0ZMQVNIIHdvcmsgb24gQVJNIHN5c3RlbXMKLSAgUGF0Y2ggYnkgTWFya3VzIEtsb3R6YnVlY2hlciwgMjcgRmViIDIwMDYKLQotKiBVcGRhdGUgbWNjMjAwIGNvbmZpZzogRGlzYWJsZSBQQ0kgYW5kIERvQywgdXNlIDEzMyBNSHogSVBCIGNsb2NrLAotICB1c2UgaHVzaCBzaGVsbC4KLQotKiBDb252ZXJ0IG1jYzIwMCB0byB1c2UgY29tbW9uIENGSSBmbGFzaCBkcml2ZXIKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBGZWIgMjAwNgotCi0qIEFkZCBlbnYtdmFyaWFibGUgInVubG9jayIgdG8gaGFuZGxlIGluaXRpYWwgc3RhdGUgb2Ygc2VjdG9ycwotICAobG9ja2VkL3VubG9ja2VkKS4KLQotICBPbmx5IHRoZSBVLUJvb3QgaW1hZ2UgYW5kIGl0J3MgZW52aXJvbm1lbnQgaXMgcHJvdGVjdGVkLAotICBhbGwgb3RoZXIgc2VjdG9ycyBhcmUgdW5wcm90ZWN0ZWQgKHVubG9ja2VkKSBpZiBmbGFzaAotICBoYXJkd2FyZSBwcm90ZWN0aW9uIGlzIHVzZWQgKENGR19GTEFTSF9QUk9URUNUSU9OKSBhbmQKLSAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJ1bmxvY2siIGlzIHNldCB0byAieWVzIi4KLQotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IEZlYiAyMDA2Ci0KLSogVXBkYXRlIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6Ci0gIC0gZmluZF9zZWN0b3IoKSBjYWxsZWQgaW4gYm90aCB2ZXJzaW9ucyBvZiBmbGFzaF93cml0ZV9jZml3b3JkKCkKLSAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAyN3RoIEZlYiAyMDA2Ci0KLSogQ0ZJIHN1cHBvcnQgZm9yIGEgeDgveDE2IEFNRC9TcGFuc2lvbiBmbGFzaCBjb25maWd1cmVkIGluIHg4IG1vZGUKLSAgUGF0Y2ggYnkgSm9zZSBNYXJpYSBMb3BleiwgMTYgSmFuIDIwMDYKLQotKiBBZGQgc3VwcG9ydCBmb3IgQU1EL1NwYW5zaW9uIEZsYXNoZXMgaW4gZmxhc2hfd3JpdGVfY2ZpYnVmZmVyCi0gIFBhdGNoIGJ5IEFsZXggQmFzdG9zIGFuZCBUaG9tYXMgU2NoYWVmZXIsIDIwMDUtMDgtMjkKLQotKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgotICBXZSAqc2hvdWxkKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGVycm9yIGJpdHMgaWYgdGhlIHByZXZpb3VzIGNhbGwKLSAgcmV0dXJuZWQgRVJSX09LIChPdGhlcndpc2Ugd2Ugd2lsbCBoYXZlIG91dHB1dCBhbiBlcnJvciBtZXNzYWdlIGluCi0gIGZsYXNoX3N0YXR1c19jaGVjaygpIGFscmVhZHkuKSAgVGhlIG9yaWdpbmFsIGNvZGUgd291bGQgb25seSBjaGVjayBmb3IKLSAgZXJyb3IgYml0cyBpZiBmbGFzaF9zdGF0dXNfY2hlY2soKSByZXR1cm5zIEVSUl9USU1FT1VULgotICBQYXRjaCBieSBNYXJjdXMgSGFsbCwgMjMgQXVnIDIwMDUKLQotKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgotICAtIEFkZCBDRkdfRkxBU0hfUFJPVEVDVF9DTEVBUiBvbiBkcml2ZXJzL2NmaV9mbGFzaC5jCi0gIC0gUHJvaGliaXQgYnVmZmVyIHdyaXRlIHdoZW4gYnVmZmVyX3NpemUgaXMgMSBvbiBkcml2ZXJzL2NmaV9mbGFzaC5jCi0gIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMTkgQXVnIDIwMDUKLQotKiBGaXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKLSAgLSBGaXggd3JvbmcgdGltZW91dCB2YWx1ZSB1c2FnZSBpbiBmbGFzaF9zdGF0dXNfY2hlY2soKQotICAtIFJvdW5kIHdyaXRlX3RvdXQgdXAgd2hlbiBjb252ZXJ0aW5nIHRvIG1zZWMgaW4gZmxhc2hfZ2V0X3NpemUoKQotICAtIFJlbW92ZSBjbGVhcmluZyBmbGFzaCBzdGF0dXMgYXQgdGhlIGVuZCBvZiBmbGFzaF93cml0ZV9jZmlidWZmZXIoKQotICAgIHdoaWNoIHNldHMgSW50ZWwgMjhGNjQwSjMgZmxhc2ggYmFjayB0byBjb21tYW5kIG1vZGUgb24gQ1NCNDcyCi0gIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDAyIEp1bHkgMjAwNQotCi0qIEFkZCBiYXNpYyBzdXBwb3J0IGZvciB0aGUgU01NQUNPNCBCb2FyZCBmcm9tIFBhbkRhQ29tLgotICBQYXRjaCBieSBIZWlrbyBTY2hvY2hlciwgMjAgRmViIDIwMDYKLQotKiBBZGQgR0lUIHZlcnNpb24gaW5mb3JtYXRpb24gKGNvbW1pZCBJRCkgdG8gdW50YWdnZWQgVS1Cb290IHZlcnNpb25zCi0KLSAgQXMgZG9uZSBpbiB0aGUgbGludXgga2VybmVsLCB0aGUgVS1Cb290IHZlcnNpb24gKFVfQk9PVF9WRVJTSU9OKQotICBvZiBhbGwgdW5yZWxlYXNlZCAodW50YWdnZWQpIFUtQm9vdCBpbWFnZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5Ci0gIGV4dGVuZGVkIHVwb24gY29tcGlsZXRpbWUgd2l0aCBhIHBhcnQgb2YgdGhlIEdJVCBjb21taXQgSUQgYW5kCi0gIHBvc3NpYmx5IHdpdGggImRpcnR5IiBpZiB1bmNvbW1pdGVkIGNoYW5nZXMgYXJlIGRldGVjdGVkLgotCi0gIEhlcmUgYW4gZXhhbXBsZSBmb3IgdGhlIHJlc3VsdGluZyB2ZXJzaW9uOgotICAiVS1Cb290IDEuMS40LWczNDU3YWMxOC1kaXJ0eSIKLQotICBUaGUgdmVyc2lvbiBpcyBub3cgbWFpbnRhaW5lZCBpbiB0aGUgdG9wbGV2ZWwgTWFrZWZpbGUgYW5kIHRoZQotICB2ZXJzaW9uIGhlYWRlcnMgYXJlIGF1dG9nZW5lcmF0ZWQuCi0KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA5IEZlYiAyMDA2Ci0KLSogVXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgZm9yIElOS0E0eDAwIGJvYXJkLgotCi0qIENvbnZlcnQgQ1BDSTc1MCB0byB1c2UgY29tbW9uIENGSSBmbGFzaCBkcml2ZXIKLSAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgOCBGZWIgMjAwNgotCi0qIFZhcmlvdXMgY2hhbmdlcyB0byBlc2QgSEg0MDUgYm9hcmQgc3BlY2lmaWMgZmlsZXMKLSAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA3IEZlYiAyMDA2Ci0KLSogQ2xlYW51cCBVLUJvb3QgYm9vdCBtZXNzYWdlcyBvbiBBUk0uCi0KLSAgVG8gbWF0Y2ggdGhlIFUtQm9vdCB1c2VyIGludGVyZmFjZSBvbiBBUk0gcGxhdGZvcm1zIHRvIHRoZSBVLUJvb3QKLSAgc3RhbmRhcmQgKGFzIG9uIFBQQyBwbGF0Zm9ybXMpLCBzb21lIG1lc3NhZ2VzIHdpdGggZGVidWcgY2hhcmFjdGVyCi0gIGFyZSByZW1vdmVkIGZyb20gdGhlIGRlZmF1bHQgVS1Cb290IGJ1aWxkLgotICBFbmFibGUgREVCVUcgZm9yIGxpYl9hcm0vYm9hcmQuYyB0byBlbmFibGUgZGVidWcgbWVzc2FnZXMuCi0gIE5ldyBDT05GSUdfRElTUExBWV9DUFVJTkZPIGFuZCBDT05GSUdfRElTUExBWV9CT0FSRElORk8gb3B0aW9ucy4KLSAgUGF0Y2gJIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgSmFuIDIwMDYKLQotKiBGaXggdmFyaW91cyBjb21waWxlciB3YXJuaW5ncyBvbiBwcGM0eHggYnVpbGRzIChFTERLIDQuMCkKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBKYW4gMjAwNgotCi0qIEFkZCBWR0Egc3VwcG9ydCAoQ1Q2OTAwMCkgdG8gQ1BDSTc1MCBib2FyZC4KLSAgSW5zZXJ0IG1pc3NpbmcgX19sZTMyX3RvX2NwdSgpIGZvciBmaWxlc2l6ZSBpbiBleHQyZnNfcmVhZF9maWxlKCkuCi0gIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDMwIERlYyAyMDA1Ci0KLSogUE1DNDA1IGFuZCBDUENJNDA1OiBNb3ZlZCBjb25maWd1cmF0aW9uIG9mIHBjaSByZXNvdXJjZXMKLSAgaW50byBjb25maWcgZmlsZS4KLSAgUE1DNDA1IGFuZCBDUENJMkRQOiBBZGRlZCBmaXJtd2FyZSBkb3dubG9hZCBhbmQgYm9vdGluZyB2aWEgcGNpLgotICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjAgRGVjIDIwMDUKLQotKiBBZGQgQ29sZEZpcmUgdGFyZ2V0cyB0byBNQUtFQUxMIHNjcmlwdAotICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMjYgSmFuIDIwMDYKLQotKiBBZGQgc3VwcG9ydCBmb3IgcjUyMDAgYm9hcmQKLSAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDI2IEphbiAyMDA2Ci0KLSogQWRkIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSBNNTI3MSBwcm9jZXNzb3IKLSAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDI2IEphbiAyMDA2Ci0KLSogRml4IDI4RjI1NkozQSBzdXBwb3J0IG9uIFBNNTIwIGJvYXJkCi0gICh3aXRob3V0IGJhbmstc3dpdGNoaW5nIG9ubHkgMzIgTUIgY2FuIGJlIGFjY2Vzc2VkKQotCi0qIEZpeCBta2ltYWdlIGJ1ZyB3aXRoIG11bHRpZmlsZSBpbWFnZXMgY3JlYXRlZCBvbiA2NCBiaXQgc3lzdGVtcy4KLQotKiBBZGQgc3VwcG9ydCBmb3IgMjhGMjU2SjNBIGZsYXNoICg9PiA2NCBNQikgb24gUE01MjAgYm9hcmQKLQotKiBGaXggY29tcGlsZXIgcHJvYmxlbSB3aXRoIGF0OTFybTkyMDBkayBib2FyZC4KLSAgUGF0Y2ggYnkgRXVnZW4gQmlneiwgMTkgRGVjIDIwMDUKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS40OgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIENoYW5nZXMgdG8gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZSA0NDBFUC9HUiBldmFsIGJvYXJkczoKLSAgLSBDaGFuZ2VkIEdQSU8gc2V0dXAgdG8gZW5hYmxlIGFub3RoZXIgYWRkcmVzcyBsaW5lIGluIG9yZGVyIHRvCi0gICAgYWRkcmVzcyA2NE0gb2YgRkxBU0guCi0gIC0gQWRkZWQgZnVuY3Rpb24gc2RyYW1fdHIxX3NldCB0byBhdXRvIGNhbGN1bGF0ZSB0aGUgdHIxIHZhbHVlIGZvcgotICAgIHRoZSBERFIuCi0gIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDEyIERlYyAyMDA1Ci0KLSogTVBDNTIwMDogIFNldCBQQ0kgcmV0cnkgY291bnRlciB0byAwID0gaW5maW5pdGUgcmV0cnk7Ci0gIFRoZSBkZWZhdWx0IG9mIDI1NSBpcyB0b28gc2hvcnQgZm9yIHNsb3cgZGV2aWNlcy4KLSAgUGF0Y2ggYnkgTWFydGluIE55a29keW0sIDEyIERlYyAyMDA1Ci0KLSogQ2hhbmdlIHBvcnQgY29uZmlndXJhdGlvbiBmb3IgTzJETlQgKENPREVDMSBvbiBQU0MxKS4KLQotKiBGaXggcmVnaXN0ZXIgZm9yIFBDSSBhc3luYyBtb2RlIG9uIFBQQzQ0MEVQCi0gIFBhdGNoIGJ5IFlvdW5nY2h1bCBCYW5nLCAwOCBEZWMgMjAwNQotCi0qIEZpeCBVLUJvb3QgbGlua2luZyBwcm9ibGVtcyAoYWRkIC5laF9mcmFtZSBzZWdtZW50IHRvIGxpbmtlciBzY3JpcHQpCi0gIFRoaXMgc2VnbWVudCBtYXkgYmUgcmVxdWlyZWQgYnkgc29tZSBsaWJnY2MuYSBmdW5jdGlvbnMKLSAgKGxpa2UgX3VkaXZkaTMpLgotCi0qIEZpeCBEUFJBTSBvZmZzZXQvc2l6ZSBmb3IgTVBDODU0MS84NTU1LgotICBTaW1wbGlmeSBUUU04NXh4IE1ha2VmaWxlIGhhbmRsaW5nLgotCi0qIEZpeCBkYXRhIG92ZXJmbG93ICh0eXBvPykgaW4gcnRjL2RzMTMwMi5jCi0KLSogRml4IFUtQm9vdCBjb21waWxhdGlvbiBmb3IgTUlQUyBib2FyZHMgdXNpbmcgRUxESyA0LjAKLQotKiBBZGQgc3VwcG9ydCBmb3IgVFFNODU0MS84NTU1IGJvYXJkcywgVFFNODV4eCBzdXBwb3J0IHJld29ya2VkOgotICAtIFN1cHBvcnQgZm9yIFRRTTg1NDEvODU1NSBib2FyZHMgYWRkZWQuCi0gIC0gQ29tcGxldGUgcmV3b3JrIG9mIFRRTTg1NDAvODU2MCBzdXBwb3J0LgotICAtIENvbW1vbiBUUU04NXh4IGNvZGUgbm93IHN1cHBvcnRzIGFsbCBjdXJyZW50IFRRTTg1eHggcGxhdGZvcm1zCi0gICAgKFRRTTg1NDAvODU0MS84NTU1Lzg1NjApLgotICAtIEREUiBTRFJBTSBzaXplIGRldGVjdGlvbiBhZGRlZC4KLSAgLSBDQVMgbGF0ZW5jeSBkZWZhdWx0IHZhbHVlcyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc2V0dGluZyAic2VyaWFsIyIKLSAgICB0byBlLmcuICJBQkMwMDAxIGNhc2w9MjUiIC0+IENBUyBsYXRlbmN5IDIuNSB3aWxsIGJlIHVzZWQuCi0gICAgSWYgcHJvYmxlbXMgYXJlIGRldGVjdGVkIHdpdGggdGhpcyBub24gZGVmYXVsdCBDQVMgbGF0ZW5jeSwKLSAgICB0aGUgZGVmYXVsdCB2YWx1ZXMgd2lsbCBiZSB1c2VkIGluc3RlYWQuCi0gIC0gRmxhc2ggc2l6ZSBkZXRlY3Rpb24gYWRkZWQuCi0gIC0gTW92ZWQgRkNDIGV0aGVybmV0IGRyaXZlciBpbml0aWFsaXphdGlvbiBiZWhpbmQgVFNFQyBkcml2ZXIgaW5pdAotICAgIC0+IFRTRUMgaXMgZmlyc3QgZGV2aWNlLgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDMwIE5vdiAyMDA1Ci0KLSogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgNDQwU1AsIGFkZCBzdXBwb3J0IGZvciBBTUNDIEx1YW4gNDQwU1AgZXZhbCBib2FyZC4KLSAgUGF0Y2ggYnkgSm9obiBPdGtlbiwgMjMgTm92IDIwMDUKLQotKiBDaGFuZ2VkIFBQQzQ0eCBzdGFydHVwIG1lc3NhZ2UgKGNwdSBpbmZvLCBzcGVlZC4uLikgdG8gY29tbW9uIHN0eWxlOgotICBPbiBQUEM0NHggcGxhdGZvcm1zLCB0aGUgc3RhcnR1cCBtZXNzYWdlIGdlbmVyYXRlZCBpbiAiY3B1LmMiIG9ubHkKLSAgY29tcHJpc2VkIHRoZSBwcGMgdHlwZSBhbmQgcmV2aXNpb24gYnV0IG5vdCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gIGxpa2Ugc3BlZWQgZXRjLiBUaG9zZSBzcGVlZCBpbmZvcyB3aGVyZSBwcmludGVkIGluIHRoZSBib2FyZCBzcGVjaWZpYwotICBjb2RlLiBUaGlzIG5ldyBpbXBsZW1lbnRhdGlvbiBub3cgcHJpbnRzIGFsbCBDUFUgaW5mb3MgaW4gdGhlIGNvbW1vbgotICBjcHUgc3BlY2lmaWMgY29kZS4gTm8gYm9hcmQgc3BlY2lmaWMgY29kZSBpcyBuZWVkZWQgYW55bW9yZSBhbmQKLSAgdGhlcmVmb3JlIHJlbW92ZWQgZnJvbSBhbGwgY3VycmVudCA0NHggaW1wbGVtZW50YXRpb25zLgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI3IE5vdiAyMDA1Ci0KLSogQWRqdXN0IFRRTTgzNHggUEhZIGFkZHJlc3NlcyBmb3IgbGF0ZXN0IGhhcmR3YXJlIHJldmlzaW9uLgotCi0qIEluY3JlYXNlIG1hbGxvYyBhcmVuYSBvbiBUUU01MjAwIGJvYXJkIHRvIDI1NiBrQi4KLSAgV2l0aCA2NCBrYiB1bmlmb3JtIGZsYXNoIHNlY3RvciBzaXplIHRoZSBvbGQgdmFsdWUgb2YgMTI4IGtCIHdhcwotICB0b28gc21hbGwuCi0KLSogRml4IG1paXBoeSBnbG9iYWwgZGF0YSBpbml0aWFsaXphdGlvbiAocHJvYmxlbSBvbiA0eHggYm9hcmRzIHdoZW4KLSAgbm8gZXRoYWRkciBpcyBhc3NpZ25lZCkuIEluaXRpYWxpemF0aW9uIG1vdmVkIGZyb20KLSAgbWlpcGh5X3JlZ2lzdGVyKCkgdG8gZXRoX2luaXRpYWxpemUoKS4KLQotICBCYXNlZCBvbiBpbml0aWFsIHBhdGNoIGZvciA0eHggcGxhdGZvcm0gYnkgTWF0dGhpYXMgRnVjaHMuCi0KLSogUmVtb3ZlIHVubm5lY2Vzc2FyeSAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4gZnJvbSBpbmNsdWRlL2FzbS0qL3UtYm9vdC5oCi0KLSogQWxsb3cgdXNlIG9mIGluY2x1ZGUvaW1hZ2UuaCBhbmQgaW5jbHVkZS9hc20tKi91LWJvb3QuaCBpbiBwcm9wcmlldGFyeSBjb2RlLgotICBUaGUgQ09QWUlORyBmaWxlIHdhcyBleHRlbmRlZCB0byBtYWtlIGNsZWFyIHRoYXQgdGhlc2UgZmlsZXMgY2FuIGJlCi0gIHVzZWQgaW4gbm9uLUdQTCBjb2RlLCB0b28uCi0gIEFsc28sIGEgY29ycmVzcG9uZGluZyBub3RlIHdhcyBwbGFjZWQgaW4gdGhlIGhlYWRlcnMgb2YgdGhlIGFmZmVjdGVkIGZpbGVzLgotCi0qIEFkZCBzdXBwb3J0IGZvciBQcm9kcml2ZSBQM1A0NDAgYm9hcmQ6Ci0gIC0gQWRkZWQgb25ib2FyZCBQUEM0NDAgRERSIGF1dG9kZXRlY3Rpb24gaW4gY3B1L3BwYy9zZHJhbS5jCi0gIC0gQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QgYWRkZWQgdG8gdXNlIHRoZSBjb21tb24gQ0ZJIGRyaXZlcgotICAgIGZvciBiYW5rIGF1dG9kZXRlY3Rpb24KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMiBOb3YgMjAwNQotCi0qIENoYW5nZSBhbGwgJyQoLi4uKScgdmFyaWFibGUgcmVmZXJlbmNlcyBpbnRvICckey4uLn0nCi0gIHdoaWNoIG1ha2VzIHRoZSBlbnZpcm9ubWVudCBjb21wYXRpYmxlIHdpdGggdGhlIGh1c2ggc2hlbGwuCi0gIFdBUk5JTkc6IFN1cHBvcnQgZm9yIHRoZSBvbGQgJyQoLi4uKScgc3ludGF4IHdpbGwgYmUKLSAgZGlzY29udGludWVkIGluIGEgbGF0ZXIgdmVyc2lvbi4KLQotKiBNaW5vciBjaGFuZ2VzIHRvIGluaXQgZmxhZ3MgaW4gVFFNODM0eCBQQ0kuCi0KLSogRml4IEJhbWJvbyBERFIgU0RSQU0gaW5pdGlhbGl6YXRpb24gKHByb2JsZW0gd2l0aCBvbmJvYXJkIFNEUkFNKQotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IE5vdiAyMDA1Ci0KLSogTmV3IFBQQyA0MDVFUCBib2FyZCBhZGRlZDogQ01TNzAwCi0gIEFkZGVkIENPTkZJR19ORVRfTVVMVEkgZm9yIFZPTTQwNSBib2FyZC4KLSAgQWRkZWQgcmVzZXRfcGh5KCkgZm9yIFZPTTQwNSBib2FyZC4KLSAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA5IE5vdiAyMDA1Ci0KLSogVXBkYXRlZCBQQ0kgbWFwcGluZyBmb3IgZXNkIENQQ0kyRFAgYm9hcmQuCi0gIEFkZCBzdXBwb3J0IGZvciBlcnJvciBMRUQuCi0gIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAwNyBOb3YgMjAwNQotCi0qIEZpeCBNUEM4NXh4IFBDSSBzdXBwb3J0IChwY2lfcmVnaXN0ZXJfaG9zZSgpIGJlZm9yZSBwY2kgY29uZmlnIGFjY2VzcykKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBOb3YgMjAwNQotCi0qIENvcnJlY3QgUFBDIFRpbWViYXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIChTUFJOX1RCUkwuLi4pCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgTm92IDIwMDUKLQotKiBBZGp1c3QgYmQtPmJpX2ZsYXNoc3RhcnQgb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZSB0byBjb3JyZWN0IHNpemUKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNSBOb3YgMjAwNQotCi0qIEFkZGl0aW9uYWwgZml4IGZvciBleHRlcm5hbCBJUlEgY29uZmlnIG9uIFllbGxvd3N0b25lICYgWW9zZW1pdGUKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMyBOb3YgMjAwNQotCi0qIEFkZCBzdXBwb3J0IGZvciBPY290ZWEgcGFzcyAzIHdpdGggNDQwR1ggUmV2LiBGCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgTm92IDIwMDUKLQotKiBGaXggZXh0ZXJuYWwgSVJRIGNvbmZpZ3VyYXRpb24gb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZQotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IE9jdCAyMDA1Ci0KLSogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIFBIWXMuCi0gIFRlc3RlZCBvbiB0aGUgZm9sbG93aW5nIGJvYXJkczoKLQljbWNwdTIJICAgIChhdDkxcm05MjAwL2V0aGVyLmMpCi0JUFBDaGFtZWxlb24gKHBwYzR4eC80eHhfZW5ldC5jKQotCXl1a29uCSAgICAobXBjODIyMC9mZWMuYykKLQl1YzEwMAkgICAgKG1wYzh4eC9mZWMuYykKLQl0cW04MzR4CSAgICAobXBjODM0eC90c2VjLmMpIHdpdGggRUVQUk8xMDAKLQlsaXRlNTIwMCAgICAobXBjNXh4eC9mZWMuYykgd2l0aCBFRVBSTzEwMCBjYXJkIChkcml2ZXJzL2VlcHJvMTAwLmMpCi0gIE1haW4gY2hhbmdlcyBpbmNsdWRlOgotICBjb21tb24vbWlpcGh5dXRpbC5jCi0gIC0gbWlpcGh5X3JlZ2lzdGVyIHJvdXRpbmUgd2FzIGFkZGVkIHRvIGFsbG93IG11bHRpcGxlIFBIWXMgdG8gYmUgcmVnaXN0ZXJlZAotICAtIG1paXBoeV9yZWFkIGFuZCBtaWlwaHlfd3JpdGUgYXJlIG5vdyBkZWZpbmVkIGluIHRoaXMgZmlsZSwgYW5kCi0gICAgcmVxdWlyZSBhZGRpdGlvbmFsIGFyZ3VtZW50IChjaGFyICpkZXZuYW1lKQotICAtIG90aGVyIG1paXBoeV8qIHJvdXRpbmVzIGFsc28gcmVxdWlyZSBhZGRpdGlvbmFsIGRldmljZSBuYW1lIGFyZ3VtZW50Ci0gIC4uL2xpYl9pMzg2L2JvYXJkLmMKLSAgLi4vbGliX3BwYy9ib2FyZC5jCi0gIENhbGxpbmcgcmVzZXRfcGh5KCkgd2FzIG1vdmVkIHRvIGJlIGV4ZWN1dGVkICphZnRlciogZXRoX2luaXRpYWxpemUoKS4KLSAgVGhpcyBpcyBuZWNlc3NhcnkgYXMgbm93IHNvbWUgb2YgdGhlIGltcGxlbWVudGF0aW9ucyBvZiByZXNldF9waHkoKQotICBtYXkgbmVlZCB0byB1c2UgbWlpcGh5X3Jlc2V0KCkgd2hpY2ggaXMgbm90IGFsbG93ZWQgYmVmb3JlIGV0aF9pbml0aWFsaXplKCkKLSAgYXMgZXRoX2luaXRpYWxpemUgcmVnaXN0ZXJzIGFsbCByZXF1aXJlZCBtaWlwaHlfKiByb3V0aW5lcy4KLSAgVGVzdGVkIG9uIElQODYwIGFuZCBQSFkgaW5pdGlhbGl6ZXMgcHJvcGVybHkgYWZ0ZXIgdGhpcyBjaGFuZ2UuCi0KLSogQ29ycmVjdCBpbmNsdWRlcyBmb3IgZmxhdCB0cmVlIGJ1aWxkZXIuCi0KLSogRml4IGNvbmZsaWN0aW5nIHR5cGVzIChmbGFzaF93cml0ZSgpKSBpbiB0cmFiIGF1dG9fdXBkYXRlLmMuCi0KLSogQWRkIFBDSSBzdXBwb3J0IGZvciB0aGUgVFFNODM0eCBib2FyZC4KLQotKiBBZGQgbWlzc2luZyA0eHggYm9hcmQgdG8gTUFLRUFMTAotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1Ci0KLSogRml4IGNvbmZsaWN0aW5nIHR5cGVzIChmbGFzaF93cml0ZSgpKSBpbiBlc2QgYXV0b191cGRhdGUuYwotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1Ci0KLSogRml4IHByb2JsZW0gd2l0aCBzbGVlcCBpbiBOZXRDb25zb2xlICh1c2UgZ2V0X3RpbWVyKCkpCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKLQotKiBBZGQgTmV0Q29uc29sZSBTdXBwb3J0IGZvciBBTUNDIGV2YWwgYm9hcmRzCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKLQotKiBGaXggTmV0Q29uc29sZSBzdXBwb3J0IG9uIDR4eCAob25seSBwcmludCBldGggbGluayBvbiAxc3QgdHJhbnNmZXIpCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggT2N0IDIwMDUKLQotKiBBZGQgZmF0ICYgZXh0MiBzdXBwb3J0IHRvIEFNQ0MgNDQwRVAgYm9hcmRzIFlvc2VtaXRlICYgQmFtYm9vLgotICBGaXggaWRlbnRhdGlvbiBvbiBleHQybHMgaGVscCBlbnRyeS4KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNCBPY3QgMjAwNQotCi0qIEFkZCBzdXBwb3J0IGZvciBUUU04MzR4IGJvYXJkcy4KLSAgQ2xlYW51cC4KLQotKiBDbGVhbnVwIGZvciBHQ0MtNC54Ci0KLSogQWRkIGRvY3VtZW50YXRpb24gZm9yIE9wZW4gRmlybXdhcmUgRmxhdCBUcmVlIGFuZCB1c2FnZS4KLSAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDEzIE9jdCAyMDA1Ci0KLSogQWRkIG1pc3NpbmcgZmlsZXMgZm9yIFBhbnRlbGlzIEFudG9uaW91J3MgcGF0Y2gKLSAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA0IFNlcCAyMDA1Ci0KLSogRml4IHByb2JsZW0gaW4gcHBjNHh4IGV0aC1kcml2ZXIgd2l0aG91dCBldGhhZGRyIChvbmx5IHdpdGhvdXQKLSAgQ09ORklHX05FVF9NVUxUSSBzZXQpCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgT2N0IDIwMDUKLQotKiBGaXggZ3ppcCBibXAgc3VwcG9ydCAodGVzdCBpZiBtYWxsb2MgZmFpbHMsIHdhcm5pbmcgd2hlbiB0cnVuY2F0ZWQpLgotICBJbmNyZWFzZSBDRkdfVklERU9fTE9HT19NQVhfU0laRSBvbiBISDQwNSBib2FyZC4KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBPY3QgMjAwNQotCi0qIEFkZCBzdXBwb3J0IGZvciBPRiBmbGF0IHRyZWUgZm9yIHRoZSBTVFh0YyBib2FyZC4KLSAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA0IFNlcCAyMDA1Ci0KLSogU3VwcG9ydCBwYXNzaW5nIG9mIE9GIGZsYXQgdHJlZXMgdG8gdGhlIGtlcm5lbC4KLSAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA0IFNlcCAyMDA1Ci0KLSogQ2xlYW51cAotCi0qIEFkZCBzdXBwb3J0IGZvciBOZXRTaWxpY29uIE5TNzUyMCBwcm9jZXNzb3IuCi0gIFBhdGNoIGJ5IEFydCBTaGlwa293c2tpLCAxMiBNYXkgMjAwNQotCi0qIEFkZCBzdXBwb3J0IGZvciBBUDEwMDAgYm9hcmQuCi0gIFBhdGNoIGJ5IEphbWVzIE1hY0F1bGF5LCAwNyBPY3QgMjAwNQotCi0qIEVsaW1pbmF0ZSBoYXJkLWNvZGVkIGFkZHJlc3Mgb2YgRXRoZXJuZXQgdHJhbnNmZXIgYnVmZmVyIG9uIGF0OTFybTkyMDAKLSAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDcgT2N0IDIwMDUKLQotICBUaGUgQXRtZWwgZXJyYXRhICMxMSBzdGF0ZXMgdGhhdCB0aGUgdHJhbnNmZXIgYnVmZmVyIGRlc2NyaXB0b3IKLSAgdGFibGUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMTYtd29yZCBib3VuZGFyeS4gQXMgaXQgdHVybmVkIG91dCwgdGhpcwotICBpcyBpbnN1ZmZpY2llbnQgLSBpdCBzZWVtcyB0aGUgdGFibGUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgYm91bmRhcnkKLSAgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIHRhYmxlIGl0c2VsZiAoaW4gTGludXggdGhpcyBpcyBub3QgYW4KLSAgaXNzdWUgLSB0aGUgdGFibGUgaXMgYWxpZ25lZCBvbiBhIFBBR0VfU0laRSAoNDA5NikgYm91bmRhcnkpLgotCi0qIEZpeGVkIGNvbXBpbGF0aW9uIGZvciBBUk0gd2hlbiB1c2luZyBhIChzdGFuZGFyZCkgaGFyZC1GUCB0b29sY2hhaW4KLSAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDcgT2N0IDIwMDUKLQotKiBDbGVhbnVwIHdhcm5pbmdzIGZvciBjcHUvYXJtNzIwdCAmIGNwdS9hcm0xMTM2IGZpbGVzLgotICBzZWQgdGhlIGxpbmtlciBzY3JpcHRzLCByYXRoZXIgdGhhbiBwcmUtcHJvY2VzcyB0aGVtLgotICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDA3IE9jdCAyMDA1Ci0KLSogVXBkYXRlIG1ha2UgdGFyZ2V0IGZvciBBUk0gc3VwcG9ydGVkIGJvYXJkcy4KLSAgVXNlIGxvd2xldmVsX2luaXQoKSBpbnN0ZWFkIG9mIHBsYXRmb3Jtc2V0dXAoKSBbcmVuYW1lXS4KLSAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAwNiBPY3QgMjAwNQotCi0qIEZpeCBib290aW5nIGZyb20gc2VyaWFsIGRhdGFmbGFzaCBvbiBBVDkxUk05MjAwCi0gIFBhdGNoIGJ5IFBldGVyIE1lbnplYmFjaCwgMjkgQXVnIDIwMDUKLQotKiBBZGQgSkZGUzIgc3VwcG9ydCBmb3IgVFJBQiBib2FyZAotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNSBBdWcgMjAwNQotCi0qIFJlbW92ZSB1bm5lY2Vzc2FyeSBkZXBlbmRlbmN5IG9mIG5ldGNvbnNvbGUgb24gQ09ORklHX05FVF9NVUxUSQotICBQYXRjaCBieSBNYXJjdXMgSGFsbCwgMjQgQXVnIDIwMDUKLQotKiBGaXggdGhlIG1hY2hpbmUtaWQgb2YgdGhlIENvZ2VudCBjc2I2MzcgYm9hcmQKLSAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDUgT2N0IDIwMDUKLQotKiBDb21wbGV0ZSBzdXBwb3J0IGZvciB0aGUgS3dpa0J5dGUgS0I5MjB4IGJvYXJkcwotICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNSBPY3QgMjAwNQotCi0qIFNldCB0aGUgQVQ5MVJNOTIwMCBjbG9jayB0byBhc3luY2hyb25vdXMgbW9kZQotICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwMyBNYXkgMjAwNQotCi0qIFNldCB0aGUgQVQ5MVJNOTIwMCBjbG9jayB0byBzeW5jaHJvbm91cyBtb2RlCi0gIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1Ci0KLSogQWRkIHN1cHBvcnQgZm9yIENvZ2VudCBjc2I2MzcKLSAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKLQotKiBGaXggZG05MTYxLmMgaW5pdGlhbGl6YXRpb24KLSAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKLQotKiBGaXggcHJvYmxlbXMgaW50cm9kdWNlZCBieSBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwMiBNYXIgMjAwNQotICAoOGUyYmU1MWRlOGRkMDNjMWNlNGQwNmNiYjE4YWQwNjEzM2Q0N2NkNSkKLQotKiBNb3ZlIGRtOTE2MS5jIGFuZCBseHQ5NzIuYyBpbnRvIGNwdS9hcm05MjB0L2F0OTFybTkyMDAKLSAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKLQotKiBGaXggZGV2aWNlIHBhcnRpdGlvbiBpbnRpYWxpemF0aW9uIGZvciBTeXN0ZW1BQ0UgZGlza3MuCi0gIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDI4IEFwciAyMDA1Ci0KLSogQWRkZWQgc3VwcG9ydCBmb3IgS3dpa0J5dGUgS0I5MjB4IGJvYXJkcyAoYmFzZWQgb24gQVQ5MVJNOTIwMCkKLSAgUGF0Y2ggYnkgTWF0dCA/PyA8a2I5MjAwX2RldkBrd2lrYnl0ZS5jb20+LCAyNyBBcHIgMjAwNQotCi0qIEFkZCBzdXBwb3J0IGZvciBTMjlHTDA2NE0tUjMgZmxhc2ggY2hpcCBvbiB4c2VuZ2luZSBib2FyZAotICBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMTggQXByIDIwMDUKLQotKiBFNTAwIHVwZGF0ZTogcmVwb2ludCBJVlBSIHRvIFJBTSB3aGVuIGNvZGUgaXMgcmVsb2NhdGVkCi0gIFBhdGNoIGJ5IEt5bG8gR2luc2JlcmcsIDEzIEFwciAyMDA1Ci0KLSogRml4IGxvb3AgZW5kIHRlc3QgaW4gbGliX2dlbmVyaWMvc3RyaW5nLmM6c3Ryc3dhYigpCi0gIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCBPY3RvYmVyIDEwLCAyMDA1Ci0gIFNpZ25lZC1vZmYtYnk6IEFuZHJldyBEeWVyIDxhbWR5ZXJAZ21haWwuY29tPgotCi0qIENsZWFudXAKLQotKiBVcGRhdGUgQVJNIEludGVncmF0b3IgYm9hcmRzOgotICBDb3JyZWN0IGFkZGVzc2luZyBlcnJvcnMgaW4gcGxhdGZvcm0gZmlsZXMuCi0gIFNwbGl0IG9mZiBjb21tb24gY29yZSBtb2R1bGUgZGF0YSBmcm9tIEludGVncmF0b3IgaGVhZGVyIGZpbGVzIHRvCi0gIGluY2x1ZGUvYXJtY29yZW1vZHVsZS5oLgotICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDA0IE9jdCAyMDA1Ci0KLSogTWFrZSBzdXJlIG9ubHkgc3VwcG9ydGVkIGNvbXBpbGVyIG9wdGlvbnMgYXJlIHVzZWQKLSAgSW1wb3J0ICJjYy1vcHRpb24iIHNoZWxsIGZ1bmN0aW9uIGZyb20ga2VybmVsIGFuZAotICB1c2UgaXQgdG8gZ2V0IHRoZSBjb3JyZWN0IEFSTSBHQ0Mgb3B0aW9ucyBmb3IgaW5kaXZpZHVhbCBDUFVzCi0gIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMzAgSnVuIDIwMDUKLQotKiBGaXggNDQwR1IgdG8gcHJpbnQgY29ycmVjdCBjcHUgcmV2aXNpb24KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNCBPY3QgMjAwNQotCi0qIENoYW5nZSBib2FyZCBtZXNzYWdlIG9uIEFNQ0MgWW9zZW1pdGUgJiBZZWxsb3dzdG9uZSB0byBjb21tb24gc3R5bGUKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMyBPY3QgMjAwNQotCi0qIEZpeCBjb21waWxlciB3YXJuaW5nCi0KLSogRml4IEZFQyBQSFkgYWRkcmVzc2VzIGZvciBUUU04NXh4IGJvYXJkcwotCi0qIEZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHByb2JsZW0gaW4gaHVzaCBzaGVsbAotICBQYXRjaCBieSBMYXJzIFJvc3RvY2ssIDI2IFNlcCAyMDA1Ci0KLSogVW5kbyBjaGFuZ2Ugb2YgZjZlMjBmYzZjYS4uLiB0byBpbmNsdWRlL2NvbmZpZ3MvdHJhYi5oCi0gIChNdXN0IGhhdmUgYmVlbiBhbiBhY2NpZGVudD8pCi0KLSogQWRkIHN1cHBvcnQgZm9yIEFUOTFSTTkyMDAgT0hDSSBDb250cm9sbGVyLgotICBQYXRjaCBieSBFcmljIEJlbmFyZCwgMDcgQXByIDIwMDUKLQotKiBVcGRhdGUgQVJNIG1hY2gtdHlwZXMuaAotICBQYXRjaCBieSBFcmljIEJlbmFyZCwgMDcgQXByIDIwMDUKLQotKiBBZGQgc3VwcG9ydCBmb3IgTVAyVVNCIGJvYXJkLgotICBQYXRjaCBieSBFcmljIEJlbmFyZCwgMDcgQXByIDIwMDUKLQotKiBBZGQgYm9hcmQgc3VwcG9ydCBmb3IgYXJtYWRpbGxvIEhUMTA3MAotICBQYXRjaCBieSBSb3dlbCBBdGllbnphLCAwNiBBcHIgMjAwNQotCi0qIFNlY29uZCBFdGhlcm5ldCBhZGRyZXNzIGVuYWJsZWQgZm9yIE1QQzg4NUFEUyBhbmQgTVBDODI3MkFEUy4KLSAgUGF0Y2ggYnkgVml0YWx5IEJvcmR1ZywgMzAgTWFyIDIwMDUKLQotKiBBZGQgaW9wc2V0IGNvbW1hbmQgb24gbXBjOHh4Ci0gIFBhdGNoIGJ5IERhbmllbCBFaXNlbmh1dCwgMjUgTWFyIDIwMDUKLQotKiBBZGQgc3VwcG9ydCBmb3IgTUlJIGluIGVlcHJvMTAwIGRyaXZlci4KLSAgUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAyMSBNYXIgMjAwNQotCi0qIEZpeGVzIHRvIHRoZSBMdWJib2NrIChQWEEgMjV4KSBzdXBwb3J0OgotICAtIFJlc29sdmUgdGhlIEZJWE1FIHdpdGggcmVzcGVjdCB0byBzYXZpbmcgdGhlIHUtYm9vdCBlbnZpcm9ubWVudC4KLSAgLSBNYWtlIHRoZSBkZWZhdWx0IGxvYWQgYWRkcmVzcyBsYW5kIGluIHJlYWwgbWVtb3J5LgotICAtIEZpeCBsYW45MWM5NiBTTUNfe2luLG91dH17Yix3LGx9KCkgbWFjcm9zCi0gIFBhdGNoIGJ5IERhdmlkIEJyb3duZWxsLCAxMCBNYXIgMjAwNQotCi0qIEFkZCBCYXJjbyBTdHJlYW1pbmcgVmlkZW8gQ2FyZCAoU1ZDKSBhbmQgU2FtcGxlIENvbXByZXNzIE5ldHdvcmsgKFNDTikgYm9hcmQKLSAgUGF0Y2ggYnkgTWFyYyBMZWVtYW4sIDA0IE1hciAyMDA1Ci0KLSogT01BUDI0MnggSDQgYm9hcmQgdXBkYXRlCi0gIC0gZml4IGZvciBFUzIgZGlmZmVyZW5jZXMuCi0gIC0gc3dpdGNoIHRvIHVzaW5nIHRoZSBjZmlfZmxhc2ggZHJpdmVyLgotICAtIGZpeCBTUkFNIGJ1aWxkIGFkZHJlc3MuCi0gIC0gZml4IGZvciBHUCBkZXZpY2Ugb3BlcmF0aW9uLgotICAtIHVubG9jayBTUkFNIGZvciBHUCBkZXZpY2VzLgotICAtIGRpc3BsYXkgbW9yZSBkZXZpY2UgaW5mb3JtYXRpb24uCi0gIC0gZml4IHBvdGVudGlhbCBkZWFkbG9jayBpbiBvbWFwMjR4eF9pMmMgZHJpdmVyLgotICAtIGZpeCBETEwgbG9hZCB2YWx1ZXMgdG8gbWF0Y2ggZHBsbG91dCoxIG9wZXJhdGlvbi4KLSAgLSBmaXggMm5kIGNoaXAgc2VsZWN0IGluaXQgZm9yIGNvbWJvIEREUiBkZXZpY2UuCi0gIC0gYWRkIHN1cHBvcnQgZm9yIENGSSBJbnRlbCAyOEYyNTZMMTggb24gSDQgYm9hcmQuCi0gIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDAzIE1hciAyMDA1Ci0KLSogRml4IGZvcm1hdGluZyBpbiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL0FUOTFSTTkyMDAuaAotICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwMiBNYXIgMjAwNQotCi0qIEZpeCB0eXBvIGluIGV0aC5jCi0gIFBhdGNoIGJ5IEFyYSBBdmFuZXN5YW4sIDI0IEZlYiAyMDA1Ci0KLSogUmVtb3ZlIHVubmVlZGVkICNpbmNsdWRlIDxtYWxsb2MuaD4KLSAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDIyIEZlYiAyMDA1Ci0KLSogQWRkIGNyYW1mcyBzdXBwb3J0IGZvciBtNjhrCi0gIFBhdGNoIGJ5IFphY2hhcnkgTGFuZGF1LCAyMSBGZWIgMjAwNQotCi0qIFVwZGF0ZSBlcDgyNjA6IEZpeCBmbGFzaCB0aW1lb3V0czsgaW1wcm92ZSBjbG9jayByZXNvbHV0aW9uIGZvciBmYXN0ZXIgVUFSVHMKLSAgUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDIxIEZlYiAyMDA1Ci0KLSogRml4IGF1MXgwMF9zZXJpYWwgYmF1ZCByYXRlIGNhbGN1bGF0aW9uOgotICByZW1vdmUgaGFyZGNvZGVkIGNwdSBjbG9jayBkaXZpc29yIGFuZCB1c2UgcmVnaXN0ZXIgaW5zdGVhZDsKLSAgcm91bmQgdXAgaW5zdGVhZCBvZiB0cnVuY2F0ZQotICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTUgRmViIDIwMDUKLQotKiBBZGQgWGlsaW54IFNwYXJ0YW4zIGZhbWlseSBGUEdBIHN1cHBvcnQKLSAgUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDE0IEZlYiAyMDA1Ci0KLSogRml4IGRyaXZlcnMvY2ZpX2ZsYXNoLmM6IHVzZSBpbmZvLT5yZXNldF9jbWQgaW5zdGVhZCBvZiBGTEFTSF9DTURfUkVTRVQKLSAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDExIEZlYiAyMDA1Ci0KLSogRml4IFZPSDQwNSBTdXBwb3J0Ci0gIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyNSBTZXAgMjAwNQotCi0qIEFkZGVkIHN1cHBvcnQgZm9yIFBDSSBicmlkZ2Ugb24gTVBDODI3MkFEUwotICBQYXRjaCBieSBWaXRhbHkgQm9yZHVnLCBGZWIgMDkgMjAwNQotCi0qIFVwZGF0ZSBtdWx0aWNvcmUgQ005WFggc3VwcG9ydCBmb3IgSW50ZWdyYXRvciBBUCB0byBhbGxvdyBib290aW5nIGZyb20gZmxhc2gKLSAgUGF0Y2ggYnkgSmVhbi1QYXVsIFNhbWFuLCA4IEZlYiAyMDA1Ci0KLSogRml4IHN0cnN3YWIoKSB0byByZWxpYWJseSBmaW5kIGVuZCBvZiBzdHJpbmcKLSAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDA4IEZlYiAyMDA1Ci0KLSogRml4IHR5cG9zIGluIGluY2x1ZGUvcHBjNDQwLmgKLSAgUGF0Y2ggYnkgQW5kcmV3IEUgTWlsZXNraSwgMDQgRmViIDIwMDUKLQotKiBBZGQgVmlicmVuICh3YXMgQWNjZWxlbnQpIFBYQTI1NSBJRFAgU3VwcG9ydAotICBQYXRjaCBieSBDbGlmZiBCcmFrZSwgMDQgRmViIDIwMDUKLQotKiBGaXggdG9vbHMvYm1wX2xvZ28uYyB1c2luZyBpbmNvcnJlY3Qgb2Zmc2V0IHRvIHBpeGVsIGRhdGEKLSAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDMxIEphbiAyMDA1Ci0KLSogQWRkIEFSTTk0NkUgY3B1IGFuZCBjb3JlIG1vZHVsZSB0YXJnZXRzOyByZW1hcCBtZW1vcnkgdG8gMHgwMDAwMDAwMAotICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDIgRmViIDIwMDUKLQotKiBGaXggZXJyb3IgaGFuZGxpbmcgaW4gdG9vbHMvZW52L2Z3X2Vudi5jCi0gIFBhdGNoIGJ5IEFyYSBBdmFuZXN5YW4sIDAxIEZlYiAyMDA1Ci0KLSogRml4IE1HVDUxMDAgUFNDIGJhdWRyYXRlIGNhbGN1bGF0aW9uCi0gIFBhdGNoIGJ5IFNlYmFzdGlhbiBTY2hhdSwgMjcgSmFuIDIwMDUKLQotKiBPTUFQMjQyeCBmaXggZm9yIEdQIGRldmljZSBib290aW5nCi0gIC0gQWRkIFNSQU0gdW5sb2NrIGZvciBHUCBkZXZpY2VzLgotICAtIENoYW5nZSBERFIgRExMIHVubG9jayB2YWx1ZSB0byBhbGxvdyBEUExMb3V0KjEgb3BlcmF0aW9uLgotICBQYXRjaGVzIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDIxIEphbiAyMDA1OgotCi0qIEFkZCBzdXBwb3J0IGZvciBBTUQncyBQYjF4MDAgZXZhbCBib2FyZDsKLSAgYWRkIE1JSSByb3V0aW5lcyB0byB0aGUgYXUxeDAwIGV0aGVybmV0IGRyaXZlcjsKLSAgYWRkIFVTQiBvaGNpIGRyaXZlciAod29yayBpbiBwcm9ncmVzcykKLSAgUGF0Y2ggYnkgVGhvbWFzIFNhaWxlciwgMjAgSmFuIDIwMDUKLQotKiBVcGRhdGUgb21hcDU5MTJvc2sgYm9hcmQKLSAgVXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgaW5zdGVhZCBvZiBwcml2YXRlIGZsYXNoIGRyaXZlcjsKLSAgUmVtb3ZlIGhhcmRjb2RlZCBwZXJzb25hbGl6ZWQgc2V0dGluZ3MgZnJvbSBvbWFwNTkxMm9zay5oOwotICBGaXggc3BhY2luZyB3aXRoIChSTykgbWFya3MgaW4gJ2ZsaW5mbycgb3V0cHV0LgotICBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxNCBKYW4gMjAwNQotCi0qIEZpeCB3YXJuaW5ncyBmb3IgUENJIGNvZGUgb24gaXhwCi0gIFBhdGNoIGJ5IEpvZSA8bGd4dWVAeWFob28uY29tPiwgMTMgSmFuIDIwMDUKLQotKiB2aXJ0ZXgyIGZpeCBmb3IgYm9ndXMgZG93bmxvYWQgZXJyb3IgbWVzc2FnZXMKLSAgVGhlIHZpcnRleDIgRlBHQSBkb3dubG9hZCBjb2RlIHdhdGNoZXMgZm9yIGluaXQgZ29pbmcgYWN0aXZlIGR1cmluZwotICBhIGRvd25sb2FkIG9mIGNvbmZpZyBkYXRhIGFzIGFuIGVycm9yIGNvbmRpdGlvbi4gaW5pdCBhbHNvIGdvZXMKLSAgYWN0aXZlIGFmdGVyIGEgY29uZmlndXJhdGlvbiBpcyBmaW5pc2hlZCBpbiBjb25jZXJ0IHdpdGggdGhlIGRvbmUKLSAgc2lnbmFsLiBTbyBmYXIsIHRoZSBjb2RlIGRvZXMgbm90IGNoZWNrIGZvciBkb25lIGFjdGl2ZSB1bnRpbCBhbGwKLSAgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBzZW50LiBJZiBjb25maWd1cmF0aW9uIGRhdGEgaGFzIGEgZmV3Ci0gIGV4dHJhIHBhZCBieXRlcyBhdCB0aGUgZW5kLCB0aGlzIHdvdWxkIGNhdXNlIGFuIGVycm9yIG1lc3NhZ2UgZXZlbgotICB0aG91Z2ggdGhlIGRvd25sb2FkIGhhZCBzdWNlZWRlZC4KLSAgTk9URTogdmlydGV4MiBzbGF2ZSBzZXJpYWwgYW5kIHNwYXJ0YW4yIHZlcnNpb25zIG1heSBzdGlsbCBoYXZlIHRoZQotICBzYW1lIHByb2JsZW0uCi0gIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMiBKYW4gMjAwNQotCi0qIE9wdGltaXplIGZsYXNoX21ha2VfY21kIGluIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgZm9yIGxpdHRsZSBlbmRpYW4KLSAgRml4ICJXQVJOSU5HOiBmbGFzaF9tYWtlX2NtZDogdW5zdXBwcG9ydGVkIExpdHRsZUVuZGlhbiBtb2RlIgotICBtZXNzYWdlIHdoZW4gcHJvYmluZyBmb3Igbm9uZXhpc3RlbnQgZmxhc2ggaW4gbGl0dGxlIGVuZGlhbiBtb2RlLgotICBBcyBhIHNpZGUgZWZmZWN0IG1vcmUgZWZmaWNpZW50IGFuZCBzbWFsbGVyIGNvZGUgaXMgZ2VuZXJhdGVkLAotICB3aGljaCBpcyBhbHdheXMgYSBHb29kIFRoaW5nIChUTSkuCi0gIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyNCBTZXAgMjAwNQotCi0qIFVwZGF0ZSBmb3IgVEZUUCB1c2luZyBhIGZpeGVkIFVEUCBwb3J0Ci0gIFVzZSB0aGUgYXBwcm92ZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMuIEFkZGVkICJ0ZnRwZHN0cCIgdG8KLSAgYWxsb3cgcG9ydHMgb3RoZXIgdGhhbiA2OSBwZXIgVG9sdW5heSBPcmt1bidzIHJlY29tbWVuZGF0aW9uLgotICBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDEyIEphbiAyMDA1Ci0KLSogQWxsb3cgdG8gZm9yY2UgVEZUUCB0byB1c2UgYSBmaXhlZCBVRFAgcG9ydAotICAoQWRkIGEgY29uZmlndXJhdGlvbiBvcHRpb24gQ09ORklHX1RGVFBfUE9SVCBhbmQgb3B0aW9uYWwgZW52Ci0gIHZhcmlhYmxlIHRmdHBwb3J0KQotICBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDEwIEphbiAyMDA1Ci0KLSogRml4IGV0aGVybmV0IHRpbWVvdXRzIG9uIGRiYXUxNTUwIGFuZCBvdGhlciBhdTF4MDAgc3lzdGVtcwotICBQYXRjaCBieSBMZWlmIExpbmRob2xtLCAyOSBEZWMgMjAwNAotCi0qIENsZWFudXA6IGZpeCBicm9rZW4gYnVpbGRzCi0KLSogRml4IFBIWSBhZGRyZXNzIGFyZ3VtZW50IHBhc3Npbmcgd2l0aCBtaWkgaW5mbyBjb21tYW5kCi0gIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAyOCBEZWMgMjAwNAotCi0qIENsZWFudXAgKFBQQzR4eCBpcyBBTUNDIG5vdykKLQotKiBlc2QgQ1BDSTJEUCBib2FyZCBhZGRlZAotICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjIgU2VwIDIwMDUKLQotKiBlc2QgUE1DNDA1IGJvYXJkIHVwZGF0ZWQKLSAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDIyIFNlcCAyMDA1Ci0KLSogQWRkIFNNNTAxIHN1cHBvcnQgdG8gSEg0MDUgYm9hcmQuCi0gIEFkZCBzdXBwb3J0IGZvciBnemlwIGNvbXByZXNzZWQgYm1wJ3MgKENPTkZJR19WSURFT19CTVBfR1pJUCkuCi0gIEFkZCBzdXBwb3J0IGZvciBlZXByb20gd3JpdGUtZW5hYmxlIChDRkdfRUVQUk9NX1dSRU4pLgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIyIFNlcCAyMDA1Ci0KLSogRml4IGF1dG9uZWdvdGlhdGlvbiBpbiB0c2VjIGV0aGVybmV0IGRyaXZlcgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIxIFNlcCAyMDA1Ci0KLSogRml4IGJ1ZyBpbiBhdXRvX3VwZGF0ZSAodHJhYiBib2FyZCkKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTYgU2VwIDIwMDUKLQotKiBGaXggY29tcHV0YXRpb24gb2YgZnJhbWVidWZmZXIgcGFsZXR0ZSBmb3IgOGJwcCBMQ0QgYml0bWFwcwotICBQYXRjaCBieSBGcmFuY2VzY28gTWFuZHJhY2NpLCAxNiBTZXAgMjAwNQotCi0qIFVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBJTktBNHgwIGJvYXJkCi0KLSogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIFBNODU0IGJvYXJkCi0gIEJhc2VkIG9uIHBhdGNoIGJ5IFIuIExvZWZmbCwgMjAgSnVsIDIwMDUKLQotKiBBZGQgUENJIHN1cHBvcnQgdG8gVFFNODU0MCBhbmQgVFFNODU2MCBib2FyZHMKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBTZXAgMjAwNQotCi0qIFVwZGF0ZSBBTUNDIFlvc2VtaXRlIHRvIGdldCBhIGNvbnNpc3RlbnQgc2V0dXAgZm9yIGFsbCBBTUNDIGV2YWwKLSAgYm9hcmRzIChiYXVkcmF0ZSwgZW52aXJvbm1lbnQuLi4pLiBGbGFzaCBkcml2ZXIgZml4ZWQuCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgU2VwIDIwMDUKLQotKiBGaXggcHJvYmxlbSBpbiA0NDBHUCBldGhlcm5ldCBkcml2ZXIgKGVib255KS4gQWRkIHN1cHBvcnQgZm9yIDJuZAotICBldGhlcm5ldCBwb3J0IG9uIGVib255LgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDcgU2VwIDIwMDUKLQotKiBBZGRlZCBzdXBwb3J0IGZvciBtdGRkZXZudW0gYW5kIG10ZGRldm5hbWUgdmFyaWFibGVzIChtdGRwYXJ0cyBjb21tYW5kKQotCi0qIENoYW5nZSBkZWZhdWx0IGNvbnNvbGUgYmF1ZCByYXRlIGZvciBzdHh4dGMgYm9hcmQKLQotKiBBZGQgSTJDIHN1cHBvcnQgdG8gVFFNODU0MCBhbmQgVFFNODU2MCBib2FyZHMgKEVFUFJPTSwgUlRDLCBMTTc1LURUVCkuCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMzEgQXVnIDIwMDUKLQotKiBGaXggZGVmYXVsdCBjb21tYW5kIHNldCAoZG9uJ3QgaW5jbHVkZSBDRkdfQ01EX0RJU1BMQVkgY29tbWFuZCkKLSAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDAyIFNlcCAyMDA1Ci0KLSogQ2xlYW51cAotCi0qIEVuYWJsZSBTTTcxMiBkcml2ZXIgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZC4KLQotKiBGaXggcHJvYmxlbXMgd2l0aCBsZCB2ZXJzaW9uIDIuMTYgKGRvdCBvdXRzaWRlIHNlY3Rpb25zIHByb2JsZW0pCi0gIFBvaW50ZWQgb3V0IGJ5IEdlcmhhcmQgSmFlZ2VyLCAzMSBBdWcgMjAwNTsKLSAgY2YuIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDA1LTA4L21zZzAwNDEyLmh0bWwKLQotKiBQcmVwYXJlIFUtQm9vdCBmb3IgZ2NjLTQueDogZml4IGdsb2JhbCBkYXRhIHBvaW50ZXIgaW5pdGlhbGl6YXRpb24KLQotKiBBZGp1c3QgQ1MzIHRpbWluZ3Mgb24gSE1JMTAwMSBib2FyZCBmb3IgZG90IG1hdHJpeCBkaXNwbGF5IHVuZGVyIExpbnV4Ci0KLSogQWRkIGtleWJvYXJkIGFuZCBkb3QgbWF0cml4IGRpc3BsYXkgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZC4KLQotKiBQcmVwYXJlIFUtQm9vdCBmb3IgZ2NjLTQueAotCi0qIEZpeGVkIEJhbWJvbyBwb3J0IHRvIGVuYWJsZSBydW5uaW5nIHdpdGhvdXQgRERSLURJTU0KLSAgKEJhbWJvbyBoYXMgYWxzbyA2NE1CIG9uYm9hcmQgRERSKQotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IEF1ZyAyMDA1Ci0KLSogTWVyZ2VkIDQwNWdwX2VuZXQuYyBhbmQgNDQwZ3hfZW5ldC5jIHRvIGdlbmVyaWMgNHh4X2VuZXQuYwotICBub3cgaGFuZGxpbmcgYWxsIDR4eCBjcHUncwotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IEF1ZyAyMDA1Ci0KLSogRml4IG1ha2UgZGVwZW5kZW5jaWVzIGZvciBhdDkxcm05MjAwIGFuZCBrczg2OTUgY3B1cwotICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMyBBdWcgMjAwNQotCi0qIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBUUU01MjAwIGJvYXJkCi0KLSogQWRkIGVzZCBjcGNpNTIwMCBhbmQgcGY1MjAwIGJvYXJkcwotICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCAyMiBBdWcgMjAwNQotCi0qIEZpeCBzeXNjbG9jayBmb3IgVFFNODU0MCBhbmQgVFFNODU2MCBib2FyZHMKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjUgSnVsIDIwMDUKLQotKiBJbml0aWFsaXplIHNlcmlhbCMgYW5kIGV0aGFkZHIgZnJvbSBtYW51ZmFjdHVyZXIgZGF0YSBpbiBFRVBST00gb24gQ01DLVBVMgotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOCBKdW4gMjAwNQotCi0qIEFkZCBuZXcgYm9hcmQgc3BlY2lmaWMgY29tbWFuZHMgZm9yIFRRTTUyMDAvU1RLNTJYWAotICAtIFNvdW5kIGNvbW1hbmRzIChiZWVwLCB3YXYsIHNvdW5kKQotICAtIFRlc3QgY29tbWFuZHMgKGxlZCwgY2FuLCBiYWNrbGlnaHQsIHJzMjMyKQotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwMiBNYXkgMjAwNQotCi0qIENoYW5nZSBtYWluIGNsb2NrIG9uIENNQy1QVTIgYm9hcmQgZnJvbSAyMDcgTUh6IHRvIDE3OSBNSHoKLSAgYmVjYXVzZSBvZiBhIGJ1ZyBpbiB0aGUgQVQ5MVJNOTIwMCBDUFUgUExMCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIyIEFwciAyMDA1Ci0KLSogQWRkIGF1dG9tYXRpYyBIVyBkZXRlY3Rpb24gZm9yIGFub3RoZXIgQ01DX1BVMiB2YXJpYW50Ci0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIwIEFwciAyMDA1Ci0KLSogUmVtb3ZlIENPTkZJR19BVDkxUk05MjAwREsgaW4gQ01DLVBVMiBjb25maWd1cmF0aW9uCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE5IEFwciAyMDA1Ci0KLSogRml4IGluaXRpYWxpemF0aW9uIHByb2JsZW0gb24gVFFNNTIwMCB3aXRob3V0IFNNNTAxCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA4IEFwciAyMDA1Ci0KLSogQWRkIFJUQyBzdXBwb3J0IGZvciBTVEs1MlhYLjIwMAotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNyBBcHIgMjAwNQotCi0qIEFkZCBzdXBwb3J0IGZvciBJRk0gbzJkbnQgYm9hcmQKLQotKiBFbmFibGUgUENJIG9uIGhtaTEwMDEgYm9hcmQKLQotKiBGaXggcmV0dXJuIHZhbHVlcyBvZiB0aGUgamZmczIgY29tbWFuZHMgbHMvZnNsb2FkL2ZzaW5mbywKLSAgc28gd2UgY2FuIHVzZSB0aGVtIHRvLCBlLmcuLCBjaGVjayB0aGUgZXhpc3RlbmNlIG9mIGEgZmlsZSB3aXRoCi0gICJpZiBscyBmb287IHRoZW4gdGhpczsgZWxzZSB0aGF0OyBmaSIgaW4gdGhlIGh1c2ggc2hlbGwKLSAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTYgQXVndXN0IDIwMDUKLQotKiBDb2Rpbmcgc3R5bGUgY2xlYW51cAotCi0qIEFkZCBzdXBwb3J0IGZvciBTaWxpY29uIFR1cm5rZXkgZVhwcmVzcyBYVGMgKG1wYzg3eC84OHgpIGJvYXJkLgotICBQYXRjaCBieSBEYW4gTWFsZWsgYW5kIFBhbnRlbGlzIEFudG9uaW91LCAxNSBBdWcgMjAwNQotCi0qIENoZWNrIHJldHVybiB2YWx1ZSBvZiBtYWxsb2MgaW4gNDQwZ3hfZW5ldC5jCi0gIFBhdGNoIGJ5IFRyYXZpcyBCLiBTYXd5ZXIsIDE4IEp1bCAyMDA1Ci0KLSogQWRkIFNhbmRidXJzdCBNZXRyb2JveCBhbmQgU2FuZGJ1cnN0IEthcmVmIGJvYXJkIHN1cHBvcnQgcGFja2FnZXMuCi0gIFNlY29uZCBzZXJpYWwgcG9ydCBvbiA0NDBHWCBub3cgZGVmaW5lZCBhcyBhIHN5c3RlbSBkZXZpY2UuCi0gIEFkZCAnU2hvcnQgRXRjaCcgY29kZSBmb3IgQ2ljYWRhIFBIWSB3aXRoaW4gNDQwZ3hfZW5ldC5jCi0gIFBhdGNoIGJ5IFRyYXZpcyBCLiBTYXd5ZXIsIDEyIEp1bCAyMDA1Ci0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMzoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBNaW5vciBjb2RlIGNsZWFudXAKLQotKiBBZGQgZm9yZ290dGVuIG5ldyBmaWxzIGZyb20gbGF0ZXN0IFZvaWNlQmx1ZSB1cGRhdGUKLQotKiBNYWtlIGJvb3RyZXRyeSBmZWF0dXJlIHdvcmsgd2l0aCBodXNoIHNoZWxsLgotICBDYXZlYXQ6IHRoaXMgY3VycmVudGx5ICpyZXF1aXJlcyogQ09ORklHX1JFU0VUX1RPX1JFVFJZIHRvIGJlIHNldCwgdG9vLgotICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxOSBKdWwgMjAwNQotCi0qIFVwZGF0ZSBIeW1vZCBCb2FyZCBEYXRhYmFzZSBQSFAgY29kZSBpbiAidG9vbHMiIGRpcmVjdG9yeQotICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAwMSBKdWwgMjAwNQotCi0qIE1ha2UgInRyIiBjb21tYW5kIHVzZSBQT1NJWCBjb21wbGlhbnQ7IGV4cG9ydCBIT1NUT1MgbWFrZSB2YXJpYWJsZQotICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAzMCBKdW4gMjAwNQotCi0qIEZpeCBNdXJyYXkgSmVuc2VuJ3MgbWFpbCBhZGRyZXNzLgotICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAzMCBKdW4gMjAwNQotCi0qIFByZXNlcnZlIFBIWV9CTUNSIGR1cmluZyBhIHNvZnQgcmVzZXQuCi0gIFBhdGNoIGJ5IENhcmwgUmllY2hlcnMsIDI0IEp1biAyMDA1Ci0KLSogVm9pY2VCbHVlIHVwZGF0ZTogZWVwcm9tIHRvb2wgY2FuIGFsc28gc3RvcmUgZmlybXdhcmUgdmVyc2lvbiBub3cuCi0gIGVlcHJvbS5iaW4gaXMgcnVuYWJsZSBieSBqdW1waW5nIGF0IGxvYWQgYWRkcmVzcy4KLSAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDIzIE1heSAyMDA1Ci0KLSogTW92ZSB0aGUgQVQ5MVJNOTIwMERLIHRvIHRoZSBBUk0gU3lzdGVtcyBsaXN0LgotICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyNiBBcHIgMjAwNQotCi0qIEVsaW1pbmF0ZSBjYWxscyBvZiBBUk0gbGliZ2NjLmEgaGVscGVyIGZ1bmN0aW9ucyBfZGl2c2kzIGFuZCBfbW9kc2kzCi0gIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI2IEFwciAyMDA1Ci0KLSogbWVhc3VyZV9nY2xrKCkgaXMgbmVlZGVkIHdoZW4gREVCVUcgaXMgZW5hYmxlZAotICBQYXRjaCBieSBCcnlhbiBPJ0Rvbm9naHVlLCAyNSBBcHIgMjAwNQotCi0qIEFkZCBVUEQtQ2hlY2tzdW0gY29kZSwgZml4IHByb2JsZW0gaW4gbmV0LmMgKHJldHVybiBpbnN0ZWFkIG9mIGJyZWFrKQotICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCAxMiBBdWcgMjAwNQotCi0qIGVzZCBQQ0k0MDUgYm9hcmQgdXBkYXRlZAotICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjggSnVsIDIwMDUKLQotKiBlc2QgV1VINDA1IGFuZCBEVTQwNSBib2FyZCB1cGRhdGVkCi0gIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyNyBKdWwgMjAwNQotCi0qIEZpeCBwcm9ibGVtIGluIGNtZF9uYW5kLmMgKG9ubHkgd2hlbiBkZWZpbmVkIENGR19OQU5EX1NLSVBfQkFEX0RPVF9JKQotICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgNCBNYXkgMjAwNQotCi0qIFVwZGF0ZSBBTUNDIFlvc2VtaXRlIHRvIGdldCBhIGNvbnNpc3RlbnQgc2V0dXAgZm9yIGFsbCBBTUNDIGV2YWwKLSAgYm9hcmRzIChiYXVkcmF0ZSwgZW52aXJvbm1lbnQuLi4pLiBGbGFzaCBkcml2ZXIgZml4ZWQuCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgQXVnIDIwMDUKLQotKiBDaGFuZ2VkIEFNQ0MgQnViaW5nYSAoNDA1RVApIGNvbmZpZ3VyYXRpb24gdG8gc3VwcG9ydCAybmQgZXRoIHBvcnQKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQotCi0qIEFkZCBOQU5EIEZMQVNIIHN1cHBvcnQgZm9yIEFNQ0MgQmFtYm9vIDQ0MEVQIGV2YWwgYm9hcmQKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQotCi0qIEFkZCBjb25maWd1cmF0aW9uIGZvciBJRk0gQUVWIEZJRk8gYm9hcmQuCi0gIE1pbm9yIGNvZGluZyBzdHlsZSBjbGVhbnVwLgotCi0qIEFkZCBjb25maWd1cmF0aW9uIGZvciBJRk0gU1BJIGV2YWwgYm9hcmQKLQotKiBGaXggQ29tcGFjdEZsYXNoIHByb2JsZW0gb24gSE1JMTAwMSBib2FyZAotCi0qIE1ha2UgbmV3ICJtdGRwYXJ0cyIgY29kZSBidWlsZCB3aXRoIG9sZGVyIGNvbXBpbGVycwotICBQYXRjaCBieSBBbmRyZWEgU2NpYW4sIDA5IEF1ZyAyMDA1Ci0KLSogQ2hhbmdlZCBDT05GSUdfNDQwX0dYLCBDT05GSUdfNDQwX0VQIGFuZCBDT05GSUdfNDQwX0dSIG9wdGlvbnMgdG8KLSAgQ09ORklHXzQ0R1gsIENPTkZJR180NDBFUCBhbmQgQ09ORklHXzQ0MEdSIGZvciBhIGNvbnNpc3RlbnQgZGVzaWduCi0gIHdpdGggdGhlIDQwNSBkZWZpbmVzIGFuZCB0aGUgbGludXgga2VybmVsIGRlZmluZXMuCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDggQXVnIDIwMDUKLQotKiBGaXggY29tcGlsZXIgd2FybmluZ3Mgd2l0aCBvbGRlciBHQ0MgdmVyc2lvbnMKLQotKiBBZGQgY29tbW9uICh3aXRoIExpbnV4KSBNVEQgcGFydGl0aW9uIHNjaGVtZSBhbmQgIm10ZHBhcnRzIiBjb21tYW5kCi0KLSAgT2xkLCBvYnNvbGV0ZSBhbmQgZHVwbGljYXRlZCBjb2RlIHdhcyBjbGVhbmVkIHVwIGFuZCByZXBsYWNlIGJ5IHRoZQotICBuZXcgcGFydGl0aW9uaW5nIG1ldGhvZC4gVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBhcHByb2FjaGVzIG5vdzoKLQotICBUaGUgZmlyc3Qgb25lIGlzIHRvIGRlZmluZSBhIHNpbmdsZSwgc3RhdGljIHBhcnRpdGlvbjoKLQotICAjdW5kZWYgQ09ORklHX0pGRlMyX0NNRExJTkUKLSAgI2RlZmluZSBDT05GSUdfSkZGUzJfREVWCQkgIm5vcjAiCi0gICNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfU0laRQkgMHhGRkZGRkZGRgkvKiB1c2Ugd2hvbGUgZGV2aWNlICovCi0gICNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfU0laRQkgMHgwMDEwMDAwMAkvKiB1c2UgMU1CICovCi0gICNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfT0ZGU0VUCSAweDAwMDAwMDAwCi0KLSAgVGhlIHNlY29uZCBtZXRob2QgdXNlcyB0aGUgbXRkcGFydHMgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmQgZHluYW1pYwotICBwYXJ0aXRpb25pbmc6Ci0KLSAgLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KLSAgI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQotICAjZGVmaW5lIE1URElEU19ERUZBVUxUCSAibm9yMT16dW1hLTEsbm9yMj16dW1hLTIiCi0gICNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkgIm10ZHBhcnRzPXp1bWEtMTotKGpmZnMyKSx6dW1hLTI6LSh1c2VyKSIKLQotICBDb21tYW5kIGxpbmUgb2YgY291cnNlIHByb2R1Y2VzIGJpZ2dlciBpbWFnZXMsIGFuZCBtYXkgYmUgaW5hcHByb3ByaWF0ZQotICBmb3Igc29tZSB0YXJnZXRzLCBzbyBieSBkZWZhdWx0IGl0J3Mgb2ZmLgotCi0qIEZpeCBidWlsZCBwcm9ibGVtcyBmb3IgUE04NTYgQm9hcmQKLQotKiBGaXggc2lnbiBleHRlbnNpb24gYnVnIGluICdmcGdhIGxvYWRiJyBjb21tYW5kOwotICBtYWtlICdmcGdhIGxvYWRiJyBhbHdheXMgcHJpbnQgdGhlIGZpbGUgaGVhZGVyIGluZm8KLSAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDExIEphbiAyMDA1Ci0KLSogRml4IGVycm9ycyB0aGF0IG9jY3VyIHdoZW4gYWNjZXNzaW5nIFN5c3RlbUFDRSBDRgotICBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMDkgSmFuIDIwMDUKLQotKiBEb2N1bWVudCBzd2l0Y2hpbmcgYmV0d2VlbiBVLUJvb3QgYW5kIFBsYW5ldENvcmUgb24gUlBYbGl0ZQotICBieSBTYW0gU29uZywgMjQgRGVjIDIwMDQKLQotKiBGaXggUG93ZXJRVUlDQyBJSSBtYXNrIGRldGVjdGlvbi4KLSAgUGF0Y2ggYnkgRXVnZW5lIFN1cm92ZWdpbiwgMjAgRGVjIDIwMDQKLQotKiBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5JT1MgREsxQzIwIGJvYXJkCi0gIFBhdGNoIGJ5IFNobG9tbyBLdXQsIDEzIERlYyAyMDA0Ci0KLSogQWRkIHN1cHBvcnQgZm9yIGVwODI0OCBib2FyZAotICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMiBEZWMgMjAwNAotCi0gIE1pbm9yIGNvZGUgY2xlYW51cC4KLQotKiBGaXggYmF1ZHJhdGUgc2V0dGluZyBmb3IgS0dEQiBvbiBNUEM4MjYwCi0gIFBhdGNoIGJ5IEhvSmluLCAxMSBEZWMgMjAwNAotCi0qIEZpeCAnbWlpIGhlbHAnIHRleHQgZm9ybWF0dGluZwotICBQYXRjaCBieSBDb3J5IFR1c2FyLCAxMCBEZWMgMjAwNAotCi0qIEZpeCByZXR1cm4gY29kZSBvZiBORlMgY29tbWFuZAotICBQYXRjaCBieSBIaXJvc2hpIEl0bywgMTEgRGVjIDIwMDQKLQotKiBGaXggdHlwbwotCi0qIEZpeCBjb21waWxlciB3YXJuaW5ncyBpbiBjcHUvcHBjNHh4L3VzYmRldi5jCi0gIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDA0IEF1ZyAyMDA1Ci0KLSogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgQmFtYm9vIFBQQzQ0MEVQIGV2YWwgYm9hcmQKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNCBBdWcgMjAwNQotCi0qIFBhdGNoIGJ5IEpvbiBMb2VsaWdlcgotICBGaXggc3R5bGUgaXNzdWVzIHByaW1hcmlseSBpbiA4NXh4IGFuZCA4M3h4IGJvYXJkcy4KLSAgICAtIEMrKyBjb21tZW50cwotICAgIC0gVHJhaWxpbmcgd2hpdGUgc3BhY2UKLSAgICAtIEluZGVudGF0aW9uIG5vdCBieSBUQUIKLSAgICAtIEV4Y2Vzc2l2ZSBhbW91bnQgb2YgZW1wdHkgbGluZXMKLSAgICAtIFRyYWlsaW5nIGVtcHR5IGxpbmVzCi0KLSogUGF0Y2ggYnkgUm9uIEFsZGVyLCAxMSBKdWwgMjAwNQotICAgIEFkZCBYaWFuZ2h1YSBYaWFvIGFuZCBMdW5zaGVuZyBXYW5nJ3Mgc3VwcG9ydCBmb3IgdGhlCi0gICAgR0RBIE1QQzg1NDAgRVZBTCBib2FyZC4KLQotKiBQYXRjaCBieSBFcmFuIExpYmVydHkKLSAgQWRkIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgTVBDODM0OUFEUyBib2FyZC4KLQotKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDI1IEp1bCAyMDA1Ci0gIE1vdmUgdGhlIFRTRUMgZHJpdmVyIG91dCBvZiBjcHUvbXBjODV4eCBhcyBpdCB3aWxsIGJlIHNoYXJlZAotICBieSB0aGUgdXBjb21pbmcgbXBjODN4eCBmYW1pbHkgYXMgd2VsbC4KLQotKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDA1IE1heSAyMDA1Ci0gIEltcGxlbWVudGVkIHN1cHBvcnQgZm9yIE1QQzg1NDhDRFMgYm9hcmQuCi0gIEFkZGVkIEREUiBJSSBzdXBwb3J0IGJhc2VkIG9uIFNQRCB2YWx1ZXMgZm9yIE1QQzg1eHggYm9hcmRzLgotICBUaGlzIHJvbGwtdXAgcGF0Y2ggYWxzbyBpbmNsdWRlcyBidWdmaWVzIGZvciB0aGUgcHJldmlvdXNseQotICBwdWJsaXNoZWQgcGF0Y2hlczoKLSAgICBERFJJSSBDUE8sIHByZSBlVFNFQywgODU0OCBMQklVLCBBbmR5J3MgVFNFQywgZVRTRUMgMyY0IEkvTwotCi0qIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTAgRmViIDIwMDUKLSAgQWRkIGNvbmZpZyBvcHRpb24gQ09ORklHX0hBU19GRUMgY2FsbGluZyBvdXQgODU0MCBGRUMgZmVhdHVyZXMuCi0KLSogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCBLdW1hciBHYWxhLCAwOCBGZWIgMjAwNQotICBGb3IgTVBDODV4eENEUzoKLSAgICBBZGRzIFJlbGF4ZWQgVGltaW5nIFRSTFggYml0IHRvIEZMQVNIIE9SeCByZWdzIHRvIGFsbG93Ci0gICAgZm9yIGZhc3RlciBmbGFzaCBwYXJ0cy4KLSAgICBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgQlIvT1IgZm9yIEZMQVNILgotCi0qIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciAwOCBGZWIgMjAwNQotICBEZXRlcm1pbmUgTDIgQ2FjaGUgc2l6ZSBkeW5hbWljYWxseSBvbiA4NVhYIGJvYXJkcy4KLQotKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIEt1bWFyIEdhbGEgMDggRmViIDIwMDUKLSAgLSBDb252ZXJ0IHRoZSBDUE0yIGJhc2VkIGZ1bmN0aW9uYWxpdHkgdG8gdXNlIG5ldyBDT05GSUdfQ1BNMgotICAgIG9wdGlvbiByYXRoZXIgdGhhbiBhIG15cmlhZCBvZiBDT05GSUdfTVBDODU2MC1saWtlIHZhcmlhbnRzLgotICAgIEFwcGxpZXMgdG8gTVBDODV4eCBhbmQgTVBDODI2MCBib2FyZHMsIGluY2x1ZGVzIHN0eGdwMyBhbmQgc2JjODU2MC4KLSAgICBFbGltaW5hdGVzIHRoZSBDT05GSUdfTVBDODU2MCBvcHRpb24gZW50aXJlbHkuICBEaXN0cmlidXRlcyB0aGUKLSAgICBuZXcgQ09ORklHX0NQTTIgb3B0aW9uIHRvIGVhY2ggODI2MCBib2FyZC4KLQotKiBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE04NTYgYm9hcmQKLSAgUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwMyBBdWcgMjAwNQotCi0qIE1pbm9yIGZpeGVzIHRvIFBNODU0IGJvYXJkCi0gIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDMgQXVnIDIwMDUKLQotKiBBZGp1c3QgY29uZmlndXJhdGlvbiBvZiBYRU5JQVggYm9hcmQKLSAgKGNoaXAgc2VsZWN0IGFuZCBHUElPIHJlcXVpcmVkIGZvciBVU0Igb3BlcmF0aW9uKQotCi0qIEZpeCB0eXBvcyBpbiBjcHUvODV4eC9zdGFydC5TIHdoaWNoIGNhdXNlZCBEYXRhVExCIGV4Y2VwdGlvbiB0byBiZQotICByb3V0ZWQgdG8gdGhlIFdhdGNoZG9nIGhhbmRsZXIKLSAgUGF0Y2ggYnkgRXVnZW5lIFN1cm92ZWdpbiwgMTggSnVuIDIwMDUKLQotKiAocmUpZW5hYmxlZCBzY3NpIGNvbW1hbmRzIGRvX3Njc2koKSBhbmQgZG9fc2NzaWJvb3QoKQotICBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDYgRGVjIDIwMDQKLQotKiBGaXggZW5kaWFuZXNzIHByb2JsZW0gaW4gVEZUUCAvIE5GUyBkZWZhdWx0IGZpbGVuYW1lcwotICBQYXRjaCBieSBIaXJvc2hpIEl0bywgMDYgRGVjIDIwMDQKLQotKiBJZ25vcmUgYnJvYWRjYXN0IHN0YXR1cyBiaXQgaW4gcmVjZWl2ZWQgZnJhbWVzIGluIDgyNjAgRkNDIGV0aGVybmV0Ci0gIGxvb3BiYWNrIHRlc3QgY29kZQotICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOCBKdWwgMjAwNQotCi0qIEZpeCB0eXBvIGluIG1rY29uZmlnIHNjcmlwdCAodXNlZCA9PSBpbnN0ZWFkIG9mID0pCi0gIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE4IEp1bCAyMDA1Ci0KLSogQ2xlYW51cCBidWlsZCBwcm9ibGVtcyBvbiA2NCBiaXQgYnVpbGQgaG9zdHMKLQotKiBVcGRhdGUgTUFJTlRBSU5FUlMgZmlsZQotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgQXVnIDIwMDU6Ci0gIC0gTWFqb3IgY2xlYW51cCBmb3IgQU1DQyBldmFsIGJvYXJkcyBXYWxudXQsIEJ1YmluZ2EsIEVib255LCBPY290ZWEKLSAgICAoZm9ybWVyIElCTSBldmFsIGJvYXJkKS4gUGxlYXNlIHNlZSAiZG9jL1JFQURNRS5BTUNDLWV2YWwtYm9hcmRzLWNsZWFudXAiCi0gICAgZm9yIGRldGFpbHMuCi0gIC0gU3ljYW1vcmUgKFBQQzQwNUdQcikgZXZhbCBib2FyZCBhZGRlZCAoV2FsbnV0IHBvcnQgaXMgZXh0ZW5kZWQKLSAgICB0byBydW4gb24gYm90aCA0MDVHUCBhbmQgNDA1R1ByIGV2YWwgYm9hcmRzKS4KLQotKiBQYXRjaCBieSBTdGV2ZW4gQmxha2VzbGVlLCAyNyBKdWwgMjAwNToKLSAgLSBBZGQgc3VwcG9ydCBmb3IgQU1DQyBQUEM0NDBFUC9HUi4KLSAgLSBBZGQgc3VwcG9ydCBmb3IgQU1DQyBZb3NlbWl0ZSBQUEM0NDBFUCBldmFsIGJvYXJkLgotICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFllbGxvd3N0b25lIFBQQzQ0MEdSIGV2YWwgYm9hcmQuCi0KLSogTWlub3IgZml4ZXMgZm9yIFBQQ2hhbWVsZW9uIEJvYXJkOgotICAtIGZpeCBhbGlnbm1lbnQgb2YgTkFORCBzaXplCi0gIC0gbWFrZSBjb2RlIGRvIHdoYXQgdGhlIGNvbW1lbnQgc2F5cwotCi0qIEltcGxlbWVudCBoL3cgc2VjdG9yIHByb3RlY3Rpb24gc3RhdHVzIHN5bmNocm9uaXphdGlvbiBhdCBib290LgotICBUaGUgY29kZSBpcyBwcm92aWRlZCBmb3IsIGFuZCB3YXMgdGVzdGVkIG9uLCB0aGUgWXVrb24vQWxhc2thCi0gIGFuZCBQTTUyMCBib2FyZHMgb25seS4KLQotICBBIGJ1ZyBpbiBmbGFzaF9yZWFsX3Byb3RlY3QoKSBmb3IgdGhlIFl1a29uIGJvYXJkIHdhcyBmaXhlZCBieQotICBhZGRpbmcgYSBmdW5jdGlvbiB0aGF0IHRlbGxzIGlmIHR3byBiYW5rcyBhcmUgb24gb25lIGZsYXNoIGNoaXAuCi0KLSogRml4IHN5c21vbiBQT1NUIHByb2JsZW06IGNoZWNrIEkyQyBlcnJvciBjb2RlcwotICBUaGlzIGZpeGVzIGEgcHJvYmxlbSBvZiBkaXNwbGF5aW5nIGJvZ3VzIHZvbHRhZ2VzIHdoZW4gdGhlIHZvbHRhZ2VzCi0gIGFyZSBzbyBsb3cgdGhhdCB0aGUgSTJDIGRldmljZXMgc3RhcnQgZmFpbGluZyB3aGlsZSB0aGUgcmVzdCBvZiB0aGUKLSAgc3lzdGVtIGtlZXBzIHJ1bm5pbmcuCi0KLSogUGF0Y2ggYnkgQ2VkcmljIFZpbmNlbnQsIDYgSnVsIDIwMDU6Ci0gIEZpeCBDRkdfQ01EX1NFVEdFVERDUiBoYW5kbGluZyBpbiAiY29tbW9uL2NtZF9kY3IuYyIKLQotKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDIwIEp1bCAyMDA1OgotICBBZGQgbWlzc2luZyBQQ0kgSU8gcG9ydCBkZWZpbml0aW9ucy4KLQotKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQuCi0KLSogQWRqdXN0IHByaW50ZWQgYm9hcmQgSUQgZm9yIExXTU9OIGJvYXJkLgotCi0qIEZpeCBsb3ctbGV2ZWwgT0hDSSB0cmFuc2ZlcnMgZm9yIEFSTTkyMHQgYW5kIE1QQzV4eHgKLQotKiBBZGQgbmV3IGFyZ3VtZW50IGZvcm1hdCBmb3IgZmxhc2ggY29tbWFuZHMgdG8gYWxsb3cgZm9yIHVzYWdlIGxpa2UKLSAgImVyYXNlICQoYWRkcikgKyQoZmlsZXNpemUpIiwgaS4gZS4gYSBzaXplIGFyZ3VtZW50IGNhbiBiZSB1c2VkIGFuZAotICBVLUJvb3Qgd2lsbCBhdXRvbWF0aWNpYWxseSBmaW5kIHRoZSBlbmQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2VjdG9yLgotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNSBKdWwgMjAwNToKLSAgVXBkYXRlIHVjMTAwIGJvYXJkIFBIWSBzZXR1cAotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMSBKdWwgMjAwNToKLSAgRml4IFBIWSBhZGRyZXNzIGZvciBDQVRjZW50ZXIgYm9hcmQgKG5vdyBjb3JyZWN0ISkKLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDMwIEp1biAyMDA1OgotICBGaXggUEhZIGFkZHJlc3NlcyBmb3IgUFBDaGFtZWxlb24gYW5kIENBVGNlbnRlciBib2FyZHMKLSAgQ2hhbmdlIE1BSU5UQUlORVIgZm9yIG1vc3QgZXNkIGJvYXJkcwotCi0qIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDMwIEp1biAyMDA1OgotICBGaXggTENEIGxvZ28gZm9yIGx3bW9uIGJvYXJkIHdoaWNoIGdvdCBsb3N0IGluIHRoZSBtZXJnZSBvZiA4eHggYW5kIFBYQSBMQ0QgY29kZQotCi0qIEZpeCBiYXVkcmF0ZSBjYWxjdWxhdGlvbiBwcm9ibGVtIG9uIE1QQzUyMDAgc3lzdGVtcwotCi0qIEFkZCBFRVBST00gYW5kIFJUQyBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkCi0KLSogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjAgSnVuIDIwMDU6Ci0gIEZpeCBpbml0aWFsaXphdGlvbiBvZiBsb3cgYWN0aXZlIEdQSU8gcGlucyBvbiBpbmthNHgwIGJvYXJkCi0KLSogRW5hYmxlIHJlZHVuZGFudCBlbnZpcm9ubWVudCwgZGlzYWJsZSBIVyBmbGFzaCBwcm90ZWN0aW9uIG9mCi0gIEhNSTEwMDEgYm9hcmQKLQotKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxMCBKdW4gMjAwNToKLSAgSW5pdGlhbGl6ZSBhbGxvY2F0ZWQgZGV2IGFuZCBwcml2YXRlIGh3IHN0cnVjdHVyZXMKLSAgYWZ0ZXIgdGhlaXIgcmVzcGVjdGl2ZSBhbGxvY2F0aW9uIGluIDQ0MGd4X2VuZXQuYwotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEwIEp1biAyMDA1OgotICBGaXggYnl0ZW9yZGVyIHByb2JsZW1zIHdpdGggc2Vjb25kIGFyZ3VtZW50IG9mICJib290bSIgd2l0aAotICBzdGFuZGFsb25lIGltYWdlczsKLQotKiBBZGQgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZAotCi0qIERpc2FibGUgImRhdGUiIGFuZCAic250cCIgY29tbWFuZHMgb24gVFFNODY2TQotCi0qIEZpeCB3YXRjaGRvZyByZXNldCBwcm9ibGVtcyBvbiBMV01PTiBib2FyZAotCi0qIFBhdGNoIGJ5IEp1ZXJnZW4gU2VsZW50LCAxNyBNYXkgMjAwNToKLSAgQWRkIHN1cHBvcnQgZm9yIEZ1bmt3ZXJrIFZvVlBOIGdhdGV3YXkgbW9kdWxlLgotCi0qIENsZWFudXAgZGVidWcgY29kZSBmb3IgTVBDODIyMCBGRUMgZHJpdmVyCi0KLSogRXh0ZW5kIGJ1cnN0IG1vZGUgUkFNIHRlc3QgcHJvZ3JhbSB0byB0YWtlIGEgbG9vcCBjb3VudAotICAoMCA9IGluZmluaXRlKQotCi0qIFVzZSBDT05GSUdfRFJJVkVSX0tTODY5NUVUSCB0byBlbmFibGUgS1M4Njk1IGV0aGVybmV0IGRyaXZlciBvbgotICB0aG9zZSBib2FyZHMgdGhhdCB1c2UgaXQuCi0KLSogUGF0Y2hlcyBieSBHcmVnIFVuZ2VyZXIsIDE5IE1heSAyMDA1OgotICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgS1M4Njk1UCAoQVJNIDkyMiBiYXNlZCkgQ1BVCi0gIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBPcGVuR2VhciBDTTQwMDgsIENNNDExNiBhbmQgQ000MTQ4IGJvYXJkcwotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDE5IE1heSAyMDA1OgotICBBZGQgc3VwcG9ydCBmb3IgQ09ORklHX1NFUklBTF9UQUcgb24gQVJNIGJvYXJkcwotCi0qIEFkZCBQQ0kgc3VwcG9ydCBmb3IgU29yY2VyeSBib2FyZC4KLSAgQ29kZSBjbGVhbnVwIChlc3BlY2lhbGx5IFNvcmNlcnkgLyBBbGFza2EgLyBZdWtvbiBzZXJpYWwgZHJpdmVyKS4KLQotKiBGaXggY29tcGlsZSBwcm9ibGVtcyBjYXVzZWQgYnkgbmV3IGJ1cnN0IG1vZGUgU0RSQU0gdGVzdDsKLSAgbWFrZSBwb3J0IHBpbnMgdG8gdHJpZ2dlciBsb2dpYyBhbmFseXplciBjb25maWd1cmFibGUKLQotKiBGaXggdGltZXIgaGFuZGxpbmcgb24gTVBDODV4eCBzeXN0ZW1zCi0KLSogRml4IGRlYnVnIGNvZGUgaW4gb21hcDU5MTJvc2sgZmxhc2ggZHJpdmVyCi0KLSogQWRkIHN1cHBvcnQgZm9yIE1QQzgyNDcgYmFzZWQgIklEUzgyNDciIGJvYXJkLgotCi0qIEFkZCBzdXBwb3J0IGZvciAyIHggVFNFQyBpbnRlcmZhY2VzIG9uIHRoZSBUUU04NTQwIGJvYXJkLgotCi0qIE9uIExXTU9OIHdlIG11c3QgdXNlIHRoZSB3YXRjaGRvZyB0byByZXNldCB0aGUgYm9hcmQgYXMgdGhlIENQVQotICBnZW5lcmVhdGVkIEhSRVNFVCBwdWxzZSBpcyB0b28gc2hvcnQgdG8gcmVzZXQgdGhlIGV4dGVybmFsCi0gIGNpcmN1aXRyeS4KLQotKiBBZGQgdGVzdCB0b29sIHRvIGV4ZXJjaXNlIFNEUkFNIGFjY2Vzc2VzIGluIGJ1cnN0IG1vZGUKLSAgKGFzIHN0YW5kYWxvbmUgcHJvZ3JhbSwgTVBDOHh4L1Bvd2VyUEMgb25seSkKLQotKiBJbmNyZWFzZSBDRkdfTU9OSVRPUl9MRU4gZm9yIFJhdHRsZXIgYm9hcmQgdG8gbWF0Y2ggYWN0dWFsIGNvZGUKLSAgc2l6ZS4KLQotKiBNYWpvciB1cGF0ZSBvZiBKRkZTMiBjb2RlOyBub3cgaW4gc3luYyB3aXRoIHNuYXBzaG90IG9mIE1URCBDVlMgb2YKLSAgTWFyY2ggMTMsIDIwMDUpOyBuZXcgY29uZmlndXJhdGlvbiBvcHRpb24gQ09ORklHX0pGRlMyX0xaT19MWkFSSQotICBhZGRlZCB0byBzdXBwb3J0IExaTyBhbmQgTFpBUkkgY29tcHJlc3Npb24gbW9kZXMgKHVuZGVmaW5lZCBieQotICBkZWZhdWx0KS4KLQotKiBGaXggcHJvYmxlbSB3aXRoIHN5bWJvbGljIGxpbmtzIGluIEpGRlMyIGNvZGUuCi0KLSogVXNlIGxpbmtlciBBU1NFUlQgc3RhdGVtZW50IHRvIHByZXZlbnQgdW5kZXRlY3RlZCBvdmVybGFwcGluZyBvZgotICBzZWN0aW9ucyBvbiBQUENoYW1lbGVvbiBib2FyZDsgb3RoZXIgYm9hcmRzIG1pZ2h0IHVzZSB0aGlzLCB0b28uCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMyBNYXkgMjAwNToKLSAgVXBkYXRlIGZvciBQM0c0Ci0gIEZpeCBwcm9ibGVtcyBpbiBjbWRfdW5pdmVyc2UuYwotCi0qIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAwMyBNYXkgMjAwNToKLSAgQWRkZWQgbWlzc2luZyB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpbiBjbWRfbmFuZC5jCi0gIE1vZGlmaWVkIENGR19QQ0lfUFRNMU1TIGluIGNvbmZpZ3MvUExVNDA1LmggdG8gbWFwIDEyOE1CIHJhbQotCi0qIEZpeCBJTktBNHgwOiB1c2UgQ1MxIGFzIGdwaW9fd2t1cF82IG91dHB1dAotCi0qIEZpeCBidWcgaW4gdGhlIFNEUkFNIGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGNhbm1iLCBJY2VDdWJlIGFuZAotICBQTTUyMCBib2FyZHMuCi0gIEZpeCBQSFkgYWRkcmVzcyBmb3IgY2FubWIgYm9hcmQuCi0KLSogQ2xlYW51cCBzZXJpYWwgY29uc29sZSBiYXVkcmF0ZSBjYWxjdWxhdGlvbiBvbiBBVDkxUk05MjAwOwotICBnZXQgcmlkIG9mIG9ic29sZXRlIENGR19BVDkxQ19CUkdSX0RJVklTT1IgZGVmaW5pdGlvbgotCi0qIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAxOCBBcHIgMjAwNToKLSAgTWFrZSBQQ0kgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VzIG9uIFBNQzQwNSBhbmQgQ1BDSTQwNSBib2FyZHMKLSAgY29uZmlndXJhYmxlIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLQotKiBBdXRvLXNpemUgUkFNIG9uIGNhbm1iIGJvYXJkLgotCi0qIEFkZCBzdXBwb3J0IGZvciBjYW5tYiBib2FyZAotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgQXByIDIwMDU6Ci0gIFVwZGF0ZSBmb3IgZXNkIGFwYzQwNQotCi0qIEZpeGVzIGZvciBUUU04NTYwIGJvYXJkOgotICAtIGZpeCBjbG9jayByYXRlcwotICAtIHJlbW92ZSBkZWJ1ZyBtZXNzYWdlcwotICAtIGZpeCBmbGFzaCBzZWN0b3IgcHJvdGVjdGlvbgotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA3IEFwciAyMDA1OgotICBBZGQgaTJjX3JlZ193cml0ZSgpIGFuZCBpMmNfcmVnX3dyaXRlKCkgZm9yIGF0OTFybTkyMDAgSTJDCi0KLSogUGF0Y2hlcyBieSBTdGV2ZW4gU2Nob2x6LCAwNyBBcHIgMjAwNToKLSAgRml4IGNvbXBpbGVyIHdhcm5pbmcgaW4gYWx0ZXJhLmMKLSAgRml4IHdhcm5pbmcgaW4gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9pMmMuYwotCi0qIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwNiBBcHIgMjAwNToKLSAgRml4IHZvaWNlYmx1ZSBjb25maWd1cmF0aW9uLgotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDYgQXByIDIwMDU6Ci0gIFVwZGF0ZXMgZm9yIE9DT1RFQSBib2FyZDoKLSAgLSBDaGFuZ2VkIFUtQm9vdCBzaXplIGZyb20gNTEya0J5dGUgdG8gMjU2a0J5dGUKLSAgLSBGaXhlZCBmbGFzaCBkcml2ZXIgdG8gc3VwcG9ydCBib290IGZyb20gc29sZGVyZWQgdXNlciBmbGFzaAotICAtIEFkZGVkIFJFQURNRSBmb3Igc3dpdGNoIGZyb20gUElCUyBmaXJtd2FyZSB0byBVLUJvb3QKLQotKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwNSBBcHIgMjAwNToKLSAgLSBDaGFuZ2UgdGltZXIgZnJlcXVlbmN5IGZvciBwcGMgNDQwIGZyb20gMTAgbXMgdG8gMSBtcy4KLSAgICBQcm9ibGVtIGZvdW5kIGJ5IEFuZHJldyBXb3puaWFrLgotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA2IEFwciAyMDA1OgotICAtIGNyZWF0aW5nIFNvQyBzdWJkaXIgZm9yIEF0bWVsIEFUOTFSTTkyMDAgY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAotICAtIG1vdmluZyBjb2RlIG91dCBvZiBjcHUvYXQ5MXJtOTIwMCBpbnRvIGNwdS9hcm05MjB0L2F0OTFybTkyMDAKLQotKiBQYXRjaGVzIGJ5IFJvYmVydCBXaGFsZXksIDI5IE5vdiAyMDA0OgotICAtIHVwZGF0ZSB0aGUgcHhhLXJlZ3MuaCBmaWxlIGZvciBQWEEyN3ggY2hpcHMKLSAgLSBhZGQgUFhBMjd4IGJhc2VkIEFEU1ZJWCBib2FyZAotICAtIGFkZCBzdXBwb3J0IGZvciBNTUMgb24gUFhBMjd4IHByb2Nlc3NvcnMKLQotKiBQYXRjaCBieSBBbmRyZXcgRS4gTWlsZXNraSwgMjggTm92IDIwMDQ6Ci0gIEZpeCBQUEM0eHggU1BEIFNEUkFNIGRldGVjdGlvbiBidWcKLQotKiBQYXRjaCBieSBIaXJvc2hpIEl0bywgMjYgTm92IDIwMDQ6Ci0gIEZpeCBsb2dpYyBvZiAidGVzdCAteiIgYW5kICJ0ZXN0IC1uIiBjb21tYW5kcwotCi0qIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwNSBBcHIgMjAwNToKLSAgQWRkIHN1cHBvcnQgZm9yIFZvaWNlQmx1ZSBib2FyZC4KLQotKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMDUgQXByIDIwMDU6Ci0gIEZpeCBuZXRib290X2NvbW1vbigpIHByb3RvdHlwZXMuCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDUgQXByIDIwMDU6Ci0gIFVzZSBpLk1YIHdhdGNoZG9nIHRpbWVyIGZvciByZXNldF9jcHUoKQotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA1IEFwciAyMDA1OgotICBNb3ZlIHJlc2V0X2NwdSgpIG91dCBvZiBjcHUvYXJtOTIwdC9zdGFydC5TIGludG8gdGhlIFNvQyBzcGVjaWZpYwotICBzdWJkaXJlY3RvcmllcyBjcHUvYXJtOTIwdC9pbXgvIGFuZCBjcHUvYXJtOTIwdC9zM2MyNHgwLwotICAobm93IGluIGludGVydXB0cy5jKQotCi0qIEFkZCBzdXBwb3J0IGZvciBNUEM4MjIwIGJhc2VkICJzb3JjZXJ5IiBib2FyZC4KLQotKiBBZGQgc3VwcG9ydCBmb3IgVFFNODU2MCBib2FyZC4KLQotKiBBZGQgRkVDIHN1cHBvcnQgZm9yIFRRTTg1NDAgYm9hcmQuCi0gIEludGVyZmFjZXMgYXJlIG5hbWVkIGFzIGZvbGxvd3M6ICJFTkVUMSIgLSBUU0VDMiwgIkVORVQyIiAtIEZFQwotCi0qIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA0IEFwciAyMDA1OgotICBVcGRhdGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBDTUNfUFUyIGJvYXJkLgotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEFwciAyMDA1OgotICAtIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBDT05GSUdfSU5JVF9DUklUSUNBTCBmb3IgQVJNIGJhc2VkIGJvYXJkcwotICAtIGludHJvZHVjZSB0d28gbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnN0ZWFkOgotICAgIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQgYW5kIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgQXByIDIwMDU6Ci0gIE1ha2Ugc3VyZSB0aGF0IE1ESU8gY2xvY2sgZG9lcyBub3QgZXhjZWVkIDIuNSBNSHogb24gQVQ5MQotCi0qIEZpeCB0aW1lciBjb2RlIGZvciBBUk0gc3lzdGVtczogbWFrZSBzdXJlIHRoYXQgdWRlbGF5KCkgZG9lcyBub3QKLSAgcmVzZXQgdGltZXJzIHNvIGl0J3Mgc2F2ZSB0byB1c2UgdWRlbGF5KCkgaW4gdGltZW91dCBjb2RlLgotCi0qIFBhdGNoIGJ5IE1hdGhpYXMgS/xzdGVyLCAyMyBOb3YgMjAwNDoKLSAgYWRkIHVkZWxheSBzdXBwb3J0IGZvciB0aGUgbWNmNTI4MiBjcHUKLQotKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNiBOb3ZlbWJlciAyMDA0OgotICBmaXggaW5jb3JyZWN0IG9uYm9hcmQgWGlsaW54IENQTEQgYmFzZSBhZGRyZXNzCi0KLSogUGF0Y2ggYnkgSmVycnkgVmFuIEJhcmVuLCAwOCBOb3YgMjAwNDoKLSAgLSBBZGQgbG93LWJvb3Qgb3B0aW9uIGZvciBNUEM4MjYwQURTIGJvYXJkIChpZiBsb3dib290IGlzIHNlbGVjdGVkLAotICAgIHRoZSBqdW1wZXIgZm9yIHRoZSBIUkNXIHNvdXJjZSBzaG91bGQgc2VsZWN0IGZsYXNoLiBJZiBsb3dib290IGlzCi0gICAgbm90IHNlbGVjdGVkLCB0aGUganVtcGVyIGZvciB0aGUgSFJDVyBzb3VyY2Ugc2hvdWxkIHNlbGVjdCB0aGUKLSAgICBCQ1NSLgotICAtIGNoYW5nZSBkZWZhdWx0IGxvYWQgYmFzZSBhZGRyZXNzIHRvIDB4MDA0MDAwMDAKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwOCBOb3YgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIEFuYWxvZ3VlICYgTWljcm8gUmF0dGxlciBib2FyZHMuCi0gIFRlc3RlZCBvbiBSYXR0bGVyODI0OC4KLQotKiBQYXRjaCBieSBBbmRyZSBSZW5hdWQsIDA4IE5vdiAyMDA0OgotICBGaXggd2F0Y2hkb2cgc3VwcG9ydCBpbiBjb21tb24vbGNkLmMKLQotKiBQYXRjaCBieSBNYXJjIExlZW1hbiwgMDUgTm92IDIwMDM6Ci0gIEVuYWJsZSBhbGwgNCBQQ01CUlcgYnVmZmVycyBmb3IgdGhlIE1QQzgyNDUgcHJvY2Vzc29yIHNpbmNlIHRoZSBDUFUKLSAgYnVnIG9ubHkgYWZmZWN0cyB0aGUgWFBDODI0NSBwcm9jZXNzb3JzCi0KLSogUGF0Y2hlcyBieSBKb3NlZiBXYWduZXIsIDI5IE9jdCAyMDA0OgotICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBDUFU4NyBib2FyZAotICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTg1NCBib2FyZAotCi0qIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDAyIE5vdiAyMDA0OgotICBBZGQgMTYtYml0IE5BTkQgc3VwcG9ydAotCi0qIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDEgTm92IDIwMDQ6Ci0gIEFkZCBtaXNzaW5nIE5JT1MvTklPUzIgc3VwcG9ydCBmb3IgImltaW5mbyIgY29tbWFuZAotCi0qIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDI5IE9jdCAyMDA0OgotICBBZGQgbWlzc2luZyBOSU9TL05JT1MyIHN1cHBvcnQgZm9yICJta2ltYWdlIiB0b29sLgotCi0qIFBhdGNoIGJ5IERhdmlkIEFkYWlyLCAyNyBPY3QgMjAwNDoKLSAgQWRkIG1pc3NpbmcgNDQwR1ggU0RSQU0gQ29udHJvbGxlciByZXNldAotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI1IE9jdCAyMDA0OgotICBEZWNsYXJlIHJlc2V0X2NwdSgpIGluIGluY2x1ZGUvY29tbW9uLmggaW5zdGVhZCBsb2NhbGx5Ci0KLSogUGF0Y2ggYnkgWXVzZGkgU2FudG9zbywgMjIgT2N0IDIwMDQ6Ci0gIC0gQWRkIHN1cHBvcnQgZm9yIEhJRERFTl9EUkFHT04gYm9hcmQKLSAgLSBmaXggZW5kaWFuZXNzIHByb2JsZW0gaW4gZHJpdmVyL3J0bDE4MzkuYwotCi0qIFBhdGNoIGJ5IEFsbGVuIEN1cnRpcywgMjEgT2N0IDIwMDQ6Ci0gIHN1cHBvcnQgbXVsdGlwbGUgc2VyaWFsIHBvcnRzCi0KLSogUGF0Y2ggYnkgUmljaGFyZCBLbGluZ2xlciwgMDMgQXByIDIwMDU6Ci0gIEFkZCBjYWxsIHRvIGV0aF9oYWx0KCkgaW4gbmV0L25ldC5jIHdoZW4gY2FsbGVkIGZ1bmN0aW9ucyBmYWlsCi0gIGFmdGVyIGV0aF9pbml0KCkgaGFzIGJlZW4gY2FsbGVkLgotCi0qIFBhdGNoIGJ5IFNhbSBTb25nLCAzIEFwcmlsIDIwMDU6Ci0gIC0gVXBkYXRlIFJFQURNRS5OZXRjb25zb2xlCi0gIC0gVXBkYXRlIFJFQURNRQotCi0qIFByZXBhcmUgZm9yIFNvQyByZXdvcmsgb2YgQVJNIGNvZGU6Ci0gIC0gcmVuYW1lIENPTkZJR19CT09UQklORlVOQyBpbnRvICBDT05GSUdfSU5JVF9DUklUSUNBTAotICAtIHJlbmFtZSBtZW1zZXR1cCBpbnRvIGxvd2xldmVsX2luaXQgKGZ1bmN0aW9uIG5hbWUgYW5kIHNvdXJjZSBmaWxlcykKLSAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDMgQXByIDIwMDU6Ci0gIC0gY3JlYXRlIFNvQyBzcGVjaWZpYyBkaXJlY3RvcmllcyBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXggYW5kCi0gICAgaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjR4MAotCi0qIEZpeCBwcm9ibGVtcyB3aXRoIFNOVFAgc3VwcG9ydDsKLSAgZW5hYmxlIFNOVFAgc3VwcG9ydCBpbiBzb21lIGJvYXJkcy4KLQotKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDAxIEFwciAyMDA1OgotICAtIEZpeCBmbGFzaCBlcmFzZSB0aW1lb3V0IG9uIENNQ19QVTIKLSAgLSBBZGQgYXV0b21hdGljIEhXIGRldGVjdGlvbiBmb3IgQ01DX1BVMiBhbmQgQ01DX0JBU0lDCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTMgTWFyY2ggMjAwNToKLSAgZml4IGNhY2hlIGVuYWJsaW5nIGZvciBBVDkxUk05MjAwCi0KLSogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMzAgTWFyIDIwMDU6Ci0gIGFkZCBTTlRQIHN1cHBvcnQgYW5kIGV4cGFuZCB0aW1lIHNlcnZlciBhbmQgdGltZSBvZmZzZXQgZmllbGRzIG9mCi0gIERIQ1Agc3VwcG9ydC4gU2VlIGRvYy9SRUFETUUuU05UUAotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEzIERlYyAyMDA0OgotICBGaXggYnVnIGluIGF0OTFybTkyMCBldGhlcm5ldCBkcml2ZXIKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBEZWMgMjAwNDoKLSAgUmVtb3ZlIGR1cGxpY2F0ZWQgY29kZSBieSBtZXJnaW5nIG1lbXNldHVwLlMgZmlsZXMgZm9yCi0gIGF0OTFybTkyMDAgYm9hcmRzIGludG8gb25lIGNwdS9hdDkxcm05MjAwL2xvd2xldmVsLlMKLQotKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAzMSBNYXIgMjAwNToKLSAgQ2xlYW51cCBkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZiBvdmVyd3JpdGVfY29uc29sZSgpCi0KLSogVXBkYXRlIFRRTTUyMDAgY29uZmlndXJhdGlvbjsKLSAgcHJlcGFyZSBmb3IgUmV2LiAyMDAgc3RhcnRlciBraXQgYm9hcmRzCi0KLSogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMSBPY3QgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIE5pb3MtSUkgRVBDUyBDb250cm9sbGVyIGNvcmUuCi0KLSogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMCBPY3QgMjAwNDoKLSAgTmlvcy1JSSBjbGVhbnVwczoKLSAgLSBBZGQgc3lzaWQgY29tbWFuZCAoTmlvcy1JSSBvbmx5KS4KLSAgLSBMb2NhdGUgZGVmYXVsdCBleGNlcHRpb24gdHJhbXBvbGluZSBhdCBwcm9wZXIgb2Zmc2V0LgotICAtIEltcGxlbWVudCBJL08gcm91dGluZXMgKHJlYWRiLCB3cml0ZWIsIGV0YykKLSAgLSBJbXBsZW1lbnQgZG9fYm9vdG1fbGludXgKLQotKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDIyIE1hciAyMDA1OgotICAtIHVzZSBUUU01MjAwX2F1dG8gYXMgTUFLRUFMTCB0YXJnZXQgZm9yIFRRTTUyMDAgc3lzdGVtcwotICAtIGFkZCBzdXBwb3J0IGZvciBTTTUwMSBncmFwaGljcyBjb250cm9sbGVyCi0gIC0gYWRkIHN1cHBvcnQgZm9yIGdyYXBoaWMgY29uc29sZSBvbiBUUU01MjAwCi0gIC0gYWRkIHN1cHBvcnQgZm9yIFRRTTUyMDAgUmV2IDIwMAotICAtIGNsZWFudXAsIGZpeCB0eXBvIGluIGluY2x1ZGUvY29uZmlncy9UUU01MjAwLmgKLQotKiBQYXRjaCBieSBNYW5mcmVkIEJhcmFsLCAxNyBNYXIgMjAwNToKLSAgRml4IHR5cG8KLQotKiBGaXggUlRDIGNvbmZpZ3VyYXRpb24gZm9yIFBQQ2hhbWVsZW9uIGJvYXJkCi0KLSogQ2xlYW51cCwgZml4IHR5cG8gaW4gaW5jbHVkZS9jb25maWdzL1RRTTUyMDAuaAotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgTWFyIDIwMDU6Ci0gIFVwZGF0ZSBmb3IgZXNkIGF1dG9fdXBkYXRlIGFuZCBoaDQwNSBib2FyZAotCi0qIEFkYXB0IGZvciBVLUJvb3QgaW1hZ2Ugc2l6ZSAobmV3IGZlYXR1cmVzIGVuYWJsZWQpIG9uIFRRTTUyMDAKLQotKiBVcGRhdGUgY29kZSBmb3IgVFFNODU0MCBib2FyZCAoYW5kIDg1eHggaW4gZ2VuZXJhbCk6Ci0gIC0gQ2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBFdGhlcm5ldCBkcml2ZXI6IE1PVE8gRU5FVCAtPiBFTkVUCi0gIC0gUmVmb3JtYXQgYm9vdCBtZXNzYWdlcwotICAtIEVuYWJsZSByZWR1bmRhbnQgZW52aXJvbm1lbnQKLSAgLSBSZXBsYWNlIHRoZSAtTzIgb3B0aW1pemF0aW9uIGZsYWcgd2l0aCAtbW5vLXN0cmluZwotCi0qIFBhdGNoIGJ5IERhdmlkIEJyb3duZWxsLCAxMCBNYXIgMjAwNToKLSAgUmVzdG9yZSBjb3B5cmlnaHQgc3RhdGVtZW50cyBpbiBPSENJIGRyaXZlcnMuCi0KLSogQWRkIHN1cHBvcnQgZm9yIFRRTTg1NDAgYm9hcmQKLQotKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxNCBNYXIgMjAwNToKLSAgTkM2NTA6IGNoYW5nZWQgTkFORCBmbGFzaCBhZGRyZXNzaW5nIHRvIHVzaW5nIFVQTUIKLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE0IE1hciAyMDA1OgotICBVcGRhdGUgZm9yIGVzZCB2b2g0MDUgZnBnYSBpbWFnZQotCi0qIElOS0E0eDA6IEFsbG93IGluaXRpYWxpemF0aW9uIG9mIExDRCBiYWNrbGlnaHQgZGltbWluZyBmcm9tCi0gICJicmlnaHRuZXNzIiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQotKiBBZGQgcG9ydCBpbml0aWFsaXphdGlvbiBmb3IgZGlnaXRhbCBJL08gb24gSU5LQTR4MAotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgTWFyIDIwMDU6Ci0gIFVwZGF0ZSBmb3IgZXNkIGJvYXJkcyBkcDQwNSBhbmQgaHViNDA1Ci0KLSogRml4IGdldF9wYXJ0aXRpb25faW5mbygpIHBhcmFtZXRlciBlcnJvciBpbiBhbGwgb3RoZXIgY2FsbHMKLSAgKGNvbW1vbi9jbWRfaWRlLmMsIGNvbW1vbi9jbWRfcmVpc2VyLmMsIGNvbW1vbi9jbWRfc2NzaS5jKS4KLQotKiBFbmFibGUgVVNCIGFuZCBJREUgc3VwcG9ydCBmb3IgSU5LQTR4MCBib2FyZAotCi0qIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAyOCBGZWIgMjAwNToKLSAgZml4IGV4dDJsb2FkIHBhc3NpbmcgYW4gaW5jb3JyZWN0IHBvaW50ZXIgdG8gZ2V0X3BhcnRpdGlvbl9pbmZvKCkKLSAgcmVzdWx0aW5nIGluIGxvYWQgZmFpbHVyZSBmb3IgZGV2aWNlcyBvdGhlciB0aGFuIDAKLQotKiBBZGQgc3VwcG9ydCBmb3IgU1JBTSBhbmQgMiB4IFF1YWQgVUFSVHMgb24gSU5LQTR4MCBib2FyZAotCi0qIENsZWFudXAgVVNCIGFuZCBwYXJ0aXRpb24gZGVmaW5lcwotCi0qIEFkZCBzdXBwb3J0IGZvciBleHQyIGZpbGVzeXN0ZW1zIGFuZCBpbWFnZSB0aW1lc3RhbXBzIHRvIFRRTTUyMDAgYm9hcmQKLQotKiBBZGQgcmVzZXQgY29kZSBmb3IgQ29yYWwtUCBvbiBJTktBNHgwIGJvYXJkCi0KLSogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjggSnVuIDIwMDQ6Ci0gIFVwZGF0ZSBmb3IgVFJBQiBib2FyZC4KLQotKiBGaXggc29tZSBtaXNzaW5nICJ2b2xhdGlsZSJzIGluIE1QQzV4eHggRkVDIGRyaXZlcgotCi0qIEZpeCBjaXJydXMgdm9sdGFnZSBkZXRlY3Rpb24gKGZvciBDUEM0NSkKLQotKiBGaXggYnl0ZW9yZGVyIHByb2JsZW0gaW4gdXNiYm9vdCBhbmQgc2NzaWJvb3QgY29tbWFuZHMuCi0KLSogUGF0Y2ggYnkgQ2FqdXMgSGFobiwgMDQgRmViIDIwMDU6Ci0gIC0gZG9uJ3QgaW5zaXN0IG9uIGxlYWRpbmcgJy8nIGZvciBmaWxlbmFtZSBpbiBleHQybG9hZAotICAtIHNldCBkZWZhdWx0IHBhcnRpdGlvbiB0byB1c2VmdWwgdmFsdWUgKDEpIGluIGV4dDJsb2FkCi0KLSogUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDA4IEphbiAyMDA1OgotICBmaXggd3JvbmcgcmV0dXJuIGNvZGVzIGluIGV4dDIgY29kZQotCi0qIFJlbW92ZWQgJy0tbm8td2Fybi1taXNtYXRjaCcgb3B0aW9uIGZyb20gTWFrZWZpbGUuIFRoaXMgb3B0aW9uCi0gIG1ha2VzICdsZCcgdG8gb3Zlcmxvb2sgYmluYXJ5IG9iamVjdHMgY29tcGF0aWJpbGl0eS4KLQotKiBNb3ZlZCAkKFBMQVRGT1JNX0xJQlMpIGZyb20gdGhlIGxpYnJhcnkgZ3JvdXAgKC0tc3RhcnQtZ3JvdXAgLi4uCi0gIC0tZW5kLWdyb3VwKSBvdXRzaWRlIG9mIHRoZSBncm91cC4gVGhpcyB3aWxsIG1ha2UgJ2xkJyB0byBkbwotICBfbXVsdGlwbGVfIHNlYXJjaCBpbiB0aGUgbGlicmFyeSBncm91cCB3aGVuIHJlc29sdmluZyBzeW1ib2wKLSAgcmVmZXJlbmNlcyBhbmQgZG8gb25seSBhIF9zaW5nbGVfIHNlYWNoIGluIGxpYmdjYy5hIGFmdGVyIHRoZSBncm91cAotICBzZWFyY2guCi0KLSogRml4IHN0YWJpbGl0eSBwcm9ibGVtcyBvbiBDUEM0NSBib2FyZCBhZ2Fpbi4KLQotKiBNYWtlIGltYWdlIGRldGVjdGlvbiBmb3IgZGlza2Jvb3QgLyB1c2Jib290IC8gc2NzaWJvb3QgbW9yZSByb2J1c3QKLSAgKGFsc28gY2hlY2sgaGVhZGVyIGNoZWNrc3VtKQotCi0qIFVwZGF0ZSBDUEM0NSBib2FyZCBjb25maWd1cmF0aW9uLgotCi0qIEFkZCBVU0IgYW5kIFBDSSBzdXBwb3J0IGZvciBJTktBNHgwIGJvYXJkCi0KLSogRml4IElERSBzdGFiaWxpdHkgcHJvYmxlbXMgb24gQ1BDNDUgYm9hcmQgKG5lZWRzIDIgeCBFSUVJTykuCi0KLSogQ29kZSBjbGVhbnVwCi0KLSogUGF0Y2ggYnkgUm9iaW4gR2V0eiwgMTMgT2N0IDIwMDQ6Ci0gIEFkZCBzdGFuZGFsb25lIGFwcGxpY2F0aW9uIHRvIGNoYW5nZSBTTUM5MUMxMTEgTUFDIGFkZHJlc3NlcywKLSAgc2VlIGV4YW1wbGVzL1JFQURNRS5zbWM5MTExMV9lZXByb20KLQotKiBQYXRjaCBieSBYaWFvZ2VuZyAoU2hhd24pIEppbiwgMTIgT2N0IDIwMDQ6Ci0gIEZpeCBGbGFzaCBzdXBwb3J0IGZvciBBUk0gSW50ZWdyYXRvciBDUC4KLQotKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxMCBKYW4gMjAwNToKLSAgVXBkYXRlIHN1cHBvcnQgZm9yIE9NQVAyNDIwIChBUk0xMSkgYW5kIEg0IGJvYXJkOgotICBvIGNsZWFuIHVwIGFuZCBhZGQgbmV3IHR5cGVzIHRvIEg0IG1lbW9yeSBwcm9iZSBjb2RlLgotICBvIGZpeCB0byB3b3JrIHdpdGggaW50ZXJuYWwgYm9vdC4KLSAgbyBhZGRlZCBQUkNNIGNvbmZpZyBJSUkgb3BlcmF0aW9uLgotICBvIGZpeCBtYXJnaW5hbCBmbGFzaCB0aW1pbmdzLgotICBvIGFkZCByZXZpc29uIEFUQUcgdXNhZ2UuCi0gIG8gZW5hYmxlIHZvbHRhZ2Ugc2NhbGluZyBhdCBwb3dlciBjaGlwLgotICBvIGZpeCBjb21waWxlIGVycm9yIGZvciBpMmMuCi0KLSogRml4IG5ldHdvcmsgcHJvYmxlbSAoZXJyb3Igd2hlbiByZWNlaXZpbmcgbXVsdGlwbGUgQVJQIHBhY2tldHMpCi0KLSogUGF0Y2ggYnkgRGFuaWVsIFBvaXJvdCwgMTIgT2N0IDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBXaW5kIFJpdmVyIHNiYzQwNSBib2FyZAotCi0qIFBhdGNoIGJ5IFJhaW5lciBCcmVzdGFuLCAxMiBPY3QgMjAwNDoKLSAgTWFrZSBleGFtcGxlcy9NYWtlZmlsZSBtb3JlIHJvYnVzdAotCi0qIFBhdGNoIGJ5IFNhbSBTb25nLCAxMSBPY3RvYmVyIDIwMDQ6Ci0gIC0gQWRkIFJFU0VUL1BSRUJPT1QvQVVUT0JPT1Qgc3VwcG9ydCBmb3IgUlBYbGl0ZV9EVyBib2FyZAotICAtIEFkanVzdCBDUFU6QlVTIGZyZXF1ZW5jeSByYXRpbyAxOjEgd2hlbiBjb3JlIGZyZXF1ZW5jeQotICAgIGxlc3MgdGhhbiA1ME1IegotCi0qIFBhdGNoIGJ5IFNhbSBTb25nLCAxMCBPY3QgMjAwNDoKLSAgRml4IGEgcGFyYW1ldGVyIGVycm9yIGluIHJ1bl9jb21tYW5kKCkgaW4gbWFpbi5jCi0KLSogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMDEgT2N0IDIwMDQ6Ci0gIGFkZCBzdXBwb3J0IGZvciB0aGUgVEkgT01BUDI0MjAgcHJvY2Vzc29yIGFuZCBpdHMgSDQgcmVmZXJlbmNlCi0gIGJvYXJkCi0KLSogUGF0Y2ggYnkgQ2hyaXN0aWFuIFBlbGxlZ3JpbiwgMjQgU2VwIDIwMDQ6Ci0gIEFkZGVkIHN1cHBvcnQgZm9yIE5FMjAwMCBjb21wYXRpYmxlIChEUDgzOTAsIERQODM5MDIpIE5JQ3MuCi0KLSogUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjMgU2VwIDIwMDQ6Ci0gIGFkZCBzdXBwb3J0IGZvciB0aGUgQU1EIGRiMTU1MCBib2FyZAotCi0qIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDE1IFNlcCAyMDA0OgotICBBZGQgQ09ORklHX1NFUklBTF9NVUxUSSBzdXBwb3J0IGZvciBwcGM0eHgsCi0gIHVwZGF0ZSBSRUFETUUuc2VyaWFsX211bHRpCi0KLSogUGF0Y2hlcyBieSBEYXZpZCBTbm93ZG9uLCAwNyBTZXAgMjAwNDoKLSAgLSBhZGQgdS1ib290LmhleCB0YXJnZXQgaW4gdGhlIHRvcCBsZXZlbCBNYWtlZmlsZQotICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgVU5TVy9OSUNUQSBQTEVCIDIgYm9hcmQgKHBsZWIyKQotICAtIHVzZSAtbXR1bmU9eHNjYWxlIGFuZCAtbWFyY2g9YXJtdjUgb3B0aW9ucyBmb3IgUFhBCi0KLSogUGF0Y2ggYnkgRmxvcmlhbiBTY2hsb3RlLCAwOCBTZXAgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIFNlblRlYy1DT0JSQTUyNzItYm9hcmQgKENvbGRGaXJlKS4KLQotKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDA3IFNlcCAyMDA0OgotICBtcGM4MjR4OiBzZXQgUENJIGxhdGVuY3kgdGltZXIgdG8gYSBzYW5lIHZhbHVlCi0gIChpcyAwIGFmdGVyIHJlc2V0KS4KLQotKiBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMDMgU2VwIDIwMDQ6Ci0gIEFkZCBiaXRzdHJlYW0gY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGZwZ2EgY29tbWFuZCAoWGlsaW54IG9ubHkpLgotCi0qIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAwMyBTZXAgMjAwNDoKLSAgQWRkIFhpbGlueCBTcGFydGFuMkUgZmFtaWx5IEZQR0Egc3VwcG9ydAotCi0qIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAwMiBTZXAgMjAwNDoKLSAgQWRkIEFkZGVkIHN1cHBvcnQgZm9yIEgyIHJldmlzaW9uIG9mIHRoZSBFUDgyNjAgYm9hcmQuCi0gIEZpeGVkIGZvcm1hdHRpbmcgZm9yIHNvbWUgb2YgdGhlIEVQODI2MCByZWxhdGVkIHNvdXJjZSBmaWxlcy4KLQotKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDAyIFNlcCAyMDA0OgotICBSZXNldCBtb25pdG9yIHNpemUgYmFjayB0byAyNTYgc28gZW52aXJvbm1lbnQgY2FuIGJlIHdyaXR0ZW4KLSAgdG8gZmxhc2ggb24gTVBDODV4eCBBRFMgYW5kIENEUyByZWxlYXNlcy4KLQotKiBQYXRjaCBieSBQYW9sbyBCcm9nZ2luaSwgMDIgU2VwIDIwMDQ6Ci0gIE1ha2UgQlNTIGNsZWFyaW5nIG9uIEFSTSBzeXN0ZW1zIG1vcmUgcm9idXN0Ci0KLSogUGF0Y2ggYnkgWXVlIEh1IGFuZCBKb2UsIDAxIFNlcCAyMDA0OgotICAtIGFkZCBQQ0kgc3VwcG9ydCBmb3IgaXhwNDI1OwotICAtIGFkZCBFRVBSTzEwMCBzdXBwb3IgdGZvciBpeGRwNDI1IGJvYXJkLgotCi0qIEZpeCBwcm9ibGVtIHdpdGggcHJvdGVjdGVkIHNlY3RvciBkZXRlY3Rpb24gaW4gZHJpdmVyL2NmaV9mbGFzaC5jCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMjoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBDb2RlIGNsZWFudXAsIG1vc3RseSBmb3IgR0NDLTMuMy54Ci0KLSogQ2xlYW51cCBjb25mdXNpbmcgdXNlIG9mIENPTkZJR19FVEgqQUREUiAtIHVzdCBoaXMgb25seSB0bwotICBwcmUtZGVmaW5lIGEgTUFDIGFkZHJlc3M7IHVzZSBDT05GSUdfSEFTX0VUSCogdG8gZW5hYmxlIHN1cHBvcnQgZm9yCi0gIGFkZGl0aW9uYWwgZXRoZXJuZXQgYWRkcmVzc2VzLgotCi0qIENsZWFudXAgZHJpdmVycy9pODIzNjUuYyAtIGF2b2lkIGR1cGxpY2F0aW9uIG9mIGNvZGUKLQotKiBGaXggYm9ndXMgImNhbm5vdCBzcGFuIGFjcm9zcyBiYW5rcyIgZmxhc2ggZXJyb3IgbWVzc2FnZQotCi0qIENvZGUgY2xlYW51cAotCi0qIEFkZCBzdXBwb3J0IGZvciBDb21wYWN0Rmxhc2ggZm9yIHRoZSBDUEM0NSBCb2FyZC4KLQotKiBGaXggcHJvYmxlbXMgd2l0aCBDTUNfUFUyIGZsYXNoIGRyaXZlci4KLQotKiBDbGVhbnVwOgotICAtIGF2b2lkIHRyaWdyYXBoIHdhcm5pbmcgaW4gZnMvZXh0Mi9leHQyZnMuYwotICAtIHJlbmFtZSBVQzEwMCAtPiB1YzEwMAotCi0qIEFkZCBzdXBwb3J0IGZvciBVQzEwMCBib2FyZAotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgRGV6IDIwMDQ6Ci0gIC0gZXh0MmZzIHN1cHBvcnQgYWRkZWQKLSAgLSBUdW5kcmEgdW5pdmVyc2Ugc3VwcG9ydCBhZGRlZAotICAtIENvbGRGaXJlIE1DRjUyNDkgc3VwcG9ydCBhZGRlZCAobm8gcHJlbG9hZGVyIG5lZWRlZCEpCi0gIC0gTUNGNTI0OSBib2FyZCBUQVNSRUcgYWRkZWQKLSAgLSBQUEMgYm9hcmRzIGFkZGVkOiBBUEM0MDUsIENQQ0k0MDVEVCwgQ1BDSTc1MCwgRzIwMDAsIEhINDA1LAotICAgIFZPTTQwNSwgV1VINDA1Ci0gIC0gc29tZSBlc2QgYm9hcmRzIHVwZGF0ZWQKLSAgLSBtZW1vcnkgY29tbWFuZHMgIm1kYyIgYW5kICJtd2MiIGFkZGVkIGZvciBjeWNsaWMgcmVhZC93cml0ZQotICAgIChDT05GSUdfTVhfQ1lDTElDLCBzZWUgUkVBRE1FIGZvciBmdXJ0aGVyIGRlc2NyaXB0aW9uKQotCi0qIEFkZCBzdXBwb3J0IGZvciBJTktBNFgwIGJvYXJkCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTIgRGVjIDIwMDQ6Ci0gIEZpeCB0eXBvIGluIEFUOTEgbWVtb3J5IHNldHVwLgotCi0qIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE9jdCAyMDA0OgotICAtIGFkZCBzdXBwb3J0IGZvciAiU1RLNTJ4eCIgYm9hcmQgKGluY2x1ZGluZyBQUy8yIG11bHRpcGxleGVyKQotICAtIGFkZCBoYXJkd2FyZSBkZXRlY3Rpb24gZm9yIFRRTTUyMDAKLQotKiBDbGVhbiB1cCBDTUMgUFUyIGZsYXNoIGRyaXZlcgotCi0qIFVwZGF0ZSBNQUlOVEFJTkVSUyBmaWxlCi0KLSogRml4IGJ1ZyBpbiBNUEM4MjMgTENEIGRyaXZlcgotCi0qIEZpeCB1ZGVsYXkoKSBvbiBBVDkxUk05MjAwIGZvciBkZWxheXMgPCAxIG1zLgotCi0qIEVuYWJsZSBsb25nIGhlbHAgb24gQ01DIFBVMiBib2FyZDsKLSAgZml4IHJlc2V0IGlzc3VlOwotICBpbmNyZWFzZSBDUFUgc3BlZWQgZnJvbSAxNzkgdG8gMjA3IE1Iei4KLQotKiBGaXggc21jOTExMTEgZXRoZXJuZXQgZHJpdmVyIGZvciBYYWVuaWF4IGJvYXJkIChuZWVkIHRvIGhhbmRsZQotICB1bmFsaWduZWQgdGFpbCBwYXJ0IHNwZWNpYWxseSkuCi0KLSogVXBkYXRlIGZvciBBVDkxUk05MjAwREsgYW5kIENNQ19QVTIgYm9hcmRzOgotICAtIEVuYWJsZSBib290aW5nIGRpcmVjdGx5IGZyb20gZmxhc2gKLSAgLSBmaXggQ01DX1BVMiBmbGFzaCBkcml2ZXIKLQotKiBGaXggbWtpbWFnZSB1c2FnZSBtZXNzYWdlCi0KLSogTWFwIFNSQU0gb24gTkM2NTAgYm9hcmQKLQotKiBXb3JrIGFyb3VuZCBmb3IgRXRoZXJuZXQgcHJvYmxlbXMgb24gWGFlbmlheCBib2FyZAotCi0qIFBhdGNoIGJ5IFRzaUNodW5nIExpZXcsIDIzIFNlcCAyMDA0OgotICAtIGFkZCBzdXBwb3J0IGZvciBNUEM4MjIwIENQVQotICAtIEFkZCBzdXBwb3J0IGZvciBBbGFza2EgYW5kIFl1a29uIGJvYXJkcwotCi0qIEZpeCBjb25maWd1cmF0aW9uIGZvciBFUklDIGJvYXJkIChuZWVkcyBtb3JlIHJvb20pCi0KLSogQWRqdXN0IE1JUFMgY29tcGlsZXIgb3B0aW9ucyBhdCBydW4tdGltZSBkZXBlbmRpbmcgb24gdG9vbHMgdmVyc2lvbgotICAoIi1tYXJjaD00a2MgLW10dW5lPTRrYyAtV2EsLW1pcHNfYWxsb3dfYnJhbmNoX3RvX3VuZGVmaW5lZCIgZm9yIG5ldywKLSAgIi1tY3B1PTRrYyIgZm9yIG9sZCB0b29scykKLQotKiBBZGQgcGFzc2luZyBvZiB0aGUgY29tbWFuZCBsaW5lIGFuZCBtZW1vcnkgc2l6ZSBpbmZvcm1hdGlvbiB0byAgdGhlCi0gIGtlcm5lbCBvbiB4YWVuaWF4IGJvYXJkLgotCi0qIEVuYWJsZSBOQU5EIGZsYXNoIHN1cHBvcnQgZm9yIE5DNjUwIGJvYXJkLgotCi0qIFBhdGNoIGJ5IFRob21hcyBMYW5nZSAwNyBPY3QgMjAwNDoKLSAgVXBkYXRlZCBSRUFETUUgZm9yIERCQXUxeDAwIGJvYXJkcyB0byBtYXRjaCBjdXJyZW50IHN0YXR1cwotCi0qIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAyOCBTZXB0IDIwMDQ6Ci0gIEZpeCBGbGFzaCBzdXBwb3J0IGZvciBWZXJzYXRpbGUuCi0KLSogUGF0Y2ggYnkgUm9nZXIgQmxvZmVsZCwgMTYgU2VwIDIwMDQ6Ci0gIEZpeCB0aW1lb3V0IGZvciBESENQIGNvbW1hbmQgcmV0cnkKLQotKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTQgU2VwIDIwMDQ6Ci0gIEZpeCBlYXJseSBzZXJpYWwgaGFuZyB3aGVuIENPTkZJR19TRVJJQUxfTVVMVEkgaXMgZGVmaW5lZC4KLQotKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTQgU2VwIDIwMDQ6Ci0gIEtpY2sgd2F0Y2hkb2cgd2hlbiBiei1kZWNvbXByZXNzaW5nCi0KLSogRml4IENGR19IWiBwcm9ibGVtcyBvbiBBVDkxUk05MjAwIHN5c3RlbXMKLSAgW1JlbWVtYmVyOiBDRkdfSFogc2hvdWxkIGJlIDEwMDAgb24gQUxMIHN5c3RlbXMhXQotCi0qIFBhdGNoIGJ5IEdyaWRpc2ggU2hsb21pLCAzMCBBdWcgMjAwNDoKLSAgLSBBZGQgc3VwcG9ydCB0byByZXZBIHZlcnNpb24gb2YgUFEyNyBhbmQgUFEyN0UuCi0gIC0gUmV2ZXJ0ZWQgTVBDODI2MEFEUyBiYXVkcmF0ZSBiYWNrIHRvIG9yaWdpbmFsIDExNTIwMAotCi0qIFBhdGNoIGJ5IEhvamluLCAxNyBTZXAgMjAwNDoKLSAgRml4IHR5cG8gaW4gY2ZpX2ZsYXNoLmMKLQotKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwOSBTZXB0ZW1iZXIgMjAwNDoKLSAgbXRlc3QncyBkYXRhIGxpbmUgdGVzdCAod2l0aCBDRkdfQUxUX01FTVRFU1Qgc2V0KSByZXR1cm5lZCBhIHdyb25nCi0gIGVycm9yIG1lc3NhZ2UKLQotKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAzMSBBdWd1c3QgMjAwNDoKLSAgQWRkZWQgb3B0aW9uIENGR19YTEJfUElQRUxJTklORyB0byBlbmFibGUgWExCIHBpcGVsaW5pbmcuIFRoaXMKLSAgaW1wcm92ZXMgRlRQIHBlcmZvcm1hbmNlIGZvciBNUEM1MjAwIHN5c3RlbXMuIEVuYWJsZWQgZm9yIEljZUN1YmUKLSAgYnkgZGVmYXVsdC4KLQotKiBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAzMCBBdWcgMjAwNDoKLSAgLSBJbXByb3ZlIHBsYXRmb3JtLlMgY29kZSBmb3Igb21hcDE1MTBpbm4gdGhhdCBkZXRlY3RzIHdoZXRoZXIgY29kZQotICAgIGlzIHJ1bm5pbmcgZnJvbSBTRFJBTSBvciBub3QuIFBhdGNoIGFsbG93cyBTRFJBTSB0byBiZSBjb25maWd1cmVkCi0gICAgaWYgY29kZSBpcyBydW5uaW5nIG91dCBvZiBTUkFNIGF0IDB4MjAwMDAwMDAuCi0KLSogUGF0Y2ggYnkgRnJlZGVyaWNrIEtsYXR0LCAzMCBBdWcgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIHRoZSBXaW5kIFJpdmVyIFNCQzg1NDAvU0JDODU2MCBib2FyZHMKLQotKiBDb25maWd1cmUgU1gxIGJvYXJkIHRvIHVzZSBkcml2ZXJzL2NmaV9mbGFzaC5jCi0KLSogUGF0Y2hlcyBieSBNaWNoYWVsIEJlbmR6aWNrLCAzMCBBdWcgMjAwNDoKLSAgLSBDb25maWd1cmUgb21hcDE1MTBpbm4gYm9hcmQgdG8gdXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKLSAgLSBNYWtlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgcHJvdGVjdCBlbnZpcm9ubWVudCBhbmQgcmVkdW5kYW50Ci0gICAgZW52aXJvbm1lbnQuCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjMgSnVuIDIwMDQ6Ci0gIC0gQWRkIHNjcmlwdCAodG9vbHMvaW1nMmJyZWMuc2gpIHRvIHByb2dyYW1tIFUtQm9vdCBpbnRvCi0gICAgKFN5bmNoKUZsYXNoIHVzaW5nIHRoZSBCb290c3RyYXAgTW9kZSBvZiB0aGUgTUM5MzI4TVgxL0wKLQotKiBQYXRjaGVzIGJ5IFNjb3R0IE1jTnV0dCwgMjQgQXVnIDIwMDQ6Ci0gIC0gQWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBOaW9zLUlJIHByb2Nlc3NvcnMuCi0gIC0gQWRkIHN1cHBvcnQgZm9yIFBzeWVudCBQQ0ktNTQ0MSBib2FyZC4KLSAgLSBBZGQgc3VwcG9ydCBmb3IgUHN5ZW50IFBLMUMyMCBib2FyZC4KLQotKiBQYXRjaGVzIGJ5IEpvbiBMb2VsaWdlciwgMjQgQXVnIDIwMDQ6Ci0gIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBNUEM4NTQxIGFuZCBNUEM4NTU1IENEUyBib2FyZHMKLSAgLSBDbGVhbnVwIGV0aD9hZGRyIGhhbmRsaW5nOiBtYWtlIGRlcGVuZGVudCBvbiBDT05GSUdfRVRIP0FERFIKLSAgLSBDb252ZXJ0IE1QQzg1eHhBRFMgdG8gdXNlIGNvbW1vbiBDRkkgZmxhc2ggZHJpdmVyCi0gIC0gRml4IFBDSSB3aW5kb3cgb24gTVBDODV4eDsgcmVtb3ZlIHVubmVlZGVkIFBDSSBpbml0aWFsaXphdGlvbgotICAgIGZyb20gYm9hcmRfZWFybHlfaW5pdF9mKCkKLSAgLSBQcm92aWRlIFNXIHdvcmthcm91bmQgZm9yIFBDSSBpbml0aWFsaXphdGlvbiBvbiA4NXh4IENEUwotCi0qIFBhdGNoZXMgYnkgR2VvcmdlIEcuIERhdmlzLCAyNCBBdWcgMjAwNDoKLSAgLSBFbmFibGUgcmFtZGlzay9pbml0cmQgdGFnZ2VkIHBhcmFtIHN1cHBvcnQgZm9yIG9tYXAxNjEwaDJfY29uZmlnCi0gIC0gUmVtb3ZlIHN0YXRpYyBuZXR3b3JrIHNldHVwIGRlZmF1bHRzIGZyb20gbXgxYWRzX2NvbmZpZwotICAtIHVwZGF0ZSBBUk0gYm9hcmRzIHRvIHVzZSBjb25zdGFudHMgZnJvbSBtYWNoLXR5cGVzLmgKLQotKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMDQgT2N0IDIwMDQ6Ci0gIC0gZml4IEkyQyBvbiBhdDkxcm05MjAwCi0gIC0gYWRkIHN1cHBvcnQgZm9yIFJpY29oIFJTNUMzNzJBIFJUQwotCi0qIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwMSBPY3QgMjAwNDoKLSAgLSBhZGQgc3VwcG9ydCBmb3IgQ01DIFBVMiBib2FyZAotICAtIGFkZCBzdXBwb3J0IGZvciBJMkMgb24gYXQ5MXJtOTIwMAotCi0qIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAyOCBTZXAgMjAwNDoKLSAgZml4IGJhdWRyYXRlIGhhbmRsaW5nIG9uIGF0OTFybTkyMDAKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMiBBdWcgMjAwNDoKLSAgLSByZW1vdmUgWlBDLjE5MDAgYm9hcmQtc3BlY2lmaWMgZmxhc2ggZHJpdmVyOwotICAgIHN3aXRjaCB0aGUgcG9ydCB0byBnZW5lcmljIENGSSBkcml2ZXI7Ci0gIC0gcG9ydCBjbGVhbi11cAotCi0qIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDIxIEF1ZyAyMDA0OgotICBBZGQgY2FsY19mYnNpemUoKSBmdW5jdGlvbiB1c2VkIHdpdGggVklERU9MRkJfVEFHIG9uIFRSQUIKLQotKiBDbGVhbiB1cCB0b29scy9ibXBfbG9nby5jIHRvIG5vdCBhZGQgdHJhaWxpbmcgd2hpdGUgc3BhY2UKLQotKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAyMSBBdWcgMjAwNDoKLSAgLSBHcm91cCBjb21tb24gZnJhbWVidWZmZXIgZnVuY3Rpb25zIGluIGNvbW1vbi9sY2QuYwotICAtIEdyb3VwIGNvbW1vbiBmcmFtZWJ1ZmZlciBtYWNyb3MgYW5kICNkZWZpbmVzIGluIGluY2x1ZGUvbGNkLmgKLSAgLSBQcm92aWRlIGNhbGNfZmJzaXplKCkgZm9yIHZpZGVvIEFUQUcKLQotKiBQYXRjaCBieSBTYW0gU29uZywgMjEgQXVndXN0IDIwMDQ6Ci0gIC0gRml4IGEgdHlwbyBpbiBSRUFETUUKLSAgLSBBbGlnbiAiKFJPKSIgb3V0cHV0IGZvciAiZmxpbmZvIiBhZnRlciAicHJvdGVjdCBvbiIKLSAgLSBBZGQgUkVTRVQgc3VwcG9ydCBmb3IgUlBYbGl0ZV9EVyBib2FyZDsgYWRqdXN0IENQVTpCVVMgZnJlcXVlbmN5Ci0gICAgcmF0aW8gMToxIHdoZW4gY29yZSBmcmVxdWVuY3kgbGVzcyB0aGFuIDUwTUh6Ci0KLSogUGF0Y2hlcyBieSBIaW5rbyBLb2NldmFyLCAyMSBBdWcgMjAwNDoKLSAgLSBmaXggc29tZSAidXNlIG9mIGxhYmVsIGF0IGVuZCBvZiBjb21wb3VuZCBzdGF0ZW1lbnQiIHdhcm5pbmdzCi0gIC0gRGVmaW5lIHR5cGUgb2YgTENEIHBhbmVsIG9uIGx1YmJvY2sgYm9hcmQgaWYgQ09ORklHX0xDRCBpcyB1c2VkCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTYgQXVnIDIwMDQ6Ci0gIC0gSW50cm9kdWNpbmcgdGhlIGNvbmNlcHQgb2YgU29DcyAiLi9jcHUvJChDUFUpLyQoU09DKSIKLSAgLSBjcmVhdGluZyBzdWJkaXJzIGZvciBTb0NzIC4vY3B1L2FybTkyMHQvaW14IGFuZCAuL2NwdS9hcm05MjB0L3MzYzI0eDAKLSAgLSBtb3ZpbmcgU29DIHNwZWNpZmljIGNvZGUgb3V0IG9mIGNwdS9hcm05MjB0LyBpbnRvIGNwdS9hcm05MjB0LyQoU09DKS8KLSAgLSBtb3ZpbmcgZHJpdmVycy9zM2MyNHgwX2kyYy5jIGFuZCBkcml2ZXJzL3NlcmlhbF9pbXguYyBvdXQgb2YgZHJpdmVycy8KLSAgICBpbnRvIGNwdS9hcm05MjB0LyQoU09DKS8KLQotKiBQYXRjaGVzIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgotICAtIEFkZGVkIHN1cHBvcnQgZm9yIGJvdGggOCBhbmQgMTYgYml0IG1vZGUgYWNjZXNzIHRvIFN5c3RlbSBBQ0UgQ0YKLSAgICB0aHJvdWdoIE1QVS4KLSAgLSBGaXhlZCBtaXNzaW5nIFN5c3RlbSBBQ0UgQ0YgZGV2aWNlIGR1cmluZyBnZXQgRkFUIHBhcnRpdGlvbiBpbmZvCi0gICAgaW4gZmF0X3JlZ2lzdGVyX2RldmljZSBmdW5jdGlvbi4KLSAgLSBFbmFibGVkIFN5c3RlbSBBQ0UgQ0Ygc3VwcG9ydCBvbiBNTDMwMC4KLQotKiBQYXRjaCBieSBTZWFuIENoYW5nLCAwOSBBdWcgMjAwNDoKLSAgU3luY2ggZGVmaW5lcyBmb3Igc2F2ZWVudiBhbmQgZG9fc2F2ZWVudiBmdW5jdGlvbnMgc28gdGhleSBnZXQKLSAgY29tcGlsZWQgdW5kZXIgdGhlIHNhbWUgc3RhdGVtZW50LgotCi0qIFBhdGNoIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgotICAtIEFkZGVkIEkyQyBzdXBwb3J0IGZvciBNTDMwMC4KLSAgLSBBZGRlZCBzdXBwb3J0IGZvciBNTDMwMCB0byByZWFkIG91dCBpdHMgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24KLSAgICBzdG9yZWQgb24gdGhlIEVFUFJPTS4KLSAgLSBBZGRlZCBzdXBwb3J0IHRvIHVzZSBib2FyZCBzcGVjaWZpYyBwYXJhbWV0ZXJzIGFzIHBhcnQgb2YKLSAgICBVLUJvb3QncyBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KLSAgLSBVcGRhdGVkIE1MRCBmaWxlcyB0byBzdXBwb3J0IGNvbmZpZ3VyYXRpb24gZm9yIG5ldyBmZWF0dXJlcwotICAgIGFib3ZlLgotCi0qIFBhdGNoZXMgYnkgVHJhdmlzIFNhd3llciwgMDUgQXVnIDIwMDQ6Ci0gIC0gUmVtb3ZlIGluY29ycmVjdCBicmlkZ2Ugc2V0dGluZ3MgZm9yIGV0aCBncm91cCA2Ci0gIC0gQWRkIGNhbGwgdG8gc2V0dXAgYnJpZGdlIGluIHBwY180NDB4X2V0aF9pbml0aWFsaXplCi0gIC0gRml4IHBwY180NDB4X2V0aF9pbml0IHRvIHJlc2V0IHRoZSBwaHkgb25seSBpZiBpdHMgdGhlCi0gICAgZmlyc3QgdGltZSB0aHJvdWdoLCBvdGhlcndpc2UsIGp1c3QgY2hlY2sgdGhlIHBoeSBmb3IgdGhlCi0gICAgYXV0b25lZ290aWF0ZWQgc3BlZWQvZHVwbGV4LiAgVGhpcyBhbGxvd3MgdGhlIHVzZSBvZiBuZXRjb25zb2xlCi0gIC0gb25seSBwcmludCB0aGUgc3BlZWQvZHVwbGV4IHRoZSBmaXJzdCB0aW1lIHRoZSBwaHkgaXMgcmVzZXQuCi0KLSogUGF0Y2ggYnkgU2hsb21vIEt1dCwgMjkgTWFyIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBNS1MgSW5zdHJ1bWVudHMgIlF1YW50dW0iIGJvYXJkCi0KLSogRml4IGJ1aWxkIHByb2JsZW0gd2l0aCBDb2dlbnQgYm9hcmRzOwotICBhdm9pZCB1c2luZyA8YXNtL2J5dGVvcmRlci5oPiB3aGVuIHVzaW5nIHRoZSBob3N0IGNvbXBpbGVyCi0KLSogUGF0Y2ggYnkgR2FuYXBhdGhpIEMsIDA0IEF1ZyAyMDA0OgotICBGaXggTkZTIHRpbWVvdXQgaXNzdWUKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxOSBKdWwgMjAwNDoKLSAgLSBGaXggaG9zdCB0b29scyBidWlsZGluZyBpbiBDeWd3aW4gZW52aXJvbm1lbnQKLSAgLSBGaXggaGVhZGVyIGZpbGVzIHNlYXJjaCBvcmRlciBmb3IgaG9zdCB0b29scwotCi0qIFBhdGNoIGJ5IFRvbSBBcm1pc3RlYWQsIDE5IEp1bCAyMDA0OgotICBGaXgga2dkYi5TIHN1cHBvcnQgZm9yIDc0eHhfNzV4IGNwdQotCi0qIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTUgSnVsIDIwMDQ6Ci0gIEZpeCBNUEM4NXh4IEkyQyBkcml2ZXIKLQotKiBGaXggcHJvYmxlbXMgd2l0aCBDRFJPTSBkcml2ZSBhcyBzbGF2ZSBkZXZpY2Ugb24gTGl0ZTUyMDAgSURFIGJ1cy4KLQotKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxNSBKdWx5IDIwMDQKLSAgU2V0IHRoZSBQQ0kgY2xhc3MgY29kZSBmb3IgSlNFIGJvYXJkIGFzIHBhcnQgb2YgUENJIGludGVyZmFjZSBzZXR1cAotCi0qIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDE1IEp1bCAyMDA0OgotICBGaXggcHJvYmxlbSB3aXRoIHdyaXRlcyB3aXRoIG9kZCBzaXplcyBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jIHdoZW4KLSAgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUgaXMgc2V0Ci0KLSogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDQ6Ci0gIEFsbG93IGNsb2NrIHNldHRpbmcgb24gTVBDODY2L01QQzg4NSBzZXJpZXMgY2hpcHMgYWNjb3JkaW5nIHRvCi0gIGVudmlyb25tZW50IHZhcmlhYmxlIGBjcHVjbGsnCi0KLSogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjAgQXByIDIwMDQ6Ci0gIFJlbW92ZSB1bm5lY2Vzc2FyeSByZWRlZmluZSBvZiBDUE1fREFUQU9OTFlfU0laRSBmb3IgTVBDODI2eAotCi0qIFBhdGNoIGJ5IFZpbmNlbnQgRHViZXksIDI0IFNlcCAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgeGFlbmlheCBib2FyZAotCi0qIEFkZCBjb21tZW50IGFib3V0IG5vbi1HUEwgY2hhcmFjdGVyIG9mIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHRvCi0gIENPUFlJTkcgZmlsZQotCi0qIEZpeCBGRUMgZXRoZXJuZXQgcHJvYmxlbSBvbiBOU0NVIGJvYXJkLgotCi0qIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwOSBTZXAgMjAwNDoKLSAgYWxsb3cgdG8gdXNlIFVTQVJUMSBhcyBjb25zb2xlIHBvcnQgb24gYXQ5MXJtOTIwMGRrIGJvYXJkcwotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgU2VwIDIwMDQ6Ci0gIFVwZGF0ZSBBUjQwNSBib2FyZC4KLQotKiBGaXggU3lzQ2xrIGhhbmRsaW5nIGZvciBQUENoYW1lbGVvbiBhbmQgQ0FUY2VudGVyIGJvYXJkcwotCi0qIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDA4IFNlcCAyMDA0OgotICBVcGRhdGUgZXRhZ3MgYnVpbGQgdGFyZ2V0Ci0KLSogSW1wcm92ZSBOZXRDb25zb2xlIHN1cHBvcnQ6IGFkZCBzdXBwb3J0IGZvciBicm9hZGNhc3QgZGVzdGluYXRpb24KLSAgYWRkcmVzcyBhbmQgYnVmZmVyZWQgaW5wdXQuCi0KLSogQ2xlYW51cCBjb21waWxlciB3YXJuaW5ncyBmb3IgR0NDIDMuMy54IGFuZCBsYXRlcgotCi0qIEZpeCBwcm9ibGVtIGluIGNtZF9qZmZzMi5jIGludHJvZHVjZWQgYnkgQ0ZHX0pGRlNfU0lOR0xFX1BBUlQgcGF0Y2gKLQotKiBBZGQgc3VwcG9ydCBmb3IgSURTICJOQzY1MCIgYm9hcmQKLQotKiBBZGQgYXV0b21hdGljIHVwZGF0ZSBzdXBwb3J0IGZvciBMV01PTiBib2FyZAotCi0qIENsZWFyIEJsb2NrIExvY2stQml0cyB3aGVuIGVyYXNpbmcgZmxhc2ggb24gTFdNT04gYm9hcmQuCi0KLSogRml4IHJldHVybiBjb2RlIG9mICJmYXRsb2FkIiBjb21tYW5kCi0KLSogRW5hYmxlIE1TRE9TL1ZGQVQgZmlsZXN5c3RlbSBzdXBwb3J0IGZvciBMV01PTiBib2FyZAotCi0qIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDAzIEF1ZyAyMDA0OgotICBjaGFuZ2UgdGltaW5nIGZvciBTTTUwMSBncmFwaGljcyBjb250cm9sbGVyIG9uIFRRTTUyMDAgbW9kdWxlCi0KLSogUGF0Y2ggYnkgTWFyayBKb25hcywgMTMgSnVseSAyMDA0OgotICAtIFRvdGFsNTIwMCBMQ0Qgbm93IHJ1biBpbiBsaXR0bGUgZW5kaWFuIG1vZGUuIEVuZGlhbmVzcyBjb252ZXJzaW9uCi0gICAgaXMgZG9uZSBpbiBoYXJkd2FyZS4KLSAgLSBSZW1vdmVkIGxhc3QgcmVmZXJlbmNlIHRvICJjb25zb2xlIiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQotKiBQYXRjaGVzIGJ5IExhcnMgTXVuY2gsIDEyIEp1bCAyMDA0OgotICAtIG1vdmUgYXQ0NS5jIHRvIGJvYXJkL2F0OTFybTkyMDBkay8gc2luY2UgdGhpcyBpcyBhdDkxcm05MjAwZGsKLSAgICBib2FyZCBzcGVjaWZpYwotICAtIHNwbGl0IG91dCB0aGUgTFhUOTcxQSBQSFkgZnJvbSBuc185NzUwX2V0aC5oCi0gIC0gc3BsaXQgdGhlIGRtOTE2MSBwaHkgcGFydCBvdXQgb2YgYXQ5MXJtOTIwMF9ldGhlci5jCi0KLSogUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTIgSnVsIDIwMDQ6Ci0gIFJlcGxhY2VkIGhhcmRjb2RlZCBQTDAxMSBjbG9jayBmcmVxdWVuY3kgd2l0aCBjb25maWcgdmFyaWFibGUuCi0gIEZpeGVkIHdyb25nIENPTkZJR19DTURfREZMIGRvYy4KLQotKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAwOSBKdW4gMjAwNDoKLSAgbWFrZSBpdCBwb3NzaWJsZSB0byByZW1vdmUgY2hwYXJ0IHdoZW4gdGhlcmUgaXMgb25seSBvbmUgcGFydGl0aW9uCi0KLSogQWRkIHN1cHBvcnQgZm9yIGNvbnNvbGUgb3ZlciBVRFAgKGNvbXBhdGlibGUgdG8gSW5nbyBNb2xuYXIncwotICBuZXRjb25zb2xlIHBhdGNoIHVuZGVyIExpbnV4KQotCi0qIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTYgSnVsIDIwMDQ6Ci0gIC0gc3VwcG9ydCBsYXJnZXIgRERSIG1lbW9yaWVzIHVwIHRvIDJHIG9uIHRoZSBQQzg1NDAvODU2MEFEUyBhbmQKLSAgICBTVFhHUDMgYm9hcmRzCi0gIC0gTWFkZSBNUEM4NTQwLzg1NjBBRFMgYmUgMzNNaHogUENJIGJ5IGRlZmF1bHQuCi0gIC0gUmVtb3ZlZCBtb2xkeSBDT05GSUdfUkFNX0FTX0ZMQVNILCBDRkdfRkxBU0hfUE9SVF9XSURUSF8xNgotICAgIGFuZCBDT05GSUdfTDJfSU5JVF9SQU0gb3B0aW9ucy4KLSAgLSBSZWZhY3RvciBMb2NhbCBCdXMgaW5pdGlhbGl6YXRpb24gb3V0IG9mIFNEUkFNIHNldHVwLgotICAtIFJlLWltcGxlbWVudCBuZXcgdmVyc2lvbiBvZiBMQkMxMS9ERFIxMSBlcnJhdGEgd29ya2Fyb3VuZHMuCi0gIC0gTW92ZWQgYm9hcmQgc3BlY2lmaWMgUENJIGluaXQgcGFydHMgb3V0IG9mIENQVSBkaXJlY3RvcnkuCi0gIC0gQWRkZWQgVExCIGVudHJ5IGZvciBQQ0ktMSBJTyBNZW1vcnkKLSAgLSBVcGRhdGVkIFJFQURNRS5tcGM4NXh4YWRzCi0KLSogUGF0Y2ggYnkgU2FzY2hhIEhhdWVyLCAyOCBKdW46Ci0gIC0gYWRkIGdlbmVyaWMgc3VwcG9ydCBmb3IgTW90b3JvbGEgaS5NWCBhcmNoaXRlY3R1cmUKLSAgLSBhZGQgc3VwcG9ydCBmb3IgbXgxYWRzLCBteDFmczIgYW5kIHNjYjkzMjggYm9hcmRzCi0KLSogUGF0Y2hlcyBieSBNYXJjIExlZW1hbiwgMjMgSnVsIDIwMDQ6Ci0gIC0gQWRkIGRlZmluZSBmb3IgdGhlIFBDSS9NZW1vcnkgQnVmZmVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSAgLSBjb3JyZWN0ZWQgY29tbWVudHMgaW4gY3B1L21wYzgyNHgvY3B1X2luaXQuYwotCi0qIEFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzZXJpYWwgaW50ZXJmYWNlcwotICAoZm9yIGV4YW1wbGUgdG8gYWxsb3cgbW9kZW0gZGlhbC1pbiAvIGRpYWwtb3V0KQotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgSnVsIDIwMDQ6Ci0gIGNwdS9wcGM0eHgvc2RyYW0uYyByZXdyaXR0ZW4gbm93IHVzaW5nIGdldF9yYW1fc2l6ZSgpCi0KLSogRml4IE5TQ1UgY29uZmlnOyBhZGQgZXRoZXJuZXQgd2FrZXVwIGNvZGUuCi0KLSogQWRkIGxpbmsgZm9yIHByZWxvYWRlciBmb3IgTW90b3JvbGEgQ29sZEZpcmUgdG8gUkVBRE1FLm02OGsKLQotKiBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxMiBKdWwgMjAwNDoKLSAgZml4IG91dHB1dCBmb3JtYXR0aW5nIGluIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKLQotKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwMiBKdWwgMjAwNDoKLSAgRml4IGxvd2Jvb3QgKGFnYWluKSBvbiBNUEM1eHh4Ci0KLSogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMDcgSnVsIDIwMDQ6Ci0gIHJlbG9jYXRlIGV4Y2VwdGlvbiB2ZWN0b3JzIG9uIGFybTcyMHQgaWYgbmVlZGVkCi0KLSogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAwNiBKdWwgMjAwNDoKLSAgLSB1cGRhdGUgbWFjaC10eXBlcy5oIHRvIGxhdGVzdCBhcm0ubGludXgub3JnLnVrIG1hc3RlciBsaXN0Ci0gIC0gU2V0IGNvcnJlY3QgT01BUDE2MTAgYmlfYXJjaF9udW1iZXIgZm9yIGJ1aWxkIHRhcmdldAotCi0qIFBhdGNoIGJ5IEN1cnQgQnJ1bmUsIDA2IEp1bCAyMDA0OgotICBldmI0NTEwOiBhZGQgc3VwcG9ydCBmb3IgdGltZXIgaW50ZXJydXB0OyBjbGVhbnVwCi0KLSogUGF0Y2ggYnkgRGFuIFBvaXJvdCwgMDYgSnVsIDIwMDQ6Ci0gIEZpeCBzYmM4MjYwIGVudmlyb25tZW50IHZhcmlhYmxlcwotCi0qIENsZWFudXAgcmVkdW5kYW5kICJjb25zb2xlIiBlbnZpcm9ubWVudCB2YXJpYWJsZQotCi0qIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDA1IEp1bCAyMDA0OgotICBhZGQgc3VwcG9ydCBmb3IgdGhlIFRvdGFsNTEwMCdzIGFuZCBUb3RhbDUyMDAncyBMQ0Qgc2NyZWVuCi0KLSogUGF0Y2hlcyBieSBEYW4gRWlzZW5odXQsIDAxIEp1bCAyMDA0OgotICAtIFJFQURNRSBmaXhlcy4KLSAgLSBNb3ZlIGRvYzIwMDAuaCBpbmNsdWRlIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZyBvbiBzb21lIGJvYXJkcwotCi0qIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDAxIEp1bCAyMDA0OgotICBBZGRlZCBzdXBwb3J0IGZvciBUb3RhbDUxMDAgYW5kIFRvdGFsNTIwMCAoUmV2LjEgYW5kIFJldi4yKQotICBNR1Q1MTAwIGFuZCBNUEM1MjAwIGJhc2VkIEZyZWVzY2FsZSBwbGF0Zm9ybXMuCi0KLSogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDAxIEp1bCAyMDA0OgotICBBZGQgaW5pdGlhbGl6YXRpb24gZm9yIEludGVncmF0b3IgYW5kIHZlcnNhdGlsZSBib2FyZCBmaWxlcy4KLQotKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAwMSBKdW4gMjAwNDoKLSAgRml4IFZGRCBGQiBhbGxvY2F0aW9uLCBhZGQgTENEIEZCIGFsbG9jYXRpb24gb24gQVJNCi0KLSogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMzAgSnVuIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBUUU01MjAwIGJvYXJkCi0KLSogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjkgSnVuIDIwMDQ6Ci0gIEFkZCBsb29wdyBjb21tYW5kOiBpbmZpbml0ZSB3cml0ZSBsb29wIG9uIGFkZHJlc3MgcmFuZ2UKLQotKiBQYXRjaGVzIGJ5IFlhc3VzaGkgU2hvamksIDI5IEp1biAyMDA0OgotICAtIGFkZCBlbXB0eSBpbmNsdWRlL2FzbS1taWNyb2JsYXplL3Byb2Nlc3Nvci5oCi0gIC0gYWRkIHRvIENSRURJVFMgYW5kIE1BSU5UQUlORVJTCi0gIC0gYWRkIGdkIGluaXRpYWxpemF0aW9uCi0gIC0gYWRkIE1pY3JvQmxhemUgYW5kIFNVWkFLVSBib2FyZCB0byBNQUtFQUxMIHNjcmlwdAotICAtIGFkZCByZXNldCBzdXBwb3J0IGZvciBTVVpBS1UKLSAgLSBhZGQgZmx1c2hfY2FjaGUoKSBmb3IgTWljcm9CbGF6ZQotICAtIGFkZCBDRkdfRkxBU0hfU0laRSB0byBpbmNsdWRlL2NvbmZpZ3Mvc3V6YWt1Lmggc2luY2Ugd2UgaGF2ZSBmaXhlZAotICAgIHNpemUgZmxhc2ggbWVtb3J5IG9uIFNVWkFLVQotCi0qIFBhdGNoIGJ5IFByYWthc2ggS3VtYXIsIDI3IEp1biAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgdGhlIFBYQTI1MCBiYXNlZCBJbnRyaW5zeWMgQ2VyZiBib2FyZC4KLQotKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAyNyBKdW4gMjAwNDoKLSAgZml4IGNvbW1lbnQgaW4gaW5jbHVkZS9jb21tb24uaAotCi0qIFJlbmFtZSBTQkM4NTYwIGludG8gc2JjODU2MCBmb3IgY29uc2lzdGVuY3kKLQotKiBQYXRjaCBieSBEYW5pZWwgUG9pcm90LCAyNCBKdW4gMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIFdpbmQgUml2ZXIncyBzYmM4MjQwIGJvYXJkCi0KLSogUGF0Y2hlcyBieSBZYXN1c2hpIFNob2ppLCAyNiBKdW4gMjAwNDoKLSAgLSBkcml2ZXJzL3NlcmlhbF94dWFydGxpdGUuYzogZml4ICJyZXR1cm4gMCIgaW4gdm9pZCBmdW5jdGlvbgotICAtIGFkZCBtaWNyb2JsYXplIHN1cHBvcnQgdG8gbWtpbWFnZSB0b29sCi0KLSogUGF0Y2ggYnkgRnJlZCBLbGF0dCwgMjUgSnVuIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBXaW5kUml2ZXIncyBzYmM4NTYwIGJvYXJkCi0KLSogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMjQgSnVuIDIwMDQKLSAgU21hbGwgQnVncyBmaXhlcyBmb3IgImF0OTFybTkyMDBkayIgYm9hcmQ6Ci0gIC0gVGltaW5nIG1vZGlmaWNhdGlvbnMgZm9yIFNQSSBEYXRhRmxhc2ggYWNjZXNzCi0gIC0gRml4IE5BTkQgZmxhc2ggZGV0ZWN0aW9uIGJ1ZwotCi0qIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDI0IEp1biAyMDA0OgotICBBZGQgU3VwcG9ydCBmb3IgRmxhc2ggQVQ0OUJWNjQxNiBmb3IgQVQ5MVJNOTIwMERLIGJvYXJkCi0KLSogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNyBKdW5lIDIwMDQ6Ci0gIENvbXBsZXRpb24gb2YgdGhlIDg1NDBBRFMvODU2MEFEUyB1cGRhdGVzOgotICBGaXggc29tZSBQQ0kgYW5kIFJhcGlkIEkvTyBtZW1vcnkgbWFwcywKLSAgSW5pdGlhbGl6ZSBib3RoIFRTRUMgMSBhbmQgMiwKLSAgSW5pdGlhbGl6ZSBTRFJBTQotICBVcGRhdGUgTUFJTlRBSU5FUiBmb3IgODV4eCBib2FyZHMgYW5kIFJFQURNRS5tcGM4NXh4YWRzCi0KLSogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTYgSnVuIDIwMDQ6Ci0gIFJlbW92ZSBvYnNvbGV0ZSBBZGRlcklJIHBvcnQgd2hpY2ggd2FzIHN1cGVyc2VkZWQgYnkgdW5pZmllZAotICBBZGRlcklJL0FkZGVyODd4IHBvcnQKLQotKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMTYgSnVuIDIwMDQ6Ci0gIEZpeCBnY2MtMy4zLjMgd2FybmluZ3MgZm9yIHNtYzkxMTExLmMKLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAyIEp1bCAyMDA0OgotICAtIEZpeCBidWcgaW4gNDA1IGV0aGVybmV0IGRyaXZlcjsgYWxsb2NhdGVkIGRhdGEgbm90IGNsZWFyZWQhCi0gIC0gRml4IHByb2JsZW0gaW4gNDA1IGkyYyBkcml2ZXI7IGRvbid0IHRyeSB0byBwcmludCB3aXRob3V0IGNvbnNvbGUhCi0KLSogUGF0Y2ggYnkgUGF1bCBSdWhsYW5kLCAxMSBKdW4gMjAwNDoKLSAgUmVtb3ZlIGRlYnVnIGNvZGUgZnJvbSAnYm9hcmQvbHBkN2E0MHgvZmxhc2guYycKLQotKiBQYXRjaCBieSBBbmRyZWEgTWFyc29uLCAxMSBKdW4gMjAwNDoKLSAgVXBkYXRlIGZvciBQUENoYW1lbGVvbiBib2FyZDoKLSAgLSBzdXBwb3J0IGZvciBTeXNDbGsgQCAyNU1IegotICAtIHN1cHBvcnQgZm9yIFNpbGljb24gTW90aW9uIFNNNzEyIFZHQSBjb250cm9sbGVyCi0gIC0gc29tZSBjbGVhbiB1cHMKLQotKiBQYXRjaGVzIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDEwIEp1biAyMDA0OgotICAtIGZpeCBwcm9ibGVtcyB3aXRoIGV4YW1wbGVzL3N0dWJzLmMgZm9yIEdDQyA+PSAzLjQKLSAgLSBmaXggcHJvYmxlbXMgd2l0aCBnZCBpbml0aWFsaXphdGlvbgotCi0qIFBhdGNoIGJ5IEN1cnQgQnJ1bmUsIDE3IE1heSAyMDA0OgotICAtIEFkZCBzdXBwb3J0IGZvciBTYW1zdW5nIFMzQzQ1MTBCIENQVSAoQVJNN3RkbWkgYmFzZWQgU29DKQotICAtIEFkZCBzdXBwb3J0IGZvciBFU1BELUluYy4gRVZCNDUxMCBCb2FyZAotCi0qIFBhdGNoIGJ5IE1hcmMgTGVlbWFuLCAxMSBNYXkgMjAwNDoKLSAgRml4IGZvciBNUEM4MjQ1IC0gcmVhZGluZyBQUEMgTWVtb3J5IGZyb20gYW5vdGhlciBkZXZpY2Ugd2l0aCB0aGUKLSAgUFBDIGFzIFBDSSB0YXJnZXQgZGV2aWNlIGNvcnJ1cHRzIGRhdGEgZHVlIHRvIGludGVyZW5hbCBoYXJkd2FyZQotICBidWZmZXJpbmcuCi0KLSogRml4ICJjbHMiIGNvbW1hbmQgd2hlbiB1c2VkIHdpdGggc3BsYXNoIHNjcmVlbgotCi0qIEluY3JlYXNlIE5GUyBkb3dubG9hZCB0aW1lb3V0IChub3cgMSBtaW4gLSAxMCBzZWMgaXMgdG8gc2hvcnQgZm9yIGEKLSAgc2xvdyBkb3dubG9hZCBvZiBhIGJpZyBpbWFnZSkKLQotKiBBZGQgImNscyIgZnVuY3Rpb24gdG8gTVBDODIzIExDRCBkcml2ZXIgc28gd2UgY2FuIHJlaW5pdGlhbGl6ZSB0aGUKLSAgZGlzcGxheSBldmVuIGFmdGVyIHNob3dpbmcgYSBiaXRtYXAKLQotKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDA0IEp1biAyMDA0OgotICAtIEREUiBSYW0gc3VwcG9ydCBmb3IgUE01MjAgKE1QQzUyMDApCi0gIC0gc3VwcG9ydCBmb3IgZGlmZmVyZW50IGZsYXNoIHR5cGVzIChQTTUyMCkKLSAgLSBVU0IgLyBJREUgLyBDRi1DYXJkIC8gRGlza09uQ2hpcCBzdXBwb3J0IGZvciBQTTUyMAotICAtIDggYml0IGJvb3Qgcm9tIHN1cHBvcnQgZm9yIFBNNTIwL0NFNTIwCi0gIC0gQWRkIGF1dG8gU0RSQU0gbW9kdWxlIGRldGVjdGlvbiBmb3IgTWljcm9TeXMgQ1BDNDUgYm9hcmQgKE1QQzgyNDUpCi0gIC0gSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgQ1BDNDUKLSAgLSBzdXBwb3J0IG9mIG5ldyBmbGFzaCB0eXBlICgyOEYxNjBDM1QpIGZvciBDUEM0NQotCi0qIEZpeCBmbGFzaCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBMaW51eCBmb3IgUFBDaGFtZWxlb24gYm9hcmQKLQotKiBSZW1vdmUgZXRoX2luaXQoKSBmcm9tIGxpYl9hcm0vYm9hcmQuYzsgaXQncyBkb25lIGluIG5ldC5uZXQuYy4KLQotKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDEwIEp1biAyMDA0OgotICBmaXggc3VwcG9ydCBmb3IgTG9naWMgU0RLLUxIN0E0MDQgYm9hcmQgYW5kIGNsZWFuIHVwIHRoZQotICBMSDdBNDA0IHJlZ2lzdGVyIG1hY3Jvcy4KLQotKiBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2ssIDEwIEp1biAyMDA0OgotICBNb2RpZnkgY29kZSB0byBzZWxlY3QgY29ycmVjdCBzZXJpYWwgY2xvY2sgb24gU2FuZHBvaW50ODI0NQotCi0qIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTAgSnVuIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBLMyBzdHJhdGEgZmxhc2guCi0KLSogUGF0Y2ggYnkgVGhvbWFzIEJyYW5kLCAxMCBKdW4gMjAwNDoKLSAgRml4ICJsb2FkcyIgY29tbWFuZCBvbiBESzFTMTAgYm9hcmQKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwOSBKdW4gMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIDhNQiBmbGFzaCBTSU1NIGFuZCBKRkZTMiBmaWxlIHN5c3RlbSBvbgotICBNb3Rvcm9sYSBGQURTIGJvYXJkIGFuZCBpdHMgZGVyaXZhdGl2ZXMgKE1QQzg2eEFEUywgTVBDODg1QURTKS4KLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwOSBKdW4gMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIEFuYWxvZ3VlJk1pY3JvIEFkZGVyODd4IGFuZCB0aGUgb2xkZXIgQWRkZXJJSSBib2FyZC4KLQotKiBQYXRjaCBieSBNaW5nLUxlbiBXdSwgMDkgSnVuIDIwMDQ6Ci0gIEFkZCBzdXBwcG9ydCBmb3IgTUM5MzI4IChEYXJnb25iYWxsKSBDUFUgYW5kIE1vdG9yb2xhIE1YMUFEUyBib2FyZAotCi0qIFBhdGNoIGJ5IFNhbSBTb25nLCAwOSBKdW4gMjAwNDoKLSAgLSBBZGQgc3VwcG9ydCBmb3IgUlBYbGl0ZV9EVyBib2FyZAotICAtIFVwZGF0ZSBGTEFTSCBkcml2ZXIgZm9yIDQqQU0yOURMMzIzREI5MFZJCi0gIC0gQWRkIG9wdGlvbiBjb25maWd1cmF0aW9uIG9mIENGR19FTlZfSVNfSU5fTlZSQU0gb24gUlBYbGl0ZV9EVyBib2FyZAotCi0qIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDA4IEp1bmUgMjAwNDoKLSAgLSBNYWtlIE1QQzUyMDAgYm9hcmRzIGV2YWx1YXRlIHRoZSBTVlIgdG8gcHJpbnQgcHJvY2Vzc29yIG5hbWUgYW5kCi0gICAgdmVyc2lvbiBpbiBjaGVja2NwdSgpIChjcHUvbXBjNXh4eC9jcHUuYykuCi0KLSogUGF0Y2ggYnkgS2FpLVV3ZSBCbG9lbSwgMDYgTWF5IDIwMDQ6Ci0gIEZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBjcmFtZnMgY29kZQotCi0qIFBhdGNoIGJ5IFRvbSBBcm1pc3RlYWQsIDA0IEp1biAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgTUFYNjkwMCBSVEMKLQotKiBQYXRjaGVzIGJ5IExhZGlzbGF2IE1pY2hsLCAwMyBKdW4gMjAwNDoKLSAgLSBmaXggY2ZpX2ZsYXNoLmMgb24gTEUgc3lzdGVtcwotICAtIGxldCAnbWFrZSBtcnByb3BlcicgZGVsZXRlIHUtYm9vdC5pbWcgYXMgd2VsbAotICAtIHR1cm4gcHJpbnRmIGludG8gZGVidWcgaW4gY2ZpX2ZsYXNoLmMKLQotKiBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMjggTWF5IDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBFeHlzIFhTRW5naW5lIGJvYXJkCi0KLSogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgTWF5IDIwMDQ6Ci0gIEZpeCBhIE1QQzV4eHggSTJDIHRpbWluZyBpc3N1ZSBpbiBpMmNfcHJvYmUoKS4KLQotKiBQYXRjaCBieSBMZWlmIExpbmRob2xtLCAyNyBNYXkgMjAwNDoKLSAgRml4IGJvYXJkX2luaXRfZigpIGZvciBkYmF1MXgwMCBib2FyZC4KLQotKiBQYXRjaCBieSBJbXJlIERlYWssIDI2IE1heSAyMDA0OgotICBPbiBPTUFQMTYxMCBwbGF0Zm9ybXMgY2hlY2sgaWYgYm9vdGluZyBmcm9tIFJBTShDUzApIG9yIGZsYXNoKENTMykuCi0gIFNldCBmbGFzaCBiYXNlIGFjY29yZGluZ2x5LCBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gZG8gb3Igc2tpcCBib2FyZAotICBzcGVjaWZpYyBzZXR1cCBzdGVwcy4KLQotKiBQYXRjaCBieSBKb3NlZiBCYXVtZ2FydG5lciwgMjYgTWF5IDIwMDQ6Ci0gIEFkZCBtaXNzaW5nIGRlZmluZSBpbiBpbmNsdWRlL2FzbS1tNjhrL2dsb2JhbF9kYXRhLmgKLQotKiBQYXRjaCBieSBKb3NlZiBCYXVtZ2FydG5lciwgMjUgTWF5IDIwMDQ6Ci0gIEFkZCBtaXNzaW5nIGZ1bmN0aW9ucyBnZXRfdGlja3MoKSBhbmQgZ2V0X3RiY2xrKCkgaW4gbGliX202OGsvdGltZS5jCi0KLSogUGF0Y2ggYnkgUGF1bCBSdWhsYW5kLCAyNCBNYXkgMjAwNDoKLSAgZml4IFNEUkFNIGluaXRpYWxpemF0aW9uIGZvciBMUEQ3QTQwMCBib2FyZC4KLQotKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAyMCBNYXkgMjAwNDoKLSAgYWRkIHN1cHBvcnQgZm9yIGVudmlyb25tZW50IGluIE5BTkQgZmxhc2gKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMCBNYXkgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIEludGVycGhhc2UgaVNQQU4gYm9hcmRzLgotCi0qIFBhdGNoZXMgYnkgUGF1bCBSdWhsYW5kLCAxNyBNYXkgMjAwNDoKLSAgLSBBZGQgSS9PIGZ1bmN0aW9ucyB0byB0aGUgc21jOTExMTEgZXRoZXJuZXQgZHJpdmVyIHRvIHN1cHBvcnQgdGhlCi0gICAgTG9naWMgTFBEN0E0MHggYm9hcmRzLgotICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTG9naWMgWm9vbSBMSDdBNDB4IGJhc2VkIFNESyBib2FyZChzKSwKLSAgICBzcGVjaWZpY2FsbHkgdGhlIExQRDdBNDAwLgotCi0qIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNSBNYXkgMjAwNDoKLSAgLSBjYWxsIE1BQyBhZGRyZXNzIHJlYWRpbmcgY29kZSBhbHNvIGZvciBTTVNDOTFDMTExOwotICAtIG1ha2UgU01TQzkxQzExMSB0aW1lb3V0IGNvbmZpZ3VyYWJsZSwgcmVtb3ZlIGR1cGxpY2F0ZSBjb2RlCi0gIC0gZml4IGdldF90aW1lcigpIGZvciBQWEEKLSAgLSB1cGRhdGUgZG9jL1JFQURNRS5KRkZTMgotICAtIHVzZSAiYm9vdGZpbGUiIGVudiB2YXJpYWJsZSBhbHNvIGZvciBqZmZzMgotCi0qIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE0IE1heSAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IENTQjQ3MiBib2FyZCAoOE1CIEZsYXNoIFJldikKLQotKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAxNCBNYXkgMjAwNDoKLSAgLSBmbGFzaC5oOiBtb3JlIGZsYXNoIHR5cGVzIGFkZGVkCi0gIC0gaW1tYXBfODI2MC5oOiBzb21lIGJpdHMgYWRkZWQgKHVzZWZ1bCBmb3IgUk1JSSkKLSAgLSBjbWRfY29uaW5mby5jOiB0eXBvIGNvcnJlY3RlZCwgcHJpbnRmIC0+IHB1dHMKLSAgLSByZWR1Y2VkIHNpemUgYnkgcmVwbGFjaW5nIHNwYWNlcyB3aXRoIHRhYgotCi0qIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTMgTWF5IDIwMDQ6Ci0gIEFkZCAnaW1nZXh0cmFjdCcgY29tbWFuZDogZXh0cmFjdCBvbmUgcGFydCBvZiBhIG11bHRpIGZpbGUgaW1hZ2UuCi0KLSogUGF0Y2hlcyBieSBKb24gTG9lbGlnZXIsIDExIE1heSAyMDA0OgotICBEeW5hbWljYWxseSBoYW5kbGUgUkVWMSBhbmQgUkVWMiBNUEM4NXh4IHBhcnRzLgotICAgIChKb24gTG9lbGlnZXIsIDEwLU1heS0yMDA0KS4KLSAgTmV3IGNvbnNpc3RlbnQgbWVtb3J5IG1hcCBhbmQgTG9jYWwgQWNjZXNzIFdpbmRvdyBhY3Jvc3MgTVBDODV4eCBsaW5lLgotICBOZXcgQ0NTUkJBUiBhdCAweEUwMDBfMDAwMCBub3cuCi0gIEFkZCBSQVBJRCBJL08gbWVtb3J5IG1hcC4KLSAgTmV3IG1lbW9yeSBtYXAgaW4gUkVBRE1FLk1QQzg1eHhhZHMKLSAgICAoS3VtYXIgR2FsYSwgMTAtTWF5LTIwMDQpCi0gIEJldHRlciBib2FyZCBhbmQgQ1BVIGlkZW50aWZpY2F0aW9uIG9uIE1QQzg1eHggYm9hcmRzIGF0IGJvb3QuCi0gICAgKEpvbiBMb2VsaWdlciwgMTAtTWF5LTIwMDQpCi0gIFNEUkFNIGNsb2NrIGNvbnRyb2wgZml4ZXMgb24gTVBDODU0MEFEUyAmIE1QQzg1NjAgYm9hcmRzLgotICBTb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTVBDODU0MEFEUyAmIE1QQzg1NjBBRFMgY2xlYW5lZCB1cC4KLSAgICAoSmltIFJvYmVydHNvbiwgMTAtTWF5LTIwMDQpCi0gIFJld3JpdGUgb2YgdGhlIE1QQzg1eHggVGhyZWUgU3BlZWQgRXRoZXJuZXQgQ29udHJvbGxlciAoVFNFQykgZHJpdmVyLgotICBTdXBwb3J0cyBtdWx0aXBsZSBQSFlzLgotICAgIChBbmR5IEZsZW1pbmcsIDEwLU1heS0yMDA0KQotICBTb21lIFJFQURNRS5NUEM4NXh4YWRzIHVwZGF0ZXMuCi0gICAgKEt1bWFyIEdhbGEsIDEwLU1heS0yMDA0KQotICBDb3B5cmlnaHQgdXBkYXRlcyBmb3IgIkZyZWVzY2FsZSIKLSAgICAoQW5keSBGbGVtaW5nLCAxMC1NYXktMjAwNCkKLQotKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxMSBNYXkgMjAwNDoKLSAgQWRkIGZsYXNoIHN1cHBvcnQgZm9yIFNUIE0yOVcwNDBCCi0gIFJlZHVjZSBKU0Ugc3BlY2lmaWMgZmxhc2guYyB0byByZW1vdmUgZGVhZCBjb2RlLgotCi0qIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAwNCBNYXkgMjAwNDoKLSAgRml4IGNsZWFyX2JzcyBjb2RlIGZvciBBUk0gc3lzdGVtcyAoYWxsIGV4Y2VwdCBzM2M0NGIwIHdoaWNoCi0gIGRvZXNuJ3QgY2xlYXIgQlNTIGF0IGFsbD8pCi0KLSogRml4ICJwaW5nIiBwcm9ibGVtIG9uIElOQy1JUCBib2FyZC4gU3RyYW5nZSBwcm9ibGVtOgotICBTb21ldGltZXMgdGhlIHN0b3JlIHdvcmQgaW5zdHJ1Y3Rpb24gaGFuZ3Mgd2hpbGUgd3JpdGluZyB0byBvbmUgb2YKLSAgdGhlIFN3aXRjaCByZWdpc3RlcnMsIGJ1dCBvbmx5IGlmIHRoZSBuZXh0IGluc3RydWN0aW9uIGlzIDE2LWJ5dGUKLSAgYWxpZ25lZC4gTW92aW5nIHRoZSBpbnN0cnVjdGlvbiBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gc29tZWhvdwotICBtYWtlcyB0aGUgcHJvYmxlbSBnbyBhd2F5LgotCi0qIFBhdGNoIGJ5IFJpc2hpIEJoYXR0YWNoYXJ5YSwgMDggTWF5IDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBUSSBPTUFQNTkxMiBPU0sgQm9hcmQKLQotKiBQYXRjaCBieSBTYW0gU29uZyBNYXksIDA3IE1heSAyMDA0OgotICBGaXggdHlwbyBvZiBVUE0gdGFibGUgZm9yIHJtdSBib2FyZAotCi0qIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNSBNYXkgMjAwNDoKLSAgLSBJbnRyYWNvbSBib2FyZCB1cGRhdGUuCi0gIC0gQWRkIENvZGVjIFBPU1QuCi0KLSogQWRkIHN1cHBvcnQgZm9yIHRoZSBzZWNvbmQgRXRoZXJuZXQgaW50ZXJmYWNlIGZvciB0aGUgJ1BQQ2hhbWVsZW9uJwotICBib2FyZC4KLQotKiBQYXRjaCBieSBEYXZlIFBldmVybGV5LCAzMCBBcHIgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIE9NQVA3MzAgUGVyc2V1czIgRGV2ZWxvcG1lbnQgYm9hcmQKLQotKiBQYXRjaCBieSBBbGFuIEouIEx1c2UsIDI5IEFwciAyMDA0OgotICBGaXggZmxhc2ggY2hpcC1zZWxlY3QgKE9SMCkgb3B0aW9uIHJlZ2lzdGVyIHNldHRpbmcgb24gRkFEUyBib2FyZHMuCi0KLSogUGF0Y2ggYnkgQWxhbiBKLiBMdXNlLCAyOSBBcHIgMjAwNDoKLSAgUmVwb3J0IE1JSSBuZXR3b3JrIHNwZWVkIGFuZCBkdXBsZXggc2V0dGluZyBwcm9wZXJseSB3aGVuCi0gIGF1dG8tbmVnb3RpYXRlIGlzIG5vdCBlbmFibGVkLgotCi0qIFBhdGNoIGJ5IEphcnJldHQgUmVkZCwgMjkgQXByIDIwMDQ6Ci0gIEZpeCBoYW5nIG9uIHJlc2V0IG9uIE9jb3RlYSBib2FyZCBkdWUgdG8gZmxhc2ggaW4gd3JvbmcgbW9kZS4KLQotKiBQYXRjaCBieSBEYXZlIFBldmVybGV5LCAyOSBBcHIgMjAwNDoKLSAgYWRkIE1BQyBhZGRyZXNzIGRldGVjdGlvbiB0byBzbWM5MTExMSBkcml2ZXIKLQotKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDI4IEFwciAyMDA0OgotICBmaXggdHlwbyBpbiBsaWJfYXJtL2JvYXJkLmMKLQotKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAyMCBBcHIgMjAwNDoKLSAgLSBSRUFETUUgdXBkYXRlOiBhZGQgQ09ORklHX0NTQjI3MiBhbmQgY3NiMjcyX2NvbmZpZwotICAtIGFkZCBkZXNjcmlwdGlvbnMgZm9yIHNvbWUgTUlJL1BIWSBvcHRpb25zLCBDT05GSUdfSTJDRkFTVCwgYW5kCi0gICAgaTJjZmFzdCBlbnZpcm9ubWVudCB2YXJpYWJsZQotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE5IEFwciAyMDA0OgotICAtIFJlbmFtZSBEVUVUX0FEUyB0byBNUEM4ODVBRFMKLSAgLSBSZW5hbWUgQ09ORklHX0RVRVQgdG8gQ09ORklHX01QQzg4NV9GQU1JTFkKLSAgLSBSZW5hbWUgQ09ORklHXzg2Nl9ldF9hbCB0byBDT05GSUdfTVBDODY2X0ZBTUlMWQotICAtIENsZWFuIHVwIEZBRFMgZmFtaWx5IHBvcnQgdG8gdXNlIHRoZSBuZXcgZGVmaW5lcwotCi0qIEZpeCBQQ0kgc3VwcG9ydCBvbiBDUEM0NSBib2FyZAotCi0qIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjUgQXByIDIwMDQ6Ci0gIEFkZCBOaW9zIEdEQi9KVEFHIENvbnNvbGUgc3VwcG9ydDoKLSAgLSBBZGQgc3R1YnMgdG8gc3VwcG9ydCBnZGIgdmlhIEpUQUcuCi0gIC0gQWRkIHN1cHBvcnQgZm9yIGNvbnNvbGUgb3ZlciBKVEFHLgotICAtIE1pbm9yIGNsZWFudXAuCi0KLSogQWRkIHN1cHBvcnQgZm9yIENBVGNlbnRlciBib2FyZCAoYmFzZWQgb24gUFBDaGFtZWxlb24gTUUgbW9kdWxlKQotCi0qIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDEyIE1heSAyMDA0OgotICBVc2luZyBleHRlcm5hbCB3YXRjaGRvZyBmb3IgS1VQNCBib2FyZHMgaW4gbXBjOHh4L2NwdS5jOwotICBsb2FkX3Nlcm51bV9ldGhhZGRyKCkgZm9yIEtVUDQgYm9hcmRzIGluIGxpYl9wcGMvYm9hcmQuYzsKLSAgdmFyaW91cyBjaGFuZ2VzIHRvIEtVUDQgYm9hcmQgc3BlY2lmaWMgZmlsZXMKLQotKiBGaXggbWlub3IgbmV0d29yayBwcm9ibGVtIG9uIE1QQzUyMDA6IG5lZWQgc29tZSBkZWxheSBiZXR3ZWVuCi0gIHJlc2V0dGluZyB0aGUgUEhZIGFuZCBzZW5kaW5nIHRoZSBmaXJzdCBwYWNrZXQuIEltcGxlbWVudGVkIGluIGEKLSAgIm5hdHVyYWwiIHdheSBieSBpbnZva2luZyB0aGUgUEhZIHJlc2V0IGFuZCBpbml0aWFsaXphdGlvbiBjb2RlCi0gIG9ubHkgb25jZSBhZnRlciBwb3dlciBvbiB2cy4gZWFjaCB0aW1lIHRoZSBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC4KLQotKiBBZGQgc29tZSBsaW1pdGVkIHN1cHBvcnQgZm9yIGxvdy1zcGVlZCBkZXZpY2VzIHRvIFNMODExIFVTQiBjb250cm9sbGVyCi0gIChhdCBsZWFzdCAidXNiIHJlc2V0IiBub3cgcGFzc2VzIHN1Y2Nlc3NmdWxseSBhbmQgInVzYiBpbmZvIiBkaXNwbGF5cwotICBjb3JyZWN0IGluZm9ybWF0aW9uKQotCi0qIENoYW5nZSBpbml0IHNlcXVlbmNlIGZvciBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXM6IGluaXRpYWxpemUKLSAgb24tY2hpcCBpbnRlcmZhY2VzIGJlZm9yZSBleHRlcm5hbCBjYXJkcy4KLQotKiBGaXggbWVtb3J5IGxlYWsgaW4gdGhlIE5BTkQtc3BlY2lmaWMgSkZGUzIgY29kZQotCi0qIEZpeCBTTDgxMSBVU0IgY29udHJvbGxlciB3aGVuIGF0dGFjaGVkIHRvIGEgVVNCIGh1YgotCi0qIEZpeCBjb25maWcgb3B0aW9uIHNwZWxsaW5nIGluIFBNNTIwIGNvbmZpZyBmaWxlCi0KLSogRml4IFBIWSBkaXNjb3ZlcnkgcHJvYmxlbSBpbiBjcHUvbXBjOHh4L2ZlYy5jIChpbnRyb2R1Y2VkIGJ5Ci0gIHBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDMwIE1hciAyMDA0KQotCi0qIEZpeCBtaW5vciBOQU5EIEpGRlMyIHJlbGF0ZWQgaXNzdWUKLQotKiBGaXhlcyBmb3IgU0w4MTEgVVNCIGNvbnRyb2xsZXI6Ci0gIC0gaW1wbGVtZW50IHdvcmthcm91bmQgZm9yIGJyb2tlbiBtZW1vcnkgc3RpY2sKLSAgLSBpbXByb3ZlIGVycm9yIGhhbmRsaW5nCi0KLSogSW5jcmVhc2UgcGFja2V0IHNlbmQgdGltZW91dCB0byAxIG1zIGluIGNwdS9tcGM4eHgvc2NjLmMgdG8gYmV0dGVyCi0gIGNvcGUgd2l0aCBjb25nZXN0ZWQgbmV0d29ya3MuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyMyBBcHIgMjAwNDoKLSAgRml4IFZTQy9DSVMgODIwMSBwaHkgZGVzY3JhbWJsZXIgaW50ZXJvcGVyYWJpbGl0eSB0aW1pbmcgZHVlIHRvCi0gIGVycmF0YSBmcm9tIFZpdGVzc2UgU2VtaWNvbmR1Y3Rvci4KLQotKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMjIgQXByIDIwMDQ6Ci0gIEZpeCBldGhlcm5ldCBjb25maWd1cmF0aW9uIGZvciAidmVyc2F0aWxlIiBib2FyZAotCi0qIFBhdGNoIGJ5IEtzaGl0aWogR3VwdGEsIDIxIEFwciAyMDA0OgotICBSZW1vdmUgYnVzeSBsb29wIGFuZCB1c2UgTVBVIHRpbWVyIGZyIHVzbGVlcCgpIG9uIE9NQVAxNTEwLzE2MTAgYm9hcmRzCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjQgRmViIDIwMDQ6Ci0gIEZpeCBhIGJ1ZyBpbiBBVDkxUk05MjAwIGV0aGVybmV0IGRyaXZlcjoKLSAgVGhlIE1JSSBpbnRlcmZhY2UgaXMgbm93IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIFBIWS4KLQotKiBQYXRjaCBieSBKb2huIEtlcmwsIDE5IEFwciAyMDA0OgotICBVc2UgVS1ib290J3MgbWlpcGh5LmggZm9yIFBIWSByZWdpc3RlciBuYW1lcywgcmF0aGVyIHRoYW4KLSAgaW50cm9kdWNpbmcgYSBuZXcgaGVhZGVyIGZpbGUuCi0KLSogVXBkYXRlIHBjaV9pZHMuaCBmcm9tIGxpbnV4LTIuNC4yNgotCi0qIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDE5IEFwciAyMDA0OgotICBGaXggcHJvYmxlbSBjYXVzZSBieSBWTEFOIGZ1bmN0aW9uIG9uIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlCi0gIHdpdGhvdXQgVkxBTiBlbnZpcm9ubWVudAotCi0qIENsZWFuIHVwIHRoZSBUUU04eHhfWVlNSHogY29uZmlndXJhdGlvbnM7IGFsbG93IHRvIHVzZSB0aGUgc2FtZQotICBiaW5hcnkgaW1hZ2UgZm9yIGFsbCBjbG9jayBmcmVxdWVuY2llcy4gSW1wbGVtZW50IHJ1bi10aW1lCi0gIG9wdGltaXphdGlvbiBvZiBmbGFzaCBhY2Nlc3MgdGltaW5nIGJhc2VkIG9uIHRoZSBhY3R1YWwgYnVzCi0gIGZyZXF1ZW5jeS4KLQotKiBNb2RpZnkgS1VQNFggYm9hcmQgY29uZmlndXJhdGlvbiB0byB1c2UgU0w4MTEgZHJpdmVyIGZvciBVU0IgbWVtb3J5Ci0gIHN0aWNrcyAoaW5jbHVkaW5nIEZBVCAvIFZGQVQgZmlsZXN5c3RlbSBzdXBwb3J0KQotCi0qIEFkZCBTTDgxMSBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlciBmb3IgVVNCCi0KLSogQWRkIENGR19JMkNfRUVQUk9NX0FERFJfT1ZFUkZMT1cgZGVzcmlwdGlvbiB0byBSRUFETUUKLQotKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTkgQXByIDIwMDQ6Ci0gIEFsbG93IHRvIHVzZSBzaGVsbCBzdHlsZSBzeW50YXggKGkuIGUuICR7dmFyfSApIHdpdGggc3RhbmRhcmQgcGFyc2VyLgotICBNaW5vciBwYXRjaGVzIGZvciBJbnRyYWNvbSBib2FyZHMuCi0KLSogUGF0Y2ggYnkgQ2hyaXN0aWFuIFBlbGwsIDE5IEFwciAyMDA0OgotICBjbGVhbnVwIHN1cHBvcnQgZm9yIENGL0lERSBvbiBQQ01DSUEgZm9yIFBYQTI1WAotCi0qIFRlbXBvcmFyaWx5IGRpc2FibGVkIEpvaG4gS2VybCdzIGV4dGVuZGVkIE1JSSBjb21tYW5kIGNvZGUgYmVjYXVzZQotICAibWlpdmFscy5oIiBpcyBtaXNzaW5nCi0KLSogUGF0Y2hlcyBieSBNYXJrIEpvbmFzLCAxMyBBcHIgMjAwNDoKLSAgLSBSZW1vdmUgQ1MwIGNoaXAgc2VsZWN0IHRpbWluZyBzZXR0aW5nIGZyb20gY3B1L21wYzV4eHgvc3RhcnQuUwotICAtIEFkZCBzeW5jIGluc3RydWN0aW9ucyB0byBJY2VDdWJlIFNEUkFNIGluaXQgY29kZQotICAtIE1vdmUgU0RSQU0gY2hpcCBjb25zdGFudHMgaW50byBzZXBlcmF0ZSBpbmNsdWRlIGZpbGVzCi0gIC0gVW5pZnkgRERSIGFuZCBTRFIgaW5pdGlhbGl6YXRpb24gY29kZQotICAtIFVuaWZ5IGFsbCBJY2VDdWJlIChMaXRlNXh4eCkgdGFyZ2V0IG5hbWVzCi0KLSogUGF0Y2ggYnkgSm9obiBLZXJsLCAxNiBBcHIgMjAwNDoKLSAgRW5hYmxlIHJhbmdlcyBpbiBtaWkgY29tbWFuZCwgZS5nLiBtaWkgcmVhZCAwLTFmIDAgb3IKLSAgbWlpIHJlYWQgNC03IDE4LTFhLiAgQWxzbyBhZGQgbWlpIGR1bXAgc3ViY29tbWFuZCBmb3IKLSAgcHJldHR5LXByaW50aW5nIHN0YW5kYXJkIHJlZ3MgMC01LgotCi0qIFBhdGNoIGJ5ICBTdGVwaGVuIFdpbGxpYW1zLCAxNiBBcHJpbCAyMDA0OgotICBmaXggdHlwbyBpbiBKU0UuaDsgdXBkYXRlIE1BSU5UQUlORVJTCi0KLSogUGF0Y2ggYnkgTWF0dGhldyBTLiBNY0NsaW50b2NrLCAxNCBBcHIgMjAwNDoKLSAgZml4IGluaXRkcmFtIGZ1bmN0aW9uIGZvciB1dHg4MjQ1IGJvYXJkCi0KLSogUGF0Y2ggYnkgTWFya3VzIFBpZXRyZWssIDE0IEFwciAyMDA0OgotICB1c2UgQVRBR19JTklUUkQyIGluc3RlYWQgb2YgZGVwcmVjYXRlZCBBVEFHX0lOSVRSRCB0YWcKLQotKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMTggQXByIDIwMDQ6Ci0gIHByb3ZpZGUgdGhlIElERSBSZXNldCBGdW5jdGlvbiBmb3IgRU1LIDUyMDAgYm9hcmRzCi0KLSogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMTIgQXByIDIwMDQ6Ci0gIGZpeCBwY2lfaG9zZV93cml0ZV9jb25maWdfe2J5dGUsd29yZH1fdmlhX2R3b3JkIHByb2JsZW1zCi0KLSogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxMiBBcHIgMjAwNDoKLSAgVXBkYXRlIG1heCBSQU0gc2l6ZSBmb3IgZGVicmlzIGJvYXJkCi0KLSogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDggQXByIDIwMDQ6Ci0gIEFkZCBUTEIgZW50cnkgZm9yIHNlY29uZCBESU1NIHNsb3Qgb24gb2NvdGVhCi0KLSogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggQXByIDIwMDQ6Ci0gIGFkZCBSVEw4MTY5IG5ldHdvcmsgZHJpdmVyCi0KLSogUGF0Y2ggYnkgRGFuIE1hbGVrLCAwNyBBcHIgMjAwNDoKLSAgLSBBZGQgc3VwcG9ydCBmb3IgUlBDL1NUeCBHUDMsIE1vdG9yb2xhIDg1NjAgYm9hcmQKLSAgLSBVcGRhdGUgODV4eCBUU0VDIGRyaXZlciBzbyBpdCBzZWFyY2hlcyBNSUkgZm9yIGZpcnN0IGF2YWlsYWJsZSBQSFkKLSAgICBhbmQgdXNlcyB0aGF0IG9uZS4KLSAgLSBBZGQgZnVuY3Rpb25zIHRvIHN1cHBvcnQgY29uc29sZSBNSUkgY29tbWFuZHMuCi0KLSogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDcgQXByIDIwMDQ6Ci0gIE1vdmUgaW5pdGlhbGl6YXRpb24gb2YgYmlfaWljX2Zhc3RbXQotICBmcm9tIGJvYXJkX2luaXRfZigpIHRvIGJvYXJkX2luaXRfcigpCi0KLSogUGF0Y2ggYnkgWWFzdXNoaSBTaG9qaSwgMDcgQXByIDIwMDQ6Ci0gIENsZWFudXAgbWljcm9ibGF6ZSBwb3J0Ci0KLSogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAwNyBBcHIgMjAwNDoKLSAgQWRkIGF1dG8gU0RSQU0gbW9kdWxlIGRldGVjdGlvbiBmb3IgRGVicmlzIGJvYXJkCi0KLSogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDA2IEFwciAyMDA0OgotICAtIEZpeCBzb21lIFBDSSBwcm9ibGVtcyBvbiB0aGUgTVBDODI2NkFEUyBib2FyZAotICAtIEZpeCB0aGUgbG9jYXRpb24gb2Ygc29tZSBQQ0kgZW50cmllcyBpbiB0aGUgaW1tYXAgc3RydWN0dXJlCi0KLSogUGF0Y2ggYnkgWWFzdXNoaSBTaG9qaSwgMDcgQXByIDIwMDQ6Ci0gIC0gYWRkIHN1cHBvcnQgZm9yIG1pY3JvYmxhemUgcHJvY2Vzc29ycwotICAtIGFkZCBzdXBwb3J0IGZvciBBdG1hcmtUZWNobm8gInN1emFrdSIgYm9hcmQKLQotKiBDb25maWd1cmUgUFBDaGFtZWxlb24gYm9hcmQgdG8gdXNlIHJlZHVuZGFuZCBlbnZpcm9ubWVudCBpbiBmbGFzaAotCi0qIENvbmZpZ3VyZSBQUENoYW1lbGVvbiBib2FyZCB0byB1c2UgSkZGUzIgTkFORCBzdXBwb3J0LgotCi0qIEFkZGVkIHN1cHBvcnQgZm9yIEpGRlMyIGZpbGVzeXN0ZW0gKHJlYWQtb25seSkgb24gdG9wIG9mIE5BTkQgZmxhc2gKLQotKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTYgQXByIDIwMDQ6Ci0gIExCQTQ4IGZpeGVzCi0KLSogUGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTYgQXByIDIwMDQ6Ci0gIC0gYWRkIHN1cHBvcnQgZm9yIGEgbmV3IHZlcnNpb24gb2YgYW4gSW50cmFjb20gYm9hcmQgYW5kIGZpeAotICAgIHZhcmlvdXMgb3RoZXIgdGhpbmdzIG9uIG90aGVycy4KLSAgLSBhZGQgdmVyaWZ5IHN1cHBvcnQgdG8gdGhlIGNyYzMyIGNvbW1hbmQgKGRlZmluZQotICAgIENPTkZJR19DUkMzMl9WRVJJRlkgdG8gZW5hYmxlIGl0KQotICAtIGZpeCBGRUMgZHJpdmVyIGZvciBNUEM4eHggc3lzdGVtczoKLSAgICAxLiBmaXggY29tcGlsYXRpb24gcHJvYmxlbXMgZm9yIGJvYXJkcyB0aGF0IHVzZSBkeW5hbWljCi0gICAgICAgYWxsb2NhdGlvbiBvZiBEUFJBTQotICAgIDIuIHNodXQgZG93biBGRUMgYWZ0ZXIgbmV0d29yayB0cmFuc2ZlcnMKLSAgLSBIVVNIIHBhcnNlciBmaXhlczoKLSAgICAxLiBBIG5ldyB0ZXN0IGNvbW1hbmQgd2FzIGFkZGVkLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mCi0gICAgICAgdGhlIG9uZSBpbiB0aGUgYm91cm5lIHNoZWxsLgotICAgIDIuIEEgbmV3IGV4aXQgY29tbWFuZCB3YXMgYWRkZWQgd2hpY2ggdGVybWluYXRlcyB0aGUgY3VycmVudAotICAgICAgIGV4ZWN1dGluZyBzY3JpcHQuCi0gICAgMy4gRml4ZWQgaGFuZGluZyBvZiAkPyAoZXhpdCBjb2RlIG9mIGxhc3QgZXhlY3V0ZWQgY29tbWFuZCkKLSAgLSBGaXggc29tZSBjb21waWxlIHByb2JsZW1zOwotICAgIGFkZCAib25jZSIgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG5ldHJldHJ5IHZhcmlhYmxlCi0KLSogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAwMiBBcHIgMjAwNDoKLSAgYWRkIHN1cHBvcnQgZm9yIEludGVsIEFzc2FiZXQgYm9hcmQKLQotKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAwMSBBcHIgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIFBpY3R1cmUgRWxlbWVudHMgSlNFIGJvYXJkCi0KLSogUGF0Y2ggYnkgQ2hyaXN0aWFuIFBlbGwsIDAxIEFwciAyMDA0OgotICBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgZm9yIFBYQSBzeXN0ZW1zLgotCi0qIFBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDMwIE1hciAyMDA0OgotICAtIGFkZCBhdXRvLWNvbXBsZXRlIHN1cHBvcnQgdG8gdGhlIFUtQm9vdCBDTEkKLSAgLSBhZGQgc3VwcG9ydCBmb3IgTkVUVEEgYW5kIE5FVFBIT05FIGJvYXJkczsgZml4IE5FVFZJQSBib2FyZAotICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgRXBzb24gMTU2eCBzZXJpZXMgb2YgZ3JhcGhpY2FsIGRpc3BsYXlzCi0gICAgKFRoZXNlIGRpc3BsYXlzIGFyZSBzZXJpYWwgYW5kIG5vdCBzdWl0YWJsZSBmb3IgdXNpbmcgYSBub3JtYWwKLSAgICBmcmFtZWJ1ZmZlciBjb25zb2xlIG9uIHRoZW0pCi0gIC0gYWRkIGluZnJhc3RydWN0dXJlIG5lZWRlZCBpbiBvcmRlciB0byBQT1NUIGFueSBEU1BzIGluIGEgYm9hcmQKLSAgLSBpbXByb3ZlIGFuZCBmaXggdmFyaW91cyB0aGluZ3MgaW4gdGhlIE1QQzh4eCBGRUMgZHJpdmVyOgotICAgIDEuIFRoZSBuZXcgODd4IGFuZCA4OHggc2VyaWVzIG9mIHByb2Nlc3NvcnMgaGF2ZSB0d28gRkVDcywKLSAgICAgICBhbmQgdGhlIG5ldyBkcml2ZXIgc3VwcG9ydHMgdGhlbSBib3RoLgotICAgIDIuIEFub3RoZXIgY2hhbmdlIGluIHRoZSA4N3gvODh4IHNlcmllcyBpcyBzdXBwb3J0IGZvcgotICAgICAgIHRoZSBSTUlJIChSZWR1Y2VkIE1JSSkgaW50ZXJmYWNlLiBIb3dldmVyIG51bWVyb3VzCi0gICAgICAgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBzaW5jZSB0aGUgUEhZcwotICAgICAgIGFyZSBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbGluZXMuIFRoYXQgbWVhbnMgdGhhdAotICAgICAgIHlvdSBoYXZlIHRvIGFkZHJlc3MgdGhlbSBjb3JyZWN0bHkgb3ZlciB0aGUgTUlJCi0gICAgICAgaW50ZXJmYWNlLgotICAgIDMuIFdlIG5vdyBjb3JyZWN0bHkgbWF0Y2ggdGhlIE1JSS9STUlJIGludGVyZmFjZQotICAgICAgIGNvbmZpZ3VyYXRpb24gdG8gd2hhdCB0aGUgUEhZIHJlcG9ydHMuCi0gIC0gRml4IHByb2JsZW0gd2hlbiByZWFkaW5ndGhlIE1JSSBzdGF0dXMgcmVnaXN0ZXIuIER1ZSB0byB0aGUKLSAgICBpbnRlcm5hbCBkZXNpZ24gb2YgbWFueSBQSFlzIHlvdSBoYXZlIHRvIHJlYWQgdGhlIHJlZ2lzdGVyCi0gICAgdHdpY2UuIFRoZSBwcm9ibGVtIGlzIG1vcmUgYXBwYXJlbnQgaW4gMTBNYml0IG1vZGUuCi0gIC0gYWRkIG5ldyBtb2RlICIuamZmczJzIiBmb3IgcmVhZGluZyBmcm9tIGEgTkFORCBkZXZpY2U6IGl0IGp1c3QKLSAgICBza2lwcyBvdmVyIGJhZCBibG9ja3MuCi0gIC0gYWRkIG5ldHdvcmtpbmcgc3VwcG9ydCBmb3IgVkxBTnMgKDgwMi4xcSksIGFuZCBDRFAgKENpc2NvCi0gICAgRGlzY292ZXJ5IFByb3RvY29sKQotICAtIHNvbWUgbWlub3IgcGF0Y2hlcyAvIGNsZWFudXAKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyOCBNYXIgMjAwNDoKLSAgLSBBZGQgc3VwcG9ydCBmb3IgTVBDODI3MiBmYW1pbHkgaW5jbHVkaW5nIE1QQzgyNDcvODI0OC84MjcxLzgyNzIKLSAgLSBBZGQgc3VwcG9ydCBmb3IgTVBDODI3MkFEUyBldmFsdWF0aW9uIGJvYXJkIChhbm90aGVyIGZsYXZvdXIgb2YgTVBDODI2MEFEUykKLSAgLSBDaGFuZ2UgY29uZmlndXJhdGlvbiBtZXRob2QgZm9yIE1QQzgyNjBBRFMgZmFtaWx5Ci0KLSogYWRkIHN0YXJ0dXAgY29kZSB0byBjbGVhciB0aGUgQlNTIG9mIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zCi0KLSogRml4IGlmIC8gZWxpZiBoYW5kbGluZyBidWcgaW4gSFVTSCBzaGVsbAotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjA6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogUGF0Y2ggYnkgTWFyayBKb25hczogUmVtb3ZlIGNvbmZpZy50bXAgZmlsZXMgb25seSB3aGVuCi0gIHVuY29uZmlndXJpbmcgdGhlIGJvYXJkCi0KLSogQWRhcHQgUk1VIGJvYXJkIGZvciBiaWdnZXIgZmxhc2ggbWVtb3J5Ci0KLSogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMTMgTWFyIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciBLVVA0WCBCb2FyZAotCi0qIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyMSBNYXIgMjAwNAotICBBZGQgUmVpc2VyZnMgc3VwcG9ydAotCi0qIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDIwIE1hciAyMDA0Ci0gIC0gQWRkIGF1dG8tcmVsZWFzZSBmb3IgU01TQyBMQU45MWMxMTEgZHJpdmVyCi0gIC0gQWRkIHNhdmUvcmVzdG9yZSBvZiBQVFIgYW5kIFBOUiByZWdzIGFzIHN1Z2dlc3RlZCBpbiBkYXRhc2hlZXQKLQotKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxOSBNYXJjaCAyMDA0Ci0gIEluY3JlYXNlIHNwZWVkIG9mIHNlY3RvciByZWFkcyBmcm9tIFN5c3RlbUFDRSwKLSAgc2hvcnRlbiBwb2xsIHRpbWVvdXQgYW5kIHJlbW92ZSBhIHVzZWxlc3MgcmVzZXQKLQotKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxOSBNYXIgMjAwNDoKLSAgTWFrZSBHaWdFIFBIWSAxMDAwTWJwcyBTcGVlZC9EdXBsZXggZGV0ZWN0aW9uIGNvbmRpdGlvbmFsCi0gIChDT05GSUdfUEhZX0dJR0UpCi0KLSogUGF0Y2ggYnkgQnJhZCBLZW1wLCAxOCBNYXIgMjAwNDoKLSAgcHJldmVudCBtYWNoaW5lIGNoZWNrcyBkdXJpbmcgYSBQQ0kgc2NhbgotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgotICBGaXggc3RyaW5nIGNsZWFuaW5nIGluIElERSBpZGVudGlmaWNhdGlvbgotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgotICAtIFVuaWZ5IHZpZGVvIG1vZGUgaGFuZGxpbmcgZm9yIENoaXBzICYgVGVjaG5vbG9naWVzIDY5MDAwIFZpZGVvCi0gICAgY2hpcCBhbmQgU2lsaWNvbiBNb3Rpb24gU01JIDcxMi83MTAvODEwIFZpZGVvIGNoaXAKLSAgLSBBZGQgc2VsZWN0aW9uIG9mIHRoZSB2aWRlbyBvdXRwdXQgKENSVCBvciBMQ0QpIHZpYSAndmlkZW9vdXQnCi0gICAgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIHRoZSBTaWxpY29uIE1vdGlvbgotICAtIFJFQURNRSB1cGRhdGUKLQotKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOCBNYXIgMjAwNDoKLSAgaW5jbHVkZS9jb21tb24uaCB0eXBvIGZpeAotCi0qIFBhdGNoZXMgYnkgVG9sdW5heSBPcmt1biwgMTcgTWFyIDIwMDQ6Ci0gIC0gQWRkIHN1cHBvcnQgZm9yIGJkLT5iaV9paWNfZmFzdFtdIGluaXRpYWxpemF0aW9uIHZpYSBlbnZpcm9ubWVudAotICAgIHZhcmlhYmxlICJpMmNmYXN0IiAoQ09ORklHX0kyQ0ZBU1QpCi0gIC0gQWRkICJpMmNmYXN0IiB1LWJvb3QgZW52aXJvbm1lbnQgdmFyaWFibGUgc3VwcG9ydCBmb3IgY3NiMjcyCi0KLSogUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMTcgTWFyIDIwMDQ6Ci0gIElnbm9yZSAnXDAnIGNoYXJhY3RlcnMgaW4gY29uc29sZSBpbnB1dCBmb3IgdXNlIHdpdGggdGVsbmV0IGFuZAotICB0ZWxjbyBwYWRzLgotCi0qIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTcgTWFyIDIwMDQ6Ci0gIHR5cG8gZml4IGZvciBzdHJzd2FiIHByb3RvdHlwZSAjaWZkZWYKLQotKiBQYXRjaGVzIGJ5IFRob21hcyBWaWVod2VnZXIsIDE2IE1hciAyMDA0OgotICAtIHNob3cgUENJIGNsb2NrIGZyZXF1ZW5jeSBvbiBNUEM4MjYwIHN5c3RlbXMKLSAgLSBhZGQgRkNDX1BTTVJfUk1JSSBmbGFnIGZvciBIaVA3IHByb2Nlc3NvcnMKLSAgLSBpbiBkb19qZmZzMl9mc2xvYWQoKSwgdGFrZSBsb2FkIGFkZHJlc3MgZnJvbSBsb2FkX2FkZHIgaWYgbm90IHNldAotICAgIGV4cGxpY2l0LCB1cGRhdGUgbG9hZF9hZGRyIG90aGVyd2lzZQotICAtIHJlcGxhY2VkIHByaW50ZiBieSBwdXRjL3B1dHMgd2hlbiBubyBmb3JtYXR0aW5nIGlzIG5lZWRlZAotICAgIChzbWFsbGVyIGNvZGUgc2l6ZSwgZmFzdGVyIGV4ZWN1dGlvbikKLQotKiBQYXRjaCBieSBQaGlsbGlwcGUgUm9iaW4sIDE2IE1hciAyMDA0OgotICBhdm9pZCBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlciBpbiBsaWJfYXJtL2FybWxpbnV4LmMKLQotKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxNSBNYXIgMjAwNDoKLSAgRml4IENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyBkb2N1bWVudGF0aW9uCi0KLSogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTUgTWFyIDIwMDQ6Ci0gIEluaXRpYWxpemUgYmlfb3BiZnJlcSB0byByZWFsIE9QQiBmcmVxdWVuY3kgdmlhIGdldF9PUEJfZnJlcSgpCi0KLSogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTUgTWFyIDIwMDQ6Ci0gIFVwZGF0ZSBDUkVESVRTICYgTUFJTlRBSU5FUlMgZmlsZXMgZm9yIFBQQzQ0MEdYICYgT2NvdGVhIHBvcnQKLQotKiBBZGQgc3RhcnQtdXAgZGVsYXkgdG8gbWFrZSBzdXJlIHBvd2VyIGhhcyBzdGFiaWxpemVkIGJlZm9yZQotICBhdHRlbXB0aW5nIHRvIHN3aXRjaCBvbiBVU0Igb24gU1gxIGJvYXJkLgotCi0qIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMTggTWFyIDIwMDQ6Ci0gIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFhNMjUwIGJvYXJkIChQWEEyNTUpCi0gIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODI4IGJvYXJkIChNUEM4MjgwKQotICAtIEFkZCBzdXBwb3J0IGZvciAzMiBNQiBGbGFzaCBvbiBQTTgyNS84MjYKLSAgLSBuZXcgU0RSQU0gcmVmcmVzaCByYXRlIGZvciBQTTgyNS9QTTgyNgotICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNNTIwIChNUEM1MjAwKQotICAtIHJlcGxhY2VkIFF1ZXJ5IGJ5IElkZW50aWZ5IGNvbW1hbmQgaW4gQ1BVODYvZmxhc2guYwotICAgIHRvIHN1cHBvcnQgMjhGMTYwRjNCCi0KLSogRml4IHdyYXAgYXJvdW5kIHByb2JsZW0gd2l0aCB1ZGVsYXkoKSBvbiBBUk05MjBUCi0KLSogQWRkIHN1cHBvcnQgZm9yIE1hY3Jvbml4IGZsYXNoIG9uIFRSQUIgYm9hcmQKLQotKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxNSBNYXIgMjAwNDoKLSAgRml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBJREUgaWRlbnRpZmljYXRpb24KLQotKiBGaXggcG93ZXItb2ZmIG9mIExDRCBmb3Igb3V0LW9mLWJhbmQgdGVtcGVyYXR1cmVzIG9uIExXTU9OIGJvYXJkCi0KLSogUmVtb3ZlIHJlZHVuZGFuZCAjZGVmaW5lIGluIEljZUN1YmUuaAotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI3IEZlYiAyMDA0OgotICAtIEFkZGluZyBnZXRfdGlja3MoKSBhbmQgZ2V0X3RiY2xrKCkgZm9yIEFUOTFSTTkyMDAKLSAgLSBNYW55IHdoaXRlIHNwYWNlIGZpeGVzIGluIGNwdS9hdDkxcm05MjAwL2ludGVycnVwdHMuYwotCi0qIFBhdGNoZXMgYnkgU3RldmVuIFNjaG9seiwgMjAgRmViIDIwMDQ6Ci0gIHNvbWUgY2xlYW51cCBpbiBBVDkxUk05MjAwIHJlbGF0ZWQgY29kZQotCi0qIFBhdGNoZXMgYnkgVHJhdmlzIFNhd3llciwgMTIgTWFyIDIwMDQ6Ci0gIC0gRml4IEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydCBmb3IgNDQwR1gKLSAgLSBBZGQgR2lnYWJpdCBFdGhlcm5ldCBTdXBwb3J0IHRvIE1JSSBQSFkgdXRpbGl0aWVzCi0KLSogUGF0Y2ggYnkgQnJhZCBLZW1wLCAxMiBNYXIgMjAwNDoKLSAgRml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6Ci0gIC0gQmV0dGVyIHN1cHBvcnQgZm9yIHg4L3gxNiBpbXBsZW1lbnRhdGlvbnMKLSAgLSBBZGRlZCBmYWlsdXJlIGZvciBBTUQgY2hpcHMgYXR0ZW1wdGluZyB0byB1c2UgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUKLSAgLSBBZGRlZCBkZWZpbmVzIGZvciBBTUQgY29tbWFuZCBhbmQgYWRkcmVzcyBjb25zdGFudHMKLQotKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDEyIE1hciAyMDA0OgotICBGaXggZ2V0X2RlbnRmcm9tZGlyKCkgdG8gY29ycmVjdGx5IGhhbmRsZSBkZWxldGVkIGRlbnRyaWVzCi0KLSogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMSBNYXIgMjAwNDoKLSAgUmVtb3ZlIGhhcmQgY29kZWQgbmV0d29yayBzZXR0aW5ncyBpbiBUSSBPTUFQMTYxMCBIMgotICBkZWZhdWx0IGJvYXJkIGNvbmZpZwotCi0qIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTEgTWFyIDIwMDQ6Ci0gIGFkZCBzdXBwb3J0IGZvciBBRFMgR3JhcGhpY3NDbGllbnQrIGJvYXJkLgotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDExIE1hciAyMDA0OgotICAtIGFkZCBiaXRtYXAgY29tbWFuZCBhbmQgc3BsYXNoIHNjcmVlbiBzdXBwb3J0IGluIGNmYiBjb25zb2xlCi0gIC0gYWRkIFtvcHRpb25hbF0gb3JpZ2luIGluIHRoZSBiaXRtYXAgZGlzcGxheSBjb21tYW5kCi0KLSogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTEgTWFyIDIwMDQ6Ci0gIEZpeCBvY290ZWEgYm9hcmQgZWFybHkgaW5pdCBpbnRlcnJ1cHQgc2V0dXAuCi0KLSogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTEgTWFyIDIwMDQ6Ci0gIFJlbW92ZSByZWR1bmRhbmQgY29kZTsgYWRkICBQQ0ktc3BlY2lmaWMgYml0cyB0byBpbmNsdWRlL21wYzgyNjAuaAotCi0qIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMDkgTWFyIDIwMDQKLSAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFNTViBBRE5QL0VTQzEgKE5pb3MgU29mdGNvcmUpCi0KLSogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCA5IE1hciAyMDA0OgotICBmaXggcmVjZW50IGJ1aWxkIGZhaWx1cmUgZm9yIFNBMTEwMCB0YXJnZXQKLQotKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBNYXIgMjAwNDoKLSAgU3VwcG9ydCBuYXRpdmUgaW50ZXJydXB0IG1vZGUgZm9yIHRoZSBJQk00NDBHWC4KLSAgUHJldmlvdXNseSBpdCB3YXMgcnVubmluZyBpbiA0NDBHUCBjb21wYXRpYmlsaXR5IG1vZGUuCi0KLSogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDA5IE1hciAyMDA0OgotICBBZGRlZCBBUk0gSW50ZWdyYXRvciBBUCwgQ1AgYW5kIFZlcnNhdGlsZSBQQjkyNkVKLVMgUmVmZXJlbmNlCi0gIFBsYXRmb3JtIHN1cHBvcnQuCi0KLSogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggTWFyIDIwMDQ6Ci0gIERvbid0IG92ZXJ3cml0ZSBzZXJ2ZXIgSVAgYWRkcmVzcyBvciBib290IGZpbGUgbmFtZQotICB3aGVuIHRoZSBib290IHNlcnZlciBkb2VzIG5vdCByZXR1cm4gdmFsdWVzCi0KLSogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgNSBNYXIgMjAwNDoKLSAgUmVtb3ZlZCBjb21waWxlIHRpbWUgcmVzdHJpY3Rpb24gb24gQ0ZHX0kyQ19TUEVFRCBmb3IgRFMxMzM4IFJUQwotCi0qIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDUgTWFyIDIwMDQ6Ci0gIEZpeCBlYXJseSBib2FyZCBpbml0aWFsaXphdGlvbiBmb3IgQ29nZW50IENTQjI3MiBib2FyZAotCi0qIFBhdGNoIGJ5IEVkIE9rZXJzb24sIDMgTWFyIDIwMDQ6Ci0gIGZpeCBDRkkgZmxhc2ggd3JpdGVzIGZvciBsaXR0bGUgZW5kaWFuIHN5c3RlbXMKLQotKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMDEgTWFyIDIwMDQ6Ci0gIGdlbmVyYWxpemUgVVNCIGFuZCBJREUgc3VwcG9ydCBmb3IgTVBDNTIwMCB3aXRoIGFjY29yZGluZwotICBjaGFuZ2VzIHRvIEljZUN1YmUuaCBhbmQgVE9QNTIwMC5oCi0gIGFkZCBBbTI5TFYyNTYgMjU2IE1CaXQgRkxBU0ggc3VwcG9ydCBmb3IgVE9QNTIwMCBib2FyZHMKLSAgYWRkIGluZm8gYWJvdXQgVVNCIGFuZCBJREUgdG8gUkVBRE1FCi0KLSogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgNCBNYXIgMjAwNDoKLSAgRml4IHByb2JsZW1zIHdpdGggR0NDIDMuMy54IHdoaWNoIGNoYW5nZWQgaGFuZGxpbmcgb2YgZ2xvYmFsCi0gIHZhcmlhYmxlcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8gKG5vdyBpbiAuYnNzIGluc3RlYWQgb2YKLSAgLmRhdGEgYXMgYmVmb3JlKS4KLQotKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDAyIE1hciAyMDA0OgotICBhZGQgc3Ryc3dhYigpIHRvIGZpeCBJREUgTEJBIGNhcGFjaXR5LCBmaXJtd2FyZSBhbmQgbW9kZWwgbnVtYmVycwotICBvbiBsaXR0bGUgZW5kaWFuIG1hY2hpbmVzCi0KLSogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDIgTWFyIDIwMDQ6Ci0gIC0gUmVtb3ZlIGdldF90aWNrcygpIGZyb20gTkZTIGNvZGUKLSAgLSBBZGQgdmVyaWZpY2F0aW9uIG9mIFJQQyB0cmFuc2FjdGlvbiBJRAotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDAyIE1hciAyMDA0OgotICBjbGVhbnVwIGZvciBJREUgYW5kIFVTQiBkcml2ZXJzIGZvciBNUEM1MjAwCi0KLSogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDEgTWFyIDIwMDQ6Ci0gIE9jb3RlYToKLSAgLSBBZGQgSUJNIFBQQzQ0MEdYIFJlZiBQbGF0Zm9ybSBzdXBwb3J0IChPY290ZWEpCi0gICAgT3JpZ2luYWwgY29kZSBieSBQYXVsIFJleW5vbGRzIDxQYXVsUmV5bm9sZHNAbGhzb2x1dGlvbnMuY29tPgotICAgIEFkYXB0ZWQgdG8gVS1Cb290IGFuZCA0NDBHWCBwb3J0Ci0gIDQ0MGd4X2VuZXQuYzoKLSAgLSBBZGQgZ3JhY2lvdXMgaGFuZGxpbmcgb2YgYWxsIEV0aGVybmV0IFBpbiBTZWxlY3Rpb25zIGZvciA0NDBHWAotICAtIEFkZCBSR01JSSBzZWxlY3Rpb24gZm9yIENpY2FkYSBDSVM4MjAxIEdpZ2FiaXQgUEhZCi0gIHBwYzQ0MC5oOgotICAtIEFkZCBuZWVkZWQgYml0IGRlZmluaXRpb25zCi0gIC0gRml4IGZvcm1hdHRpbmcKLQotKiBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAxIE1hciAyMDA0OgotICBBZGQgUFBDNDQwR1ggcHJiZHYwIGRpdmlkZXIgdG8gZml4IG1lbW9yeSBjbG9jayBjYWxjdWxhdGlvbi4KLQotKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI3IEZlYiAyMDA0Ci0gIC0gYXZvaWQgcHJvYmxlbXMgZm9yIHRhcmdldHMgd2l0aG91dCBORlMgZG93bmxvYWQgc3VwcG9ydAotCi0qIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAyNyBGZWIgMjAwNDoKLSAgLSBBZGRlZCBMQkE0OCBzdXBwb3J0IChDT05GSUdfTEJBNDggJiBDRkdfNjRCSVRfTEJBKQotICAtIEFkZGVkIHN1cHBvcnQgZm9yIDY0Yml0IHByaW50aW5nIGluIHZzcHJpbnRmIChDRkdfNjRCSVRfVlNQUklOVEYpCi0gIC0gQWRkZWQgc3VwcG9ydCBmb3IgNjRiaXQgc3RydG91bCAoQ0ZHXzY0QklUX1NUUlRPVUwpCi0KLSogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjcgRmViIDIwMDQ6Ci0gIEZpeCByYXJwYm9vdDogYWRkIGF1dG9sb2FkIGJ5IE5GUwotCi0qIFBhdGNoIGJ5IERhbiBFaXNlbmh1dCwgMjYgRmViIDIwMDQ6Ci0gIGZpeCBmbGFzaF93cml0ZSByZXR1cm4gdmFsdWUgaW4gc2F2ZWVudgotCi0qIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMTEgRGVjIDIwMDMKLSAgZXhwYW5kIGNvbmZpZy5tayB0byBhdm9pZCB0cmlncmFwaCB3YXJuaW5ncyBvbiBOSU9TCi0KLSogUmVuYW1lICJCTVMyMDAzIiBib2FyZCBpbnRvICJITUkxMCIKLQotKiBTWDEgcGF0Y2hlczogdXNlICJzZXJpYWwjIiBmb3IgVVNCIHNlcmlhbCAjOyB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50Ci0gIHN0b3JhZ2U7IGF1dG8tc2V0IGNvbnNvbGUgb24gVVNCIHBvcnQgKHVzaW5nIHByZWJvb3QgY29tbWFuZCkKLQotKiBBZGQgc3VwcG9ydCBmb3IgU1gxIG1vYmlsZSBwaG9uZTsgYWRkIHN1cHBvcnQgZm9yIFVTQi1iYXNlZCBjb25zb2xlCi0gIChlbmFibGUgd2l0aCAic2V0ZW52IHN0ZG91dCB1c2J0dHk7IHNldGVudiBzdGRpbiB1c2J0dHkiKQotCi0qIEZpeCBMT1dCT09UIGNvbmZpZ3VyYXRpb24gZm9yIE1QQzUyMDAgd2l0aCBERFIgbWVtb3J5Ci0KLSogRml4IFNEUkFNIHRpbWluZ3MgZm9yIExJVEU1MjAwIC8gSWNlQ3ViZSBib2FyZAotCi0qIEhhbmRsZSBBdXRpLU1ESVggLyBjb25uZWN0aW9uIHN0YXR1cyBmb3IgSU5DQS1JUAotCi0qIEZpeCBVU0IgcHJvYmxlbXMgd2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgMCBieXRlcwotCi0qIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDI2IEZlYiAyMDA0OgotICBGaXggYnJva2VuIGNvbXBpbGUgZm9yIFhQRURJVEUxSyB0YXJnZXQuCi0KLSogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyNiBGZWIgMjAwNDoKLSAgQnVnIGZpeCBmb3IgTkZTIGNvZGUgb24gTklPUyB0YXJnZXRzCi0KLSogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMjYgRmViIDIwMDQ6Ci0gIEJyZWFrIHVwIFN5c3RlbUFDRSByZWFkcyBvZiBsYXJnZSBibG9jayBjb3VudHMKLQotKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyNiBGZWIgMjAwNAotICBhZGQgSURFIHN1cHBvcnQgZm9yIE1QQzUyMDAKLQotKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNiBGZWIgMjAwNDoKLSAgYWRkIGF1dG9sb2FkIHZpYSBORlMKLQotKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zCi0gIFVzZSBvZiBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gaW4gYm9hcmQuYyBjb25zaXN0ZW50IHdpdGggdXNlcwotICBlbHNld2hlcmUgaW4gdGhlIHNvdXJjZS4KLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBGZWIgMjAwNDoKLSAgLSBUaW1lb3V0cyBpbiBGUEdBIGNvZGUgc2hvdWxkIGJlIGJhc2VkIG9uIENGR19IWgotICAtIE1pbm9yIGNsZWFudXAgaW4gY29kZSBmb3IgQWx0ZXJhIEZQR0EgQUNFWDFLCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgRmViIDIwMDQ6Ci0gIENoYW5nZWQgIkRpcmVjdG9yeSBIaWVyYXJjaHkiIHNlY3Rpb24gaW4gUkVBRE1FCi0KLSogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjUgRmViIDIwMDQ6Ci0gIFJlZHVjZSBjb3B5IGNvdW50IGluIG5mc19yZWFkX3JlcGx5KCkgb2YgTkZTIGNvZGUKLQotKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMjQgRmViIDIwMDQ6Ci0gIE5TOTc1MCBEZXZCb2FyZCBhZGRlZAotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI0IEZlYiAyMDA0Ci0gIGFkZCBVU0Igc3VwcG9ydCBmb3IgTVBDNTIwMAotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI0IEZlYiAyMDA0OgotICAtIGZpeCBNSUkgY29tbWFuZHMgdG8gdXNlIHZhbHVlcyBmcm9tIGxhc3QgY29tbWFuZAotCi0qIFBhdGNoIGJ5IFRvcnN0ZW4gRGVta2UsIDI0IEZlYiAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgdGhlIGVYYWxpb24gcGxhdGZvcm0gKFNQU1ctODI0MCwgRi0zMCwgRi0zMDApCi0KLSogUGF0Y2ggYnkgUmFodWwgU2hhbmJoYWcsIDE5IEZlYiAyMDA0OgotICBGaXhlcyBmb3IgZm9yIE9NQVAxNjEwIGJvYXJkOgotICAtIHNoaWZ0IHNvbWUgSVJRIHNwZWNpZmljIGNvZGUgdG8gcGxhdGZvcm0uUyBmaWxlCi0gIC0gcmVtb3ZlIGR1cGxpY2F0ZXdhdGNoZG9nIHJlc2V0IGNvZGUgZnJvbSBzdGFydC5TCi0KLSogTWFrZSBBdXRvLU1ESVggU3VwcG9ydCBjb25maWd1cmFibGUgb24gSU5DQS1JUCBib2FyZAotCi0qIEZpeCBsaWNlbnNlIGZvciBta2ltYWdlIHRvb2wKLQotKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNCBGZWIgMjAwNDoKLSAgVXBkYXRlIE5ldEJvb3RGaWxlWGZlclNpemUgaW4gTkZTIGNvZGUKLQotKiBQYXRjaCBieSBTY290dCBNY051dHQsIDI0IEZlYiAyMDA0OgotICBmaXggcGFja2V0IGxlbmd0aCBpbiBORlMgY29kZQotCi0qIFBhdGNoIGJ5IE1hc2FtaSBLb21peSwgMjIgRmViIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBORlMgZm9yIGZpbGUgZG93bmxvYWQKLQotKiBQYXRjaCBieSBBbmRyZWEgU2NpYW4sIDE3IEZlYiAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgUzNDNDRCMCBwcm9jZXNzb3IgYW5kIERBVkUgQjIgYm9hcmQKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMCBGZWIgMjAwNDoKLSAgLSBBZGQgc3VwcG9ydCBmb3IgTUlJIGNvbW1hbmRzIG9uIEFUOTFSTTkyMDAgYm9hcmRzCi0gIC0gc29tZSBjbGVhbnVwIGluIEFUOTFSTTkyMDAgZXRoZXJuZXQgY29kZQotCi0qIFBhdGNoIGJ5IFBldGVyIFJ5c2VyLCAyMCBGZWIgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggTUwzMDAgcGxhdGZvcm0KLQotKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDE3IEZlYiAyMDA0OgotICBGaXggd2F0Y2hkb2cgc3VwcG9ydCBmb3IgTklPUwotCi0qIFBhdGNoIGJ5IEpvc2ggRnJ5bWFuLCAxNiBGZWIgMjAwNDoKLSAgRml4IGJ5dGUtc3dhcHBpbmcgZm9yIGNmaV9mbGFzaC5jIGZvciBkaWZmZXJlbnQgYnVzIHdpZHRocwotCi0qIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxNCBKZWIgMjAwNDoKLSAgUmVtb3ZlIGR1cGxpY2F0ZSAiRlBHQSBTdXBwb3J0IiBub3RlcyBmcm9tIHRoZSBSRUFETUUgZmlsZQotCi0qIFBhdGNoZXMgYnkgUmVpbmhhcmQgTWV5ZXIsIDE0IEZlYiAyMDA0OgotICAtIHVwZGF0ZSBib2FyZC9lbWsgdHJlZTsgdXNlIGNvbW1vbiBmbGFzaCBkcml2ZXIKLSAgLSBDb3JyZWN0ZWQgdGVzdGVkIGJpdHMgaW4gbWFjaGluZSBjaGVjayBleGNlcHRpb24gaW4gY3B1L21wYzV4eHgvdHJhcHMuYwotICAgIFthZGFwdGVkIGZvciBvdGhlciBQUEMgQ1BVcyAtLSB3ZF0KLSAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgTTQ4VDA4IG9uIHRoZSBFVkFMNTIwMCBib2FyZCBpbiBydGMvbWs0OHQ1OS5jCi0KLSogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDEzIEZlYiAyMDA0OgotICBDYWxsIHNob3dfYm9vdF9wcm9ncmVzcygpIHdoZW5ldmVyIFBPU1QgIkZBSUxFRCIgaXMgcHJpbnRlZC4KLQotKiBQYXRjaCBieSBOaXNoYW50IEthbWF0LCAxMyBGZWIgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIFRJIE9NQVAxNjEwIEgyIEJvYXJkCi0gIEZpeGVzIGZvciBjcHUvYXJtOTI2ZWpzL2ludGVycnVwdC5jCi0JKGJhc2VkIG9uIFJpY2hhcmQgV29vZHJ1ZmYncyBwYXRjaCBmb3IgYXJtOTI1LCAxNiBPY3QgMDMpCi0gIEZpeCBmb3IgYSB0aW1lciBidWcgaW4gT01BUDE2MTAgSW5ub3ZhdG9yCi0gIEFkZCBzdXBwb3J0IGZvciBDUzAgKFJPTSkvQ1MzIChGbGFzaCkgYm9vdCBpbiBPTUFQMTYxMCBJbm5vdmF0b3IgYW5kIEgyCi0KLSogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDEyIEZlYiAyMDA0OgotICAtIGFkZCBzdXBwb3J0IGZvciBOSU9TIHRpbWVyIHdpdGggdmFyaWFibGUgcGVyaW9kIHByZWxvYWQgY291bnRlciB2YWx1ZQotICAtIHByZXBhcmUgUE9TVCBmcmFtZXdvcmsgc3VwcG9ydCBmb3IgTklPUyB0YXJnZXRzCi0KLSogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDExIEZlYiAyMDA0OgotICBhZGQgUE9TVCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1IGJvYXJkCi0KLSogUGF0Y2ggYnkgTGF1cmVudCBNb2hpbiwgMTAgRmViIDIwMDQ6Ci0gIEZpeCBidWZmZXIgb3ZlcmZsb3cgaW4gY29tbW9uL3VzYi5jCi0KLSogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTAgRmViIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBDb2dlbnQgQ1NCMjcyIGJvYXJkCi0KLSogUGF0Y2ggYnkgVGhvbWFzIEVsc3RlLCAxMCBGZWIgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIE5FVCs1MCBDUFUgYW5kIE1vZE5FVDUwIGJvYXJkCi0KLSogUGF0Y2ggYnkgU2FtIFNvbmcsIDEwIEZlYiAyMDA0OgotICBGaXggdHlwb3MgaW4gY2ZpX2ZsYXNoLmMKLQotKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDEwIEZlYiAyMDA0Ci0gIEZpeGVkIGxvbmcgZGlyIGVudHJ5IHNsb3QgaWQgY2FsY3VsYXRpb24gaW4gZ2V0X3ZmYXRuYW1lCi0KLSogUGF0Y2ggYnkgUm9iaW4gR2lsa3MsIDEwIEZlYiAyMDA0OgotICBhZGQgIml0ZXN0IiBjb21tYW5kIChvcGVyYXRvcnM6IC1lcSwgLW5lLCAtbHQsIC1ndCwgLWxlLCAtZ2UsID09LAotICAhPSwgPD4sIDwsID4sIDw9LCA+PSkKLQotKiBGaXggcHJvYmxlbSB3aXRoIHNpZGUgZWZmZWN0cyBpbiBtYWNyb3MgaW4gaW5jbHVkZS91c2IuaAotCi0qIFBhdGNoIGJ5IERhdmlkIEJlbnNvbiwgMTMgTm92IDIwMDM6Ci0gIGJ1ZyA4NDEzNTggLSBmaXggVEZUUCBkb3dubG9hZCBzaXplIGxpbWl0Ci0KLSogRml4aW5nIGJ1ZyA4NTA3Njg6Ci0gIGltcHJvcGVyIGZsdXNoX2NhY2hlKCkgaW4gbG9hZF9zZXJpYWwoKQotCi0qIEZpeGluZyBidWcgODM0OTQzOgotICBNUEM4NTQwIC0gbWlzc2luZyB2b2xhdGlsZSBkZWNsYXJhdGlvbnMKLQotKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAwOSBGZWIgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIFhpbGlueCBTeXN0ZW1BQ0UgY2hpcDoKLSAgLSBOZXcgZmlsZXMgY29tbW9uL2NtZF9hY2UuYyBhbmQgaW5jbHVkZS9zeXN0ZW1hY2UuaAotICAtIEhvb2sgc3lzdGVtYWNlIHN1cHBvcnQgaW50byBjbWRfZmF0IGFuZCB0aGUgcGFydGl0aW9uIG1hbmFnZXIKLQotKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBGZWIgMjAwNDoKLSAgQWRkIGJpX29wYmZyZXEgJiBiaV9paWNfZmFzdCB0byA0NDBHWCBiZF9pbmZvIGFzIG5lZWRlZCBmb3IgTGludXgKLQotKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBGZWIgMjAwNDoKLSAgbyA0NDBHWDoKLSAgICAtIEZpeCBQQ0kgSW5kaXJlY3QgYWNjZXNzIGZvciB0eXBlIDEgY29uZmlnIGN5Y2xlcyB3aXRoIHBwYzQ0MC4KLSAgICAtIEFkZCBwaHltb2RlIGZvciA0NDAgZW5ldAotICAgIC0gZml4IHBjaSBwcmUgaW5pdAotICBvIFhQZWRpdGUxSzoKLSAgICAtIENoYW5nZSBib2FyZF9wcmVfaW5pdCB0byBib2FyZF9lYXJseV9pbml0X2YKLSAgICAtIEFkZCB1c2VyIGZsYXNoIHRvIGJ1cyBjb250cm9sbGVyIHNldHVwCi0gICAgLSBGaXggcGNpIHByZSBpbml0Ci0gICAgLSBGaXggaXNfcGNpX2hvc3QgdG8gY2hlY2sgR1BJTyBmb3IgbW9uYXJjaCBiaXQKLSAgICAtIEZvcmNlIHhwZWRpdGUxayB0byBwY2kgY29udmVudGlvbmFsIG1vZGUgKHZpYSAjZGVmaW5lIG9wdGlvbikKLQotKiBQYXRjaCBieSBCcmFkIEtlbXAsIDQgRmViIDIwMDQ6Ci0gIC0gaGFuZGxlIHRoZSBtYWNoaW5lIGNoZWNrIHRoYXQgaXMgZ2VuZXJhdGVkIGR1cmluZyB0aGUgUENJIHNjYW5zCi0gICAgb24gODJ4eCBwcm9jZXNzb3JzLgotICAtIGRlZmluZSB0aGUgcmVnaXN0ZXJzIHVzZWQgaW4gdGhlIElNTVIgYnkgdGhlIFBDSSBzdWJzeXN0ZW0uCi0KLSogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDMgRmViIDIwMDQ6Ci0gIGNwdS9tcGM1eHh4L3N0YXJ0LlM6IGNvcHkgTUJBUiBpbnRvIFNQUjMxMQotCi0qIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAwMyBGZWIgMjAwNDoKLSAgRml4IGNvcHkgJiBwYXN0ZSBlcnJvciBpbiBjcHUvbXBjODI2MC9wY2kuYwotCi0qIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAyNCBKYW4gMjAwNDoKLSAgRml4IHR5cG8gaW4gY3B1L21wYzV4eHgvcGNpX21wYzUyMDAuYwotCi0qIEFkZCBBdXRvLU1ESVggc3VwcG9ydCBmb3IgSU5DQS1JUAotCi0qIFNvbWUgY29kZSBjbGVhbnVwCi0KLSogUGF0Y2ggYnkgSm9zZWYgQmF1bWdhcnRuZXIsIDEwIEZlYiAyMDA0OgotICBGaXhlcyBmb3IgQ29sZEZpcmUgcG9ydAotCi0qIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTEgRmViIDIwMDQ6Ci0gIEZpeCBDRkkgZmxhc2ggZHJpdmVyIHByb2JsZW1zCi0KLSogTWFrZSBzdXJlIHRvIHVzZSBhIGJ1cyBjbG9jayBkaXZpZGVyIG9mIDIgb25seSB3aGVuIHJ1bm5pbmcgVFFNOHh4TQotICBtb2R1bGVzIGF0IENQVSBjbG9jayBmcmVxdWVuY2llcyBhYm92ZSA2NiBNSHouCi0KLSogT3B0aW1pemUgZmxhc2ggcHJvZ3JhbW1pbmcgc3BlZWQgZm9yIExXTU9OIChieSBhbm90aGVyIDEwMCUgOi0pCi0KLSogUGF0Y2ggYnkgSmlhbiBaaGFuZywgMyBGZWIgMjAwNDoKLSAgLSBDaGFuZ2VkIHRoZSBpbmNvcnJlY3QgRkFUMTJCVUZTSVpFCi0gIC0gZGF0YV9iZWdpbiBpbiBmc2RhdGEgY2FuIGJlIG5lZ2F0aXZlLiBDaGFuZ2VkIGl0IHRvIGJlIHNob3J0LgotCi0qIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAzMCBKYW4gMjAwNDoKLSAgMTogLSBib2FyZC9hbHRlcmEvY29tbW9uL2ZsYXNoLmM6Zmxhc2hfZXJhc2UoKToKLSAgICAgICBvIGFsbG93IGludGVycnVwdHMgYmVmb3IgZ2V0X3RpbWVyKCkgY2FsbAotICAgICAgIG8gY2hlY2stdXAgZWFjaCBlcmFzZWQgc2VjdG9yIGFuZCBhdm9pZCB1bmV4cGVjdGVkIHRpbWVvdXRzCi0gICAgIC0gYm9hcmQvYWx0ZXJhL2RrMWMyMC9kazFzMTAuYzpib2FyZF9lYXJseV9pbml0X2YoKToKLSAgICAgICBvIGVuY2xvc2Ugc2V2ZW5zZWdfc2V0KCkgaW4gY3BwIGNvbmRpdGlvbgotICAgICAtIHJlbW92ZSB0aGUgQVNNSSBjb25maWd1cmF0aW9uIGZvciBESzFTMTBfc3RhbmRhcmRfMzIgKG5ldmVyIHByZXNlbnQpCi0gICAgIC0gZml4IHNvbWUgdHlwZWQgaW4gbWlzdGFrZXMgaW4gdGhlIE5JT1MgZG9jdW1lbnRhdGlvbgotICAyOiAtIHNwbGl0IERLMUMyMCBjb25maWd1cmF0aW9uIGludG8gc2V2ZXJhbCBoZWFkZXIgZmlsZXM6Ci0gICAgICAgbyB0d28gbmV3IGZpbGVzIGZvciBlYWNoIE5JT1MgQ1BVIGRlc2NyaXB0aW9uCi0gICAgICAgbyBVLUJvb3QgcmVsYXRlZCBwYXJ0IGlzIHJlbWFpbmluZyBpbiBESzFDMjAuaAotICAzOiAtIHNwbGl0IERLMVMxMCBjb25maWd1cmF0aW9uIGludG8gc2V2ZXJhbCBoZWFkZXIgZmlsZXM6Ci0gICAgICAgbyB0d28gbmV3IGZpbGVzIGZvciBlYWNoIE5JT1MgQ1BVIGRlc2NyaXB0aW9uCi0gICAgICAgbyBVLUJvb3QgcmVsYXRlZCBwYXJ0IGlzIHJlbWFpbmluZyBpbiBESzFTMTAuaAotICA0OiAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTWljcm90cm9uaXggTGludXggRGV2ZWxvcG1lbnQgS2l0Ci0gICAgICAgTklPUyBDUFUgY29uZmlndXJhdGlvbiBhdCB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAotICAgICAgIFN0cmF0aXggRWRpdGlvbiAoREstMVMxMCkKLSAgNTogLSBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEFsdGVyYSBOaW9zIERldmVsb3BtZW50IEtpdCwKLSAgICAgICBTdHJhdGl4IEVkaXRpb24gKERLLTFTMTApCi0gIDY6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBOaW9zIFNlcmlhbCBQZXJpcGhhcmVsIEludGVyZmFjZSAoU1BJKQotICAgICAgIChtYXN0ZXIgb25seSkKLSAgNzogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbW1vbiBVLUJvb3QgU1BJIGZyYW1ld29yayBhdAotICAgICAgIFJUQyBkcml2ZXIgRFMxMzA2Ci0KLSogUGF0Y2ggYnkgUmFodWwgU2hhbmJoYWcsIDI4IEphbiAyMDA0OgotICBGaXggZmxhc2ggcHJvdGVjdGlvbi9sb2NraW5nIGhhbmRsaW5nIGZvciBPTUFQMTYxMCBpbm5vdmF0b3IgYm9hcmQuCi0KLSogUGF0Y2ggYnkgUm9sZiBQZXVrZXJ0LCAyOCBKYW4gMjAwNDoKLSAgZml4IGZsYXNoIHdyaXRlIHByb2JsZW1zIG9uIENTQjIyNiBib2FyZCAod3JpdGUgd2l0aCAzMiBiaXQgYnVzIHdpZHRoKQotCi0qIFBhdGNoZXMgYnkgTWFyayBKb25hcywgMTYgSmFuIDIwMDQ6Ci0gIC0gZml4IHJvdW5kaW5nIGVycm9yIHdoZW4gY2FsY3VsYXRpbmcgYmF1ZHJhdGVzIGZvciBNUEM1MjAwIFBTQ3MKLSAgLSBtYWtlIHN1cmUgQ0ZHX1JBTUJPT1QgYW5kIENGR19MT1dCT09UIGFyZSBub3QgZW5hYmxlZCBhdCB0aGUgc2FtZQotICAgIHRpbWUgd2hpY2ggaXMgbm90IHN1cHBvcnRlZAotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI2IEphbiAyMDA0OgotICBBbGxvdyBiemlwMiBjb21wcmVzc2lvbiBmb3Igc21hbGwgbWVtb3J5IGZvb3RwcmludCBib2FyZHMKLQotKiBQYXRjaCBieSBCcmFkIEtlbXAsIDIxIEphbiAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgQ0ZJIGZsYXNoIGRyaXZlciBmb3IgYm90aCB0aGUgSW50ZWwgYW5kIHRoZSBBTUQKLSAgY29tbWFuZCBzZXRzLgotCi0qIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDIwIEphbiAyMDA0OgotICBGaXggcGNpIGJyaWRnZSBhdXRvIGVudW1lcmF0aW9uIG9mIHNpYmxpbmcgcDJwIGJyaWRnZXMuCi0KLSogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTIgSmFuIDIwMDQ6Ci0gIEFkZCBzb21lIGRlbGF5cyBhcyBuZWVkZWQgZm9yIEludGVsIExYVDk3MUEgUEhZIHN1cHBvcnQKLQotKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMDkgSmFuIDIwMDQ6Ci0gIC0gYXZvaWQgd2FybmluZzogdW51c2VkIHZhcmlhYmxlIGBwaW9wJyBpbiBib2FyZC9hbHRlcmEvY29tbW9uL3NldmVuc2VnLmMKLSAgLSBtYWtlIERLMUMyMCBib2FyZCBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gQVNNSSBjb25mb3JtIHRvCi0gICAgZG9jdW1lbnRhdGlvbgotCi0qIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA5IEphbiAyMDA0OgotCi0gIEFSTSBtZW1vcnkgbGF5b3V0IGZpeGVzOiB0aGUgYWJvcnQtc3RhY2sgaXMgbm93IHNldCB1cCBpbiB0aGUKLSAgY29ycmVjdCBSQU0gYXJlYSwgYW5kIHRoZSBCU1MgaXMgemVyb2VkIG91dCBhcyBpdCBzaG91bGQgYmUuCi0KLSAgRnVydGhlcm1vcmUsIHRoZSBtYWdpYyB2YXJpYWJsZXMgJ2FybWJvb3RfZW5kJyBhbmQgJ2FybWJvb3RfZW5kX2RhdGEnCi0gIG9mIHRoZSBsaW5rZXIgc2NyaXB0cyBhcmUgcmVwbGFjZWQgYnkgJ19fYnNzX3N0YXJ0JyBhbmQgJ19lbmQnLAotICByZXNwLiwgd2hpY2ggaXMgYSBmdXJ0aGVyIHN0ZXAgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5IGRpZmZlcmVuY2VzCi0gIGJldHdlZW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDUFUgYXJjaGl0ZWN0dXJlcy4KLQotKiBQYXRjaCBieSBsaWFuZyBhIGxlaSwgOSBKYW4gMjAwNDoKLSAgRml4IEludGVsIDI4RjEyOEozIElEIGluIGluY2x1ZGUvZmxhc2guaAotCi0qIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA5IEphbiAyMDA0OgotICBhZGQgc3VwcG9ydCBmb3IgVEIwMjI5IGJvYXJkIChORUMgVlI0MTMxIE1JUFMgcHJvY2Vzc29yKQotCi0qIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTIgRGVjIDIwMDM6Ci0gIGNoYW5nZWQgZXh0ZXJuIF9faW5saW5lX18gaW50byBzdGF0aWMgX19pbmxpbmVfXyBpbgotICBpbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9zd2FiLmgKLQotKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAzMCBEZWMgMjAwMzoKLSAgQWRkIHN1cHBvcnQgZm9yIElCTSBQUEM0NDBHWC4gTXVsdGlwbGUgRU1BQyBFdGhlcm5ldCBkZXZpY2VzLAotICBzZWxlY3QgTURJIHBvcnQgYmFzZWQgb24gZW5hYmxlZCBFTUFDIGRldmljZS4KLSAgQWRkIHN1cHBvcnQgZm9yIFhFUyBJbmMgPGh0dHA6Ly93d3cueGVzLWluYy5jb20+IFhQZWRpdGUxMDAwIDQ0MEdYCi0gIGJhc2UgUHJQTUMgYm9hcmQuCi0KLSogUGF0Y2ggYnkgV29sdGVyIEthbXBodWlzLCAxNSBEZWMgMjAwMzoKLSAgbWFkZSBDT05GSUdfU0lMRU5UX0NPTlNPTEUgdXNhYmxlIG9uIGFsbCBhcmNoaXRlY3R1cmVzCi0KLSogRGlzYWJsZSBkYXRlIGNvbW1hbmQgb24gVFFNODY2TSAtIHRoZXJlIGlzIG5vIFJUQyBvbiBNUEM4NjYKLQotKiBGaXggdmFyaWFibGUgQ1BVIGNsb2NrIGZvciBNUEM4NTkvODY2IHN5c3RlbXMgZm9yIGxvdyBDUFUgY2xvY2tzCi0KLSogSW1wbGVtZW50IGFkYXB0aXZlIFNEUkFNIHRpbWluZyBjb25maWd1cmF0aW9uIGJhc2VkIG9uIGFjdHVhbCBDUFUKLSAgY2xvY2sgZnJlcXVlbmN5IGZvciBJTkNBLUlQOyBmaXggcHJvYmxlbSB3aXRoIGJvYXJkIGhhbmdpbmcgd2hlbgotICBzd2l0Y2hpbmcgZnJvbSAxNTBNSHogdG8gMTAwTUh6Ci0KLSogQWRkIFBDTUNJQSBDUyBzdXBwb3J0IGZvciBCTVMyMDAzIGJvYXJkCi0KLSogQWRkIHZhcmlhYmxlIENQVSBjbG9jayBmb3IgTVBDODU5Lzg2NiBzeXN0ZW1zIChzbyBmYXIgb25seSBUUU04NjZNKToKLSAgc2VlIGRvYy9SRUFETUUuTVBDODY2IGZvciBkZXRhaWxzOwotICBpbXBsZW1lbnQgd29ya2Fyb3VuZCBmb3IgIlNJVTQiIGFuZCAiU0lVOSIgc2lsaWNvbiBidWdzIG9uIE1QQzg2NjsKLSAgY2FsY3VsYXRlIENQVSBjbG9jayBmcmVxdWVuY3kgZnJvbSBQTEwgcmVnaXN0ZXIgdmFsdWVzLgotCi0qIEFkZCBzdXBwb3J0IGZvciAxMjggTUIgUkFNIG9uIFRRTTh4eEwvTSBtb2R1bGVzCi0KLSogRml4IFBTLzIga2V5Ym9hcmQgcHJvYmxlbSBjYXVzZWQgYnkgc3RhdGljYWxseSBpbml0aWFsaXplZCB2YXJpYWJsZQotICBwb2ludGluZyB0byBhIGxvY2F0aW9uIGluIGZsYXNoCi0KLSogRml4IElOQ0EtSVAgY2xvY2sgY2FsY3VsYXRpb246IDQwMC8zID0gMTMzLjMgTUh6LCBub3QgMTMwLgotCi0qIFRoZSBQUy8yIG11eCBvbiB0aGUgQk1TMjAwMyBib2FyZCBuZWVkcyA0NTAgbXMgYWZ0ZXIgcG93ZXIgb24KLSAgYmVmb3JlIHdlIGNhbiBhY2Nlc3MgaXQ7IGFkZCBkZWxheSBpbiBjYXNlIHdlIGFyZSBmYXN0ZXIgKHdpdGggbm8KLSAgQ0YgY2FyZCBpbnNlcnRlZCkKLQotKiBDbGVhbnVwIG9mIHNvbWUgaW5pdCBmdW5jdGlvbnMKLQotKiBNYWtlIHN1cmUgU0NDIEV0aGVybmV0IGlzIGFsd2F5cyBzdG9wcGVkIGJ5IHRoZSB0aW1lIHdlIGJvb3QgTGludXgKLSAgdG8gYXZvaWQgTGludXggY3Jhc2hlcyBieSBlYXJseSBwYWNrZXRzIGNvbWluZyBpbi4KLQotKiBBY2NlbGVyYXRlIGZsYXNoIGFjY2Vzc2VzIG9uIExXTU9OIGJvYXJkIGJ5IHVzaW5nIGJ1ZmZlcmVkIHdyaXRlcwotCi0qIEZpeCB0eXBvIGluIE1ha2VmaWxlOwotICBmaXggcHJvYmxlbSB3aXRoIFBBUlROVU0gZGV0ZWN0aW9uCi0KLSogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDA5IEphbiAyMDA0OgotICAtIGFkZCBSVEMgc3VwcG9ydCBmb3IgTVBDNTIwMCBiYXNlZCBib2FyZHMgKHJlcXVpcmVzIFJUQ19YVEFMKQotCi0qIEFkZCBzdXBwb3J0IGZvciBJREUgTEVEIG9uIEJNUzIwMDMgYm9hcmQKLSAgKGV4Y2x1c2l2ZSB3aXRoIHN0YXR1cyBMRUQhKQotCi0qIEFkZCBzdXBwb3J0IGZvciBQUy8yIGtleWJvYXJkICh1c2VkIHdpdGggUFMvMiBtdWx0aXBsZXhvciBvbgotICBCTVMyMDAzIGJvYXJkKQotCi0qIFBhdGNoZXMgYnkgUmVpbmhhcmQgTWV5ZXIsIDQgSmFuIDIwMDQgKyA3IEphbiAyMDA0OgotICBBZGQgY29tbW9uIGZpbGVzIGZvciAiZW1rIiBib2FyZHMKLQotKiBBZGQgYSBjb21tb24gZ2V0X3JhbV9zaXplKCkgZnVuY3Rpb24gYW5kIG1vZGlmeSB0aGUgdGhlCi0gIGJvYXJkLXNwZWNpZmljIGZpbGVzIHRvIGludm9rZSB0aGF0IGNvbW1vbiBpbXBsZW1lbnRhdGlvbi4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDEuMC4xOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIFNldCBkZWZhdWx0IGNsb2NrIGZvciBJTkNBLUlQIHRvIDE1MCBNSHoKLQotKiBNYWtlIEJNUzIwMDMgdXNlIGEgc2VwYXJhdGUgY29uZmlnIGZpbGUgdG8gYXZvaWQgI2lmZGVmIG1lc3M7Ci0gIGFkZCBJMkMgc3VwcG9ydDsgYWRkIHN1cHBvcnQgZm9yIERTMTMzNyBSVEMKLQotKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgIGZvciBCTVMyMDAzIGJvYXJkCi0KLSogQWRkIHN1cHBvcnQgZm9yIHN0YXR1cyBMRUQgb24gQk1TMjAwMyBib2FyZAotCi0qIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDIgSmFuIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciB0aGUgTmlvcyBBY3RpdmUgU2VyaWFsIE1lbW9yeSBJbnRlcmZhY2UgKEFTTUkpCi0gIG9uIEN5Y2xvbmUgZGV2aWNlcwotCi0qIFBhdGNoIGJ5IEFuZHJlYSBNYXJzb24sIDE2IERlYyAyMDAzOgotICBBZGQgc3VwcG9ydCBmb3IgdGhlIFBQQ2hhbWVsZW9uIE1FIGFuZCBISSBtb2R1bGVzCi0KLSogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjIgRGVjIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBEVUVUIEFEUyBib2FyZCAoTVBDODd4Lzg4eCkKLQotKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IERlYyAyMDAzOgotICBhZGQgc3VwcG9ydCBmb3IgY3JhbWZzICh1c2VzIEpGRlMyIGNvbW1hbmQgaW50ZXJmYWNlKQotCi0qIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAxMSBEZWMgMjAwMzoKLSAgLSBtb3JlIGRvY3VtZW50YXRpb24gZm9yIE5JT1MgcG9ydAotICAtIG5ldyBzdHJ1Y3Qgbmlvc19waW9fdCwgc3RydWN0IG5pb3Nfc3BpX3QKLSAgLSBSZWNvbmZpZ3VyYXRpb24gZm9yIE5JT1MgRGV2ZWxvcG1lbnQgS2l0IERLMUMyMDoKLSAgICBvIG1vdmUgYm9hcmQgcmVsYXRlZCBjb2RlIGZyb20gYm9hcmQvZGsxYzIwCi0gICAgICB0byBib2FyZC9hbHRlcmEvZGsxYzIwCi0gICAgbyBjcmVhdGUgYSBuZXcgY29tbW9uIHNvdXJjZSBwYXRoIGJvYXJkL2FsdGVyYS9jb21tb24KLSAgICAgIGFuZCBtb3ZlIGdlbmVyaWMgZmxhc2ggYWNjZXNzIHN0dWZmIGludG8gaXQKLSAgICBvIGNoYW5nZS9leHBhbmQgY29uZmlndXJhdGlvbiBmaWxlIERLMUMyMC5oCi0gIC0gQWRkIHN1cHBvcnQgZm9yIE5JT1MgRGV2ZWxvcG1lbnQgS2l0IERLMVMxMAotICAtIEFkZCBzdGF0dXMgTEVEIHN1cHBvcnQgZm9yIE5JT1Mgc3lzdGVtcwotICAtIEFkZCBkdWFsIDctc2VnbWVudCBMRUQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5JT1MgRGV2S2l0cwotCi0qIFBhdGNoIGJ5IFJvbmVuIFNoaXRyaXQsIDEwIERlYyAyMDAzOgotICBBZGQgc3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgREI2NDM2MCAvIERCNjQ0NjAgZGV2ZWxvcG1lbnQgYm9hcmRzCi0KLSogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTAgRGVjIDIwMDM6Ci0gIGZpeCBkZXBlbmRlbmN5IHByb2JsZW0gaW4gZXhhbXBsZXMvTWFrZWZpbGUKLQotKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgOCBEZWMgMjAwMwotICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgUEFUSSBib2FyZCAoTVBDNTU1KQotICAtIGFkZCBTUEkgc3VwcG9ydCBmb3IgdGhlIE1QQzV4eAotCi0qIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA4IERlYyAyMDAzOgotICBhZGQgY29uZmlndXJhdGlvbiBvcHRpb25zIENPTkZJR19TRVJJQUxfVEFHIGFuZCBDT05GSUdfUkVWSVNJT05fVEFHCi0gIHRvIHBhc3MgQVRBR19TRVJJQUwgYW5kIEFUQUdfUkVWSVNJT04sIHJlc3AuLCB0byB0aGUgQVJNIHRhcmdldDsKLSAgY2xlYW51cCBzb21lIHJlZHVuZGFuZCAjZGVmaW5lcwotCi0qIFBhdGNoIGJ5IEFuZHLpIFNjaHdhcnosIDggRGVjIDIwMDM6Ci0gIGZpeGVzIGZvciBEYXZpY29tIERNOTEwMkEgRXRoZXJuZXQgQ2hpcCAoI2RlZmluZSBDT05GSUdfVFVMSVBfRklYX0RBVklDT00pOgotICAtIFRYIGFuZCBSWCBkZXNrcmlwdG9ycyBtdXN0IGJlIHF1YWQtd29yZCBhbGlnbmVkCi0gIC0gZG9lcyBub3Qgd29yayB3aXRoIG9ubHkgb25lIFRYIGRlc2tyaXB0b3IKLSAgLSBzdGFuZGFyZCByZXNldCBtZXRob2QgZG9lcyBub3Qgd29yawotCi0qIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IERlYyAyMDAzOgotICBhZGQgUlRMODEzOSBldGhlcm5ldCBkcml2ZXIKLQotKiBQYXRjaGVzIGJ5IEVkIE9rZXJzb24sIDA3IERlYyAyMDAzOgotICAtIGZpeCBldGhlcm5ldCBmb3IgdGhlIEFVMXgwMCBwcm9jZXNzb3JzIGluIGxpdHRsZS1lbmRpYW4gbW9kZS4KLSAgLSBleHRlbmQgbWVtc2V0dXAuUyBmb3IgdGhlIEFVMXgwMCBwcm9jZXNzb3JzIGluIEJFIGFuZCBMRSBtb2RlcwotCi0qIE1pbm9yIGNvZGUgY2xlYW51cCAoY29kaW5nIHN0eWxlKQotCi0qIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAzMCBEZWMgMjAwMzoKLSAgLSBjcHUvbXBjNXh4eC9mZWMuYzogYWRkZWQgQ09ORklHX1BIWV9BRERSLCBhZGRlZCBDT05GSUdfUEhZX1RZUEUsCi0gIC0gYWRkZWQgQ09ORklHX1BIWV9BRERSIHRvIGluY2x1ZGUvY29uZmlncy9JY2VDdWJlLmgsCi0gIC0gdHVybmVkIGRlYnVnIHByaW50IG9mIFBIWSByZWdpc3RlcnMgaW50byBhIGZ1bmN0aW9uIChjYWxsZWQgaW4gdHdvIHBsYWNlcykKLSAgLSBhZGRlZCBzdXBwb3J0IGZvciBFTUsgTVBDNTIwMCBiYXNlZCBtb2R1bGVzCi0KLSogRml4IE1QQzh4eCBQTFBSQ1JfTUZEX1NISUZUIHR5cG8KLQotKiBBZGQgc3VwcG9ydCBmb3IgVFFNODY2TSBtb2R1bGVzCi0KLSogRml4ZXMgZm9yIFRRTTg1NU0gd2l0aCA0IE1CIGZsYXNoIChBbTI5REwxNjMgPSBfbm9fIG1pcnJvciBiaXQgZmxhc2gpCi0KLSogRml4IGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzCi0KLSogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDI4IERlYyAyMDAzOgotICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBUT1A1MjAwIGJvYXJkCi0KLSogTWFrZSBDUFUgY2xvY2sgb24gSUNBLUlQIGJvYXJkIGNvbnRyb2xsYWJsZSBieSBhICJjcHVjbGsiCi0gIGVudmlyb25tZW50IHZhcmlhYmxlIHdoaWNoIGNhbiBzZXQgdG8gIjEwMCIsICIxMzMiLCBvciAiMTUwIi4gVGhlCi0gIENQVSBjbG9jayB3aWxsIGJlIGNvbmZpZ3VyZWQgYWNjb3JkaW5nbHkgdXBvbiBuZXh0IHJlYm9vdC4gT3RoZXIKLSAgdmFsdWVzIGFyZSBpZ25vcmVkLiBJbiBjYXNlIG9mIGFuIGludmFsaWQgb3IgdW5kZWZpbmVkICJjcHVjbGsiCi0gIHZhbHVlLCB0aGUgY29tcGlsZS10aW1lIGRlZmF1bHQgQ1BVIGNsb2NrIHNwZWVkIHdpbGwgYmUgdXNlZC4KLQotKiBFbmFibGUgUXVhZC1VQVJUIG9uIEJNUzIwMDMgYm9hcmQgKGluaXRpYWxpemUgdGhlIFBDTUNJQSBtZW1vcnkKLSAgd2luZG93IHRoYXQgaXMgdXNlZCB0byBhY2Nlc3MgdGhlIFVBUlQgcmVnaXN0ZXJzIGJ5IHRoZSBMaW51eCBkcml2ZXIpCi0KLSogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDIwIERlYyAyMDAzOgotICBGaXggY2xvY2sgY2FsY3VsYXRpb24gZm9yIHRoZSBNUEM1MjAwIGZvciBoaWdoZXIgY2xvY2sgZnJlcXVlbmNpZXMKLSAgKGFib3ZlIDIqKjMyIC8gMTAgPSA0MjkuNSBNSHopLgotCi0qIEZpeCBDT05GSUdfUExMX1BDSV9UT19NRU1fTVVMVElQTElFUiBkaXZpZGVyIGVycm9yIGluIFNQODI0MCBjb25maWd1cmF0aW9uCi0KLSogRml4IEljZUN1YmUgQ0xLSU4gY29uZmlndXJhdGlvbiAoaXQncyAzMy4wMDAwMDBNSHopCi0KLSogQWRkIG5ldyBjb25maWd1cmF0aW9uIGZvciBJY2VDdWJlIGJvYXJkIHdpdGggRERSIG1lbW9yeQotCi0qIFVwZGF0ZSBUUkFCIG1lbW9yeSBjb25maWd1cmF0aW9ucwotCi0qIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBJTkNBLUlQIGJvYXJkCi0KLSogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDA5IERlYyAyMDAzOgotICAtIEJVQklOR0E0MDVFUDogY2hhbmdlZCBmbGFzaCBkcml2ZXIgdG8gcHJvdGVjdCB0b3Agc2VjdG9yIGNvbnRhaW5pbmcKLSAgICBmaXJzdCBpbnN0cnVjdGlvbi4KLSAgLSBCVUJJTkdBNDA1RVA6IGNvbmZpZ3VyZWQgImVlcHJvbSIgY29tbWFuZCB0byBhY2Nlc3MgYm9vdCBjb25maWcgRUVQUk9NLgotICAtIEJVQklOR0E0MDVFUDogZml4ZWQgUExMIGluaXQgKGluaXQgY2hpcCBzZWxlY3RzIGJlZm9yZSBGUEdBL05WUkFNIGFjY2VzcykuCi0gIC0gNDA1RVA6IGZpeGVkIFNQRC1iYXNlZCBTRFJBTSBpbml0IChvbmx5IHVzZSBiYW5rcyAwIGFuZCAxKS4KLSAgLSA0MDVFUDogYWRkZWQvZml4ZWQgc3VwcG9ydCBmb3IgInJlZ2luZm8iIGNvbW1hbmQuCi0gIC0gNHh4OiByZW1vdmVkIHNwdXJpb3VzIE1JSSBlcnJvciBtZXNzYWdlcyBvbiAibWlpIGluZm8iIGNvbW1hbmQuCi0KLSogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMjggTm92IDIwMDM6Ci0gIGFkZCBzdXBwb3J0IGZvciBDb2xkRmlyZSBDUFUKLSAgYWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIE01MjcyQzMgYW5kIE01MjgyRVZCIGJvYXJkcwotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI0IE5vdiAyMDAzOgotICAtIGFkZCBhIHJldHVybiB2YWx1ZSBmb3IgdGhlIGZwZ2EgY29tbWFuZAotICAtIGFkZCBpZGVfcHJlaW5pdCgpIGZ1bmN0aW9uIGNhbGxlZCBpbiBpZGVfaW5pdCBpZiBDT05GSUdfSURFX1BSRUlOSVQKLSAgICBpcyBkZWZpbmVkLiBJZiBpZGVfcHJlaW5pdCBmYWlscywgaWRlX2luaXQgaXMgYWJvcnRlZC4KLSAgLSBmaXggYW4gZW5kaWFuZXNzIHByb2JsZW0gaW4gZmF0LmgKLQotKiBQYXRjaCBieSBXb2x0ZXIgS2FtcGh1aXMsIDA1IERlYyAyMDAzOgotICBBZGQgc3VwcG9ydCBmb3IgU05NQydzIFFTODUwL1FTODIzL1FTODYwVCBib2FyZHMKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAzIERlYyAyMDAzOgotICAicmV2aXZlIiBVLUJvb3Qgc3VwcG9ydCBmb3Igb2xkIE1vdG9yb2xhIE1QQzg2MEFEUyBib2FyZAotCi0qIFBhdGNoIGJ5IENhbShpbG8/KSwgMDMgRGVjIDIwMDM6Ci0gIG1ha2UgZXhhbXBsZXMgYnVpbGQgZXZlbiB3aXRoIGJyb2tlbiBNb250YXZpc3RhIG9iamNvcHkKLQotKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjcgTm92IDIwMDM6Ci0gIGZpeCBjb252ZXJzaW9uIHByb2JsZW0gd2l0aCAiYm9vdHJldHJ5IiBldmlyb25tZW50IHZhcmlhYmxlCi0KLSogUGF0Y2ggYnkgQW5kcmUgU2Nod2FyeiwgMjQgTm92IDIwMDM6Ci0gIGFkZCBzdXBwb3J0IGZvciBtdmJsdWUgKG12Qmx1ZUxZTlggYW5kIG12Qmx1ZUJPWCkgYm9hcmRzCi0KLSogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE5vdiAyMDAzOgotICBzZXQgWk1JSSBicmlkZ2Ugc3BlZWQgb24gNDQwCi0KLSogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTcgTm92IDIwMDM6Ci0gIEZpeCBtaXNtYXRjaGVkICNpZmRlZiAvICNlbmRpZiBpbiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaAotCi0qIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAxNCBOb3YgMjAwMzoKLSAgLSBib2FyZC9tcGwvY29tbW9uL2NvbW1vbl91dGlsLmMKLSAgICAqIGltcGxlbWVudCBzdXBwb3J0IGZvciBCWklQMiBjb21wcmVzc2VkIGltYWdlcwotICAgICogdmFyaW91cyBjbGVhbnVwcyAocHJpbnRmIC0+IHB1dHMsIC4uLikKLSAgLSBib2FyZC9tcGwvY29tbW9uL2ZsYXNoLmMKLSAgICAqIHJlcG9ydCBjb3JyZWN0IGVycm9ycyB0byB1cHBlciBsYXllcnMKLSAgICAqIGNoZWNrIHRoZSBlcmFzZSBmYWlsIGFuZCBWUFAgbG93IGJpdHMgaW4gc3RhdHVzIHJlZwotICAtIGJvYXJkL21wbC92Y21hOS9jbWRfdmNtYTkuYwotICAtIGJvYXJkL21wbC92Y21hOS9mbGFzaC5jCi0gICAgKiB2YXJpb3VzIGNsZWFudXBzIChwcmludGYgLT4gcHV0cywgLi4uKQotICAtIGNvbW1vbi9jbWRfdXNiLmMKLSAgICAqIGZpeCB0eXBvIGluIGNvbW1lbnQKLSAgLSBjcHUvYXJtOTIwdC91c2Jfb2hjaS5jCi0gICAgKiBzdXBwb3J0IGZvciBTM0MyNDEwIGlzIG1pc3NpbmcgaW4gI2lmIGxpbmUKLSAgLSBkcml2ZXJzL2NzODkwMC5jCi0gICAgKiByZWluaXQgc29tZSByZWdpc3RlcnMgaW4gY2FzZSBvZiBlcnJvciAoY2FibGUgbWlzc2luZywgLi4uKQotICAtIGZzL2ZhdC9mYXQuYwotICAgICogc3VwcG9ydCBmb3IgVVNCL01NQyBkZXZpY2VzIGlzIG1pc3NpbmcgaW4gI2lmIGxpbmUKLSAgLSBpbmNsdWRlL2NvbmZpZ3MvTUlQNDA1LmgKLSAgLSBpbmNsdWRlL2NvbmZpZ3MvUElQNDA1LmgKLSAgICAqIGVuYWJsZSBCWklQMiBzdXBwb3J0Ci0gICAgKiBlbmxhcmdlIG1hbGxvYyBzcGFjZSB0byAxTWlCIGJlY2F1c2Ugb2YgQlpJUDIgc3VwcG9ydAotICAtIGluY2x1ZGUvY29uZmlncy9WQ01BOS5oCi0gICAgKiBlbmFibGUgQlpJUDIgc3VwcG9ydAotICAgICogZW5sYXJnZSBtYWxsb2Mgc3BhY2UgdG8gMU1pQiBiZWNhdXNlIG9mIEJaSVAyIHN1cHBvcnQKLSAgICAqIGVuYWJsZSBVU0Igc3VwcG9ydAotICAtIGxpYl9hcm0vYXJtbGludXguYwotICAgICogY2hhbmdlIGNhbGxpbmcgY29udmVudGlvbiBvZiBBUk0gTGludXgga2VybmVsIGFzCi0gICAgICBkZXNjcmliZWQgb24gaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9ib290aW5nLnBocAotCi0qIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTQgTm92IDIwMDM6Ci0gIFNwbGl0IGRiYXUxeDAwIGludG8gZGJhdTEwMDAsIGRiYXUxMTAwIGFuZCBkYmF1MTUwMCBjb25maWdzIHRvCi0gIHN1cHBvcnQgYWxsIHRoZXNlIEFNRCBib2FyZHMuCi0KLSogUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCAxNCBOb3YgMjAwMzoKLSAgV29ya2Fyb3VuZCBmb3IgbWlwcyBhdTF4MDAgcGh5c2ljYWwgbWVtb3J5IGFjY2Vzc2VzICh0aGUgYXUxeDAwCi0gIHVzZXMgYSAzNiBiaXQgYnVzIGludGVybmFsbHkgYW5kIGNhbm5vdCBhY2Nlc3MgcGh5c2ljYWwgbWVtb3J5Ci0gIGRpcmVjdGx5LiBVc2UgdGhlIHVuY2FjaGVkIFNEUkFNIGFkZHJlc3MgaW5zdGVhZCBvZiB0aGUgcGh5c2ljYWwKLSAgb25lLikKLQotKiBQYXRjaCBieSBYdWUgTGlnb25nIChKb2UpLCAxMyBOb3YgMjAwMzoKLSAgYWRkIFJlYWx0ZWsgODAxOSBldGhlcm5ldCBkcml2ZXIKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMyBOb3YgMjAwMzoKLSAgTVBDODI2eEFEUy9QUTJGQURTICBjbGVhbnVwCi0KLSogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTIgTm92IDIwMDM6Ci0gIFVwZGF0ZSBSRUFETUUgdG8gbWFyayB0aGUgUE9SVElPIGNvbW1hbmRzIG5vbi1zdGFuZGFyZAotCi0qIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDEyIE5vdiAyMDAzOgotICB1cGRhdGUgZm9yIGZvciBBdG1lbCBBVDkxUk05MjAwREsgZGV2ZWxvcG1lbnQga2l0OgotICAtIHN1cHBvcnQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBEYXRhRmxhc2gKLSAgLSBBdG1lbCBEYXRhRmxhc2ggQVQ0NURCMTI4MiBzdXBwb3J0Ci0KLSogUGF0Y2ggYnkgSmVmZiBDYXJyLCAxMSBOb3YgMjAwMzoKLSAgYWRkIHN1cHBvcnQgZm9yIG5ldyB2ZXJzaW9uIG9mIDgyNzAgcHJvY2Vzc29ycwotCi0qIFBhdGNoZXMgYnkgR2VvcmdlIEcuIERhdmlzLCAwNSBOb3YgMjAwMzoKLSAgLSBvbmx5IHBhc3MgdGhlIEFSTSBsaW51eCBpbml0cmQgdGFnIHRvIHRoZSBrZXJuZWwgd2hlbiBhbiBpbml0cmQKLSAgICBpcyBhY3R1YWxseSBwcmVzZW50Ci0gIC0gdXBkYXRlIG9tYXAxNTEwaW5uIGNvbmZpZ3VyYXRpb24gZmlsZQotCi0qIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAzIE5vdiAyMDAzOgotICAtIG1vcmUgZW5kaWFuZXNzIGZpeGVzIGZvciBMQU45MUMxMTEgZHJpdmVyCi0gIC0gQ0ZHX0haIGNvbmZpZ3VyYXRpb24gcGF0Y2ggZm9yIE5JT1MgQ3ljbG9uZSBib2FyZAotCi0qIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjggT2N0IDIwMDM6Ci0gIGZpeCBQSFlfSU5UX1JFRyB2cy4gUEhZX01BU0tfUkVHIGJ1ZyBpbiBkcml2ZXJzL3NtYzkxMTExLmMKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMCBPY3QgMjAwMzoKLSAgLSBtYWtlICJtaWkgaW5mbyA8YWRkcj4iIHNob3cgaW5mb3IgZm9yIFBIWSBhdCAiYWRkciIgb25seQotICAtIEVuZGlhbiBmaXggZm9yIG1paXBoeV9pbmZvKCkKLQotKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDE5IFNlcCAyMDAzOgotICBNb3ZlIG1vc3Qgb2YgdGhlIHRpbWVyIGludGVycnVwdCByZWxhdGVkIFBQQyBjb2RlIHRvIHBwY19saWIvaW50ZXJydXB0cy5jCi0KLSogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTcgU2VwIDIwMDM6Ci0gIEJyaW5nIEFSTSBtZW1vcnkgbGF5b3V0IGluIHN5bmMgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbjoKLSAgc3RhY2sgYW5kIG1hbGxvYy1oZWFwIGFyZSBub3cgbG9jYXRlZCBfYmVsb3dfIHRoZSBVLUJvb3QgY29kZQotCi0qIEFjY2VsZXJhdGUgYm9vdGluZyBvbiBUUkFCIGJvYXJkOiByZWFkIGFuZCBjaGVjayAgYXV0b3VwZGF0ZQlpbWFnZQotICBoZWFkZXJzIGZpcnN0IGluc3RlYWQgb2YgYWx3YXlzIHJlYWRpbmcgdGhlIHdob2xlIGltYWdlcy4KLQotKiBGaXggdHlwZSBpbiBNUEM1WFhYIGNvZGUgKHBvaW50ZWQgb3V0IGJ5IFZpY3RvciBXcmVuKQotCi0qIEVuYWJsZWQgcGFzc3dvcmQgY2hlY2sgb24gUk1VIGJvYXJkCi0KLSogRml4IGNvbmZpZ3VyYXRpb24gcHJvYmxlbSB3aXRoIEljZUN1YmUgaW4gTE9XQk9PVCBjb25maWd1cmF0aW9uOgotICBlbnZyaW9ubWVudCBnb3QgZW1iZWRkZWQsIGNvcnJ1cHRpbmcgdGhlIGltYWdlIGxheW91dC4KLQotKiBGaXggTkVDIGRpc3BsYXkgbmFtZXMgKGl0J3MgNjQ0MCBbZm9yIDY0MHg0ODBdLCBub3QgNjY0MCkuCi0KLSogQWRkZWQgQk1TMjAwMyBib2FyZAotICBhZGQgc3VwcG9ydCBmb3IgTkVDIE5MNjQ0OEJDMzMtNTQuIDEwLjQiLCA2NDB4NDgwIFRGVCBkaXNwbGF5Ci0KLSogRml4IGZsYXNoIGRyaXZlciBmb3IgVFJBQiBib2FyZCAobXVzdCB1c2UgVW5sb2NrIEJ5cGFzcyBSZXNldAotICBjb21tYW5kIHRvIGV4aXQgVW5sb2NrIEJ5cGFzcyBNb2RlKTsgYWRqdXN0IHRpbWluZ3MgZm9yIGZsYXNoLCBTUkFNCi0gIGFuZCBDUExECi0KLSogVXNlICItZlBJQyIgaW5zdGVhZCBvZiAiLW1yZWxvY2F0YWJsZSIgdG8gcHJldmVudCBwcm9ibGVtcyB3aXRoCi0gIHJlY2VudCB0b29scwotCi0qIEFkZCBjaGVja3N1bSB2ZXJpZmljYXRpb24gdG8gJ2ltbHMnIGNvbW1hbmQKLQotKiBBZGQgYmRfaW5mbyBmaWVsZHMgbmVlZGVkIGZvciA0eHggTGludXggSTJDIGRyaXZlcgotCi0qIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDQgTm92LiAyMDAzOgotICBGaXggZXJyb3IgaW4gY21kX3ZmZC5jIChUUkFCIGJvYXJkOiAidmZkIC8xIiBzaG93cyBub3cgb25seSBvbmUgQml0bWFwKQotCi0qIFByaW50IHVzZWQgbmV0d29yayBpbnRlcmZhY2Ugd2hlbiBDT05GSUdfTkVUX01VTFRJIGlzIHNldAotCi0qIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDI4IE9jdCAyMDAzOgotICBBZGQgbG93IGJvb3Qgc3VwcG9ydCBmb3IgTVBDNTIwMAotCi0qIEZpeCBwcm9ibGVtIHdpdGggZHVhbCBQQ01DSUEgc3VwcG9ydCAoTlNDVSkKLQotKiBGaXggTVBDNTIwMCBJMkMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDEuMC4wOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIEZpeCBwYXJhbWV0ZXIgcGFzc2luZyB0byBzdGFuZGFsb25lIGltYWdlcyB3aXRoIGJvb3RtIGNvbW1hbmQKLQotKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMzAgT2N0IDIwMDM6Ci0gIEZpeCBidWlsZCBlcnJvcnMgZm9yIGl4ZHA0MjUgYm9hcmQKLQotKiBQYXRjaCBieSBEYXZpZCBNLiBIb3JuLCAyOSBPY3QgMjAwMzoKLSAgRml4ZXMgdG8gYnVpbGQgdW5kZXIgQ1lHV0lOCi0KLSogR2V0IEljZUN1YmUgTUdUNTEwMCB3b3JraW5nIChhZ2FpbikKLQotKiBGaXggcHJvYmxlbXMgaW4gbWVtb3J5IHRlc3Qgb24gc29tZSBib2FyZHMgKHdoaWNoIHdhcyBub3QKLSAgbm9uLWRlc3RydWN0aXZlIGFzIGludGVuZGVkKQotCi0qIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAyOCBPY3QgMjAwMzoKLSAgQ2hhbmdlIGZzL2ZhdC9mYXQuYyB0byBwdXQgSS9PIGJ1ZmZlcnMgaW4gQlNTIGluc3RlYWQgb24gdGhlIHN0YWNrCi0gIHRvIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3cgb24gQVJNIHN5c3RlbXMKLQotKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI4IE9jdCAyMDAzOgotICBmaXggaW5pdCBzZXF1ZW5jZSBlcnJvciBmb3IgTklPUyBwb3J0Ci0KLSogQWxsb3cgbG93ZXJjYXNlIHNwZWxsaW5nIGZvciBJY2VDdWJlXzUyMDA7IHN1cHBvcnQgTVBDNTIwMExJVEUgbmFtZQotCi0qIEFkZCBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSB0byBUUkFCIGNvbmZpZ3VyYXRpb24KLQotKiBQYXRjaCBieSBYaWFvIFhpYW5naHVhLCAyMyBPY3QgMjAwMzoKLSAgc21hbGwgcGF0Y2ggZm9yIG1wYzg1eHgKLQotKiBGaXggc21hbGwgcHJvYmxlbSBpbiBNUEM1MjAwIEkyQyBkcml2ZXIKLQotKiBGaXggRkNDMyBzdXBwb3J0IG9uIEFUQyBib2FyZAotCi0qIENvcnJlY3QgaGVhZGVyIHByaW50aW5nIGZvciBtdWx0aS1pbWFnZSBmaWxlcyBpbiBkb19ib290bSgpCi0KLSogTWFrZSBDT05GSUdfU0lMRU5UX0NPTlNPTEUgd29yayB3aXRoIENPTkZJR19BVVRPQk9PVF9LRVlFRAotCi0qIEZpeCBQQ0kgcHJvYmxlbXMgb24gUFBDaGFtZWxlb24gYm9hcmQKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxOCBPY3QgMjAwMzoKLSAgRml4IEFUOTFSTTkyMDAgZXRoZXJuZXQgZHJpdmVyCi0KLSogUGF0Y2ggYnkgTnllIExpdSwgMTcgT2N0IDIwMDM6Ci0gIEZpeCB0eXBvIGluIGluY2x1ZGUvbXBjOHh4LmgKLQotKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxNiBPY3QgMDM6Ci0gIEZpeGVzIGZvciBjcHUvYXJtOTI1L2ludGVycnVwdC5jCi0gIC0gSW5pdGlhbGl6ZSB0aW1lc3RhbXAgJiBsYXN0ZGVjIHZhcnMuCi0gIC0gZml4IHRpbWVzdGFtcCBvdmVyZmxvd3MuCi0gIC0gZml4IGxhc3RkZWMgb3ZlcmZsb3cuCi0gIC0gc21hcnRlciBub3JtYWxpemF0aW9uIHRvIGFsbG93IHVkZWxheSgpIGJlbG93IDFtcyB0byB3b3JrLgotCi0qIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMTYgT2N0Ci0gIGFkZCBuZXR3b3JraW5nIHN1cHBvcnQgZm9yIHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCi0gIEN5Y2xvbmUgRWRpdGlvbiAoREstMUMyMCkKLQotKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTQgT2N0IDIwMDM6Ci0gIGFkZCBoaW50IGFib3V0IGRvYy9SRUFETUUuc2lsZW50IHRvIFJFQURNRSBmaWxlCi0KLSogQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBOU0NVCi0KLSogRml4IFBDSSBwcm9ibGVtcyBvbiBQUENoYW1lbGVvbkVWQgotCi0qIFRSQUIgYXV0by11cGRhdGU6IEJhc2UgZGVjaXNpb24gaWYgd2UgaGF2ZSB0byBzdHJpcCB0aGUgaW1hZ2UKLSAgaGVhZGVyIG9uIGltYWdlIHR5cGUgYXMgZW5jb2RlZCBpbiB0aGUgaGVhZGVyCi0gIChpbmNsdWRlIGltYWdlIHR5cGUgcGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTcgT2N0IDIwMDMpCi0KLSogUGF0Y2hlcyBieSBYaWFuZ2h1YSBYaWFvLCAxNSBPY3QgMjAwMzoKLQotICAtIEFkZGVkIE1vdG9yb2xhIENQVSA4NTQwLzg1NjAgc3VwcG9ydCAoY3B1Lzg1eHgpCi0gIC0gQWRkZWQgTW90b3JvbGEgTVBDODU0MEFEUyBib2FyZCBzdXBwb3J0IChib2FyZC9tcGM4NTQwYWRzKQotICAtIEFkZGVkIE1vdG9yb2xhIE1QQzg1NjBBRFMgYm9hcmQgc3VwcG9ydCAoYm9hcmQvbXBjODU2MGFkcykKLQotKiBGaXggZmxhc2ggdGltaW5ncyBvbiBUUkFCIGJvYXJkCi0KLSogTWFrZSBzdXJlIEhVU0ggaXMgaW5pdGlhbGl6ZWQgZm9yIHJ1bm5pbmcgYXV0by11cGRhdGUgc2NyaXB0cwotCi0qIE1ha2UgNTIwMCByZXNldCBjb21tYW5kIF9yZWFsbHlfIHJlc2V0IHRoZSBib2FyZCwgd2l0aG91dCBydW5uaW5nCi0gIGFueSBvdGhlciBjb2RlIGFmdGVyIGl0Ci0KLSogRml4IGVycm9ycyB3aXRoIGZsYXNoIGVyYXNlIHdoZW4gcmFuZ2Ugc3BhbnMJYWNyb3NzIGJhbmtzCi0gIHRoYXQgYXJlIG1hcHBlZCBpbiByZXZlcnNlIG9yZGVyCi0KLSogRml4IGZsYXNoIG1hcHBpbmcgYW5kIGRpc3BsYXkgb24gUDNHNCBib2FyZAotCi0qIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAxNSBKdWwgMjAwMzoKLSAgLSBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgSVhQNDI1IENQVQotICAtIGFkZCBzdXBwb3J0IGZvciBJWERQNDI1IGV2YWwgYm9hcmQKLQotKiBBZGRlZCBjb25maWcgb3B0aW9uIENPTkZJR19TSUxFTlRfQ09OU09MRS4gIFNlZSBkb2MvUkVBRE1FLnNpbGVudAotICBmb3IgbW9yZSBpbmZvcm1hdGlvbgotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEwIE9jdCAyMDAzCi0gIC0gQWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBGUEdBIEFDRVgxSwotCi0qIFBhdGNoZXMgYnkgVGhvbWFzIExhbmdlLCAwOSBPY3QgMjAwMzoKLSAgLSBmaXggY21kX2lkZS5jIGZvciBub24gcHBjIGJvYXJkcyAocmVhZC93cml0ZSBmdW5jdGlvbnMgZGlkIG5vdAotICAgIGFkZCBBVEEgYmFzZSBhZGRyZXNzKQotICAtIGZpeCBmb3Igc2hhbm5vbiBib2FyZAotICAtICNpZmRlZiBDT05GSUdfSURFXzh4eF9ESVJFQ1Qgc29tZSBvdGhlcndpc2UgdW51c2VkIGNvZGUKLSAgLSBFbmRpYW4gc3dhcCBBVEEgaWRlbnRpdHkgZm9yIGFsbCBiaWcgZW5kaWFuIENQVXMsIG5vdCBqdXN0IFBQQwotICAtIE1JUFMgb25seTogTmV3IG9wdGlvbiBDT05GSUdfTUVNU0laRV9JTl9CWVRFUyBmb3IgcGFzc2luZyBtZW1zaXplCi0gICAgYXJncyB0byBsaW51eAotICAtIGFkZCBzdXBwb3J0IGZvciBkYmF1MXgwMCBib2FyZCAoTUlQUzMyKQotCi0qIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMDcgT2N0IDIwMDM6Ci0gIGFkZCBzdXBwb3J0IGZvciBkZWJyaXMgYm9hcmQKLQotKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOSBPY3QgMjAwMzoKLSAgRml4ZXMgZm9yIFRSQUIgYm9hcmQKLSAgLSAvYm9hcmQvdHJhYi9yczQ4NS5jOiBjb3JyZWN0IGJhdWRyYXRlCi0gIC0gL2JvYXJkL3RyYWIvY21kX3RyYWIuYzogYnVnIGZpeCBmb3IgcHJvYmxlbSB3aXRoIHRpbWVyIG92ZXJmbG93IGluCi0gICAgdWRlbGF5KCk7IGZpeCBzb21lIHRpbWluZyBwcm9ibGVtcyB3aXRoIGFkYyBjb250cm9sbGVyCi0gIC0gL2JvYXJkL3RyYWIvdHJhYl9ma3QuYzogYWRkIG5ldyBjb21tYW5kczogZ2FpbiwgZWVwcm9tIGFuZCBwb3dlcjsKLSAgICBtb2RpZnkgY29tbWFuZHM6IHRvdWNoIGFuZCBidXp6ZXIKLQotKiBEaXNhYmxlIENPTkZJR19TVVBQT1JUX1ZGQVQgd2hlbiB1c2VkIHdpdGggQ09ORklHX0FVVE9fVVBEQVRFCi0gIChxdWljayAmIGRpcnR5IHdvcmthcm91bmQgZm9yIHJvZ3VlIHBvaW50ZXIgcHJvYmxlbSBpbiBnZXRfdmZhdG5hbWUoKSk7Ci0gIFVzZSBkaXJlY3QgZnVuY3Rpb24gY2FsbHMgZm9yIGF1dG9fdXBkYXRlIGluc3RlYWQgb2YgaHVzaCBjb21tYW5kcwotCi0qIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDQgT2N0IDIwMDM6Ci0gIC0gYWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBOaW9zLTMyIENQVQotICAtIGFkZCBzdXBwb3J0IGZvciBOaW9zIEN5Y2xvbmUgRGV2ZWxvcG1lbnQgS2l0IChESy0xQzIwKQotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI5IFNlcCAyMDAzOgotICAtIEEgc2Vjb25kIHBhcmFtZXRlciBmb3IgYm9vdG0gb3ZlcndyaXRlcyB0aGUgbG9hZCBhZGRyZXNzIGZvcgotICAgICJTdGFuZGFsb25lIEFwcGxpY2F0aW9uIiBpbWFnZXMuCi0gIC0gYm9vdG0gc2V0cyBlbnZpcm9ubWVudCB2YXJpYWJsZSAiZmlsZXNpemUiIHRvIHRoZSByZXN1bHRpbmcKLSAgICAodW5jb21wcmVzc2VkKSBkYXRhIGxlbmd0aCBmb3IgIlN0YW5kYWxvbmUgQXBwbGljYXRpb24iIGltYWdlcwotICAgIHdoZW4gYXV0b3N0YXJ0IGlzIHNldCB0byAibm8iLiBOb3cgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZQotCWlmIGJvb3RtICRmcGdhZGF0YSAkc29tZV9mcmVlX3JhbSA7IHRoZW4KLQkJZnBnYSBsb2FkIDAgJHNvbWVfZnJlZV9yYW0gJGZpbGVzaXplCi0JZmkKLQotKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMjUgU2VwdCAyMDAzOgotICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBSZXYuIEMgYm9hcmQKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyNSBTZXAgMjAwMzoKLSAgYWRkIHN1cHBvcnQgZm9yIFplcGh5ciBFbmdpbmVlcmluZyBaUEMuMTkwMCBib2FyZAotCi0qIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDIzIFNlcCAyMDAzOgotICBhZGQgQ01EX1BPUlRJTyB0byBDRkdfQ01EX05PTlNURCAoY29tbWFuZHMgaW4gcXVlc3Rpb24gYXJlIG9ubHkKLSAgaW1wbGVtZW50ZWQgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlKQotCi0qIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMjMgU2VwIDIwMDM6Ci0gIGZpeCBwbGxfcGNpX3RvX21lbV9tdWx0aXBsaWVyIHRhYmxlIGZvciBNUEM4MjQ1Ci0KLSogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjIgU2VwIDIwMDM6Ci0gIGVuYWJsZSB0aW1lZCBhdXRvYm9vdCBvbiBQWEEKLQotKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDIyIFNlcCAyMDAzOgotICAtIGFkZCAkKENGTEFHUykgdG8gIi1wcmludC1saWJnY2MtZmlsZW5hbWUiIHNvIGNvbXBpbGVyIGRyaXZlcgotICAgIHJldHVybnMgY29ycmVjdCBsaWJnY2MgZmlsZSBwYXRoCi0gIC0gImxhdGVuY3kiIHJlZHVjdGlvbiBvZiBidXN5LWxvb3Agd2FpdGluZyB0byBpbXByb3ZlICJVLUJvb3QiIGJvb3QKLSAgICB0aW1lIG9uIHMzYzI0eDAgc3lzdGVtcwotCi0qIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxOSBTZXAgMjAwMzoKLSAgLSBBZGQgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOIG9wdGlvbiB0byBlY2hvIHRoZSBpbnZlcnRlZCBFdGhlcm5ldAotICAgIGxpbmsgc3RhdGUgdG8gdGhlIGZhdWx0IExFRC4KLSAgLSBJbiBOZXRMb29wLCBtYWtlIHRoZSBGYXVsdCBMRUQgcmVmbGVjdCB0aGUgbGluayBzdGF0dXMuICBUaGUgbGluawotICAgIHN0YXR1cyBnZXRzIHVwZGF0ZWQgb24gZW50cnksIGFuZCBvbiB0aW1lb3V0cy4KLQotKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxOCBTZXAgMjAwMzoKLSAgYWxsb3cgbWtpbWFnZSB0byBidWlsZCBhbmQgcnVuIG9uIEN5Z3dpbi1ob3N0ZWQgc3lzdGVtcwotCi0qIFBhdGNoIGJ5IEZyYW5rIE38bGxlciwgMTggU2VwIDIwMDM6Ci0gIHVzZSBiaV9pbnRmcmVxIGluc3RlYWQgb2YgYmlfYnVzZnJlcSB0byBjb21wdXRlIGZlY19taWlfc3BlZWQgaW4KLSAgY3B1L21wYzh4eC9mZWMuYwotCi0qIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBTZXAgMjAwMzoKLSAgYWRkIHRvb2wgdG8gY29tcHV0ZSBmaWxlZHMgaW4gdGhlIFBMUFJDUiByZWdpc3RlciBmb3IgTVBDODZ4Ci0KLSogVXNlIElIX1RZUEVfRklMRVNZU1RFTSBmb3IgVFJBQiAiZGlzayIgaW1hZ2VzLgotCi0qIEZpeCBidWlsZCBwcm9ibGVtcyB1bmRlciBGcmVlQlNECi0KLSogQWRkIGdlbmVyaWMgZmlsZXN5c3RlbSBpbWFnZSB0eXBlCi0KLSogTWFrZSBmYXRsb2FkIHNldCBmaWxlc2l6ZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotCi0qIGVuYWJsZSBiYXNpYyAvIG1lZGl1bSAvIGhpZ2gtZW5kIGNvbmZpZ3VyYXRpb25zIGZvciBQUENoYW1lbGVvbkVWQgotICBib2FyZDsgZml4IE5BTkQgY29kZQotCi0qIGVuYWJsZSBURlRQIGNsaWVudCBjb2RlIHRvIHNwZWNpZnkgdG8gdGhlIHNlcnZlciB0aGUgZGVzaXJlZAotICB0aW1lb3V0IHZhbHVlIChzZWUgUkZDLTIzNDkpCi0KLSogSW1wcm92ZSBTRFJBTSBzZXR1cCBmb3IgVFJBQiBib2FyZAotCi0qIFN1cHByZXNzIGFsbCBvdXRwdXQgd2l0aCBzcGxhc2hzY3JlZW4gY29uZmlndXJlZCBvbmx5IGlmICJzcGxhc2hpbWFnZSIKLSAgaXMgc2V0Ci0KLSogRml4IHByb2JsZW1zIHdpdGggSTJDIHN1cHBvcnQgZm9yIG1wYzUyMDAKLQotKiBBZGFwdCBUUkFCIGNvbmZpZ3VyYXRpb24gYW5kIGF1dG9fdXBkYXRlIHRvIG5ldyBtZW1vcnkgbGF5b3V0Ci0KLSogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIHd0ayBib2FyZAotCi0qIEFkZCBzdXBwb3J0IGZvciB0aGUgU2hhcnAgTFEwNjVUOURSNTFVIExDRCBkaXNwbGF5Ci0KLSogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDE3IFNlcCAyMDAzOgotICAtIEZpeGVzIGZvciBNUEM4MjY2IGRlZmF1bHQgY29uZmlnCi0gIC0gQWxsb3cgZXRoX2xvb3BiYWNrX3Rlc3QoKSBvbiA4MjYwIHRvIHVzZSBhIHN1YnNldCBvZiB0aGUgRkNDJ3MKLQotKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCAxNyBTZXAgMjAwMzoKLSAgLSB1cGRhdGUgUkVBRE1FIChTSE9XX0JPT1RfUFJPR1JFU1MgdmFsdWVzIGZvciBjbWRfbmFuZC5jIGFuZAotICAgIGVudl9jb21tb24uYykKLSAgLSBzYmM4MjYwIHR3ZWFrcwotICAtIGFkanVzdCAiaGVscCIgb3V0cHV0Ci0KLSogUGF0Y2hlcyBieSBBbmRlcnMgTGFyc2VuLCAxNyBTZXAgMjAwMzoKLSAgLSBmaXggc3BlbGxpbmcgZXJyb3JzCi0gIC0gc2V0IEdEX0ZMR19ERVZJTklUIGZsYWcgb25seSBhZnRlciBkZXZpY2UgZnVuY3Rpb24gcG9pbnRlcnMKLSAgICBhcmUgdmFsaWQKLSAgLSBBbGxvdyBDRkdfQUxUX01FTVRFU1Qgb24gc3lzdGVtcyB3aGVyZSBhZGRyZXNzIHplcm8gaXNuJ3QKLSAgICB3cml0ZWFibGUKLSAgLSBlbmFibGUgMy5yZCBVQVJUIChTVC1VQVJUKSBvbiBQWEEoWFNjYWxlKSBDUFVzCi0gIC0gdHJpZ2dlciB3YXRjaGRvZyB3aGlsZSB3YWl0aW5nIGluIHNlcmlhbCBkcml2ZXIKLQotKiBBZGQgYXV0by11cGRhdGUgY29kZSBmb3IgVFJBQiBib2FyZCB1c2luZyBVU0IgbWVtb3J5IHN0aWNrcywKLSAgc3VwcG9ydCBuZXcgY29uZmlndXJhdGlvbiB3aXRoIG1vcmUgbWVtb3J5Ci0KLSogZGlzYWJsZSBNUEM1MjAwIGJ1cyBwaXBlbGluaW5nIGFzIHdvcmthcm91bmQgZm9yIGJ1cyBjb250ZW50aW9uCi0KLSogTW9kaWZ5IFhMQiBhcmJpdGVyIHByaW9yaXRpZXMgb24gTVBDNTIwMCBzbyBhbGwgZGV2aWNlcyB1c2Ugc2FtZQotICBwcmlvcml0eTsgY29uZmlndXJlIGNyaXRpY2FsIGludGVycnVwdHMgdG8gYmUgaGFuZGxlZCBsaWtlIGV4dGVybmFsCi0gIGludGVycnVwdHMKLQotKiBNYWtlIElQQiBjbG9jayBvbiBNR1Q1MTAwL01QQzUyMDAgY29uZmlndXJhYmxlIGluIGJvYXJkIGNvbmZpZyBmaWxlOwotICBnbyBiYWNrIHRvIDY2IE1IeiBmb3Igc3RhYmlsaXR5Ci0KLSogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgMTUgU2VwIDIwMDM6Ci0gIC0gYWRkIGRlc2NyaXB0aW9uIGZvciBtaXNzaW5nIENGR19DTURfKiBlbnRyaWVzIGluIHRoZSBSRUFETUUgZmlsZQotICAtIHNhY3NuZyB0d2Vha3MKLQotKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDE0IFNlcCAyMDAzOgotICBlbmFibGUgd2F0Y2hkb2cgc3VwcG9ydCBmb3IgYWxsIE1QQzgyNHggYm9hcmRzIHRoYXQgaGF2ZSBhIHdhdGNoZG9nCi0KLSogT24gTVBDNTIwMCwgcmVzdHJpY3QgRkVDIHRvIGEgbWF4aW11bSBvZiAxMCBNYnBzIHRvIHdvcmsgYXJvdW5kIHRoZQotICAiTm9uLW9jdGV0IEFsaWduZWQgRnJhbWUiIGVycm9ycyB3ZSBzZWUgYXQgMTAwIE1icHMKLQotKiBQYXRjaCBieSBTaGFyYWQgR3VwdGEsIDE0IFNlcCAyMDAzOgotICBmaXggU1BSIG51bWJlcnMgZm9yIHVwcGVyIEJBVCByZWdpc3RlciAoW0lEXUJBVFs0LTddW1VMXSkKLQotKiBQYXRjaCBieSBsbGFuZHJlLCAxMSBTZXAgMjAwMzoKLSAgdXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIFBQQ2hhbWVsZW9uRVZCIGJvYXJkCi0KLSogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAxMyBTZXAgMjAwMzoKLSAgdmFyaW91cyBjaGFuZ2VzIHRvIFZDTUE5IGJvYXJkIHNwZWNpZmljIGZpbGVzCi0KLSogQWRkIEkyQyBzdXBwb3J0IGZvciBNR1Q1MTAwIC8gTVBDNTIwMAotCi0qIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMSBTZXAgMjAwMzoKLSAgQ2hhbmdlZCBkZWZhdWx0IG1lbW9yeSBvcHRpb24gb24gTVBDODI2NkFEUyB0byBOT1QgYmUgUGFnZSBCYXNlZAotICBJbnRlcmxlYXZlLCBzaW5jZSB0aGlzIGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwgd2l0aCB0aGUgc3RhbmRhcmQKLSAgMTZNQiBESU1NCi0KLSogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMiBTZXAgMjAwMzoKLSAgZml4IE1ha2VmaWxlIHNldHRpbmdzIGZvciBzazk4IGRyaXZlcgotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTIgU2VwIDIwMDM6Ci0gIC0gbmV3IGJvYXJkcyBhZGRlZDogRFA0MDUsIEhVQjQwNSwgUExVNDA1LCBWT0g0MDUKLSAgLSBzb21lIGVzZCBib2FyZHMgdXBkYXRlZAotICAtIGNwdS9wcGM0eHgvc2RyYW0uYzogZGlzYWJsZSBtZW1vcnkgY29udHJvbGxlciBiZWZvcmUgc2V0dGluZwotICAgIGZpcnN0IHZhbHVlcwotICAtIGNwdS9wcGM0eHgvNDA1X3BjaS5jOiBzZXQgdmVuZG9yIGlkIG9uIFBQQzQwNUVQIHN5c3RlbXMKLQotKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMSBTZXAgMjAwMzoKLSAgYWRkIGJ1cm4taW4gdGVzdHMgZm9yIFRSQUIgYm9hcmQKLQotKiBFbmFibGUgaW5zdHJ1Y3Rpb24gY2FjaGUgb24gTVBDNTIwMCBib2FyZAotCi0qIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxMSBTZXAgMjAwMzoKLSAgLSBmaXggVVNCIGRhdGEgcG9pbnRlciBhc3NpZ25tZW50IGZvciBidWxrIG9ubHkgdHJhbnNmZXIuCi0gIC0gcHJldmVudCB0byBkaXNwbGF5IGVyYXNlZCBkaXJlY3RvcmllcyBpbiBGQVQgZmlsZXN5c3RlbS4KLQotKiBDaGFuZ2Ugb3V0cHV0IGZvcm1hdCBmb3IgTkFORCBmbGFzaCAtIG1ha2UgaXQgbG9vayBsaWtlIGZvciBvdGhlcgotICBtZW1vcnksIHRvbwotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMC40Ljg6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogQWRkIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIFJNVSBib2FyZAotCi0qIFBhdGNoZXMgYnkgRGVuaXMgUGV0ZXIsIDkgU2VwIDIwMDM6Ci0gIGFkZCBGQVQgc3VwcG9ydCBmb3IgSURFLCBTQ1NJIGFuZCBVU0IKLQotKiBQYXRjaGVzIGJ5IEdsZWIgTmF0YXBvdiwgMiBTZXAgMjAwMzoKLSAgLSBjbGVhbnVwIG9mIFBPU1QgY29kZSBmb3IgdW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcwotICAtIE1QQzgyNHggbG9ja3Mgd2F5MCBvZiBkYXRhIGNhY2hlIGZvciB1c2UgYXMgaW5pdGlhbCBSQU07Ci0gICAgdGhpcyBwYXRjaCB1bmxvY2tzIGl0IGFmdGVyIHJlbG9jYXRpb24gdG8gUkFNIGFuZCBpbnZhbGlkYXRlcwotICAgIHRoZSBsb2NrZWQgZW50cmllcy4KLQotKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDMwIEF1ZyAyMDAzOgotICBuZXcgSTJDIGRyaXZlciBmb3IgbXBjMTA3IGJyaWRnZS4gTm93IHdvcmtzIGZyb20gZmxhc2guCi0KLSogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgMTEgQXVnIDIwMDM6Ci0gIC0gSkZGUzI6IGZpeCB0eXBvIGluIGNvbW1vbi9jbWRfamZmczIuYwotICAtIEpGRlMyOiBmaXggQ0ZHX0pGRlMyX1NPUlRfRlJBR01FTlRTIG9wdGlvbgotICAtIEpGRlMyOiByZW1vdmUgbm9kZSB2ZXJzaW9uIDAgd2FybmluZwotICAtIEpGRlMyOiBhY2NlcHQgSkZGUzIgUEFERElORyBub2RlcwotICAtIFNYTkk4NTVUOiBhZGQgQU0yOUxWODAwIHN1cHBvcnQKLSAgLSBTWE5JODU1VDogbW92ZSBlbnZpcm9ubWVudCBmcm9tIEVFUFJPTSB0byBmbGFzaAotICAtIFNYTkk4NTVUOiBib290IGZyb20gSkZGUzIgaW4gTk9SIG9yIE5BTkQgZmxhc2gKLQotKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMTEgQXVnIDIwMDM6Ci0gIGZpeGVzIGZvciBJMkMgb24gTVBDODI0MAotICAtIGZpeCBpMmNfd3JpdGUgcm91dGluZQotICAtIGZpeCBpcHJvYmUgY29tbWFuZAotICAtIGVsaW1pbmF0ZXMgdXNlIG9mIGdsb2JhbCB2YXJpYWJsZXMsIHBsdXMgZGVhZCBjb2RlLCBjbGVhbnVwLgotCi0qIEFkZCBzdXBwb3J0IGZvciBVU0IgTWFzcyBTdG9yYWdlIERldmljZXMgKEJCQikKLSAgKHRlc3RlZCB3aXRoIFVTQiBtZW1vcnkgc3RpY2tzIG9ubHkpCi0KLSogQXZvaWQgZmxpY2tlciBvbiBUUkFCJ3MgVkZECi0KLSogQWRkIHN1cHBvcnQgZm9yIFNLOTh4eCBkcml2ZXIKLQotKiBBZGQgUENJIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAotCi0qIFN1cHBvcnQgSWNlQ3ViZSBib2FyZCBjb25maWd1cmF0aW9ucyB3aXRoIDEgeCBBTUQgQU0yOUxWMDY1ICg4IE1CKQotICBvciAxIHggQU0yOUxWNjUyICh0d28gTFYwNjUgaW4gb25lIGNoaXAgPSAxNiBNQik7Ci0gIFJ1biBJUEIgYXQgMTMzIE1oejsgYWRqdXN0IHRoZSBNSUkgY2xvY2sgZnJlcXVlbmN5IGFjY29yZGluZ2x5Ci0KLSogU2V0IEJSR19DTEsgb24gUE04MjUvODI2IHRvIDY0TUh6IChWQ09fT1VUIC8gNCwgaW5zdGVhZCBvZiAxNgkgTUh6KQotICB0byBhbGxvdyBmb3IgbW9yZSBhY2N1cmF0ZSBiYXVkcmF0ZSBzZXR0aW5ncwotICAoZXJyb3Igbm93IDAuNyUgYXQgMTE1IGticHMsIGluc3RlYWQgb2YgMy41JSBiZWZvcmUpCi0KLSogUGF0Y2ggYnkgQW5kcmVhcyBNb2hyLCA0IFNlcCAyMDAzOgotICBGaXggYSBsb3Qgb2Ygc3BlbGxpbmcgZXJyb3JzCi0KLSogQWRkIHN1cHBvcnQgZm9yIFBQQ2hhbWVsZW9uIEV2YWwgQm9hcmQKLQotKiBBZGQgc3VwcG9ydCBmb3IgUDNHNCBib2FyZAotCi0qIEZpeCBwcm9ibGVtIHdpdGggTUdUNTEwMCBGRUMgZHJpdmVyOiBhZGQgImVhcmx5IiBNQUMgYWRkcmVzcwotICBpbml0aWFsaXphdGlvbgotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDcgQXVnIDIwMDM6Ci0gIGNoZWNrIEJDU1IgdG8gZGV0ZWN0IGlmIHRoZSBib2FyZCBpcyBjb25maWd1cmVkIGluIFBDSSBtb2RlCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNzoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBQYXRjaCBieSBSYWdodSBLcmlzaG5hcHJhc2FkLCA3IEF1ZyAyMDAzOgotICBhZGQgc3VwcG9ydCBmb3IgQWRkZXIgSUkgTVBDODUyVCBtb2R1bGUKLQotKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDE5IEF1ZyAyMDAzOgotICBmaXggVEkgSW5ub3ZhdG9yL09NQVAxNTEwIHBpbiBjb25maWdzCi0KLSogUGF0Y2hlcyBieSBLc2hpdGlqLCAxOCBBdWcgMjAwMwotICAtIGFkZCBzdXBwb3J0IGZvciBhcm05MjZlanMgY3B1IGNvcmUKLSAgLSBhZGQgc3VwcG9ydCBmb3IgVEkgT01BUCAxNjEwIElubm92YXRvciBCb2FyZAotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE0IEF1ZyAyMDAzOgotICBhZGQgc3VwcG9ydCBmb3IgYnppcDIgdW5jb21wcmVzc2lvbgotCi0qIEFkZCBHQ0MgbGlicmFyeSB0byBleGFtcGxlcy9NYWtlZmlsZSBzbyBHQ0MgdXRpbGl0eSBmdW5jdGlvbnMgd2lsbAotICBiZSByZXNvbHZlZCwgdG9vCi0KLSogQWRkIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIFJNVSBib2FyZCB1c2luZyBzb2Z0d2FyZSBJMkMgZHJpdmVyCi0gIChiZWNhdXNlIG9mIGJldHRlciByZXNwb25zZSB0byBpcHJvYmUgY29tbWFuZCk7IGZpeCBwcm9ibGVtIHdpdGgKLSAgInJlc2V0IiBjb21tYW5kCi0KLSogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI4IEF1ZyAyMDAzOgotICBBZGRlZCBDT05GSUdfQk9PVFBfRE5TMiBhbmQgQ09ORklHX0JPT1RQX1NFTkRfSE9TVE5BTUUgdG8KLSAgQ09ORklHX0JPT1RQX01BS1MgKHNlZSBSRUFETUUpLgotCi0qIEZpeCBJQ1U4NjIgZW52aXJvbm1lbnQgcHJvYmxlbQotCi0qIEZpeCBSQU0gc2l6ZSBkZXRlY3Rpb24gZm9yIFJNVSBib2FyZAotCi0qIEltcGxlbWVudCAicmVzZXQiIGZvciBNR1Q1MTAwL01QQzUyMDAgc3lzdGVtcwotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMC40LjY6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogTWFrZSBFdGhlcm5ldCBhdXRvbmVnb3RpYXRpb24gb24gSU5DQS1JUCB3b3JrIGZvciBhbGwgY2xvY2sgcmF0ZXM7Ci0gIGFsbG93IHNlbGVjdGlvbiBvZiBjbG9jayBmcmVxdWVuY3kgYXMgIm1ha2UiIHRhcmdldAotCi0qIEltcGxlbWVudCBtZW1vcnkgYXV0b3NpemluZyBjb2RlIGZvciBJY2VDdWJlIGJvYXJkcwotCi0qIENvbmZpZ3VyZSBuZXR3b3JrIHBvcnQgb24gSU5DQS1JUCBmb3IgYXV0b25lZ290aWF0aW9uCi0KLSogRml4IG92ZXJmbG93IHByb2JsZW0gaW4gbmV0d29yayB0aW1lb3V0IGNvZGUKLQotKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCA4IEF1ZyAyMDAzOgotICBBbGxvdyBjcmMzMiB0byBiZSB1c2VkIGF0IGFkZHJlc3MgMHgwMDAgKGNyYzMyX25vX2NvbXAsIHRvbykuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBVcGRhdGUgZm9yIFRRTSBib2FyZCBkZWZhdWx0czoKLSAgZGlzYWJsZSBjbG9ja3NfaW5fbWh6LCBlbmFibGUgYm9vdCBjb3VudCBsaW1pdAotCi0qIFJlbW92ZWQgdG9vbHMvZ2RiIGZyb20gIm1ha2UgYWxsIiB0YXJnZXQuICBBZGRlZCBtYWtlIHRhcmdldCAiZ2RidG9vbHMiCi0gIGluIHRvcGxldmVsIGRpcmVjdG9yeSBpbnN0ZWFkLiAgUmVtb3ZlZCBhc3Rlc3QuYyBmcm9tIHRvb2xzL2dkYiBiZWNhdXNlCi0gIGl0IGlzIG5vIGxvbmdlciByZWxldmFudC4KLQotKiBGaXggUENJIHN1cHBvcnQgZm9yIE1QQzUyMDAgLyBJY2VDdWJlIEJvYXJkCi0KLSogTWFwIElTUDEzNjIgVVNCIE9URyBjb250cm9sbGVyIGZvciBOU0NVIGJvYXJkCi0KLSogUGF0Y2ggYnkgQnJhZCBQYXJrZXIsIDAyIEF1ZyAyMDAzOgotICBmaXggc2M1MjBfY2RwIHByb2JsZW1zCi0KLSogSW1wbGVtZW50IEJvb3QgQ3ljbGUgRGV0ZWN0aW9uIChSZXEuIDIuMyBvZiBPU0RMIENHTCBSZXFpcmVtZW50cykKLQotKiBBbGxvdyBlcmFzZSBjb21tYW5kIHRvIGNyb3NzIGZsYXNoIGJhbmsgYm91bmRhcmllcwotCi0qIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjEgSnVsIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciBMeW51eFdvcmtzIEtlcm5lbCBEb3dubG9hZGFibGUgSW1hZ2VzIChLRElzKS4KLSAgQm90aCBMeW54T1MgYW5kIEJsdWVDYXQgbGludXggS0RJcyBhcmUgc3VwcG9ydGVkLgotCi0qIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI1IEp1bCAyMDAzOgotICB1c2UgbW9yZSByZWxpYWJsZSByZXNldCBmb3IgT01BUC85MjVUCi0KLSogUGF0Y2ggYnkgTnllIExpdSwgMjUgSnVsIDIwMDM6Ci0gIGZpeCB0eXBvIGluIG1wYzh4eC5oCi0KLSogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMjQgSnVsIDIwMDM6Ci0gIEZpeGVzIGZvciBjbWRfbmFuZC5jOgotICAtIEZpeGVkIG51bGwgZGVyZWZlcmVjZSB3aGljaCBjb3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IEVDQyB2YWx1ZXMuCi0gIC0gQWRkZWQgc3VwcG9ydCBmb3IgZGV2aWNlcyB3aXRoIG5vIFJlYWR5L0J1c3kgc2lnbmFsIGhvb2tlZCB1cC4KLSAgLSBBZGRlZCBPTUFQMTUxMCByZWFkL3dyaXRlIHByb3RlY3QgaGFuZGxpbmcuCi0gIC0gRml4ZWQgbmFuZC5oJ3MgRUNDUE9TLiBBIGNvbmZsaWN0IGV4aXN0ZWQgd2l0aCBQT1M1IGFuZCBiYWRibG9jawotICAgIGZvciBub24tSkZGUzIuCi0gIC0gU3dpdGNoZWQgZGVmYXVsdCBFQ0MgdG8gYmUgSkZGUzIuCi0KLSogQWxsb3cgY3JjMzIgdG8gYmUgdXNlZCBhdCBhZGRyZXNzIDB4MDAwCi0KLSogUHJvdmlkZSBjb25zaXN0ZW50IGludGVyZmFjZSB0byBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucyB0byBhY2Nlc3MKLSAgdGhlICdnbG9iYWxfZGF0YScgc3RydWN0dXJlCi0gIFByb3ZpZGUgYSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgbW9yZSB1c2VmdWwgdG8gdXNlcnMvZGV2ZWxvcGVycy4KLQotKiBNYWtlIEljZUN1YmUgTUdUNTEwMCBGRUMgZHJpdmVyIHdvcmsKLQotKiBJbXBsZW1lbnQgbmV3IG1lY2hhbmlzbSB0byBleHBvcnQgVS1Cb290J3MgZnVuY3Rpb25zIHRvIHN0YW5kYWxvbmUKLSAgYXBwbGljYXRpb25zOiBpbnN0ZWFkIG9mIHVzaW5nIChQUEMtc3BlY2lmaWMpIHN5c3RlbSBjYWxscyB3ZSBub3cKLSAgdXNlIGEganVtcCB0YWJsZTsgcGxlYXNlIHNlZSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgZm9yIGRldGFpbHMKLQotKiBQYXRjaCBieSBEYXZlIFdlc3R3b29kLCAyNCBKdWwgMjAwMzoKLSAgYWRkZWQgc3VwcG9ydCBmb3IgVW5pdHkgT1MgKGEgcHJvcHJpZXRhcnkgT1MpCi0KLSogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjMgSnVsIDIwMDM6Ci0gIGFkZCAiaW1scyIgY29tbWFuZCB0byBwcmludCBmbGFzaCB0YWJsZSBvZiBjb250ZW50cwotCi0qIEZpeCBjb2xkIGJvb3QgZGV0ZWN0aW9uIGZvciBsb2cgYnVmZmVyIHJlc2V0Ci0KLSogUmV0dXJuIGVycm9yIGZvciBpbnZhbGlkIGxlbmd0aCBzcGVjaWZpZXJzIHdpdGggImNwLlgiIGV0Yy4KLQotKiBGaXggc3RhcnR1cCBwcm9ibGVtIG9uIE1JUFMKLQotKiBBbGxvdyBmb3IgQ09ORklHX1NQTEFTSF9TQ1JFRU4gZXZlbiB3aGVuIG5vIGV4cGxpY2l0Ci0gIGJpdG1hcCBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQKLQotKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMTggSnVsIDIwMDM6Ci0gIC0gZml4IGVuZGluYW5lc3MgcHJvYmxlbSBpbiBjcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMxLmMKLQotKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTggSnVsIDIwMDM6Ci0gIC0gZml4IG1lbW9yeSBjb25maWd1cmF0aW9uIGZvciBNSVA0MDVUCi0gIC0gZml4IHByaW50b3V0IG9mIGJhdWRyYXRlIGZvciAibG9hZGIgPGxvYWRhZGRyPiA8YmF1ZHJhdGU+IgotCi0qIENsZWFudXAgb2YgVFFNODJ4eCBjb25maWd1cmF0aW9uczsgdXNlICJvZmZpY2lhbCIgYm9hcmQgdHlwZXMKLSAgdG8gbWFrZSBzZWxlY3Rpb24gZWFzaWVyLgotCi0qIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IEp1bCAyMDAzOgotICBhZGQgZGVsYXkgdG8gZ2V0IEkyQyB3b3JraW5nIHdpdGggImltbSIgY29tbWFuZCBhbmQgczNjMjR4MF9pMmMuYwotCi0qIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE3IEp1bHkgMDM6Ci0gIC0gRml4ZWQgYnVnIGluIE9NQVAxNTEwIGJhdWQgcmF0ZSBkaXZpc29yIHNldHRpbmdzLgotCi0qIFBhdGNoIGJ5IE55ZSBMaXUsIDE2IEp1bHkgMjAwMzoKLSAgTVBDODYwRkFEUyBmaXhlczoKLSAgLSBhZGQgTVBDODZ4QURTIHN1cHBvcnQgKHVzZXMgTVBDODZ4QURTLmgpCi0gIC0gYWRkIDg2NlAvVCBjb3JlIHN1cHBvcnQgKGFsc28gTVBDODU5VC9NUEM4NTlEU0wvTVBDODUyVCkKLSAgICBvIFBMUFJDUiBjaGFuZ2VzCi0gICAgbyBCUkcgY2hhbmdlcyAoRVhUQUwvWFRBTCByZXN0cmljdGVkIHRvIDEwTUh6KQotICAgIG8gZG9uJ3QgdHJ1c3QgZ2NsaygpIHNvZnR3YXJlIG1lYXN1cmVtZW50IGJ5IGRlZmF1bHQsIGRlcGVuZCBvbgotICAgICAgQ09ORklHXzh4eF9HQ0xLX0ZSRVEKLSAgLSBhZGQgRFJBTSBTSU1NIG5vdCBpbnN0YWxsZWQgZGV0ZWN0aW9uCi0gIC0gdXNlIG1vcmUgImNvcnJlY3QiIFNEUkFNIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlCi0gIC0gYWxsb3cgZGlmZmVyZW50IFNEUkFNIHNpemVzICg4eHhBRFMgaGFzIDhNKQotICAtIGRlZmF1bHQgREVSIGlzIDAKLSAgLSByZW1vdmUgdW51c2VkIE1BTVIgZGVmaW5lcyBmcm9tIEZBRFM4NjBULmggKGFsbCBkb25lIGluIGZhZHMuYykKLSAgLSByZW5hbWUgTUFNUi9NQk1SIGRlZmluZXMgdG8gYmUgbW9yZSBjb25zaXN0ZW50LiBTaG91bGQgZXZlbnR1YWxseQotICAgIGJlIG1lcmdlZCBpbnRvIE14TVIgdG8gYmV0dGVyIHJlZmxlY3QgdGhlIFBvd2VyUVVJQ0MgZGF0YXNoZWV0LgotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE2IEp1bCAyMDAzOgotICBzdXBwb3J0IG5ldyBNb3Rvcm9sYSBQUTJGQURTLVpVIGV2YWx1YXRpb24gYm9hcmQgd2hpY2ggcmVwbGFjZWQKLSAgTVBDODI2MEFEUyBhbmQgTVBDODI2NkFEUwotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMC40LjQ6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogQWRkIHN1cHBvcnQgZm9yIEljZUN1YmUgYm9hcmQgKHdpdGggTUdUNTEwMCBhbmQgTVBDNTIwMCBDUFVzKQotCi0qIEFkZCBzdXBwb3J0IGZvciBNR1Q1MTAwIGFuZCBNUEM1MjAwIHByb2Nlc3NvcnMKLQotKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTUgSnVsIDIwMDM6Ci0gIHVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMC40LjM6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogUGF0Y2hlcyBieSBLc2hpdGlqLCAwNCBKdWwgMjAwMwotICAtIGFkZGVkIHN1cHBvcnQgZm9yIGFybTkyNXQgY3B1IGNvcmUKLSAgLSBhZGRlZCBzdXBwb3J0IGZvciBUSSBPTUFQIDE1MTAgSW5ub3ZhdG9yIEJvYXJkCi0KLSogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAxNCBKdWwgMjAwMzoKLSAgLSBhZGQgSTJDIHN1cHBvcnQgZm9yIHMzYzI0MDAgc3lzdGVtcyAodHJhYiBib2FyZCkKLSAgLSAocmUtKSBhZGQgInBpbmciIHRvIGNvbW1hbmQgdGFibGUKLQotKiBGaXggaGFuZGxpbmcgb2YgInNsb3ciIFBPU1Qgcm91dGluZXMKLQotKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDAzOgotICAtIENvcnJlY3QgZmxhc2ggYW5kIEpGRlMyIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMKLSAgLSBmaXggUFZSIHZhbHVlcyBhbmQgY2xvY2sgZ2VuZXJhdGlvbiBmb3IgUG93ZXJRVUlDQyBJSSBmYW1pbHkKLSAgICAoODI3MC84Mjc1LzgyODApCi0KLSogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMDggSnVsIDIwMDM6Ci0gIC0gYWRkIHN1cHBvcnQgZm9yIE02OEsgdGFyZ2V0cwotCi0qIFBhdGNoIGJ5IEtlbiBDaG91LCAzIEp1bDoKLSAgLSBGaXggUENJIGNvbmZpZyB0YWJsZSBmb3IgQTMwMDAKLSAgLSBGaXggaW9iYXNlIGZvciBuYXRzZW1pLmMKLSAgICAoUENJX0JBU0VfQUREUkVTU18wIGlzIHRoZSBJTyBiYXNlIHJlZ2lzdGVyIGZvciBEUDgzODE1KQotCi0qIEFsbG93IHRvIGVuYWJsZSAic2xvdyIgUE9TVCByb3V0aW5lcyBieSBrZXkgcHJlc3Mgb24gcG93ZXItb24KLSogRml4IHRlbXBlcmF0dXJlIGRlcGVuZGVuZCBzd2l0Y2hpbmcgb2YgTENEIGJhY2tsaWdodCBvbiBMV01PTgotKiBUd2VhayBvdXRwdXQgZm9ybWF0IGZvciBMV01PTgotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgSnVsIDIwMDM6Ci0gIC0gRml4IGJ1ZyBpbiBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRS4KLSAgLSBBUjQwNSBjb25maWcgdXBkYXRlZC4KLSAgLSBPQ1JUQy9PUlNHOiBic3AgY29tbWFuZCBhZGRlZC4KLSAgLSBBU0g0MDUgYnNwIHVwZGF0ZS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4yOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIEFkZCBzdXBwb3J0IGZvciBOU0NVIGJvYXJkCi0KLSogQWRkIHN1cHBvcnQgZm9yIFRRTTgyM00sIFRRTTg1ME0sIFRRTTg1NU0gYW5kIFRRTTg2ME0gbW9kdWxlcwotCi0qIEFkZCBzdXBwb3J0IGZvciBBbTI5TFYxNjBNTCwgQW0yOUxWMzIwTUwsIGFuZCBBbTI5TFY2NDBNTAotICBtaXJyb3IgYml0IGZsYXNoIG9uIFRRTTh4eE0gbW9kdWxlcwotCi0qIFBhdGNoIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAzMCBKdW4gMjAwMzoKLSAgZ2V0IHJpZCBvZiBNS19DTURfRU5UUlkgbWFjcm87IHVwZGF0ZSBkb2MvUkVBRE1FLmNvbW1hbmQKLQotKiBQYXRjaCBieSBTZWIgSmFtZXMsIDMwIEp1biAyMDAzOgotICBJbXByb3ZlIGRvY3VtZW50YXRpb24gb2YgSTJDIGNvbmZpZ3VyYXRpb24gaW4gUkVBRE1FCi0KLSogRml4IHByb2JsZW1zIHdpdGggcHJldmlvdXMgbG9nIGJ1ZmZlciAiZml4ZXMiCi0KLSogRml4IG1pbm9yIGhlbHAgdGV4dCBpc3N1ZXMKLQotKiAibG9nIGFwcGVuZCIgZGlkIG5vdCBhcHBlbmQgYSBuZXdsaW5lCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBGaXggc29tZSBtaXNzaW5nIGNvbW1hbmRzLCBjbGVhbnVwIGhlYWRlciBmaWxlcwotICAoYXV0b3NjcmlwdCwgYm1wLCBic3AsIGZhdCwgbW1jLCBuYW5kLCBwb3J0aW8sIC4uLikKLQotKiBSZXdyaXRlIGNvbW1hbmQgbG9va3VwIGFuZCBoZWxwIGNvbW1hbmQgKGZpeCBwcm9ibGVtcyB3aXRoIGJ1YmJsZQotICBzb3J0IHdoZW4gc29ydGluZyBjb21tYW5kIG5hbWUgbGlzdCkuIE1pbm9yIGNsZWFudXAgaGVyZSBhbmQgdGhlcmUuCi0KLSogTWVyZ2UgZnJvbSAic3RhYmxlIGJyYW5jaCIsIHRhZyBMQUJFTF8yMDAzXzA2XzI4XzE4MDAtc3RhYmxlOgotICAtIEFsbG93IHRvIGNhbGwgc3lzbW9uIGZ1bmN0aW9uIGludGVyYWN0aXZlbHkKLSAgLSBQSUMgb24gTFdNT04gYm9hcmQgbmVlZHMgZGVsYXkgYWZ0ZXIgcG93ZXItb24KLSAgLSBBZGQgbWlzc2luZyBSU1IgZGVmaW5pdGlvbnMgZm9yIE1QQzh4eAotICAtIEltcHJvdmUgbG9nIGJ1ZmZlciBoYW5kbGluZzogZ3VhcmFudGVlIGNsZWFuIHJlc2V0IGFmdGVyIHBvd2VyLW9uCi0gIC0gQWRkIHN1cHBvcnQgZm9yIEVYQklUR0VOIGJvYXJkIChha2EgImdlbmllIikKLSAgLSBBZGQgc3VwcG9ydCBmb3IgU0w4MjQ1IGJvYXJkCi0KLSogQ29kZSBjbGVhbnVwOgotICAtIHJlbW92ZSB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgdHJhaWxpbmcgZW1wdHkgbGluZXMsIEMrKyBjb21tZW50cywgZXRjLgotICAtIHNwbGl0IGNtZF9ib290LmMgKHNlcGFyYXRlIGNtZF9iZGluZm8uYyBhbmQgY21kX2xvYWQuYykKLQotKiBQYXRjaGVzIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNSBKdW4gMjAwMzoKLSAgLSBtYWpvciByZXdvcmsgb2YgY29tbWFuZCBzdHJ1Y3R1cmUKLSAgICAod29yayBkb25lIG1vc3RseSBieSBNaWNoYWwgQ2VuZHJvd3NraSBhbmQgSm9ha2ltIEtyaXN0aWFuc2VuKQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMC40LjA6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDI2IEp1biAyMDAzOgotICAtIGNzYjIyNiBjb25maWd1cmF0aW9uIHVwZGF0ZWQKLSAgLSBjcmVkaXRzIGZvciBsb2dvZGwgcG9ydCB1cGRhdGVkCi0gIC0gaW5ub2tvbSBjb25maWd1cmF0aW9uIHVwZGF0ZWQKLSAgLSBsb2dvZGwgdHJlZSB1cGRhdGUsIHN0aWxsIHdpdGggY29kaW5nIHN0eWxlIGluY29uc2lzdGVuY2llcwotICAtIGFkZGVkIE9DTSBmb3IgcHBjNDA1IHdhcm5pbmcgdG8gUkVBRE1FCi0KLSogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDI1IEp1biAyMDAzOgotICB1cGRhdGUgTmV0VmlhIHdpdGggVjIgYm9hcmQgc3VwcG9ydAotCi0qIEhlYWRlciBmaWxlIGNsZWFudXAgZm9yIEFSTQotCi0qIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDI0IEp1biAyMDAzOgotICAtIG1ha2Ugc3VyZSB0byB1c2Ugb25seSBVLWJvb3QgcHJvdmlkZWQgaGVhZGVyIGZpbGVzCi0gIC0gZml4IHByb2JsZW1zIHdpdGggIi5yb2RhdGEuc3RyMS40IiBzZWN0aW9uIGFzIHVzZWQgYnkgR0NDLTMueAotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgSnVuIDIwMDM6Ci0gIC0gVXBkYXRlIGVzZCBBU0g0MDUgYm9hcmQgZmlsZXMuCi0gIC0gVXBkYXRlIGVzZCBEQVNBX1NJTSBjb25maWcgZmlsZS4KLSAgLSBBZGQgcGluZyBjb21tYW5kIHRvIHNvbWUgZXNkIGJvYXJkcy4KLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMyBKdW4gMjAwMzoKLSAgVXBkYXRlIGZvciBNUEM4MjYwQURTIGJvYXJkCi0KLSogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjMgSnVuIDIwMDM6Ci0gIC0gY2xlYW51cCBvZiBHQ0MgMy54IGNvbXBpbGVyIHdhcm5pbmdzCi0KLSogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDQgSnVuIDIwMDM6Ci0gIGFkZCBsYXJnZSBtZW1vcnkgc3VwcG9ydCBmb3IgTVBDODI2NkFEUyBib2FyZAotCi0qIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE5IEp1bmUgMDM6Ci0gIC0gRW5hYmxlZCBzdGFuZGFyZCB1LWJvb3QgZGV2aWNlIGFic3RyYWN0aW9uIGZvciBBUk0KLSAgLSBFbmFibGVkIGNvbnNvbGUgZGV2aWNlIGZvciBBUk0KLSAgLSBJbml0aWxpemVkIGJpX2JhdWRyYXRlIGZvciBBUk0KLQotKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMjMgQXByIDIwMDM6Ci0gIGZpeCBieXRlIG9yZGVyIGZvciA4MjR4IEkyQyBhZGRyZXNzZXMgKHdyaXRlIG9wKQotCi0qIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDIwIEp1biAyMDAzOgotICAtIGh5bW9kIHVwZGF0ZQotICAtIGNsZWFudXAgKGVzcGVjaWFsbHkgZm9yIGdjYy0zLnggY29tcGlsZXJzKQotCi0qIFBhdGNoIGJ5IFRvbSBHdWlsbGlhbXMsIDIwIEp1biAyMDAzOgotICBhZGRlZCBDT05GSUdfNzUwRlggc3VwcG9ydCBmb3IgSUJNIDc1MEZYIHByb2Nlc3NvcnMKLQotKiBQYXRjaCBieSBEZXZpbiBDcnVtYiwgMDIgQXByIDIwMDM6Ci0gIEZpeCBjbG9jayBkaXZpZGVyIHJvdW5kaW5nIHByb2JsZW0gaW4gZHJpdmVycy9zZXJpYWwuYwotCi0qIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE5IEp1bmUgMDM6Ci0gIC0gRml4ZWQgc21jOTFjMTExIGRyaXZlciB0byBzeW5jIHdpdGggdGhlIHUtYm9vdCBlbnZpcm9ubWVudAotICAgIChkcml2ZXIvc21jOTFjMTExLmMpLgotICAtIEFkZGVkIGV0aF9pbml0IGVycm9yIHJldHVybiBjaGVjayBpbiBOZXRMb29wIChuZXQvbmV0LmMpLgotCi0qIFBhdGNoIGJ5IEtlbiBDaG91LCAxOSBKdW5lIDIwMDM6Ci0gIEFkZGVkIHN1cHBvcnQgZm9yIEEzMDAwIFNCQyBib2FyZCAoQXJ0aXMgTWljcm9zeXN0ZW1zIEluYy4pCi0KLSogUGF0Y2hlcyBieSBNdXJyYXkgSmVuc2VuLCAxNyBKdW4gMjAwMzoKLSAgLSBIeW1vZCBib2FyZCBkYXRhYmFzZSBtb2RzOiBhZGQgIndobyIgZmllbGQgYW5kIG5ldyB4aWxpbnggY2hpcCB0eXBlcwotICAtIHByb3ZpZGUgbmV3ICJpbml0X2NtZF90aW1lb3V0KCkiIGZ1bmN0aW9uIHNvIGNvZGUgZXh0ZXJuYWwgdG8KLSAgICAiY29tbW9uL21haW4uYyIgY2FuIHVzZSB0aGUgInJlc2V0X2NtZF90aW1lb3V0KCkiIGZ1bmN0aW9uIGJlZm9yZQotICAgIGVudGVyaW5nIHRoZSBtYWluIGxvb3AKLSAgLSBhZGQgRFRUIHN1cHBvcnQgZm9yIGFkbTEwMjEgKG5ldyBmaWxlIGR0dC9hZG0xMDIxLmM7IGNvbmZpZwotICAgIHNsaWdodGx5IGRpZmZlcmVudC4gc2VlIGluY2x1ZGUvY29uZmlncy9oeW1vZC5oIGZvciBhbiBleGFtcGxlCi0gICAgKHJlcXVpcmVzIENPTkZJR19EVFRfQURNMTAyMSwgQ09ORklHX0RUVF9TRU5TT1JTLCBhbmQKLSAgICBDRkdfRFRUX0FETTEwMjEgZGVmaW5lZCkKLSAgLSBhZGQgbmV3ICJlZXByb21fcHJvYmUoKSIgZnVuY3Rpb24gd2hpY2ggaGFzIHNpbWlsYXIgYXJncyBhbmQKLSAgICBiZWhhdmVzIGluIGEgc2ltaWxhciB3YXkgdG8gImVlcHJvbV9yZWFkKCkiIGV0Yy4KLSAgLSBhZGQgODI2MCBGQ0MgZXRoZXJuZXQgbG9vcGJhY2sgY29kZSAobmV3ICJldGhfbG9vcGJhY2tfdGVzdCgpIgotICAgIGZ1bmN0aW9uIHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmaW5pbmcgQ09ORklHX0VUSEVSX0xPT1BCQUNLX1RFU1QpCi0gIC0gZ2RidG9vbHMgY29weXJpZ2h0IHVwZGF0ZQotICAtIGVuc3VyZSB0aGF0IHNldF9tc3IoKSBleGVjdXRlcyB0aGUgInN5bmMiIGFuZCAiaXN5bmMiIGluc3RydWN0aW9ucwotICAgIGFmdGVyIHRoZSAibXRtc3IiIGluc3RydWN0aW9uIGluIGNwdS9tcGM4MjYwL2ludGVycnVwdHMuYwotICAtIDgyNjAgSS9PIHBvcnRzIGZpeDogT3BlbiBEcmFpbiBzaG91bGQgYmUgc2V0IGxhc3Qgd2hlbiBjb25maWd1cmluZwotICAtIGFkZCBTSVUgSVJRIGRlZmluZXMgZm9yIDgyNjAKLSAgLSBhbGxvdyBMRFNDUklQVCBvdmVycmlkZSBhbmQgT0JKQ0ZMQUdTIGluaXRpYWxpemF0aW9uOiBjaGFuZ2UgdG8KLSAgICBjb25maWcubWsgdG8gYWxsb3cgYm9hcmQgY29uZmlndXJhdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIEdOVQotICAgIGxpbmtlciBzY3JpcHQsIHNlbGVjdGVkIHZpYSB0aGUgTERTQ1JJUFQsIG1ha2UgdmFyaWFibGUsIGFuZCB0bwotICAgIGdpdmUgYW4gaW5pdGlhbCB2YWx1ZSB0byB0aGUgT0JKQ0ZMQUdTIG1ha2UgdmFyaWFibGUKLSAgLSA4MjYwIGkyYyBlbmhhbmNlbWVudDoKLSAgICBvIGNvcnJlY3RseSBleHRlbmRzIHRoZSB0aW1lb3V0IGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiBhbGwKLSAgICAgIHF1ZXVlZCBtZXNzYWdlcyBmb3IgYm90aCB0cmFuc21pdCBhbmQgcmVjZWl2ZQotICAgIG8gd2lsbCBub3QgY29udGludWUgd2l0aCByZWNlaXZlIGlmIHRyYW5zbWl0IHRpbWVzIG91dAotICAgIG8gZW5zdXJlcyB0aGF0IHRoZSBlcnJvciBjYWxsYmFjayBpcyBkb25lIGZvciBhbGwgcXVldWVkIHR4Ci0gICAgICBhbmQgcnggbWVzc2FnZXMKLSAgICBvIGNvcnJlY3RseSBkZXRlY3RzIGJvdGggdHggYW5kIHJ4IHRpbWVvdXRzLCBvbmx5IGRlbGl2ZXJzIG9uZSB0bwotICAgICAgdGhlIGNhbGxiYWNrLCBhbmQgZG9lcyBub3Qgb3ZlcndyaXRlIGFuIGVhcmxpZXIgZXJyb3IKLSAgICBvIGxvZ2ljIGluIGkyY19wcm9iZSBub3cgY29ycmVjdAotICAtIGFkZCAidnByaW50ZigpIiBmdW5jdGlvbiBzbyB0aGF0ICJwYW5pYygpIiBmdW5jdGlvbiBjYW4gYmUKLSAgICB0ZWNobmljYWxseSBjb3JyZWN0Ci0gIC0gbWFueSBIeW1vZCBib2FyZCBjaGFuZ2VzCi0KLSogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE0IEp1biAyMDAzOgotICAtIGFkZCBzdXBwb3J0IGZvciBMb2dvdHJvbmljIERMIGRhdGFsb2dnZXIgYm9hcmQKLSAgLSBjbGVhbnVwIHNlcmlhbCBsaW5lIGFmdGVyIGtlcm1pdCBiaW5hcnkgZG93bmxvYWQKLSAgLSBhZGQgZGVidWdYIG1hY3JvIChkZWJ1ZyBsZXZlbCBzdXBwb3J0KQotICAtIHVwZGF0ZSBtYWNoLXR5cGVzLmggdG8gbGF0ZXN0IGFybS5saW51eC5vcmcudWsgbWFzdGVyIGxpc3QuCi0KLSogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDEyIEp1biAyMDAzOgotICAtIHJld3JpdGUgb2YgdGhlIFMzQzI0WDAgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgc3R1ZmYKLSAgLSAiZHJpdmVyIiBmb3IgdGhlIGJ1aWx0LWluIFMzQzI0WDAgUlRDCi0KLSogUGF0Y2hlcyBieSBZdWxpIEJhcmNvaGVuLCAxMiBKdW4gMjAwMzoKLSAgLSBBZGQgTUlJIHN1cHBvcnQgYW5kIEV0aGVybmV0IFBIWSBpbml0aWFsaXphdGlvbiBmb3IgTVBDODI2MEFEUyBib2FyZAotICAtIEZpeCBpbmNvcnJlY3QgU0lVTUNSIGluaXRpYWxpc2F0aW9uIGNhdXNlZCBieSB3cm9uZyBIYXJkIFJlc2V0Ci0gICAgY29uZmlndXJhdGlvbiB3b3JkIHN1cHBsaWVkIGJ5IEZQR0Egb24gc29tZSBNUEM4MjYwQURTIGJvYXJkcwotCi0qIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxMCBKdW4gMjAwMzoKLSAgVW5pZnkgc3RhdHVzIExFRCBpbnRlcmZhY2UKLQotKiBBZGQgc3VwcG9ydCBmb3IgRFMxMjg4NyBSVEM7IGFkZCBSVEMgc3VwcG9ydCBmb3IgQVRDIGJvYXJkCi0KLSogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMTEgSnVuIDIwMDM6Ci0gIE1vZGlmaWNhdGlvbnMgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdAotICAtIEFkZCBBdG1lbCBEYXRhRmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4KLSAgLSBBZGQgcG9zc2liaWxpdHkgdG8gYm9vdCBhIExpbnV4IGZyb20gRGF0YUZsYXNoIHdpdGggQk9PVE0gY29tbWFuZC4KLSAgLSBBZGQgRmxhc2ggZGV0ZWN0aW9uIG9uIEF0bWVsIEFUOTFSTTkyMDBESwotICAgIChiZXR3ZWVuIEF0bWVsIEFUNDlCVjE2MTQgYW5kIEFUNDlCVjE2MTRBIGZsYXNoZXMpCi0gIC0gUmVwbGFjZSBvbGQgRXRoZXJuZXQgUEhZIGxheWVyIGZ1bmN0aW9ucwotICAtIENoYW5nZSBsaW5rIGFkZHJlc3MKLQotKiBQYXRjaCBieSBGcmFuayBTbWl0aCwgOSBKdW4gMjAwMzoKLSAgdXNlIENSSVRfRVhDRVBUSU9OIGZvciBtYWNoaW5lIGNoZWNrIG9uIDR4eAotCi0qIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDEzIEp1biAyMDAzOgotICBhZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgImNhcmluZm8iIGNvbW1hbmQgaW4gY21kX2ltbWFwLmMKLQotKiBGaXggQ09ORklHX05FVF9NVUxUSSBzdXBwb3J0IGluIGluY2x1ZGUvbmV0LmgKLQotKiBQYXRjaGVzIGJ5IEt5bGUgSGFycmlzLCAxMyBNYXIgMjAwMzoKLSAgLSBBZGQgRkFUIHBhcnRpdGlvbiBzdXBwb3J0Ci0gIC0gQWRkIGNvbW1hbmQgc3VwcG9ydCBmb3IgRkFUCi0gIC0gQWRkIGNvbW1hbmQgc3VwcG9ydCBmb3IgTU1DCi0gIC0tLS0KLSAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIHZpZGVvCi0gIC0gQWRkIEludGVsIFBYQSBzdXBwb3J0IGZvciBNTUMKLSAgLS0tLQotICAtIEVuYWJsZSBNTUMgYW5kIEZBVCBmb3IgbHViYm9jayBib2FyZAotICAtIE90aGVyIG1pc2MgY2hhbmdlcyBmb3IgbHViYm9jayBib2FyZAotCi0qIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgQXByaWwgMDIsIDIwMDM6Ci0gIGZpeCBmb3IgU01TQzkxMTExIGRyaXZlcgotCi0qIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNCBKdW4gMjAwMzoKLSAgbWFrZSBwcGM0MDUgZXRoZXJuZXQgZHJpdmVyIGNvbXBhdGlibGUgd2l0aCBDT05GSUdfTkVUX01VTFRJIG9wdGlvbgotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDUgSnVuIDIwMDM6Ci0gIC0gUFBDNHh4OiBGaXggYnVnIGZvciBpbml0aWFsIHN0YWNrIGluIGRhdGEgY2FjaGUgYXMgcG9pbnRlZCBvdXQgYnkKLSAgICBUaG9tYXMgU2NoYWVmZXIgKHRzY2hhZWZlckBnaWdhLXN0cmVhbS5kZSkuIE5vdyBpbml0YWwgc3RhY2sgaW4KLSAgICBkYXRhIGNhY2hlIGNhbiBiZSB1c2VkIGV2ZW4gaWYgdGhlIGNoaXAgc2VsZWN0IGlzIGluIHVzZS4KLSAgLSBDRkdfUlhfRVRIX0JVRkZFUiBhZGRlZCB0byBzZXQgdGhlIGV0aGVybmV0IHJlY2VpdmUgYnVmZmVyIGNvdW50Ci0gICAgKHNlZSBSRUFETUUgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24pLgotICAtIENoYW5nZWQgY29uZmlnIGZpbGVzIG9mIENPTkZJR19FRVBSTzEwMCBib2FyZHMgdG8gdXNlIHRoZQotICAgIENGR19SWF9FVEhfQlVGRkVSIGRlZmluZS4KLQotKiBBZGQgc3VwcG9ydCBmb3IgUk1VIGJvYXJkCi0KLSogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgYXQgMTAwLzUwIE1IegotCi0qIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwMiBKdW4gMjAwMzoKLSAgbWFqb3IgcmVjb25zdHJ1Y3Rpb24gb2YgbmV0d29ya2luZyBjb2RlOwotICBhZGQgInBpbmciIHN1cHBvcnQgKG91dGdvaW5nIG9ubHkhKQotCi0qIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNCBKdW5lIDIwMDM6Ci0gIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1VCBib2FyZAotCi0qIFBhdGNoZXMgYnkgVWRpIEZpbmtlbHN0ZWluLCAyIEp1bmUgMjAwMzoKLSAgLSBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20ga2V5Ym9hcmRzLCBpbml0aWFsaXplZCBieSBkZWZpbmluZyBhCi0gICAgYm9hcmQtc3BlY2lmaWMgZHJ2X2tleWJvYXJkX2luaXQgYXMgd2VsbCBhcyBkZWZpbmluZyBDT05GSUdfS0VZQk9BUkQgLgotICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBSQkM4MjMgYm9hcmQuCi0gIC0gY3B1L21wYzh4eC9sY2QuYyBub3cgYXV0b21hdGljYWxseSBjYWxjdWxhdGVzIHRoZQotICAgIEhvcml6b250YWwgUGl4ZWwgQ291bnQgZmllbGQuCi0KLSogRml4IGFsaWdubWVudCBwcm9ibGVtIGluIEJPT1RQIChkaGNwX2xlYXNldGltZSBvcHRpb24pCi0gIFtwb2ludGVkIG91dCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5p6HJlLCAyIEp1biAyMDAzXQotCi0qIFBhdGNoIGJ5IE1hcmsgUmFrZXMsIDE0IE1heSAyMDAzOgotICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgZTEwMDAgZ2lnIGNhcmRzLgotCi0qIFBhdGNoIGJ5IE55ZSBMaXUsIDMgSnVuIDIwMDM6Ci0gIGZpeCBjcml0aWNhbCB0eXBvIGluIE1BTVIgZGVmaW5pdGlvbiAoaW5jbHVkZS9tcGM4eHguaCkKLQotKiBGaXggcmVxdWlyZW1lbnQgdG8gYWxpZ24gVS1Cb290IGltYWdlIG9uIDE2IGtCIGJvdW5kYXJpZXMgb24gUFBDLgotCi0qIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDIgSnVuIDIwMDMKLSAgTWlub3IgY2hhbmdlcyBmb3IgS1VQNEsgY29uZmlndXJhdGlvbgotCi0qIFBhdGNoIGJ5IE1hcmMgU2luZ2VyLCAyOSBNYXkgMjAwMzoKLSAgRml4ZWQgcmFycCBib290IG1ldGhvZCBmb3IgSUEzMiBhbmQgb3RoZXIgbGl0dGxlLWVuZGlhbiBDUFVzLgotCi0qIFBhdGNoIGJ5IE1hcmMgU2luZ2VyLCAyOCBNYXkgMjAwMzoKLSAgQWRkZWQgcG9ydCBJL08gY29tbWFuZHMuCi0KLSogUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrLCAyOCBNYXkgMjAwMwotICAtIGNwdS9tcGM4MjR4L3N0YXJ0LlM6IGZpeCByZWxvY2F0aW9uIGNvZGUgd2hlbiBib290aW5nIGZyb20gUkFNCi0gIC0gbWlub3IgcGF0Y2hlcyBmb3IgdXR4ODI0NQotCi0qIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMjggTWF5IDIwMDM6Ci0gIHg4NiB1cGRhdGUKLQotKiBQYXRjaCBieSBEYXZlIEVsbGlzLCA5IE1heSAyMDAzICsgMjcgTWF5IDIwMDM6Ci0gIGFkZCBuYW5kIGZsYXNoIHN1cHBvcnQgdG8gU1hOSTg1NVQgY29uZmlndXJhdGlvbgotICBmaXgvZXh0ZW5kIG5hbmQgZmxhc2ggc3VwcG9ydDoKLSAgLSBmaXggJ25hbmQgZXJhc2UnIGNvbW1hbmQgc28gZG9lcyBub3QgZXJhc2UgYmFkIGJsb2NrcwotICAtIGZpeCAnbmFuZCB3cml0ZScgY29tbWFuZCBzbyBkb2VzIG5vdCB3cml0ZSB0byBiYWQgYmxvY2tzCi0gIC0gZml4IG5hbmRfcHJvYmUoKSBzbyBoYW5kbGVzIG5vIGZsYXNoIGRldGVjdGVkIHByb3Blcmx5Ci0gIC0gYWRkIGRvYy9SRUFETUUubmFuZAotICAtIGFkZCAuamZmczIgYW5kIC5vb2Igb3B0aW9ucyB0byBuYW5kIHJlYWQvd3JpdGUKLSAgLSBhZGQgJ25hbmQgYmFkJyBjb21tYW5kIHRvIGxpc3QgYmFkIGJsb2NrcwotICAtIGFkZCAnY2xlYW4nIG9wdGlvbiB0byAnbmFuZCBlcmFzZScgdG8gd3JpdGUgSkZGUzIgY2xlYW4gbWFya2VycwotICAtIG1ha2UgTkFORCByZWFkL3dyaXRlIGZhc3RlcgotCi0qIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAyMyBNYXkgMjAwMzoKLSAgVXBkYXRlIGZvciBNUEM4MjY2QURTIGJvYXJkCi0KLSogR2V0IChtb3N0bHkpIHJpZCBvZiBDRkdfTU9OSVRPUl9MRU4gZGVmaW5pdGlvbjsgY29tcHV0ZSByZWFsIGxlbmd0aAotICBpbnN0ZWFkIENGR19NT05JVE9SX0xFTiBpcyBub3cgb25seSB1c2VkIHRvIGRldGVybWluZQkgX2F0X2NvbXBpbGVfCi0gIF90aW1lXyAgKCEpIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBlbWJlZGRlZCB3aXRoaW4gdGhlIFUtQm9vdCBpbWFnZSwKLSAgb3IgaW4gYSBzZXBhcmF0ZSBmbGFzaCBzZWN0b3IuCi0KLSogQ2xlYW51cCBDRkdfREVSICNkZWZpbmVzIGluIGNvbmZpZyBmaWxlcyAod2QgbWFpbnRhaW5lZCBvbmx5KQotCi0qIEZpeCBkYXRhIGFib3J0IGV4Y2VwdGlvbiBoYW5kbGluZyBmb3IgYXJtOTIwdCBDUFUKLQotKiBGaXggYWxpZ25tZW50IHByb2JsZW1zIHdpdGggZmxhc2ggZHJpdmVyIGZvciBUUkFCIGJvYXJkCi0KLSogUGF0Y2ggYnkgRG9uYWxkIFdoaXRlLCAyMSBNYXkgMjAwMzoKLSAgZml4IGNhbGN1bGF0aW9uIG9mIGJhc2UgYWRkcmVzcyBpbiBwY2lfaG9zZV9jb25maWdfZGV2aWNlKCkKLQotKiBGaXggYnVnIGluIGNvbW1hbmQgbGluZSBwYXJzaW5nOiAiY21kMTtjbWQyIiBpcyBzdXBwb3NlZCB0byBhbHdheXMKLSAgZXhlY3V0ZSAiY21kMiIsIGV2ZW4gaWYgImNtZDEiIGZhaWxzLiBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQKLSAgdG8gInJ1biB2YXIxIHZhcjIiIHdoZXJlIHRoZSBjb250ZW50cyBvZiAidmFyMiIgd2lsbCBOT1QgYmUKLSAgZXhlY3V0ZWQgd2hlbiBhIGNvbW1hbmQgaW4gInZhcjEiIGZhaWxzLgotCi0qIEFkZCB6ZXJvLWNvcHkgcmFtZGlzayBzdXBwb3J0IChyZXF1aXJlcyBjb3JyZXNwb25kaW5nIGtlcm5lbCBzdXBwb3J0ISkKLQotKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMjAgTWF5IDIwMDM6Ci0gIEluIHByZXBhcmF0aW9uIGZvciBhbiBpeHAgcG9ydCwgcmVuYW1lIGNwdS94c2NhbGUgYW5kIGFyY2gteHNjYWxlCi0gIGludG8gY3B1L3B4YSBhbmQgYXJjaC1weGEuCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMyBNYXkgMjAwMzoKLSAgLSBJQk0gUFBDNDA1RVAgcG9ydCBhZGRlZC4KLSAgLSBDT05GSUdfVUFSVDFfQ09OU09MRSBhZGRlZC4gSWYgZGVmaW5lZCBpbnRlcm5hbCBVQVJUMSAoYW5kIG5vdAotICAgIFVBUlQwKSBpcyB1c2VkIGFzIGRlZmF1bHQgVS1Cb290IGNvbnNvbGUuIFBQQzR4eCBvbmx5IQotICAtIGVzZCBBU0g0MDUgYm9hcmQgYWRkZWQgKFBQQzQwNUVQIGJhc2VkKS4KLSAgLSBCVUJJTkdBNDA1RVAgYm9hcmQgYWRkZWQgKFBQQzQwNUVQIGJhc2VkIC0gSUJNIEV2YWwgQm9hcmQpLgotICAtIGVzZCBDUENJNDA1QUIgYm9hcmQgYWRkZWQuCi0gIC0gZXNkIFBNQzQwNSBib2FyZCBhZGRlZC4KLSAgLSBVcGRhdGUgb2Ygc29tZSBlc2QgYm9hcmRzLgotCi0qIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxOSBNYWkgMjAwMzoKLSAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUtMyBib2FyZAotCi0qIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDIyIE1heSAyMDAzOgotICBGaXggcHJvYmxlbSB3aXRoIG9ubHkgcGFydGlhbGx5IGNsZWFyZWQgLmJzcyBzZWdtZW50Ci0KLSogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEyIE1heSAyMDAzOgotICBnZXQgUENJIHRvIHdvcmsgb24gYSBNUEM4MjY2QURTIGJvYXJkOyBpbmNvcnBvcmF0ZSBjaGFuZ2UgdG8KLSAgY3B1L21wYzgyNjAvcGNpLmMgdG8gZW5hYmxlIG92ZXJyaWRlcyBvZiBQQ0kgbWVtb3J5IHBhcmFtZXRlcnMKLQotKiBQYXRjaCBieSBOeWUgTGl1LCAxIE1heSAyMDAzOgotICBtaW5vciBwYXRjaGVzIGZvciB0aGUgRkFEUzh4eAotCi0qIFBhdGNoIGJ5IFRob21hcyBTY2jkZmVyLCAyOCBBcHIgMjAwMzoKLSAgRml4IFNQRCBoYW5kbGluZyBmb3IgMjU2IEVDQyBESU1NIG9uIFdhbG51dAotCi0qIEFkZCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgYml0bWFwcyBmb3IgVFJBQidzCVZGRCBjb21tYW5kOwotICBhbGxvdyB0byBwYXNzIGJvb3QgYml0bWFwIGFkZHJlc3NlcyBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXM7Ci0gIGFsbG93IGZvciB6ZXJvIGJvb3QgZGVsYXkKLQotKiBQYXRjaCBieSBDaHJpc3RpYW4gR2Vp32luZ2VyLCAxOSBNYXkgMjAwMjoKLSAgT24gVFJBQjogd2FpdCB1bnRpbCB0aGUgZHVtbXkgYnl0ZSBoYXMgYmVlbiBjb21wbGV0ZWx5IHNlbnQKLQotKiBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDIyIEFwciAyMDAzOgotICB1cGRhdGUgZm9yIENyYXlMMSBib2FyZAotCi0qIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyMSBBcHIgMjAwMzoKLSAgYWRkIGJvb3Qgc3VwcG9ydCBmb3IgQVJUT1MgKGEgcHJvcHJpZXRhcnkgT1MpCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTEgQXByIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzM4Ci0KLSogUGF0Y2ggYnkgUm9kIEJveWNlLCAyNCBKYW4gMjAwMzoKLSAgRml4IGNvdW50aW5nIG9mIGV4dGVuZGVkIHBhcnRpdGlvbnMgaW4gZGlza2Jvb3QgY29tbWFuZAotCi0qIFBhdGNoIGJ5IENocmlzdG9waGUgTGluZGhlaW1lciwgMjAgTWF5IDIwMDM6Ci0gIGFsbG93IHRoZSB1c2Ugb2YgQ0ZHX0xPQURTIHdoZW4gQ0ZHX05PX0ZMQVNIIGlzIHNldAotCi0qIEZpeCBTRFJBTSB0aW1pbmcgb24gUHVycGxlIGJvYXJkCi0KLSogQWRkIHN1cHBvcnQgZm9yIENvbXBhY3RGbGFzaCBvbiBBVEMgYm9hcmQKLSAgKGluY2x1ZGVzIHN1cHBvcnQgZm9yIEludGVsIDgyMzY1IGFuZCBjb21wYXRpYmxlIFBDIENhcmQgY29udHJvbGxlcnMsCi0gIGFuZCBZZW50YS1jb21wYXRpYmxlIFBDSS10by1DYXJkQnVzIGNvbnRyb2xsZXJzKQotCi0qIFBhdGNoIGJ5IE1hdGhpanMgSGFhcm1hbiwgMDggTWF5IDIwMDM6Ci0gIEFkZCBsYW45MWM5NiBkcml2ZXIgKHRlc3RlZCBvbiBMdWJib2NrIGFuZCBjdXN0b20gUFhBMjUwIGJvYXJkIG9ubHkpCi0KLSogRml4IHByb2JsZW0gd2l0aCB1c2FnZSBvZiAidHJ1ZSIgKHVuZGVmaW5lZCBpbiBjdXJyZW50IHZlcnNpb25zIG9mIGJmZC5oKQotCi0qIEFkZCBzdXBwb3J0IGZvciBQcm9tZXNzIEFUQyBib2FyZAotCi0qIFBhdGNoIGJ5IEtlaXRoIE91dHdhdGVyLCAyOCBBcHIgMjAwMzoKLSAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIGFuZCBhZGRpdGlvbnMgdG8gR0VOODYwVCBib2FyZCBzcGVjaWZpYyBjb2RlLgotICAtIEFkZGVkIEdFTjg2MF9TQyB2YXJpYW50IHRvIEdFTjg2MFQuCi0gIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyB0byBHRU44NjBUIGRvY3VtZW50YXRpb24uCi0gIC0gQ29ycmVjdCBkdXBsaWNhdGUgZW50cnkgaW4gVS1Cb290IENSRURJVFMgZmlsZS4KLSAgLSBBZGQgR0VOODYwVF9TQyBlbnRyeSBpbiBNQUlOVEFJTkVSUyBmaWxlLgotICAtIFVwZGF0ZSBDUkVESVRTIGZpbGUgd2l0aCBHRU44NjBUX1NDIGluZm8uCi0KLSogVXBkYXRlIFNtaXRocyBBZXJvc3BhY2UgYWRkcmVzc2VzIGluIE1BSU5UQUlORVJTIGZpbGUKLQotKiBGaXggZXJyb3IgaGFuZGxpbmcgaW4gaHVzaCdzIHZlcnNpb24gb2YgInJ1biIgY29tbWFuZAotCi0qIExXTU9OIGV4dGVuc2lvbnM6Ci0gIC0gU3BsYXNoc2NyZWVuIHN1cHBvcnQKLSAgLSBtb2RlbSBzdXBwb3J0Ci0gIC0gc3lzbW9uIHN1cHBvcnQKLSAgLSB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgZW5hYmxpbmcgb2YgTENECi0KLSogQWxsb3cgYm9vdGluZyBmcm9tIG9sZCAiUFBDQm9vdCIgZGlzayBwYXJ0aXRpb25zCi0KLSogQWRkIHN1cHBvcnQgZm9yIFRRTTgyNTUgQm9hcmQgLyBNUEM4MjU1IENQVQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjE6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogTWFrZSBzdXJlIEJsb2NrIExvY2sgQml0cyBnZXQgY2xlYXJlZCBpbiBSMzYwTVBJIGZsYXNoIGRyaXZlcgotCi0qIE1QQzgyMyBMQ0QgZHJpdmVyOiBGaWxsIGNvbG9yIG1hcCBiYWNrd2FyZHMsIHRvIGFsbG93IGZvciBzdGVhZHkKLSAgZGlzcGxheSB3aGVuIExpbnV4IHRha2VzIG92ZXIKLQotKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgotICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMgKHRoaXMgdGltZSBmb3IgcmVhbCkuCi0KLSogQWRkIHN1cHBvcnQgZm9yICJibXAgaW5mbyIgYW5kICJibXAgZGlzcGxheSIgY29tbWFuZHMgdG8gbG9hZAotICBiaXRtYXAgaW1hZ2VzOyB0aGlzIGNhbiBiZSB1c2VkIChmb3IgZXhhbXBsZSBpbiBhICJwcmVib290IgotICBjb21tYW5kKSB0byBkaXNwbGF5IGEgc3BsYXNoIHNjcmVlbiB2ZXJ5IHF1aWNrbHkgYWZ0ZXIgcG93ZXJvbi4KLQotKiBBZGQgc3VwcG9ydCBmb3IgMTMzIE1IeiBjbG9jayBvbiBJTkNBLUlQIGJvYXJkCi0KLSogUGF0Y2ggYnkgTHV0eiBEZW5uaWcsIDEwIEFwciAyMDAzOgotICBVcGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKLQotKiBBZGQgbmV3IG1lYW5pbmcgdG8gImF1dG9zdGFydCIgZW52aXJvbm1lbnQgdmFyaWFibGU6Ci0gIElmIHNldCB0byAibm8iLCBhIHN0YW5kYWxvbmUgaW1hZ2UgcGFzc2VkIHRvIHRoZQotICAiYm9vdG0iIGNvbW1hbmQgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGxvYWQgYWRkcmVzcwotICAoYW5kIGV2ZW50dWFsbHkgdW5jb21wcmVzc2VkKSwgYnV0IE5PVCBiZSBzdGFydGVkLgotICBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvYWQgYW5kIHVuY29tcHJlc3MgYXJiaXRyYXJ5Ci0gIGRhdGEuCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBBcHIgMjAwMzoKLSAgQ2hhbmdlZCBESENQIGNsaWVudCB0byB1c2UgSVAgYWRkcmVzcyBmcm9tIHNlcnZlciBvcHRpb24gZmllbGQgIzU0Ci0gIGZyb20gdGhlIE9GRkVSIHBhY2tldCBpbiB0aGUgc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQgaW4gdGhlIFJFUVVFU1QKLSAgcGFja2V0LiBUaGlzIGZpeGVzIGEgcHJvYmxlbSB1c2luZyBhIFdpbmRvd3MgMjAwMCBESENQIHNlcnZlciwKLSAgd2hlcmUgdGhlIERIQ1Atc2VydmVyIGlzIG5vdCB0aGUgVEZUUC1zZXJ2ZXIuCi0KLSogU2V0IG1heCBicmlnaHRuZXNzIGZvciBNTjExMjM2IGRpc3BsYXlzIG9uIFRSQUIgYm9hcmQKLQotKiBBZGQgc3VwcG9ydCBmb3IgVFFNODYyTCBtb2R1bGVzCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMDoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgNCBBcHIgMjAwMzoKLSAgQWRkIElETUEgZXhhbXBsZSBjb2RlICh0ZXN0ZWQgb24gODI2MCBvbmx5KQotCi0qIEFkZCBzdXBwb3J0IGZvciBQdXJwbGUgQm9hcmQgKE1JUFM2NCA1S2MpCi0KLSogQWRkIHN1cHBvcnQgZm9yIE1JUFM2NCA1S2MgQ1BVcwotCi0qIEZpeCBtaXNzaW5nIHNldHRpbmcgb2YgImxvYWRhZGRyIiBhbmQgImJvb3RmaWxlIiBvbiBBUk0gYW5kIE1JUFMKLQotKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgQXByIDIwMDM6Ci0gIC0gdXBkYXRlIE1JUDQwNS00IGJvYXJkCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA0IEFwciAyMDAzOgotICAtIFUtQm9vdCB2ZXJzaW9uIGVudmlyb25tZW50IHZhcmlhYmxlICJ2ZXIiIGFkZGVkCi0gICAgKENPTkZJR19WRVJTSU9OX1ZBUklBQkxFKS4KLSAgLSBDaGFuZ2VkIFBQQzQwNUdQciB2ZXJzaW9uIGZyb20gQSB0byBCLgotICAtIENoYW5nZWQgQ1BDSTQwNSB0byB1c2UgQ1RTIGluc3RlYWQgb2YgRFNSIG9uIFBQQzQwNSBVQVJUMS4KLQotKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCAwMyBBcHJpbCAyMDAzOgotICAtIGZpeCBQQ0kgSVJRcyBvbiBNUEwgYm9hcmRzCi0gIC0gZml4IHR3byBtb3JlIHVuLXJlbG9jYXRlZCBwb2ludGVyIHByb2JsZW1zCi0KLSogRml4IGJlaGF2aW91ciBvZiAicnVuIiBjb21tYW5kOgotICAtIHByaW50IGVycm9yIG1lc3NhZ2UgaXYgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QKLSAgLSB0ZXJtaW5hdGUgcHJvY2Vzc2luZyBvZiBhcmd1bWVudHMgaW4gY2FzZSBvZiBlcnJvcgotCi0qIFBhdGNoZXMgYnkgUGV0ZXIgRmlndWxpLCAxMCBNYXIgMjAwMwotICAtIEFkZCBzdXBwb3J0IGZvciBCVFVBUlQgb24gUFhBIHBsYXRmb3JtCi0gIC0gQWRkIHN1cHBvcnQgZm9yIFdFUCBFUDI1MCAoUFhBKSBib2FyZAotCi0qIEZpeCBmbGFzaCBwcm9ibGVtcyBvbiBJTkNBLUlQOyBhZGQgdG9vbCB0byBhbGxvdyBicnVuaW5nIGltYWdlcyAgdG8KLSAgZmxhc2ggdXNpbmcgYSBCREkyMDAwCi0KLSogSW1wbGVtZW50IGZpeCBmb3IgSTJDIEVkZ2UgQ29uZGl0aW9ucyBwcm9ibGVtIGZvciBhbGwgYm9hcmRzIHRoYXQKLSAgdXNlIHRoZSBiaXQtYmFuZ2luZyBkcml2ZXIgKGNvbW1vbi9zb2Z0X2kyYy5jKQotCi0qIFBhdGNoIGJ5IE1hcnRpbiBXaW5pc3RvZXJmZXIsIDIzIE1hciAyMDAzCi0gIC0gQWRkIHBvcnQgdG8gTVBDNTU1LzU1NiBtaWNyb2NvbnRyb2xsZXJzCi0gIC0gQWRkIHN1cHBvcnQgZm9yIGNtaSBjdXN0b21lciBib2FyZCB3aXRoCi0gICAgSW50ZWwgMjhGMTI4SjNBLCAyOEYzMjBKM0Egb3IgMjhGNjQwSjNBIGZsYXNoLgotCi0qIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMjggTWFyIDIwMDM6Ci0gIC0gZml4IGNvbW1vbi9jbWRfbmFuZC5jCi0KLSogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDI0IE1hciAyMDAzOgotICAtIGFkZCB0aHJlYWRzIC8gc2NoZWR1bGVyIGV4YW1wbGUgY29kZQotCi0qIEFkZCBwYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMzEgTWFyIDIwMDM6Ci0gIC0gYWRkIGN0cmwtYyBzdXBwb3J0IGZvciBrZXJtaXQgZG93bmxvYWQKLSAgLSBhbGlnbiBiZGluZm8gb3V0cHV0IG9uIEFSTQotICAtIGNzYjIyNiBib2FyZDogYnJpbmcgaW4gc3luYyB3aXRoIGlubm9rb20vbWVtc2V0dXAuUwotICAtIGNzYjIyNiBib2FyZDogZml4IE1EUkVGUiBoYW5kbGluZwotICAtIG1pc2MgZG9jIGZpeGVzIC8gZXh0ZW5zaW9ucwotICAtIGlubm9rb20gYm9hcmQ6IGNsZWFudXAsIE1EUkVGUiBmaXggaW4gbWVtc2V0dXAuUywgY29uZmlnIHVwZGF0ZQotICAtIGFkZCBCT09UX1BST0dSRVNTIHRvIGFybWxpbnV4LmMKLQotKiBBZGQgQ1BVIElELCB2ZXJzaW9uLCBhbmQgY2xvY2sgc3BlZWQgZm9yIElOQ0EtSVAKLQotKiBQYXRjaGVzIGJ5IERhdmUgRWxsaXMsIDE4IE1hciAyMDAzIGZvciBTWE5JODU1VCBib2FyZDoKLSAgLSBmaXggU1JBTSBhbmQgU0RSQU0gbWVtb3J5IHNpemluZwotICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQKLSAgLSBhZGQgTUFDIGFkZHJlc3MgZm9yIHNlY29uZCAoU0NDMSkgZXRoZXJuZXQgcG9ydAotCi0qIFVwZGF0ZSBkZWZhdWx0IGVudmlyb25tZW50IGZvciBUUU04MjYwIGJvYXJkCi0KLSogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAxNiBNYXIgMjAwMzoKLSAgLSBBZGQgTkFORCBmbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nLCB3cml0aW5nLCBhbmQgZXJhc2luZyBOQU5ECi0gICAgZmxhc2ggKGNlcnRhaW4gZm9ybXMgb2Ygd2hpY2ggYXJlIGNhbGxlZCBTbWFydE1lZGlhKS4KLSAgLSBBZGQgc3VwcG9ydCBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIEFSTTkyMFQgYmFzZWQgZGV2ZWxvcG1lbnQga2l0LgotCi0qIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxOSBNYXIgMjAwMzoKLSAgLSB1c2UgYXJtLWxpbnV4LWdjYyBhcyBkZWZhdWx0IGNvbXBpbGVyIGZvciBBUk0KLSAgLSBmaXggaTJjIGZpeHVwIGNvZGUKLSAgLSBmaXggbWlzc2luZyBiYXVkcmF0ZSBzZXR0aW5nCi0gIC0gYWRkZWQgJGxvYWRhZGRyIC8gQ0ZHX0xPQURfQUREUiBzdXBwb3J0IHRvIGxvYWRiCi0gIC0gbW92ZWQgImlnbm9yaW5nIHRyYWlsaW5nIGNoYXJhY3RlcnMiIF9iZWZvcmVfIHUtYm9vdCB3YW50cyB0bwotICAgIHByaW50IG91dCBkaWFnbm9zdGljcyBtZXNzYWdlczsgcmVtb3ZlcyBib2d1cyBjaGFyYWN0ZXJzIGF0IHRoZQotICAgIGVuZCBvZiB0cmFuc21pc3Npb24KLQotKiBQYXRjaCBieSBKb2huIFpoYW4sIDE4IE1hciAyMDAzOgotICBBZGQgc3VwcG9ydCBmb3IgU2lub1ZlZSBNaWNyb3N5c3RlbXMgU0M4eHggYm9hcmRzCi0KLSogUGF0Y2ggYnkgUm9sZiBPZmZlcm1hbm5zLCAyMSBNYXIgMjAwMzoKLSAgcG9ydGVkIHRoZSBkbnAxMTEwIHJlbGF0ZWQgY2hhbmdlcyBmcm9tIHRoZSBjdXJyZW50IGFybWJvb3QgY3ZzIHRvCi0gIGN1cnJlbnQgdS1ib290IGN2cy4gc21jOTExMTEgZG9lcyBub3Qgd29yay4gcHJvYmxlbSBtYXJrZWQgaW4KLSAgc21jOTExMTEuYywgZ3JlcCBmb3IgIkZJWE1FIi4KLQotKiBQYXRjaCBieSBCcmlhbiBBdWxkLCAyNSBNYXIgMjAwMzoKLSAgQWRkIHN1cHBvcnQgZm9yIFNUTSBmbGFzaCBjaGlwcyBvbiBlYm9ueSBib2FyZAotCi0qIEFkZCBQQ0kgc3VwcG9ydCBmb3IgTVBDODI1MCBCb2FyZHMgKFBNODI1IG1vZHVsZSkKLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI1IE1hciAyMDAzOgotICAtIFBDSTQwNSB1cGRhdGUuCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBNYXIgMjAwMzoKLSAgLSBDUENJNDA1MiB1cGRhdGUgKHN1cHBvcnQgZm9yIHJldmlzaW9uIDMpLgotICAtIFNldCBlZGdlIGNvbmRpdGlvbmluZyBjaXJjdWl0cnkgb24gUFBDNDA1R1ByIGZvciBjb21wYXRpYmlsaXR5Ci0gICAgdG8gZXhpc3RpbmcgUFBDNDA1R1AgZGVzaWducy4KLSAgLSBDbGlwIHVkaXYgdG8gNSBiaXRzIG9uIFBQQzQwNSAoc2VyaWFsLmMpLgotCi0qIEV4dGVuZCBJTkNBSVAgYm9hcmQgc3VwcG9ydDoKLSAgLSBhZGQgYXV0b21hdGljIFJBTSBzaXplIGRldGVjdGlvbgotICAtIGFkZCAiYmRpbmZvIiBjb21tYW5kCi0gIC0gcGFzcyBmbGFzaCBhZGRyZXNzIGFuZCBzaXplIHRvIExpbnV4IGtlcm5lbAotICAtIHN3aXRjaCB0byAxNTAgTUh6IGNsb2NrCi0KLSogQXZvaWQgZmxpY2tlciBvbiB0aGUgVFJBQidzIFZGRCBieSBzeW5jaHJvbml6aW5nIHRoZSBlbmFibGUgd2l0aAotICB0aGUgSFNZTkMvVlNZTkMuIFJlcXVpcmVzIG5ldyBDUExEIGNvZGUgKFZlcnNpb24gMTAxIGZvciBSZXYuIDEwMAotICBib2FyZHMsIHZlcnNpb24gMTUzIGZvciBSZXYuIDIwMCBib2FyZHMpLgotCi0qIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAxMiBNYXIgMjAwMzoKLSAgRml4IHJlbG9jYXRpb24gcHJvYmxlbSBvZiBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHN0cmluZyBwb2ludGVycwotICBpbiBjb21tb24vY21kX3BjaS5jCi0KLSogUGF0Y2ggYnkgS2FpLVV3ZSBCbPZtLCAxMiBNYXIgMjAwMzoKLSAgQ2xlYW51cCAmIGJ1ZyBmaXhlcyBmb3IgSkZGUzIgY29kZToKLSAgLSB0aGUgbWVtb3J5IG1hbmdlbWVudCB3YXMgYnJva2VuLiBJdCBjYXVzZWQgaGF2b2Mgb24gbWFsbG9jIGJ5Ci0gICAgd3JpdGluZyBiZXlvbmQgdGhlIGJsb2NrIGJvdW5kYXJpZXMuCi0gIC0gdGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBmb3IgZmlsZXMgd2FzIHdyb25nLCBzb21ldGltZXMgcmVzdWx0aW5nCi0gICAgaW4gc2hvcnQgZmlsZSByZWFkcy4KLSAgLSBkYXRhIGNvcHlpbmcgbm93IG9wdGlvbmFsbHkgdGFrZXMgZnJhZ21lbnQgdmVyc2lvbiBudW1iZXJzIGludG8KLSAgICBhY2NvdW50LCB0byBhdm9pZCBjb3B5aW5nIGZyb20gb2xkZXIgZGF0YS4KLSAgU2VlIGRvYy9SRUFETUUuSkZGUzIgZm9yIGRldGFpbHMuCi0KLSogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAxMiBNYXIgMjAwMzoKLSAgLSAxNi8zMiBNQiBhbmQgNTAvODAgTUh6IHN1cHBvcnQgd2l0aCBhdXRvLWRldGVjdGlvbiBmb3IgSVA4NjAKLSAgLSBFVEgwNSBhbmQgQkVEQlVHIHN1cHBvcnQgZm9yIENVODI0Ci0gIC0gYWRkZWQgc3VwcG9ydCBmb3IgTWljcm9TeXMgQ1BDNDUKLSAgLSBuZXcgQk9PVFJPTS9GTEFTSDAgYW5kIERPQyBiYXNlIGZvciBQTTgyNgotCi0qIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTIgTWFyIDIwMDM6Ci0gIEZpeCB0aGUgY2hwYXJ0IGNvbW1hbmQgb24gaW5ub2tvbSBib2FyZAotCi0qIE5hbWUgY2xlYW51cDoKLSAgbXYgaW5jbHVkZS9hc20taTM4Ni9wcGNib290LWkzODYuaCBpbmNsdWRlL2FzbS1pMzg2L3UtYm9vdC1pMzg2LmgKLSAgcy9QUENCb290L1UtQm9vdC8gaW4gc29tZSBmaWxlcwotICBzL3BJbWFnZS91SW1hZ2UvICBpbiBzb21lIGZpbGVzCi0KLSogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTUgSmFuIDIwMDM6Ci0gIEZpeCAnJyBjb21tYW5kIGxpbmUgcXVvdGluZwotCi0qIFBhdGNoIGJ5IFRoZSBMRU9YIHRlYW0sIDE5IEphbiAyMDAzOgotICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgRUxQVDg2MCBib2FyZAotICAtIGFkZCBzdXBwb3J0IGZvciBEYWxsYXMgZHMxNjR4IFJUQwotCi0qIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAzMSBKYW4gMjAwMzoKLSAgLSBtaW5pbWFsIHNldHVwIGZvciBDYXJkQnVzIGJyaWRnZXMKLSAgLSBhZGQgRUVQUk9NIHJlYWQvd3JpdGUgc3VwcG9ydCBpbiB0aGUgQ1M4OTAwIGRyaXZlcgotICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgYnVpbHRpbiBJMkMgY29udHJvbGxlciBpbiB0aGUgU2Ftc3VuZyBzM2MyNHgwIGNoaXBzCi0gIC0gYWRkIHN1cHBvcnQgZm9yIE1QTCdzIFZDTUE5IChTYW1zdW5nIHMzYzI0MTAgYmFzZWQpIGJvYXJkCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgRmViIDIwMDM6Ci0gIGFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzA3Ci0KLSogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDUgRmViIDIwMDM6Ci0gIGZpeCBQTFBSQ1IvU0NDUiBpbml0IHNlcXVlbmNlIG9uIDh4eCB0byBhbGxvdyBmb3IKLSAgY2hhbmdlcyBvZiBFQkRGIGJ5IHNvZnR3YXJlCi0KLSogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA3IEZlYiAyMDAzOgotICAiQVBJLWNvbXBhdGliaWxpdHkgcGF0Y2giIGZvciA0eHggSTJDIGRyaXZlcgotCi0qIFRSQUIgZml4ZXMgLyBleHRlbnNpb25zOgotICAtIFJlc3RvcmUgVkZEIGJyaWdodG5lc3MgYXMgc2F2ZWQgaW4gZW52aXJvbm1lbnQKLSAgLSBhZGQgc3VwcG9ydCBmb3IgRnVqaXRzdSBmbGFzaGVzCi0gIC0gbWFrZSBzdXJlIGJvdGggYnV6emVycyBhcmUgdHVybmVkIG9mZiAoZHJpdmUgbG93IGxldmVsKQotCi0qIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNiBNYXIgMjAwMzoKLSAgLSBmaXggYnVnIGluIEJPT1RQIGNvZGUgKG11c3QgdXNlIE5ldENvcHlJUCkKLSAgLSB1cGRhdGUgb2YgQ1NCMjI2IHBvcnQKLSAgLSBjbGVhciBCU1Mgc2VnbWVudCBvbiBYU2NhbGUKLSAgLSBhZGRlZCBzdXBwb3J0IGZvciBpMmNfaW5pdF9ib2FyZCgpIGZ1bmN0aW9uCi0gIC0gdXBkYXRlIHRvIHRoZSBJbm5va29tIHBsYXR0Zm9ybQotCi0qIEV4dGVuZCBzdXBwb3J0IGZvciByZWR1bmRhbmQgZW52aXJvbm1lbnRzIGZvciBjb25maWd1cmF0aW9ucyB3aGVyZQotICBlbnZpcm9ubWVudCBzaXplIDwgc2VjdG9yIHNpemUKLQotKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTMgRmViIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBNUEM4MjY2QURTIGJvYXJkCi0KLSogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE5IEZlYiAyMDAzOgotICBwYXRjaGVzIGZvciB0aGUgSW50ZWwgbHViYm9jayBib2FyZDoKLSAgbWVtc2V0dXAuUyAtIGdlbmVyYWwgY2xlYW51cCAoYmFzZWQgb24gUm9iZXJ0J3MgY3NiMjI2IGNvZGUpCi0gIGZsYXNoLmMgLSBvdmVyaGF1bCwgYWN0dWFsbHkgd29ya3Mgbm93Ci0gIGx1YmJvY2suYyAtIGZpeCBpbml0IGZ1bmNzIHRvIHJldHVybiBwcm9wZXIgdmFsdWUKLQotKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjYgRmViIDIwMDM6Ci0gIC0gRml4ZWQgb2ZmIGJ5IG9uZSBpbiBSRlRBIGNhbGN1bGF0aW9uLgotICAtIE5vIG5lZWQgdG8gYWJvcnQgd2hlbiBMREYgaXMgbG93ZXIgdGhhbiB3ZSBjYW4gcHJvZ3JhbSBpdCdzIG9ubHkKLSAgICBtaW5pbXVtIHRpbWluZyBzbyBjbGFtcCBpdCB0byB3aGF0IHdlIGNhbiBkby4KLSAgLSBUYWtlcyBmdW5jdGlvbiBwb2ludGVyIHRvIGZ1bmN0aW9uIGZvciByZWFkaW5nIHRoZSBzcGRfbnZyYW0uIFVzZWZ1bGwKLSAgICBmb3IgZmFraW5nIGRhdGEgb3IgaGFyZGNvZGUgYSBtb2R1bGUgd2l0aG91dCB0aGUgbnZyYW0uCi0gIC0gZml4IG90aGVyIHVzZXIgZm9yIGFib3ZlIGNoYW5nZQotICAtIGZpeCBzb21lIGNvbW1lbnRzLgotCi0qIFBhdGNoZXMgYnkgQnJpYW4gV2FpdGUsIDI2IEZlYiAyMDAzOgotICAtIGZpeCBwb3J0IGZvciBldmI2NDI2MCBib2FyZAotICAtIGZpeCBQQ0kgZm9yIGV2YjY0MjYwIGJvYXJkCi0gIC0gZml4IFBDSSBzY2FuCi0KLSogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDEgTWFyIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciBFTUsgVE9QODYwIE1vZHVsZQotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDAyIE1hciAyMDAzOgotICBBZGQgU1BEIEVFUFJPTSBzdXBwb3J0IGZvciBNUEM4MjYwQURTIGJvYXJkCi0KLSogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAyMSBKYW4gMjAwMzoKLSAgLSBBZGQgc3VwcG9ydCBmb3IgSW5ub2tvbSBib2FyZAotICAtIERvbid0IGNvbXBsYWluIGlmICJpbnN0YWxsIiBmYWlscwotICAtIFJFQURNRSBjbGVhbnVwIChyZW1vdmUgZHVwbGljYXRlZCBsaW5lcykKLSAgLSBVcGRhdGUgUFhBIGhlYWRlciBmaWxlcwotCi0qIEFkZCBkb2N1bWVudGF0aW9uIGZvciBleGlzdGluZyBQT1NUIGNvZGUgKGRvYy9SRUFETUUuUE9TVCkKLQotKiBQYXRjaCBieSBMYXVkbmV5IFJlbiwgMTUgSmFuIDIwMDM6Ci0gIEZpeCBoYW5kbGluZyBvZiByZWR1bmRhbmQgZW52aXJvbm1lbnQgaW4gInRvb2xzL2VudmNyYy5jIgotCi0qIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDI4IEZlYiAyMDAzOgotICBBZGQgYmVkYnVnIHN1cHBvcnQgZm9yIDgyNHggc3lzdGVtcwotCi0qIEFkZCBzdXBwb3J0IGZvciAxNiBNQiBmbGFzaCBjb25maWd1cmF0aW9uIG9mIFRSQUIgYm9hcmQKLQotKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgotICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMKLQotKiBBZGQgaW1hZ2UgaW5mb3JtYXRpb24gdG8gUkVBRE1FCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBGZWIgMjAwMzoKLSAgQ1BDSUlTRVI0IGNvbmZpZ3VyYXRpb24gdXBkYXRlZC4KLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE3IEZlYiAyMDAzOgotICBGaXhlZCBidWcgaW4gZXh0LiBzZXJpYWwgY2xvY2sgc2V0dXAgb24gUFBDNDA1IChzaW5jZSBQUEM0NDAgcG9ydCkuCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBGZWIgMjAwMzoKLSAgQWRkICJwY2lkZWxheSIgZW52aXJvbm1lbnQgdmFyaWFibGUgKGluIG1zLCBlbmFibGVkIHZpYQotICBDT05GSUdfUENJX0JPT1RERUxBWSkuCi0gIFBDSSBzcGVjIDIuMiBkZWZpbmVzLCB0aGF0IGEgcGNpIHRhcmdldCBoYXMgMl4yNSBwY2kgY2xvY2tzIGFmdGVyCi0gIFJTVCMgdG8gcmVzcG9uZCB0byBjb25maWd1cmF0aW9uIGN5Y2xlcyAoMzNNSHogLT4gMXMpLgotCi0qIEZpeCBkdWFsIFBDTUNJQSBzbG90IHN1cHBvcnQgKHdoZW4gcnVubmluZyB3aXRoIGp1c3Qgb25lCi0gIHNsb3QgcG9wdWxhdGVkKQotCi0qIEFkZCBWRkQgdHlwZSBkZXRlY3Rpb24gdG8gdHJhYiBib2FyZAotCi0qIGV4dGVuZCBkcml2ZXJzL2NzODkwMC5jIGRyaXZlciB0byBzeW5jaHJvbml6ZQkgZXRoYWRkciAgZW52aXJvbm1lbnQKLSAgdmFyaWFibGUgd2l0aCB2YWx1ZSBpbiB0aGUgRUVQUk9NCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBGZWIgMjAwMzoKLSAgQWRkIHN1cHBvcnQgZm9yIDRNQiBhbmQgMTI4TUIgb25ib2FyZCBTRFJBTSAoY3B1L3BwYzR4eC9zZHJhbS5jKQotCi0qIEFkZCBzdXBwb3J0IGZvciBNSVBTMzIgNEtjIENQVXMKLQotKiBBZGQgc3VwcG9ydCBmb3IgSU5DQS1JUCBCb2FyZAotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjI6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogQWRkIGR1YWwgZXRoZXJuZXQgc3VwcG9ydCBvbiBQTTgyNgotCi0qIEFkZCBzdXBwb3J0IGZvciBMWFQ5NzEgUEhZIG9uIFBNODI2Ci0KLSogUGF0Y2ggYnkgVG9yZCBBbmRlcnNzb24sIDE2IEphbiAyMDAzOgotICBGaXggZmxhc2ggc2VjdG9yIGNvdW50IGZvciBUUU04eHhMCi0KLSogRml4IEkyQyBFRVBST00gcHJvYmxlbSBvbiBJQ1U4NjIgYm9hcmQgKHdvdWxkIG9ubHkgd3JpdGUgdGhlIGZpcnN0Ci0gIDE2IGJ5dGVzIG91dCBvZiBlYWNoIDMyIGJ5dGUgYmxvY2spCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBBZGQgc3VwcG9ydCBmb3IgVjM3IGJvYXJkCi0gIChwYXRjaCBieSBK824gQmVuZWRpa3Rzc29uLCAxMSBEZWMgMjAwMikKLQotKiBVcGRhdGUgYmF1ZHJhdGUgaW4gYmRfaW5mbyB3aGVuIGl0IGdldHMgY2hhbmdlZAotCi0qIEFkZCB3YXRjaGRvZyB0cmlnZ2VyIHBvaW50cyB3aGlsZSB3YWl0aW5nIGZvciBzZXJpYWwgcG9ydAotICAoc28gZmFyIG9ubHkgOHh4IC0tIG5lZWRlZCBvbiBMV01PTiB3aXRoIDEwMG1zIHdhdGNoZG9nKQotCi0qIEltcHJvdmUgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAotICAoZmlndXJhdGlvbiBvZiB0aGUgdXRpbGl0eSwgdXNpbmcgYSBjb25maWcgZmlsZSkKLQotKiBBZGQgc2luZ2xlIHF1b3RlIHN1cHBvcnQgZm9yIChvbGQpIGNvbW1hbmQgbGluZSBwYXJzZXIKLQotKiBTd2l0Y2ggTFdNT04gYm9hcmQgZGVmYXVsdCBjb25maWcgZnJvbSBGUkFNIHRvIEVFUFJPTTsKLSAgaW4gUE9TVCwgRUVQUk9NIHNob3dzIHVwIG9uIDggYWRkcmVzc2VzCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMDoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBVc2UgMS1ieXRlLXJlYWQgaW5zdGVhZCBvZiAtd3JpdGUgZm9yIGlwcm9iZSgpIGZ1bmN0aW9uCi0gIEFkZCBpMmMgY29tbWFuZHMgdG8gUE04MjYgY29uZmlnCi0KLSogZXh0ZW5kIEkyQyBQT1NUIGNvZGU6IGNoZWNrIGZvciBsaXN0IG9uIGtub3duIGFkZHJlc3NlcwotCi0qIEltcHJvdmUgbG9nIGJ1ZmZlciBjb2RlOyB1c2UgImxvZ2xldmVsIiB0byBkZWNpZGUgd2hpY2ggbWVzc2FnZXMKLSAgdG8gbG9nIG9uIHRoZSBjb25zb2xlLCB0b28gKGxpa2UgaW4gTGludXgpOyBnZXQgcmlkIG9mICJsb2dzdGFydCIKLQotKiBBZGQgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAotICAoYm9hcmQtc3BlY2lmaWMgZm9yIFRSQUIgbm93LCB0byBiZSBmaXhlZCBsYXRlcikKLQotKiBQYXRjaCBieSBIYW5zLUpvZXJnIEZyaWVkZW4sIDA2IERlYyAyMDAyCi0gIEZpeCBtaXNjIHByb2JsZW1zIHdpdGggQW1pZ2FPbmUgc3VwcG9ydAotCi0qIFBhdGNoIGJ5IENocmlzIEhhbGxpbmFuLCAzIERlYyAyMDAyOgotICBtaW5vciBjbGVhbnVwIHRvIHRoZSBNUEM4MjQ1IEVQSUMgZHJpdmVyCi0KLSogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCi0gIEFkZCBzdXBwb3J0IGZvciBleHRlcm5hbCAoU0lVKSBpbnRlcnJ1cHRzIG9uIE1QQzh4eAotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyOCBOb3YgMjAwMgotICBGaXggbmVzdGVkIHN5c2NhbGxzIGJ1ZyBpbiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucwotCi0qIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjcgTm92IDIwMDI6Ci0gIGZpeCBvdXRwdXQgb2YgInBjaWluZm8iIGNvbW1hbmQgZm9yIENhcmRCdXMgYnJpZGdlIGRldmljZXMuCi0KLSogRml4IGJ1ZyBpbiBUUU04MjYwIGJvYXJkIGRldGVjdGlvbiAtIGJvYXJkcyBnb3Qgc3R1Y2sgd2hlbiBib2FyZCBJRAotICB3YXMgbm90IHJlYWRhYmxlCi0KLSogQWRkIExFRCBpbmRpY2F0aW9uIGZvciBJREUgYWN0aXZpdHkgb24gS1VQNEsgYm9hcmQKLQotKiBGaXggc3RhcnR1cCBwcm9ibGVtcyB3aXRoIFZGRCBkaXNwbGF5IG9uIFRSQUIKLQotKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyMCBOb3YgMjAwMgotICBBZGQgZHJpdmVyIGZvciBFcHNvbiBTRUQxMzgwNiBncmFwaGljIGNvbnRyb2xsZXIuCi0gIEFkZCBzdXBwb3J0IGZvciBCTVAgbG9nb3MgaW4gY2ZiX2NvbnNvbGUgZHJpdmVyLgotCi0qIEFkZGVkIHN1cHBvcnQgZm9yIGJvdGggUENNQ0lBIHNsb3RzIChhdCB0aGUgc2FtZSB0aW1lISkgb24gTVBDOHh4Ci0KLSogUGF0Y2ggYnkgUm9kIEJveWNlLCAyMSBOb3YgMjAwMjoKLSAgZml4IFBDTUNJQSBvbiBNQlg4eHggYm9hcmQKLQotKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjEgTm92IDIwMDIKLSAgQWRkIENGR19DUE1fUE9TVF9XT1JEX0FERFIgdG8gbWFrZSB0aGUgb2Zmc2V0IG9mIHRoZQotICBib290bW9kZSB3b3JkIGluIERQUkFNIGNvbmZpZ3VyYWJsZQotCi0qIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTggTm92IDIwMDI6Ci0gIEZpeGVzIGZvciB4ODYgcG9ydCAobW9zdGx5IHN0cmluZ3MgaXNzdWVzKQotCi0qIFBhdGNoIGJ5IEtlbiBDaG91LCAxOCBOb3YgMjAwMjoKLSAgRml4IGZvciBuYXRzZW1pIE5JQyBjYXJkcyAoRFA4MzgxNSkKLQotKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOSBOb3YgMjAwMjoKLSAgZml4IGEgYnVnIGZvciB0aGUgTUlJIGNvbmZpZ3VyYXRpb24sIGFuZCBzb21lIHdhcm5pbmdzCi0KLSogUGF0Y2ggYnkgVGhvbWFzIEZyaWVkZW4sIDEzIE5vdiAyMDAyOgotICBBZGQgY29kZSBmb3IgQW1pZ2FPbmUgYm9hcmQKLSAgKHByZWxpbWluYXJ5IG1lcmdlIHRvIFUtQm9vdCwgc3RpbGwgV0lQKQotCi0qIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMiBOb3YgMjAwMjoKLSAgLSBBZGRpbmcgVVJMIGZvciBJRUVFIE9VSSBsb29rdXAKLSAgLSBNYWtpbmcgdGhlIGF1dG9ib290ICNkZWZpbmVzIGRlcGVuZGVudCBvbiBDT05GSUdfQVVUT0JPT1RfS0VZRUQKLSAgICBiZWluZyBkZWZpbmVkLgotICAtIEluIHRoZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTICNkZWZpbmUsIHRoZSByb290LW9uLWluaXRyZCBhbmQKLSAgICByb290LW9uLW5mcyBtYWNyb3MgYXJlIGRlc2lnbmVkIHRvIHN3aXRjaCBob3cgdGhlIGRlZmF1bHQgYm9vdAotICAgIG1ldGhvZCBnZXRzIGRlZmluZWQuCi0KLSogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxMyBOb3YgMjAwMjoKLSAgQWRkIHN1cHBvcnQgZm9yIGkzODYgYXJjaGl0ZWN0dXJlIGFuZCBBTUQgU0M1MjAgYm9hcmQKLQotKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMiBOb3YgMjAwMjoKLSAgQWRkIHN1cHBvcnQgZm9yIERPUyBmaWxlc3lzdGVtIGFuZCBib290aW5nIGZyb20gRE9TIGZsb3BweSBkaXNrCi0KLSogUGF0Y2ggYnkgSmltIFNhbmRveiwgMDcgTm92IDIwMDI6Ci0gIEluY3JlYXNlIG51bWJlciBvZiBuZXR3b3JrIFJYIGJ1ZmZlcnMgKFBLVEJVRlNSWCBpbgotICAiaW5jbHVkZS9uZXQuaCIpIGZvciBFRVBSTzEwMCBiYXNlZCBib2FyZHMgKGVzcGVjaWFsbHkgU1A4MjQwKQotICB3aGljaCBzaG93ZWQgIlJlY2VpdmVyIGlzIG5vdCByZWFkeSIgZXJyb3JzIHdoZW4gVS1Cb290IHdhcwotICBwcm9jZXNzaW5nIHRoZSByZWNlaXZlIGJ1ZmZlcnMgc2xvd2VyIHRoYW4gdGhlIG5ldHdvcmsgY29udHJvbGxlcgotICB3YXMgZmlsbGluZyB0aGVtLgotCi0qIFBhdGNoIGJ5IEFuZHJlYXMgT2JlcnJpdHRlciwgMDkgTm92IDIwMDI6Ci0gIENoYW5nZSBiZWhhdmlvdXIgb2YgTmV0TG9vcCgpOiByZXR1cm4gLTEgZm9yIGVycm9ycywgZmlsZXNpemUKLSAgb3RoZXJ3aXNlOyByZXR1cm4gY29kZSAwIGlzIHZhbGlkIGFuIG1lYW5zIG5vIGZpbGUgbG9hZGVkIC0gaW4gdGhpcwotICBjYXNlIHRoZSBlbnZpcm9ubWVudCBzdGlsbCBnZXRzIHVwZGF0ZWQhCi0KLSogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgOSBOb3YgMjAwMjoKLSAgLSBpbXByb3ZlIEFEQy9EQUMgY2xvY2tpbmcgb24gdGhlIFNBQ1NuZyBib2FyZCB0byBhbGlnbgotICAgIHRoZSBmYWlsaW5nIGVkZ2VzIG9mIExSQ0xLIGFuZCBTQ0xLCi0gIC0gc2JjODI2MCBjb25maWd1cmF0aW9uIHR3ZWFrcwotICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQgZm9yIDgyeHggc3lzdGVtcwotICAtIHdpcmUgc3NwaS9zc3BvIGNvbW1hbmRzIGludG8gY29tbWFuZCBoYW5kbGVyOyBpbXByb3ZlZCBlcnJvcgotICAgIGhhbmRsZXJpbmcKLSAgLSBhZGQgdGltZXN0YW1wIHN1cHBvcnQgYW5kIGFsdGVybmF0ZSBtZW1vcnkgdGVzdCB0byB0aGUKLSAgICBTQUNTbmcgY29uZmlndXJhdGlvbgotCi0qIFBhdGNoIGJ5IFZpbmNlIEh1c292c2t5LCA3IE5vdiAyMDAyOgotICBBZGQgIi1uIiB0byBsaW5rZXIgb3B0aW9ucyB0byBnZXQgcmlkIG9mICJOb3QgZW5vdWdoIHJvb20gZm9yCi0gIHByb2dyYW0gaGVhZGVycyIgcHJvYmxlbQotCi0qIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMDUgTm92IDIwMDIKLSAgUmVuYW1lIENPTkZJR19QTExfSU5QVVRfRlJFUSB0byBDT05GSUdfU1lTX0NMS19GUkVRCi0gIHNvIHdlIGNhbiB1c2UgYW4gYWxyZWFkeSBleGlzdGluZyBuYW1lCi0KLSogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKLSAgSGFyZHdhcmUgcmVsYXRpZWQgaW1wcm92bWVudHMgaW4gRkRDIGJvb3QgY29kZQotCi0qIFBhdGNoIGJ5IEhvbGdlciBTY2h1cmlnLCA1IE5vdiAyMDAyOgotICBNYWtlIHRoZSBQWEEgcmVhbGx5IGNoYW5nZSBpdCdzIGZyZXF1ZW5jeQotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCi0gIEFkZCBzdXBwb3J0IGZvciBzbGF2ZSBzZXJpYWwgU3BhcnRhbiAyIEZQR0FzCi0KLSogRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChNQUMJIGFkZHJlc3MpICBpbiAgOHh4ICBTQ0MvRkVDICBldGhlcm5ldAotICBkcml2ZXJzCi0KLSogQWRkIHN1cHBvcnQgZm9yIGxvZyBidWZmZXIgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBMaW51eCBrZXJuZWwncwotICBzeXNsb2cgbWVjaGFuaXNtOyB1c2VkIGVzcGVjaWFsbHkgZm9yIFBPU1QgcmVzdWx0cy4KLQotKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAzMSBPY3QgMjAwMjoKLSAgQWRkIGluaXRpYWwgc3VwcG9ydCBmb3Iga3VwNGsgYm9hcmQKLQotKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDA0IE5vdiAyMDAyOgotICAtIHVzZSB3YXRjaGRvZyB0byByZXNldCBQWEEyNTAgc3lzdGVtcwotICAtIGFkZGVkIHByb2dyZXNzIGNhbGxiYWNrcyB0byAoc29tZSBvZiB0aGUpIEFSTSBjb2RlCi0gIC0gdXBkYXRlIGZvciBDb2dlbnQgQ1NCMjI2IGJvYXJkCi0KLSogQWRkIHN1cHBvcnQgZm9yIEZQUzg2MCBib2FyZAotCi0qIFBhdGNoIGJ5IEd1aWxsYXVtZSBBbGV4YW5kcmUsLCAwNCBOb3YgMjAwMjoKLSAgSW1wcm92ZSBQQ0kgYWNjZXNzIG9uIDMyLWJpdHMgQ29tcGFjdCBQQ0kgYnVzCi0KLSogRml4IG1kZWxheSgpIG9uIFRSQUIgLSB0aGlzIHdhcyBzdGlsbCB0aGUgZGVidWdnaW5nIHZlcnNpb24gd2l0aAotICBzZWNvbmRzIGluc3RlYWQgb2YgbXMuCi0KLSogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxIE5vdiAyMDAyOgotICBYU2NhbGUgcmVsYXRlZCBjbGVhbnVwIChhZmZlY3RzIGFsbCBBUk0gYm9hcmRzKQotCi0qIENsZWFudXAgb2YgbmFtZXMgYW5kIFJFQURNRS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotTm90ZXMgZm9yIFUtQm9vdCAwLjEuMDoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhpcyBpcyB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mICJEYXMgVS1Cb290IiwgdGhlIFVuaXZlcnNhbCBCb290IExvYWRlci4KLQotSXQgaXMgYmFzZWQgb24gdmVyc2lvbiAyLjAuMCAodGhlICJIYWxsb3dlZW4gUmVsZWFzZSIpIG9mIFBQQ0Jvb3QuCi1Gb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhpc3Rvcnkgb2YgdGhlIHByb2plY3QgcGxlYXNlIHNlZSB0aGUKLVBQQ0Jvb3QgcHJvamVjdCBwYWdlIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcHBjYm9vdAorY29tbWl0IGRlYmI3MzU0ZDFlYTRmNjk0MTU0ODE4ZGY1ZTViNTIzZjVjMWNjMWQKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEFwciAyNiAxNzo1ODo1NiAyMDA2IC0wNTAwCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBJbml0aWFsIHN1cHBvcnQgZm9yIE1QQzg2NDEgSFBDTiBib2FyZC4K