VGhlIHRtc2NzaW0gZHJpdmVyCj09PT09PT09PT09PT09PT09PQoKMS4gUHVycG9zZSBhbmQgaGlzdG9yeQoyLiBJbnN0YWxsYXRpb24KMy4gRmVhdHVyZXMKNC4gQ29uZmlndXJhdGlvbiB2aWEgL3Byb2Mvc2NzaS90bXNjc2ltLz8KNS4gQ29uZmlndXJhdGlvbiB2aWEgYm9vdC9tb2R1bGUgcGFyYW1zCjYuIFBvdGVudGlhbCBpbXByb3ZlbWVudHMKNy4gQnVnIHJlcG9ydHMsIGRlYnVnZ2luZyBhbmQgdXBkYXRlcwo4LiBBY2tub3dsZWRnZW1lbnRzCjkuIENvcHlyaWdodAoKCjEuIFB1cnBvc2UgYW5kIGhpc3RvcnkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGUgdG1zY3NpbSBkcml2ZXIgc3VwcG9ydHMgUENJIFNDU0kgSG9zdCBBZGFwdGVycyBiYXNlZCBvbiB0aGUgQU01M0M5NzQKY2hpcC4gQU01M0M5NzQgYmFzZWQgU0NTSSBhZGFwdGVycyBpbmNsdWRlOiAKIFRla3JhbSBEQzM5MCwgREMzOTBUCiBEYXdpY29udHJvbCAyOTc0CiBRTG9naWMgRmFzdCEgUENJIEJhc2ljCiBzb21lIG9uLWJvYXJkIGFkYXB0ZXJzCihUaGlzIGlzIG1vc3QgcHJvYmFibHkgbm90IGEgY29tcGxldGUgbGlzdCkKCkl0IGhhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQy5MLiBIdWFuZyBmcm9tIHRoZSBUZWtyYW0gY29ycC4gdG8gc3VwcG9ydCB0aGUKVGVrcmFtIERDMzkwKFQpIGFkYXB0ZXIuIFRoaXMgaXMgd2hlcmUgdGhlIG5hbWUgY29tZXMgZnJvbTogdG0gPSBUZWtyYW0Kc2NzaSA9IFNDU0kgZHJpdmVyLCBtID0gQU1EICg/KSBhcyBvcHBvc2VkIHRvIHcgZm9yIHRoZSBEQzM5MFcvVS9GCihOQ1I1M2M4WDUsIFg9Mi83KSBkcml2ZXIuIFllcywgdGhlcmUgd2FzIGFsc28gYSBkcml2ZXIgZm9yIHRoZSBsYXR0ZXIsCnRtc2NzaXcsIHdoaWNoIHN1cHBvcnRlZCBEQzM5MFcvVS9GIGFkYXB0ZXJzLiBJdCdzIG5vdCBtYWludGFpbmVkIGFueSBtb3JlLAphcyB0aGUgbmNyNTNjOHh4IGlzIHBlcmZlY3RseSBzdXBwb3J0aW5nIHRoZXNlIGFkcGF0ZXJzIHNpbmNlIHNvbWUgdGltZS4KClRoZSBkcml2ZXIgZmlyc3QgYXBwZWFyZWQgaW4gQXByaWwgMTk5NiwgZXhjbHVzaXZlbHkgc3VwcG9ydGVkIHRoZSBEQzM5MCAKYW5kIGhhcyBiZWVuIGVuaGFuY2VkIHNpbmNlIHRoZW4gaW4gdmFyaW91cyBzdGVwcy4gSW4gTWF5IDE5OTggc3VwcG9ydCBmb3IgCmdlbmVyYWwgQU01M0M5NzQgYmFzZWQgYWRhcHRlcnMgYW5kIHNvbWUgcG9zc2liaWxpdGllcyB0byBjb25maWd1cmUgaXQgd2VyZQphZGRlZC4gVGhlIG5vbi1EQzM5MCBzdXBwb3J0IHdvcmtzIGJ5IGFzc3VtaW5nIHNvbWUgdmFsdWVzIGZvciB0aGUgZGF0YQpub3JtYWxseSB0YWtlbiBmcm9tIHRoZSBEQzM5MCBFRVBST00uIFNlZSBiZWxvdyAoY2hhcHRlciA1KSBmb3IgZGV0YWlscy4KCldoZW4gdXNpbmcgdGhlIERDMzkwLCB0aGUgY29uZmlndXJhdGlvbiBpcyBzdGlsbCBiZSBkb25lIHVzaW5nIHRoZSBEQzM5MApCSU9TIHNldHVwLiBUaGUgREMzOTAgRUVQUk9NIGlzIHJlYWQgYW5kIHVzZWQgYnkgdGhlIGRyaXZlciwgYW55IGJvb3Qgb3IKbW9kdWxlIHBhcmFtZXRlcnMgKGNoYXB0ZXIgNSkgYXJlIGlnbm9yZWQhIEhvd2V2ZXIsIHlvdSBjYW4gY2hhbmdlIHNldHRpbmdzCmR5bmFtaWNhbGx5LCBhcyBkZXNjcmliZWQgaW4gY2hhcHRlciA0LiAKCkZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGRyaXZlcidzIGhpc3RvcnksIHNlZSB0aGUgZmlyc3QgbGluZXMKb2YgdG1zY3NpbS5jLgpUaGUgbnVtYmVyaW5nIHNjaGVtZSBpc24ndCBjb25zaXN0ZW50LiBUaGUgZmlyc3QgdmVyc2lvbnMgd2VudCBmcm9tIDEuMDAgdG8KMS4xMiwgdGhlbiAxLjIwYSB0byAxLjIwdC4gRmluYWxseSBJIGRlY2lkZWQgdG8gdXNlIHRoZSBuY3I1M2M4eHggc2NoZW1lLiBTbwp0aGUgbmV4dCByZXZpc2lvbnMgd2lsbCBiZSAyLjBhIHRvIDIuMFggKHN0YWJsZSksIDIuMWEgdG8gMi4xWCAoZXhwZXJpbWVudGFsKSwKMi4yYSB0byAyLjJYIChzdGFibGUsIGFnYWluKSBldGMuIChYID0gYW55dGhpbmcgYmV0d2VlbiBhIGFuZCB6LikgSWYgSSBzZW5kCmZpeGVzIHRvIHBlb3BsZSBmb3IgdGVzdGluZywgSSBjcmVhdGUgaW50ZXJtZWRpYXRlIHZlcnNpb25zIHdpdGggYSBkaWdpdCAKYXBwZW5kZWQsIGUuZy4gMi4wYzMuCgoKMi4gSW5zdGFsbGF0aW9uCi0tLS0tLS0tLS0tLS0tLQpJZiB5b3UgZ290IGFueSByZWNlbnQga2VybmVsIHdpdGggdGhpcyBkcml2ZXIgYW5kIGRvY3VtZW50IGluY2x1ZGVkIGluCmxpbnV4L2RyaXZlcnMvc2NzaSwgeW91IGJhc2ljYWxseSBoYXZlIHRvIGRvIG5vdGhpbmcgc3BlY2lhbCB0byB1c2UgdGhpcwpkcml2ZXIuIE9mIGNvdXJzZSB5b3UgaGF2ZSB0byBjaG9vc2UgdG8gY29tcGlsZSBTQ1NJIHN1cHBvcnQgYW5kIERDMzkwKFQpCnN1cHBvcnQgaW50byB5b3VyIGtlcm5lbCBvciBhcyBtb2R1bGUgd2hlbiBjb25maWd1cmluZyB5b3VyIGtlcm5lbCBmb3IKY29tcGlsaW5nLgpORVc6IFlvdSBtYXkgYXMgd2VsbCBjb21waWxlIHRoaXMgbW9kdWxlIG91dHNpZGUgeW91ciBrZXJuZWwsIHVzaW5nIHRoZQpzdXBwbGllZCBNYWtlZmlsZS4KCiBJZiB5b3UgZ290IGFuIG9sZCBrZXJuZWwgKHByZSAyLjEuMTI3LCBwcmUgMi4wLjM3cDEpIHdpdGggYW4gb2xkIHZlcnNpb24gb2YKIHRoaXMgZHJpdmVyOiBHZXQgZGMzOTAtMjExMjUtMjBiLmRpZmYuZ3ogb3IgZGMzOTAtMjAzNnAyMS0yMGIxLmRpZmYuZ3ogZnJvbQogbXkgd2ViIHBhZ2UgYW5kIGFwcGx5IHRoZSBwYXRjaC4gQXBwbHkgZnVydGhlciBwYXRjaGVzIHRvIHVwZ3JhZGUgdG8gdGhlIAogbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGRyaXZlci4KCiBJZiB5b3Ugd2FudCB0byBkbyBpdCBtYW51YWxseSwgeW91IHNob3VsZCBjb3B5IHRoZSBmaWxlcyAoZGMzOTAuaCwKIHRtc2NzaW0uaCwgdG1zY3NpbS5jLCBzY3NpaW9tLmMgYW5kIFJFQURNRS50bXNjc2ltKSBmcm9tIHRoaXMgZGlyZWN0b3J5IHRvCiBsaW51eC9kcml2ZXJzL3Njc2kuIFlvdSBoYXZlIHRvIHJlY29tcGlsZSB5b3VyIGtlcm5lbC9tb2R1bGUgb2YgY291cnNlLgoKIFlvdSBzaG91bGQgYXBwbHkgdGhlIHRocmVlIHBhdGNoZXMgaW5jbHVkZWQgaW4gZGMzOTAtMTIwLWtlcm5lbC5kaWZmCiAoQXBwbHlpbmcgdGhlbTogY2QgL3Vzci9zcmM7IHBhdGNoIC1wMCA8fi9kYzM5MC0xMjAta2VybmVsLmRpZmYpCiBUaGUgcGF0Y2hlcyBhcmUgYWdhaW5zdCAyLjEuMTI1LCBzbyB5b3UgbWlnaHQgaGF2ZSB0byBtYW51YWxseSByZXNvbHZlCiByZWplY3Rpb25zIHdoZW4gYXBwbHlpbmcgdG8gYW5vdGhlciBrZXJuZWwgdmVyc2lvbi4KCiBUaGUgcGF0Y2hlcyB3aWxsIHVwZGF0ZSB0aGUga2VybmVsIHN0YXJ0dXAgY29kZSB0byBhbGxvdyBib290IHBhcmFtZXRlcnMgdG8KIGJlIHBhc3NlZCB0byB0aGUgZHJpdmVyLCB1cGRhdGUgdGhlIERvY3VtZW50YXRpb24gYW5kIGZpbmFsbHkgb2ZmZXIgeW91IHRoZQogcG9zc2liaWxpdHkgdG8gb21pdCB0aGUgbm9uLURDMzkwIHBhcnRzIG9mIHRoZSBkcml2ZXIuCiAoQnkgc2VsZWN0aW5nICJPbWl0IHN1cHBvcnQgZm9yIG5vbiBEQzM5MCIgeW91IGJhc2ljYWxseSBkaXNhYmxlIHRoZQogZW11bGF0aW9uIG9mIGEgREMzOTAgRUVQUk9NIGZvciBub24gREMzOTAgYWRhcHRlcnMuIFRoaXMgc2F2ZXMgYSBmZXcgYnl0ZXMKIG9mIG1lbW9yeS4pCgpJZiB5b3UgZ290IGEgdmVyeSBvbGQga2VybmVsIHdpdGhvdXQgdGhlIHRtc2NzaW0gZHJpdmVyIChwcmUgMi4wLjMxKQpJIHJlY29tbWVuZCB1cGdyYWRpbmcgeW91ciBrZXJuZWwuIEhvd2V2ZXIsIGlmIHlvdSBkb24ndCB3YW50IHRvLCBwbGVhc2UKY29udGFjdCBtZSB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHBhdGNoZXMuCgoKVXBncmFkaW5nIGEgU0NTSSBkcml2ZXIgaXMgYWx3YXlzIGEgZGVsaWNhdGUgdGhpbmcgdG8gZG8uIFRoZSAyLjAgZHJpdmVyIGhhcwpwcm92ZW4gc3RhYmxlIG9uIG1hbnkgc3lzdGVtcywgYnV0IGl0J3Mgc3RpbGwgYSBnb29kIGlkZWEgdG8gdGFrZSBzb21lCnByZWNhdXRpb25zLiBJbiBhbiBpZGVhbCB3b3JsZCB5b3Ugd291bGQgaGF2ZSBhIGZ1bGwgYmFja3VwIG9mIHlvdXIgZGlza3MuClRoZSB3b3JsZCBpc24ndCBpZGVhbCBhbmQgbW9zdCBwZW9wbGUgZG9uJ3QgaGF2ZSBmdWxsIGJhY2t1cHMgKG1lIG5laXRoZXIpLgpTbyB0YWtlIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgbWVhc3VyZXM6CiogbWFrZSB5b3VyIGtlcm5lbCByZW1vdW50IHRoZSBGUyByZWFkLW9ubHkgb24gZGV0ZWN0aW5nIGFuIGVycm9yOgogIHR1bmUyZnMgLWUgcmVtb3VudC1ybyAvZGV2L3NkPz8KKiBoYXZlIGNvcGllcyBvZiB5b3VyIFNDU0kgZGlzaydzIHBhcnRpdGlvbiB0YWJsZXMgb24gc29tZSBzYWZlIGxvY2F0aW9uOgogIGRkIGlmPS9kZXYvc2RhIG9mPS9tbnQvZmxvcHB5L3NkYSBicz01MTIgY291bnQ9MQogIG9yIGp1c3QgcHJpbnQgaXQgd2l0aDoKICBmZGlzayAtbCB8IGxwcgoqIG1ha2Ugc3VyZSB5b3UgYXJlIGFibGUgdG8gYm9vdCBMaW51eCAoZS5nLiBmcm9tIGZsb3BweSBkaXNrIHVzaW5nIEluaXRSRCkKICBpZiB5b3VyIFNDU0kgZGlzayBnZXRzIGNvcnJ1cHRlZC4gWW91IGNhbiB1c2UgCiAgZnRwOi8vc3R1ZGVudC5waHlzaWsudW5pLWRvcnRtdW5kLmRlL3B1Yi9saW51eC9rZXJuZWwvYm9vdGRpc2suZ3oKCk9uZSBtb3JlIHdhcm5pbmc6IEkgdXNlZCB0byBvdmVyY2xvY2sgbXkgUENJIGJ1cyB0byA0MS42NyBNSHouIE15IFRla3JhbQpEQzM5MEYgKFN5bTUzYzg3NSkgYWNjZXB0ZWQgdGhpcyBhcyB3ZWxsIGFzIG15IE1pbGxlbml1bS4gQnV0IHRoZSBBbTUzQzk3NApwcm9kdWNlZCBlcnJvcnMgYW5kIHN0YXJ0ZWQgdG8gY29ycnVwdCBteSBkaXNrcy4gU28gZG9uJ3QgZG8gdGhhdCEgQSAzNy41MApNSHogUENJIGJ1cyB3b3JrcyBmb3IgbWUsIHRob3VnaCwgYnV0IEkgZG9uJ3QgcmVjb21tZW5kIHVzaW5nIGhpZ2hlciBjbG9ja3MKdGhhbiB0aGUgMzMuMzMgTUh6IGJlaW5nIGluIHRoZSBQQ0kgc3BlYy4KCklmIHlvdSB3YW50IHRvIHNoYXJlIHRoZSBJUlEgd2l0aCBhbm90aGVyIGRldmljZSBhbmQgdGhlIGRyaXZlciByZWZ1c2VzIHRvCmRvIHNvLCB5b3UgbWlnaHQgc3VjY2VlZCB3aXRoIGNoYW5naW5nIHRoZSBEQzM5MF9JUlEgdHlwZSBpbiB0bXNjc2ltLmMgdG8gClNBX1NISVJRIHwgU0FfSU5URVJSVVBULgoKCjMuRmVhdHVyZXMKLS0tLS0tLS0tLQotIFNDU0kKICogVGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcKICogU3luYyBzcGVlZCB1cCB0byAxMCBNSHoKICogRGlzY29ubmVjdGlvbgogKiBNdWx0aXBsZSBMVU5zCgotIEdlbmVyYWwgLyBMaW51eCBpbnRlcmZhY2UKICogU3VwcG9ydCBmb3IgdXAgdG8gNCBBTTUzQzk3NCBhZGFwdGVycy4KICogREMzOTAgRUVQUk9NIHVzYWdlIG9yIGJvb3QvbW9kdWxlIHBhcmFtcwogKiBJbmZvcm1hdGlvbiB2aWEgY2F0IC9wcm9jL3Njc2kvdG1zY3NpbS8/CiAqIER5bmFtaWNhbGx5IGNvbmZpZ3VyYWJsZSBieSB3cml0aW5nIHRvIC9wcm9jL3Njc2kvdG1zY3NpbS8/CiAqIER5bmFtaWMgYWxsb2NhdGlvbiBvZiByZXNvdXJjZXMKICogU01QIHN1cHBvcnQ6IExvY2tpbmcgb24gaW9fcmVxdWVzdCBsb2NrIChMaW51eCAyLjEvMi4yKSBvciBhZGFwdGVyIAogICAgc3BlY2lmaWMgbG9ja3MgKExpbnV4IDIuNT8pCiAqIFVuaWZvcm0gc291cmNlIGNvZGUgZm9yIExpbnV4LTIueC55CiAqIFN1cHBvcnQgZm9yIGR5bi4gYWRkaXRpb24vcmVtb3ZhbCBvZiBkZXZpY2VzIHZpYSBhZGQvcmVtb3ZlLXNpbmdsZS1kZXZpY2UKICAgKFRyeTogZWNobyAic2NzaSBhZGQtc2luZ2xlLWRldmljZSBDIEIgVCBVIiA+L3Byb2Mvc2NzaS9zY3NpIAogICAgQyA9IENvbnRyb2xsZXIsIEIgPSBCdXMsIFQgPSBUYXJnZXQgU0NTSSBJRCwgVSA9IFVuaXQgU0NTSSBMVU4uKSAKICAgIFVzZSB3aXRoIGNhcmUhCiAqIFRyeSB0byB1c2UgdGhlIHBhcnRpdGlvbiB0YWJsZSBmb3IgdGhlIGRldGVybWluYXRpb24gb2YgdGhlIG1hcHBpbmcKCgo0LiBDb25maWd1cmF0aW9uIHZpYSAvcHJvYy9zY3NpL3Rtc2NzaW0vPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGaXJzdCBvZiBhbGwgbG9vayBhdCB0aGUgb3V0cHV0IG9mIC9wcm9jL3Njc2kvdG1zY3NpbS8/IGJ5IHR5cGluZwogY2F0IC9wcm9jL3Njc2kvdG1zY3NpbS8/ClRoZSAiPyIgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IHRoZSBTQ1NJIGhvc3QgbnVtYmVyLiAoVGhlIHNoZWxsIG1pZ2h0IGRvIHRoaXMKZm9yIHlvdS4pCllvdSB3aWxsIHNlZSBzb21lIGluZm8gcmVnYXJkaW5nIHRoZSBhZGFwdGVyIGFuZCwgYXQgdGhlIGVuZCwgYSBsaXN0aW5nIG9mCnRoZSBhdHRhY2hlZCBkZXZpY2VzIGFuZCB0aGVpciBzZXR0aW5ncy4KCkhlcmUncyBhbiBleGFtcGxlOgpnYXJsb2ZmQGt1cnQ6L2hvbWUvZ2FybG9mZiA+IGNhdCAvcHJvYy9zY3NpL3Rtc2NzaW0vMApUZWtyYW0gREMzOTAvQU01M0M5NzQgUENJIFNDU0kgSG9zdCBBZGFwdGVyLCBEcml2ZXIgVmVyc2lvbiAyLjBlNyAyMDAwLTExLTI4ClNDU0kgSG9zdCBOciAxLCBBTTUzQzk3NCBBZGFwdGVyIE5yIDAKSU9Qb3J0QmFzZSAweGIwMDAsIElSUSAxMApNYXhJRCA4LCBNYXhMVU4gOCwgQWRhcHRlcklEIDYsIFNlbFRpbWVvdXQgMjUwIG1zLCBEZWxheVJlc2V0IDEgcwpUYWdNYXhOdW0gMTYsIFN0YXR1cyAweDAwLCBBQ0JGbGFnIDB4MDAsIEdsaXRjaEVhdGVyIDI0IG5zClN0YXRpc3RpY3M6IENtbmRzIDE0NzAxNjUsIENtbmRzIG5vdCBzZW50IGRpcmVjdGx5IDAsIE91dCBvZiBTUkIgY29uZHMgMAogICAgICAgICAgICBMb3N0IGFyYml0cmF0aW9ucyA1ODcsICBTZWwuIGNvbm5lY3RlZCAwLCBDb25uZWN0ZWQ6IE5vCk5yIG9mIGF0dGFjaGVkIGRldmljZXM6IDQsIE5yIG9mIERDQnM6IDQKTWFwIG9mIGF0dGFjaGVkIExVTnM6IDAxIDAwIDAwIDAzIDAxIDAwIDAwIDAwCklkeCBJRCBMVU4gUHJ0eSBTeW5jIERzQ24gU25kUyBUYWdRIE5lZ29QZXJpb2QgU3luY1NwZWVkIFN5bmNPZmZzIE1heENtZAowMCAgMDAgIDAwICBZZXMgIFllcyAgWWVzICBZZXMgIFllcyAgIDEwMCBucyAgICAxMC4wIE0gICAgICAxNSAgICAgIDE2CjAxICAwMyAgMDAgIFllcyAgWWVzICBZZXMgIFllcyAgTm8gICAgMTAwIG5zICAgIDEwLjAgTSAgICAgIDE1ICAgICAgMDEKMDIgIDAzICAwMSAgWWVzICBZZXMgIFllcyAgWWVzICBObyAgICAxMDAgbnMgICAgMTAuMCBNICAgICAgMTUgICAgICAwMQowMyAgMDQgIDAwICBZZXMgIFllcyAgWWVzICBZZXMgIE5vICAgIDEwMCBucyAgICAxMC4wIE0gICAgICAxNSAgICAgIDAxCgpOb3RlIHRoYXQgdGhlIHNldHRpbmdzIE1heElEIGFuZCBNYXhMVU4gYXJlIG5vdCB6ZXJvLSBidXQgb25lLWJhc2VkLCB3aGljaAptZWFucyB0aGF0IGEgc2V0dGluZyBNYXhMVU49NCwgd2lsbCByZXN1bHQgaW4gdGhlIHN1cHBvcnQgb2YgTFVOcyAwLi4zLiBUaGlzCmlzIHNvbWVob3cgaW5jb252ZW5pZW50LCBidXQgdGhlIHdheSB0aGUgbWlkLWxldmVsIFNDU0kgY29kZSBleHBlY3RzIGl0IHRvIGJlLgoKQUNCIGFuZCBEQ0IgYXJlIGFjcm9ueW1zIGZvciBBZGFwdGVyIENvbnRyb2wgQmxvY2sgYW5kIERldmljZSBDb250cm9sIEJsb2NrLgpUaGVzZSBhcmUgZGF0YSBzdHJ1Y3R1cmVzIG9mIHRoZSBkcml2ZXIgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKYWRhcHRlciBhbmQgdGhlIGNvbm5lY3RlZCBTQ1NJIGRldmljZXMgcmVzcGVjdGl2ZWx5LgoKSWR4IGlzIHRoZSBkZXZpY2UgaW5kZXggKGp1c3QgYSBjb25zZWN1dGl2ZSBudW1iZXIgZm9yIHRoZSBkcml2ZXIpLCBJRCBhbmQKTFVOIGFyZSB0aGUgU0NTSSBJRCBhbmQgTFVOLCBQcnR5IG1lYW5zIFBhcml0eSBjaGVja2luZywgU3luYyBzeW5jaHJvbm91cwpuZWdvdGlhdGlvbiwgRHNDbiBEaXNjb25uZWN0aW9uLCBTbmRTIFNlbmQgU3RhcnQgY29tbWFuZCBvbiBzdGFydHVwIChub3QKdXNlZCBieSB0aGUgZHJpdmVyKSBhbmQgVGFnUSBUYWdnZWQgQ29tbWFuZCBRdWV1ZWluZy4gTmVnb1BlcmlvZCBhbmQKU3luY1NwZWVkIGFyZSBzb21laG93IHJlZHVuZGFudCwgYmVjYXVzZSB0aGV5IGFyZSByZWNpcHJvY2FsIHZhbHVlcyAKKDEgLyAxMTIgbnMgPSA4LjkgTUh6KS4gQXQgbGVhc3QgaW4gdGhlb3J5LiBUaGUgZHJpdmVyIGlzIGFibGUgdG8gYWRqdXN0IHRoZQpOZWdvUGVyaW9kIG1vcmUgYWNjdXJhdGUgKDRucykgdGhhbiB0aGUgU3luY1NwZWVkICgxIC8gMjVucykuIEkgZG9uJ3Qga25vdwppZiBjZXJ0YWluIGRldmljZXMgd2lsbCBoYXZlIHByb2JsZW1zIHdpdGggdGhpcyBkaXNjcmVwYW5jeS4gTWF4LiBzcGVlZCBpcwoxMCBNSHogY29ycmVzcC4gdG8gYSBtaW4uIE5lZ29QZXJpb2Qgb2YgMTAwIG5zLiAKKFRoZSBkcml2ZXIgYWxsb3dzIHNsaWdodGx5IGhpZ2hlciBzcGVlZHMgaWYgdGhlIGRldmljZXMgKFVsdHJhIFNDU0kpIGFjY2VwdAppdCwgYnV0IHRoYXQncyBvdXQgb2YgYWRhcHRlciBzcGVjLCBvbiB5b3VyIG93biByaXNrIGFuZCB1bmxpa2VseSB0byBpbXByb3ZlCnBlcmZvcm1hbmNlLiBZb3UncmUgbGlrZWx5IHRvIGNyYXNoIHlvdXIgZGlza3MuKSAKU3luY09mZnMgaXMgdGhlIG9mZnNldCB1c2VkIGZvciBzeW5jaHJvbm91cyBuZWdvdGlhdGlvbnM7IG1heC4gaXMgMTUuIApUaGUgbGFzdCB2YWx1ZXMgYXJlIG9ubHkgc2hvd24sIGlmIFN5bmMgaXMgZW5hYmxlZC4gKE5lZ29QZXJpb2QgaXMgc3RpbGwKZGlzcGxheWVkIGluIGJyYWNrZXRzIHRvIHNob3cgdGhlIHZhbHVlcyB3aGljaCB3aWxsIGJlIHVzZWQgYWZ0ZXIgZW5hYmxpbmcKU3luYy4pCk1heENtZCBpc3QgdGhlIG51bWJlciBvZiBjb21tYW5kcyAoPXRhZ3MpIHdoaWNoIGNhbiBiZSBwcm9jZXNzZWQgYXQgdGhlIHNhbWUKdGltZSBieSB0aGUgZGV2aWNlLgoKSWYgeW91IHdhbnQgdG8gY2hhbmdlIGEgc2V0dGluZywgeW91IGNhbiBkbyB0aGF0IGJ5IHdyaXRpbmcgdG8KL3Byb2Mvc2NzaS90bXNjc2ltLz8uIEJhc2ljYWxseSB5b3UgaGF2ZSB0byBpbWl0YXRlIHRoZSBvdXRwdXQgb2YgZHJpdmVyLgooRG9uJ3QgdXNlIHRoZSBicmFja2V0cyBmb3IgTmVnb1BlcmlvZCBvbiBTeW5jIGRpc2FibGVkIGRldmljZXMuKQpZb3UgZG9uJ3QgaGF2ZSB0byBjYXJlIGFib3V0IGNhcGl0YWxpc2F0aW9uLiBUaGUgZHJpdmVyIHdpbGwgYWNjZXB0IHNwYWNlLAp0YWIsIGNvbW1hLCA9IGFuZCA6IGFzIHNlcGFyYXRvcnMuCgpUaGVyZSBhcmUgdGhyZWUga2luZHMgb2YgY2hhbmdlczogCgooMSkgQ2hhbmdlIGRyaXZlciBzZXR0aW5nczogCiAgICBZb3UgdHlwZSB0aGUgbmFtZXMgb2YgdGhlIHBhcmFtZXRlcnMgYW5kIHRoZSBwYXJhbXMgZm9sbG93aW5nIGl0LgogICAgRXhhbXBsZToKICAgICBlY2hvICJNYXhMVU49OCBzZWx0aW1lb3V0IDIwMCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCgogICAgTm90ZSB0aGF0IHlvdSBjYW4gb25seSBjaGFuZ2UgTWF4SUQsIE1heExVTiwgQWRhcHRlcklELCBTZWxUaW1lT3V0LAogICAgVGFnTWF4TnVtLCBBQ0JGbGFnLCBHbGl0Y2hFYXRlciBhbmQgRGVsYXlSZXNldC4gRG9uJ3QgY2hhbmdlIEFDQkZsYWcKICAgIHVubGVzcyB5b3Ugd2FudCB0byBzZWUgd2hhdCBoYXBwZW5zLCBpZiB0aGUgZHJpdmVyIGhhbmdzLgoKKDIpIENoYW5nZSBkZXZpY2Ugc2V0dGluZ3M6IFlvdSB3cml0ZSBhIGNvbmZpZyBsaW5lIHRvIHRoZSBkcml2ZXIuIFRoZSBOcgogICAgbXVzdCBtYXRjaCB0aGUgSUQgYW5kIExVTiBnaXZlbi4gSWYgeW91IGdpdmUgIi0iIGFzIHBhcmFtZXRlciwgaXQgaXMKICAgIGlnbm9yZWQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHNldHRpbmcgd29uJ3QgYmUgY2hhbmdlZC4gCiAgICBZb3UgY2FuIHVzZSAieSIgb3IgIm4iIGluc3RlYWQgb2YgIlllcyIgYW5kICJObyIgaWYgeW91IHdhbnQgdG8uCiAgICBZb3UgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGEgZnVsbCBsaW5lLiBUaGUgZHJpdmVyIGF1dG9tYXRpY2FsbHkgcGVyZm9ybXMKICAgIGFuIElOUVVJUlkgb24gdGhlIGRldmljZSBpZiBuZWNlc3NhcnkgdG8gY2hlY2sgaWYgaXQgaXMgY2FwYWJsZSB0byBvcGVyYXRlCiAgICB3aXRoIHRoZSBnaXZlbiBzZXR0aW5ncyAoU3luYywgVGFnUSkuCiAgICBFeGFtcGxlczoKICAgICBlY2hvICIwIDAgMCB5IHkgeSAtIHkgLSAxMCAiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAogICAgIGVjaG8gIjMgNSAwIHkgbiB5ICIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCgogICAgVG8gZ2l2ZSBhIHNob3J0IGV4cGxhbmF0aW9uIG9mIHRoZSBmaXJzdCBleGFtcGxlOiAKICAgIFRoZSBmaXJzdCB0aHJlZSBudW1iZXJzLCAiMCAwIDAiIChEZXZpY2UgaW5kZXggMCwgU0NTSSBJRCAwLCBTQ1NJIExVTiAwKSwKICAgIHNlbGVjdCB0aGUgZGV2aWNlIHRvIHdoaWNoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcHBseS4gTm90ZSB0aGF0IGl0CiAgICB3b3VsZCBiZSBzdWZmaWNpZW50IHRvIHVzZSB0aGUgaW5kZXggb3IgYm90aCBTQ1NJIElEIGFuZCBMVU4sIGJ1dCBJIGNob3NlCiAgICB0byByZXF1aXJlIGFsbCB0aHJlZSB0byBoYXZlIGEgc3ludGF4IHNpbWlsYXIgdG8gdGhlIG91dHB1dC4KICAgIFRoZSBmb2xsb3dpbmcgInkgeSB5IC0geSIgZW5hYmxlcyBQYXJpdHkgY2hlY2tpbmcsIGVuYWJsZXMgU3luY2hyb25vdXMKICAgIHRyYW5zZmVycywgRGlzY29ubmVjdGlvbiwgbGVhdmVzIFNlbmQgU3RhcnQgKG5vdCB1c2VkKSB1bnRvdWNoZWQgYW5kCiAgICBlbmFibGVzIFRhZ2dlZCBDb21tYW5kIFF1ZXVlaW5nIGZvciB0aGUgc2VsZWN0ZWQgZGV2aWNlLiBUaGUgIi0iIHNraXBzCiAgICB0aGUgTmVnb3RpYXRpb24gUGVyaW9kIHNldHRpbmcgYnV0IHRoZSAiMTAiIHNldHMgdGhlIG1heCBzeW5jLiBzcGVlZCB0bwogICAgMTAgTUh6LiBJdCdzIHVzZWxlc3MgdG8gc3BlY2lmeSBib3RoIE5lZ29QZXJpb2QgYW5kIFN5bmNTcGVlZCBhcwogICAgZGlzY3Vzc2VkIGFib3ZlLiBUaGUgdmFsdWVzIHVzZWQgaW4gdGhpcyBleGFtcGxlIHdpbGwgcmVzdWx0IGluIG1heGltdW0KICAgIHBlcmZvcm1hbmNlLgoKKDMpIFNwZWNpYWwgY29tbWFuZHM6IFlvdSBjYW4gZm9yY2UgYSBTQ1NJIGJ1cyByZXNldCwgYW4gSU5RVUlSWSBjb21tYW5kLCB0aGUKICAgIHJlbW92YWwgb3IgdGhlIGFkZGl0aW9uIG9mIGEgZGV2aWNlJ3MgRENCIGFuZCBhIFNDU0kgcmVnaXN0ZXIgZHVtcC4KICAgIFRoaXMgaXMgb25seSB1c2VkIGZvciBkZWJ1Z2dpbmcgd2hlbiB5b3UgbWVldCBwcm9ibGVtcy4gVGhlIHBhcmFtZXRlciBvZgogICAgdGhlIElOUVVJUlkgYW5kIFJFTU9WRSBjb21tYW5kcyBpcyB0aGUgZGV2aWNlIGluZGV4IGFzIHNob3duIGJ5IHRoZQogICAgb3V0cHV0IG9mIC9wcm9jL3Njc2kvdG1zY3NpbS8/IGluIHRoZSBkZXZpY2UgbGlzdGluZyBpbiB0aGUgZmlyc3QgY29sdW1uCiAgICAoSWR4KS4gQUREIHRha2VzIHRoZSBTQ1NJIElEIGFuZCBMVU4uCiAgICBFeGFtcGxlczoKICAgICBlY2hvICJyZXNldCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCiAgICAgZWNobyAiaW5xdWlyeSAxIiA+L3Byb2Mvc2NzaS90bXNjc2ltLzAKICAgICBlY2hvICJyZW1vdmUgMiIgPi9wcm9jL3Njc2kvdG1zY3NpbS8xCiAgICAgZWNobyAiYWRkIDIgMyIgPi9wcm9jL3Njc2kvdG1zY3NpbS8/CiAgICAgZWNobyAiZHVtcCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCgogICAgTm90ZSB0aGF0IHlvdSB3aWxsIG1lZXQgcHJvYmxlbXMgd2hlbiB5b3UgUkVNT1ZFIGEgZGV2aWNlJ3MgRENCIHdpdGggdGhlCiAgICByZW1vdmUgY29tbWFuZCBpZiBpdCBjb250YWlucyBwYXJ0aXRpb25zIHdoaWNoIGFyZSBtb3VudGVkLiBPbmx5IHVzZSBpdAogICAgYWZ0ZXIgdW5tb3VudGluZyBpdHMgcGFydGl0aW9ucywgdGVsbGluZyB0aGUgU0NTSSBtaWQtbGV2ZWwgY29kZSB0bwogICAgcmVtb3ZlIGl0IChzY3NpIHJlbW92ZS1zaW5nbGUtZGV2aWNlKSBhbmQgeW91IHJlYWxseSBuZWVkIGEgZmV3IGJ5dGVzIG9mCiAgICBtZW1vcnkuCiAgICBUaGUgQUREIGNvbW1hbmQgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgYSBkZXZpY2UgYmVmb3JlIHlvdSB0ZWxsIHRoZQogICAgbWlkLWxldmVsIGNvZGUgdG8gdHJ5IGRldGVjdGlvbi4KCgpJJ2Qgc3VnZ2VzdCByZXZpZXdpbmcgdGhlIG91dHB1dCBvZiAvcHJvYy9zY3NpL3Rtc2NzaW0vPyBhZnRlciBjaGFuZ2luZwpzZXR0aW5ncyB0byBzZWUgaWYgZXZlcnl0aGluZyBjaGFuZ2VkIGFzIHJlcXVlc3RlZC4KCgo1LiBDb25maWd1cmF0aW9uIHZpYSBib290L21vZHVsZSBwYXJhbWV0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2l0aCB0aGUgREMzOTAsIHRoZSBkcml2ZXIgcmVhZHMgaXRzIEVFUFJPTSBzZXR0aW5ncyBhbmQgdHJpZXMgdG8gdXNlIHRoZW0uCkJ1dCB5b3UgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIHNldHRpbmdzIHByaW9yIHRvIGJlaW5nIGFibGUgdG8gY2hhbmdlIHRoZQpkcml2ZXIgY29uZmlndXJhdGlvbiB2aWEgL3Byb2Mvc2NzaS90bXNjc2ltLz8uCklmIHlvdSBkbyBoYXZlIGFub3RoZXIgQU01M0M5NzQgYmFzZWQgYWRhcHRlciwgdGhhdCdzIGV2ZW4gdGhlIG9ubHkKcG9zc2liaWxpdHkgdG8gYWRqdXN0IHNldHRpbmdzIGJlZm9yZSB5b3UgYXJlIGFibGUgdG8gd3JpdGUgdG8gdGhlCi9wcm9jL3Njc2kvdG1zY3NpbS8/IHBzZXVkby1maWxlLCBlLmcuIGlmIHlvdSB3YW50IHRvIHVzZSBhbm90aGVyIAphZGFwdGVyIElEIHRoYW4gNy4gIAooQlRXLCB0aGUgbG9nIG1lc3NhZ2UgIkRDMzkwOiBObyBFRVBST00gZm91bmQhIiBpcyBub3JtYWwgd2l0aG91dCBhIERDMzkwLikKRm9yIHRoaXMgcHVycG9zZSwgeW91IGNhbiBwYXNzIG9wdGlvbnMgdG8gdGhlIGRyaXZlciBiZWZvcmUgaXQgaXMgaW5pdGlhbGlzZWQKYnkgdXNpbmcga2VybmVsIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLiBTZWUgbGlsbyg4KSBvciBtb2Rwcm9iZSgxKSBtYW51YWwKcGFnZXMgb24gaG93IHRvIHBhc3MgcGFyYW1zIHRvIHRoZSBrZXJuZWwgb3IgYSBtb2R1bGUuCltOT1RFOiBGb3JtZXJseSwgaXQgd2FzIG5vdCBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgRUVQUk9NIHN1cHBsaWVkCiBzZXR0aW5ncyBvZiB0aGUgREMzOTAgd2l0aCBjbWQgbGluZSBwYXJhbWV0ZXJzLiBUaGlzIGhhcyBjaGFuZ2VkIHNpbmNlCiAyLjBlN10KClRoZSBzeW50YXggb2YgdGhlIHBhcmFtcyBpcyBtdWNoIHNob3J0ZXIgdGhhbiB0aGUgc3ludGF4IG9mIHRoZSAvcHJvYy8uLi4KaW50ZXJmYWNlLiBUaGlzIG1ha2VzIGl0IGEgbGl0dGxlIGJpdCBtb3JlIGRpZmZpY3VsdCB0byB1c2UuIEhvd2V2ZXIsIGxvbmcKcGFyYW1ldGVyIGxpbmVzIGhhdmUgdGhlIHJpc2sgdG8gYmUgbWlzaW50ZXJwcmV0ZWQgYW5kIHRoZSBsZW5ndGggb2Yga2VybmVsCnBhcmFtZXRlcnMgaXMgbGltaXRlZC4KCkFzIHRoZSBzdXBwb3J0IGZvciBub24tREMzOTAgYWRhcHRlcnMgd29ya3MgYnkgc2ltdWxhdGluZyB0aGUgdmFsdWVzIG9mIHRoZQpEQzM5MCBFRVBST00sIHRoZSBzZXR0aW5ncyBhcmUgZ2l2ZW4gaW4gYSBEQzM5MCBCSU9TJyB3YXkuCgpIZXJlJ3MgdGhlIHN5bnRheDoKdG1zY3NpbT1BZGFwdElELFNwZElkeCxEZXZNb2RlLEFkYXB0TW9kZSxUYWdnZWRDbW5kcyxEZWxheVJlc2V0CgpFYWNoIG9mIHRoZSBwYXJhbWV0ZXJzIGlzIGEgbnVtYmVyLCBjb250YWluaW5nIHRoZSBkZXNjcmliZWQgaW5mb3JtYXRpb246CgoqIEFkYXB0SUQ6IFRoZSBTQ1NJIElEIG9mIHRoZSBob3N0IGFkYXB0ZXIuIE11c3QgYmUgaW4gdGhlIHJhbmdlIDAuLjcKICBEZWZhdWx0IGlzIDcuCgoqIFNwZElkeDogVGhlIGluZGV4IG9mIHRoZSBtYXhpbXVtIHNwZWVkIGFzIGluIHRoZSBEQzM5MCBCSU9TLiBUaGUgdmFsdWVzCiAgMC4uNyBtZWFuIDEwLCA4LjAsIDYuNywgNS43LCA1LjAsIDQuMCwgMy4xIGFuZCAyIE1IeiByZXNwLiBEZWZhdWx0IGlzCiAgMCAoMTAuMCBNSHopLgoKKiBEZXZNb2RlIGlzIGEgYml0IG1hcHBlZCB2YWx1ZSBkZXNjcmliaW5nIHRoZSBwZXItZGV2aWNlIGZlYXR1cmVzLiBJdAogIGFwcGxpZXMgdG8gYWxsIGRldmljZXMuIChTeW5jLCBEaXNjIGFuZCBUYWdRIHdpbGwgb25seSBhcHBseSwgaWYgdGhlCiAgZGV2aWNlIHN1cHBvcnRzIGl0LikgVGhlIG1lYW5pbmcgb2YgdGhlIGJpdHMgKCogPSBkZWZhdWx0KToKCiAgIEJpdCBWYWwoaGV4KSBWYWwoZGVjKSAgTWVhbmluZwogICAqMAkgMHgwMQkgICAgMQkgIFBhcml0eSBjaGVjawogICAqMQkgMHgwMgkgICAgMgkgIFN5bmNocm9ub3VzIE5lZ290aWF0aW9uCiAgICoyCSAweDA0CSAgICA0CSAgRGlzY29ubmVjdGlvbgogICAqMwkgMHgwOAkgICAgOAkgIFNlbmQgU3RhcnQgY29tbWFuZCBvbiBzdGFydHVwLiAoTm90IHVzZWQpCiAgICo0CSAweDEwCSAgIDE2CSAgVGFnZ2VkIENvbW1hbmQgUXVldWVpbmcKCiAgQXMgdXN1YWwsIHRoZSBkZXNpcmVkIHZhbHVlIGlzIG9idGFpbmVkIGJ5IGFkZGluZyB0aGUgd2FudGVkIHZhbHVlcy4gSWYKICB5b3Ugd2FudCB0byBlbmFibGUgYWxsIHZhbHVlcywgZS5nLiwgeW91IHdvdWxkIHVzZSAzMSgweDFmKS4gRGVmYXVsdCBpcyAzMS4KCiogQWRhcHRNb2RlIGlzIGEgYml0IG1hcHBlZCB2YWx1ZSBkZXNjcmliaW5nIHRoZSBlbmFibGVkIGFkYXB0ZXIgZmVhdHVyZXMuCgogICBCaXQgVmFsKGhleCkgVmFsKGRlYykgIE1lYW5pbmcKICAgKjAJIDB4MDEJICAgIDEJICBTdXBwb3J0IG1vcmUgdGhhbiB0d28gZHJpdmVzLiAoTm90IHVzZWQpCiAgICoxCSAweDAyCSAgICAyCSAgVXNlIERPUyBjb21wYXRpYmxlIG1hcHBpbmcgZm9yIEhEcyBncmVhdGVyIHRoYW4gMUdCLgogICAqMgkgMHgwNAkgICAgNAkgIFJlc2V0IFNDU0kgQnVzIG9uIHN0YXJ0dXAuCiAgICozCSAweDA4CSAgICA4CSAgQWN0aXZlIE5lZ2F0aW9uOiBJbXByb3ZlcyBTQ1NJIEJ1cyBub2lzZSBpbW11bml0eS4KICAgIDQJIDB4MTAJICAgMTYJICBJbW1lZGlhdGUgcmV0dXJuIG9uIEJJT1Mgc2VlayBjb21tYW5kLiAoTm90IHVzZWQpCiAoKik1CSAweDIwCSAgIDMyCSAgQ2hlY2sgZm9yIExVTnMgPj0gMS4KICAKICBUaGUgZGVmYXVsdCBmb3IgTFVOIENoZWNrIGRlcGVuZHMgb24gQ09ORklHX1NDU0lfTVVMVElfTFVOLgoKKiBUYWdnZWRDbW5kcyBpcyBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtIG51bWJlciBvZiBUYWdnZWQgQ29tbWFuZHMuCiAgSXQgaXMgdGhlIGJpbmFyeSBsb2dhcml0aG0gLSAxIG9mIHRoZSBhY3R1YWwgbnVtYmVyLiBNYXggaXMgNCAoMzIpLgogICBWYWx1ZSAgTnVtYmVyIG9mIFRhZ2dlZCBDb21tYW5kcwogICAgIDAJCSAyCiAgICAgMQkJIDQKICAgICAyCQkgOAogICAgKjMJCTE2CiAgICAgNAkJMzIKCiogRGVsYXlSZXNldCBpcyB0aGUgdGltZSBpbiBzZWNvbmRzIChtaW51cyAwLjVzKSwgdGhlIGFkYXB0ZXIgd2FpdHMsIGFmdGVyIGEKICBidXMgcmVzZXQuIERlZmF1bHQgaXMgMSAoY29ycmVzcC4gdG8gMS41cykuCgpFeGFtcGxlOgogbW9kcHJvYmUgdG1zY3NpbSB0bXNjc2ltPTYsMiwzMQp3b3VsZCBzZXQgdGhlIGFkYXB0ZXIgSUQgdG8gNiwgbWF4LiBzcGVlZCB0byA2LjcgTUh6LCBlbmFibGUgYWxsIGRldmljZQpmZWF0dXJlcyBhbmQgbGVhdmUgdGhlIGFkYXB0ZXIgZmVhdHVyZXMsIHRoZSBudW1iZXIgb2YgVGFnZ2VkIENvbW1hbmRzCmFuZCB0aGUgRGVsYXkgYWZ0ZXIgYSByZXNldCB0byB0aGUgZGVmYXVsdHMuCgpBcyB5b3UgY2FuIHNlZSwgeW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhbGwgb2YgdGhlIHNpeCBwYXJhbXMuCklmIHlvdSB3YW50IHZhbHVlcyB0byBiZSBpZ25vcmVkIChpLmUuIHRoZSBFRXByb20gc2V0dGluZ3Mgb3IgdGhlIGRlZmF1bHRzCndpbGwgYmUgdXNlZCksIHlvdSBtYXkgcGFzcyAtMiAobm90IDAhKSBhdCB0aGUgY29ycmVzcG9uZGluZyBwb3NpdGlvbi4KClRoZSBkZWZhdWx0cyAoNywwLDMxLDE1LDMsMSkgYXJlIGFnZ3Jlc3NpdmUgdG8gYWxsb3cgZ29vZCBwZXJmb3JtYW5jZS4gWW91CmNhbiB1c2UgdG1zY3NpbT03LDAsMzEsNjMsNCwwIGZvciBtYXhpbXVtIHBlcmZvcm1hbmNlLCBpZiB5b3VyIFNDU0kgY2hhaW4KYWxsb3dzIGl0LiBJZiB5b3UgbWVldCBwcm9ibGVtcywgeW91IGNhbiB1c2UgdG1zY3NpbT0tMSB3aGljaCBpcyBhIHNob3J0Y3V0CmZvciB0bXNjc2ltPTcsNCw5LDE1LDIsMTAuCgoKNi4gUG90ZW50aWFsIGltcHJvdmVtZW50cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vc3Qgb2YgdGhlIGludGVuZGVkIHdvcmsgb24gdGhlIGRyaXZlciBoYXMgYmVlbiBkb25lLiBIZXJlIGFyZSBhIGZldyBpZGVhcwp0byBmdXJ0aGVyIGltcHJvdmUgaXRzIHVzYWJpbGl0eToKCiogQ2xlYW5seSBzZXBhcmF0ZSBwZXItVGFyZ2V0IGFuZCBwZXItTFVOIHByb3BlcnRpZXMgKERDQikKKiBNb3JlIGludGVsbGlnZW50IGFib3J0KCkgcm91dGluZQoqIFVzZSBuZXdfZWggY29kZSAoTGludXgtMi4xKykKKiBIYXZlIHRoZSBtaWQtbGV2ZWwgKE1MKSBjb2RlIChhbmQgbm90IHRoZSBkcml2ZXIpIGhhbmRsZSBtb3JlIG9mIHRoZQogIHZhcmlvdXMgY29uZGl0aW9ucy4KKiBDb21tYW5kIHF1ZXVlaW5nIGluIHRoZSBkcml2ZXI6IEVsaW1pbmF0ZSBRdWVyeSBsaXN0IGFuZCB1c2UgTUwgaW5zdGVhZC4KKiBNb3JlIHVzZXIgZnJpZW5kbHkgYm9vdC9tb2R1bGUgcGFyYW0gc3ludGF4CgpGdXJ0aGVyIGludmVzdGlnYXRpb24gb24gdGhlc2UgcHJvYmxlbXM6CgoqIERyaXZlciBoYW5ncyB3aXRoIHN5bmMgcmVhZGNkZGEgKHhjZHJvYXN0KSAobW9zdCBwcm9iYWJseSBWSUEgUENJIGVycm9yKQoKS25vd24gcHJvYmxlbXM6IApQbGVhc2Ugc2VlIGh0dHA6Ly93d3cuZ2FybG9mZi5kZS9rdXJ0L2xpbnV4L2RjMzkwL3Byb2JsZW1zLmh0bWwKCiogQ2hhbmdpbmcgdGhlIHBhcmFtZXRlcnMgb2YgbXVsdGktbHVuIGJ5IHRoZSB0bXNjc2ltLz8gaW50ZXJmYWNlIHdpbGwKICBjYXVzZSBwcm9ibGVtcywgY2F1c2UgdGhlc2Ugc2V0dGluZ3MgYXJlIG1vc3RseSBwZXIgVGFyZ2V0IGFuZCBub3QgcGVyIExVTgogIGFuZCBzaG91bGQgYmUgdXBkYXRlZCBhY2NvcmRpbmdseS4gVG8gYmUgZml4ZWQgZm9yIDIuMGQyNC4KKiBDRFJzIChlZyBZYW0gQ1JXNDQxNikgbm90IHJlY29nbml6ZWQsIGJlY2F1c2Ugc29tZSBidWdneSBkZXZpY2VzIGRvbid0IAogIHJlY292ZXIgZnJvbSBhIFNDU0kgcmVzZXQgaW4gdGltZS4gVXNlIGEgaGlnaGVyIGRlbGF5IG9yIGRvbid0IGlzc3VlCiAgYSBTQ1NJIGJ1cyByZXNldCBvbiBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIFNlZSBwcm9ibGVtcyBwYWdlLgogIEZvciB0aGUgQ1JXNDQxNlMsIHRoaXMgc2VlbXMgdG8gYmUgc29sdmVkIHdpdGggZmlybXdhcmUgMS4wZyAocmVwb3J0ZWQgYnkgCiAgSmVhbi1ZdmVzIEJhcmJpZXIpLgoqIFRFQUMgQ0QtNTMyUyBub3QgYmVpbmcgcmVjb2duaXplZC4gKFdvcmtzIHdpdGggMS4xMSkuCiogU2Nhbm5lcnMgKGVnLiBBc3RyYSBVTUFYIDEyMjBTKSBkb24ndCB3b3JrOiBEaXNhYmxlIFN5bmMgTmVnb3RpYXRpb24uCiAgSWYgdGhpcyBkb2VzIG5vdCBoZWxwLCB0cnkgZWNobyAiSU5RVUlSWSB0IiA+L3Byb2Mvc2NzaS90bXNjc2ltLz8gKHQKICByZXBsYWNlZCBieSB0aGUgZGV2IGluZGV4IG9mIHlvdXIgc2Nhbm5lcikuIFlvdSBtYXkgdHJ5IHRvIHJlc2V0IHlvdXIgU0NTSQogIGJ1cyBhZnRlcndhcmRzIChlY2hvICJSRVNFVCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8/KS4KICBUaGUgcHJvYmxlbSBzZWVtcyB0byBiZSBzb2x2ZWQgYXMgb2YgMi4wZDE4LCB0aGFua3MgdG8gQW5kcmVhcyBSaWNrLgoqIElmIHRoZXJlIGlzIGEgdmFsaWQgcGFydGl0aW9uIHRhYmxlLCB0aGUgZHJpdmVyIHdpbGwgdXNlIGl0IGZvciBkZXRlcm1pbmcKICB0aGUgbWFwcGluZy4gSWYgdGhlcmUncyBub25lLCBhIHJlYXNvbmFibGUgbWFwcGluZyAoU3ltYmlvcy1saWtlKSB3aWxsIGJlCiAgYXNzdW1lZC4gT3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgbWF5IG5vdCBsaWtlIHRoaXMgbWFwcGluZywgdGhvdWdoCiAgaXQncyBjb25zaXN0ZW50IHdpdGggdGhlIEJJT1MnIGJlaGF2aW91ci4gT2xkIERDMzkwIGRyaXZlcnMgaWdub3JlZCB0aGUKICBwYXJ0aXRpb24gdGFibGUgYW5kIHVzZWQgYSBIL1MgPSA2NC8zMiBvciAyNTUvNjMgdHJhbnNsYXRpb24uIFNvIGlmIHlvdQogIHdhbnQgdG8gYmUgY29tcGF0aWJsZSB0byB0aG9zZSwgdXNlIHRoaXMgb2xkIG1hcHBpbmcgd2hlbiBjcmVhdGluZwogIHBhcnRpdGlvbiB0YWJsZXMuIEV2ZW4gd29yc2UsIG9uIGJvb3R1cCB0aGUgREMzOTAgbWlnaHQgY29tcGxhaW4gaWYgb3RoZXIKICBtYXBwaW5ncyBhcmUgZm91bmQsIHNvIGF1dG8gcmVib290aW5nIG1heSBmYWlsLgoqIEluIHNvbWUgc2l0dWF0aW9ucywgdGhlIGRyaXZlciB3aWxsIGdldCBzdHVjayBpbiBhbiBhYm9ydCBsb29wLiBUaGlzIGlzIGEKICBiYWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgTWlkLUxheWVyIG9mIExpbnV4JyBTQ1NJIGNvZGUgYW5kIHRoZSBkcml2ZXIuCiAgVHJ5IHRvIGRpc2FibGUgRHNDbiwgaWYgeW91IG1lZXQgdGhpcyBwcm9ibGVtLiBQbGVhc2UgY29udGFjdCBtZSBmb3IKICBmdXJ0aGVyIGRlYnVnZ2luZy4KCgo3LiBCdWcgcmVwb3J0cywgZGVidWdnaW5nIGFuZCB1cGRhdGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2hlbmV2ZXIgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCB0aGUgZHJpdmVyLCB5b3UgYXJlIGludml0ZWQgdG8gYXNrIHRoZQphdXRob3IgZm9yIGhlbHAuIEhvd2V2ZXIsIEknZCBzdWdnZXN0IHJlYWRpbmcgdGhlIGRvY3MgYW5kIHRyeWluZyB0byBzb2x2ZQp0aGUgcHJvYmxlbSB5b3Vyc2VsZiwgZmlyc3QuIApJZiB5b3UgZmluZCBzb21ldGhpbmcsIHdoaWNoIHlvdSBiZWxpZXZlIHRvIGJlIGEgYnVnLCBwbGVhc2UgcmVwb3J0IGl0IHRvIG1lLiAKUGxlYXNlIGFwcGVuZCB0aGUgb3V0cHV0IG9mIC9wcm9jL3Njc2kvc2NzaSwgL3Byb2Mvc2NzaS90bXNjc2ltLz8gYW5kCm1heWJlIHRoZSBEQzM5MCBsb2cgbWVzc2FnZXMgdG8gdGhlIHJlcG9ydC4gCgpCdWcgcmVwb3J0cyBzaG91bGQgYmUgc2VuZCB0byBtZSAoS3VydCBHYXJsb2ZmIDxkYzM5MEBnYXJsb2ZmLmRlPikgYXMgd2VsbAphcyB0byB0aGUgbGludXgtc2NzaSBsaXN0ICg8bGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmc+KSwgYXMgc29tZXRpbWVzIGJ1Z3MKYXJlIGNhdXNlZCBieSB0aGUgU0NTSSBtaWQtbGV2ZWwgY29kZS4KCkkgd2lsbCBhc2sgeW91IGZvciBzb21lIG1vcmUgZGV0YWlscyBhbmQgcHJvYmFibHkgSSB3aWxsIGFsc28gYXNrIHlvdSB0bwplbmFibGUgc29tZSBvZiB0aGUgREVCVUcgb3B0aW9ucyBpbiB0aGUgZHJpdmVyICh0bXNjc2ltLmM6REMzOTBfREVCVUdYWFgKZGVmaW5lcykuIFRoZSBkcml2ZXIgd2lsbCBwcm9kdWNlIHNvbWUgZGF0YSBmb3IgdGhlIHN5c2xvZyBmYWNpbGl0eSB0aGVuLgpCZXdhcmU6IElmIHlvdXIgc3lzbG9nIGdldHMgd3JpdHRlbiB0byBhIFNDU0kgZGlzayBjb25uZWN0ZWQgdG8geW91cgpBTTUzQzk3NCwgdGhlIGxvZ2dpbmcgbWlnaHQgcHJvZHVjZSBsb2cgb3V0cHV0IGFnYWluLCBhbmQgeW91IG1pZ2h0IGVuZApoYXZpbmcgeW91ciBib3ggc3BlbmRpbmcgbW9zdCBvZiBpdHMgdGltZSBkb2luZyB0aGUgbG9nZ2luZy4KClRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKIGh0dHA6Ly93d3cuZ2FybG9mZi5kZS9rdXJ0L2xpbnV4L2RjMzkwLwogZnRwOi8vZnRwLnN1c2UuY29tL3B1Yi9wZW9wbGUvZ2FybG9mZi9saW51eC9kYzM5MC8KCgo4LiBBY2tub3dsZWRnZW1lbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0KVGhhbmtzIHRvIExpbnVzIFRvcnZhbGRzLCBBbGFuIENveCwgdGhlIEZTRiBwZW9wbGUsIHRoZSBYRnJlZTg2IHRlYW0gYW5kIAphbGwgdGhlIG90aGVycyBmb3IgdGhlIHdvbmRlcmZ1bCBPUyBhbmQgc29mdHdhcmUuClRoYW5rcyB0byBDLkwuIEh1YW5nIGFuZCBQaGlsaXAgR2lhbmcgKFRla3JhbSkgZm9yIHRoZSBpbml0aWFsIGRyaXZlcgpyZWxlYXNlIGFuZCBzdXBwb3J0LgpUaGFua3MgdG8gRG91ZyBMZWRmb3JkLCBH6XJhcmQgUm91ZGllciBmb3Igc3VwcG9ydCB3aXRoIFNDU0kgY29kaW5nLgpUaGFua3MgdG8gYSBsb3Qgb2YgcGVvcGxlIChlc3BlYy4gQ2hpYWtpIElzaGlrYXdhLCBBbmRyZWFzIEhhdW1lciwgSHViZXJ0IApUb25uZWF1KSBmb3IgaW50ZW5zaXZlbHkgdGVzdGluZyB0aGUgZHJpdmVyIChhbmQgZXZlbiByaXNraW5nIGRhdGEgbG9zcwpkb2luZyB0aGlzIGR1cmluZyBlYXJseSByZXZpc2lvbnMpLgpSZWNlbnRseSwgU3VTRSBHbWJILCBOdWVybmJlcmcsIEZSRywgaGFzIGJlZW4gcGF5aW5nIG1lIGZvciB0aGUgZHJpdmVyCmRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZS4gU3BlY2lhbCB0aGFua3MhCgoKOS4gQ29weXJpZ2h0Ci0tLS0tLS0tLS0tLQogVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAKIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KIElmIHlvdSB3YW50IHRvIHVzZSBhbnkgbGF0ZXIgdmVyc2lvbiBvZiB0aGUgR05VIEdQTCwgeW91IHdpbGwgcHJvYmFibHkKIGJlIGFsbG93ZWQgdG8sIGJ1dCB5b3UgaGF2ZSB0byBhc2sgbWUgYW5kIFRla3JhbSA8ZXJpY2hAdGVrcmFtLmNvbS50dz4KIGJlZm9yZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV3JpdHRlbiBieSBLdXJ0IEdhcmxvZmYgPGt1cnRAZ2FybG9mZi5kZT4gMTk5OC8wNi8xMQpMYXN0IHVwZGF0ZWQgMjAwMC8xMS8yOCwgZHJpdmVyIHJldmlzaW9uIDIuMGU3CiRJZDogUkVBRE1FLnRtc2NzaW0sdiAyLjI1LjIuNyAyMDAwLzEyLzIwIDAxOjA3OjEyIGdhcmxvZmYgRXhwICQK