VGhpcyBpcyB0aGUgY29udGVudHMgb2Ygc29tZSBvZiB0aGUgZHJpdmVycy91c2Ivc2VyaWFsLyBmaWxlcyB0aGF0IGhhZCAgb2xkCmNoYW5nZWxvZyBjb21tZW50cy4gIFRoZXkgd2VyZSBxdWl0ZSBvbGQsIGFuZCBvdXQgb2YgZGF0ZSwgYW5kIHdlIGRvbid0IGtlZXAKdGhlbSBhbnltb3JlLCBzbyBJJ3ZlIHB1dCB0aGVtIGhlcmUsIGF3YXkgZnJvbSB0aGUgc291cmNlIGZpbGVzLCBpbiBjYXNlCnBlb3BsZSBzdGlsbCBjYXJlIHRvIHNlZSB0aGVtLgoKLSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBPY3RvYmVyIDIwLCAyMDA1CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp1c2Itc2VyaWFsLmggQ2hhbmdlIExvZyBjb21tZW50czoKCiAoMDMvMjYvMjAwMikgZ2toCglyZW1vdmVkIHRoZSBwb3J0LT50dHkgY2hlY2sgZnJvbSBwb3J0X3BhcmFub2lhX2NoZWNrKCkgZHVlIHRvIHNlcmlhbAoJY29uc29sZXMgbm90IGhhdmluZyBhIHR0eSBkZXZpY2UgYXNzaWduZWQgdG8gdGhlbS4KCiAoMTIvMDMvMjAwMSkgZ2toCglyZW1vdmVkIGFjdGl2ZSBmcm9tIHRoZSBwb3J0IHN0cnVjdHVyZS4KCWFkZGVkIGRvY3VtZW50YXRpb24gdG8gdGhlIHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgc3RydWN0dXJlCgogKDEwLzEwLzIwMDEpIGdraAoJYWRkZWQgdmVuZG9yIGFuZCBwcm9kdWN0IHRvIHNlcmlhbCBzdHJ1Y3R1cmUuICBOZWVkZWQgdG8gZGV0ZXJtaW5lIGRldmljZQoJb3duZXIgd2hlbiB0aGUgZGV2aWNlIGlzIGRpc2Nvbm5lY3RlZC4KCiAoMDUvMzAvMjAwMSkgZ2toCglhZGRlZCBzZW0gdG8gcG9ydCBzdHJ1Y3R1cmUgYW5kIHJlbW92ZWQgcG9ydF9sb2NrCgogKDEwLzA1LzIwMDApIGdraAoJQWRkZWQgaW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyBhbmQgYnVsa19pbl9lbmRwb2ludEFkZHJlc3MgdG8gaGVscAoJZml4IGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IgY29yZQoJbmVlZHMgaXQuCgogKDA5LzExLzIwMDApIGdraAoJQWRkZWQgdXNiX3NlcmlhbF9kZWJ1Z19kYXRhIGZ1bmN0aW9uIHRvIGhlbHAgZ2V0IHJpZCBvZiAjREVCVUcgaW4gdGhlCglkcml2ZXJzLgoKICgwOC8yOC8yMDAwKSBna2gKCUFkZGVkIHBvcnRfbG9jayB0byBwb3J0IHN0cnVjdHVyZS4KCiAoMDgvMDgvMjAwMCkgZ2toCglBZGRlZCBvcGVuX2NvdW50IHRvIHBvcnQgc3RydWN0dXJlLgoKICgwNy8yMy8yMDAwKSBna2gKCUFkZGVkIGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyB0byBwb3J0IHN0cnVjdHVyZS4KCiAoMDcvMTkvMjAwMCkgZ2toLCBwYmVyZ2VyLCBhbmQgYm9yY2hlcnMKCU1vZGlmaWNhdGlvbnMgdG8gYWxsb3cgdXNiLXNlcmlhbCBkcml2ZXJzIHRvIGJlIG1vZHVsZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp1c2Itc2VyaWFsLmMgQ2hhbmdlIExvZyBjb21tZW50czoKCiAoMTIvMTAvMjAwMikgZ2toCglTcGxpdCB0aGUgcG9ydHMgb2ZmIGludG8gdGhlaXIgb3duIHN0cnVjdCBkZXZpY2UsIGFuZCBhZGRlZCBhCgl1c2Itc2VyaWFsIGJ1cyBkcml2ZXIuCgogKDExLzE5LzIwMDIpIGdraAoJcmVtb3ZlZCBhIGZldyAjaWZkZWZzIGZvciB0aGUgZ2VuZXJpYyBjb2RlIGFuZCBjbGVhbmVkIHVwIHRoZSBmYWlsdXJlCglsb2dpYyBpbiBpbml0aWFsaXphdGlvbi4KCiAoMTAvMDIvMjAwMikgZ2toCgltb3ZlZCB0aGUgY29uc29sZSBjb2RlIHRvIGNvbnNvbGUuYyBhbmQgb3V0IG9mIHRoaXMgZmlsZS4KCiAoMDYvMDUvMjAwMikgZ2toCgltb3ZlZCBsb2NhdGlvbiBvZiBzdGFydHVwKCkgY2FsbCBpbiBzZXJpYWxfcHJvYmUoKSB1bnRpbCBhZnRlciBhbGwKCW9mIHRoZSBwb3J0IGluZm9ybWF0aW9uIGFuZCBlbmRwb2ludHMgYXJlIGluaXRpYWxpemVkLiAgVGhpcyBtYWtlcwoJdGhpbmdzIGVhc2llciBmb3Igc29tZSBkcml2ZXJzLgoKICgwNC8xMC8yMDAyKSBna2gKCWFkZGVkIHNlcmlhbF9yZWFkX3Byb2MgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhCgkvcHJvYy90dHkvZHJpdmVyL3VzYi1zZXJpYWwgZmlsZS4KCiAoMDMvMjcvMjAwMikgZ2toCglHb3QgVVNCIHNlcmlhbCBjb25zb2xlIGNvZGUgd29ya2luZyBwcm9wZXJseSBhbmQgbWVyZ2VkIGludG8gdGhlIG1haW4KCXZlcnNpb24gb2YgdGhlIHRyZWUuICBUaGFua3MgdG8gUmFuZHkgRHVubGFwIGZvciB0aGUgaW5pdGlhbCB2ZXJzaW9uCglvZiB0aGlzIGNvZGUsIGFuZCBmb3IgcHVzaGluZyBtZSB0byBmaW5pc2ggaXQgdXAuCglUaGUgVVNCIHNlcmlhbCBjb25zb2xlIHdvcmtzIHdpdGggYW55IHVzYiBzZXJpYWwgZHJpdmVyIGRldmljZS4KCiAoMDMvMjEvMjAwMikgZ2toCglNb3ZlZCBhbGwgbWFuaXB1bGF0aW9uIG9mIHBvcnQtPm9wZW5fY291bnQgaW50byB0aGUgY29yZS4gIE5vdyB0aGUKCWluZGl2aWR1YWwgZHJpdmVyJ3Mgb3BlbiBhbmQgY2xvc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgb25seSB3aGVuIHRoZQoJZmlyc3Qgb3BlbigpIGFuZCBsYXN0IGNsb3NlKCkgaXMgY2FsbGVkLiAgTWFraW5nIHRoZSBkcml2ZXJzIGEgYml0CglzbWFsbGVyIGFuZCBzaW1wbGVyLgoJRml4ZWQgYSBidWcgaWYgYSBkcml2ZXIgZGlkbid0IGhhdmUgdGhlIG93bmVyIGZpZWxkIHNldC4KCiAoMDIvMjYvMjAwMikgZ2toCglNb3ZlZCBhbGwgbG9ja2luZyBpbnRvIHRoZSBtYWluIHNlcmlhbF8qIGZ1bmN0aW9ucywgaW5zdGVhZCBvZiBoYXZpbmcKCXRoZSBpbmRpdmlkdWFsIGRyaXZlcnMgaGF2ZSB0byBncmFiIHRoZSBwb3J0IHNlbWFwaG9yZS4gIFRoaXMgc2hvdWxkCglyZWR1Y2UgcmFjZXMuCglSZXdvcmtlZCB0aGUgTU9EX0lOQyBsb2dpYyBhIGJpdCB0byBhbHdheXMgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQsIGV2ZW4KCWlmIHRoZSBnZW5lcmljIGRyaXZlciBpcyBiZWluZyB1c2VkLgoKICgxMC8xMC8yMDAxKSBna2gKCXVzYl9zZXJpYWxfZGlzY29ubmVjdCgpIG5vdyBzZXRzIHRoZSBzZXJpYWwtPmRldiBwb2ludGVyIGlzIHRvIE5VTEwgdG8KCWhlbHAgcHJldmVudCBjaGlsZCBkcml2ZXJzIGZyb20gYWNjZXNzaW5nIHRoZSBkZXZpY2Ugc2luY2UgaXQgaXMgbm93Cglnb25lLgoKICgwOS8xMy8yMDAxKSBna2gKCU1vdmVkIGdlbmVyaWMgZHJpdmVyIGluaXRpYWxpemUgYWZ0ZXIgd2UgaGF2ZSByZWdpc3RlcmVkIHdpdGggdGhlIFVTQgoJY29yZS4gIFRoYW5rcyB0byBSYW5keSBEdW5sYXAgZm9yIHBvaW50aW5nIHRoaXMgcHJvYmxlbSBvdXQuCgogKDA3LzAzLzIwMDEpIGdraAoJRml4ZWQgbW9kdWxlIHBhcmFtYXRlciBzaXplLiAgVGhhbmtzIHRvIEpvaG4gQnJvY2ttZXllciBmb3IgdGhlIHBvaW50ZXIuCglGaXhlZCB2ZW5kb3IgYW5kIHByb2R1Y3QgZ2V0dGluZyBkZWZpbmVkIHRocm91Z2ggdGhlIE1PRFVMRV9QQVJNIG1hY3JvCglpZiB0aGUgR2VuZXJpYyBkcml2ZXIgd2Fzbid0IGNvbXBpbGVkIGluLgoJRml4ZWQgcHJvYmxlbSB3aXRoIGdlbmVyaWNfc2h1dGRvd24oKSBub3QgYmVpbmcgY2FsbGVkIGZvciBkcml2ZXJzIHRoYXQKCWRvbid0IGhhdmUgYSBzaHV0ZG93bigpIGZ1bmN0aW9uLgoKICgwNi8wNi8yMDAxKSBna2gKCWFkZGVkIGV2aWwgaGFjayB0aGF0IGlzIG5lZWRlZCBmb3IgdGhlIHByb2xpZmljIHBsMjMwMyBkZXZpY2UgZHVlIHRvIHRoZQoJY3Jhenkgd2F5IGl0cyBlbmRwb2ludHMgYXJlIHNldCB1cC4KCiAoMDUvMzAvMjAwMSkgZ2toCglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgoKICgwNC8wOC8yMDAxKSBnYgoJSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KCiAyMDAxXzAyXzA1IGdraAoJRml4ZWQgYnVmZmVyIG92ZXJmbG93cyBidWcgd2l0aCB0aGUgZ2VuZXJpYyBzZXJpYWwgZHJpdmVyLiAgVGhhbmtzIHRvCglUb2RkIFNxdWlyZXMgPHNxdWlyZXN0QGN0MC5jb20+IGZvciBmaXhpbmcgdGhpcy4KCiAoMDEvMTAvMjAwMSkgZ2toCglGaXhlZCBidWcgd2hlcmUgdGhlIGdlbmVyaWMgc2VyaWFsIGFkYXB0b3IgZ3JhYmJlZCBfYW55XyBkZXZpY2UgdGhhdCB3YXMKCW9mZmVyZWQgdG8gaXQuCgogKDEyLzEyLzIwMDApIGdraAoJUmVtb3ZlZCBNT0RfSU5DIGFuZCBNT0RfREVDIGZyb20gcG9sbCBhbmQgZGlzY29ubmVjdCBmdW5jdGlvbnMsIGFuZAoJbW92ZWQgdGhlbSB0byB0aGUgc2VyaWFsX29wZW4gYW5kIHNlcmlhbF9jbG9zZSBmdW5jdGlvbnMuCglBbHNvIGZpeGVkIGJ1ZyB3aXRoIHRoZXJlIG5vdCBiZWluZyBhIE1PRF9ERUMgZm9yIHRoZSBnZW5lcmljIGRyaXZlcgoJKHRoYW5rcyB0byBHYXJ5IEJydWJha2VyIGZvciBmaW5kaW5nIHRoaXMuKQoKICgxMS8yOS8yMDAwKSBna2gKCVNtYWxsIE5VTEwgcG9pbnRlciBpbml0aWFsaXphdGlvbiBjbGVhbnVwIHdoaWNoIHNhdmVzIGEgYml0IG9mIGRpc2sgaW1hZ2UKCiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCglpbnN0ZWFkIG9mIHVzaW5nIGlkVmVuZG9yL2lkUHJvZHVjdCBwYWlycywgdXNiIHNlcmlhbCBkcml2ZXJzCglub3cgaWRlbnRpZnkgdGhlaXIgaGFyZHdhcmUgaW50ZXJlc3Qgd2l0aCB1c2JfZGV2aWNlX2lkIHRhYmxlcywKCXdoaWNoIHRoZXkgdXN1YWxseSBoYXZlIGFueWhvdyBmb3IgdXNlIHdpdGggTU9EVUxFX0RFVklDRV9UQUJMRS4KCiAoMTAvMDUvMjAwMCkgZ2toCglGaXhlZCBidWcgd2l0aCB1cmItPmRldiBub3QgYmVpbmcgc2V0IHByb3Blcmx5LCBub3cgdGhhdCB0aGUgdXNiCgljb3JlIG5lZWRzIGl0LgoKICgwOS8xMS8yMDAwKSBna2gKCVJlbW92ZWQgREVCVUcgI2lmZGVmcyB3aXRoIGNhbGwgdG8gdXNiX3NlcmlhbF9kZWJ1Z19kYXRhCgogKDA4LzI4LzIwMDApIGdraAoJQWRkZWQgcG9ydF9sb2NrIHRvIHBvcnQgc3RydWN0dXJlLgoJQWRkZWQgbG9ja3MgZm9yIFNNUCBzYWZlbmVzcyB0byBnZW5lcmljIGRyaXZlcgoJRml4ZWQgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIGdlbmVyaWMgZGV2aWNlJ3MgcG9ydCBtb3JlIHRoYW4gb25jZS4KCiAoMDcvMjMvMjAwMCkgZ2toCglBZGRlZCBidWxrX291dF9lbmRwb2ludEFkZHJlc3MgdG8gcG9ydCBzdHJ1Y3R1cmUuCgogKDA3LzE5LzIwMDApIGdraCwgcGJlcmdlciwgYW5kIGJvcmNoZXJzCglNb2RpZmljYXRpb25zIHRvIGFsbG93IHVzYi1zZXJpYWwgZHJpdmVycyB0byBiZSBtb2R1bGVzLgoKICgwNy8wMy8yMDAwKSBna2gKCUFkZGVkIG1vcmUgZGVidWdnaW5nIHRvIHNlcmlhbF9pb2N0bCBjYWxsCgogKDA2LzI1LzIwMDApIGdraAoJQ2hhbmdlZCBnZW5lcmljX3dyaXRlX2J1bGtfY2FsbGJhY2sgdG8gbm90IGNhbGwgd2FrZV91cF9pbnRlcnJ1cHRpYmxlCglkaXJlY3RseSwgYnV0IHRvIGhhdmUgcG9ydF9zb2Z0aW50IGRvIGl0IGF0IGEgc2FmZXIgdGltZS4KCiAoMDYvMjMvMjAwMCkgZ2toCglDbGVhbmVkIHVwIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIGluIGEgcXVlc3QgdG8gZmluZCBVSENJIHRpbWVvdXQgYnVnLgoKICgwNS8yMi8yMDAwKSBna2gKCUNoYW5nZWQgdGhlIG1ha2VmaWxlLCBlbmFibGluZyB0aGUgYmlnIENPTkZJR19VU0JfU0VSSUFMX1NPTVRISU5HIHRvIGJlCglyZW1vdmVkIGZyb20gdGhlIGluZGl2aWR1YWwgZGV2aWNlIHNvdXJjZSBmaWxlcy4KCiAoMDUvMDMvMjAwMCkgZ2toCglBZGRlZCB0aGUgRGlnaSBBY2NlbGVwb3J0IGRyaXZlciBmcm9tIEFsIEJvcmNoZXJzIGFuZCBQZXRlciBCZXJnZXIuCgogKDA1LzAyLzIwMDApIGdraAoJQ2hhbmdlZCBkZXZmcyBhbmQgdHR5IHJlZ2lzdGVyIGNvZGUgdG8gd29yayBwcm9wZXJseSBub3cuIFRoaXMgd2FzIGJhc2VkIG9uCgl0aGUgQUNNIGRyaXZlciBjaGFuZ2VzIGJ5IFZvanRlY2ggUGF2bGlrLgoKICgwNC8yNy8yMDAwKSBSeWFuIFZhbmRlckJpamwKIAlQdXQgY2FsbHMgdG8gKl9wYXJhbm9pYV9jaGVja3MgaW50byBvbmUgZnVuY3Rpb24uCgogKDA0LzIzLzIwMDApIGdraAoJRml4ZWQgYnVnIHRoYXQgUmFuZHkgRHVubGFwIGZvdW5kIGZvciBHZW5lcmljIGRldmljZXMgd2l0aCBubyBidWxrIG91dCBwb3J0cy4KCU1vdmVkIHdoZW4gdGhlIHN0YXJ0dXAgY29kZSBwcmludGVkIG91dCB0aGUgZGV2aWNlcyB0aGF0IGFyZSBzdXBwb3J0ZWQuCgogKDA0LzE5LzIwMDApIGdraAoJQWRkZWQgZHJpdmVyIGZvciBaeVhFTCBvbW5pLm5ldCBsY2QgcGx1cyBJU0ROIFRBCglNYWRlIHN0YXJ0dXAgaW5mbyBtZXNzYWdlIHNwZWNpZnkgd2hpY2ggZHJpdmVycyB3ZXJlIGNvbXBpbGVkIGluLgoKICgwNC8wMy8yMDAwKSBna2gKCUNoYW5nZWQgdGhlIHByb2JlIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSBtb2R1bGUgdW5sb2FkIHJhY2VzLgoJQ2hhbmdlZCB3aGVyZSB0aGUgdHR5IGxheWVyIGdldHMgaW5pdGlhbGl6ZWQgdG8gaGF2ZSBkZXZmcyB3b3JrIG5pY2VyLgoJQWRkZWQgaW5pdGlhbCBkZXZmcyBzdXBwb3J0LgoKICgwMy8yNi8yMDAwKSBna2gKCVNwbGl0IGRyaXZlciB1cCBpbnRvIGRldmljZSBzcGVjaWZpYyBwaWVjZXMuCgogKDAzLzE5LzIwMDApIGdraAoJRml4ZWQgb29wcyB0aGF0IGNvdWxkIGhhcHBlbiB3aGVuIGRldmljZSB3YXMgcmVtb3ZlZCB3aGlsZSBhIHByb2dyYW0KCXdhcyB0YWxraW5nIHRvIHRoZSBkZXZpY2UuCglSZW1vdmVkIHRoZSBzdGF0aWMgdXJicyBhbmQgbm93IGFsbCB1cmJzIGFyZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQKCWR5bmFtaWNhbGx5LgoJUmV3b3JrZWQgdGhlIGludGVybmFsIGludGVyZmFjZS4gTm93IGV2ZXJ5dGhpbmcgaXMgYmFzZWQgb24gdGhlCgl1c2Jfc2VyaWFsX3BvcnQgc3RydWN0dXJlIGluc3RlYWQgb2YgdGhlIGxhcmdlciB1c2Jfc2VyaWFsIHN0cnVjdHVyZS4KCVRoaXMgZml4ZXMgdGhlIGJ1ZyB0aGF0IGEgbXVsdGlwb3J0IGRldmljZSBjb3VsZCBub3QgaGF2ZSBtb3JlIHRoYW4KCW9uZSBwb3J0IG9wZW4gYXQgb25lIHRpbWUuCgogKDAzLzE3LzIwMDApIGdraAoJQWRkZWQgY29uZmlnIG9wdGlvbiBmb3IgZGVidWdnaW5nIG1lc3NhZ2VzLgoJQWRkZWQgcGF0Y2ggZm9yIGtleXNwYW4gcGRhIGZyb20gQnJpYW4gV2FybmVyLgoKICgwMy8wNi8yMDAwKSBna2gKCUFkZGVkIHRoZSBrZXlzcGFuIHBkYSBjb2RlIGZyb20gQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KCU1vdmVkIGEgYnVuY2ggb2YgdGhlIHBvcnQgc3BlY2lmaWMgc3R1ZmYgaW50byBpdHMgb3duIHN0cnVjdHVyZS4gVGhpcwoJaXMgaW4gYW50aWNpcGF0aW9uIG9mIHRoZSB0cnVlIG11bHRpcG9ydCBkZXZpY2VzICh0aGVyZSdzIGEgYnVnIGlmIHlvdQoJdHJ5IHRvIGFjY2VzcyBtb3JlIHRoYW4gb25lIHBvcnQgb2YgYW55IG11bHRpcG9ydCBkZXZpY2UgcmlnaHQgbm93KQoKICgwMi8yMS8yMDAwKSBna2gKCU1hZGUgaXQgc28gdGhhdCBhbnkgc2VyaWFsIGRldmljZXMgb25seSBoYXZlIHRvIHNwZWNpZnkgd2hpY2ggZnVuY3Rpb25zCgl0aGV5IHdhbnQgdG8gb3ZlcmxvYWQgZnJvbSB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBjYWxscyAoZ3JlYXQsCglpbmhlcml0YW5jZSBpbiBDLCBpbiBhIGRyaXZlciwganVzdCB3aGF0IEkgd2FudGVkLi4uKQoJQWRkZWQgc3VwcG9ydCBmb3Igc2V0X3Rlcm1pb3MgYW5kIGlvY3RsIGZ1bmN0aW9uIGNhbGxzLiBObyBkcml2ZXJzIHRha2UKCWFkdmFudGFnZSBvZiB0aGlzIHlldC4KCVJlbW92ZWQgdGhlICNpZmRlZiBNT0RVTEUsIG5vdyB0aGVyZSBpcyBubyBtb2R1bGUgc3BlY2lmaWMgY29kZS4KCUNsZWFuZWQgdXAgYSBmZXcgY29tbWVudHMgaW4gdXNiLXNlcmlhbC5oIHRoYXQgd2VyZSB3cm9uZyAodGhhbmtzIGFnYWluCgl0byBNaWxlcyBMb3R0KS4KCVNtYWxsIGZpeCB0byBnZXRfZnJlZV9zZXJpYWwuCgogKDAyLzE0LzIwMDApIGdraAoJUmVtb3ZlZCB0aGUgQmVsa2luIGFuZCBQZXJhY29tIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgZHJpdmVyIGR1ZSB0bwoJdGhlIGxhY2sgb2Ygc3VwcG9ydCBmcm9tIHRoZSB2ZW5kb3IsIGFuZCBtZSBub3Qgd2FudGluZyBwZW9wbGUgdG8KCWFjY2lkZW5hdGx5IGJ1eSB0aGUgZGV2aWNlLCBleHBlY3RpbmcgaXQgdG8gd29yayB3aXRoIExpbnV4LgoJQWRkZWQgcmVhZF9idWxrX2NhbGxiYWNrIGFuZCB3cml0ZV9idWxrX2NhbGxiYWNrIHRvIHRoZSB0eXBlIHN0cnVjdHVyZQoJZm9yIHRoZSBuZWVkcyBvZiB0aGUgRlRESSBhbmQgV2hpdGVIRUFUIGRyaXZlci4KCUNoYW5nZWQgYWxsIHJldmVyZW5jZXMgdG8gRlRESSB0byBGVERJX1NJTyBhdCB0aGUgcmVxdWVzdCBvZiBCaWxsCglSeWRlci4KCUNoYW5nZWQgdGhlIG91dHB1dCB1cmIgc2l6ZSBiYWNrIHRvIHRoZSBtYXggZW5kcG9pbnQgc2l6ZSB0byBtYWtlCgl0aGUgZnRkaV9zaW8gZHJpdmVyIGhhdmUgaXQgZWFzaWVyLCBhbmQgZHVlIHRvIHRoZSBmYWN0IHRoYXQgaXQgZGlkbid0CglyZWFsbHkgaW5jcmVhc2UgdGhlIHNwZWVkIGFueS4KCiAoMDIvMTEvMjAwMCkgZ2toCglBZGRlZCBWSVNPUl9GVU5DVElPTl9DT05TT0xFIHRvIHRoZSB2aXNvciBzdGFydHVwIGZ1bmN0aW9uLiBUaGlzIHdhcyBhCglwYXRjaCBmcm9tIE1pbGVzIExvdHQgKG1pbG9zQGluc3luYy5uZXQpLgoJRml4ZWQgYnVnIHdpdGggbm90IHJlc3RvcmluZyB0aGUgbWlub3IgcmFuZ2UgdGhhdCBhIGRldmljZSBncmFicywgaWYKCXRoZSBzdGFydHVwIGZ1bmN0aW9uIGZhaWxzICh0aGFua3MgTWlsZXMgZm9yIGZpbmRpbmcgdGhpcykuCgogKDAyLzA1LzIwMDApIGdraAoJQWRkZWQgaW5pdGlhbCBmcmFtZXdvcmsgZm9yIHRoZSBLZXlzcGFuIFBEQSBzZXJpYWwgY29udmVydGVyIHNvIHRoYXQKCUJyaWFuIFdhcm5lciBoYXMgYSBwbGFjZSB0byBwdXQgaGlzIGNvZGUuCglNYWRlIHRoZSBlenVzYiBzcGVjaWZpYyBmdW5jdGlvbnMgZ2VuZXJpYyBlbm91Z2ggdGhhdCBkaWZmZXJlbnQKCWRldmljZXMgY2FuIHVzZSB0aGVtICh3aGl0ZWhlYXQgYW5kIGtleXNwYW5fcGRhIGJvdGggbmVlZCB0aGVtKS4KCVNwbGl0IG91dCBhIHdob2xlIGJ1bmNoIG9mIHN0cnVjdHVyZSBhbmQgb3RoZXIgc3R1ZmYgdG8gYSBzZXBhcmF0ZQoJdXNiLXNlcmlhbC5oIGZpbGUuCglNYWRlIHRoZSBWaXNvciBjb25uZWN0aW9uIG1lc3NhZ2VzIGEgbGl0dGxlIG1vcmUgdW5kZXJzdGFuZGFibGUsIG5vdwoJdGhhdCBNaWxlcyBMb3R0IChtaWxvc0BpbnN5bmMubmV0KSBoYXMgZ290dGVuIHRoZSBHZW5lcmljIGNoYW5uZWwgdG8KCXdvcmsuIEFsc28gbWFkZSB0aGVtIGFsd2F5cyBzaG93IHVwIGluIHRoZSBsb2cgZmlsZS4KCiAoMDEvMjUvMjAwMCkgZ2toCglBZGRlZCBpbml0aWFsIGZyYW1ld29yayBmb3IgRlRESSBzZXJpYWwgY29udmVydGVyIHNvIHRoYXQgQmlsbCBSeWRlcgoJaGFzIGEgcGxhY2UgdG8gcHV0IGhpcyBjb2RlLgoJQWRkZWQgdGhlIHZlbmRvciBzcGVjaWZpYyBpbmZvIGZyb20gSGFuZHNwcmluZy4gTm93IHdlIGNhbiBwcmludCBvdXQKCWluZm9ybWF0aW9uYWwgZGVidWcgbWVzc2FnZXMgYXMgd2VsbCBhcyB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nLgoKICgwMS8yMy8yMDAwKSBna2gKCUZpeGVkIHByb2JsZW0gb2YgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gb3BlbiBhIHBvcnQgdGhhdCBkaWRuJ3QgaGF2ZSBhCglkZXZpY2UgYXNzaWduZWQgdG8gaXQuIE1hZGUgdGhlIG1pbm9yIG5vZGUgZmluZGluZyBhIGxpdHRsZSBzbWFydGVyLAoJbm93IGl0IGxvb2tzIHRvIGZpbmQgYSBjb250aW51b3VzIHNwYWNlIGZvciB0aGUgbmV3IGRldmljZS4KCiAoMDEvMjEvMjAwMCkgZ2toCglGaXhlZCBidWcgaW4gdmlzb3Jfc3RhcnR1cCB3aXRoIHBhdGNoIGZyb20gTWlsZXMgTG90dCAobWlsb3NAaW5zeW5jLm5ldCkKCUZpeGVkIGdldF9zZXJpYWxfYnlfbWlub3Igd2hpY2ggd2FzIGFsbCBtZXNzZWQgdXAgZm9yIG11bHRpIHBvcnQKCWRldmljZXMuIEZpeGVkIG11bHRpIHBvcnQgcHJvYmxlbSBmb3IgZ2VuZXJpYyBkZXZpY2VzLiBOb3cgdGhlIG51bWJlcgoJb2YgcG9ydHMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mIGJ1bGsgb3V0IGVuZHBvaW50cyBmb3IgdGhlCglnZW5lcmljIGRldmljZS4KCiAoMDEvMTkvMjAwMCkgZ2toCglSZW1vdmVkIGxvdHMgb2YgY3J1ZnQgdGhhdCB3YXMgYXJvdW5kIGZyb20gdGhlIG9sZCAocHJlIHVyYikgZHJpdmVyCglpbnRlcmZhY2UuCglNYWRlIHRoZSBzZXJpYWxfdGFibGUgZHluYW1pYy4gVGhpcyBzaG91bGQgc2F2ZSBsb3RzIG9mIG1lbW9yeSB3aGVuCgl0aGUgbnVtYmVyIG9mIG1pbm9yIG5vZGVzIGdvZXMgdXAgdG8gMjU2LgoJQWRkZWQgaW5pdGlhbCBzdXBwb3J0IGZvciBkZXZpY2VzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gb25lIHBvcnQuCglBZGRlZCBtb3JlIGRlYnVnZ2luZyBjb21tZW50cyBmb3IgdGhlIFZpc29yLCBhbmQgYWRkZWQgYSBuZWVkZWQKCXNldF9jb25maWd1cmF0aW9uIGNhbGwuCgogKDAxLzE3LzIwMDApIGdraAoJRml4ZWQgdGhlIFdoaXRlSEVBVCBmaXJtd2FyZSAobXkgcHJvY2Vzc2luZyB0b29sIGhhZCBhIGJ1ZykKCWFuZCBhZGRlZCBuZXcgZGVidWcgbG9hZGVyIGZpcm13YXJlIGZvciBpdC4KCVJlbW92ZWQgdGhlIHB1dF9jaGFyIGZ1bmN0aW9uIGFzIGl0IGlzbid0IHJlYWxseSBuZWVkZWQuCglBZGRlZCB2aXNvciBzdGFydHVwIGNvbW1hbmRzIGFzIGZvdW5kIGJ5IHRoZSBXaW45OCBkdW1wLgoKICgwMS8xMy8yMDAwKSBna2gKCUZpeGVkIHRoZSB2ZW5kb3IgaWQgZm9yIHRoZSBnZW5lcmljIGRyaXZlciB0byB0aGUgb25lIEkgbWVhbnQgaXQgdG8gYmUuCgogKDAxLzEyLzIwMDApIGdraAoJRm9yZ2V0IHRoZSB2ZXJzaW9uIG51bWJlcmluZy4uLnRoYXQncyBwcmV0dHkgdXNlbGVzcy4uLgoJTWFkZSB0aGUgZHJpdmVyIGFibGUgdG8gYmUgY29tcGlsZWQgc28gdGhhdCB0aGUgdXNlciBjYW4gc2VsZWN0IHdoaWNoCgljb252ZXJ0ZXIgdGhleSB3YW50IHRvIHVzZS4gVGhpcyBhbGxvd3MgcGVvcGxlIHdobyBvbmx5IHdhbnQgdGhlIFZpc29yCglzdXBwb3J0IHRvIG5vdCBwYXkgdGhlIG1lbW9yeSBzaXplIHByaWNlIG9mIHRoZSBXaGl0ZUhFQVQuCglGaXhlZCBidWcgd2hlcmUgdGhlIGdlbmVyaWMgZHJpdmVyIChpZFZlbmRvcj0wMDAwIGFuZCBpZFByb2R1Y3Q9MDAwMCkKCWdyYWJiZWQgdGhlIHJvb3QgaHViLiBOb3QgZ29vZC4KCiB2ZXJzaW9uIDAuNC4wICgwMS8xMC8yMDAwKSBna2gKCUFkZGVkIHdoaXRlaGVhdC5oIGNvbnRhaW5pbmcgdGhlIGZpcm13YXJlIGZvciB0aGUgQ29ubmVjdFRlY2ggV2hpdGVIRUFUCglkZXZpY2UuIEFkZGVkIHN0YXJ0dXAgZnVuY3Rpb24gdG8gYWxsb3cgZmlybXdhcmUgdG8gYmUgZG93bmxvYWRlZCB0bwoJYSBkZXZpY2UgaWYgaXQgbmVlZHMgdG8gYmUuCglBZGRlZCBmaXJtd2FyZSBkb3dubG9hZCBsb2dpYyB0byB0aGUgV2hpdGVIRUFUIGRldmljZS4KCVN0YXJ0ZWQgdG8gYWRkICNkZWZpbmVzIHRvIHNwbGl0IHVwIHRoZSBkaWZmZXJlbnQgZHJpdmVycyBmb3IgcG90ZW50aWFsCgljb25maWd1cmF0aW9uIG9wdGlvbi4KCiB2ZXJzaW9uIDAuMy4xICgxMi8zMC85OSkgZ2toCiAgICAgIEZpeGVkIHByb2JsZW1zIHdpdGggdXJiIGZvciBidWxrIG91dC4KICAgICAgQWRkZWQgaW5pdGlhbCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzZXRzIG9mIGVuZHBvaW50cy4gVGhpcyBlbmFibGVzCiAgICAgIHRoZSBIYW5kc3ByaW5nIFZpc29yIHRvIGJlIGF0dGFjaGVkIHN1Y2Nlc3NmdWxseS4gT25seSB0aGUgZmlyc3QKICAgICAgYnVsayBpbiAvIGJ1bGsgb3V0IGVuZHBvaW50IHBhaXIgaXMgYmVpbmcgdXNlZCByaWdodCBub3cuCgogdmVyc2lvbiAwLjMuMCAoMTIvMjcvOTkpIGdraAoJQWRkZWQgaW5pdGlhbCBzdXBwb3J0IGZvciB0aGUgSGFuZHNwcmluZyBWaXNvciBiYXNlZCBvbiBhIHBhdGNoIGZyb20KCU1pbGVzIExvdHQgKG1pbG9zQHNuZWV0eS5pbnN5bmMubmV0KQoJQ2xlYW5lZCB1cCB0aGUgY29kZSBhIGJ1bmNoIGFuZCBjb252ZXJ0ZWQgb3ZlciB0byB1c2luZyB1cmJzIG9ubHkuCgogdmVyc2lvbiAwLjIuMyAoMTIvMjEvOTkpIGdraAoJQWRkZWQgaW5pdGlhbCBzdXBwb3J0IGZvciB0aGUgQ29ubmVjdCBUZWNoIFdoaXRlSEVBVCBjb252ZXJ0ZXIuCglJbmNyZW1lbnRlZCB0aGUgbnVtYmVyIG9mIHBvcnRzIGluIGV4cGVjdGF0aW9uIG9mIGdldHRpbmcgdGhlCglXaGl0ZUhFQVQgdG8gd29yayBwcm9wZXJseSAoNCBwb3J0cyBwZXIgY29ubmVjdGlvbikuCglBZGRlZCBub3RpZmljYXRpb24gb24gaW5zZXJ0aW9uIGFuZCByZW1vdmFsIG9mIHdoYXQgcG9ydCB0aGUKCWRldmljZSBpcy93YXMgY29ubmVjdGVkIHRvIChhbmQgd2hhdCBraW5kIG9mIGRldmljZSBpdCB3YXMpLgoKIHZlcnNpb24gMC4yLjIgKDEyLzE2Lzk5KSBna2gKCUNoYW5nZWQgbWFqb3IgbnVtYmVyIHRvIHRoZSBuZXcgYWxsb2NhdGVkIG51bWJlci4gV2UncmUgbGVnYWwgbm93IQoKIHZlcnNpb24gMC4yLjEgKDEyLzE0Lzk5KSBna2gKCUZpeGVkIGJ1ZyB0aGF0IGhhcHBlbnMgd2hlbiBkZXZpY2Ugbm9kZSBpcyBvcGVuZWQgd2hlbiB0aGVyZSBpc24ndCBhCglkZXZpY2UgYXR0YWNoZWQgdG8gaXQuIFRoYW5rcyB0byBtYXJla0B3ZWJkZXNpZ24ubm8gZm9yIG5vdGljaW5nIHRoaXMuCgogdmVyc2lvbiAwLjIuMCAoMTEvMTAvOTkpIGdraAoJU3BsaXQgdXAgaW50ZXJuYWxzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGFkZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VyaWFsCgljb252ZXJ0ZXJzIHRvIHRoZSBjb2RlLgoJQWRkZWQgYSAiZ2VuZXJpYyIgZHJpdmVyIHRoYXQgZ2V0cyBpdCdzIHZlbmRvciBhbmQgcHJvZHVjdCBpZAoJZnJvbSB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiBUaGFua3MgdG8gRGF2aWQgRS4gTmVsc29uIChkbmVsc29uQGp1bXAubmV0KQoJZm9yIHRoZSBpZGVhIGFuZCBzYW1wbGUgY29kZSAoZnJvbSB0aGUgdXNiIHNjYW5uZXIgZHJpdmVyLikKCUNsZWFyZWQgdXAgYW55IGxpY2Vuc2luZyBxdWVzdGlvbnMgYnkgcmVsZWFzaW5nIGl0IHVuZGVyIHRoZSBHTlUgR1BMLgoKIHZlcnNpb24gMC4xLjIgKDEwLzI1Lzk5KSBna2gKIAlGaXhlZCBidWcgaW4gZGV0ZWN0aW5nIGRldmljZS4KCiB2ZXJzaW9uIDAuMS4xICgxMC8wNS85OSkgZ2toCiAJQ2hhbmdlZCB0aGUgbWFqb3IgbnVtYmVyIHRvIG5vdCBjb25mbGljdCB3aXRoIGFueXRoaW5nIGVsc2UuCgogdmVyc2lvbiAwLjEgKDA5LzI4Lzk5KSBna2gKIAlDYW4gcmVjb2duaXplIHRoZSB0d28gZGlmZmVyZW50IGRldmljZXMgYW5kIHN0YXJ0IHVwIGEgcmVhZCBmcm9tCglkZXZpY2Ugd2hlbiBhc2tlZCB0by4gV3JpdGVzIGFsc28gd29yay4gTm8gY29udHJvbCBzaWduYWxzIHlldCwgdGhpcwoJYWxsIGlzIHZlbmRvciBzcGVjaWZpYyBkYXRhIChpLmUuIG5vIHNwZWMpLCBhbHNvIG5vIGNvbnRyb2wgZm9yCglkaWZmZXJlbnQgYmF1ZCByYXRlcyBvciBvdGhlciBiaXQgc2V0dGluZ3MuCglDdXJyZW50bHkgd2UgYXJlIHVzaW5nIHRoZSBzYW1lIGRldmlkIGFzIHRoZSBhY20gZHJpdmVyLiBUaGlzIG5lZWRzCgl0byBjaGFuZ2UuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp2aXNvci5jIENoYW5nZSBMb2cgY29tbWVudHM6CgogKDA2LzAzLzIwMDMpIEp1ZGQgTW9udGdvbWVyeSA8anVkZCBhdCBqcGlsb3Qub3JnPgogICAgIEFkZGVkIHN1cHBvcnQgZm9yIG1vZHVsZSBwYXJhbWV0ZXIgb3B0aW9ucyBmb3IgdW50ZXN0ZWQvdW5rbm93bgogICAgIGRldmljZXMuCgogKDAzLzA5LzIwMDMpIGdraAoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFNvbnkgQ2xpZSBOWjkwViBkZXZpY2UuICBUaGFua3MgdG8gTWFydGluIEJyYWNodGwKCTxicmFjaHRsQHJlZGdyZXAuY3o+IGZvciB0aGUgaW5mb3JtYXRpb24uCgogKDAzLzA1LzIwMDMpIGdraAoJVGhpbmsgVHJlbyBzdXBwb3J0IGlzIG5vdyB3b3JraW5nLgoKICgwNC8wMy8yMDAyKSBna2gKCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTb255IE9TIDQuMSBkZXZpY2VzLiAgVGhhbmtzIHRvIEhpcm95dWtpIEFSQUtJCgk8aGlyb0B6b2IubmUuanA+IGZvciB0aGUgaW5mb3JtYXRpb24uCgogKDAzLzI3LzIwMDIpIGdraAoJUmVtb3ZlZCBhc3N1bXB0aW9ucyB0aGF0IHBvcnQtPnR0eSB3YXMgYWx3YXlzIHZhbGlkIChpcyBub3QgdHJ1ZQoJZm9yIHVzYiBzZXJpYWwgY29uc29sZSBkZXZpY2VzLikKCiAoMDMvMjMvMjAwMikgZ2toCglBZGRlZCBzdXBwb3J0IGZvciB0aGUgUGFsbSBpNzA1IGRldmljZSwgdGhhbmtzIHRvIFRob21hcyBSaWVtZXIKCTx0b21AbmV0bWVjaC5jb20+IGZvciB0aGUgaW5mb3JtYXRpb24uCgogKDAzLzIxLzIwMDIpIGdraAoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFBhbG0gbTEzMCBkZXZpY2UsIHRoYW5rcyB0byBVZG8gRWlzZW5iYXJ0aAoJPHVkby5laXNlbmJhcnRoQHdlYi5kZT4gZm9yIHRoZSBpbmZvcm1hdGlvbi4KCiAoMDIvMjcvMjAwMikgZ2toCglSZXdvcmtlZCB0aGUgdXJiIGhhbmRsaW5nIGxvZ2ljLiAgV2UgaGF2ZSBubyBtb3JlIHBvb2wsIGJ1dCBkeW5hbWljYWxseQoJYWxsb2NhdGUgdGhlIHVyYiBhbmQgdGhlIHRyYW5zZmVyIGJ1ZmZlciBvbiB0aGUgZmx5LiAgSW4gdGVzdGluZyB0aGlzCglkb2VzIG5vdCBpbmN1cmUgYW55IG1lYXN1cmFibGUgb3ZlcmhlYWQuICBUaGlzIGFsc28gcmVsaWVzIG9uIHRoZSBmYWN0Cgl0aGF0IHdlIGhhdmUgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBmb3IgdXJicy4KCiAoMDIvMjEvMjAwMikgU2lsYVMKICBBZGRlZCBpbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBQYWxtIG01MTUgZGV2aWNlcy4KCiAoMDIvMTQvMjAwMikgZ2toCglBZGRlZCBzdXBwb3J0IGZvciB0aGUgQ2xpZSBTLTM2MCBkZXZpY2UuCgogKDEyLzE4LzIwMDEpIGdraAoJQWRkZWQgYmV0dGVyIENsaWUgc3VwcG9ydCBmb3IgMy41IGRldmljZXMuICBUaGFua3MgdG8gR2VvZmZyZXkgTGV2YW5kCglmb3IgdGhlIHBhdGNoLgoKICgxMS8xMS8yMDAxKSBna2gKCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBtMTI1IGRldmljZXMsIGFuZCBhZGRlZCBjaGVjayB0byBwcmV2ZW50IG9vcHNlcwoJZm9yIENsaekgZGV2aWNlcyB0aGF0IGxpZSBhYm91dCB0aGUgbnVtYmVyIG9mIHBvcnRzIHRoZXkgaGF2ZS4KCiAoMDgvMzAvMjAwMSkgZ2toCglBZGRlZCBzdXBwb3J0IGZvciB0aGUgQ2xpZSBkZXZpY2VzLCBib3RoIHRoZSAzLjUgYW5kIDQuMCBvcyB2ZXJzaW9ucy4KCU1hbnkgdGhhbmtzIHRvIERhbmllbCBCdXJrZSwgYW5kIEJyeWFuIFBheW5lIGZvciBoZWxwaW5nIHdpdGggdGhpcy4KCiAoMDgvMjMvMjAwMSkgZ2toCglmaXhlZCBhIGZldyBwb3RlbnRpYWwgYnVncyBwb2ludGVkIG91dCBieSBPbGl2ZXIgTmV1a3VtLgoKICgwNS8zMC8yMDAxKSBna2gKCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCgogKDA1LzI4LzIwMDApIGdraAoJQWRkZWQgaW5pdGlhbCBzdXBwb3J0IGZvciB0aGUgUGFsbSBtNTAwIGFuZCBQYWxtIG01MDUgZGV2aWNlcy4KCiAoMDQvMDgvMjAwMSkgZ2IKCUlkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCgogKDAxLzIxLzIwMDApIGdraAoJQWRkZWQgd3JpdGVfcm9vbSBhbmQgY2hhcnNfaW5fYnVmZmVyLCBhcyB0aGV5IHdlcmUgcHJldmlvdXNseSB1c2luZyB0aGUKCWdlbmVyaWMgZHJpdmVyIHZlcnNpb25zIHdoaWNoIGlzIGFsbCB3cm9uZyBub3cgdGhhdCB3ZSBhcmUgdXNpbmcgYW4gdXJiCglwb29sLiAgVGhhbmtzIHRvIFdvbGZnYW5nIEdyYW5kZWdnZXIgZm9yIHBvaW50aW5nIHRoaXMgb3V0IHRvIG1lLgoJUmVtb3ZlZCBjb3VudCBhc3NpZ25tZW50IGluIHRoZSB3cml0ZSBmdW5jdGlvbiwgd2hpY2ggd2FzIG5vdCBuZWVkZWQgYW55bW9yZQoJZWl0aGVyLiAgVGhhbmtzIHRvIEFsIEJvcmNoZXJzIGZvciBwb2ludGluZyB0aGlzIG91dC4KCiAoMTIvMTIvMjAwMCkgZ2toCglNb3ZlZCBNT0RfREVDIHRvIGVuZCBvZiB2aXNvcl9jbG9zZSB0byBiZSBuaWNlciwgYXMgdGhlIGZpbmFsIHdyaXRlCgltZXNzYWdlIGNhbiBzbGVlcC4KCiAoMTEvMTIvMjAwMCkgZ2toCglGaXhlZCBidWcgd2l0aCBkYXRhIGJlaW5nIGRyb3BwZWQgb24gdGhlIGZsb29yIGJ5IGZvcmNpbmcgdHR5LT5sb3dfbGF0ZW5jeQoJdG8gYmUgb24uICBIb3BlZnVsbHkgdGhpcyBmaXhlcyB0aGUgT0hDSSBpc3N1ZSEKCiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCgl1c2JfZGV2aWNlX2lkIHRhYmxlIHN1cHBvcnQKCiAoMTAvMDUvMjAwMCkgZ2toCglGaXhlZCBidWcgd2l0aCB1cmItPmRldiBub3QgYmVpbmcgc2V0IHByb3Blcmx5LCBub3cgdGhhdCB0aGUgdXNiCgljb3JlIG5lZWRzIGl0LgoKICgwOS8xMS8yMDAwKSBna2gKCUdvdCByaWQgb2YgYWx3YXlzIGNhbGxpbmcga21hbGxvYyBmb3IgZXZlcnkgdXJiIHdlIHdyb3RlIG91dCB0byB0aGUKCWRldmljZS4KCUFkZGVkIHZpc29yX3JlYWRfY2FsbGJhY2sgc28gd2UgY2FuIGtlZXAgdHJhY2sgb2YgYnl0ZXMgaW4gYW5kIG91dCBmb3IKCXRob3NlIHBlb3BsZSB3aG8gbGlrZSB0byBrbm93IHRoZSBzcGVlZCBvZiB0aGVpciBkZXZpY2UuCglSZW1vdmVkIERFQlVHICNpZmRlZnMgd2l0aCBjYWxsIHRvIHVzYl9zZXJpYWxfZGVidWdfZGF0YQoKICgwOS8wNi8yMDAwKSBna2gKCUZpeGVkIG9vcHMgaW4gdmlzb3JfZXhpdC4gIE5lZWQgdG8gdW5jb21tZW50IHVzYl91bmxpbmtfdXJiIGNhbGwgX2FmdGVyXwoJdGhlIGhvc3QgY29udHJvbGxlciBkcml2ZXJzIHNldCB1cmItPmRldiA9IE5VTEwgd2hlbiB0aGUgdXJiIGlzIGZpbmlzaGVkLgoKICgwOC8yOC8yMDAwKSBna2gKCUFkZGVkIGxvY2tzIGZvciBTTVAgc2FmZW5lc3MuCgogKDA4LzA4LzIwMDApIGdraAoJRml4ZWQgZW5kaWFuIHByb2JsZW0gaW4gdmlzb3Jfc3RhcnR1cC4KCUZpeGVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgbG9naWMgYW5kIHRoZSBhYmlsaXR5IHRvIG9wZW4gYSBwb3J0IG1vcmUKCXRoYW4gb25jZS4KCiAoMDcvMjMvMjAwMCkgZ2toCglBZGRlZCBwb29sIG9mIHdyaXRlIHVyYnMgdG8gc3BlZWQgdXAgdHJhbnNmZXJzIHRvIHRoZSB2aXNvci4KCiAoMDcvMTkvMjAwMCkgZ2toCglBZGRlZCBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHRoaXMKCWRyaXZlciBpcyBhIGxvYWRhYmxlIG1vZHVsZSBub3cuCgogKDA3LzAzLzIwMDApIGdraAoJQWRkZWQgdmlzb3Jfc2V0X2lvY3RsIGFuZCB2aXNvcl9zZXRfdGVybWlvcyBmdW5jdGlvbnMgKHRoZXkgZG9uJ3QgZG8gbXVjaAoJb2YgYW55dGhpbmcsIGJ1dCBhcmUgZ29vZCBmb3IgZGVidWdnaW5nLikKCiAoMDYvMjUvMjAwMCkgZ2toCglGaXhlZCBidWcgaW4gdmlzb3JfdW50aHJvdHRsZSB0aGF0IHNob3VsZCBoZWxwIHdpdGggdGhlIGRpc2Nvbm5lY3QgaW4gUFBQCglidWcgdGhhdCBwZW9wbGUgaGF2ZSBiZWVuIHJlcG9ydGluZy4KCiAoMDYvMjMvMjAwMCkgZ2toCglDbGVhbmVkIHVwIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIGluIGEgcXVlc3QgdG8gZmluZCBVSENJIHRpbWVvdXQgYnVnLgoKICgwNC8yNy8yMDAwKSBSeWFuIFZhbmRlckJpamwKIAlGaXhlZCBtZW1vcnkgbGVhayBpbiB2aXNvcl9jbG9zZQoKICgwMy8yNi8yMDAwKSBna2gKCVNwbGl0IGRyaXZlciB1cCBpbnRvIGRldmljZSBzcGVjaWZpYyBwaWVjZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpwbDIzMDMuYyBDaGFuZ2UgTG9nIGNvbW1lbnRzOgoKIDIwMDJfTWFyXzI2IGdraAoJYWxsb3dlZCBkcml2ZXIgdG8gd29yayBwcm9wZXJseSBpZiB0aGVyZSBpcyBubyB0dHkgYXNzaWduZWQgdG8gYSBwb3J0CgkodGhpcyBoYXBwZW5zIGZvciBzZXJpYWwgY29uc29sZSBkZXZpY2VzLikKCiAyMDAxX09jdF8wNiBna2gKCUFkZGVkIFJUUyBhbmQgRFRSIGxpbmUgY29udHJvbC4gIFRoYW5rcyB0byBqb2VAYm5kbGcuZGUgZm9yIHBhcnRzIG9mIGl0LgoKIDIwMDFfU2VwXzE5IGdraAoJQWRkZWQgYnJlYWsgc3VwcG9ydC4KCiAyMDAxX0F1Z18zMCBna2gKCWZpeGVkIG9vcHMgaW4gd3JpdGVfYnVsa19jYWxsYmFjay4KCiAyMDAxX0F1Z18yOCBna2gKCXJld29ya2VkIGJ1ZmZlciBsb2dpYyB0byBiZSBsaWtlIG90aGVyIHVzYi1zZXJpYWwgZHJpdmVycy4gIEhvcGVmdWxseQoJcmVtb3Zpbmcgc29tZSByZXBvcnRlZCBwcm9ibGVtcy4KCiAyMDAxX0p1bl8wNiBna2gKCWZpbmlzaGVkIHBvcnRpbmcgdG8gMi40IGZvcm1hdC4KCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppb19lZGdlcG9ydC5jIENoYW5nZSBMb2cgY29tbWVudHM6CgogMjAwM18wNF8wMyBhbCBib3JjaGVycwogIC0gZml4ZWQgYSBidWcgKHRoYXQgc2hvd3MgdXAgd2l0aCBkb3NlbXUpIHdoZXJlIHRoZSB0dHkgc3RydWN0IGlzCiAgICB1c2VkIGluIGEgY2FsbGJhY2sgYWZ0ZXIgaXQgaGFzIGJlZW4gZnJlZWQKCiAyLjMgMjAwMl8wM18wOCBncmVnIGtyb2FoLWhhcnRtYW4KCS0gZml4ZWQgYnVnIHdoZW4gbXVsdGlwbGUgZGV2aWNlcyB3ZXJlIGF0dGFjaGVkIGF0IHRoZSBzYW1lIHRpbWUuCgogMi4yIDIwMDFfMTFfMTQgZ3JlZyBrcm9haC1oYXJ0bWFuCgktIGZpeGVkIGJ1ZyBpbiBlZGdlX2Nsb3NlIHRoYXQga2VwdCB0aGUgcG9ydCBmcm9tIGJlaW5nIHVzZWQgbW9yZQoJICB0aGFuIG9uY2UuCgktIGZpeGVkIG1lbW9yeSBsZWFrIG9uIGRldmljZSByZW1vdmFsLgoJLSBmaXhlZCBwb3RlbnRpYWwgZG91YmxlIGZyZWUgb2YgbWVtb3J5IHdoZW4gY29tbWFuZCB1cmIgc3VibWl0dGluZwoJICBmYWlsZWQuCgktIG90aGVyIHNtYWxsIGNsZWFudXBzIHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkCgogMi4xIDIwMDFfMDdfMDkgZ3JlZyBrcm9haC1oYXJ0bWFuCgktIGFkZGVkIHN1cHBvcnQgZm9yIFRJT0NNQklTIGFuZCBUSU9DTUJJQy4KCiAgICAgKDA0LzA4LzIwMDEpIGdiCgktIElkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCgogMi4wIDIwMDFfMDNfMDUgZ3JlZyBrcm9haC1oYXJ0bWFuCgktIHJld29ya2VkIGVudGlyZSBkcml2ZXIgdG8gZml0IHByb3Blcmx5IGluIHdpdGggdGhlIG90aGVyIHVzYi1zZXJpYWwKCSAgZHJpdmVycy4gIE9jY2FzaW9uYWwgb29wc2VzIHN0aWxsIGhhcHBlbiwgYnV0IGl0J3MgYSBnb29kIHN0YXJ0LgoKIDEuMi4zICgwMi8yMy8yMDAxKSBncmVnIGtyb2FoLWhhcnRtYW4KCS0gY2hhbmdlZCBkZXZpY2UgdGFibGUgdG8gd29yayBwcm9wZXJseSBmb3IgMi40LnggZmluYWwgZm9ybWF0LgoJLSBmaXhlZCBwcm9ibGVtIHdpdGggZHJvcHBpbmcgZGF0YSBhdCBoaWdoIGRhdGEgcmF0ZXMuCgogMS4yLjIgKDExLzI3LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgoJLSBjbGVhbmVkIHVwIG1vcmUgTlRpc21zLgoJLSBBZGRlZCBkZXZpY2UgdGFibGUgZm9yIDIuNC4wLXRlc3QxMQoKIDEuMi4xICgxMS8wOC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KCS0gU3RhcnRlZCB0byBjbGVhbiB1cCBOVGlzbXMuCgktIEZpeGVkIHByb2JsZW0gd2l0aCBkZXYgZmllbGQgb2YgdXJiIGZvciBrZXJuZWxzID49IDIuNC4wLXRlc3Q5CgogMS4yICgxMC8xNy8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKIAlSZW1vdmUgYWxsIEVQSUMgY29kZSBhbmQgR1BMIHNvdXJjZQogIEZpeCBSRUxFVkFOVF9JRkxBRyBtYWNybyB0byBpbmNsdWRlIGZsb3cgY29udHJvbAogIGNoYW5nZXMgcG9ydCBjb25maWd1cmF0aW9uIGNoYW5nZXMuCiAgRml4IHJlZGVmaW5pdGlvbiBvZiBTRVJJQUxfTUFHSUMKICBDaGFuZ2UgYWxsIHRpbWVvdXQgdmFsdWVzIHRvIDUgc2Vjb25kcwogIFRyaWVkIHRvIGZpeCB0aGUgVUhDSSBtdWx0aXBsZSB1cmIgc3VibWlzc2lvbiwgYnV0IGZhaWxlZCBtaXNlcmFibHkuCiAgaXQgc2VlbXMgdG8gd29yayBmaW5lIHdpdGggT0hDSS4KICAoIEdyZWcgdGFrZSBhIGxvb2sgYXQgdGhlICNpZiAwIGF0IGVuZCBvZiBXcml0ZUNtZFVzYigpIHdlIG11c3QKICAgIGZpbmQgYSB3YXkgdG8gd29yayBhcm91bnQgdGhpcyBVSENJIGJ1ZyApCgogMS4xICgxMC8xMS8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKICBGaXggWE9OL1hPRkYgZmxvdyBjb250cm9sIHRvIHN1cHBvcnQgYm90aCBJWE9OIGFuZCBJWE9GRgoKIDAuOS4yNyAoMDYvMzAvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCiAgQWRkZWQgdHJhbnNtaXQgcXVldWUgYW5kIG5vdyBhbGxvY2F0ZSB1cmIgZm9yIGNvbW1hbmQgd3JpdGVzLgoKIDAuOS4yNiAoMDYvMjkvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCiAgQWRkIHN1cHBvcnQgZm9yIDgwMjUxIGJhc2VkIGVkZ2Vwb3J0CgogMC45LjI1ICgwNi8yNy8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKICBEbyBub3QgY2xvc2UgdGhlIHBvcnQgaWYgaXQgaGFzIG11bHRpcGxlIG9wZW5zLgoKIDAuOS4yNCAoMDUvMjYvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCiAgQWRkIElPQ1RMcyB0byBzdXBwb3J0IFJYVFggYW5kIEpBVkEgUE9TCiAgYW5kIGZpcnN0IGN1dCBhdCBydW5uaW5nIEJsYWNrQm94IERlbW8KCiAwLjkuMjMgKDA1LzI0LzIwMDApIERhdmlkIElhY292ZWxsaQogIEFkZCBJT0NUTHMgdG8gc3VwcG9ydCBSWFRYIGFuZCBKQVZBIFBPUwoKIDAuOS4yMiAoMDUvMjMvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCiAgZml4ZWQgYnVnIGluIGVudW1lcmF0aW9uLiAgSWYgZXBjb25maWcgdHVybnMgb24gbWFwcGluZyBieQogIHBhdGggYWZ0ZXIgYSBkZXZpY2UgaXMgYWxyZWFkeSBwbHVnZ2VkIGluLCB3ZSBub3cgdXBkYXRlCiAgdGhlIG1hcHBpbmcgY29ycmVjdGx5CgogMC45LjIxICgwNS8xNi8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKICBBZGRlZCBCbG9ja1VudGlsQ2hhc2VSZXNwKCkgdG8gYWxzbyB3YWl0IGZvciB0eGNyZWRpdHMKICBVcGRhdGVkIHRoZSB3YXkgd2UgYWxsb2NhdGUgYW5kIGhhbmRsZSB3cml0ZSBVUkJzCglBZGQgZGVidWcgY29kZSB0byBkdW1wIGJ1ZmZlcnMKCiAwLjkuMjAgKDA1LzAxLzIwMDApIERhdmlkIElhY292ZWxsaQoJY2hhbmdlIGRyaXZlciB0byB1c2UgdXNiL3R0cy8KCiAwLjkuMTkgKDA1LzAxLzIwMDApIERhdmlkIElhY292ZWxsaQogIFVwZGF0ZSBjb2RlIHRvIGNvbXBpbGUgaWYgREVCVUcgaXMgb2ZmCgogMC45LjE4ICgwNC8yOC8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKICBjbGVhbnVwIGFuZCB0ZXN0IHR0eV9yZWdpc3RlciB3aXRoIGRldmZzCgogMC45LjE3ICgwNC8yNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KIAljaGFuZ2VkIHR0eV9yZWdpc3RlciBhcm91bmQgdG8gYmUgbGlrZSB0aGUgd2F5IGl0CiAJd2FzIGJlZm9yZSwgYnV0IG5vdyBpdCB3b3JrcyBwcm9wZXJseSB3aXRoIGRldmZzLgoKIDAuOS4xNiAoMDQvMjYvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCiAgRml4ZWQgYnVnIGluIEdldFByb2R1Y3RJbmZvKCkKCiAwLjkuMTUgKDA0LzI1LzIwMDApIGRhdmlkIGlhY292ZWxsaQoJVXBkYXRlZCBlbnVtZXJhdGlvbgoKIDAuOS4xNCAoMDQvMjQvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCiAgUmVtb3ZlZCBhbGwgY29uZmlnL3N0YXR1cyBJT0NUTFMgYW5kCiAgY29udmVydGVkIHRvIHVzaW5nIC9wcm9jL2VkZ2Vwb3J0CiAgc3RpbGwgcGxheWluZyB3aXRoIGRldmZzCgogMC45LjEzICgwNC8yNC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKICBSZW1vdmVkIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gdHR5VVNCMAogIEFkZGVkIHN1cHBvcnQgZm9yIGNvbmZpZ3VyYXRpb24gdXNpbmcgL3Byb2QvZWRnZXBvcnQKICBmaXJzdCBhdHRlbXB0IGF0IHVzaW5nIGRldmZzIChub3Qgd29ya2luZyB5ZXQhKQogIEFkZGVkIElPQ1RMIHRvIEdldFByb2R1Y3RJbmZvKCkKICBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20gYmF1ZCByYXRlcwoJQWRkIHN1cHBvcnQgZm9yIHJhbmRvbSBwb3J0IG51bWJlcnMKCiAwLjkuMTIgKDA0LzE4LzIwMDApIGRhdmlkIGlhY292ZWxsaQoJYWRkZWQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIElPQ1RMcwogIHVzZSB0dHlVU0IwIGZvciBjb25maWd1cmF0aW9uCgogMC45LjExICgwNC8xNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KCWZpeGVkIG1vZHVsZSBpbml0aWFsaXphdGlvbiByYWNlIGNvbmRpdGlvbnMuCgltYWRlIGFsbCB1cmJzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4KCW1hZGUgZHJpdmVyIGRldmZzIGNvbXBhdGlibGUuIG5vdyBpdCBvbmx5IHJlZ2lzdGVycyB0aGUgdHR5IGRldmljZQoJd2hlbiB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IHBsdWdnZWQgaW4uCgogMC45LjEwICgwNC8xMy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KCWFkZGVkIHByb2MgaW50ZXJmYWNlIGZyYW1ld29yay4KCiAwLjkuOSAoMDQvMTMvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCglhZGRlZCBlbnVtZXJhdGlvbiBjb2RlIGFuZCBpb2N0bHMgdG8gY29uZmlndXJlIHRoZSBkZXZpY2UKCiAwLjkuOCAoMDQvMTIvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCiAgQ2hhbmdlIGludGVycnVwdCByZWFkIHN0YXJ0IHdoZW4gZGV2aWNlIGlzIHBsdWdnZWQgaW4KICBhbmQgc3RvcCB3aGVuIGRldmljZSBpcyByZW1vdmVkCglwcm9jZXNzIGludGVycnVwdCByZWFkcyB3aGVuIGFsbCBwb3J0cyBhcmUgY2xvc2VkCiAgKGtlZXAgdmFsdWUgb2YgcnhCeXRlc0F2YWlsIGNvbnNpc3RlbnQgd2l0aCB0aGUgZWRnZXBvcnQpCiAgc2V0IHRoZSBVU0JfQlVMS19RVUVVRSBmbGFnIHNvIHRoYXQgd2UgY2FuIHNob3ZlIGEgYnVuY2gKICBvZiB1cmJzIGF0IG9uY2UgZG93biB0aGUgcGlwZQoKIDAuOS43ICgwNC8xMC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKIAlzdGFydCB0byBhZGQgZW51bWVyYXRpb24gY29kZS4KICBnZW5lcmF0ZSBzZXJpYWwgbnVtYmVyIGZvciBlcGljIGRldmljZXMKICBhZGQgc3VwcG9ydCBmb3Iga2RiCgogMC45LjYgKDAzLzMwLzIwMDApIGRhdmlkIGlhY292ZWxsaQogIGFkZCBJT0NUTCB0byBnZXQgc3RyaW5nLCBtYW51ZmFjdHVyZSwgYW5kIGJvb3QgZGVzY3JpcHRvcnMKCiAwLjkuNSAoMDMvMTQvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCgltb3JlIGVycm9yIGNoZWNraW5nIGFkZGVkIHRvIFNlcmlhbE9wZW4gdG8gdHJ5IHRvIGZpeCBVSENJIG9wZW4gcHJvYmxlbQoKIDAuOS40ICgwMy8wOS8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KCWFkZGVkIG1vcmUgZXJyb3IgY2hlY2tpbmcgdG8gaGFuZGxlIG9vcHMgd2hlbiBkYXRhIGlzIGhhbmdpbmcKCWFyb3VuZCBhbmQgdHR5IGlzIGFicnVwdGx5IGNsb3NlZC4KCiAwLjkuMyAoMDMvMDkvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCglBZGQgZXBpYyBzdXBwb3J0IGZvciB4b24veG9mZiBjaGFycwoJcGxheSB3aXRoIHBlcmZvcm1hbmNlCgogMC45LjIgKDAzLzA4LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgoJY2hhbmdlZCBtb3N0ICJpbmZvIiBjYWxscyB0byAiZGJnIgoJaW1wbGVtZW50ZWQgZmxvdyBjb250cm9sIHByb3Blcmx5IGluIHRoZSB0ZXJtaW9zIGNhbGwKCiAwLjkuMSAoMDMvMDgvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCglhZGRlZCBFUElDIHN1cHBvcnQKCWVuYWJsZWQgYm9vdGxvYWRlciB1cGRhdGUKCiAwLjkgKDAzLzA4LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgoJUmVsZWFzZSB0byBJTyBuZXR3b3Jrcy4KCUludGVncmF0ZWQgY2hhbmdlcyB0aGF0IERhdmlkIG1hZGUKICBtYWRlIGdldHRpbmcgdXJicyBmb3Igd3JpdGluZyBTTVAgc2FmZQoKIDAuOCAoMDMvMDcvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCglSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgoJRml4ZWQgcHJvYmxlbXMgdGhhdCB3ZXJlIHNlZW4gaW4gY29kZSBieSBEYXZpZC4KICBOb3cgYm90aCBFZGdlcG9ydC80IGFuZCBFZGdlcG9ydC8yIHdvcmtzIHByb3Blcmx5LgogIENoYW5nZWQgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIHRvIHVzZSBwb3J0IGluc3RlYWQgb2Ygc2VyaWFsLgoKIDAuNyAoMDIvMjcvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCglNaWxlc3RvbmUgMyByZWxlYXNlLgoJUmVsZWFzZSB0byBJTyBOZXR3b3JrcwoJaW9jdGwgZm9yIHdhaXRpbmcgb24gbGluZSBjaGFuZ2UgaW1wbGVtZW50ZWQuCglpb2N0bCBmb3IgZ2V0dGluZyBzdGF0aXN0aWNzIGltcGxlbWVudGVkLgoJbXVsdGlwb3J0IHN1cHBvcnQgd29ya2luZy4KCWxzciBhbmQgbXNyIHJlZ2lzdGVycyBhcmUgbm93IGhhbmRsZWQgcHJvcGVybHkuCgljaGFuZ2UgYnJlYWsgbm93IGhvb2tlZCB1cCBhbmQgd29ya2luZy4KCXN1cHBvcnQgZm9yIGFsbCBrbm93biBFZGdlcG9ydCBkZXZpY2VzLgoKIDAuNiAoMDIvMjIvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCglSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgoJQ0hBU0UgaXMgaW1wbGVtZW50ZWQgY29ycmVjdGx5IHdoZW4gcG9ydCBpcyBjbG9zZWQuCglTZXJpYWxPcGVuIG5vdyBibG9ja3MgY29ycmVjdGx5IHVudGlsIHBvcnQgaXMgZnVsbHkgb3BlbmVkLgoKIDAuNSAoMDIvMjAvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCglSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgoJS25vd24gcHJvYmxlbXM6CgkJbW9kZW0gc3RhdHVzIHJlZ2lzdGVyIGNoYW5nZXMgYXJlIG5vdCBzZW50IG9uIHRvIHRoZSB1c2VyCgkJQ0hBU0UgaXMgbm90IGltcGxlbWVudGVkIHdoZW4gdGhlIHBvcnQgaXMgY2xvc2VkLgoKIDAuNCAoMDIvMTYvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCglTZWNvbmQgY3V0IGF0IHRoZSBDZUJpdCBkZW1vLgoJRG9lc24ndCBsZWFrIG1lbW9yeSBvbiBldmVyeSB3cml0ZSB0byB0aGUgcG9ydAoJU3RpbGwgc21hbGwgbGVha3Mgb24gc3RhcnR1cC4KCUFkZGVkIHN1cHBvcnQgZm9yIEVkZ2Vwb3J0LzIgYW5kIEVkZ2Vwb3J0LzgKCiAwLjMgKDAyLzE1LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgoJQ2VCaXQgZGVtbyByZWxlYXNlLgoJRm9yY2UgdGhlIGxpbmUgc2V0dGluZ3MgdG8gNDgwMCwgOCwgMSwgZSBmb3IgdGhlIGRlbW8uCglXYXJuaW5nISBUaGlzIHZlcnNpb24gbGVha3MgbWVtb3J5IGxpa2UgY3JhenkhCgogMC4yICgwMS8zMC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KCU1pbGVzdG9uZSAxIHJlbGVhc2UuCglEZXZpY2UgaXMgZm91bmQgYnkgVVNCIHN1YnN5c3RlbSwgZW51bWVyYXRlZCwgZmltd2FyZSBpcyBkb3dubG9hZGVkCglhbmQgdGhlIGRlc2NyaXB0b3JzIGFyZSBwcmludGVkIHRvIHRoZSBkZWJ1ZyBsb2csIGNvbmZpZyBpcyBzZXQsIGFuZAoJZ3JlZW4gbGlnaHQgc3RhcnRzIHRvIGJsaW5rLiBPcGVuIHBvcnQgd29ya3MsIGFuZCBkYXRhIGNhbiBiZSBzZW50CglhbmQgcmVjZWl2ZWQgYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3Mgb2YgdGhlIFVBUlQuIExvb3BiYWNrIGNvbm5lY3RvcgoJYW5kIGRlYnVnIGxvZyBjb25maXJtcyB0aGlzLgoKIDAuMSAoMDEvMjMvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCglJbml0aWFsIHJlbGVhc2UgdG8gaGVscCBJTyBOZXR3b3JrcyB0cnkgdG8gc2V0IHVwIHRoZWlyIHRlc3Qgc3lzdGVtLgoJRWRnZXBvcnQ0IGlzIHJlY29nbml6ZWQsIGZpcm13YXJlIGlzIGRvd25sb2FkZWQsIGNvbmZpZyBpcyBzZXQgc28KCWRldmljZSBibGlua3MgZ3JlZW4gbGlnaHQgZXZlcnkgMyBzZWMuIFBvcnQgaXMgYm91bmQsIGJ1dCBvcGVuaW5nLAoJY2xvc2luZywgYW5kIHNlbmRpbmcgZGF0YSBkbyBub3Qgd29yayBwcm9wZXJseS4KCgo=