ICAgVGhlIFBDSSBFeHByZXNzIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyBEcml2ZXIgR3VpZGUgSE9XVE8KCQlULiBMb25nIE5ndXllbgk8dG9tLmwubmd1eWVuQGludGVsLmNvbT4KCQlZYW5taW4gWmhhbmcJPHlhbm1pbi56aGFuZ0BpbnRlbC5jb20+CgkJCQkwNy8yOS8yMDA2CgoKMS4gT3ZlcnZpZXcKCjEuMSBBYm91dCB0aGlzIGd1aWRlCgpUaGlzIGd1aWRlIGRlc2NyaWJlcyB0aGUgYmFzaWNzIG9mIHRoZSBQQ0kgRXhwcmVzcyBBZHZhbmNlZCBFcnJvcgpSZXBvcnRpbmcgKEFFUikgZHJpdmVyIGFuZCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGl0LCBhcwp3ZWxsIGFzIGhvdyB0byBlbmFibGUgdGhlIGRyaXZlcnMgb2YgZW5kcG9pbnQgZGV2aWNlcyB0byBjb25mb3JtIHdpdGgKUENJIEV4cHJlc3MgQUVSIGRyaXZlci4KCjEuMiBDb3B5cmlnaHQgqSBJbnRlbCBDb3Jwb3JhdGlvbiAyMDA2LgoKMS4zIFdoYXQgaXMgdGhlIFBDSSBFeHByZXNzIEFFUiBEcml2ZXI/CgpQQ0kgRXhwcmVzcyBlcnJvciBzaWduYWxpbmcgY2FuIG9jY3VyIG9uIHRoZSBQQ0kgRXhwcmVzcyBsaW5rIGl0c2VsZgpvciBvbiBiZWhhbGYgb2YgdHJhbnNhY3Rpb25zIGluaXRpYXRlZCBvbiB0aGUgbGluay4gUENJIEV4cHJlc3MKZGVmaW5lcyB0d28gZXJyb3IgcmVwb3J0aW5nIHBhcmFkaWdtczogdGhlIGJhc2VsaW5lIGNhcGFiaWxpdHkgYW5kCnRoZSBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgY2FwYWJpbGl0eS4gVGhlIGJhc2VsaW5lIGNhcGFiaWxpdHkgaXMKcmVxdWlyZWQgb2YgYWxsIFBDSSBFeHByZXNzIGNvbXBvbmVudHMgcHJvdmlkaW5nIGEgbWluaW11bSBkZWZpbmVkCnNldCBvZiBlcnJvciByZXBvcnRpbmcgcmVxdWlyZW1lbnRzLiBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcKY2FwYWJpbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoIGEgUENJIEV4cHJlc3MgYWR2YW5jZWQgZXJyb3IgcmVwb3J0aW5nCmV4dGVuZGVkIGNhcGFiaWxpdHkgc3RydWN0dXJlIHByb3ZpZGluZyBtb3JlIHJvYnVzdCBlcnJvciByZXBvcnRpbmcuCgpUaGUgUENJIEV4cHJlc3MgQUVSIGRyaXZlciBwcm92aWRlcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBQQ0kKRXhwcmVzcyBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgY2FwYWJpbGl0eS4gVGhlIFBDSSBFeHByZXNzIEFFUgpkcml2ZXIgcHJvdmlkZXMgdGhyZWUgYmFzaWMgZnVuY3Rpb25zOgoKLQlHYXRoZXJzIHRoZSBjb21wcmVoZW5zaXZlIGVycm9yIGluZm9ybWF0aW9uIGlmIGVycm9ycyBvY2N1cnJlZC4KLQlSZXBvcnRzIGVycm9yIHRvIHRoZSB1c2Vycy4KLQlQZXJmb3JtcyBlcnJvciByZWNvdmVyeSBhY3Rpb25zLgoKQUVSIGRyaXZlciBvbmx5IGF0dGFjaGVzIHJvb3QgcG9ydHMgd2hpY2ggc3VwcG9ydCBQQ0ktRXhwcmVzcyBBRVIKY2FwYWJpbGl0eS4KCgoyLiBVc2VyIEd1aWRlCgoyLjEgSW5jbHVkZSB0aGUgUENJIEV4cHJlc3MgQUVSIFJvb3QgRHJpdmVyIGludG8gdGhlIExpbnV4IEtlcm5lbAoKVGhlIFBDSSBFeHByZXNzIEFFUiBSb290IGRyaXZlciBpcyBhIFJvb3QgUG9ydCBzZXJ2aWNlIGRyaXZlciBhdHRhY2hlZAp0byB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyLiBJZiBhIHVzZXIgd2FudHMgdG8gdXNlIGl0LCB0aGUgZHJpdmVyCmhhcyB0byBiZSBjb21waWxlZC4gT3B0aW9uIENPTkZJR19QQ0lFQUVSIHN1cHBvcnRzIHRoaXMgY2FwYWJpbGl0eS4gSXQKZGVwZW5kcyBvbiBDT05GSUdfUENJRVBPUlRCVVMsIHNvIHBscy4gc2V0IENPTkZJR19QQ0lFUE9SVEJVUz15IGFuZApDT05GSUdfUENJRUFFUiA9IHkuCgoyLjIgTG9hZCBQQ0kgRXhwcmVzcyBBRVIgUm9vdCBEcml2ZXIKVGhlcmUgaXMgYSBjYXNlIHdoZXJlIGEgc3lzdGVtIGhhcyBBRVIgc3VwcG9ydCBpbiBCSU9TLiBFbmFibGluZyB0aGUgQUVSClJvb3QgZHJpdmVyIGFuZCBoYXZpbmcgQUVSIHN1cHBvcnQgaW4gQklPUyBtYXkgcmVzdWx0IHVucHJlZGljdGFibGUKYmVoYXZpb3IuIFRvIGF2b2lkIHRoaXMgY29uZmxpY3QsIGEgc3VjY2Vzc2Z1bCBsb2FkIG9mIHRoZSBBRVIgUm9vdCBkcml2ZXIKcmVxdWlyZXMgQUNQSSBfT1NDIHN1cHBvcnQgaW4gdGhlIEJJT1MgdG8gYWxsb3cgdGhlIEFFUiBSb290IGRyaXZlciB0bwpyZXF1ZXN0IGZvciBuYXRpdmUgY29udHJvbCBvZiBBRVIuIFNlZSB0aGUgUENJIEZXIDMuMCBTcGVjaWZpY2F0aW9uIGZvcgpkZXRhaWxzIHJlZ2FyZGluZyBPU0MgdXNhZ2UuIEN1cnJlbnRseSwgbG90cyBvZiBmaXJtd2FyZXMgZG9uJ3QgcHJvdmlkZQpfT1NDIHN1cHBvcnQgd2hpbGUgdGhleSB1c2UgUENJIEV4cHJlc3MuIFRvIHN1cHBvcnQgc3VjaCBmaXJtd2FyZXMsCmZvcmNlbG9hZCwgYSBwYXJhbWV0ZXIgb2YgdHlwZSBib29sLCBjb3VsZCBlbmFibGUgQUVSIHRvIGNvbnRpbnVlIHRvCmJlIGluaXRpYXRlZCBhbHRob3VnaCBmaXJtd2FyZXMgaGF2ZSBubyBfT1NDIHN1cHBvcnQuIFRvIGVuYWJsZSB0aGUKd2Fsa2Fyb3VuZCwgcGxzLiBhZGQgYWVyZHJpdmVyLmZvcmNlbG9hZD15IHRvIGtlcm5lbCBib290IHBhcmFtZXRlciBsaW5lCndoZW4gYm9vdGluZyBrZXJuZWwuIE5vdGUgdGhhdCBmb3JjZWxvYWQ9biBieSBkZWZhdWx0LgoKMi4zIEFFUiBlcnJvciBvdXRwdXQKV2hlbiBhIFBDSS1FIEFFUiBlcnJvciBpcyBjYXB0dXJlZCwgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIG91dHB1dGVkIHRvCmNvbnNvbGUuIElmIGl0J3MgYSBjb3JyZWN0YWJsZSBlcnJvciwgaXQgaXMgb3V0cHV0ZWQgYXMgYSB3YXJuaW5nLgpPdGhlcndpc2UsIGl0IGlzIHByaW50ZWQgYXMgYW4gZXJyb3IuIFNvIHVzZXJzIGNvdWxkIGNob29zZSBkaWZmZXJlbnQKbG9nIGxldmVsIHRvIGZpbHRlciBvdXQgY29ycmVjdGFibGUgZXJyb3IgbWVzc2FnZXMuCgpCZWxvdyBzaG93cyBhbiBleGFtcGxlLgorLS0tLS0tIFBDSS1FeHByZXNzIERldmljZSBFcnJvciAtLS0tLSsKRXJyb3IgU2V2ZXJpdHkgICAgICAgICAgOiBVbmNvcnJlY3RlZCAoRmF0YWwpClBDSUUgQnVzIEVycm9yIHR5cGUgICAgIDogVHJhbnNhY3Rpb24gTGF5ZXIKVW5zdXBwb3J0ZWQgUmVxdWVzdCAgICAgOiBGaXJzdApSZXF1ZXN0ZXIgSUQgICAgICAgICAgICA6IDA1MDAKVmVuZG9ySUQ9ODA4NmgsIERldmljZUlEPTAzMjloLCBCdXM9MDVoLCBEZXZpY2U9MDBoLCBGdW5jdGlvbj0wMGgKVExCIEhlYWRlcjoKMDQwMDAwMDEgMDAyMDBhMDMgMDUwMTAwMDAgMDAwNTAxMDAKCkluIHRoZSBleGFtcGxlLCAnUmVxdWVzdGVyIElEJyBtZWFucyB0aGUgSUQgb2YgdGhlIGRldmljZSB3aG8gc2VuZHMKdGhlIGVycm9yIG1lc3NhZ2UgdG8gcm9vdCBwb3J0LiBQbHMuIHJlZmVyIHRvIHBjaSBleHByZXNzIHNwZWNzIGZvcgpvdGhlciBmaWVsZHMuCgoKMy4gRGV2ZWxvcGVyIEd1aWRlCgpUbyBlbmFibGUgQUVSIGF3YXJlIHN1cHBvcnQgcmVxdWlyZXMgYSBzb2Z0d2FyZSBkcml2ZXIgdG8gY29uZmlndXJlCnRoZSBBRVIgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgd2l0aGluIGl0cyBkZXZpY2UgYW5kIHRvIHByb3ZpZGUgY2FsbGJhY2tzLgoKVG8gc3VwcG9ydCBBRVIgYmV0dGVyLCBkZXZlbG9wZXJzIG5lZWQgdW5kZXJzdGFuZCBob3cgQUVSIGRvZXMgd29yawpmaXJzdGx5LgoKUENJIEV4cHJlc3MgZXJyb3JzIGFyZSBjbGFzc2lmaWVkIGludG8gdHdvIHR5cGVzOiBjb3JyZWN0YWJsZSBlcnJvcnMKYW5kIHVuY29ycmVjdGFibGUgZXJyb3JzLiBUaGlzIGNsYXNzaWZpY2F0aW9uIGlzIGJhc2VkIG9uIHRoZSBpbXBhY3RzCm9mIHRob3NlIGVycm9ycywgd2hpY2ggbWF5IHJlc3VsdCBpbiBkZWdyYWRlZCBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbgpmYWlsdXJlLgoKQ29ycmVjdGFibGUgZXJyb3JzIHBvc2Ugbm8gaW1wYWN0cyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUKaW50ZXJmYWNlLiBUaGUgUENJIEV4cHJlc3MgcHJvdG9jb2wgY2FuIHJlY292ZXIgd2l0aG91dCBhbnkgc29mdHdhcmUKaW50ZXJ2ZW50aW9uIG9yIGFueSBsb3NzIG9mIGRhdGEuIFRoZXNlIGVycm9ycyBhcmUgZGV0ZWN0ZWQgYW5kCmNvcnJlY3RlZCBieSBoYXJkd2FyZS4gVW5saWtlIGNvcnJlY3RhYmxlIGVycm9ycywgdW5jb3JyZWN0YWJsZQplcnJvcnMgaW1wYWN0IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGludGVyZmFjZS4gVW5jb3JyZWN0YWJsZSBlcnJvcnMKY2FuIGNhdXNlIGEgcGFydGljdWxhciB0cmFuc2FjdGlvbiBvciBhIHBhcnRpY3VsYXIgUENJIEV4cHJlc3MgbGluawp0byBiZSB1bnJlbGlhYmxlLiBEZXBlbmRpbmcgb24gdGhvc2UgZXJyb3IgY29uZGl0aW9ucywgdW5jb3JyZWN0YWJsZQplcnJvcnMgYXJlIGZ1cnRoZXIgY2xhc3NpZmllZCBpbnRvIG5vbi1mYXRhbCBlcnJvcnMgYW5kIGZhdGFsIGVycm9ycy4KTm9uLWZhdGFsIGVycm9ycyBjYXVzZSB0aGUgcGFydGljdWxhciB0cmFuc2FjdGlvbiB0byBiZSB1bnJlbGlhYmxlLApidXQgdGhlIFBDSSBFeHByZXNzIGxpbmsgaXRzZWxmIGlzIGZ1bGx5IGZ1bmN0aW9uYWwuIEZhdGFsIGVycm9ycywgb24KdGhlIG90aGVyIGhhbmQsIGNhdXNlIHRoZSBsaW5rIHRvIGJlIHVucmVsaWFibGUuCgpXaGVuIEFFUiBpcyBlbmFibGVkLCBhIFBDSSBFeHByZXNzIGRldmljZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2VuZCBhbgplcnJvciBtZXNzYWdlIHRvIHRoZSBQQ0lFIHJvb3QgcG9ydCBhYm92ZSBpdCB3aGVuIHRoZSBkZXZpY2UgY2FwdHVyZXMKYW4gZXJyb3IuIFRoZSBSb290IFBvcnQsIHVwb24gcmVjZWl2aW5nIGFuIGVycm9yIHJlcG9ydGluZyBtZXNzYWdlLAppbnRlcm5hbGx5IHByb2Nlc3NlcyBhbmQgbG9ncyB0aGUgZXJyb3IgbWVzc2FnZSBpbiBpdHMgUENJIEV4cHJlc3MKY2FwYWJpbGl0eSBzdHJ1Y3R1cmUuIEVycm9yIGluZm9ybWF0aW9uIGJlaW5nIGxvZ2dlZCBpbmNsdWRlcyBzdG9yaW5nCnRoZSBlcnJvciByZXBvcnRpbmcgYWdlbnQncyByZXF1ZXN0b3IgSUQgaW50byB0aGUgRXJyb3IgU291cmNlCklkZW50aWZpY2F0aW9uIFJlZ2lzdGVycyBhbmQgc2V0dGluZyB0aGUgZXJyb3IgYml0cyBvZiB0aGUgUm9vdCBFcnJvcgpTdGF0dXMgUmVnaXN0ZXIgYWNjb3JkaW5nbHkuIElmIEFFUiBlcnJvciByZXBvcnRpbmcgaXMgZW5hYmxlZCBpbiBSb290CkVycm9yIENvbW1hbmQgUmVnaXN0ZXIsIHRoZSBSb290IFBvcnQgZ2VuZXJhdGVzIGFuIGludGVycnVwdCBpZiBhbgplcnJvciBpcyBkZXRlY3RlZC4KCk5vdGUgdGhhdCB0aGUgZXJyb3JzIGFzIGRlc2NyaWJlZCBhYm92ZSBhcmUgcmVsYXRlZCB0byB0aGUgUENJIEV4cHJlc3MKaGllcmFyY2h5IGFuZCBsaW5rcy4gVGhlc2UgZXJyb3JzIGRvIG5vdCBpbmNsdWRlIGFueSBkZXZpY2Ugc3BlY2lmaWMKZXJyb3JzIGJlY2F1c2UgZGV2aWNlIHNwZWNpZmljIGVycm9ycyB3aWxsIHN0aWxsIGdldCBzZW50IGRpcmVjdGx5IHRvCnRoZSBkZXZpY2UgZHJpdmVyLgoKMy4xIENvbmZpZ3VyZSB0aGUgQUVSIGNhcGFiaWxpdHkgc3RydWN0dXJlCgpBRVIgYXdhcmUgZHJpdmVycyBvZiBQQ0kgRXhwcmVzcyBjb21wb25lbnQgbmVlZCBjaGFuZ2UgdGhlIGRldmljZQpjb250cm9sIHJlZ2lzdGVycyB0byBlbmFibGUgQUVSLiBUaGV5IGFsc28gY291bGQgY2hhbmdlIEFFUiByZWdpc3RlcnMsCmluY2x1ZGluZyBtYXNrIGFuZCBzZXZlcml0eSByZWdpc3RlcnMuIEhlbHBlciBmdW5jdGlvbgpwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nIGNvdWxkIGJlIHVzZWQgdG8gZW5hYmxlIEFFUi4gU2VlCnNlY3Rpb24gMy4zLgoKMy4yLiBQcm92aWRlIGNhbGxiYWNrcwoKMy4yLjEgY2FsbGJhY2sgcmVzZXRfbGluayB0byByZXNldCBwY2kgZXhwcmVzcyBsaW5rCgpUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gcmVzZXQgdGhlIHBjaSBleHByZXNzIHBoeXNpY2FsIGxpbmsgd2hlbiBhCmZhdGFsIGVycm9yIGhhcHBlbnMuIFRoZSByb290IHBvcnQgYWVyIHNlcnZpY2UgZHJpdmVyIHByb3ZpZGVzIGEKZGVmYXVsdCByZXNldF9saW5rIGZ1bmN0aW9uLCBidXQgZGlmZmVyZW50IHVwc3RyZWFtIHBvcnRzIG1pZ2h0CmhhdmUgZGlmZmVyZW50IHNwZWNpZmljYXRpb25zIHRvIHJlc2V0IHBjaSBleHByZXNzIGxpbmssIHNvIGFsbAp1cHN0cmVhbSBwb3J0cyBzaG91bGQgcHJvdmlkZSB0aGVpciBvd24gcmVzZXRfbGluayBmdW5jdGlvbnMuCgpJbiBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyLCBhIG5ldyBwb2ludGVyLCByZXNldF9saW5rLCBpcwphZGRlZC4KCnBjaV9lcnNfcmVzdWx0X3QgKCpyZXNldF9saW5rKSAoc3RydWN0IHBjaV9kZXYgKmRldik7CgpTZWN0aW9uIDMuMi4yLjIgcHJvdmlkZXMgbW9yZSBkZXRhaWxlZCBpbmZvIG9uIHdoZW4gdG8gY2FsbApyZXNldF9saW5rLgoKMy4yLjIgUENJIGVycm9yLXJlY292ZXJ5IGNhbGxiYWNrcwoKVGhlIFBDSSBFeHByZXNzIEFFUiBSb290IGRyaXZlciB1c2VzIGVycm9yIGNhbGxiYWNrcyB0byBjb29yZGluYXRlCndpdGggZG93bnN0cmVhbSBkZXZpY2UgZHJpdmVycyBhc3NvY2lhdGVkIHdpdGggYSBoaWVyYXJjaHkgaW4gcXVlc3Rpb24Kd2hlbiBwZXJmb3JtaW5nIGVycm9yIHJlY292ZXJ5IGFjdGlvbnMuCgpEYXRhIHN0cnVjdCBwY2lfZHJpdmVyIGhhcyBhIHBvaW50ZXIsIGVycl9oYW5kbGVyLCB0byBwb2ludCB0bwpwY2lfZXJyb3JfaGFuZGxlcnMgd2hvIGNvbnNpc3RzIG9mIGEgY291cGxlIG9mIGNhbGxiYWNrIGZ1bmN0aW9uCnBvaW50ZXJzLiBBRVIgZHJpdmVyIGZvbGxvd3MgdGhlIHJ1bGVzIGRlZmluZWQgaW4KcGNpLWVycm9yLXJlY292ZXJ5LnR4dCBleGNlcHQgcGNpIGV4cHJlc3Mgc3BlY2lmaWMgcGFydHMgKGUuZy4KcmVzZXRfbGluaykuIFBscy4gcmVmZXIgdG8gcGNpLWVycm9yLXJlY292ZXJ5LnR4dCBmb3IgZGV0YWlsZWQKZGVmaW5pdGlvbnMgb2YgdGhlIGNhbGxiYWNrcy4KCkJlbG93IHNlY3Rpb25zIHNwZWNpZnkgd2hlbiB0byBjYWxsIHRoZSBlcnJvciBjYWxsYmFjayBmdW5jdGlvbnMuCgozLjIuMi4xIENvcnJlY3RhYmxlIGVycm9ycwoKQ29ycmVjdGFibGUgZXJyb3JzIHBvc2Ugbm8gaW1wYWN0cyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBvZgp0aGUgaW50ZXJmYWNlLiBUaGUgUENJIEV4cHJlc3MgcHJvdG9jb2wgY2FuIHJlY292ZXIgd2l0aG91dCBhbnkKc29mdHdhcmUgaW50ZXJ2ZW50aW9uIG9yIGFueSBsb3NzIG9mIGRhdGEuIFRoZXNlIGVycm9ycyBkbyBub3QKcmVxdWlyZSBhbnkgcmVjb3ZlcnkgYWN0aW9ucy4gVGhlIEFFUiBkcml2ZXIgY2xlYXJzIHRoZSBkZXZpY2Uncwpjb3JyZWN0YWJsZSBlcnJvciBzdGF0dXMgcmVnaXN0ZXIgYWNjb3JkaW5nbHkgYW5kIGxvZ3MgdGhlc2UgZXJyb3JzLgoKMy4yLjIuMiBOb24tY29ycmVjdGFibGUgKG5vbi1mYXRhbCBhbmQgZmF0YWwpIGVycm9ycwoKSWYgYW4gZXJyb3IgbWVzc2FnZSBpbmRpY2F0ZXMgYSBub24tZmF0YWwgZXJyb3IsIHBlcmZvcm1pbmcgbGluayByZXNldAphdCB1cHN0cmVhbSBpcyBub3QgcmVxdWlyZWQuIFRoZSBBRVIgZHJpdmVyIGNhbGxzIGVycm9yX2RldGVjdGVkKGRldiwKcGNpX2NoYW5uZWxfaW9fbm9ybWFsKSB0byBhbGwgZHJpdmVycyBhc3NvY2lhdGVkIHdpdGhpbiBhIGhpZXJhcmNoeSBpbgpxdWVzdGlvbi4gZm9yIGV4YW1wbGUsCkVuZFBvaW50PD09PkRvd25zdHJlYW1Qb3J0IEI8PT0+VXBzdHJlYW1Qb3J0IEE8PT0+Um9vdFBvcnQuCklmIFVwc3RyZWFtIHBvcnQgQSBjYXB0dXJlcyBhbiBBRVIgZXJyb3IsIHRoZSBoaWVyYXJjaHkgY29uc2lzdHMgb2YKRG93bnN0cmVhbSBwb3J0IEIgYW5kIEVuZFBvaW50LgoKQSBkcml2ZXIgbWF5IHJldHVybiBQQ0lfRVJTX1JFU1VMVF9DQU5fUkVDT1ZFUiwKUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVCwgb3IgUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVCwgZGVwZW5kaW5nIG9uCndoZXRoZXIgaXQgY2FuIHJlY292ZXIgb3IgdGhlIEFFUiBkcml2ZXIgY2FsbHMgbW1pb19lbmFibGVkIGFzIG5leHQuCgpJZiBhbiBlcnJvciBtZXNzYWdlIGluZGljYXRlcyBhIGZhdGFsIGVycm9yLCBrZXJuZWwgd2lsbCBicm9hZGNhc3QKZXJyb3JfZGV0ZWN0ZWQoZGV2LCBwY2lfY2hhbm5lbF9pb19mcm96ZW4pIHRvIGFsbCBkcml2ZXJzIHdpdGhpbgphIGhpZXJhcmNoeSBpbiBxdWVzdGlvbi4gVGhlbiwgcGVyZm9ybWluZyBsaW5rIHJlc2V0IGF0IHVwc3RyZWFtIGlzCm5lY2Vzc2FyeS4gQXMgZGlmZmVyZW50IGtpbmRzIG9mIGRldmljZXMgbWlnaHQgdXNlIGRpZmZlcmVudCBhcHByb2FjaGVzCnRvIHJlc2V0IGxpbmssIEFFUiBwb3J0IHNlcnZpY2UgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhlCmZ1bmN0aW9uIHRvIHJlc2V0IGxpbmsuIEZpcnN0bHksIGtlcm5lbCBsb29rcyBmb3IgaWYgdGhlIHVwc3RyZWFtCmNvbXBvbmVudCBoYXMgYW4gYWVyIGRyaXZlci4gSWYgaXQgaGFzLCBrZXJuZWwgdXNlcyB0aGUgcmVzZXRfbGluawpjYWxsYmFjayBvZiB0aGUgYWVyIGRyaXZlci4gSWYgdGhlIHVwc3RyZWFtIGNvbXBvbmVudCBoYXMgbm8gYWVyIGRyaXZlcgphbmQgdGhlIHBvcnQgaXMgZG93bnN0cmVhbSBwb3J0LCB3ZSB3aWxsIHVzZSB0aGUgYWVyIGRyaXZlciBvZiB0aGUKcm9vdCBwb3J0IHdobyByZXBvcnRzIHRoZSBBRVIgZXJyb3IuIEFzIGZvciB1cHN0cmVhbSBwb3J0cywKdGhleSBzaG91bGQgcHJvdmlkZSB0aGVpciBvd24gYWVyIHNlcnZpY2UgZHJpdmVycyB3aXRoIHJlc2V0X2xpbmsKZnVuY3Rpb24uIElmIGVycm9yX2RldGVjdGVkIHJldHVybnMgUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVIgYW5kCnJlc2V0X2xpbmsgcmV0dXJucyBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQsIHRoZSBlcnJvciBoYW5kbGluZyBnb2VzCnRvIG1taW9fZW5hYmxlZC4KCjMuMyBoZWxwZXIgZnVuY3Rpb25zCgozLjMuMSBpbnQgcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKmRldik7CnBjaV9maW5kX2Flcl9jYXBhYmlsaXR5IGxvY2F0ZXMgdGhlIFBDSSBFeHByZXNzIEFFUiBjYXBhYmlsaXR5CmluIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiBzcGFjZS4gSWYgdGhlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQKUENJLUV4cHJlc3MgQUVSLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLgoKMy4zLjIgaW50IHBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldik7CnBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgZW5hYmxlcyB0aGUgZGV2aWNlIHRvIHNlbmQgZXJyb3IKbWVzc2FnZXMgdG8gcm9vdCBwb3J0IHdoZW4gYW4gZXJyb3IgaXMgZGV0ZWN0ZWQuIE5vdGUgdGhhdCBkZXZpY2VzCmRvbid0IGVuYWJsZSB0aGUgZXJyb3IgcmVwb3J0aW5nIGJ5IGRlZmF1bHQsIHNvIGRldmljZSBkcml2ZXJzIG5lZWQKY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSBpdC4KCjMuMy4zIGludCBwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgZGlzYWJsZXMgdGhlIGRldmljZSB0byBzZW5kIGVycm9yCm1lc3NhZ2VzIHRvIHJvb3QgcG9ydCB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLgoKMy4zLjQgaW50IHBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyBjbGVhbnVwcyB0aGUgdW5jb3JyZWN0YWJsZQplcnJvciBzdGF0dXMgcmVnaXN0ZXIuCgozLjQgRnJlcXVlbnQgQXNrZWQgUXVlc3Rpb25zCgpROiBXaGF0IGhhcHBlbnMgaWYgYSBQQ0kgRXhwcmVzcyBkZXZpY2UgZHJpdmVyIGRvZXMgbm90IHByb3ZpZGUgYW4KZXJyb3IgcmVjb3ZlcnkgaGFuZGxlciAocGNpX2RyaXZlci0+ZXJyX2hhbmRsZXIgaXMgZXF1YWwgdG8gTlVMTCk/CgpBOiBUaGUgZGV2aWNlcyBhdHRhY2hlZCB3aXRoIHRoZSBkcml2ZXIgd29uJ3QgYmUgcmVjb3ZlcmVkLiBJZiB0aGUKZXJyb3IgaXMgZmF0YWwsIGtlcm5lbCB3aWxsIHByaW50IG91dCB3YXJuaW5nIG1lc3NhZ2VzLiBQbGVhc2UgcmVmZXIKdG8gc2VjdGlvbiAzIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKUTogV2hhdCBoYXBwZW5zIGlmIGFuIHVwc3RyZWFtIHBvcnQgc2VydmljZSBkcml2ZXIgZG9lcyBub3QgcHJvdmlkZQpjYWxsYmFjayByZXNldF9saW5rPwoKQTogRmF0YWwgZXJyb3IgcmVjb3Zlcnkgd2lsbCBmYWlsIGlmIHRoZSBlcnJvcnMgYXJlIHJlcG9ydGVkIGJ5IHRoZQp1cHN0cmVhbSBwb3J0cyB3aG8gYXJlIGF0dGFjaGVkIGJ5IHRoZSBzZXJ2aWNlIGRyaXZlci4KClE6IEhvdyBkb2VzIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgZGVhbCB3aXRoIGRyaXZlciB0aGF0IGlzIG5vdCBQQ0kKRXhwcmVzcyBhd2FyZT8KCkE6IFRoaXMgaW5mcmFzdHJ1Y3R1cmUgY2FsbHMgdGhlIGVycm9yIGNhbGxiYWNrIGZ1bmN0aW9ucyBvZiB0aGUKZHJpdmVyIHdoZW4gYW4gZXJyb3IgaGFwcGVucy4gQnV0IGlmIHRoZSBkcml2ZXIgaXMgbm90IGF3YXJlIG9mClBDSSBFeHByZXNzLCB0aGUgZGV2aWNlIG1pZ2h0IG5vdCByZXBvcnQgaXRzIG93biBlcnJvcnMgdG8gcm9vdApwb3J0LgoKUTogV2hhdCBtb2RpZmljYXRpb25zIHdpbGwgdGhhdCBkcml2ZXIgbmVlZCB0byBtYWtlIGl0IGNvbXBhdGlibGUKd2l0aCB0aGUgUENJIEV4cHJlc3MgQUVSIFJvb3QgZHJpdmVyPwoKQTogSXQgY291bGQgY2FsbCB0aGUgaGVscGVyIGZ1bmN0aW9ucyB0byBlbmFibGUgQUVSIGluIGRldmljZXMgYW5kCmNsZWFudXAgdW5jb3JyZWN0YWJsZSBzdGF0dXMgcmVnaXN0ZXIuIFBscy4gcmVmZXIgdG8gc2VjdGlvbiAzLjMuCgo=